casacore
 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::VelocityMachine Class Reference

Converts between velocities and frequencies. More...

#include <VelocityMachine.h>

Public Member Functions

 VelocityMachine (const MFrequency::Ref &freqRef, const Unit &freqUnits, const MVFrequency &restFreq, const MDoppler::Ref &velRef, const Unit &velUnits)
 Construct a machine from the input values (no frame conversion, implicit frame if necessary) More...
 
 VelocityMachine (const MFrequency::Ref &freqRef, const Unit &freqUnits, const MVFrequency &restFreq, const MDoppler::Ref &velRef, const Unit &velUnits, const MeasFrame &frame)
 Construct a machine from the input values (no frame conversion, explicit frame will be added to freqRef) More...
 
 VelocityMachine (const MFrequency::Ref &freqRef, const Unit &freqUnits, const MVFrequency &restFreq, const MFrequency::Types &convertRef, const MDoppler::Ref &velRef, const Unit &velUnits)
 Construct a machine from the input values (frame conversion, implicit frame assumed if necessary) with explicit velocity reference frame specified. More...
 
 VelocityMachine (const MFrequency::Ref &freqref, const Unit &freqUnits, const MVFrequency &restFreq, const MFrequency::Types &convertRef, const MDoppler::Ref &velRef, const Unit &velUnits, const MeasFrame &frame)
 Construct a machine from the input values (frame conversion, explicit frame) with explicit velocity reference frame specified, and added to freqref. More...
 
 VelocityMachine (const VelocityMachine &other)
 Copy constructor (copy semantics) More...
 
VelocityMachineoperator= (const VelocityMachine &other)
 Copy assignment (copy semantics) More...
 
 ~VelocityMachine ()
 
const Quantum< Double > & operator() (const MVFrequency &in)
 Return velocity if frequency given, or a frequency if a velocity is given. More...
 
const Quantum< Double > & operator() (const MVDoppler &in)
 
const Quantum< Double > & operator() (const Quantum< Double > &in)
 
const Quantum< Double > & makeVelocity (Double in)
 
const Quantum< Double > & makeFrequency (Double in)
 
const Quantum< Vector< Double > > & makeVelocity (const Vector< Double > &in)
 
const Quantum< Vector< Double > > & makeFrequency (const Vector< Double > &in)
 
void set (const MFrequency::Ref &in)
 Set or reset the specified part of the machine. More...
 
void set (const Unit &in)
 
void set (const MVFrequency &in)
 Sets the rest frequency. More...
 
void set (const MFrequency::Types &in)
 
void set (const MDoppler::Ref &in)
 
void set (const MeasFrame &in)
 Sets the MeasFrame to be used in conversions. More...
 
