Loading...
Searching...
No Matches
MVEpoch.h
Go to the documentation of this file.
//# MVEpoch.h: a class for high precision time
//# Copyright (C) 1996,1997,1998,1999,2000
//# 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 CASA_MVEPOCH_H
#define CASA_MVEPOCH_H
//# Includes
#include <casacore/casa/aips.h>
#include <casacore/casa/Arrays/Vector.h>
#include <casacore/casa/Quanta/Quantum.h>
#include <casacore/casa/Quanta/MeasValue.h>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
//# Forward Declarations
class Unit;
// <summary> A class for high precision time </summary>
// <use visibility=export>
// <reviewed reviewer="tcornwel" date="1996/02/22" tests="tMeasMath" demos="">
// </reviewed>
// <prerequisite>
// <li> <linkto class=MeasValue>MeasValue</linkto> class
// </prerequisite>
//
// <etymology>
// MVEpoch from Measure, Value and Epoch
// </etymology>
//
// <synopsis>
// MVEpoch is a class for high precision (10<sup>-16</sup> s) epochs over a
// period of 6*10<sup>10</sup> a.<br>
// MVEpochs can be compared, a time interval can be added or subtracted, and
// the time difference can be found.
// The following constructors:
// <ul>
// <li> <src>MVEpoch()</src> default; assuming 0
// <li> <src>MVEpoch(Double)</src> with time given in days
// <li> <src>MVEpoch(Double, Double=0)</src> with times given in days
// <li> <src>MVEpoch(Quantity, Quantity=0)</src> with times given
// <li> <src>MVEpoch(Quantum<Vector<Double> >)</src> with times given
// <li> <src>MVEpoch(Vector<Double>)</src> with times in days
// <li> <src>MVEpoch(Vector<Quantity>)</src> with times
// </ul>
// </synopsis>
//
// <example>
// See <linkto class=MEpoch>MEpoch</linkto>
// </example>
//
// <motivation>
// To have high precision timing
// </motivation>
//
// <todo asof="1996/02/04">
// <li> A proper high precision time, including multiplication etc should
// be considered. E.g. a multi-byte number with 6 bytes day
// and 8 bytes fractional day.
// </todo>
class MVEpoch : public MeasValue {
public:
//# Friends
//# Constructors
// Default constructor, generates default 0 epoch
MVEpoch();
// Copy constructor
MVEpoch(const MVEpoch &other);
// Constructor with time in days
// <group>
MVEpoch(Double inday, Double infrac=0);
MVEpoch(const Vector<Double> &inday);
// </group>
// Constructor with Quantities
// <group>
MVEpoch(const Quantity &in);
MVEpoch(const Quantity &in1, const Quantity &in2);
MVEpoch(const Quantum<Vector<Double> > &in);
MVEpoch(const Vector<Quantity> &in);
// </group>
//# Destructor
~MVEpoch();
//# Operators
// Copy assignment
MVEpoch &operator=(const MVEpoch &other);
// Add times
// <group>
MVEpoch &operator+=(const MVEpoch &other);
MVEpoch operator+(const MVEpoch &other) const;
// </group>
// Difference times
// <group>
MVEpoch &operator-=(const MVEpoch &other);
MVEpoch operator-(const MVEpoch &other) const;
// </group>
// Comparisons
// <group>
Bool operator==(const MVEpoch &other) const;
Bool operator!=(const MVEpoch &other) const;
Bool near(const MVEpoch &other, Double tol = 1e-13) const;
Bool nearAbs(const MVEpoch &other, Double tol = 1e-13) const;
// </group>
//# General Member Functions
// Constants
static const Double secInDay;
static const Unit unitDay;
// Tell me your type
// <group>
static void assure(const MeasValue &in);
// </group>
// Adjust the time to its constituent parts. The returned result is always 1.0
// <group>
virtual void adjust();
virtual void adjust(Double &res);
// </group>
// Get value in days
Double get() const;
// Get value with units
// <group>
Quantity getTime() const;
Quantity getTime(const Unit &unit) const;
// </group>
// Get value of integer days
Double getDay() const;
// Get fraction of days
Double getDayFraction() const;
// Print a value
virtual void print(ostream &os) const;
// Clone a value
virtual MeasValue *clone() const;
// Get the value in internal units
virtual Vector<Double> getVector() const;
// Set the value from internal units (set 0 for empty vector)
virtual void putVector(const Vector<Double> &in);
// Get the internal value as a <src>Vector<Quantity></src>. Usable in
// records. The getXRecordValue() gets additional information for records.
// Note that the Vectors could be empty.
// <group>
virtual Vector<Quantum<Double> > getRecordValue() const;
// </group>
// Set the internal value if correct values and dimensions
virtual Bool putValue(const Vector<Quantum<Double> > &in);
private:
//# Data members
// Whole days
// Note that if higher precision is needed, the splitting could be in
// 0.001 days and fractions thereof
Double wday;
// Fraction of days
Double frday;
//# Member functions
// Make days from quantity
Double makeDay(const Quantity &in) const;
// Add time from days
void addTime(Double in);
};
//# Global functions
} //# NAMESPACE CASACORE - END
#endif
casacore::MVEpoch::operator-
MVEpoch operator-(const MVEpoch &other) const
casacore::MVEpoch::getVector
virtual Vector< Double > getVector() const
Get the value in internal units.
casacore::MVEpoch::MVEpoch
MVEpoch(Double inday, Double infrac=0)
Constructor with time in days.
casacore::MVEpoch::operator==
Bool operator==(const MVEpoch &other) const
Comparisons.
casacore::MVEpoch::wday
Double wday
Whole days Note that if higher precision is needed, the splitting could be in 0.001 days and fraction...
Definition MVEpoch.h:193
casacore::MVEpoch::nearAbs
Bool nearAbs(const MVEpoch &other, Double tol=1e-13) const
casacore::MVEpoch::get
Double get() const
Get value in days.
casacore::MVEpoch::operator+
MVEpoch operator+(const MVEpoch &other) const
casacore::MVEpoch::~MVEpoch
~MVEpoch()
casacore::MVEpoch::clone
virtual MeasValue * clone() const
Clone a value.
casacore::MVEpoch::MVEpoch
MVEpoch()
Default constructor, generates default 0 epoch.
casacore::MVEpoch::MVEpoch
MVEpoch(const Quantum< Vector< Double > > &in)
casacore::MVEpoch::MVEpoch
MVEpoch(const Quantity &in1, const Quantity &in2)
casacore::MVEpoch::secInDay
static const Double secInDay
Constants.
Definition MVEpoch.h:140
casacore::MVEpoch::adjust
virtual void adjust()
Adjust the time to its constituent parts.
casacore::MVEpoch::print
virtual void print(ostream &os) const
Print a value.
casacore::MVEpoch::near
Bool near(const MVEpoch &other, Double tol=1e-13) const
casacore::MVEpoch::makeDay
Double makeDay(const Quantity &in) const
Make days from quantity.
casacore::MVEpoch::adjust
virtual void adjust(Double &res)
Adjust value and return a normalisation value.
casacore::MVEpoch::operator+=
MVEpoch & operator+=(const MVEpoch &other)
Add times.
casacore::MVEpoch::MVEpoch
MVEpoch(const Vector< Quantity > &in)
casacore::MVEpoch::addTime
void addTime(Double in)
Add time from days.
casacore::MVEpoch::unitDay
static const Unit unitDay
Definition MVEpoch.h:141
casacore::MVEpoch::operator=
MVEpoch & operator=(const MVEpoch &other)
Copy assignment.
casacore::MVEpoch::MVEpoch
MVEpoch(const MVEpoch &other)
Copy constructor.
casacore::MVEpoch::MVEpoch
MVEpoch(const Quantity &in)
Constructor with Quantities.
casacore::MVEpoch::putVector
virtual void putVector(const Vector< Double > &in)
Set the value from internal units (set 0 for empty vector).
casacore::MVEpoch::getTime
Quantity getTime() const
Get value with units.
casacore::MVEpoch::MVEpoch
MVEpoch(const Vector< Double > &inday)
casacore::MVEpoch::getRecordValue
virtual Vector< Quantum< Double > > getRecordValue() const
Get the internal value as a Vector<Quantity>.
casacore::MVEpoch::assure
static void assure(const MeasValue &in)
Tell me your type.
casacore::MVEpoch::operator-=
MVEpoch & operator-=(const MVEpoch &other)
Difference times.
casacore::MVEpoch::getTime
Quantity getTime(const Unit &unit) const
casacore::MVEpoch::getDay
Double getDay() const
Get value of integer days.
casacore::MVEpoch::getDayFraction
Double getDayFraction() const
Get fraction of days.
casacore::MVEpoch::putValue
virtual Bool putValue(const Vector< Quantum< Double > > &in)
Set the internal value if correct values and dimensions.
casacore::MVEpoch::operator!=
Bool operator!=(const MVEpoch &other) const
casacore::MVEpoch::frday
Double frday
Fraction of days.
Definition MVEpoch.h:195
casacore::MeasValue
Definition MeasValue.h:104
casacore::Quantum
Definition Quantum.h:269
casacore::Unit
Definition Unit.h:187
casacore::Vector
Definition Vector.h:82
casacore
this file contains all the compiler specific defines
Definition mainpage.dox:28
casacore::Bool
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40
casacore::Quantity
Quantum< Double > Quantity
Definition Quantum.h:39
casacore::Double
double Double
Definition aipstype.h:53