source: trunk/src/STGrid.h@ 2887

Last change on this file since 2887 was 2851, checked in by Takeshi Nakazato, 11 years ago

New Development: No

JIRA Issue: No

Ready for Test: Yes

Interface Changes: No

What Interface Changed: Please list interface changes

Test Programs: test_sdgrid[sdgrid_flagging]

Put in Release Notes: No

Module(s): sd

Description: Describe your changes here...

Handle channel flags properly.


File size: 8.1 KB
RevLine 
[2356]1//
2// C++ Interface: STGrid
3//
4// Description:
5//
6//
7// Author: Takeshi Nakazato <takeshi.nakazato@nao.ac.jp>, (C) 2011
8//
9// Copyright: See COPYING file that comes with this distribution
10//
11//
12#ifndef ASAPSTGRID_H
13#define ASAPSTGRID_H
14
15#include <iostream>
16#include <fstream>
17#include <string>
[2360]18#include <vector>
[2356]19
20#include <casa/BasicSL/String.h>
[2381]21#include <casa/Arrays/Array.h>
[2356]22#include <casa/Arrays/Vector.h>
[2381]23#include <casa/Containers/RecordField.h>
[2669]24#include <casa/Utilities/CountedPtr.h>
[2356]25
26#include <tables/Tables/Table.h>
[2379]27#include <tables/Tables/ScalarColumn.h>
28#include <tables/Tables/ArrayColumn.h>
[2393]29
[2669]30#include <coordinates/Coordinates/DirectionCoordinate.h>
31
[2593]32#include "ScantableWrapper.h"
33#include "Scantable.h"
[2393]34#include "concurrent.h"
[2356]35
36using namespace std ;
37using namespace casa ;
38
39namespace asap {
40class STGrid
41{
42public:
43 STGrid() ;
44 STGrid( const string infile ) ;
[2390]45 STGrid( const vector<string> infile ) ;
[2356]46 virtual ~STGrid() {} ;
47
48 void setFileIn( const string infile ) ;
[2390]49 void setFileList( const vector<string> infile ) ;
[2356]50
[2362]51 void setIF( unsigned int ifno ) { ifno_ = ifno ; } ;
52
[2360]53 void setPolList( vector<unsigned int> pols ) ;
54
[2364]55 void setScanList( vector<unsigned int> scans ) ;
56
[2356]57 void defineImage( int nx=-1,
58 int ny=-1,
59 string scellx="",
60 string scelly="",
61 string scenter="" ) ;
[2364]62 void setFunc( string convtype="box",
[2671]63 int convsupport=-1,
64 string truncate="",
65 string gwidth="",
66 string jwidth="" ) ;
[2361]67
68 void setWeight( const string wType="uniform" ) ;
69
[2396]70 void enableClip() { doclip_ = True ; } ;
71 void disableClip() { doclip_ = False ; } ;
72
[2356]73 void grid() ;
74
75 string saveData( string outfile="" ) ;
76
[2671]77 // support function to know how grid function looks like
78 vector<float> getConvFunc();
79
[2686]80 // for plotting
81 vector<int> getResultantMapSize();
82 vector<double> getResultantCellSize();
83
[2593]84//private:
85protected:
[2356]86 void init() ;
87
[2382]88 // actual gridding
89 void gridPerRow() ;
[2396]90 void gridPerRowWithClipping() ;
[2382]91
[2396]92 // clipping
93 void clipMinMax( Array<Complex> &data,
94 Array<Float> &weight,
95 Array<Int> &npoints,
96 Array<Complex> &clipmin,
97 Array<Float> &clipwmin,
98 Array<Float> &clipcmin,
99 Array<Complex> &clipmax,
100 Array<Float> &clipwmax,
101 Array<Float> &clipcmax ) ;
102
103
[2388]104 void setupGrid() ;
[2356]105 void setupGrid( Int &nx,
106 Int &ny,
107 String &cellx,
108 String &celly,
109 Double &xmin,
110 Double &xmax,
111 Double &ymin,
112 Double &ymax,
113 String &center ) ;
[2388]114 void mapExtent( Double &xmin, Double &xmax,
115 Double &ymin, Double &ymax ) ;
[2368]116
[2378]117 void setData( Array<Complex> &gdata,
[2368]118 Array<Float> &gwgt ) ;
[2356]119
[2393]120 Int getDataChunk( IPosition const &wshape,
121 IPosition const &vshape,
122 IPosition const &dshape,
123 Array<Complex> &spectra,
124 Array<Double> &direction,
125 Array<Int> &flagtra,
126 Array<Int> &rflag,
127 Array<Float> &weight ) ;
[2379]128 Int getDataChunk( Array<Complex> &spectra,
129 Array<Double> &direction,
130 Array<Int> &flagtra,
131 Array<Int> &rflag,
132 Array<Float> &weight ) ;
133 Int getDataChunk( Array<Float> &spectra,
134 Array<Double> &direction,
135 Array<uChar> &flagtra,
136 Array<uInt> &rflag,
137 Array<Float> &weight ) ;
[2356]138
[2375]139 void getWeight( Array<Float> &w,
140 Array<Float> &tsys,
141 Array<Double> &tint ) ;
[2382]142
[2375]143 void toInt( Array<uChar> &u, Array<Int> &v ) ;
144 void toInt( Array<uInt> &u, Array<Int> &v ) ;
[2356]145
[2375]146 void toPixel( Array<Double> &world, Array<Double> &pixel ) ;
[2356]147
148 void boxFunc( Vector<Float> &convFunc, Int &convSize ) ;
149 void spheroidalFunc( Vector<Float> &convFunc ) ;
[2671]150 void gaussFunc( Vector<Float> &convFunc, Double hwhm, Double truncate ) ;
151 void gjincFunc( Vector<Float> &convFunc, Double hwhm, Double c, Double truncate );
[2356]152 void pbFunc( Vector<Float> &convFunc ) ;
153 void setConvFunc( Vector<Float> &convFunc ) ;
154
[2371]155 void prepareTable( Table &tab, String &name ) ;
156
[2379]157 void selectData() ;
158 void setupArray() ;
[2378]159
[2398]160 void updateChunkShape() ;
[2382]161 void attach( Table &tab ) ;
[2379]162
[2384]163 void call_ggridsd( Array<Double> &xy,
164 Array<Complex> &values,
165 Int &nvispol,
166 Int &nvischan,
167 Array<Int> &flag,
168 Array<Int> &rflag,
169 Array<Float> &weight,
170 Int &nrow,
171 Int &irow,
172 Array<Complex> &grid,
173 Array<Float> &wgrid,
174 Int &nx,
175 Int &ny,
176 Int &npol,
177 Int &nchan,
178 Int &support,
179 Int &sampling,
180 Vector<Float> &convFunc,
[2381]181 Int *chanMap,
182 Int *polMap ) ;
[2396]183 void call_ggridsd2( Array<Double> &xy,
184 Array<Complex> &values,
185 Int &nvispol,
186 Int &nvischan,
187 Array<Int> &flag,
188 Array<Int> &rflag,
189 Array<Float> &weight,
190 Int &nrow,
191 Int &irow,
192 Array<Complex> &grid,
193 Array<Float> &wgrid,
194 Array<Int> &npoints,
195 Array<Complex> &clipmin,
196 Array<Float> &clipwmin,
197 Array<Float> &clipcmin,
198 Array<Complex> &clipmax,
199 Array<Float> &clipwmax,
200 Array<Float> &clipcmax,
201 Int &nx,
202 Int &ny,
203 Int &npol,
204 Int &nchan,
205 Int &support,
206 Int &sampling,
207 Vector<Float> &convFunc,
208 Int *chanMap,
209 Int *polMap ) ;
[2379]210
[2382]211 void initPol( Int ipol ) ;
[2390]212 void initTable( uInt idx ) ;
[2386]213 Bool isMultiIF( Table &tab ) ;
[2413]214 void fillMainColumns( Table &tab ) ;
[2593]215 void fillTable( Table &tab ) ;
216 virtual void table( Table &tab, uInt i ) ;
[2393]217 static bool produceChunk(void *ctx) throw(concurrent::PCException);
218 static void consumeChunk(void *ctx) throw(concurrent::PCException);
[2396]219 static void consumeChunkWithClipping(void *ctx) throw(concurrent::PCException);
[2381]220
[2382]221
[2388]222 // user input
223 Int nxUI_ ;
224 Int nyUI_ ;
225 String cellxUI_ ;
226 String cellyUI_ ;
227 String centerUI_ ;
228
[2389]229 Block<String> infileList_ ;
[2390]230 uInt nfile_ ;
[2362]231 Int ifno_ ;
[2396]232 Bool doclip_ ;
[2393]233
[2356]234 Int nx_ ;
235 Int ny_ ;
[2361]236 Int npol_ ;
[2386]237 Int npolOrg_ ;
[2361]238 Int nchan_ ;
[2356]239 Double cellx_ ;
240 Double celly_ ;
241 Vector<Double> center_ ;
242 String convType_ ;
243 Int convSupport_ ;
244 Int userSupport_ ;
[2671]245 String gwidth_;
246 String jwidth_;
247 String truncate_;
[2356]248 Int convSampling_ ;
[2360]249 Vector<uInt> pollist_ ;
[2364]250 Vector<uInt> scanlist_ ;
[2361]251 String wtype_ ;
[2393]252 Block<Table> tableList_ ;
253 Vector<uInt> rows_ ;
254 Int nchunk_ ;
[2669]255 CountedPtr<DirectionCoordinate> dircoord_;
[2356]256
[2393]257 /////////////// gridPerRow variable
258 IPosition vshape_;
259 IPosition wshape_;
260 IPosition dshape_;
261 // loop variable
262 Int nrow_ ;
263 Array<Float> data_ ;
[2851]264 Array<uChar> flag_ ;
[2393]265
[2356]266 Table tab_ ;
[2393]267 // per pol
[2382]268 Table ptab_ ;
[2379]269 ROArrayColumn<Float> spectraCol_ ;
270 ROArrayColumn<uChar> flagtraCol_ ;
271 ROArrayColumn<Double> directionCol_ ;
272 ROScalarColumn<uInt> flagRowCol_ ;
273 ROArrayColumn<Float> tsysCol_ ;
274 ROScalarColumn<Double> intervalCol_ ;
[2393]275
[2379]276 Int nprocessed_ ;
[2381]277
278
[2393]279 double eGetData_;
280 double eToPixel_;
281 double eGGridSD_;
[2356]282};
[2593]283
284class STGrid2 : public STGrid
285{
286public:
287 STGrid2() ;
288 STGrid2( const ScantableWrapper &s ) ;
289 STGrid2( const vector<ScantableWrapper> &v ) ;
290 void setScantable( const ScantableWrapper &s ) ;
291 void setScantableList( const vector<ScantableWrapper> &v ) ;
292 void selectData() ;
293 virtual void table( Table &tab, uInt i ) ;
[2594]294 ScantableWrapper getResultAsScantable( int tp ) ;
[2593]295
296private:
297 Block<ScantableWrapper> dataList_ ;
298};
[2356]299}
300#endif
Note: See TracBrowser for help on using the repository browser.