42 return "SgMappingFunction";
77 double a = (y2-y1)/(x2-x1);
88 double a_dry_avg, a_dry_amp, b_dry_avg, b_dry_amp, c_dry_avg, c_dry_amp;
100 double deltaM, d_deltaM_dx;
107 beta = b/(sinE + c );
108 gamma = a/(sinE + beta);
109 q = 1.0 + a/(1.0 + b/(1.0 + c));
111 deltaM = (1.0/sinE - q/(sinE + gamma))*height/1000.0;
113 d_deltaM_dx = (-cosE/sinE/sinE -
114 -q*cosE/(sinE + gamma)/(sinE + gamma)*
115 (1.0 - a/(sinE + beta)/(sinE + beta)*(1.0 - b/(sinE + c)/(sinE + c))) )*height/1000.0;
151 double t_doy(epoch -
SgMJD(1980, 1, 0));
157 cost = cos(t_doy*2.0*M_PI/365.25);
159 a = a_dry_avg - a_dry_amp*cost;
160 b = b_dry_avg - b_dry_amp*cost;
161 c = c_dry_avg - c_dry_amp*cost;
167 gamma = a/(sinE + beta);
168 q = 1.0 + a/(1.0 + b/(1.0 + c));
170 m_ = q/(sinE + gamma) + deltaM;
172 dM_dE_ = -q/(sinE + gamma)/(sinE + gamma) *
173 (cosE - a/(sinE + beta)/(sinE + beta)*cosE*(1.0 - b/(sinE + c)/(sinE + c))) + d_deltaM_dx;
179 str.sprintf(
"Mapping Function (%s): lat.=%12.6f(d), elev.=%16.12f(d), h=%12.6f(m); epoch: %s",
183 str.sprintf(
"Mapping Function (%s): doy = %16.12f, cost = %16.12f",
184 qPrintable(stnInfo->
getKey()), t_doy, cost);
185 str.sprintf(
"Mapping Function (%s): a = %16.12f, b = %16.12f, c = %16.12f",
186 qPrintable(stnInfo->
getKey()), a, b, c);
188 str.sprintf(
"Mapping Function result(%s): M=%20.16f",
210 return "SgWetMF_NMF";
218 double a = (y2-y1)/(x2-x1);
219 double b = y1 - a*x1;
265 gamma = a/(sinE + beta);
266 q = 1.0 + a/(1.0 + b/(1.0 + c));
268 m_ = q/(sinE + gamma);
270 dM_dE_ = -q/(sinE + gamma)/(sinE + gamma)*
271 (cosE - a/(sinE + beta)/(sinE + beta)*cosE*(1.0 - b/(sinE + c)/(sinE + c)));
276 str.sprintf(
"Mapping Function (%s): lat.=%12.6f(d), elev.=%16.12f(d)",
279 str.sprintf(
"Mapping Function result(%s): M=%20.16f",
301 return "SgGradMF_CH";
318 m_ = 1.0/(sin(e)*tan(e) + 0.0032);
338 return "SgDryMF_MTT";
347 double cosPhi, sinE, height, a, b, c, tempC;
357 a = ( 1.2320 + 0.0139*cosPhi - 0.0209*height + 0.00215*(tempC - 10.0))*1.0e-3;
358 b = ( 3.1612 - 0.1600*cosPhi - 0.0331*height + 0.00206*(tempC - 10.0))*1.0e-3;
359 c = (71.244 - 4.293 *cosPhi - 0.149 *height - 0.0021 *(tempC - 10.0))*1.0e-3;
362 m_ = (1.0 + a/(1.0 + b/(1.0 + c)))/(sinE + a/(sinE + b/(sinE + c)));
382 return "SgWetMF_MTT";
391 double cosPhi, sinE, height, a, b, c, tempC;
401 a = ( 0.583 - 0.011 *cosPhi - 0.052 *height + 0.0014*(tempC - 10.0))*1.0e-3;
402 b = ( 1.402 - 0.102 *cosPhi - 0.101 *height + 0.0020*(tempC - 10.0))*1.0e-3;
403 c = (45.85 - 1.91 *cosPhi - 1.29 *height + 0.015 *(tempC - 10.0))*1.0e-3;
406 m_ = (1.0 + a/(1.0 + b/(1.0 + c)))/(sinE + a/(sinE + b/(sinE + c)));
457 1.2769934e-3, 1.2683230e-3, 1.2465397e-3, 1.2196049e-3, 1.2045996e-3
462 2.9153695e-3, 2.9152299e-3, 2.9288445e-3, 2.9022565e-3, 2.9024912e-3
467 62.610505e-3, 62.837393e-3, 63.721774e-3, 63.824265e-3, 64.258455e-3
472 0.0, 1.2709626e-5, 2.6523662e-5, 3.4000452e-5, 4.1202191e-5
477 0.0, 2.1414979e-5, 3.0160779e-5, 7.2562722e-5, 11.723375e-5
482 0.0, 9.0128400e-5, 4.3497037e-5, 84.795348e-5, 170.37206e-5
495 5.8021897e-4, 5.6794847e-4, 5.8118019e-4, 5.9727542e-4, 6.1641693e-4
500 1.4275268e-3, 1.5138625e-3, 1.4572752e-3, 1.5007428e-3, 1.7599082e-3
505 4.3472961e-2, 4.6729510e-2, 4.3908931e-2, 4.4626982e-2, 5.4736038e-2
#define RAD2DEG
radians to degrees:
#define DEG2RAD
degrees to seconds:
virtual double calc(const SgMeteoData &meteo, double e, const SgVlbiStationInfo *stnInfo, const SgMJD &epoch)
static const QString className()
static const double modelArg_[5]
static const double modelA_avg_[5]
static const double modelC_amp_[5]
static const QString className()
static const double modelA_amp_[5]
static const double modelB_amp_[5]
static const double modelC_avg_[5]
double linterpolate(double, double, double, double, double)
static const double modelB_avg_[5]
virtual double calc(const SgMeteoData &meteo, double e, const SgVlbiStationInfo *stnInfo, const SgMJD &epoch)
static const QString className()
virtual double calc(const SgMeteoData &meteo, double e, const SgVlbiStationInfo *stnInfo, const SgMJD &epoch)
virtual void write(LogLevel, quint32, const QString &, bool=false)
bool isEligible(LogLevel lvl, quint32 f) const
@ F_YYYYMMDDHHMMSSSS
Long verbose: Fri, the 2nd of Apr, 2010; 17hr 02min 43.6400sec.
QString toString(Format format=F_Verbose) const
virtual double calc(const SgMeteoData &meteo, double e, const SgVlbiStationInfo *stnInfo, const SgMJD &epoch)
static const QString className()
double getTemperature() const
const QString & getKey() const
double getLatitude() const
virtual double calc(const SgMeteoData &meteo, double e, const SgVlbiStationInfo *stnInfo, const SgMJD &epoch)
static const QString className()
static const double modelArg_[5]
static const double modelC_avg_[5]
virtual double calc(const SgMeteoData &meteo, double e, const SgVlbiStationInfo *stnInfo, const SgMJD &epoch)
double linterpolate(double, double, double, double, double)
static const double modelA_avg_[5]
static const double modelB_avg_[5]
static const QString className()