casa  5.7.0-16
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Private Member Functions | Private Attributes | List of all members
casacore::QuantumHolder Class Reference

A holder for Quantums to enable record conversions. More...

#include <QuantumHolder.h>

Inheritance diagram for casacore::QuantumHolder:

Public Member Functions

 QuantumHolder ()
 Creates an empty holder. More...
 QuantumHolder (const QBase &in)
 Create from a Quantum (copy semantics) More...
 QuantumHolder (const QuantumHolder &other)
 Copy a holder (copy semantics) More...
 ~QuantumHolder ()
QuantumHolderoperator= (const QuantumHolder &other)
 Assignment (copy semantics) More...
Bool isEmpty () const
 Check if it holds a Quantity. More...
Bool isQuantum () const
Bool isScalar () const
Bool isVector () const
Bool isArray () const
Bool isReal () const
Bool isComplex () const
Bool isQuantity () const
Bool isQuantumDouble () const
Bool isQuantumFloat () const
Bool isQuantumInt () const
Bool isQuantumComplex () const
Bool isQuantumDComplex () const
Bool isQuantumVectorDouble () const
Bool isQuantumVectorFloat () const
Bool isQuantumVectorInt () const
Bool isQuantumVectorComplex () const
Bool isQuantumVectorDComplex () const
Bool isQuantumArrayDouble () const
Bool isQuantumArrayFloat () const
Bool isQuantumArrayInt () const
Bool isQuantumArrayComplex () const
Bool isQuantumArrayDComplex () const
Int nelements () const
 Get number of numeric elements (1 if scalar, else vector length) or dimensions (0 if scalar) More...
Int ndim () const
const QBaseasQuantum () const
Get a Quantum from the holder (with lifetime as long 

as holder exists). More...

const Quantum< Double > & asQuantity ()
const Quantum< Double > & asQuantumDouble ()
const Quantum< Float > & asQuantumFloat ()
const Quantum< Int > & asQuantumInt ()
const Quantum< Complex > & asQuantumComplex ()
const Quantum< DComplex > & asQuantumDComplex ()
const Quantum< Vector< Double > > & asQuantumVectorDouble ()
const Quantum< Vector< Float > > & asQuantumVectorFloat ()
const Quantum< Vector< Int > > & asQuantumVectorInt ()
const Quantum< Vector< Complex > > & asQuantumVectorComplex ()
const Quantum< Vector
< DComplex > > & 
asQuantumVectorDComplex ()
const Quantum< Array< Double > > & asQuantumArrayDouble ()
const Quantum< Array< Float > > & asQuantumArrayFloat ()
const Quantum< Array< Int > > & asQuantumArrayInt ()
const Quantum< Array< Complex > > & asQuantumArrayComplex ()
const Quantum< Array< DComplex > > & asQuantumArrayDComplex ()
virtual Bool fromRecord (String &error, const RecordInterface &in)
 Create a Quantum from a record or a string. More...
virtual Bool fromString (String &error, const String &in)
 Initialise the class from a String representation. More...
virtual Bool toRecord (String &error, RecordInterface &out) const
 Create a record from a Quantum. More...
virtual void toRecord (RecordInterface &out) const
 this version throws an exception rather than returning false More...
virtual Record toRecord () const
 this version throws an exception or returns the result Record. More...
virtual const Stringident () const
 Return identification. More...
- Public Member Functions inherited from casacore::RecordTransformable
virtual ~RecordTransformable ()
 The destructor must be virtual so that the destructor of derived classes is actually used. More...

Private Member Functions

void toReal (const uInt &tp)
 Convert to a different real scalar quantum. More...
void toComplex (const uInt &tp)
 Convert to a different complex scalar quantum. More...
void toVector ()
 Convert scalar to Vector. More...
void toArray ()
 Convert scalar to Array. More...

Private Attributes

PtrHolder< QBasehold_p
 Pointer to a Quantity. More...

Detailed Description

A holder for Quantums to enable record conversions.

