casacore
|
#include <Quantum.h>
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 Unit & | getFullUnit () const |
Get the unit (as Unit) that is attached to the Quantum. 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... | |
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 QBase * | clone () 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 String & | getUnit () 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 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) |
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... | |
Additional Inherited Members | |
Protected Attributes inherited from casacore::QBase | |
Unit | qUnit |
Quantities (i.e. dimensioned values)
Public interface
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.
Quantities are values with a unit. Their basic specification can be one of two forms:
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
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> >
Quantum<Type>() value 0 generated
Quantum<Type>(Quantum<Type>) copy constructor
Quantum<Type>(Type factor) value factor generated
Quantum<Type>(Type factor, Unit unit) specified quantity
Quantum<Type>(Type factor, Quantum<any> quant) specified factor,
the unit from the quant Mathematical operators and functions and logical operations (comparisons) are defined on Quantums. They are, of course, only available if the template Type supports them.
= assignment of identical <type>
* *= multiple two Quantums of same <type>, or Quantum and type
/ /= divide two Quantums of same <type>, or Quantum and type
note: In multiplication and division, and if <type>
is scalar, the left or right-hand side can be of type <type>
(e.g 2.*Quantity is allowed) + += add two Quantums of same <type> or Quantum and type
and same unit dimensions (else exception) == != compare unit dimensions and value of same <type>. They will
be unequal if the units do not match or the values (possibly converted to common base units). All comparisons work also on a Quantum<type> and <type>
< > compare unit dimensions. Exception if no match,
else compare the values <= >= ibid
Quantities can be converted to other units by the following set of member functions:
convert(Quantum<Type> quant) will convert the quantum
to the units of the specified quant with the same conversion rules as the previous one
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:
isConform(Quantum<Type> quant)
or by an assertion, which will throw an exception:
The quantum can be retrieved with a change in units by:
get(Quantum<Type> quant) will return the quantum converted
to the units of the specified quant with the same conversion rules as the previous one The value and units of a quantum can be set or retrieved separately by the following member functions:
setUnit(Quantum<Type> quant) ibid
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)
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):
Major use is foreseen in all calculations with observed data.
< <= == != >= >
casacore::Quantum< Qtype >::Quantum | ( | ) |
Default constructor, generates '0'.
casacore::Quantum< Qtype >::Quantum | ( | const Quantum< Qtype > & | other | ) |
Copy constructor (deep copy)
casacore::Quantum< Qtype >::Quantum | ( | const Qtype & | factor | ) |
Construct undimensioned quantum (i.e.
unit="")
casacore::Quantum< Qtype >::Quantum | ( | const Qtype & | factor, |
const Unit & | s | ||
) |
Construct dimensioned quantum (e.g.
'1.23 km/Mpc')
casacore::Quantum< Qtype >::Quantum | ( | const Qtype & | factor, |
const QBase & | other | ||
) |
Construct quantum with unit copied from existing quantum.
void casacore::Quantum< Qtype >::assure | ( | const UnitVal & | uv | ) | const |
Bool casacore::Quantum< Qtype >::check | ( | const UnitVal & | uv | ) | const |
Check if of specified type.
|
virtual |
Get a copy of Quantum.
Implements casacore::QBase.
void casacore::Quantum< Qtype >::convert | ( | ) |
Convert a Quantum to specified units.
Convert to canonical units
void casacore::Quantum< Qtype >::convert | ( | const Quantum< Qtype > & | other | ) |
Convert a Quantum to units from specified quantum (ibid example)
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.
Quantum<Qtype> casacore::Quantum< Qtype >::get | ( | ) | const |
Return a Quantum converted to specified units
Convert to canonical units
Quantum<Qtype> casacore::Quantum< Qtype >::get | ( | const Quantum< Qtype > & | other | ) | const |
Convert a Quantum to units from specified quantum (ibid example)
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.
Qtype casacore::Quantum< Qtype >::getBaseValue | ( | ) | const |
Get value in canonical base units.
|
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.
Qtype& casacore::Quantum< Qtype >::getValue | ( | ) |
const Qtype& casacore::Quantum< Qtype >::getValue | ( | ) | const |
Get value of quantum in current units (i.e.
in units specified in quantum)
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
|
static |
Quantum<Qtype> casacore::Quantum< Qtype >::operator* | ( | const Quantum< Qtype > & | other | ) | const |
Quantum<Qtype>& casacore::Quantum< Qtype >::operator*= | ( | const Qtype & | other | ) |
Quantum<Qtype>& casacore::Quantum< Qtype >::operator*= | ( | const Quantum< Qtype > & | other | ) |
const Quantum<Qtype>& casacore::Quantum< Qtype >::operator+ | ( | ) | const |
Unary operations.
Quantum<Qtype> casacore::Quantum< Qtype >::operator+ | ( | const Quantum< Qtype > & | other | ) | const |
Quantum<Qtype>& casacore::Quantum< Qtype >::operator+= | ( | const Qtype & | other | ) |
Quantum<Qtype>& casacore::Quantum< Qtype >::operator+= | ( | const Quantum< Qtype > & | other | ) |
Quantum<Qtype> casacore::Quantum< Qtype >::operator- | ( | ) | const |
Quantum<Qtype> casacore::Quantum< Qtype >::operator- | ( | const Quantum< Qtype > & | other | ) | const |
Quantum<Qtype>& casacore::Quantum< Qtype >::operator-= | ( | const Qtype & | other | ) |
Quantum<Qtype>& casacore::Quantum< Qtype >::operator-= | ( | const Quantum< Qtype > & | other | ) |
Quantum<Qtype> casacore::Quantum< Qtype >::operator/ | ( | const Quantum< Qtype > & | other | ) | const |
Quantum<Qtype>& casacore::Quantum< Qtype >::operator/= | ( | const Qtype & | other | ) |
Quantum<Qtype>& casacore::Quantum< Qtype >::operator/= | ( | const Quantum< Qtype > & | other | ) |
Quantum<Qtype>& casacore::Quantum< Qtype >::operator= | ( | const Quantum< Qtype > & | other | ) |
Assignment (deep copy)
|
virtual |
Print a Quantum.
Implements casacore::QBase.
|
static |
|
static |
void casacore::Quantum< Qtype >::scale | ( | const Qtype & | factor | ) |
Scale (i.e. multiply) the value of the Quantum without changing units
void casacore::Quantum< Qtype >::setValue | ( | const Qtype & | val | ) |
Set the value without changing units.
|
virtual |
Get the type (using QuantumType) of derived Quantum (faster than Strings)
Implements casacore::QBase.
|
friend |
Input, only quantity is supported now.
|
private |