source: trunk/src/STGrid.h@ 2608

Last change on this file since 2608 was 2594, checked in by Takeshi Nakazato, 12 years ago

New Development: No

JIRA Issue: No

Ready for Test: Yes

Interface Changes: No

What Interface Changed: Please list interface changes

Test Programs: sdgrid unit test with sd.rcParamsscantable.storage='memory'

Put in Release Notes: Yes/No

Module(s): Module Names change impacts.

Description: Describe your changes here...

Bug fix on STGrid2.


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