source: trunk/src/MSFiller.h@ 2900

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

New Development: No

JIRA Issue: Yes CSV-2532 (may be related to CSV-1908 and CSV-2161)

Ready for Test: Yes

Interface Changes: Yes

What Interface Changed: In tool level, added parameter 'freq_tolsr' to

scantable constructor and function sd.splitant.

Test Programs: test_sdsave, test_importasdm_sd

Put in Release Notes: Yes

Module(s): Module Names change impacts.

Description: Describe your changes here...

In importing MS to Scantable, frequency frame information is
imported as is by default, i.e., base frame in Scantable is
TOPO for ALMA data, which is forcibly converted to LSRK with
wrong time and direction reference.

Some functions have a boolean parameter 'freq_tolsr' that controls
the above behavior. If freq_tolsr is False (default), frequency
is imported as is, while frequency is converted to LSRK (wrongly)
when it is True.


File size: 5.1 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> T interp( Double x0, Double x1, Double x, T y0, T y1 )
103 {
104 Double dx0 = x - x0 ;
105 Double dx1 = x1 - x ;
106 return ( y0 * dx1 + y1 * dx0 ) / ( x1 - x0 ) ;
107 }
108 String keyTcal( const Int &feedid, const Int &spwid, const Double &time )
109 {
110 String stime = MVTime( Quantity(time,Unit("s")) ).string( MVTime::YMD ) ;
111 String sfeed = "FEED" + String::toString( feedid ) ;
112 String sspw = "SPW" + String::toString( spwid ) ;
113 return sfeed+":"+sspw+":"+stime ;
114 }
115 String keyTcal( const Int &feedid, const Int &spwid, const String &stime )
116 {
117 String sfeed = "FEED" + String::toString( feedid ) ;
118 String sspw = "SPW" + String::toString( spwid ) ;
119 return sfeed+":"+sspw+":"+stime ;
120 }
121};
122
123class MSFiller : public MSFillerUtils
124{
125public:
126 explicit MSFiller(CountedPtr<Scantable> stable) ;
127 virtual ~MSFiller() ;
128
129 virtual bool open(const std::string& filename, const Record& rec) ;
130 virtual void fill() ;
131 virtual void close() ;
132
133protected:
134
135
136private:
137
138 MSFiller();
139 MSFiller(const MSFiller&);
140 MSFiller& operator=(const MSFiller&);
141
142 // fill subtables
143 //void fillFrequencies() ;
144 //void fillMolecules() ;
145 void fillWeather() ;
146 void fillFocus() ;
147 //void fillHistory() ;
148 //void fillFit() ;
149 void fillTcal() ;
150 void infillTcal() ;
151
152 // get frequency frame
153 std::string getFrame() ;
154
155 // initialize header
156 void initHeader( STHeader &header ) ;
157
158 // get base frame from SPECTRAL_WINDOW table
159 std::string frameFromSpwTable();
160
161 CountedPtr<Scantable> table_ ;
162 MeasurementSet mstable_ ;
163 String tablename_ ;
164 Int antenna_ ;
165 String antennaStr_ ;
166 Bool getPt_ ;
167 Bool freqToLsr_ ;
168
169 Bool isFloatData_ ;
170 Bool isData_ ;
171
172 Bool isDoppler_ ;
173 Bool isFlagCmd_ ;
174 Bool isFreqOffset_ ;
175 Bool isHistory_ ;
176 Bool isProcessor_ ;
177 Bool isSysCal_ ;
178 Bool isWeather_ ;
179
180 String colTsys_ ;
181 String colTcal_ ;
182
183 LogIO os_ ;
184
185 Vector<Double> mwTime_ ;
186 Vector<Double> mwInterval_ ;
187 Vector<uInt> mwIndex_ ;
188
189 // Record for TCAL_ID
190 // "FIELD0": "SPW0": Vector<uInt>
191 // "SPW1": Vector<uInt>
192 // ...
193 Record tcalrec_ ;
194 //map< String,Vector<uInt> > tcalrec_ ;
195};
196
197
198};
199#endif
Note: See TracBrowser for help on using the repository browser.