source: trunk/src/SDMemTable.h@ 50

Last change on this file since 50 was 50, checked in by mmarquar, 20 years ago

Removed name_ related fields and functions.
Changed getTime to sprint out string of MVTime.
Added range checks for setIF/Pol/Beam functions.
Added const to get type functions, where it was missing.
Removed debugging cerr from getAbscissa
Added setCoordinate to set the Frequency Table from SpectralCoordinate.
Added nScans()
Added more info printing to summary

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.0 KB
Line 
1//#---------------------------------------------------------------------------
2//# SDMemTable.h: A MemoryTable container for single dish integrations
3//#---------------------------------------------------------------------------
4//# Copyright (C) 2004
5//# Malte Marquarding, 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 <aips/aips.h>
39#include <aips/Utilities/String.h>
40#include <aips/Tables/Table.h>
41#include <aips/Arrays/MaskedArray.h>
42
43#include <trial/Coordinates/SpectralCoordinate.h>
44
45namespace atnf_sd {
46
47class SDContainer;
48class SDHeader;
49class SDFrequencyTable;
50
51
52class SDMemTable {
53public:
54 // create a new (empty) SDMemTable
55 SDMemTable();
56 // create a SDMemTable from an (aips++) table on disk
57 SDMemTable(const std::string& name);
58
59 // Copy Construct a SDMemTable, if clear==True only header and
60 // skeleton are copied, otherwise the whole table is copied.
61 SDMemTable(const SDMemTable& other, Bool clear=False);
62
63 // Copy Construct a SDMemTable, give a scanid constraint
64 // see also getScan()
65 SDMemTable(const Table& tab, Int scanID);
66
67 virtual ~SDMemTable();
68
69 // put data from meta conatiner into the table
70 bool putSDContainer(const SDContainer& sdc);
71 bool putSDHeader(const SDHeader& sdh);
72 bool putSDFreqTable(const SDFrequencyTable& sdft);
73
74 //get the dat wrapped up in a meta container
75 SDContainer getSDContainer(uInt whichRow=0) const;
76 SDHeader getSDHeader() const;
77 SDFrequencyTable getSDFreqTable() const;
78 // get spectrum,mask and tsys for the given row, at the selected
79 // cursor - all as stl vectors
80 virtual std::vector<float> getSpectrum(Int whichRow=0) const;
81 virtual std::vector<bool> getMask(Int whichRow=0) const;
82
83 virtual Float getTsys(Int whichRow=0) const;
84 // get all as aips++ Vectors
85 virtual void getSpectrum(Vector<Float>& spectrum, Int whichRow=0);
86 virtual void getMask(Vector<Bool>& mask,Int whichRow=0) const;
87
88 // get info for current row
89 std::string getTime(Int whichRow=0) const ;
90 std::string getSourceName(Int whichRow=0) const;
91 double getInterval(Int whichRow=0) const;
92
93 // set the current value
94 virtual bool setIF(Int whichIF=0);
95 virtual bool setBeam(Int whichBeam=0);
96 virtual bool setPol(Int whichPol=0);
97 //sets the user mask
98 virtual bool setMask(const std::vector<int>& whichChans);
99
100 // return the currently selected values
101 virtual Int getIF() { return IFSel_; }
102 virtual Int getBeam() { return beamSel_; }
103 virtual Int getPol() { return polSel_; }
104
105 // number of scans in table
106 virtual Int nScans() const;
107
108 // print a summary to stdout
109 virtual void summary() const;
110
111 // write to disk as aips++ table
112 void makePersistent(const std::string& filename);
113
114 // get a new SDMemTable containg all rows with the same give SCANID
115 SDMemTable getScan(Int scanID);
116
117 const TableRecord& getHeader() const {return table_.keywordSet();}
118 // get a handle to the "raw" aips++ table
119 const Table& table() { return table_; }
120
121 // return the number of values
122 Int nBeam() const;
123 Int nIF() const;
124 Int nPol() const;
125 Int nChan() const;
126
127 // return the number of rows (integrations) in the table
128 Int nRows() const { return table_.nrow(); }
129
130 // return a row as a Masked array, internally converting uChar flags
131 // to bool mask
132 MaskedArray<Float> rowAsMaskedArray(uInt whichRow,
133 Bool useSelection = False);
134
135 SpectralCoordinate getCoordinate(uInt whichIdx) const;
136 Bool setCoordinate(const SpectralCoordinate& speccord, uInt whichIdx);
137
138 std::vector<double> getAbscissa(int whichRow,
139 const std::string& whichUnit="GHz",
140 double restfreq=0.0);
141private:
142 // set up table structure
143 void setup();
144 // the current cursor into the array
145 Int IFSel_,beamSel_,polSel_;
146 std::vector<bool> chanMask_;
147 // the underlying memory table
148 Table table_;
149};
150
151}// namespace
152#endif
Note: See TracBrowser for help on using the repository browser.