1 #ifndef Long_term_correction_header_h
2 #define Long_term_correction_header_h
17 const unsigned int nFDsites = 4;
19 double GPSbreak[nFDsites], a1[nFDsites], a2[nFDsites],
b[nFDsites];
20 double GPSbreak1_2breaks[nFDsites], GPSbreak2_2breaks[nFDsites], a1_2breaks[nFDsites], a2_2breaks[nFDsites], a3_2breaks[nFDsites], b_2breaks[nFDsites];
21 double CorrectedRatio, f;
28 GPSbreak[0] = 1059.67;
29 GPSbreak[1] = 1004.65;
30 GPSbreak[2] = 1063.43;
31 GPSbreak[3] = 1001.87;
54 GPSbreak[0] = 961.821;
55 GPSbreak[1] = 985.511;
56 GPSbreak[2] = 1047.96;
57 GPSbreak[3] = 959.097;
76 GPSbreak1_2breaks[0] = 1073.59;
77 GPSbreak1_2breaks[1] = 1044.57;
78 GPSbreak1_2breaks[2] = 1066.6;
79 GPSbreak1_2breaks[3] = 1042.24;
81 GPSbreak2_2breaks[0] = 1128.46;
82 GPSbreak2_2breaks[1] = 1098.82;
83 GPSbreak2_2breaks[2] = 1092.46;
84 GPSbreak2_2breaks[3] = 1095;
86 a1_2breaks[0] = 0.00040397;
87 a1_2breaks[1] = 0.00103914;
88 a1_2breaks[2] = 0.000437;
89 a1_2breaks[3] = 0.000509163;
91 a2_2breaks[0] = -0.00114323;
92 a2_2breaks[1] = -0.00147673;
93 a2_2breaks[2] = -0.00203909;
94 a2_2breaks[3] = -0.00175069;
96 a3_2breaks[0] = 0.00177153;
97 a3_2breaks[1] = 0.00101904;
98 a3_2breaks[2] = 3.87678e-05;
99 a3_2breaks[3] = 0.000419606;
101 b_2breaks[0] = -1.03302;
102 b_2breaks[1] = -0.0856851;
103 b_2breaks[2] = 0.944868;
104 b_2breaks[3] = 0.466709;
109 if( gpsmegatime < GPSbreak[eye] )
111 f = a1[eye] * gpsmegatime + b[eye];
113 CorrectedRatio = EsdOverFd / f;
117 f = a2[eye] * gpsmegatime + b[eye] + (a1[eye]-a2[eye]) * GPSbreak[eye];
119 CorrectedRatio = EsdOverFd / f;
125 if( gpsmegatime < GPSbreak1_2breaks[eye] )
127 f = a1_2breaks[eye] * gpsmegatime + b_2breaks[eye] + ( a3_2breaks[eye] - a2_2breaks[eye] ) * GPSbreak2_2breaks[eye] + ( a2_2breaks[eye] - a1_2breaks[eye] ) * GPSbreak1_2breaks[eye];
129 CorrectedRatio = EsdOverFd / f;
131 if( gpsmegatime > GPSbreak1_2breaks[eye] && gpsmegatime < GPSbreak2_2breaks[eye] )
133 f = a2_2breaks[eye] * gpsmegatime + b_2breaks[eye] + (a3_2breaks[eye]-a2_2breaks[eye]) * GPSbreak2_2breaks[eye];
135 CorrectedRatio = EsdOverFd / f;
137 if( gpsmegatime > GPSbreak2_2breaks[eye] )
139 f = a3_2breaks[eye] * gpsmegatime + b_2breaks[eye];
141 CorrectedRatio = EsdOverFd / f;
145 return CorrectedRatio;
153 const double MoonCycleLength = 29.532;
155 const double MoonCycleJan1st2004 = 11.45 - 344/MoonCycleLength;
156 const int GPSJan1st2004 = 756950413;
158 const double x = MoonCycleJan1st2004 + (gpsmegatime*1e6 - GPSJan1st2004)/(MoonCycleLength*24*3600);
164 double LL_par[2] = {0, 0};
165 double LL_stitch = 0;
173 slope[0] = 0.000557776;
174 slope[1] = 0.00536182;
175 slope[2] = -0.0321092;
180 LL_par[0] = 9.33706e-01;
181 LL_par[1] = 3.40356e-03;
198 slope[0] = 0.00205574;
199 slope[1] = -0.000290713;
200 slope[2] = 0.00323317;
208 slope[0] = 0.00222544;
209 slope[1] = -0.00306826;
210 slope[2] = 7.98857e-05;
218 slope[0] = 0.00134737;
219 slope[1] = -0.0961635;
220 slope[2] = 0.00152404;
236 double f = x < breaks[1]? (x < breaks[0] ? constant + slope[0] * (x - breaks[0]) : constant + slope[1] * (x - breaks[0])) : constant + slope[1] * (breaks[1] - breaks[0]) + slope[2] * (x - breaks[1]);
238 if (x > LL_stitch && eye == 0)
239 f = LL_par[0] + LL_par[1] * (x - LL_stitch);
241 return EsdOverFd / f;
245 #endif // #ifdef Long_term_correction_header_cxx