casacore
TableMeasDescBase.h
Go to the documentation of this file.
1 //# TableMeasDescBase.h: Definition of a Measure in a Table.
2 //# Copyright (C) 1997,1999,2000,2001
3 //# Associated Universities, Inc. Washington DC, USA.
4 //#
5 //# This library is free software; you can redistribute it and/or modify it
6 //# under the terms of the GNU Library General Public License as published by
7 //# the Free Software Foundation; either version 2 of the License, or (at your
8 //# option) any later version.
9 //#
10 //# This library is distributed in the hope that it will be useful, but WITHOUT
11 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13 //# License for more details.
14 //#
15 //# You should have received a copy of the GNU Library General Public License
16 //# along with this library; if not, write to the Free Software Foundation,
17 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18 //#
19 //# Correspondence concerning AIPS++ should be addressed as follows:
20 //# Internet email: aips2-request@nrao.edu.
21 //# Postal address: AIPS++ Project Office
22 //# National Radio Astronomy Observatory
23 //# 520 Edgemont Road
24 //# Charlottesville, VA 22903-2475 USA
25 //#
26 //# $Id$
27 
28 #ifndef MEASURES_TABLEMEASDESCBASE_H
29 #define MEASURES_TABLEMEASDESCBASE_H
30 
31 //# Includes
32 #include <casacore/casa/aips.h>
33 #include <casacore/measures/TableMeasures/TableMeasValueDesc.h>
34 #include <casacore/measures/TableMeasures/TableMeasRefDesc.h>
35 #include <casacore/measures/TableMeasures/TableMeasType.h>
36 #include <casacore/casa/Quanta/Unit.h>
37 #include <casacore/casa/Arrays/Vector.h>
38 
39 namespace casacore { //# NAMESPACE CASACORE - BEGIN
40 
41 //# Forward Declarations
42 class String;
43 class Table;
44 class TableDesc;
45 class TableRecord;
46 class TableColumn;
47 class Measure;
48 template<class T> class Quantum;
49 
50 
51 // <summary>
52 // Definition of a Measure in a Table.
53 // </summary>
54 
55 // <use visibility=local>
56 
57 // <reviewed reviewer="Bob Garwood" date="1999/12/23" tests="tTableMeasures.cc">
58 // </reviewed>
59 
60 // <prerequisite>
61 //# Classes you should understand before using this one.
62 // <li> <linkto module=Measures>Measures</linkto>
63 // <li> <linkto module=Tables>Tables</linkto>
64 // <li> <linkto class=TableMeasDesc>TableMeasDesc</linkto>
65 // </prerequisite>
66 
67 // <synopsis>
68 // Abstract base class for TableMeasDesc.
69 // </synopsis>
70 
71 // <example>
72 // See class <linkto class="TableMeasDesc">TableMeasDesc</linkto>.
73 // </example>
74 
75 // <motivation>
76 // Creating the required keyword for the definition of a Measure
77 // in a Table is somewhat complicated. This class assists in that
78 // process.
79 // </motivation>
80 //
81 // <thrown>
82 // <li>AipsError during reconstruction if the column doesn't contain
83 // a MEASINFO record.
84 // <li>AipsError during reconstruction if the column has a MEASINFO
85 // but it Measure type is invalid.
86 // </thrown>
87 //
88 
89 //# <todo asof="$DATE:$">
90 //# A List of bugs, limitations, extensions or planned refinements.
91 //# </todo>
92 
94 {
95 public:
96  // Null constructor.
98 
99  // Constructor with value and reference descriptors.
100  // Note that setMeasType is always called by the derived class.
102 
103  // Copy constructor.
105 
107 
108  // Clone the object.
109  virtual TableMeasDescBase* clone() const;
110 
111  // Assignment operator.
113 
114  // Makes the descriptor persistent.
115  // <group>
116  void write (TableDesc&);
117  void write (Table&);
118  // </group>
119 
120  // Make the descriptor persistent if there was no refcode vector.
121  // This is only needed for old tables without such vectors.
122  void writeIfOld (const Table&);
123 
124  // Get the name of the underlying column.
125  const String& columnName() const
126  { return itsValue.columnName(); }
127 
128  // Return the reference code.
129  uInt getRefCode() const
130  { return itsRef.getRefCode(); }
131 
132  // Returns True if the reference varies per row.
134  { return itsRef.isRefCodeVariable(); }
135 
136  // Returns the name of the ref code column when the ref code is variable.
137  // The null string is returned if the ref code is not variable.
138  const String& refColumnName() const
139  { return itsRef.columnName(); }
140 
141  // Returns a reference to its measure reference descriptor.
143  { return itsRef; }
144 
145  // Get the name of the offset column. Empty string is returned if no
146  // offset.
147  const String& offsetColumnName() const
148  { return itsRef.offsetColumnName(); }
149 
150  // Returns True if an offset has been defined.
151  Bool hasOffset() const
152  { return itsRef.hasOffset(); }
153 
154  // Returns True if the offset is variable.
156  { return itsRef.isOffsetVariable(); }
157 
158  // Returns True if the offset is variable and is stored in an
159  // ArrayMeasColumn, i.e., offsets are stored per element.
161  { return itsRef.isOffsetArray(); }
162 
163  // Returns a reference to the offset.
164  const Measure& getOffset() const
165  { return itsRef.getOffset(); }
166 
167  // Returns the descriptors measure type as a String.
168  const String& type() const
169  { return itsMeasType.type(); }
170 
171  // Returns the reference code for this object given a string. Throws
172  // an exception if the refString is invalid for this object.
173  uInt refCode (const String& refString) const
174  { return itsMeasType.refCode(refString); }
175 
176  // Translates the refCode for the descriptors measure type.
177  const String& refType (uInt refCode) const
178  { return itsMeasType.refType(refCode); }
179 
180  // Return the Units of the Measure values
181  const Vector<Unit>& getUnits() const
182  { return itsUnits; }
183 
184  // Reset the refCode, offset, or units.
185  // It overwrites the value used when defining the TableMeasDesc.
186  // It is only possible if it was defined as fixed for the entire column.
187  // <group>
190  void resetOffset (const Measure& offset)
191  { itsRef.resetOffset (offset); }
192  void resetUnits (const Vector<Unit>& units);
193  // </group>
194 
195  // Reconstructs the object for the given table and column name.
196  static TableMeasDescBase* reconstruct (const Table& tab,
197  const String& columnName);
198 
199  // Does this column contain table measures?
200  static Bool hasMeasures (const TableColumn& column);
201 
202 protected:
203  // Set the initial reference codes and types in the table.
204  void initTabRef (const MeasureHolder& measHolder);
205 
206  // Set the measure and possible units.
207  void setMeasUnits (const Measure& meas,
208  const Vector<Quantum<Double> >& val,
209  const Vector<Unit>& units);
210 
211 private:
212  TableMeasValueDesc itsValue; //# The measure value column.
213  TableMeasRefDesc itsRef; //# The reference.
214  //# this gives access to the columns Measure type etc
217 };
218 
219 
220 
221 } //# NAMESPACE CASACORE - END
222 
223 #endif
casacore::TableMeasDescBase::columnName
const String & columnName() const
Get the name of the underlying column.
Definition: TableMeasDescBase.h:125
casacore::TableDesc
Define the structure of a Casacore table.
Definition: TableDesc.h:188
casacore::TableMeasDescBase::write
void write(TableDesc &)
Makes the descriptor persistent.
casacore::TableMeasDescBase::itsMeasType
TableMeasType itsMeasType
Definition: TableMeasDescBase.h:215
casacore::TableMeasValueDesc
Definition of a Measure Value in a Table.
Definition: TableMeasValueDesc.h:108
casacore::MeasureHolder
A holder for Measures to enable record conversions.
Definition: MeasureHolder.h:119
casacore::TableMeasDescBase::resetUnits
void resetUnits(const Vector< Unit > &units)
casacore::TableMeasRefDesc::isOffsetArray
Bool isOffsetArray() const
Returns True is the offset is variable and it is an ArrayMeasColumn.
Definition: TableMeasRefDesc.h:237
casacore::TableMeasRefDesc
Definition of a Measure Reference in a Table.
Definition: TableMeasRefDesc.h:168
casacore::TableMeasType::refType
const String & refType(uInt refCode) const
Translates the refCode for the descriptors measure type.
casacore::TableMeasDescBase::refColumnName
const String & refColumnName() const
Returns the name of the ref code column when the ref code is variable.
Definition: TableMeasDescBase.h:138
casacore::TableMeasRefDesc::getRefCode
uInt getRefCode() const
Return the reference code.
Definition: TableMeasRefDesc.h:208
casacore::TableMeasDescBase::refCode
uInt refCode(const String &refString) const
Returns the reference code for this object given a string.
Definition: TableMeasDescBase.h:173
casacore::TableColumn
Read/write access to a table column.
Definition: TableColumn.h:99
casacore::Measure
Physical quantities within reference frame.
Definition: Measure.h:235
casacore::TableMeasDescBase::initTabRef
void initTabRef(const MeasureHolder &measHolder)
Set the initial reference codes and types in the table.
casacore::TableMeasRefDesc::isOffsetVariable
Bool isOffsetVariable() const
Returns True if the offset is variable.
Definition: TableMeasRefDesc.h:233
casacore::TableMeasRefDesc::getOffset
const Measure & getOffset() const
Return the fixed Measure offset.
Definition: TableMeasRefDesc.h:243
casacore::TableMeasRefDesc::resetOffset
void resetOffset(const Measure &offset)
casacore::TableMeasType::refCode
uInt refCode(const String &refString) const
Returns the reference code for this object given a string.
casacore::TableMeasDescBase::getRefCode
uInt getRefCode() const
Return the reference code.
Definition: TableMeasDescBase.h:129
casacore::TableMeasDescBase
Definition of a Measure in a Table.
Definition: TableMeasDescBase.h:94
casacore::TableMeasDescBase::getUnits
const Vector< Unit > & getUnits() const
Return the Units of the Measure values.
Definition: TableMeasDescBase.h:181
casacore::TableMeasDescBase::TableMeasDescBase
TableMeasDescBase(const TableMeasValueDesc &, const TableMeasRefDesc &)
Constructor with value and reference descriptors.
casacore::TableMeasDescBase::reconstruct
static TableMeasDescBase * reconstruct(const Table &tab, const String &columnName)
Reconstructs the object for the given table and column name.
casacore::TableMeasDescBase::getRefDesc
const TableMeasRefDesc & getRefDesc() const
Returns a reference to its measure reference descriptor.
Definition: TableMeasDescBase.h:142
casacore::TableMeasDescBase::itsValue
TableMeasValueDesc itsValue
Definition: TableMeasDescBase.h:212
casacore::TableMeasDescBase::offsetColumnName
const String & offsetColumnName() const
Get the name of the offset column.
Definition: TableMeasDescBase.h:147
casacore::TableMeasDescBase::type
const String & type() const
Returns the descriptors measure type as a String.
Definition: TableMeasDescBase.h:168
casacore::TableMeasDescBase::itsUnits
Vector< Unit > itsUnits
Definition: TableMeasDescBase.h:216
casacore::TableMeasType
Definition of a Measure column in a Table.
Definition: TableMeasType.h:86
casacore::TableMeasDescBase::getOffset
const Measure & getOffset() const
Returns a reference to the offset.
Definition: TableMeasDescBase.h:164
casacore::Table
Main interface class to a read/write table.
Definition: Table.h:154
casacore::TableMeasType::type
const String & type() const
Returns the descriptor's measure type as a String.
casacore::TableMeasRefDesc::offsetColumnName
const String & offsetColumnName() const
Return the name of the Measure offset column.
Definition: TableMeasRefDesc.h:248
casacore::TableMeasDescBase::itsRef
TableMeasRefDesc itsRef
Definition: TableMeasDescBase.h:213
casacore::TableMeasDescBase::clone
virtual TableMeasDescBase * clone() const
Clone the object.
casacore::TableMeasDescBase::~TableMeasDescBase
virtual ~TableMeasDescBase()
casacore::uInt
unsigned int uInt
Definition: aipstype.h:51
casacore::TableMeasDescBase::TableMeasDescBase
TableMeasDescBase(const TableMeasDescBase &that)
Copy constructor.
casacore::TableMeasDescBase::setMeasUnits
void setMeasUnits(const Measure &meas, const Vector< Quantum< Double > > &val, const Vector< Unit > &units)
Set the measure and possible units.
casacore::TableMeasDescBase::refType
const String & refType(uInt refCode) const
Translates the refCode for the descriptors measure type.
Definition: TableMeasDescBase.h:177
casacore::TableMeasRefDesc::resetRefCode
void resetRefCode(uInt refCode)
Reset the refCode or offset.
casacore::TableMeasDescBase::TableMeasDescBase
TableMeasDescBase()
Null constructor.
casacore::TableMeasDescBase::write
void write(Table &)
casacore
this file contains all the compiler specific defines
Definition: mainpage.dox:28
casacore::TableMeasDescBase::operator=
TableMeasDescBase & operator=(const TableMeasDescBase &that)
Assignment operator.
casacore::TableMeasDescBase::isRefCodeVariable
Bool isRefCodeVariable() const
Returns True if the reference varies per row.
Definition: TableMeasDescBase.h:133
casacore::TableMeasRefDesc::isRefCodeVariable
Bool isRefCodeVariable() const
Is the reference variable?
Definition: TableMeasRefDesc.h:212
casacore::TableMeasRefDesc::columnName
const String & columnName() const
Return the name of its variable reference code column.
Definition: TableMeasRefDesc.h:216
casacore::TableMeasValueDesc::columnName
const String & columnName() const
Get the name of the underlying column.
Definition: TableMeasValueDesc.h:143
casacore::TableMeasDescBase::hasMeasures
static Bool hasMeasures(const TableColumn &column)
Does this column contain table measures?
casacore::TableMeasDescBase::isOffsetArray
Bool isOffsetArray() const
Returns True if the offset is variable and is stored in an ArrayMeasColumn, i.e., offsets are stored ...
Definition: TableMeasDescBase.h:160
casacore::TableMeasDescBase::writeIfOld
void writeIfOld(const Table &)
Make the descriptor persistent if there was no refcode vector.
casacore::TableMeasDescBase::isOffsetVariable
Bool isOffsetVariable() const
Returns True if the offset is variable.
Definition: TableMeasDescBase.h:155
casacore::TableMeasRefDesc::hasOffset
Bool hasOffset() const
Returns True if the reference has an offset.
Definition: TableMeasRefDesc.h:229
casacore::String
String: the storage and methods of handling collections of characters.
Definition: String.h:223
casacore::Bool
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42
casacore::Vector
A 1-D Specialization of the Array class.
Definition: ArrayIO.h:45
casacore::TableMeasDescBase::hasOffset
Bool hasOffset() const
Returns True if an offset has been defined.
Definition: TableMeasDescBase.h:151
casacore::TableMeasDescBase::resetOffset
void resetOffset(const Measure &offset)
Definition: TableMeasDescBase.h:190
casacore::Quantum< Double >
casacore::TableMeasDescBase::resetRefCode
void resetRefCode(uInt refCode)
Reset the refCode, offset, or units.
Definition: TableMeasDescBase.h:188