source: trunk/src/MSFiller.h @ 2291

Last change on this file since 2291 was 2291, checked in by Takeshi Nakazato, 13 years ago

New Development: No

JIRA Issue: No

Ready for Test: Yes

Interface Changes: Yes

What Interface Changed: MSFillerUtils and MSWriterUtils added

Test Programs: sd regressions, test_sdsave

Put in Release Notes: No

Module(s): Module Names change impacts.

Description: Describe your changes here...

Rewrote MSFiller and MSWriter based on TableTraverse?.
TableTraverse? is changed a bit since it doesn't work on plain table.


File size: 5.5 KB
Line 
1//
2// C++ Interface: MSFiller
3//
4// Description:
5//
6// This class is specific filler for MS format
7//
8// Takeshi Nakazato <takeshi.nakazato@nao.ac.jp>, (C) 2010
9//
10// Copyright: See COPYING file that comes with this distribution
11//
12//
13#ifndef ASAPMSFILLER_H
14#define ASAPMSFILLER_H
15
16// STL
17#include <string>
18
19// AIPS++
20#include <casa/aips.h>
21#include <casa/Utilities/CountedPtr.h>
22#include <casa/Arrays/Vector.h>
23#include <casa/Arrays/Matrix.h>
24#include <casa/Arrays/Cube.h>
25#include <casa/Logging/LogIO.h>
26#include <casa/Containers/RecordField.h>
27#include <casa/Containers/Record.h>
28#include <casa/Containers/Block.h>
29#include <casa/Quanta/MVTime.h>
30
31#include <ms/MeasurementSets/MeasurementSet.h>
32#include <ms/MeasurementSets/MSPointing.h>
33
34#include <tables/Tables/ScalarColumn.h>
35#include <tables/Tables/ArrayColumn.h>
36#include <tables/Tables/TableRow.h>
37
38#include <measures/TableMeasures/ScalarMeasColumn.h>
39#include <measures/TableMeasures/ArrayMeasColumn.h>
40#include <measures/TableMeasures/ScalarQuantColumn.h>
41#include <measures/TableMeasures/ArrayQuantColumn.h>
42
43#include "TableTraverse.h"
44#include "Scantable.h"
45#include "MathUtils.h"
46
47using namespace casa;
48
49namespace asap
50{
51
52class MSFillerUtils {
53protected:
54  template<class T> void getScalar( const String &name,
55                                    const uInt &idx,
56                                    const Table &tab,
57                                    T &val )
58  {
59    ROScalarColumn<T> col( tab, name ) ;
60    val = col( idx ) ;
61  }
62  template<class T> void getArray( const String &name,
63                                   const uInt &idx,
64                                   const Table &tab,
65                                   Array<T> &val )
66  {
67    ROArrayColumn<T> col( tab, name ) ;
68    val = col( idx ) ;
69  }
70  template<class T> void getScalarMeas( const String &name,
71                                        const uInt &idx,
72                                        const Table &tab,
73                                        T &val )
74  {
75    ROScalarMeasColumn<T> measCol( tab, name ) ;
76    val = measCol( idx ) ;
77  }
78  template<class T> void getArrayMeas( const String &name,
79                                       const uInt &idx,
80                                       const Table &tab,
81                                       Array<T> &val )
82  {
83    ROArrayMeasColumn<T> measCol( tab, name ) ;
84    val = measCol( idx ) ;
85  }
86  template<class T> void getScalarQuant( const String &name,
87                                         const uInt &idx,
88                                         const Table &tab,
89                                         Quantum<T> &val )
90  {
91    ROScalarQuantColumn<T> quantCol( tab, name ) ;
92    val = quantCol( idx ) ;
93  }
94  template<class T> void getArrayQuant( const String &name,
95                                        const uInt &idx,
96                                        const Table &tab,
97                                        Array< Quantum<T> > &val )
98  {
99    ROArrayQuantColumn<T> quantCol( tab, name ) ;
100    val = quantCol( idx ) ;
101  }
102//   template<class T> void putField( const String &name,
103//                                    TableRecord &rec,
104//                                    T &val )
105//   {
106//     RecordFieldPtr<T> rf( rec, name ) ;
107//     *rf = val ;
108//   }
109//   template<class T> void defineField( const String &name,
110//                                       TableRecord &rec,
111//                                       T &val )
112//   {
113//     RecordFieldPtr<T> rf( rec, name ) ;
114//     rf.define( val ) ;
115//   }
116  template<class T> T interp( Double x0, Double x1, Double x, T y0, T y1 )
117  {
118    Double dx0 = x - x0 ;
119    Double dx1 = x1 - x ;
120    return ( y0 * dx1 + y1 * dx0 ) / ( x1 - x0 ) ;
121  }
122  String keyTcal( const Int &feedid, const Int &spwid, const Double &time )
123  {
124    String stime = MVTime( Quantity(time,Unit("s")) ).string( MVTime::YMD ) ;
125    String sfeed = "FEED" + String::toString( feedid ) ;
126    String sspw = "SPW" + String::toString( spwid ) ;
127    return sfeed+":"+sspw+":"+stime ;
128  }
129  String keyTcal( const Int &feedid, const Int &spwid, const String &stime )
130  {
131    String sfeed = "FEED" + String::toString( feedid ) ;
132    String sspw = "SPW" + String::toString( spwid ) ;
133    return sfeed+":"+sspw+":"+stime ;
134  }
135};
136
137class MSFiller
138{
139public:
140  explicit MSFiller(CountedPtr<Scantable> stable) ;
141  virtual ~MSFiller() ;
142 
143  virtual bool open(const std::string& filename, const Record& rec) ;
144  virtual void fill() ;
145  virtual void close() ;
146 
147protected:
148 
149 
150private:
151 
152  MSFiller();
153  MSFiller(const MSFiller&);
154  MSFiller& operator=(const MSFiller&);
155
156  // fill subtables
157  //void fillFrequencies() ;
158  //void fillMolecules() ;
159  void fillWeather() ;
160  void fillFocus() ;
161  //void fillHistory() ;
162  //void fillFit() ;
163  void fillTcal() ;
164
165  // create key for TCAL table
166  String keyTcal( Int feedid, Int spwid, String stime ) ;
167
168  // get frequency frame
169  std::string getFrame() ;
170
171  // initialize header
172  void initHeader( STHeader &header ) ;
173
174  CountedPtr<Scantable> table_ ;
175  MeasurementSet mstable_ ;
176  String tablename_ ;
177  Int antenna_ ;
178  String antennaStr_ ;
179  Bool getPt_ ;
180
181  Bool isFloatData_ ;
182  Bool isData_ ;
183
184  Bool isDoppler_ ;
185  Bool isFlagCmd_ ;
186  Bool isFreqOffset_ ;
187  Bool isHistory_ ;
188  Bool isProcessor_ ;
189  Bool isSysCal_ ;
190  Bool isWeather_ ;
191
192  String colTsys_ ;
193  String colTcal_ ;
194
195  LogIO os_ ;
196 
197  Vector<Double> mwTime_ ;
198  Vector<Double> mwInterval_ ;
199  Vector<uInt> mwIndex_ ;
200
201  // Record for TCAL_ID
202  // "FIELD0": "SPW0": Vector<uInt>
203  //           "SPW1": Vector<uInt>
204  //  ...
205  Record tcalrec_ ;
206  //map< String,Vector<uInt> > tcalrec_ ;
207};
208
209
210};
211#endif
Note: See TracBrowser for help on using the repository browser.