casacore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Public Member Functions | Private Attributes | Friends | List of all members
casacore::Quantum< Qtype > Class Template Reference

Quantities (i.e. dimensioned values) More...

#include <MeasValue.h>

Inheritance diagram for casacore::Quantum< Qtype >:
casacore::QBase

Public Member Functions

 Quantum ()
 Default constructor, generates '0'. More...
 
 Quantum (const Quantum< Qtype > &other)
 Copy constructor (deep copy) More...
 
 Quantum (const Qtype &factor)
 Construct undimensioned quantum (i.e. More...
 
 Quantum (const Qtype &factor, const Unit &s)
 Construct dimensioned quantum (e.g. More...
 
 Quantum (const Qtype &factor, const QBase &other)
 Construct quantum with unit copied from existing quantum. More...
 
Quantum< Qtype > & operator= (const Quantum< Qtype > &other)
 Assignment (deep copy) More...
 
const Quantum< Qtype > & operator+ () const
 Unary operations. More...
 
Quantum< Qtype > operator- () const
 
Quantum< Qtype > & operator+= (const Quantum< Qtype > &other)
 In place arithmetic functions: left hand side changed in place. More...
 
Quantum< Qtype > & operator+= (const Qtype &other)
 
Quantum< Qtype > & operator-= (const Quantum< Qtype > &other)
 
Quantum< Qtype > & operator-= (const Qtype &other)
 
Quantum< Qtype > & operator*= (const Quantum< Qtype > &other)
 
Quantum< Qtype > & operator*= (const Qtype &other)
 
Quantum< Qtype > & operator/= (const Quantum< Qtype > &other)
 
Quantum< Qtype > & operator/= (const Qtype &other)
 
Quantum< Qtype > operator+ (const Quantum< Qtype > &other) const
 Arithmetic operators: return Quantum<T> More...
 
Quantum< Qtype > operator- (const Quantum< Qtype > &other) const
 
Quantum< Qtype > operator* (const Quantum< Qtype > &other) const
 
Quantum< Qtype > operator/ (const Quantum< Qtype > &other) const
 
const Qtype & getValue () const
 Get value of quantum in current units (i.e. More...
 
Qtype & getValue ()
 
Qtype getBaseValue () const
 Get value in canonical base units. More...
 
Qtype getValue (const Unit &other, Bool requireConform=False) const
 Get value in specified units. More...
 
virtual const UnitgetFullUnit () const
 Get the unit (as Unit) that is attached to the Quantum. More...
 
void convert ()
 Convert a Quantum to specified units. More...
 
void convert (const Unit &s)
 Convert to specified units; any remainder will be expressed in canonical units. More...
 
void convert (const Quantum< Qtype > &other)
 Convert a Quantum to units from specified quantum (ibid example) More...
 
virtual QBaseclone () const
 Get a copy of Quantum. More...
 
virtual void print (ostream &os) const
 Print a Quantum. More...
 
virtual uInt type () const
 Get the type (using QuantumType) of derived Quantum (faster than Strings) More...
 
- Public Member Functions inherited from casacore::QBase
 QBase ()
 Default constructor, generates "". More...
 
 QBase (const Unit &s)
 Construct dimensioned QBase (e.g. More...
 
virtual ~QBase ()
 Destructor. More...
 
const StringgetUnit () const
 Get units of QBase. More...
 
void setUnit (const Unit &s)
 Re-specify parts of a QBase. More...
 
void setUnit (const QBase &other)
 Set new unit, copied from specified QBase, without changing value. More...
 
Bool isConform (const Unit &s) const
 Check for conformal matching units (e.g. More...
 
Bool isConform (const QBase &other) const
 Using units specified in QBase. More...
 

Static Public Member Functions

static uInt myType ()
 

Private Attributes

Qtype qVal
 Actual quantum value. More...
 

Friends

istream & operator>> (istream &is, Quantity &ku)
 Input, only quantity is supported now. More...
 
void scale (const Qtype &factor)
 Re-specify parts of a quantum. More...
 
void setValue (const Qtype &val)
 Set the value without changing units. More...
 
Bool check (const UnitVal &uv) const
 Check if of specified type. More...
 
void assure (const UnitVal &uv) const
 Assert correct kind. More...
 
Quantum< Qtype > get () const
 Return a Quantum converted to specified units. More...
 
Quantum< Qtype > get (const Unit &s) const
 Convert to specified units; any remainder will be expressed in canonical units. More...
 
Quantum< Qtype > get (const Quantum< Qtype > &other) const
 Convert a Quantum to units from specified quantum (ibid example) More...
 
static Bool read (Quantity &res, const String &in)
 Set the value and unit deduced from input string
Caution: At the moment the implementation can only convert scalars to the appropiate Quantum; If format for Array input defined, it could easily be changed; In addition recognition of date/time/angle still has to be added
More...
 
static Bool read (Quantity &res, MUString &in)
 

Additional Inherited Members

- Protected Attributes inherited from casacore::QBase
Unit qUnit
 

Detailed Description

template<class Qtype>
class casacore::Quantum< Qtype >

Quantities (i.e. dimensioned values)

Intended use:

Public interface

Review Status

Reviewed By:
UNKNOWN
Date Reviewed:
before2004/08/25
Test programs:
tQuantum

Prerequisite

Etymology

A Quantity is defined as a single Double value with attached units. From this definition the templated Quantum class arose, to have non-Double, non-scalar quantities.

Synopsis

Quantities are values with a unit. Their basic specification can be one of two forms:

Quantity(Double value, String unit); // or: Unit unit
Quantum<Type> (Type value, String unit) // or: Unit unit

A unit is a string of known unit fields separated by 'space' or '.' (to indicate multiply) or '/' (to indicate divide). See the Unit class for details.

Example: km/s/(Mpc.s)2 is identical to km.s-1.Mpc-2.s-2

Defining a Quantum

The following list of constructors is available.
Tip: In the following 'String' can be replaced by 'Unit' everywhere; The only difference being a check for a legitimate unit string being executed if Unit specified (with exception if error)

Tip: 'Quantum<Type>' can, if Type equals Double, be replaced with 'Quantity'

'Type' can be any simple or non-simple arithmetic type;

E;g; <Double>, <Complex>, <Vector<Double> >

Manipulating quantities

Mathematical operators and functions and logical operations (comparisons) are defined on Quantums. They are, of course, only available if the template Type supports them.

Manipulating the value and/or units of quanta

Quantities can be converted to other units by the following set of member functions:


Tip: All converting type methods (i;e; convert(), get() and getValue() with specified units), will automatically convert also from time to angle units (or v;v) if necessary, as long as they are simple; I;e; deg will be converted to h, but asking to convert m/s to m/deg will produce the standard conversion to m/deg;rad/s;

Quanta can be checked for having the correct unit dimensions (e.g. before addition or comparing) by the following two member functions, which will return a Bool value:

or by an assertion, which will throw an exception:

The quantum can be retrieved with a change in units by:

The value and units of a quantum can be set or retrieved separately by the following member functions:

The output operator (<<) will produce the value of the quantum and its units. Given Quantity myval(5.,"mJy"), << myval will produce: 5.0 mJy; while << myval.get("yW/m2") will produce: .00005 yW/m2.s.
The input operator (>>, or the static read functions) will convert a String to a Quantum (quantity only for now). The analysis will do the following:


Caution: Since e;g; 12d could be interpreted as being both an angle (12 degrees) or a quantity (12 days), the only way is to differentiate them with a decimal point (12;d will be days)

Example

An experiment has measured the energy of a photon in keV. The following will output the wavelength and frequency of this photon (see the QC class for quantity constants):

Double myval; // keV photon energy
Quantity quant(myval,"keV"); // make quantity
cout << "A photon with energy " << quant << endl
<< " has a frequency of "
<< (quant/QC::h)->get("GHz") << endl // h=Planck
<< " and a wavelength of "
<< (QC::c/quant/QC::h)->get("nm") // c=light velocity
<< " or " << QC::c/quant/QC::h << endl;

Motivation

Major use is foreseen in all calculations with observed data.

Template Type Argument Requirements (Qtype)

To Do

Definition at line 41 of file MeasValue.h.

Constructor & Destructor Documentation

template<class Qtype>
casacore::Quantum< Qtype >::Quantum ( )

Default constructor, generates '0'.

template<class Qtype>
casacore::Quantum< Qtype >::Quantum ( const Quantum< Qtype > &  other)

Copy constructor (deep copy)

template<class Qtype>
casacore::Quantum< Qtype >::Quantum ( const Qtype &  factor)

Construct undimensioned quantum (i.e.

unit="")

template<class Qtype>
casacore::Quantum< Qtype >::Quantum ( const Qtype &  factor,
const Unit s 
)

Construct dimensioned quantum (e.g.

'1.23 km/Mpc')

Thrown Exceptions

template<class Qtype>
casacore::Quantum< Qtype >::Quantum ( const Qtype &  factor,
const QBase other 
)

Construct quantum with unit copied from existing quantum.

Member Function Documentation

template<class Qtype>
void casacore::Quantum< Qtype >::assure ( const UnitVal uv) const

Assert correct kind.

Thrown Exceptions

  • AipsError if non-conforming unit dimensions
template<class Qtype>
Bool casacore::Quantum< Qtype >::check ( const UnitVal uv) const

Check if of specified type.

template<class Qtype>
virtual QBase* casacore::Quantum< Qtype >::clone ( ) const
virtual

Get a copy of Quantum.

Implements casacore::QBase.

template<class Qtype>
void casacore::Quantum< Qtype >::convert ( )

Convert a Quantum to specified units.

Convert to canonical units

template<class Qtype>
void casacore::Quantum< Qtype >::convert ( const Unit s)

Convert to specified units; any remainder will be expressed in canonical units.

E.g. conversion of Jy/pc into W/ly2 will result in W/ly2.m-1.s.

Thrown Exceptions

template<class Qtype>
void casacore::Quantum< Qtype >::convert ( const Quantum< Qtype > &  other)

Convert a Quantum to units from specified quantum (ibid example)

template<class Qtype>
Quantum<Qtype> casacore::Quantum< Qtype >::get ( ) const

Return a Quantum converted to specified units.

Convert to canonical units

template<class Qtype>
Quantum<Qtype> casacore::Quantum< Qtype >::get ( const Unit s) const

Convert to specified units; any remainder will be expressed in canonical units.

E.g. conversion of Jy/pc into W/ly2 will result in W/ly2.m-1.s.

Thrown Exceptions

template<class Qtype>
Quantum<Qtype> casacore::Quantum< Qtype >::get ( const Quantum< Qtype > &  other) const

Convert a Quantum to units from specified quantum (ibid example)

template<class Qtype>
Qtype casacore::Quantum< Qtype >::getBaseValue ( ) const

Get value in canonical base units.

template<class Qtype>
virtual const Unit& casacore::Quantum< Qtype >::getFullUnit ( ) const
virtual

Get the unit (as Unit) that is attached to the Quantum.

(use getUnit() if interested in the String part only, e.g. for output)

Implements casacore::QBase.

template<class Qtype>
const Qtype& casacore::Quantum< Qtype >::getValue ( ) const

Get value of quantum in current units (i.e.

in units specified in quantum)

template<class Qtype>
Qtype& casacore::Quantum< Qtype >::getValue ( )
template<class Qtype>
Qtype casacore::Quantum< Qtype >::getValue ( const Unit other,
Bool  requireConform = False 
) const

Get value in specified units.

If the other units do not conform to the units of this object and requireConform is True, an exception is thrown, with the following exceptions:
- angle to/from time conversions are implicitly supported
- frequency to/from/ wavelength conversions are implicitly supported

template<class Qtype>
static uInt casacore::Quantum< Qtype >::myType ( )
static
template<class Qtype>
Quantum<Qtype> casacore::Quantum< Qtype >::operator* ( const Quantum< Qtype > &  other) const
template<class Qtype>
Quantum<Qtype>& casacore::Quantum< Qtype >::operator*= ( const Quantum< Qtype > &  other)
template<class Qtype>
Quantum<Qtype>& casacore::Quantum< Qtype >::operator*= ( const Qtype &  other)
template<class Qtype>
const Quantum<Qtype>& casacore::Quantum< Qtype >::operator+ ( ) const

Unary operations.

template<class Qtype>
Quantum<Qtype> casacore::Quantum< Qtype >::operator+ ( const Quantum< Qtype > &  other) const

Arithmetic operators: return Quantum<T>

Thrown Exceptions

  • AipsError if non-conforming units (+ and -)

See QMath class for unequal argument types

template<class Qtype>
Quantum<Qtype>& casacore::Quantum< Qtype >::operator+= ( const Quantum< Qtype > &  other)

In place arithmetic functions: left hand side changed in place.

Thrown Exceptions

  • AipsError if non-conforming units (+ and -)
  • AipsError if illegal result unit (* and /; programming error)
template<class Qtype>
Quantum<Qtype>& casacore::Quantum< Qtype >::operator+= ( const Qtype &  other)
template<class Qtype>
Quantum<Qtype> casacore::Quantum< Qtype >::operator- ( ) const
template<class Qtype>
Quantum<Qtype> casacore::Quantum< Qtype >::operator- ( const Quantum< Qtype > &  other) const
template<class Qtype>
Quantum<Qtype>& casacore::Quantum< Qtype >::operator-= ( const Quantum< Qtype > &  other)
template<class Qtype>
Quantum<Qtype>& casacore::Quantum< Qtype >::operator-= ( const Qtype &  other)
template<class Qtype>
Quantum<Qtype> casacore::Quantum< Qtype >::operator/ ( const Quantum< Qtype > &  other) const
template<class Qtype>
Quantum<Qtype>& casacore::Quantum< Qtype >::operator/= ( const Quantum< Qtype > &  other)
template<class Qtype>
Quantum<Qtype>& casacore::Quantum< Qtype >::operator/= ( const Qtype &  other)
template<class Qtype>
Quantum<Qtype>& casacore::Quantum< Qtype >::operator= ( const Quantum< Qtype > &  other)

Assignment (deep copy)

template<class Qtype>
virtual void casacore::Quantum< Qtype >::print ( ostream &  os) const
virtual

Print a Quantum.

Implements casacore::QBase.

template<class Qtype>
static Bool casacore::Quantum< Qtype >::read ( Quantity res,
const String in 
)
static

Set the value and unit deduced from input string
Caution: At the moment the implementation can only convert scalars to the appropiate Quantum; If format for Array input defined, it could easily be changed; In addition recognition of date/time/angle still has to be added

template<class Qtype>
static Bool casacore::Quantum< Qtype >::read ( Quantity res,
MUString in 
)
static
template<class Qtype>
void casacore::Quantum< Qtype >::scale ( const Qtype &  factor)

Re-specify parts of a quantum.

Scale (i.e. multiply) the value of the Quantum without changing units

template<class Qtype>
void casacore::Quantum< Qtype >::setValue ( const Qtype &  val)

Set the value without changing units.

template<class Qtype>
virtual uInt casacore::Quantum< Qtype >::type ( ) const
virtual

Get the type (using QuantumType) of derived Quantum (faster than Strings)

Implements casacore::QBase.

Friends And Related Function Documentation

template<class Qtype>
istream& operator>> ( istream &  is,
Quantity ku 
)
friend

Input, only quantity is supported now.

Member Data Documentation

template<class Qtype>
Qtype casacore::Quantum< Qtype >::qVal
private

Actual quantum value.

Definition at line 426 of file Quantum.h.


The documentation for this class was generated from the following files: