source: trunk/src/STFrequencies.h @ 857

Last change on this file since 857 was 856, checked in by mar637, 18 years ago

added name()
reworked copy constructor for (Table tab) to also pass name to base class

File size: 4.8 KB
Line 
1//
2// C++ Interface: STFrequencies
3//
4// Description:
5//
6//
7// Author: Malte Marquarding <asap@atnf.csiro.au>, (C) 2006
8//
9// Copyright: See COPYING file that comes with this distribution
10//
11//
12#ifndef ASAPSTFREQUENCIES_H
13#define ASAPSTFREQUENCIES_H
14
15#include <casa/aips.h>
16#include <casa/BasicSL/String.h>
17#include <coordinates/Coordinates/SpectralCoordinate.h>
18#include <tables/Tables/Table.h>
19#include <tables/Tables/ScalarColumn.h>
20
21#include "STSubTable.h"
22
23namespace asap {
24
25/**
26The Frequencies subtable of the Scantable
27
28@author Malte Marquarding
29@brief The frequency subtable of the Scantable
30*/
31class STFrequencies : public STSubTable {
32public:
33  STFrequencies() {;}
34  STFrequencies(casa::Table tab);
35  STFrequencies(const Scantable& parent);
36
37  virtual ~STFrequencies();
38
39  STFrequencies& operator=(const STFrequencies& other);
40
41  /**
42   * Add a new Entry to the Frequency subtable. This checks for duplicates.
43   * @param[in] refpix the reference pixel
44   * @param[in] refval the reference value
45   * @param[in] inc the increment
46   * @return an index into the frequency table
47   */
48  casa::uInt addEntry( casa::Double refpix, casa::Double refval,
49                       casa::Double inc );
50
51  /**
52   * Retrieve the frequency values for a specific id via references
53   * @param refpix the reference pixel
54   * @param refval the reference value
55   * @param inc the increment
56   * @param id the identifier
57   */
58  void getEntry( casa::Double& refpix, casa::Double& refval,
59                 casa::Double& inc, casa::uInt id );
60
61
62  bool conformant(const STFrequencies& other) const;
63
64  /**
65   * Retrieve  the frequency values as a casa::SpectralCoordinate
66   * @param freqID
67   * @return casa::SpectralCoordinate
68   */
69  casa::SpectralCoordinate getSpectralCoordinate( casa::uInt freqID ) const;
70
71  casa::SpectralCoordinate getSpectralCoordinate( const casa::MDirection& md,
72                                                  const casa::MPosition& mp,
73                                                  const casa::MEpoch& me,
74                                                  casa::Double restfreq,
75                                                  casa::uInt freqID
76                                                  ) const;
77
78  /**
79   * Return the unit of the frequency values
80   * @return casa::Unit
81   */
82  casa::Unit getUnit() const;
83  std::string getUnitString() const;
84
85  /**
86   * Return the doppler type of the values
87   * @return casa::MDoppler::Types
88   */
89  casa::MDoppler::Types getDoppler() const;
90  std::string getDopplerString() const;
91
92
93  /**
94   * Return the frame type, e.g MFrequency::TOPO
95   * @param base return the base frame or the user frame
96   * @return casa::MFrequency::Types
97   */
98  casa::MFrequency::Types getFrame(bool base=false) const;
99
100  /**
101   * Return a string representation of the frame type, e.g TOPO
102   * @param base return the base frame or the user frame
103   * @return the string representation of the frame
104   */
105  std::string getFrameString(bool base=false) const;
106
107  /**
108   * set the frequency frame from a string value
109   * @param frame a string identifier
110   */
111  void setFrame(const std::string& frame);
112  /**
113   * set the frequency frame from a casa::MFrequency::Types
114   * @param frame casa::MFrequency::Types
115   */
116  void setFrame(casa::MFrequency::Types frame);
117
118  /**
119   * rescale the whole table by a given factor
120   * @param factor the factor to bin or resample by
121   * @param mode the rescaling mode
122   * @li "BIN"
123   * @li "RESAMPLE"
124   */
125  void rescale(casa::Float factor, const std::string& mode);
126
127  /**
128   * get the reference frequency at a given channel for a specidif identifier
129   * @param id the identifier
130   * @param channel the channel number
131   * @return teh reference frequency
132   */
133  float getRefFreq(casa::uInt id, casa::uInt channel);
134
135
136  /**
137   * Rteun this table or s specific row as a string representation
138   * @param id the identifier. If id<0 all rows are returned
139   * @return a string
140   */
141  std::string print(int id=-1);
142
143  std::vector<std::string> getInfo() const;
144  void setInfo( const std::vector<std::string>& theinfo );
145
146  const casa::String& name() const { return name_; }
147
148private:
149
150  /**
151   * setup the the column structure of the casa::table
152   */
153  void setup();
154  /**
155   * the actual binning of the SpectralCoordinate as called by rescale
156   * @param sc
157   * @param factor the bin factor
158   * @return casa::SpectralCoordinate
159   */
160  casa::SpectralCoordinate binCsys(const casa::SpectralCoordinate& sc, casa::Int factor);
161  /**
162   * the actual resampling of the SpectralCoordinate as called by rescale
163   * @param sc
164   * @param width the resacle width. Can be decimal.
165   * @return
166   */
167  casa::SpectralCoordinate resampleCsys(const casa::SpectralCoordinate& sc, casa::Float width);
168
169  static const casa::String name_;
170  casa::ScalarColumn<casa::Double> refvalCol_, refpixCol_, incrCol_;
171};
172
173}
174
175#endif
Note: See TracBrowser for help on using the repository browser.