const MFrequency::RefgetFrequencyReference () const
 Get the general information used in the machine (shadows the sets above and the constructor arguments. More...
 
const UnitgetFrequencyUnits () const
 
const MDoppler::RefgetDopplerReference () const
 
const UnitgetDopplerUnits () const
 
const MVFrequencygetRestFrequency () const
 
const MFrequency::TypesgetConversionReference () const
 
void reCalculate ()
 Recalculate the machinery from the original inputs. More...
 

Private Member Functions

 VelocityMachine ()
 Construct an empty machine (not implemented) More...
 
void init ()
 Initialise machinery. More...
 
void copy (const VelocityMachine &other)
 Copy data members. More...
 

Private Attributes

MFrequency::Ref fref_p
 Frequency reference. More...
 
Unit fun_p
 Frequency units. More...
 
MVFrequency rest_p
 Rest frequency. More...
 
MFrequency::Types vfm_p
 Velocity frame. More...
 
MDoppler::Ref vref_p
 Velocity reference. More...
 
Unit vun_p
 Velocity units. More...
 
Double vfac_p
 
MFrequency::Convert cvfv_p
 Frequency conversion forward. More...
 
MFrequency::Convert cvvf_p
 Frequency conversion backward. More...
 
MDoppler::Convert cvvo_p
 Velocity conversion forward. More...
 
MDoppler::Convert cvov_p
 Velocity conversion backward. More...
 
Quantum< Doubleresv_p
 Result. More...
 
Quantum< Doubleresf_p
 
Quantum< Vector< Double > > vresv_p
 
Quantum< Vector< Double > > vresf_p
 

Detailed Description

Converts between velocities and frequencies.

Intended use:

Public interface

Review Status

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

Prerequisite

Etymology

From Velocity and machinery

Synopsis

The construction of a VelocityMachine class object creates a machine that can calculate the velocity from a frequency, or vice versa, a frequency from a velocity.

To be able to do the conversions, the machine (or rather its constructors) needs to know the following information:

To be able to convert between different types (say a velocity referenced with respect to the 'LSRK', and a frequency referenced with respect to 'TOPO', the following additional, optional information can be included explicitly in the constructors:

Once the machine has been set up, operator() can be used to convert between velocities and frequencies if the input argument type (e.g. an MVFrequency) can be deduced. In other cases makeFrequency() or makeVelocity() should be used (e.g. if the argument type is a simple Double).

Example

// Define a time/position frame
MEpoch epo(MVEpoch(MVTime(98,5,16,0.5).day()));
MPosition pos;
MeasFrame frame(epo, pos);
//
// Note that e.g. the time in the frame can be changed later
// Specify the frequency reference
//
// Specify the velocity reference
MDoppler::Ref vr(MDoppler::OPT);
//
// Specify the default units
Unit fu("eV");
Unit vu("AU/a");
//
// Get the rest frequency
MVFrequency rfrq(QC::HI);
//
// Set up a machine (no conversion of reference frame)
VelocityMachine exec(fr, fu, rfrq, vr, vu, frame);
//
// or as (with conversion of reference frame it could have been)
// VelocityMachine exec(fr, fu, rfrq, vr, vu, MFrequency::TOPO, frame);
// Given a current observational frequency of 5.87432837e-06 eV
// its velocity will be (in AU/yr)
cout << "Velocity: " << exec.makeVelocity(5.87432837e-06) << endl;
//
// Introducing an offset
MFrequency foff(MVFrequency(Quantity(5.87432837e-06, "eV")),
//
// and setting it in the reference, and regenerating machine:
fr.set(foff);
exec.set(fr);
//
// the following will give the same result:
cout << "Velocity: " << exec.makeVelocity(0.0) << endl;

See the test program for more examples

Motivation

To aid in converting series of frequencies and velocities

To Do

Definition at line 183 of file VelocityMachine.h.

Constructor & Destructor Documentation

casacore::VelocityMachine::VelocityMachine ( const MFrequency::Ref freqRef,
const Unit freqUnits,
const MVFrequency restFreq,
const MDoppler::Ref velRef,
const Unit velUnits 
)

Construct a machine from the input values (no frame conversion, implicit frame if necessary)

casacore::VelocityMachine::VelocityMachine ( const MFrequency::Ref freqRef,
const Unit freqUnits,
const MVFrequency restFreq,
const MDoppler::Ref velRef,
const Unit velUnits,
const MeasFrame frame 
)

Construct a machine from the input values (no frame conversion, explicit frame will be added to freqRef)

casacore::VelocityMachine::VelocityMachine ( const MFrequency::Ref freqRef,
const Unit freqUnits,
const MVFrequency restFreq,
const MFrequency::Types convertRef,
const MDoppler::Ref velRef,
const Unit velUnits 
)

Construct a machine from the input values (frame conversion, implicit frame assumed if necessary) with explicit velocity reference frame specified.

casacore::VelocityMachine::VelocityMachine ( const MFrequency::Ref freqref,
const Unit freqUnits,
const MVFrequency restFreq,
const MFrequency::Types convertRef,
const MDoppler::Ref velRef,
const Unit velUnits,
const MeasFrame frame 
)

Construct a machine from the input values (frame conversion, explicit frame) with explicit velocity reference frame specified, and added to freqref.

casacore::VelocityMachine::VelocityMachine ( const VelocityMachine other)

Copy constructor (copy semantics)

casacore::VelocityMachine::~VelocityMachine ( )
casacore::VelocityMachine::VelocityMachine ( )
private

Construct an empty machine (not implemented)

Member Function Documentation

void casacore::VelocityMachine::copy ( const VelocityMachine other)
private

Copy data members.

const MFrequency::Types& casacore::VelocityMachine::getConversionReference ( ) const
const MDoppler::Ref& casacore::VelocityMachine::getDopplerReference ( ) const
const Unit& casacore::VelocityMachine::getDopplerUnits ( ) const
const MFrequency::Ref& casacore::VelocityMachine::getFrequencyReference ( ) const

Get the general information used in the machine (shadows the sets above and the constructor arguments.

The MeasFrame should be explicitly asked for from the frequency reference by the user

const Unit& casacore::VelocityMachine::getFrequencyUnits ( ) const
const MVFrequency& casacore::VelocityMachine::getRestFrequency ( ) const
void casacore::VelocityMachine::init ( )
private

Initialise machinery.

const Quantum<Double>& casacore::VelocityMachine::makeFrequency ( Double  in)
const Quantum<Vector<Double> >& casacore::VelocityMachine::makeFrequency ( const Vector< Double > &  in)
const Quantum<Double>& casacore::VelocityMachine::makeVelocity ( Double  in)
const Quantum<Vector<Double> >& casacore::VelocityMachine::makeVelocity ( const Vector< Double > &  in)
const Quantum<Double>& casacore::VelocityMachine::operator() ( const MVFrequency in)

Return velocity if frequency given, or a frequency if a velocity is given.

const Quantum<Double>& casacore::VelocityMachine::operator() ( const MVDoppler in)
const Quantum<Double>& casacore::VelocityMachine::operator() ( const Quantum< Double > &  in)
VelocityMachine& casacore::VelocityMachine::operator= ( const VelocityMachine other)

Copy assignment (copy semantics)

void casacore::VelocityMachine::reCalculate ( )

Recalculate the machinery from the original inputs.

Note that in all normal circumstances this function does not have to be used (the set() methods will do it automatically). At the moment I cannot think of any circumstance it should be used explicitly.

void casacore::VelocityMachine::set ( const MFrequency::Ref in)

Set or reset the specified part of the machine.

The machinery will be reset to reflect the changes made.

Sets a new frequency reference. Note that if an explicit frame has been used in earlier constructors, the frame should again be set explicitly with set(MeasFrame).

void casacore::VelocityMachine::set ( const Unit in)
void casacore::VelocityMachine::set ( const MVFrequency in)

Sets the rest frequency.

void casacore::VelocityMachine::set ( const MFrequency::Types in)
void casacore::VelocityMachine::set ( const MDoppler::Ref in)
void casacore::VelocityMachine::set ( const MeasFrame in)

Sets the MeasFrame to be used in conversions.

Member Data Documentation

MFrequency::Convert casacore::VelocityMachine::cvfv_p
private

Frequency conversion forward.

Definition at line 296 of file VelocityMachine.h.

MDoppler::Convert casacore::VelocityMachine::cvov_p
private

Velocity conversion backward.

Definition at line 302 of file VelocityMachine.h.

MFrequency::Convert casacore::VelocityMachine::cvvf_p
private

Frequency conversion backward.

Definition at line 298 of file VelocityMachine.h.

MDoppler::Convert casacore::VelocityMachine::cvvo_p
private

Velocity conversion forward.

Definition at line 300 of file VelocityMachine.h.

MFrequency::Ref casacore::VelocityMachine::fref_p
private

Frequency reference.

Definition at line 279 of file VelocityMachine.h.

Unit casacore::VelocityMachine::fun_p
private

Frequency units.

Definition at line 282 of file VelocityMachine.h.

Quantum<Double> casacore::VelocityMachine::resf_p
private

Definition at line 306 of file VelocityMachine.h.

MVFrequency casacore::VelocityMachine::rest_p
private

Rest frequency.

Definition at line 285 of file VelocityMachine.h.

Quantum<Double> casacore::VelocityMachine::resv_p
private

Result.

Definition at line 305 of file VelocityMachine.h.

Double casacore::VelocityMachine::vfac_p
private

Definition at line 293 of file VelocityMachine.h.

MFrequency::Types casacore::VelocityMachine::vfm_p
private

Velocity frame.

Definition at line 287 of file VelocityMachine.h.

MDoppler::Ref casacore::VelocityMachine::vref_p
private

Velocity reference.

Definition at line 289 of file VelocityMachine.h.

Quantum<Vector<Double> > casacore::VelocityMachine::vresf_p
private

Definition at line 308 of file VelocityMachine.h.

Quantum<Vector<Double> > casacore::VelocityMachine::vresv_p
private

Definition at line 307 of file VelocityMachine.h.

Unit casacore::VelocityMachine::vun_p
private

Velocity units.

Definition at line 292 of file VelocityMachine.h.


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