MHO_StationModel
Purpose
This class evaluates a station’s a priori coordinate and delay model from
spline coefficients stored in a station_coord_type container. It computes
the geometric delay, source azimuth, source elevation, parallactic angle,
and the (u,v,w) baseline coordinates at a specified evaluation time. It is
an internal utility with no control file keyword.
Control File Trigger
This operator is internal and has no control file keyword. It is used by higher-level operators (e.g., fringe-fitting and delay-modeling pipelines) to obtain the geometric delay model for each station in a baseline.
Input Data
The class takes a pointer to a station_coord_type container (a two-axis structure) via SetStationData(). The container’s axes are:
Row axis (coordinate type) – 7 rows indexed as: DELAY (0), AZIMUTH (1), ELEVATION (2), PARANGLE (3), U (4), V (5), W (6).
INTERVAL_AXIS – spline intervals (each interval holds a set of polynomial coefficients).
Each cell contains a vector of spline coefficients (polynomial terms ordered from p=0 upward).
The container also carries metadata
tags: station_code (string), model_start (VEX-format time string),
and model_interval (double, seconds).
Algorithm
The ComputeModel() method performs the following steps:
Step 1 – Time Setup.
The model start time is retrieved from the model_start tag and parsed from VEX format using hops_clock::from_vex_format(). The evaluation time is either user-supplied via SetEvaluationTimeVexString() or defaults to the model start time if not set. The time difference \(\Delta t = t_{\rm eval} - t_{\rm start}\) is computed in seconds.
Step 2 – Spline Interval Selection.
The model interval duration is retrieved from the model_interval tag. The spline interval index is computed as:
The CheckSplineInterval() method clamps the interval to the valid range [0, N_intervals-1], issuing a warning if extrapolation is required (either \(\Delta t < 0\) or \(n_{\rm interval} \geq N_{\rm intervals}\)).
Step 3 – Time Offset Within Interval.
The time offset within the selected interval is:
Step 4 – Polynomial Evaluation.
For each of the 7 coordinate types (delay, azimuth, elevation, parallactic angle, u, v, w), the operator extracts the spline coefficient vector for the selected interval and evaluates the polynomial:
where \(c_p\) is the p-th coefficient in the spline’s coefficient vector. This is a standard polynomial evaluation (implemented as a direct sum of terms).
Note
The parallactic angle evaluation does not produce a meaningful result, since
CALC does not provide a genuine spline for this coordinate. The value returned
by GetParallacticAngle() should not be relied upon; a proper calculation
from azimuth, elevation, and station coordinates is still pending.
Effect on Data
This class does not modify its input container. After ComputeModel() is
called, the computed values (delay, azimuth, elevation, parallactic angle, u, v, w)
are stored as private member variables and are retrievable via
the GetDelay(), GetAzimuth(), GetElevation(), GetParallacticAngle(), GetUCoordinate(), GetVCoordinate(), and GetWCoordinate() methods.