HOPS
HOPS class reference
MHO_DelayModel.hh
Go to the documentation of this file.
1 #ifndef MHO_DelayModel_HH__
2 #define MHO_DelayModel_HH__
3 
5 #include "MHO_TableContainer.hh"
6 
7 namespace hops
8 {
9 
22 {
23  public:
25  virtual ~MHO_DelayModel();
26 
32  void SetFourfitReferenceTimeVexString(std::string fourfit_reftime_string) { fRefTimeString = fourfit_reftime_string; };
33 
39  void SetReferenceStationData(station_coord_type* ref_data) { fRefData = ref_data; };
40 
46  void SetRemoteStationData(station_coord_type* rem_data) { fRemData = rem_data; };
47 
51  void ComputeModel();
52 
58  double GetDelay() { return fDelay; }
59 
65  double GetRate() { return fRate; };
66 
72  double GetAcceleration() { return fAccel; };
73 
79  void SetReferenceStationClockOffset(double clock_off) { fRefClockOff = clock_off; }
80 
86  void SetReferenceStationClockRate(double clock_rate) { fRefClockRate = clock_rate; }
87 
93  double GetRefDelay() { return fRefDelay; }
94 
100  double GetRefRate() { return fRefRate; };
101 
107  double GetRefStationDelay() { return fRefStationDelay; }
108 
109  // double GetRefAcceleration(){return fRefAccel;};
110 
111  private:
112  //XCoeffVectorType is expected to be an MHO_NDArrayView type
121  template< typename XCoeffVectorType >
122  void EvaluateDelaySpline(const XCoeffVectorType& coeff, double delta_t, double* results);
123 
132  void CheckSplineInterval(int n_intervals, double tdiff, int& int_no, std::string station_id);
133 
141  template< typename XTagType > XTagType RetrieveTag(station_coord_type* data, std::string key);
142 
143  //necessary data
144  std::string fRefTimeString;
145  station_coord_type* fRefData;
146  station_coord_type* fRemData;
147 
148  //results
149  double fDelay;
150  double fRate;
151  double fAccel;
152 
153  //ref station
154  double fRefClockOff;
155  double fRefClockRate;
156 
157  double fRefDelay;
158  double fRefRate;
159  double fRefStationDelay;
160 };
161 
170 template< typename XCoeffVectorType >
171 void MHO_DelayModel::EvaluateDelaySpline(const XCoeffVectorType& coeff, double delta_t, double* results)
172 {
173 #define DELAY_INDEX 0
174 #define RATE_INDEX 1
175 #define ACCEL_INDEX 2
176 #define DELAY_COEFF_INDEX 0
177 
178  //compute delay, rate accel
179  results[DELAY_INDEX] = 0.0;
180  results[RATE_INDEX] = 0.0;
181  results[ACCEL_INDEX] = 0.0;
182  int n_coeff = coeff.GetSize();
183  double tp, tpm1, tpm2, c;
184  for(int p = 0; p < n_coeff; p++)
185  {
186  c = coeff(p);
187  tp = std::pow(delta_t, p);
188  tpm1 = 0.0;
189  tpm2 = 0.0;
190 
191  //std::cout<<"-----------------"<<std::endl;
192  //std::cout<<"p="<<p<<std::endl;
193  //std::cout<<"c="<<c<<std::endl;
194  //std::cout<<"tpm1="<<tpm1<<std::endl;
195  //std::cout<<"tpm2="<<tpm2<<std::endl;
196 
197  results[DELAY_INDEX] += c * tp;
198  if(p >= 1)
199  {
200  tpm1 = std::pow(delta_t, p - 1);
201  results[RATE_INDEX] += p * c * tpm1;
202  }
203 
204  if(p >= 2)
205  {
206  tpm2 = std::pow(delta_t, p - 2);
207  results[ACCEL_INDEX] += p * (p - 1) * c * tpm2;
208  }
209  }
210 }
211 
219 template< typename XTagType > XTagType MHO_DelayModel::RetrieveTag(station_coord_type* data, std::string key)
220 {
221  //get the ref/rem station codes
222  XTagType value;
223  bool ok = data->Retrieve(key, value);
224  if(!ok)
225  {
226  msg_fatal("calibration", "data tag with key: " << key << " is missing from station data." << eom);
227  std::exit(1);
228  }
229  return value;
230 }
231 
232 } // namespace hops
233 
234 #endif
#define ACCEL_INDEX
#define RATE_INDEX
#define DELAY_INDEX
#define msg_fatal(xKEY, xCONTENT)
Definition: MHO_Message.hh:228
Class MHO_DelayModel.
Definition: MHO_DelayModel.hh:22
void ComputeModel()
Calculates delay model for reference and remote stations using fourfit reference time.
Definition: MHO_DelayModel.cc:28
double GetDelay()
Getter for delay.
Definition: MHO_DelayModel.hh:58
MHO_DelayModel()
Definition: MHO_DelayModel.cc:9
void SetFourfitReferenceTimeVexString(std::string fourfit_reftime_string)
Setter for fourfit reference time vex string.
Definition: MHO_DelayModel.hh:32
double GetAcceleration()
Getter for acceleration.
Definition: MHO_DelayModel.hh:72
double GetRate()
Getter for rate.
Definition: MHO_DelayModel.hh:65
double GetRefDelay()
Getter for ref delay.
Definition: MHO_DelayModel.hh:93
double GetRefStationDelay()
Getter for ref station delay.
Definition: MHO_DelayModel.hh:107
void SetReferenceStationClockRate(double clock_rate)
Setter for reference station clock rate.
Definition: MHO_DelayModel.hh:86
double GetRefRate()
Getter for ref rate.
Definition: MHO_DelayModel.hh:100
virtual ~MHO_DelayModel()
Definition: MHO_DelayModel.cc:26
void SetReferenceStationData(station_coord_type *ref_data)
Setter for reference station data.
Definition: MHO_DelayModel.hh:39
void SetRemoteStationData(station_coord_type *rem_data)
Setter for remote station data.
Definition: MHO_DelayModel.hh:46
void SetReferenceStationClockOffset(double clock_off)
Setter for reference station clock offset.
Definition: MHO_DelayModel.hh:79
std::size_t GetSize() const
get the total size of the array
Definition: MHO_NDArrayWrapper.hh:119
Class MHO_TableContainer.
Definition: MHO_TableContainer.hh:36
Definition: fit_gsl.h:54
Definition: MHO_AdhocFlagging.hh:18
MHO_TableContainer< spline_coeff_type, station_coord_axis_pack > station_coord_type
Definition: MHO_StationContainers.hh:26
Definition: vex.h:175