casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes
casa::SpectralCoordinate Class Reference

Interconvert pixel and frequency values. More...

#include <SpectralCoordinate.h>

Inheritance diagram for casa::SpectralCoordinate:
casa::Coordinate

List of all members.

Public Types

enum  SpecType {
  FREQ,
  VRAD,
  VOPT,
  BETA,
  WAVE,
  AWAV
}

Public Member Functions

 SpectralCoordinate ()
 Default constructor.
 SpectralCoordinate (MFrequency::Types type, Double f0, Double inc, Double refPix, Double restFrequency=0.0)
 Create a linear frequency axis SpectralCoordinate f0 is the frequency of the reference pixel, inc is the pixel increment, refPix is the reference pixel.
 SpectralCoordinate (MFrequency::Types type, const Quantum< Double > &f0, const Quantum< Double > &inc, Double refPix, const Quantum< Double > &restFrequency=Quantum< Double >(0.0,"Hz"))
 Create linear frequency axis SpectralCoordinate with Quantum-based interface.
 SpectralCoordinate (MFrequency::Types type, const Vector< Double > &freqs, Double restFrequency=0.0)
 Construct a SpectralCoordinate with the specified frequencies (in Hz).
 SpectralCoordinate (MFrequency::Types type, const Quantum< Vector< Double > > &freqs, const Quantum< Double > &restFrequency=Quantum< Double >(0.0,"Hz"))
 Construct a SpectralCoordinate with the specified frequencies with Quantum-based interface.
 SpectralCoordinate (MFrequency::Types freqType, MDoppler::Types velType, const Vector< Double > &velocities, const String &velUnit, Double restFrequency=0.0)
 Construct a SpectralCoordinate with the specified velocities (in km/s).
 SpectralCoordinate (MFrequency::Types freqType, const Vector< Double > &wavelengths, const String &waveUnit, Double restFrequency=0.0, Bool inAir=False)
 Construct a SpectralCoordinate with the specified wavelengths (in mm).
 SpectralCoordinate (MFrequency::Types freqType, const ::wcsprm &wcs, Bool oneRel=True)
 Construct from wcs structure.
 SpectralCoordinate (const SpectralCoordinate &other)
 Copy constructor (copy semantics).
SpectralCoordinateoperator= (const SpectralCoordinate &other)
 Assignment (copy semantics).
virtual ~SpectralCoordinate ()
 Destructor.
virtual Coordinate::Type type () const
 Always returns Coordinate::SPECTRAL.
virtual String showType () const
 Always returns the String "Spectral".
virtual uInt nPixelAxes () const
 Always returns 1.
virtual uInt nWorldAxes () const
Bool setReferenceConversion (MFrequency::Types type, const MEpoch &epoch, const MPosition &position, const MDirection &direction)
 Set extra conversion layer.
void getReferenceConversion (MFrequency::Types &type, MEpoch &epoch, MPosition &position, MDirection &direction) const
virtual Bool toWorld (Vector< Double > &world, const Vector< Double > &pixel) const
 Convert a pixel to a world coordinate or vice versa.
virtual Bool toPixel (Vector< Double > &pixel, const Vector< Double > &world) const
Bool toWorld (Double &world, const Double &pixel) const
Bool toPixel (Double &pixel, const Double &world) const
Bool toWorld (MFrequency &world, Double pixel) const
 Convert a pixel (channel number) into an MFrequency or MVFrequency and vice versa.
Bool toPixel (Double &pixel, const MFrequency &world) const
Bool toWorld (MVFrequency &world, Double pixel) const
Bool toPixel (Double &pixel, const MVFrequency &world) const
virtual Bool toWorldMany (Matrix< Double > &world, const Matrix< Double > &pixel, Vector< Bool > &failures) const
 Batch up a lot of transformations.
virtual Bool toPixelMany (Matrix< Double > &pixel, const Matrix< Double > &world, Vector< Bool > &failures) const
Bool setVelocity (const String &velUnit=String("km/s"), MDoppler::Types velType=MDoppler::RADIO)
 Set the state that is used for conversions from pixel and frequency to velocity or wavelength.
MDoppler::Types velocityDoppler () const
String velocityUnit () const
Bool setWavelengthUnit (const String &waveUnit=String("mm"))
String wavelengthUnit () const
Bool setNativeType (const SpectralCoordinate::SpecType spcType)
SpectralCoordinate::SpecType nativeType () const
Bool pixelToVelocity (Quantum< Double > &velocity, Double pixel) const
 Functions to convert to velocity (uses the current active rest frequency) or wavelength.
