casacore
MPosition.h
Go to the documentation of this file.
1 //# MPosition.h: A Measure: position on Earth
2 //# Copyright (C) 1995,1996,1997,1998,1999,2000,2002
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 //#
27 //# $Id$
28 
29 #ifndef MEASURES_MPOSITION_H
30 #define MEASURES_MPOSITION_H
31 
32 //# Includes
33 #include <casacore/casa/aips.h>
34 #include <casacore/measures/Measures/MeasBase.h>
35 #include <casacore/measures/Measures/MeasRef.h>
36 #include <casacore/casa/Quanta/MVPosition.h>
37 
38 namespace casacore { //# NAMESPACE CASACORE - BEGIN
39 
40 //# Forward Declarations
41 class MPosition;
42 class MCPosition;
43 template <class M> class MeasConvert;
44 template <class M> class ArrayMeasColumn;
45 template <class M> class ScalarMeasColumn;
46 
47 //# Typedefs
48 
49 // <summary>
50 // A Measure: position on Earth
51 // </summary>
52 
53 // <use visibility=export>
54 
55 // <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="tMeasure" demos="">
56 // </reviewed>
57 
58 // <prerequisite>
59 // <li> <linkto class=Measure>Measure</linkto> class
60 // </prerequisite>
61 //
62 // <etymology>
63 // </etymology>
64 //
65 // <synopsis>
66 // MPosition forms derived Measure class for an instant in time.
67 // </synopsis>
68 //
69 // <example>
70 // </example>
71 //
72 // <motivation>
73 // </motivation>
74 //
75 // <todo asof="2000/06/15">
76 // <li>
77 // </todo>
78 
79 class MPosition : public MeasBase<MVPosition, MeasRef<MPosition> > {
80 
81  public:
82  //# Friends
83  // Conversion of data
84  friend class MeasConvert<MPosition>;
85 
86  //# Enumerations
87  // Types of known MPositions
88  // <note role=warning> The order defines the order in the translation
89  // matrix FromTo
90  // in the getConvert routine. Do not change the order without
91  // changing the array. Additions should be made before N_types, and
92  // an additional row and column should be coded in FromTo, and
93  // in showType().</note>
94  enum Types {
99 
100  //# Typedefs
101  // Measure value container for this class (i.e. MPosition::MVType)
103  // Measure conversion routines for this class (i.e. MPosition::MCType)
105  // Measure reference (i.e. MPosition::Ref)
107  // Measure Convert (i.e. MPosition::Convert)
109  // Measure table Columns (e.g., MPosition::ScalarColumn)
112 
113  //# Constructors
114  // <note role=tip> In the following constructors and other functions, all
115  // <em>MeasRef</em> can be replaced with simple <src>Measure::TYPE</src>
116  // where no offsets or frames are needed in the reference. </note>
117  // Default constructor; generates the ITRF centre
119  // Create from data and reference
120  // <group>
121  MPosition(const MVPosition &dt);
122  MPosition(const MVPosition &dt, const MPosition::Ref &rf);
124  MPosition(const Quantity &dt, const Quantity &dt1, const Quantity &dt2);
125  MPosition(const Quantity &dt, const Quantity &dt1, const Quantity &dt2,
126  const MPosition::Ref &rf);
127  MPosition(const Quantity &dt, const Quantity &dt1, const Quantity &dt2,
128  MPosition::Types rf);
129  MPosition(const Quantity &dt0, const Quantum<Vector<Double> > &dt);
130  MPosition(const Quantity &dt0, const Quantum<Vector<Double> > &dt,
131  const MPosition::Ref &rf);
132  MPosition(const Quantity &dt0, const Quantum<Vector<Double> > &dt,
133  MPosition::Types rf);
134  MPosition(const Measure *dt);
135  MPosition(const MeasValue *dt);
136  // </group>
137 
138  // <group>
141  // </group>
142 
143  //# Destructor
144  virtual ~MPosition();
145 
146  //# Operators
147 
148  //# General Member Functions
149  // Tell me your type
150  // <group>
151  virtual const String &tellMe() const;
152  static const String &showMe();
153  static void assure(const Measure &in);
154  // </group>
155  // Translate reference code. The uInt version has a check for valid codes
156  // (i.e. it is a safe cast).
157  // <thrown>
158  // <li> AipsError in the uInt interface if illegal code given
159  // </thrown>
160  // <group>
162  static const String &showType(MPosition::Types tp);
163  static const String &showType(uInt tp);
164  // </group>
165  // Translate string to reference code
166  // <group>
167  static Bool getType(MPosition::Types &tp, const String &in);
168  // this one throws an exception for an unrecognized String
169  static MPosition::Types getType(const String& in);
170 
171  Bool giveMe(MPosition::Ref &mr, const String &in);
172  // </group>
173  // Set the offset in the reference (False if non-matching Measure)
174  virtual Bool setOffset(const Measure &in);
175  // Set the reference type to the specified String. False if illegal
176  // string, reference set to DEFAULT.
177  virtual Bool setRefString(const String &in);
178  // Get the default reference type
179  virtual const String &getDefaultType() const;
180  // Get a list of all known reference codes. nall returns the number in list,
181  // nextra the number of specials (like planets) that should be at
182  // end of list). typ returns the list of corresponding types.
183  // <group>
184  virtual const String* allTypes(Int &nall, Int &nextra,
185  const uInt *&typ) const;
186  static const String* allMyTypes(Int &nall, Int &nextra,
187  const uInt *&typ);
188  // </group>
189  // Check if all internal tables of types (both enum and String) are
190  // complete and correct. This function is called automatically if and when
191  // necessary.
192  // <thrown>
193  // <li> AipsError if a (programming) error in the types.
194  // </thrown>
195  // <group>
196  virtual void checkTypes() const;
197  static void checkMyTypes();
198  // </group>
199  // Get the reference type (for records, including codes like R_)
200  virtual String getRefString() const;
201 
202  // Get Measure data
203  // <group>
204  Quantum<Vector<Double> > get(const Unit &inunit) const;
206  Quantum<Vector<Double> > getAngle(const Unit &inunit) const;
207  // </group>
208 
209  // Make copy
210  // <group>
211  virtual Measure *clone() const;
212  // </group>
213 
214  private:
215  //# Enumerations
216 
217  //# Data
218 
219  //# Member functions
220 
221 };
222 
223 
224 } //# NAMESPACE CASACORE - END
225 
226 #endif
MPosition()
Tip: In the following constructors and other functions, all MeasRef can be replaced with simple Measu...
virtual const String & tellMe() const
Tell me your type.
static Bool getType(MPosition::Types &tp, const String &in)
Translate string to reference code.
MPosition(const Quantity &dt0, const Quantum< Vector< Double > > &dt, const MPosition::Ref &rf)
static MPosition::Types getType(const String &in)
this one throws an exception for an unrecognized String
static void assure(const Measure &in)
Types
Types of known MPositions Warning: The order defines the order in the translation matrix FromTo in t...
Definition: MPosition.h:94
ArrayMeasColumn< MPosition > ArrayColumn
Definition: MPosition.h:111
MPosition(const MVPosition &dt)
Create from data and reference.
Bool giveMe(MPosition::Ref &mr, const String &in)
MPosition(const MPosition &)
static void checkMyTypes()
MPosition(const MeasValue *dt)
MCPosition MCType
Measure conversion routines for this class (i.e.
Definition: MPosition.h:104
virtual const String & getDefaultType() const
Get the default reference type.
Quantum< Vector< Double > > getAngle(const Unit &inunit) const
MPosition(const Quantity &dt0, const Quantum< Vector< Double > > &dt)
virtual String getRefString() const
Get the reference type (for records, including codes like R_)
MeasConvert< MPosition > Convert
Measure Convert (i.e.
Definition: MPosition.h:108
Quantum< Vector< Double > > getAngle() const
static const String * allMyTypes(Int &nall, Int &nextra, const uInt *&typ)
static MPosition::Types castType(uInt tp)
Translate reference code.
MPosition & operator=(const MPosition &)
virtual void checkTypes() const
Check if all internal tables of types (both enum and String) are complete and correct.
MeasRef< MPosition > Ref
Measure reference (i.e.
Definition: MPosition.h:106
MPosition(const Quantity &dt0, const Quantum< Vector< Double > > &dt, MPosition::Types rf)
MVPosition MVType
Measure value container for this class (i.e.
Definition: MPosition.h:102
virtual Bool setOffset(const Measure &in)
Set the offset in the reference (False if non-matching Measure)
ScalarMeasColumn< MPosition > ScalarColumn
Measure table Columns (e.g., MPosition::ScalarColumn)
Definition: MPosition.h:110
virtual Bool setRefString(const String &in)
Set the reference type to the specified String.
MPosition(const Quantity &dt, const Quantity &dt1, const Quantity &dt2)
MPosition(const MVPosition &dt, const MPosition::Ref &rf)
Quantum< Vector< Double > > get(const Unit &inunit) const
Get Measure data.
static const String & showMe()
MPosition(const Quantity &dt, const Quantity &dt1, const Quantity &dt2, MPosition::Types rf)
static const String & showType(MPosition::Types tp)
static const String & showType(uInt tp)
virtual const String * allTypes(Int &nall, Int &nextra, const uInt *&typ) const
Get a list of all known reference codes.
virtual Measure * clone() const
Make copy.
MPosition(const Measure *dt)
MPosition(const Quantity &dt, const Quantity &dt1, const Quantity &dt2, const MPosition::Ref &rf)
MPosition(const MVPosition &dt, MPosition::Types rf)
Types
Each derived class should have a Types enumeration, specifying the recognised frame types.
Definition: Measure.h:254
String: the storage and methods of handling collections of characters.
Definition: String.h:225
this file contains all the compiler specific defines
Definition: mainpage.dox:28
unsigned int uInt
Definition: aipstype.h:51
int Int
Definition: aipstype.h:50
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42