Loading...
Searching...
No Matches
MeasRef.h
Go to the documentation of this file.
//# MeasRef.h: Reference frame for physical measures
//# Copyright (C) 1995,1996,1997,1999,2000,2001
//# Associated Universities, Inc. Washington DC, USA.
//#
//# This library is free software; you can redistribute it and/or modify it
//# under the terms of the GNU Library General Public License as published by
//# the Free Software Foundation; either version 2 of the License, or (at your
//# option) any later version.
//#
//# This library is distributed in the hope that it will be useful, but WITHOUT
//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
//# License for more details.
//#
//# You should have received a copy of the GNU Library General Public License
//# along with this library; if not, write to the Free Software Foundation,
//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
//#
//# Correspondence concerning AIPS++ should be addressed as follows:
//# Internet email: casa-feedback@nrao.edu.
//# Postal address: AIPS++ Project Office
//# National Radio Astronomy Observatory
//# 520 Edgemont Road
//# Charlottesville, VA 22903-2475 USA
#ifndef MEASURES_MEASREF_H
#define MEASURES_MEASREF_H
//# Includes
#include <casacore/casa/aips.h>
#include <casacore/measures/Measures/MRBase.h>
#include <casacore/measures/Measures/MeasFrame.h>
#include <casacore/casa/iosfwd.h>
#include <memory>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
//# Forward Declarations
class String;
template <class Ms> class MeasRef;
// <summary> Reference frame for physical measures </summary>
// <use visibility=export>
// <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="tMeasure" demos="">
// </reviewed>
// <prerequisite>
// <li> <linkto class=MRBase>MRBase</linkto>: the MeasRef base class
// <li> <linkto class=Quantum>Quantum</linkto> class
// <li> <linkto class=Measure>Measure</linkto> class
// </prerequisite>
//
// <etymology>
// From Measure and Reference frame
// </etymology>
//
// <synopsis>
// MeasRef specifies the reference frame for a physical quantity
// specified by one of the derived <linkto class=Measure>Measure</linkto>
// classes (e.g. <linkto class=MEpoch>MEpoch</linkto>). It is derived from
// <linkto class=MRBase>MRBase</linkto>, which describes the class.
//
// MeasRef containres are created using the <src>Measure::Ref</src> class
// (e.g. <src>MDirection::Ref</src>).
// </synopsis>
//
// <example>
// See <linkto class=Measure>Measure</linkto> for an example
// </example>
//
// <motivation>
// To gather all reference frame information in the one class.
// </motivation>
//
// <todo asof="1997/04/15">
// </todo>
template<class Ms> class MeasRef : public MRBase {
public:
//# Friends
//# Constructors
// Construct an empty MeasRef. I.e. it will have a standard,
// <em>default</em>, type; no offsets and Frame.
MeasRef();
// Copy constructor
MeasRef(const MeasRef<Ms> &other);
// Copy assignment
MeasRef &operator=(const MeasRef<Ms> &other);
// Construct a reference with specified type, offset and Frame
// <group>
// <note role=caution> The following should really be (and should
// still be called as), but
// compiler does not accept it, due to incomplete definition when
// called in MeasBase: </note>
// <src> MeasRef(Ms::Types tp); </src>
// Furthermore, default arguments are not supported with templated classes:
explicit MeasRef(const uInt tp);
MeasRef(const uInt tp, const Ms &ep);
MeasRef(const uInt tp, const MeasFrame &mf);
MeasRef(const uInt tp, const MeasFrame &mf, const Ms &ep);
// </group>
//# Destructor
~MeasRef();
//# Operators
// Check if same MeasRef
Bool operator==(const MeasRef<Ms> &other) const;
// Check if unequal MeasRef
Bool operator!=(const MeasRef<Ms> &other) const;
//# General Member Functions
// Check if empty reference
virtual Bool empty() const;
// Check the type of Measure the reference can be used for
// <group>
static const String &showMe();
// </group>
// Return the type of the reference
// <note role=caution> the following should really be
// (and should be interpreted as), but
// cannot create a virtual function:</note>
// <src> Ms::Types getType();</src>
virtual uInt getType() const;
// Return the frame of reference
virtual MeasFrame &getFrame();
// Return the first frame which has specified information. Checking is done in
// argument order.
// <thrown>
// <li> AipsError if neither reference has a frame or the proper type
// </thrown>
// <group>
static const MeasFrame &framePosition(MRBase &ref1,
MRBase &ref2);
static const MeasFrame &frameEpoch(MRBase &ref1,
MRBase &ref2);
static const MeasFrame &frameDirection(MRBase &ref1,
MRBase &ref2);
static const MeasFrame &frameRadialVelocity(MRBase &ref1,
MRBase &ref2);
static const MeasFrame &frameComet(MRBase &ref1,
MRBase &ref2);
// </group>
// Return the offset (or 0)
virtual const Measure* offset() const;
// Set the type
// <thrown>
// <li> AipsError if wrong Measure
// </thrown>
// <note role=caution> the following should really be
// (and should be called as), but
// compiler does not accept it, since a virtual function:</note>
// <src> void set(Ms::Types tp);</src>
// <group>
virtual void setType(uInt tp);
virtual void set(uInt tp);
// </group>
// Set a new offset
void set(const Ms &ep);
// Set a new offset (for internal use only)
void set(const Measure &ep);
// Set a new frame
virtual void set(const MeasFrame &mf);
// Print a Measure
virtual void print(ostream &os) const;
private:
// Representation class
class RefRep {
public:
// Constructor
// <note role=warning> Next one must be in-line for (some?) compilers </note>
RefRep() = default;
// The actual data
// <group>
// Type of reference
typename Ms::Types type = Ms::DEFAULT;
// Pointer to main Measure, defining an offset
std::unique_ptr<Measure> offmp;
// Reference frame
MeasFrame frame;
// </group>
};
//# Data
std::shared_ptr<RefRep> rep_p;
//# Member functions
// Create an instance of MeasRef
void create();
// Copy an instance
MeasRef copy();
};
} //# NAMESPACE CASACORE - END
#ifndef CASACORE_NO_AUTO_TEMPLATES
#include <casacore/measures/Measures/MeasRef.tcc>
#endif //# CASACORE_NO_AUTO_TEMPLATES
#endif
casacore::MRBase
Definition MRBase.h:100
casacore::MeasFrame
Definition MeasFrame.h:151
casacore::MeasRef::RefRep::frame
MeasFrame frame
Reference frame.
Definition MeasRef.h:188
casacore::MeasRef::RefRep::offmp
std::unique_ptr< Measure > offmp
Pointer to main Measure, defining an offset.
Definition MeasRef.h:186
casacore::MeasRef::RefRep::type
Ms::Types type
The actual data.
Definition MeasRef.h:184
casacore::MeasRef::RefRep::RefRep
RefRep()=default
Constructor Warning: Next one must be in-line for (some?) compilers .
casacore::MeasRef
Definition MeasRef.h:80
casacore::MeasRef::frameRadialVelocity
static const MeasFrame & frameRadialVelocity(MRBase &ref1, MRBase &ref2)
casacore::MeasRef< MBaseline >::rep_p
std::shared_ptr< RefRep > rep_p
Definition MeasRef.h:193
casacore::MeasRef::set
void set(const Measure &ep)
Set a new offset (for internal use only).
casacore::MeasRef::MeasRef
MeasRef(const uInt tp, const Ms &ep)
casacore::MeasRef::MeasRef
MeasRef()
Construct an empty MeasRef.
casacore::MeasRef::frameComet
static const MeasFrame & frameComet(MRBase &ref1, MRBase &ref2)
casacore::MeasRef::operator!=
Bool operator!=(const MeasRef< Ms > &other) const
Check if unequal MeasRef.
casacore::MeasRef::~MeasRef
~MeasRef()
casacore::MeasRef::frameEpoch
static const MeasFrame & frameEpoch(MRBase &ref1, MRBase &ref2)
casacore::MeasRef::MeasRef
MeasRef(const uInt tp)
Construct a reference with specified type, offset and Frame.
casacore::MeasRef::print
virtual void print(ostream &os) const
Print a Measure.
casacore::MeasRef::framePosition
static const MeasFrame & framePosition(MRBase &ref1, MRBase &ref2)
Return the first frame which has specified information.
casacore::MeasRef::set
void set(const Ms &ep)
Set a new offset.
casacore::MeasRef::getType
virtual uInt getType() const
Return the type of the reference Caution: the following should really be (and should be interpreted ...
casacore::MeasRef::set
virtual void set(uInt tp)
casacore::MeasRef::frameDirection
static const MeasFrame & frameDirection(MRBase &ref1, MRBase &ref2)
casacore::MeasRef::MeasRef
MeasRef(const uInt tp, const MeasFrame &mf)
casacore::MeasRef::copy
MeasRef copy()
Copy an instance.
casacore::MeasRef::operator=
MeasRef & operator=(const MeasRef< Ms > &other)
Copy assignment.
casacore::MeasRef::setType
virtual void setType(uInt tp)
Set the type.
casacore::MeasRef::showMe
static const String & showMe()
Check the type of Measure the reference can be used for.
casacore::MeasRef::empty
virtual Bool empty() const
Check if empty reference.
casacore::MeasRef::operator==
Bool operator==(const MeasRef< Ms > &other) const
Check if same MeasRef.
casacore::MeasRef::offset
virtual const Measure * offset() const
Return the offset (or 0).
casacore::MeasRef::set
virtual void set(const MeasFrame &mf)
Set a new frame.
casacore::MeasRef::MeasRef
MeasRef(const MeasRef< Ms > &other)
Copy constructor.
casacore::MeasRef::getFrame
virtual MeasFrame & getFrame()
Return the frame of reference.
casacore::MeasRef::create
void create()
Create an instance of MeasRef.
casacore::MeasRef::MeasRef
MeasRef(const uInt tp, const MeasFrame &mf, const Ms &ep)
casacore::Measure
Definition Measure.h:232
casacore::String
String: the storage and methods of handling collections of characters.
Definition String.h:223
casacore
this file contains all the compiler specific defines
Definition mainpage.dox:28
casacore::uInt
unsigned int uInt
Definition aipstype.h:49
casacore::Bool
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40