source: trunk/src/MSFiller.h @ 2754

Last change on this file since 2754 was 2754, checked in by Takeshi Nakazato, 11 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
RevLine 
[1974]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>
[1987]18
[1974]19// AIPS++
20#include <casa/aips.h>
21#include <casa/Utilities/CountedPtr.h>
22#include <casa/Arrays/Vector.h>
[1987]23#include <casa/Arrays/Matrix.h>
[1993]24#include <casa/Arrays/Cube.h>
[1974]25#include <casa/Logging/LogIO.h>
[2291]26#include <casa/Containers/RecordField.h>
[1974]27#include <casa/Containers/Record.h>
[2002]28#include <casa/Containers/Block.h>
[2291]29#include <casa/Quanta/MVTime.h>
[1974]30
31#include <ms/MeasurementSets/MeasurementSet.h>
[1987]32#include <ms/MeasurementSets/MSPointing.h>
[1974]33
[2291]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"
[1974]44#include "Scantable.h"
[2291]45#include "MathUtils.h"
[1974]46
[2291]47using namespace casa;
48
[1974]49namespace asap
50{
51
[2291]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
[2744]123class MSFiller : public MSFillerUtils
[1974]124{
125public:
[2291]126  explicit MSFiller(CountedPtr<Scantable> stable) ;
[1974]127  virtual ~MSFiller() ;
128 
[2291]129  virtual bool open(const std::string& filename, const Record& rec) ;
[1974]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() ;
[2291]149  void fillTcal() ;
[2744]150  void infillTcal() ;
[1974]151
[2217]152  // get frequency frame
153  std::string getFrame() ;
[2237]154
155  // initialize header
156  void initHeader( STHeader &header ) ;
157
[2754]158  // get base frame from SPECTRAL_WINDOW table
159  std::string frameFromSpwTable();
160
[2291]161  CountedPtr<Scantable> table_ ;
162  MeasurementSet mstable_ ;
163  String tablename_ ;
164  Int antenna_ ;
165  String antennaStr_ ;
166  Bool getPt_ ;
[2754]167  Bool freqToLsr_ ;
[2237]168
[2291]169  Bool isFloatData_ ;
170  Bool isData_ ;
[2237]171
[2291]172  Bool isDoppler_ ;
173  Bool isFlagCmd_ ;
174  Bool isFreqOffset_ ;
175  Bool isHistory_ ;
176  Bool isProcessor_ ;
177  Bool isSysCal_ ;
178  Bool isWeather_ ;
[2237]179
[2291]180  String colTsys_ ;
181  String colTcal_ ;
[1974]182
[2291]183  LogIO os_ ;
[1974]184 
[2291]185  Vector<Double> mwTime_ ;
186  Vector<Double> mwInterval_ ;
187  Vector<uInt> mwIndex_ ;
[1974]188
[1987]189  // Record for TCAL_ID
190  // "FIELD0": "SPW0": Vector<uInt>
191  //           "SPW1": Vector<uInt>
192  //  ...
[2291]193  Record tcalrec_ ;
194  //map< String,Vector<uInt> > tcalrec_ ;
[1974]195};
196
197
198};
199#endif
Note: See TracBrowser for help on using the repository browser.