source: trunk/external-alma/atnf/PKSIO/NROReader.h @ 2761

Last change on this file since 2761 was 2761, checked in by Takeshi Nakazato, 11 years ago

New Development: No

JIRA Issue: No

Ready for Test: Yes

Interface Changes: 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...

Added new option, freqref, to NRO filler. Posible values are:
1) 'rest' to import frequency in REST frame, which results in an exactly
same frequency label as NEWSTAR, and 2) 'vref' to import frequency
in the frame that source velocity refers, which results in the same
velocity label as NEWSTAR. The option must be given to scantable
constructor.


File size: 7.8 KB
Line 
1//#---------------------------------------------------------------------------
2//# NROReader.h: Base class to read NRO 45m and ASTE data.
3//#---------------------------------------------------------------------------
4//# Copyright (C) 2000-2006
5//# Associated Universities, Inc. Washington DC, USA.
6//#
7//# This library is free software; you can redistribute it and/or modify it
8//# under the terms of the GNU Library General Public License as published by
9//# the Free Software Foundation; either version 2 of the License, or (at your
10//# option) any later version.
11//#
12//# This library is distributed in the hope that it will be useful, but WITHOUT
13//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14//# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
15//# License for more details.
16//#
17//# You should have received a copy of the GNU Library General Public License
18//# along with this library; if not, write to the Free Software Foundation,
19//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
20//#
21//# Correspondence concerning AIPS++ should be addressed as follows:
22//#        Internet email: aips2-request@nrao.edu.
23//#        Postal address: AIPS++ Project Office
24//#                        National Radio Astronomy Observatory
25//#                        520 Edgemont Road
26//#                        Charlottesville, VA 22903-2475 USA
27//#
28//# $Id$
29//#---------------------------------------------------------------------------
30//# Original: 2008/10/30, Takeshi Nakazato, NAOJ
31//#---------------------------------------------------------------------------
32
33#ifndef NRO_READER_H
34#define NRO_READER_H
35
36#include <string>
37#include <stdio.h>
38#include <vector>
39
40#include <casa/aips.h>
41#include <casa/Arrays/Vector.h>
42#include <casa/BasicSL/String.h>
43#include <measures/Measures/MPosition.h>
44#include <measures/Measures/MEpoch.h>
45#include <measures/Measures/MCPosition.h>
46#include <measures/Measures/MDirection.h>
47#include <measures/Measures/MCDirection.h>
48#include <measures/Measures/MeasConvert.h>
49#include <measures/Measures/MeasFrame.h>
50#include <casa/Logging/LogIO.h>
51#include <casa/Utilities/CountedPtr.h>
52
53//#include <fitsio.h>
54
55#include <casa/namespace.h>
56
57#include <atnf/PKSIO/NRODataset.h>
58#include <atnf/PKSIO/NRODataRecord.h>
59
60// <summary>
61// Base class to read NRO 45m and ASTE data.
62// </summary>
63// <use visibility=global>
64//
65// <prerequisite>
66//   <li> <linkto class=NRODataset>NRODataset</linkto>
67// </prerequisite>
68//
69// <reviewed reviewer="" date="" tests="" demos="">
70// </reviewed>
71//
72// <etymology>
73// <linkto class=NROReader>NROReader</linkto> is a base class for all NRO reader classes.
74// Reader classes have <linkto class=NRODataset>NRODataset</linkto> object to access
75// actual data. These classes are a kind of interface for Scantable data filler.
76// </etymology>
77//
78// <synopsis>
79// Abstract class that is designed as a base class for NRO reader classes.
80// </synopsis>
81//
82
83// Open an appropriate NROreader for a NRO 45m and ASTE dataset.
84class NROReader *getNROReader( const String filename,
85                               String &datatype );
86
87// As above, but search a list of directories for it.
88class NROReader *getNROReader( const String filename,
89                               const Vector<String> directories,
90                               int &iDir,
91                               String &datatype ) ;
92
93//
94// NROReader
95//
96class NROReader
97{
98 public:
99  // Constructor
100  NROReader( string name ) ;
101
102  // Destructor.
103  virtual ~NROReader() ;
104
105  // determine whether to import frequency as REST (frequency is same as
106  // NEWSTAR/NOSTAR) or as is (velocity is same as NEWSTAR/NOSTAR)
107  void setFreqRefFromVREF( bool fromVREF ) ;
108
109  // Read data header
110  virtual Int read() = 0 ;
111
112  // Get header information
113  virtual int getHeaderInfo( Int &nchan,
114                             Int &npol,
115                             Int &nif,
116                             Int &nbeam,
117                             String &observer,
118                             String &project,
119                             String &obstype,
120                             String &antname,
121                             Vector<Double> &antpos,
122                             Float &equinox,
123                             String &freqref,
124                             Double &reffreq,
125                             Double &bw,
126                             Double &utc,
127                             String &fluxunit,
128                             String &epoch,
129                             String &poltype ) ;
130                         
131  // Get scan information
132  virtual int getScanInfo( int irow,
133                           uInt &scanno,
134                           uInt &cycleno,
135                           uInt &ifno,
136                           uInt &beamno,
137                           uInt &polno,
138                           std::vector<double> &freqs,   
139                           Vector<Double> &restfreq, 
140                           uInt &refbeamno,
141                           Double &scantime,
142                           Double &interval,
143                           String &srcname,
144                           String &fieldname,
145                           Vector<Float> &spectra,
146                           Vector<uChar> &flagtra,
147                           Vector<Float> &tsys,
148                           Vector<Double> &direction,
149                           Float &azimuth,
150                           Float &elevation,
151                           Float &parangle,
152                           Float &opacity,
153                           uInt &tcalid,
154                           Int &fitid,
155                           uInt &focusid,
156                           Float &temperature, 
157                           Float &pressure,     
158                           Float &humidity,     
159                           Float &windvel,     
160                           Float &winddir,     
161                           Double &srcvel,
162                           Vector<Double> &propermotion,
163                           Vector<Double> &srcdir,
164                           Vector<Double> &scanrate ) ;
165
166  // Get scan type
167  virtual string getScanType( int i ) ;
168
169  // Get dataset
170  virtual NRODataset *getDataset() { return dataset_ ; } ;
171
172  // Get number of rows
173  virtual Int getRowNum() ;
174
175  // Get IF settings
176  virtual std::vector<Bool> getIFs() ;
177
178  // Get Number of IFs
179  virtual Int getNumIF() = 0 ;
180
181  // Get Beam settings
182  virtual std::vector<Bool> getBeams() ;
183
184  // Get Number of Beams
185  virtual Int getNumBeam() = 0 ;
186
187 protected:
188  // convert time in character representation to MJD representation
189  virtual double getMJD( char *time ) ;
190  virtual double getMJD( string strStartTime ) ;
191
192  // Get spectrum
193  virtual std::vector< std::vector<double> > getSpectrum() ;
194
195  // Get number of polarization
196  virtual Int getPolarizationNum() ;
197
198  // Get MJD time
199  virtual double getStartTime() ;
200  virtual double getEndTime() ;
201  virtual std::vector<double> getStartIntTime() ;
202  //virtual double getStartIntTime( int i ) ;
203
204  // Get Antenna Position in ITRF coordinate
205  virtual std::vector<double> getAntennaPosition() = 0 ;
206
207  // Get SRCDIRECTION in RADEC(J2000)
208  virtual Vector<Double> getSourceDirection() ;
209
210  // Get DIRECTION in RADEC(J2000)
211  virtual Vector<Double> getDirection( int i ) ;
212  virtual void initConvert( int icoord, double t, char *epoch ) ;
213
214  // Shift frequency by given velocity with respect to specified
215  // velocity reference
216  std::vector<double> shiftFrequency( const std::vector<double> &f, const double &v, const string &vref ) ;
217
218  // filename
219  string filename_ ;
220
221  // dataset
222  NRODataset *dataset_ ;
223
224  // source direction
225  Vector<Double> srcdir_ ;
226  Vector<Double> msrcdir_ ;
227
228  // for direction conversion
229  CountedPtr<MDirection::Convert> converter_ ;
230  CountedPtr<MeasFrame> mf_ ;
231  MEpoch me_ ;
232  MPosition mp_ ;
233  int coord_ ;
234
235  bool freqRefFromVREF_ ;
236
237  // Logger
238  LogIO os_ ;
239};
240
241#endif /* NRO_READER_H */
Note: See TracBrowser for help on using the repository browser.