source: trunk/src/STGrid.h @ 3106

Last change on this file since 3106 was 3106, checked in by Takeshi Nakazato, 8 years ago

New Development: No

JIRA Issue: No

Ready for Test: Yes/No?

Interface Changes: Yes/No?

What Interface Changed: Please list interface changes

Test Programs: List test programs

Put in Release Notes: Yes/No?

Module(s): Module Names change impacts.

Description: Describe your changes here...


Check-in asap modifications from Jim regarding casacore namespace conversion.

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