Intended use:

Public interface

Review Status

Reviewed By:
Date Reviewed:
Test programs:



A Holder of general Quantums


This class can be used to handle a heterogeneous list of Quantums, and can handle toRecord() and fromRecord() conversions. A QuantumHolder is created empty, from a Quantum (e.g. a Quantum<Double>) or a Quantum<Vector<Float> >).

The accepted range of Quantums is:

Scalars in the same group can be converted to any in the same group (e.g. Int to Double); Vectors of length 1 can be converted to scalars in the corresponding group; Scalars can always be converted to Vectors in the corresponding group. Real scalar values can be converted to Complex values. Vectors cannot be converted to other type vectors.

Checks on the contents can be made with functions like isQuantity and the contents can be obtained with functions like asQuantity. It is an error to try and retrieve a Quantum of the wrong type and doing so will generate an exception (AipsError).


TableRecord rec; // an empty record
Quantity x(12.5, "km/s"); // a Quantity
String error; // an error message
if (!QuantumHolder(x).toRecord(error, rec)) { // make record
cout << error << endl;
Record grec; // a Record
if (!QuantumHolder(x).toRecord(error, grec)) { // make record
cout << error << endl;
// Note that for GlishRecords use can be made of the
// GlishRecord::to/fromrecord() methods.


To make general conversions between Quantums and records, without knowing the actual Quantum being converted.

Definition at line 117 of file QuantumHolder.h.

Constructor & Destructor Documentation

casacore::QuantumHolder::QuantumHolder ( )

Creates an empty holder.

casacore::QuantumHolder::QuantumHolder ( const QBase in)

Create from a Quantum (copy semantics)

casacore::QuantumHolder::QuantumHolder ( const QuantumHolder other)

Copy a holder (copy semantics)

casacore::QuantumHolder::~QuantumHolder ( )

Member Function Documentation

const Quantum<Double>& casacore::QuantumHolder::asQuantity ( )
const QBase& casacore::QuantumHolder::asQuantum ( ) const

Get a Quantum from the holder (with lifetime as long 

as holder exists).

Conversions done if necessary and as described in introduction.

Thrown Exceptions

  • AipsError if holder empty or no conversion possible
const Quantum<Array<Complex> >& casacore::QuantumHolder::asQuantumArrayComplex ( )
const Quantum<Array<DComplex> >& casacore::QuantumHolder::asQuantumArrayDComplex ( )
const Quantum<Array<Double> >& casacore::QuantumHolder::asQuantumArrayDouble ( )
const Quantum<Array<Float> >& casacore::QuantumHolder::asQuantumArrayFloat ( )
const Quantum<Array<Int> >& casacore::QuantumHolder::asQuantumArrayInt ( )
const Quantum<Complex>& casacore::QuantumHolder::asQuantumComplex ( )
const Quantum<DComplex>& casacore::QuantumHolder::asQuantumDComplex ( )
const Quantum<Double>& casacore::QuantumHolder::asQuantumDouble ( )
const Quantum<Float>& casacore::QuantumHolder::asQuantumFloat ( )
const Quantum<Int>& casacore::QuantumHolder::asQuantumInt ( )
const Quantum<Vector<Complex> >& casacore::QuantumHolder::asQuantumVectorComplex ( )
const Quantum<Vector<DComplex> >& casacore::QuantumHolder::asQuantumVectorDComplex ( )
const Quantum<Vector<Double> >& casacore::QuantumHolder::asQuantumVectorDouble ( )
const Quantum<Vector<Float> >& casacore::QuantumHolder::asQuantumVectorFloat ( )
const Quantum<Vector<Int> >& casacore::QuantumHolder::asQuantumVectorInt ( )
virtual Bool casacore::QuantumHolder::fromRecord ( String error,
const RecordInterface in 

Create a Quantum from a record or a string.

A valid record will contain the following fields:

  • value: contains a numeric value of Int, Float, Double, Complex, DComplex or a vector thereof
  • unit: a string with a valid unit string.

A valid string will be one of the special time/angle formats or a value with a valid unit string. Illegal values or units will return False and write an error message.

Implements casacore::RecordTransformable.

Referenced by casa::SynthesisImagerMixin< T >::asQuantity().

virtual Bool casacore::QuantumHolder::fromString ( String error,
const String inString 

Initialise the class from a String representation.

A string cannot contain enough information for many objects. Hence the default implementation of this class returns False, indicating that the class could not be initialised and an error message is appended to the supplied string. If the class can be initialised from a string then this function should be overridden.

Reimplemented from casacore::RecordTransformable.

Referenced by casa::SynthesisImagerMixin< T >::asQuantity().

virtual const String& casacore::QuantumHolder::ident ( ) const

Return identification.

Reimplemented from casacore::RecordTransformable.

Bool casacore::QuantumHolder::isArray ( ) const
Bool casacore::QuantumHolder::isComplex ( ) const
Bool casacore::QuantumHolder::isEmpty ( ) const

Check if it holds a Quantity.

Note that a Vector of length 1 will give True to scalar questions.

Bool casacore::QuantumHolder::isQuantity ( ) const
Bool casacore::QuantumHolder::isQuantum ( ) const
Bool casacore::QuantumHolder::isQuantumArrayComplex ( ) const
Bool casacore::QuantumHolder::isQuantumArrayDComplex ( ) const
Bool casacore::QuantumHolder::isQuantumArrayDouble ( ) const
Bool casacore::QuantumHolder::isQuantumArrayFloat ( ) const
Bool casacore::QuantumHolder::isQuantumArrayInt ( ) const
Bool casacore::QuantumHolder::isQuantumComplex ( ) const
Bool casacore::QuantumHolder::isQuantumDComplex ( ) const
Bool casacore::QuantumHolder::isQuantumDouble ( ) const
Bool casacore::QuantumHolder::isQuantumFloat ( ) const
Bool casacore::QuantumHolder::isQuantumInt ( ) const
Bool casacore::QuantumHolder::isQuantumVectorComplex ( ) const
Bool casacore::QuantumHolder::isQuantumVectorDComplex ( ) const
Bool casacore::QuantumHolder::isQuantumVectorDouble ( ) const
Bool casacore::QuantumHolder::isQuantumVectorFloat ( ) const
Bool casacore::QuantumHolder::isQuantumVectorInt ( ) const
Bool casacore::QuantumHolder::isReal ( ) const
Bool casacore::QuantumHolder::isScalar ( ) const
Bool casacore::QuantumHolder::isVector ( ) const
Int casacore::QuantumHolder::ndim ( ) const
Int casacore::QuantumHolder::nelements ( ) const

Get number of numeric elements (1 if scalar, else vector length) or dimensions (0 if scalar)

Thrown Exceptions

QuantumHolder& casacore::QuantumHolder::operator= ( const QuantumHolder other)

Assignment (copy semantics)

void casacore::QuantumHolder::toArray ( )

Convert scalar to Array.

void casacore::QuantumHolder::toComplex ( const uInt tp)

Convert to a different complex scalar quantum.

void casacore::QuantumHolder::toReal ( const uInt tp)

Convert to a different real scalar quantum.

virtual Bool casacore::QuantumHolder::toRecord ( String error,
RecordInterface out 
) const

Create a record from a Quantum.

A False return and an error message is only generated if there is no valid Quantum in the holder.

Implements casacore::RecordTransformable.

virtual void casacore::QuantumHolder::toRecord ( RecordInterface out) const

this version throws an exception rather than returning false

virtual Record casacore::QuantumHolder::toRecord ( ) const

this version throws an exception or returns the result Record.

void casacore::QuantumHolder::toVector ( )

Convert scalar to Vector.

Member Data Documentation

PtrHolder<QBase> casacore::QuantumHolder::hold_p

Pointer to a Quantity.

Definition at line 233 of file QuantumHolder.h.

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