FrequencyAligner.h
Classes
- FrequencyAligner -- Aligns spectra in frequency space (full description)
Interface
- Public Members
- FrequencyAligner()
- FrequencyAligner(const SpectralCoordinate& specCoord, uInt nPixels, const MEpoch& refEpoch, const MDirection& dir, const MPosition& pos, MFrequency::Types freqSystem)
- FrequencyAligner (const FrequencyAligner<T>& other)
- FrequencyAligner& operator=(const FrequencyAligner<T>& other)
- ~FrequencyAligner()
- void setTolerance (Double tol)
- Bool align (Vector<T>& yOut, Vector<Bool>& maskOut, const Vector<T>& yIn, const Vector<Bool>& maskIn, const MEpoch& epoch, Bool useCachedAbcissa, typename InterpolateArray1D<Double,T>::InterpolationMethod method, Bool extrapolate=False)
- Bool align (Vector<T>& yOut, Vector<Bool>& maskOut, const Vector<Double>& xIn, const Vector<T>& yIn, const Vector<Bool>& maskIn, const MEpoch& epoch, Bool useCachedAbcissa, typename InterpolateArray1D<Double,T>::InterpolationMethod method, Bool extrapolate=False)
- Bool alignMany (Array<T>& yOut, Array<Bool>& maskOut, const Array<T>& yIn, const Array<Bool>& maskIn, uInt axis, const MEpoch& epoch, typename InterpolateArray1D<Double,T>::InterpolationMethod method, Bool extrapolate=False)
- void getReferenceAbcissa (Vector<Double>& xOut) const
- void getAbcissa (Vector<Double>& xOut) const
- SpectralCoordinate alignedSpectralCoordinate (Bool doLinear=True) const
- Private Members
- void copyOther (const FrequencyAligner<T>& other)
- void makeMachine (const MEpoch& refEpoch, const MDirection& dir, const MPosition& pos, MFrequency::Types freqSystem, const Unit& unit)
- Double makeAbcissa (Vector<Double>& f, Bool doMaxDiff)
- Bool regrid (Vector<T>& yOut, Vector<Bool>& maskOut, const Vector<Double>& xOut, const Vector<Double>& xIn, const Vector<T>& yIn, const Vector<Bool>& maskIn, typename InterpolateArray1D<Double,T>::InterpolationMethod method, Bool extrapolate, Double maxDiff) const
Review Status
- Programs:
- Tests:
Prerequisite
// Synopsis
Spectra are converted to the specified reference frame and aligned at
a specified instant in time.
You should not try to convert from, say, a SpectralCoordinate::TOPO to
MFrequency::TOPO as this would be meaningless. This class is designed
mainly to convert say from a SpectralCoordinate::TOPO to say, a BARY
frame and align.
Motivation
Required for ASAP single-dish package
To Do
Member Description
Default constructor (object not viable)
Constructor specifies a SpectralCoordinate (any extra reference conversion
frame set in it will be ignored), the number of pixels in the spectra to
be aligned, a reference epoch to which all spectra will
be aligned, a direction on the sky, a position on the earth (the observatory),
and desired frequency system to align in.
FrequencyAligner (const FrequencyAligner<T>& other)
Copy constructor (copy semantics)
FrequencyAligner& operator=(const FrequencyAligner<T>& other)
Assignment (copy semantics)
Destructor
Set a tolerance (in pixels) to trigger regridding (function align).
If the maximum abcissa difference for the current spectrum abcissa compared
to the reference abcissa is greater than tol (pixels) then a
regrid is triggered. Otherwise the input is just copied to the output when
function align is called. Set to 0 to turn this tolerance
assessment off. This function may be not really worth using.
Bool align (Vector<T>& yOut, Vector<Bool>& maskOut, const Vector<T>& yIn, const Vector<Bool>& maskIn, const MEpoch& epoch, Bool useCachedAbcissa, typename InterpolateArray1D<Double,T>::InterpolationMethod method, Bool extrapolate=False)
Align (via regridding) one spectrum taken at the specified epoch to
the reference epoch. Your provide the ordinate and mask (True==Good)
for the spectrum. The lengths of these vectors must be the same
as nPixels given in the constructor. The output vectors
are resized as needed.
You can use the last cached abcissa (computed by
this function) rather than recompute it if you have more than one spectrum
at the same epoch to convert (e.g. different polarizations).
If you do this, it is your responsibility to make sure that you
have called this function at least once with useCachedAbcissa=False.
If extrapolate is True, the regridding process is allowed
to extrapolate outside of the abcissa domain. Otherwise masked pixels will result.
Returns True if a regrid triggered, else False if just copied (see function
setTolerance.
Bool align (Vector<T>& yOut, Vector<Bool>& maskOut, const Vector<Double>& xIn, const Vector<T>& yIn, const Vector<Bool>& maskIn, const MEpoch& epoch, Bool useCachedAbcissa, typename InterpolateArray1D<Double,T>::InterpolationMethod method, Bool extrapolate=False)
This function is the same as the previous except that you can specify the input abcissa as well
as the data and mask. The input abcissa must be in the same units as the Construction
SpectralCoordinate. The abcissa values must be in the same base reference frame
as the Construction SpectralCoordinate. So instead of the abcissa (in the
output reference frame) being computed from the Construction SC, you get to specify
the abcissa directly. This might be useful if you have more than one set of
spectra to align, all in the same Frame, but with different attributes such
as reference value/pixel etc. The output spectrum is still regridded to the
abcissa at the reference time generated at construction.
from the current
Bool alignMany (Array<T>& yOut, Array<Bool>& maskOut, const Array<T>& yIn, const Array<Bool>& maskIn, uInt axis, const MEpoch& epoch, typename InterpolateArray1D<Double,T>::InterpolationMethod method, Bool extrapolate=False)
Align many spectra stored in an Array along the specified axis. All spectra are aligned
to the same frequency abcissa (as described in previous function). If any alignment
returns False, then the return value will be False, otherwise True is returned.
Get the reference abcissa (as a frequency in the axis units set in the SpectralCoordinate) at the reference epoch
Get the abcissa (as a frequency in the axis units set in the SpectralCoordinate) last cached by function align
Get new aligned SpectralCoordinate. It is probably non-linear, but if you would
like a linear approximation, use the doLinear argument.
void copyOther (const FrequencyAligner<T>& other)
Tolerance which triggers a regrid
Internal copy
Create the Conversion machine
Double makeAbcissa (Vector<Double>& f, Bool doMaxDiff)
Generate an abcissa with the machine
Bool regrid (Vector<T>& yOut, Vector<Bool>& maskOut, const Vector<Double>& xOut, const Vector<Double>& xIn, const Vector<T>& yIn, const Vector<Bool>& maskIn, typename InterpolateArray1D<Double,T>::InterpolationMethod method, Bool extrapolate, Double maxDiff) const
Regrid one spectrum