Bool pixelToVelocity (Double &velocity, Double pixel) const
Bool pixelToVelocity (Vector< Double > &velocity, const Vector< Double > &pixel) const
Bool frequencyToVelocity (Quantum< Double > &velocity, Double frequency) const
Bool frequencyToVelocity (Quantum< Double > &velocity, const MFrequency &frequency) const
Bool frequencyToVelocity (Quantum< Double > &velocity, const MVFrequency &frequency) const
Bool frequencyToVelocity (Double &velocity, Double frequency) const
Bool frequencyToVelocity (Vector< Double > &velocity, const Vector< Double > &frequency) const
Bool frequencyToWavelength (Vector< Double > &wavelength, const Vector< Double > &frequency) const
Bool frequencyToAirWavelength (Vector< Double > &wavelength, const Vector< Double > &frequency) const
Bool velocityToPixel (Double &pixel, Double velocity) const
 The refractive index of air (argument can be wavelength or airwavelength) according to Greisen et al., 2006, A&A, 464, 746.
Bool velocityToPixel (Vector< Double > &pixel, const Vector< Double > &velocity) const
Bool velocityToFrequency (Double &frequency, Double velocity) const
Bool velocityToFrequency (Vector< Double > &frequency, const Vector< Double > &velocity) const
Bool wavelengthToFrequency (Vector< Double > &frequency, const Vector< Double > &wavelength) const
Bool airWavelengthToFrequency (Vector< Double > &frequency, const Vector< Double > &wavelength) const
Double restFrequency () const
 The SpectralCoordinate can maintain a list of rest frequencies (e.g.
const Vector< Double > & restFrequencies () const
Bool setRestFrequency (Double newFrequency, Bool append=False)
void setRestFrequencies (const Vector< Double > &newFrequencies, uInt which=0, Bool append=False)
void selectRestFrequency (uInt which)
void selectRestFrequency (Double frequency)
String formatRestFrequencies () const
MFrequency::Types frequencySystem (Bool showConversion=False) const
 Retrieve/set the frequency system.
void setFrequencySystem (MFrequency::Types type)
virtual Vector< StringworldAxisNames () const
 Report the value of the requested attribute.
virtual Vector< DoublereferencePixel () const
virtual Matrix< DoublelinearTransform () const
virtual Vector< Doubleincrement () const
virtual Vector< DoublereferenceValue () const
virtual Bool setWorldAxisNames (const Vector< String > &names)
 Set the value of the requested attribute.
virtual Bool setReferencePixel (const Vector< Double > &refPix)
virtual Bool setLinearTransform (const Matrix< Double > &xform)
virtual Bool setIncrement (const Vector< Double > &inc)
virtual Bool setReferenceValue (const Vector< Double > &refval)
Vector< DoublepixelValues () const
 Get the table, i.e.
Vector< DoubleworldValues () const
virtual Bool setWorldAxisUnits (const Vector< String > &units)
 Set/get the unit.
virtual Vector< StringworldAxisUnits () const
virtual Bool near (const Coordinate &other, Double tol=1e-6) const
 Comparison function.
virtual Bool near (const Coordinate &other, const Vector< Int > &excludeAxes, Double tol=1e-6) const
virtual CoordinatemakeFourierCoordinate (const Vector< Bool > &axes, const Vector< Int > &shape) const
 Find the Coordinate for when we Fourier Transform ourselves.
virtual String format (String &unit, Coordinate::formatType format, Double worldValue, uInt worldAxis, Bool isAbsolute=True, Bool showAsAbsolute=True, Int precision=-1, Bool usePrecForFixed=False) const
 Format a SpectralCoordinate coordinate world value nicely through the common format interface.
String formatUnit () const
 Set the default formatter unit (which is initialized to empty).
Bool setFormatUnit (const String &unit)
void toFITS (RecordInterface &header, uInt whichAxis, LogIO &logger, Bool oneRelative=True, Bool preferVelocity=True, Bool opticalVelDef=True, Bool preferWavelength=False, Bool airWaveDef=False) const
 Convert to FITS header record.
virtual Bool save (RecordInterface &container, const String &fieldName) const
 Old interface.
virtual Coordinateclone () const
 Make a copy of the SpectralCoordinate using new.
ostream & print (ostream &os) const

Static Public Member Functions

static SpectralCoordinaterestore (const RecordInterface &container, const String &fieldName)
 Recover the SpectralCoordinate from a record.
static Bool specTypetoString (String &stypeString, const SpecType &specType)
 Convert from String to spectral type and vice versa.
static Bool stringtoSpecType (SpecType &specType, const String &stypeString)

Private Member Functions

void checkFormat (Coordinate::formatType &format, const Bool) const
 Format checker.
void copy (const SpectralCoordinate &other)
 Copy private data.
virtual void convertTo (Vector< Double > &world) const
 Convert to and from conversion reference type.
virtual void convertFrom (Vector< Double > &world) const
void deleteVelocityMachine ()
 Deletes and sets pointer to 0.
void deleteConversionMachines ()
 Deletes and sets pointers to 0.
Int makeConversionMachines (MFrequency::Types type, MFrequency::Types conversionType, const MEpoch &epoch, const MPosition &position, const MDirection &direction)
 Set up pixel<->world conversion machines Returns: 3 (machines were noOPs, machines deleted) 2 (types the same, machines deleted), 1 (machines created and functioning) -1 (machines could not make trial conversion, machines deleted)
void makeVelocityMachine (const String &velUnit, MDoppler::Types velType, const Unit &freqUnit, MFrequency::Types freqType, Double restFreq)
 Create velocity<->frequency machine.
void toCurrent (Vector< Double > &value) const
 Interconvert between the current units and wcs units (Hz)
void fromCurrent (Vector< Double > &value) const
const Vector< DoubletoCurrentFactors () const
 Return unit conversion vector for converting to current units.
void updateVelocityMachine (const String &velUnit, MDoppler::Types velType)
 Update Velocity Machine.
Bool wcsSave (RecordInterface &rec, const wcsprm &wcs, const String &fieldName) const
 Save wcs stuff into Record.
void _setTabulatedFrequencies (const Vector< Double > &freqs)

Static Private Member Functions

static void makeWCS (wcsprm &wcs, const String &ctype, Double refPix, Double refVal, Double inc, Double pc, Double restFreq)
 Make spectral wcs structure (items in Hz)
static SpectralCoordinaterestoreVersion1 (const RecordInterface &container)
 Record restoration handling.
static SpectralCoordinaterestoreVersion2 (const RecordInterface &container)
static void restoreVelocity (SpectralCoordinate *&pSpectral, const RecordInterface &subrec)
static void restoreRestFrequencies (SpectralCoordinate *&pSpectral, const RecordInterface &subrec, Double restFreq)
static void restoreConversion (SpectralCoordinate *&pSpectral, const RecordInterface &subrec)
static Bool wcsRestore (Double &crval, Double &crpix, Double &cdelt, Double &pc, String &ctype, const RecordInterface &rec)
 Restore wcs stuff from Record.

Private Attributes

std::auto_ptr< TabularCoordinate_tabular
mutable::wcsprm wcs_p
Double to_hz_p
Double to_m_p
MFrequency::Types type_p
MFrequency::Types conversionType_p
Vector< Doublerestfreqs_p
uInt restfreqIdx_p
MFrequency::ConvertpConversionMachineTo_p
 Conversion machines; for pixel<->world conversions only.
MFrequency::ConvertpConversionMachineFrom_p
VelocityMachinepVelocityMachine_p
MDoppler::Types velType_p
String velUnit_p
String waveUnit_p
SpectralCoordinate::SpecType nativeType_p
Unit unit_p
String axisName_p
String formatUnit_p
MDirection direction_p
MPosition position_p
MEpoch epoch_p

Detailed Description

Interconvert pixel and frequency values.

Intended use:

Public interface

Review Status

Reviewed By:
Peter Barnes
Date Reviewed:
1999/12/24
Test programs:
tSpectralCoordinate

Prerequisite

Synopsis

This class performs the mapping from pixel to frequency. This can be done via a Tabular lookup or via an algorithmic implementation which may be linear or non-linear. The latter is implemented via the WCS library.


Caution: All pixels coordinates are zero relative;

Example

Let us make a linear SpectralCoordinate first

      Double restfreq = 1.420405752E9;
      Double crpix = 10.0;
      Double crval = 1.4e9;
      Double cdelt = 1.0e6;
      SpectralCoordinate sc(MFrequency::TOPO, crval, cdelt, crpix, restfreq);
   
      Double world, pixel;
      pixel = 12.1;
      if (!sc.toWorld(world, pixel)) {
         cerr << "Error : " << sc.errorMessage() << endl;
      } else {
         cerr << "pixel, world = " << pixel << ", " << world << endl;
      }

Example

Now we make a non-linear SpectralCoordinate

      Vector<Double> freqs(5);
      freqs(0) = 1.4e9; freqs(1) = 1.41e9;
      freqs(2) = 1.43e9; freqs(3) = 1.44e9;
      freqs(4) = 1.47e9;
      SpectralCoordinate sc(MFrequency::LSRK, freqs, restfreq);
   
      Double world, pixel;
      world = 1.42e9;
      if (!sc.toPixel(pixel, world)) {
         cerr << "Error : " << sc.errorMessage() << endl;
      } else {
         cerr << "world, pixel = " << world << ", " << pixel << endl;
      }

Motivation

Spectral-line astronomy requires a specialized SpectralCoordinate.

To Do

Definition at line 137 of file SpectralCoordinate.h.


Member Enumeration Documentation

Enumerator:
FREQ 
VRAD 
VOPT 
BETA 
WAVE 
AWAV 

Definition at line 140 of file SpectralCoordinate.h.


Constructor & Destructor Documentation

Default constructor.

It is equivalent to doing SpectralCoordinate(MFrequency::TOPO, 0.0, 1.0, 0.0)

casa::SpectralCoordinate::SpectralCoordinate ( MFrequency::Types  type,
Double  f0,
Double  inc,
Double  refPix,
Double  restFrequency = 0.0 
)

Create a linear frequency axis SpectralCoordinate f0 is the frequency of the reference pixel, inc is the pixel increment, refPix is the reference pixel.

You can optionally store the rest frequency for later use in calculating radial velocities. Use 0 for restFrequency if continuum.

Frequencies and increments initially in Hz.

casa::SpectralCoordinate::SpectralCoordinate ( MFrequency::Types  type,
const Quantum< Double > &  f0,
const Quantum< Double > &  inc,
Double  refPix,
const Quantum< Double > &  restFrequency = QuantumDouble >(0.0,"Hz") 
)

Create linear frequency axis SpectralCoordinate with Quantum-based interface.

Parameters are the same as above. Regardless of the units of the Quanta, the initial units of the SpectralCoordinate will be Hz. You can change it to something else with the setWorldAxisUnits method later if you want. Use 0 for restFrequency if continuum.

casa::SpectralCoordinate::SpectralCoordinate ( MFrequency::Types  type,
const Vector< Double > &  freqs,
Double  restFrequency = 0.0 
)

Construct a SpectralCoordinate with the specified frequencies (in Hz).

This axis can be nonlinear; the increments and related functions return the average values (calculated from the first and last pixel's frequencies).

A linear interpolation/extrapolation is used for pixels which are not supplied. The reference pixel is chosen to be 0. The frequencies must increase or decrease monotonically (otherwise the toPixel lookup would not be possible). Use 0 for restFrequency if continuum.

casa::SpectralCoordinate::SpectralCoordinate ( MFrequency::Types  type,
const Quantum< Vector< Double > > &  freqs,
const Quantum< Double > &  restFrequency = QuantumDouble >(0.0,"Hz") 
)

Construct a SpectralCoordinate with the specified frequencies with Quantum-based interface.

Parameters are the same as above. Regardless of the units of the Quanta, the initial units of the SpectralCoordinate will be Hz. Use 0 for restFrequency if continuum.

casa::SpectralCoordinate::SpectralCoordinate ( MFrequency::Types  freqType,
MDoppler::Types  velType,
const Vector< Double > &  velocities,
const String velUnit,
Double  restFrequency = 0.0 
)

Construct a SpectralCoordinate with the specified velocities (in km/s).

They will be converted to Hz and the SpectralCoordinate constructed. This axis can be nonlinear; the increments and related functions return the average values (calculated from the first and last pixel's frequencies).

A linear interpolation/extrapolation is used for pixels which are not supplied. The reference pixel is chosen to be 0. The velocities must increase or decrease monotonically (otherwise the toPixel lookup would not be possible).

casa::SpectralCoordinate::SpectralCoordinate ( MFrequency::Types  freqType,
const Vector< Double > &  wavelengths,
const String waveUnit,
Double  restFrequency = 0.0,
Bool  inAir = False 
)

Construct a SpectralCoordinate with the specified wavelengths (in mm).

They will be converted to Hz and the SpectralCoordinate constructed. This axis can be nonlinear; the increments and related functions return the average values (calculated from the first and last pixel's frequencies). If inAir is True, the input wavelengths are assumed to be Air Wavelengths. They are converted to vacuum frequency using the refractive index which is calculated based on the mean input air wavelength.

A linear interpolation/extrapolation is used for pixels which are not supplied. The reference pixel is chosen to be 0. The wavelengths must increase or decrease monotonically (otherwise the toPixel lookup would not be possible).

casa::SpectralCoordinate::SpectralCoordinate ( MFrequency::Types  freqType,
const ::wcsprm &  wcs,
Bool  oneRel = True 
)

Construct from wcs structure.

Must hold only a spectral wcs structure Specify whether the absolute pixel coordinates in the wcs structure are 0- or 1-relative. The coordinate is always constructed with 0-relative pixel coordinates

Copy constructor (copy semantics).

Destructor.


Member Function Documentation

Bool casa::SpectralCoordinate::airWavelengthToFrequency ( Vector< Double > &  frequency,
const Vector< Double > &  wavelength 
) const
void casa::SpectralCoordinate::checkFormat ( Coordinate::formatType format,
const Bool   
) const [private]

Format checker.

Reimplemented from casa::Coordinate.

virtual Coordinate* casa::SpectralCoordinate::clone ( ) const [virtual]

Make a copy of the SpectralCoordinate using new.

The caller is responsible for calling delete.

Implements casa::Coordinate.

virtual void casa::SpectralCoordinate::convertFrom ( Vector< Double > &  world) const [private, virtual]

Reimplemented from casa::Coordinate.

virtual void casa::SpectralCoordinate::convertTo ( Vector< Double > &  world) const [private, virtual]

Convert to and from conversion reference type.

Reimplemented from casa::Coordinate.

void casa::SpectralCoordinate::copy ( const SpectralCoordinate other) [private]

Copy private data.

Deletes and sets pointers to 0.

Deletes and sets pointer to 0.

virtual String casa::SpectralCoordinate::format ( String unit,
Coordinate::formatType  format,
Double  worldValue,
uInt  worldAxis,
Bool  isAbsolute = True,
Bool  showAsAbsolute = True,
Int  precision = -1,
Bool  usePrecForFixed = False 
) const [virtual]

Format a SpectralCoordinate coordinate world value nicely through the common format interface.

See Coordinate for basics.

Format types SCIENTIFIC, FIXED, MIXED and DEFAULT are supported. DEFAULT will use MIXED.

The world value must always be given in native frequency units. Use argument unit to determine what it will be converted to for formatting. If unit is given, it must be dimensionally consistent with Hz, m, or m/s. If you give a unit consistent with m/s then the appropriate velocity Doppler type is taken from that set by function setVelocity. There is no frame conversion. If unit is empty, the unit given by setFormatUnit is used. If this is turn empty, then native units are used.

Reimplemented from casa::Coordinate.

Set the default formatter unit (which is initialized to empty).

Must be consistent with Hz or km/s. If the given unit is illegal, False is returned and the internal state unchanged. This unit is used by the function format when the given unit is empty.

Definition at line 535 of file SpectralCoordinate.h.

References formatUnit_p.

Retrieve/set the frequency system.

Note that setting the frequency system just changes the internal value of the frequency system. In addition, it will reset the internal conversion frequency system to the new type and delete any conversion machines.

Bool casa::SpectralCoordinate::frequencyToAirWavelength ( Vector< Double > &  wavelength,
const Vector< Double > &  frequency 
) const
Bool casa::SpectralCoordinate::frequencyToVelocity ( Quantum< Double > &  velocity,
Double  frequency 
) const
Bool casa::SpectralCoordinate::frequencyToVelocity ( Quantum< Double > &  velocity,
const MFrequency frequency 
) const
Bool casa::SpectralCoordinate::frequencyToVelocity ( Quantum< Double > &  velocity,
const MVFrequency frequency 
) const
Bool casa::SpectralCoordinate::frequencyToVelocity ( Double velocity,
Double  frequency 
) const
Bool casa::SpectralCoordinate::frequencyToVelocity ( Vector< Double > &  velocity,
const Vector< Double > &  frequency 
) const
Bool casa::SpectralCoordinate::frequencyToWavelength ( Vector< Double > &  wavelength,
const Vector< Double > &  frequency 
) const
void casa::SpectralCoordinate::fromCurrent ( Vector< Double > &  value) const [private]
void casa::SpectralCoordinate::getReferenceConversion ( MFrequency::Types type,
MEpoch epoch,
MPosition position,
MDirection direction 
) const [inline]

Definition at line 274 of file SpectralCoordinate.h.

References conversionType_p, direction_p, epoch_p, and position_p.

virtual Vector<Double> casa::SpectralCoordinate::increment ( ) const [virtual]

Implements casa::Coordinate.

Implements casa::Coordinate.

Int casa::SpectralCoordinate::makeConversionMachines ( MFrequency::Types  type,
MFrequency::Types  conversionType,
const MEpoch epoch,
const MPosition position,
const MDirection direction 
) [private]

Set up pixel<->world conversion machines Returns: 3 (machines were noOPs, machines deleted) 2 (types the same, machines deleted), 1 (machines created and functioning) -1 (machines could not make trial conversion, machines deleted)

virtual Coordinate* casa::SpectralCoordinate::makeFourierCoordinate ( const Vector< Bool > &  axes,
const Vector< Int > &  shape 
) const [virtual]

Find the Coordinate for when we Fourier Transform ourselves.

This pointer must be deleted by the caller. Axes specifies which axes of the Coordinate you wish to transform. Shape specifies the shape of the image associated with all the axes of the Coordinate. Currently the output reference pixel is always shape/2. Cannot transform tabular coordinates. If the pointer returned is 0, it failed with a message in errorMessage

Reimplemented from casa::Coordinate.

void casa::SpectralCoordinate::makeVelocityMachine ( const String velUnit,
MDoppler::Types  velType,
const Unit freqUnit,
MFrequency::Types  freqType,
Double  restFreq 
) [private]

Create velocity<->frequency machine.

static void casa::SpectralCoordinate::makeWCS ( wcsprm &  wcs,
const String ctype,
Double  refPix,
Double  refVal,
Double  inc,
Double  pc,
Double  restFreq 
) [static, private]

Make spectral wcs structure (items in Hz)

Definition at line 342 of file SpectralCoordinate.h.

References nativeType_p.

virtual Bool casa::SpectralCoordinate::near ( const Coordinate other,
Double  tol = 1e-6 
) const [virtual]

Comparison function.

Any private Double data members are compared with the specified fractional tolerance. Don't compare on the specified axes in the Coordinate. If the comparison returns False, errorMessage() contains a message about why.

Implements casa::Coordinate.

virtual Bool casa::SpectralCoordinate::near ( const Coordinate other,
const Vector< Int > &  excludeAxes,
Double  tol = 1e-6 
) const [virtual]

Implements casa::Coordinate.

virtual uInt casa::SpectralCoordinate::nPixelAxes ( ) const [virtual]

Always returns 1.

Implements casa::Coordinate.

virtual uInt casa::SpectralCoordinate::nWorldAxes ( ) const [virtual]

Implements casa::Coordinate.

SpectralCoordinate& casa::SpectralCoordinate::operator= ( const SpectralCoordinate other)

Assignment (copy semantics).

Bool casa::SpectralCoordinate::pixelToVelocity ( Quantum< Double > &  velocity,
Double  pixel 
) const

Functions to convert to velocity (uses the current active rest frequency) or wavelength.

There is no reference frame change but you can specify the velocity Doppler and the output units of the velocity with function setVelocity or setWavelength respectively. When the input is a frequency stored as a Double it must be in the current units of the SpectralCoordinate.

Note that the extra conversion layer (see function setReferenceConversion) is active in the pixelToVelocity functions (because internally the use toWorld) but not in the frequencyToVelocity or frequencyToWavelength functions.

Bool casa::SpectralCoordinate::pixelToVelocity ( Double velocity,
Double  pixel 
) const
Bool casa::SpectralCoordinate::pixelToVelocity ( Vector< Double > &  velocity,
const Vector< Double > &  pixel 
) const

Get the table, i.e.

the pixel and world values. The length of these Vectors will be zero if this axis is pure linear (i.e. if the channel and frequencies are related through an increment and offset).

ostream& casa::SpectralCoordinate::print ( ostream &  os) const

Implements casa::Coordinate.

Implements casa::Coordinate.

The SpectralCoordinate can maintain a list of rest frequencies (e.g.

multiple lines within a band). However, only one of them is active (e.g. for velocity conversions) at any one time. Function restFrequency returns that frequency. Function restFrequencies returns all of the possible restfrequencies.

When you construct the SpectralCoordinate, you give it one rest frequency and it is the active one. Thereafter you can add a new restfrequency with function setRestFrequency (append=True) and that frequency will become the active one. With this function and append=False, the current active restfrequency will be replaced by the one you give.

You can change the list of restfrequencies with function setRestFrequencies. When you do so, you can either replace the list of rest frequencies or append to it. You specify which frequency of the new (appended) list becomes active.

You can also select the active rest frequency either by an index into the current list (exception if out of range) given by restFrequencies() or by the value in the list nearest to the frequency you give.

Whenever you change the active rest frequency, the class internals are adjusted (e.g. the velocity machine is updated).

static SpectralCoordinate* casa::SpectralCoordinate::restore ( const RecordInterface container,
const String fieldName 
) [static]

Recover the SpectralCoordinate from a record.

A null pointer means that the restoration did not succeed.

static void casa::SpectralCoordinate::restoreConversion ( SpectralCoordinate *&  pSpectral,
const RecordInterface subrec 
) [static, private]
static void casa::SpectralCoordinate::restoreRestFrequencies ( SpectralCoordinate *&  pSpectral,
const RecordInterface subrec,
Double  restFreq 
) [static, private]
static void casa::SpectralCoordinate::restoreVelocity ( SpectralCoordinate *&  pSpectral,
const RecordInterface subrec 
) [static, private]
static SpectralCoordinate* casa::SpectralCoordinate::restoreVersion1 ( const RecordInterface container) [static, private]

Record restoration handling.

static SpectralCoordinate* casa::SpectralCoordinate::restoreVersion2 ( const RecordInterface container) [static, private]
virtual Bool casa::SpectralCoordinate::save ( RecordInterface container,
const String fieldName 
) const [virtual]

Old interface.

Handled by wcs in new interface in FITSCoordinateUtil.cc static Bool fromFITSOld(SpectralCoordinate &out, String &error, const RecordInterface &header, uInt whichAxis, LogIO &logger, Bool oneRelative=True);

Save the SpectralCoordinate into the supplied record using the supplied field name. The field must not exist, otherwise False is returned.

Implements casa::Coordinate.

virtual Bool casa::SpectralCoordinate::setIncrement ( const Vector< Double > &  inc) [virtual]

Implements casa::Coordinate.

virtual Bool casa::SpectralCoordinate::setLinearTransform ( const Matrix< Double > &  xform) [virtual]

Implements casa::Coordinate.

Bool casa::SpectralCoordinate::setReferenceConversion ( MFrequency::Types  type,
const MEpoch epoch,
const MPosition position,
const MDirection direction 
)

Set extra conversion layer.

Whenever a conversion from pixel to world is done, the world value is then further converted to this MFrequency::Types value. For example, your SpectralCoordinate may be defined in LSRK. You can use this to get the world values out in say BARY. You must specify the position on earth, the epoch and the direction for the conversions and it is your responsibility to ensure they are viable. Similarly, whenever you convert from world to pixel, the world value is assumed to be that appropriate to the setReferenceConversion type. It is first converted to the MFrequency::Types with which the SpectralCoordinate was constructed and from there to pixel. If you don't call this function, or you set the same type for which the SpectralCoordinate was constructed, no extra conversions occur. Some conversions will fail. These are the ones that require extra frame information (radial velocity) such as to REST. This will be added later. In this case this function returns False (and the conversion parameters are all left as they were), else it returns True.

virtual Bool casa::SpectralCoordinate::setReferencePixel ( const Vector< Double > &  refPix) [virtual]

Implements casa::Coordinate.

virtual Bool casa::SpectralCoordinate::setReferenceValue ( const Vector< Double > &  refval) [virtual]

Implements casa::Coordinate.

void casa::SpectralCoordinate::setRestFrequencies ( const Vector< Double > &  newFrequencies,
uInt  which = 0,
Bool  append = False 
)

Set the state that is used for conversions from pixel and frequency to velocity or wavelength.

The SpectralCoordinate is constructed with MDoppler::RADIO and km/s as the velocity conversion state and mm as the wavelength conversion state. The functions in this class which use this state are those that convert to or from velocity. Also, function format uses the Doppler state set here. If the function returns False it means the unit was not valid. There will be an error message in function errorMessage

virtual Bool casa::SpectralCoordinate::setWorldAxisNames ( const Vector< String > &  names) [virtual]

Set the value of the requested attribute.

Note that these just change the internal values, they do not cause any recomputation.

Implements casa::Coordinate.

virtual Bool casa::SpectralCoordinate::setWorldAxisUnits ( const Vector< String > &  units) [virtual]

Set/get the unit.

Adjust the increment and reference value by the ratio of the old and new units. The unit must be compatible with frequency.

Implements casa::Coordinate.

virtual String casa::SpectralCoordinate::showType ( ) const [virtual]

Always returns the String "Spectral".

Implements casa::Coordinate.

static Bool casa::SpectralCoordinate::specTypetoString ( String stypeString,
const SpecType specType 
) [static]

Convert from String to spectral type and vice versa.

static Bool casa::SpectralCoordinate::stringtoSpecType ( SpecType specType,
const String stypeString 
) [static]
void casa::SpectralCoordinate::toCurrent ( Vector< Double > &  value) const [private]

Interconvert between the current units and wcs units (Hz)

Return unit conversion vector for converting to current units.

void casa::SpectralCoordinate::toFITS ( RecordInterface header,
uInt  whichAxis,
LogIO logger,
Bool  oneRelative = True,
Bool  preferVelocity = True,
Bool  opticalVelDef = True,
Bool  preferWavelength = False,
Bool  airWaveDef = False 
) const

Convert to FITS header record.

When writing the FITS record, the fields "ctype, crval, crpix", and "cdelt" must already be created. Other header words are created as needed. Use oneRelative=True to convert zero-relative SpectralCoordinate pixel coordinates to one-relative FITS coordinates, and vice-versa. If preferVelocity=True the primary axis type will be velocity, if preferWavelength=True it will be wavelength, else frequency. For a velocity axis, if opticalVelDef=False, the radio velocity definition will be used, else optical definition. Similarly for a wavelength axis, if airWaveDef=True air wavelength will be used, the default is vacuum wavelength.

virtual Bool casa::SpectralCoordinate::toPixel ( Vector< Double > &  pixel,
const Vector< Double > &  world 
) const [virtual]

Implements casa::Coordinate.

Bool casa::SpectralCoordinate::toPixel ( Double pixel,
const Double world 
) const
Bool casa::SpectralCoordinate::toPixel ( Double pixel,
const MFrequency world 
) const
Bool casa::SpectralCoordinate::toPixel ( Double pixel,
const MVFrequency world 
) const
virtual Bool casa::SpectralCoordinate::toPixelMany ( Matrix< Double > &  pixel,
const Matrix< Double > &  world,
Vector< Bool > &  failures 
) const [virtual]

Reimplemented from casa::Coordinate.

virtual Bool casa::SpectralCoordinate::toWorld ( Vector< Double > &  world,
const Vector< Double > &  pixel 
) const [virtual]

Convert a pixel to a world coordinate or vice versa.

Returns True if the conversion succeeds, otherwise it returns False and errorMessage() contains an error message. The input vectors must be of length one and the output vectors are resized if they are not already of length one.

Implements casa::Coordinate.

Bool casa::SpectralCoordinate::toWorld ( Double world,
const Double pixel 
) const
Bool casa::SpectralCoordinate::toWorld ( MFrequency world,
Double  pixel 
) const

Convert a pixel (channel number) into an MFrequency or MVFrequency and vice versa.

Usually you will do this for calculating velocities or converting frequencies from one frame to another.

Bool casa::SpectralCoordinate::toWorld ( MVFrequency world,
Double  pixel 
) const
virtual Bool casa::SpectralCoordinate::toWorldMany ( Matrix< Double > &  world,
const Matrix< Double > &  pixel,
Vector< Bool > &  failures 
) const [virtual]

Batch up a lot of transformations.

The first (most rapidly varying) axis of the matrices contain the coordinates. Returns False if any conversion failed and errorMessage() will hold a message. The failures array (True for fail, False for success) is the length of the number of conversions and holds an error status for each conversion.

Reimplemented from casa::Coordinate.

virtual Coordinate::Type casa::SpectralCoordinate::type ( ) const [virtual]

Always returns Coordinate::SPECTRAL.

Implements casa::Coordinate.

void casa::SpectralCoordinate::updateVelocityMachine ( const String velUnit,
MDoppler::Types  velType 
) [private]

Update Velocity Machine.

Definition at line 335 of file SpectralCoordinate.h.

References velType_p.

Bool casa::SpectralCoordinate::velocityToFrequency ( Double frequency,
Double  velocity 
) const
Bool casa::SpectralCoordinate::velocityToFrequency ( Vector< Double > &  frequency,
const Vector< Double > &  velocity 
) const
Bool casa::SpectralCoordinate::velocityToPixel ( Double pixel,
Double  velocity 
) const

The refractive index of air (argument can be wavelength or airwavelength) according to Greisen et al., 2006, A&A, 464, 746.

If airwavelength is used there is an error of the order of 1E-9. Argument must be in micrometers! static Double refractiveIndex(const Double& lambda_um);

Functions to convert from velocity (uses the current active rest frequency) or wavelength. There is no reference frame change but you can specify the velocity Doppler and the output units of the velocity with function setVelocity and those of the wavelength with setWavelength. When the input is a frequency stored as a Double it must be in the current units of the SpectralCoordinate.

Note that the extra conversion layer (see function setReferenceConversion) is active in the pixelToVelocity functions (because internally the use toPixel) but not in the frequencyToVelocity functions.

Bool casa::SpectralCoordinate::velocityToPixel ( Vector< Double > &  pixel,
const Vector< Double > &  velocity 
) const

Definition at line 336 of file SpectralCoordinate.h.

References velUnit_p.

Bool casa::SpectralCoordinate::wavelengthToFrequency ( Vector< Double > &  frequency,
const Vector< Double > &  wavelength 
) const

Definition at line 339 of file SpectralCoordinate.h.

References waveUnit_p.

static Bool casa::SpectralCoordinate::wcsRestore ( Double crval,
Double crpix,
Double cdelt,
Double pc,
String ctype,
const RecordInterface rec 
) [static, private]

Restore wcs stuff from Record.

Bool casa::SpectralCoordinate::wcsSave ( RecordInterface rec,
const wcsprm &  wcs,
const String fieldName 
) const [private]

Save wcs stuff into Record.

Report the value of the requested attribute.

Implements casa::Coordinate.

Implements casa::Coordinate.


Member Data Documentation

Definition at line 584 of file SpectralCoordinate.h.

Definition at line 605 of file SpectralCoordinate.h.

Definition at line 589 of file SpectralCoordinate.h.

Referenced by getReferenceConversion().

Definition at line 608 of file SpectralCoordinate.h.

Referenced by getReferenceConversion().

Definition at line 610 of file SpectralCoordinate.h.

Referenced by getReferenceConversion().

Definition at line 606 of file SpectralCoordinate.h.

Referenced by formatUnit().

Definition at line 602 of file SpectralCoordinate.h.

Referenced by nativeType().

Definition at line 595 of file SpectralCoordinate.h.

Conversion machines; for pixel<->world conversions only.

Definition at line 594 of file SpectralCoordinate.h.

Definition at line 609 of file SpectralCoordinate.h.

Referenced by getReferenceConversion().

Definition at line 597 of file SpectralCoordinate.h.

Definition at line 591 of file SpectralCoordinate.h.

Definition at line 590 of file SpectralCoordinate.h.

Definition at line 586 of file SpectralCoordinate.h.

Definition at line 587 of file SpectralCoordinate.h.

Definition at line 589 of file SpectralCoordinate.h.

Definition at line 604 of file SpectralCoordinate.h.

Definition at line 598 of file SpectralCoordinate.h.

Referenced by velocityDoppler().

Definition at line 599 of file SpectralCoordinate.h.

Referenced by velocityUnit().

Definition at line 601 of file SpectralCoordinate.h.

Referenced by wavelengthUnit().

mutable ::wcsprm casa::SpectralCoordinate::wcs_p [private]

Definition at line 585 of file SpectralCoordinate.h.


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