source: trunk/src/SDMemTable.h@ 287

Last change on this file since 287 was 286, checked in by kil064, 20 years ago

consolidate some SpectralCoordinate creation activities in getSpectralCoordinate
functions. Add some other small convenience functions.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.5 KB
Line 
1//#---------------------------------------------------------------------------
2//# SDMemTable.h: A MemoryTable container for single dish integrations
3//#---------------------------------------------------------------------------
4//# Copyright (C) 2004
5//# ATNF
6//#
7//# This program is free software; you can redistribute it and/or modify it
8//# under the terms of the GNU General Public License as published by the Free
9//# Software Foundation; either version 2 of the License, or (at your option)
10//# any later version.
11//#
12//# This program is distributed in the hope that it will be useful, but
13//# WITHOUT ANY WARRANTY; without even the implied warranty of
14//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
15//# Public License for more details.
16//#
17//# You should have received a copy of the GNU General Public License along
18//# with this program; if not, write to the Free Software Foundation, Inc.,
19//# 675 Massachusetts Ave, Cambridge, MA 02139, USA.
20//#
21//# Correspondence concerning this software should be addressed as follows:
22//# Internet email: Malte.Marquarding@csiro.au
23//# Postal address: Malte Marquarding,
24//# Australia Telescope National Facility,
25//# P.O. Box 76,
26//# Epping, NSW, 2121,
27//# AUSTRALIA
28//#
29//# $Id:
30//#---------------------------------------------------------------------------
31#ifndef SDMEMTABLE_H
32#define SDMEMTABLE_H
33
34// STL
35#include <string>
36#include <vector>
37// AIPS++
38 #include <casa/aips.h>
39#include <casa/BasicSL/String.h>
40#include <tables/Tables/Table.h>
41#include <casa/Arrays/MaskedArray.h>
42#include "SDDefs.h"
43
44#include <coordinates/Coordinates/SpectralCoordinate.h>
45
46namespace asap {
47
48class SDContainer;
49class SDHeader;
50class SDFrequencyTable;
51
52
53class SDMemTable {
54public:
55 // create a new (empty) SDMemTable
56 SDMemTable();
57 // create a SDMemTable from an (aips++) table on disk
58 SDMemTable(const std::string& name);
59
60 // Copy Construct a SDMemTable, if clear==True only header and
61 // skeleton are copied, otherwise the whole table is copied.
62 SDMemTable(const SDMemTable& other, casa::Bool clear=casa::False);
63
64 // Copy Construct (copy semantics) a SDMemTable, give a scanid constraint
65 // see also getScan()
66 SDMemTable(const casa::Table& tab, const std::string& expr);
67
68 // Assignment operator (copy semantics)
69 SDMemTable &operator=(const SDMemTable& other);
70
71 virtual ~SDMemTable();
72
73 // put data from meta conatiner into the table
74 bool putSDContainer(const SDContainer& sdc);
75 bool putSDHeader(const SDHeader& sdh);
76 bool putSDFreqTable(const SDFrequencyTable& sdft);
77
78 //get the data wrapped up in a meta container
79 SDContainer getSDContainer(casa::uInt whichRow=0) const;
80 SDHeader getSDHeader() const;
81 SDFrequencyTable getSDFreqTable() const;
82 // get spectrum,mask and tsys for the given row, at the selected
83 // cursor - all as stl vectors
84 virtual std::vector<float> getSpectrum(casa::Int whichRow=0) const;
85 virtual std::vector<bool> getMask(casa::Int whichRow=0) const;
86
87 virtual casa::Float getTsys(casa::Int whichRow=0) const;
88 // get all as aips++ Vectors
89 virtual void getSpectrum(casa::Vector<casa::Float>& spectrum,
90 casa::Int whichRow=0) const;
91
92 //virtual void getMask(Vector<Bool>& mask,Int whichRow=0) const;
93 std::vector<double> getRestFreqs() const;
94
95 // get info for current row
96 // if whichRow == -1 the Header time is given
97 std::string getTime(casa::Int whichRow=0,
98 casa::Bool showDate=casa::False) const ;
99 casa::MEpoch getEpoch(casa::Int whichRow=0) const;
100 casa::MDirection getDirection(casa::Int whichRow=0,
101 casa::Bool refBeam=casa::False) const;
102//
103 std::string getSourceName(casa::Int whichRow=0) const;
104 double getInterval(casa::Int whichRow=0) const;
105
106 virtual void setSpectrum(std::vector<float> spectrum, int whichRow=0);
107 virtual void setRestFreqs(std::vector<double> freqs,
108 const std::string& theunit);
109 virtual void setCoordInfo(std::vector<string> theinfo);
110
111// Get/Set flux unit
112 std::string getFluxUnit() const;
113 void setFluxUnit (const std::string& unit);
114
115// Set Instrument
116 void setInstrument (const std::string& instrument);
117
118 // set the current value
119 virtual bool setIF(casa::Int whichIF=0);
120 virtual bool setBeam(casa::Int whichBeam=0);
121 virtual bool setPol(casa::Int whichPol=0);
122
123 //sets the user mask applied to all spectra
124 virtual bool setMask(std::vector<int> whichChans);
125 // Hard flags the current spectrum, not reversible
126 virtual void flag(int whichRow);
127
128 // return the currently selected values
129 virtual casa::Int getIF() const { return IFSel_; }
130 virtual casa::Int getBeam() const { return beamSel_; }
131 virtual casa::Int getPol() const { return polSel_; }
132
133 // returns unit, conversion frame, doppler, base-frame
134 virtual std::vector<std::string> getCoordInfo() const;
135
136 // number of scans in table
137 virtual casa::Int nScan() const;
138
139 // get a summary of the table
140 virtual std::string summary() const;
141
142 std::vector<std::string> history(int whichRow=0) const;
143 bool appendHistory(const std::string& hist, int whichRow=0);
144 // write to disk as aips++ table
145 void makePersistent(const std::string& filename);
146
147 // get a new SDMemTable containing all rows with the same give SCANID
148 SDMemTable getScan(casa::Int scanID) const;
149 SDMemTable getSource(const std::string& source) const;
150
151 const casa::TableRecord& getHeader() const {return table_.keywordSet();}
152 // get a handle to the "raw" aips++ table
153 const casa::Table& table() const { return table_; }
154
155 // return the number of values
156 casa::Int nBeam() const;
157 casa::Int nIF() const;
158 casa::Int nPol() const;
159 casa::Int nChan() const;
160
161 // return the number of rows (integrations) in the table
162 casa::Int nRow() const { return table_.nrow(); }
163
164 // return a row as a Masked array, internally converting uChar flags
165 // to bool mask
166 casa::MaskedArray<casa::Float> rowAsMaskedArray(casa::uInt whichRow,
167 casa::Bool useSelection =
168 casa::False) const;
169
170 // Return SC, setting only the basic construction state (i.e.
171 // no conversion or velocity or rest frequency state)
172 casa::SpectralCoordinate getSpectralCoordinate(casa::uInt whichIdx) const;
173
174 // Return SC. Set velocity conversion state (unit,doppler),
175 // set rest frequencies. If row number given (>-0), also set
176 // frame conversion layer (needs direction & time which require row)
177 casa::SpectralCoordinate getSpectralCoordinate(casa::uInt whichIdx, casa::uInt row) const;
178
179 // Set just the reference value, pixel and increment into the table
180 // No other state is extracted.
181 casa::Bool setCoordinate(const casa::SpectralCoordinate& speccord,
182 casa::uInt whichIdx);
183
184 casa::Int nCoordinates() const;
185
186 std::vector<double> getAbcissa(int whichRow=0) const;
187 std::string getAbcissaString(casa::Int whichRow=0) const;
188
189// Get global reference types
190 casa::MDirection::Types getDirectionReference() const;
191 casa::MEpoch::Types getTimeReference() const;
192
193// Get global antenna position
194 casa::MPosition getAntennaPosition() const;
195
196// Helper function to check instrument (antenna) name and give enum
197 static Instrument convertInstrument(const casa::String& instrument,
198 casa::Bool throwIt);
199
200private:
201 // utility func for nice printout
202 casa::String formatSec(casa::Double x) const;
203 casa::String formatDirection(const casa::MDirection& md) const;
204 void setup();
205 // the current cursor into the array
206 casa::Int IFSel_,beamSel_,polSel_;
207 std::vector<bool> chanMask_;
208 // the underlying memory table
209 casa::Table table_;
210};
211
212}// namespace
213#endif
Note: See TracBrowser for help on using the repository browser.