source: branches/hpc33/src/STGrid.h@ 2569

Last change on this file since 2569 was 2459, checked in by Kana Sugimoto, 13 years ago

merged Takeshi's fix to asapgrid and STGrid class form trunk

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