casa
$Rev:20696$
|
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) | |
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) | |
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. | |
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. | |
VelocityMachine (const VelocityMachine &other) | |
Copy constructor (copy semantics) | |
VelocityMachine & | operator= (const VelocityMachine &other) |
Copy assignment (copy semantics) | |
~VelocityMachine () | |
const Quantum< Double > & | operator() (const MVFrequency &in) |
Return velocity if frequency given, or a frequency if a velocity is given. | |
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. | |
void | set (const Unit &in) |
void | set (const MVFrequency &in) |
Sets the rest frequency. | |
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. | |
const MFrequency::Ref & | getFrequencyReference () const |
Get the general information used in the machine (shadows the sets above and the constructor arguments. | |
const Unit & | getFrequencyUnits () const |
const MDoppler::Ref & | getDopplerReference () const |
const Unit & | getDopplerUnits () const |
const MVFrequency & | getRestFrequency () const |
const MFrequency::Types & | getConversionReference () const |
void | reCalculate () |
Recalculate the machinery from the original inputs. | |
Private Member Functions | |
VelocityMachine () | |
Construct an empty machine (not implemented) | |
void | init () |
Initialise machinery. | |
void | copy (const VelocityMachine &other) |
Copy data members. | |
Private Attributes | |
MFrequency::Ref | fref_p |
Frequency reference. | |
Unit | fun_p |
Frequency units. | |
MVFrequency | rest_p |
Rest frequency. | |
MFrequency::Types | vfm_p |
Velocity frame. | |
MDoppler::Ref | vref_p |
Velocity reference. | |
Unit | vun_p |
Velocity units. | |
Double | vfac_p |
MFrequency::Convert | cvfv_p |
Frequency conversion forward. | |
MFrequency::Convert | cvvf_p |
Frequency conversion backward. | |
MDoppler::Convert | cvvo_p |
Velocity conversion forward. | |
MDoppler::Convert | cvov_p |
Velocity conversion backward. | |
Quantum< Double > | resv_p |
Result. | |
Quantum< Double > | resf_p |
Quantum< Vector< Double > > | vresv_p |
Quantum< Vector< Double > > | vresf_p |
Converts between velocities and frequencies.
Public interface
<h3>Review Status</h3><dl><dt>Reviewed By:<dd>UNKNOWN<dt>Date Reviewed:<dd>before2004/08/25<dt>Test programs:<dd>tVelocityMachine</dl>
From Velocity and machinery
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).
// Define a time/position frame MEpoch epo(MVEpoch(MVTime(98,5,16,0.5).day())); MPosition pos; MeasTable::Observatory(pos, "ATCA"); MeasFrame frame(epo, pos); // // Note that e.g. the time in the frame can be changed later // Specify the frequency reference MFrequency::Ref fr(MFrequency::LSRK); // // 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")), MFrequency::LSRK); // // 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
To aid in converting series of frequencies and velocities
Definition at line 183 of file VelocityMachine.h.
casa::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)
casa::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)
casa::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.
casa::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.
casa::VelocityMachine::VelocityMachine | ( | const VelocityMachine & | other | ) |
Copy constructor (copy semantics)
casa::VelocityMachine::VelocityMachine | ( | ) | [private] |
Construct an empty machine (not implemented)
void casa::VelocityMachine::copy | ( | const VelocityMachine & | other | ) | [private] |
Copy data members.
const MFrequency::Types& casa::VelocityMachine::getConversionReference | ( | ) | const |
const MDoppler::Ref& casa::VelocityMachine::getDopplerReference | ( | ) | const |
const Unit& casa::VelocityMachine::getDopplerUnits | ( | ) | const |
const MFrequency::Ref& casa::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& casa::VelocityMachine::getFrequencyUnits | ( | ) | const |
const MVFrequency& casa::VelocityMachine::getRestFrequency | ( | ) | const |
void casa::VelocityMachine::init | ( | ) | [private] |
Initialise machinery.
const Quantum<Double>& casa::VelocityMachine::makeFrequency | ( | Double | in | ) |
const Quantum<Double>& casa::VelocityMachine::makeVelocity | ( | Double | in | ) |
const Quantum<Double>& casa::VelocityMachine::operator() | ( | const MVFrequency & | in | ) |
Return velocity if frequency given, or a frequency if a velocity is given.
VelocityMachine& casa::VelocityMachine::operator= | ( | const VelocityMachine & | other | ) |
Copy assignment (copy semantics)
void casa::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 casa::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 casa::VelocityMachine::set | ( | const Unit & | in | ) |
void casa::VelocityMachine::set | ( | const MVFrequency & | in | ) |
Sets the rest frequency.
void casa::VelocityMachine::set | ( | const MFrequency::Types & | in | ) |
void casa::VelocityMachine::set | ( | const MDoppler::Ref & | in | ) |
void casa::VelocityMachine::set | ( | const MeasFrame & | in | ) |
Sets the MeasFrame to be used in conversions.
Frequency conversion forward.
Definition at line 296 of file VelocityMachine.h.
Velocity conversion backward.
Definition at line 302 of file VelocityMachine.h.
Frequency conversion backward.
Definition at line 298 of file VelocityMachine.h.
Velocity conversion forward.
Definition at line 300 of file VelocityMachine.h.
MFrequency::Ref casa::VelocityMachine::fref_p [private] |
Frequency reference.
Definition at line 279 of file VelocityMachine.h.
Unit casa::VelocityMachine::fun_p [private] |
Frequency units.
Definition at line 282 of file VelocityMachine.h.
Quantum<Double> casa::VelocityMachine::resf_p [private] |
Definition at line 306 of file VelocityMachine.h.
MVFrequency casa::VelocityMachine::rest_p [private] |
Rest frequency.
Definition at line 285 of file VelocityMachine.h.
Quantum<Double> casa::VelocityMachine::resv_p [private] |
Definition at line 305 of file VelocityMachine.h.
Double casa::VelocityMachine::vfac_p [private] |
Definition at line 293 of file VelocityMachine.h.
Velocity frame.
Definition at line 287 of file VelocityMachine.h.
MDoppler::Ref casa::VelocityMachine::vref_p [private] |
Velocity reference.
Definition at line 289 of file VelocityMachine.h.
Quantum<Vector<Double> > casa::VelocityMachine::vresf_p [private] |
Definition at line 308 of file VelocityMachine.h.
Quantum<Vector<Double> > casa::VelocityMachine::vresv_p [private] |
Definition at line 307 of file VelocityMachine.h.
Unit casa::VelocityMachine::vun_p [private] |
Velocity units.
Definition at line 292 of file VelocityMachine.h.