source: trunk/src/SDMemTable.h @ 286

Last change on this file since 286 was 286, checked in by kil064, 19 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
RevLine 
[2]1//#---------------------------------------------------------------------------
2//# SDMemTable.h: A MemoryTable container for single dish integrations
3//#---------------------------------------------------------------------------
4//# Copyright (C) 2004
[125]5//# ATNF
[2]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//#---------------------------------------------------------------------------
[125]31#ifndef SDMEMTABLE_H
32#define SDMEMTABLE_H
[2]33
34// STL
35#include <string>
36#include <vector>
37// AIPS++
[236]38 #include <casa/aips.h>
[80]39#include <casa/BasicSL/String.h>
40#include <tables/Tables/Table.h>
41#include <casa/Arrays/MaskedArray.h>
[236]42#include "SDDefs.h"
[2]43
[80]44#include <coordinates/Coordinates/SpectralCoordinate.h>
[39]45
[83]46namespace asap {
[2]47
48class SDContainer;
49class SDHeader;
50class SDFrequencyTable;
51
52
53class SDMemTable {
54public:
[19]55  // create a new (empty) SDMemTable
[18]56  SDMemTable();
[50]57  // create a SDMemTable from an (aips++) table on disk
[18]58  SDMemTable(const std::string& name);
[19]59
60  // Copy Construct a SDMemTable, if clear==True only header and
61  // skeleton are copied, otherwise the whole table is copied.
[147]62  SDMemTable(const SDMemTable& other, casa::Bool clear=casa::False);
[2]63
[161]64  // Copy Construct (copy semantics) a SDMemTable, give a scanid constraint
[19]65  // see also getScan()
[125]66  SDMemTable(const casa::Table& tab, const std::string& expr);
[161]67
68  // Assignment operator (copy semantics) 
[138]69  SDMemTable &operator=(const SDMemTable& other);
70 
[2]71  virtual ~SDMemTable();
[19]72
73  // put data from meta conatiner into the table
[39]74  bool putSDContainer(const SDContainer& sdc);
75  bool putSDHeader(const SDHeader& sdh);
76  bool putSDFreqTable(const SDFrequencyTable& sdft);
[21]77
[161]78  //get the data wrapped up in a meta container
[125]79  SDContainer getSDContainer(casa::uInt whichRow=0) const;
[39]80  SDHeader getSDHeader() const;
81  SDFrequencyTable getSDFreqTable() const;
[19]82  // get spectrum,mask and tsys for the given row, at the selected
[21]83  // cursor - all as stl vectors
[125]84  virtual std::vector<float> getSpectrum(casa::Int whichRow=0) const;
85  virtual std::vector<bool> getMask(casa::Int whichRow=0) const;
[21]86
[125]87  virtual casa::Float getTsys(casa::Int whichRow=0) const;
[21]88  // get all as aips++ Vectors
[125]89  virtual void getSpectrum(casa::Vector<casa::Float>& spectrum,
[164]90                           casa::Int whichRow=0) const;
[2]91
[88]92  //virtual void getMask(Vector<Bool>& mask,Int whichRow=0) const;
[251]93  std::vector<double> getRestFreqs() const;
94 
[281]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 ;
[286]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//
[125]103  std::string getSourceName(casa::Int whichRow=0) const;
104  double getInterval(casa::Int whichRow=0) const;
[50]105
[88]106  virtual void setSpectrum(std::vector<float> spectrum, int whichRow=0);
[125]107  virtual void setRestFreqs(std::vector<double> freqs,
108                            const std::string& theunit);
[105]109  virtual void setCoordInfo(std::vector<string> theinfo);
[206]110
[218]111// Get/Set flux unit
[206]112  std::string getFluxUnit() const;
[218]113  void setFluxUnit (const std::string& unit);
[206]114
[236]115// Set Instrument
116  void setInstrument (const std::string& instrument);
117
[19]118  // set the current value
[125]119  virtual bool setIF(casa::Int whichIF=0);
120  virtual bool setBeam(casa::Int whichBeam=0);
121  virtual bool setPol(casa::Int whichPol=0);
[88]122
123  //sets the user mask applied to all spectra
[68]124  virtual bool setMask(std::vector<int> whichChans);
[88]125  // Hard flags the current spectrum, not reversible
126  virtual void flag(int whichRow);
127
[19]128  // return the currently selected values
[154]129  virtual casa::Int getIF() const { return IFSel_; }
130  virtual casa::Int getBeam() const { return beamSel_; }
131  virtual casa::Int getPol() const { return polSel_; }
[263]132
133  // returns unit, conversion frame, doppler, base-frame
[206]134  virtual std::vector<std::string> getCoordInfo() const;
[88]135
[50]136  // number of scans in table
[125]137  virtual casa::Int nScan() const;
[50]138
[206]139  // get a summary of the table
[260]140  virtual std::string summary() const;
[88]141
[206]142  std::vector<std::string> history(int whichRow=0) const;
143  bool appendHistory(const std::string& hist, int whichRow=0);
[19]144  // write to disk as aips++ table
[2]145  void makePersistent(const std::string& filename);
[19]146
[88]147  // get a new SDMemTable containing all rows with the same give SCANID
[164]148  SDMemTable getScan(casa::Int scanID) const;
149  SDMemTable getSource(const std::string& source) const;
[18]150
[125]151  const casa::TableRecord& getHeader() const {return table_.keywordSet();}
[19]152  // get a handle to the "raw" aips++ table
[138]153  const casa::Table& table() const { return table_; }
[2]154
[19]155  // return the number of values
[125]156  casa::Int nBeam() const;
157  casa::Int nIF() const;
158  casa::Int nPol() const;
159  casa::Int nChan() const;
[18]160
[22]161  // return the number of rows (integrations) in the table
[125]162  casa::Int nRow() const { return table_.nrow(); }
[22]163
[19]164  // return a row as a Masked array, internally converting uChar flags
165  // to bool mask
[125]166  casa::MaskedArray<casa::Float> rowAsMaskedArray(casa::uInt whichRow,
[206]167                                                  casa::Bool useSelection =
168                                                  casa::False) const;
[19]169
[286]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.
[125]181  casa::Bool setCoordinate(const casa::SpectralCoordinate& speccord,
182                           casa::uInt whichIdx);
[50]183
[125]184  casa::Int nCoordinates() const;
[88]185
[164]186  std::vector<double> getAbcissa(int whichRow=0) const;
187  std::string getAbcissaString(casa::Int whichRow=0) const;
[212]188
[286]189// Get global reference  types
[281]190  casa::MDirection::Types getDirectionReference() const;
191  casa::MEpoch::Types getTimeReference() const;
[212]192
[286]193// Get global antenna position
194  casa::MPosition getAntennaPosition() const;
195
[236]196// Helper function to check instrument (antenna) name and give enum
[281]197  static Instrument convertInstrument(const casa::String& instrument,
198                                      casa::Bool throwIt);
[236]199
[2]200private:
[105]201  // utility func for nice printout
[260]202  casa::String formatSec(casa::Double x) const;
[281]203  casa::String formatDirection(const casa::MDirection& md) const;
[2]204  void setup();
[19]205  // the current cursor into the array
[125]206  casa::Int IFSel_,beamSel_,polSel_;
[88]207  std::vector<bool> chanMask_;
[50]208  // the underlying memory table
[125]209  casa::Table table_;
[2]210};
211
212}// namespace
213#endif
Note: See TracBrowser for help on using the repository browser.