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 
113  //XCoeffVectorType is expected to be an MHO_NDArrayView type
122  template< typename XCoeffVectorType >
123  void EvaluateDelaySpline(const XCoeffVectorType& coeff, double delta_t, double* results);
124 
125 
134  void CheckSplineInterval(int n_intervals, double tdiff, int& int_no, std::string station_id);
135 
143  template< typename XTagType > XTagType RetrieveTag(station_coord_type* data, std::string key);
144 
145  //necessary data
146  std::string fRefTimeString;
147  station_coord_type* fRefData;
148  station_coord_type* fRemData;
149 
150  //results
151  double fDelay;
152  double fRate;
153  double fAccel;
154 
155  //ref station
156  double fRefClockOff;
157  double fRefClockRate;
158 
159  double fRefDelay;
160  double fRefRate;
161  double fRefStationDelay;
162 };
163 
172 template< typename XCoeffVectorType >
173 void MHO_DelayModel::EvaluateDelaySpline(const XCoeffVectorType& coeff, double delta_t, double* results)
174 {
175 #define DELAY_INDEX 0
176 #define RATE_INDEX 1
177 #define ACCEL_INDEX 2
178 #define DELAY_COEFF_INDEX 0
179 
180  //compute delay, rate accel
181  results[DELAY_INDEX] = 0.0;
182  results[RATE_INDEX] = 0.0;
183  results[ACCEL_INDEX] = 0.0;
184  int n_coeff = coeff.GetSize();
185  double tp, tpm1, tpm2, c;
186  for(int p = 0; p < n_coeff; p++)
187  {
188  c = coeff(p);
189  tp = std::pow(delta_t, p);
190  tpm1 = 0.0;
191  tpm2 = 0.0;
192 
193  //std::cout<<"-----------------"<<std::endl;
194  //std::cout<<"p="<<p<<std::endl;
195  //std::cout<<"c="<<c<<std::endl;
196  //std::cout<<"tpm1="<<tpm1<<std::endl;
197  //std::cout<<"tpm2="<<tpm2<<std::endl;
198 
199  results[DELAY_INDEX] += c * tp;
200  if(p >= 1)
201  {
202  tpm1 = std::pow(delta_t, p - 1);
203  results[RATE_INDEX] += p * c * tpm1;
204  }
205 
206  if(p >= 2)
207  {
208  tpm2 = std::pow(delta_t, p - 2);
209  results[ACCEL_INDEX] += p * (p - 1) * c * tpm2;
210  }
211  }
212 }
213 
221 template< typename XTagType > XTagType MHO_DelayModel::RetrieveTag(station_coord_type* data, std::string key)
222 {
223  //get the ref/rem station codes
224  XTagType value;
225  bool ok = data->Retrieve(key, value);
226  if(!ok)
227  {
228  msg_fatal("calibration", "data tag with key: " << key << " is missing from station data." << eom);
229  std::exit(1);
230  }
231  return value;
232 }
233 
234 } // namespace hops
235 
236 #endif
#define ACCEL_INDEX
#define RATE_INDEX
#define DELAY_INDEX
#define msg_fatal(xKEY, xCONTENT)
Definition: MHO_Message.hh:234
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:20
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:18
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: MHO_ChannelLabeler.hh:17
MHO_TableContainer< spline_coeff_type, station_coord_axis_pack > station_coord_type
Definition: MHO_StationContainers.hh:26
Definition: vex.h:175