27 #include <QtCore/QDataStream>
47 return "SgVlbiBaselineInfo";
55 QString prefix =
"Bln: " +
getKey() +
": ";
128 strGrdAmbigsStat_ += QString(
"").sprintf(
"%.1f (%.1f%%), ", it.key()*1.0e9, it.value()*100.0/num);
129 if (count < it.value())
150 strPhdAmbigsStat_ += QString(
"").sprintf(
"%.3f (%.1f%%), ", it.key()*1.0e9, it.value()*100.0/num);
151 if (count < it.value())
167 if (count < it.value())
183 const double dS=0.2E-9;
196 if (obsList.size()<2*M0)
201 double A_l, B_l, C_l, P_l, Q_l, R_l;
202 double a_l, b_l, wrms_l;
203 double A_r, B_r, C_r, P_r, Q_r, R_r;
204 double a_r, b_r, wrms_r;
206 A_l = B_l = C_l = P_l = Q_l = R_l = 0.0;
207 a_l = b_l = wrms_l = 0.0;
208 A_r = B_r = C_r = P_r = Q_r = R_r = 0.0;
209 a_r = b_r = wrms_r = 0.0;
212 for (
int i=0; i<obsList.size(); i++)
226 b_l = (P_l*B_l - A_l*Q_l)/(B_l*B_l - A_l*C_l);
227 a_l = (Q_l - C_l*b_l)/B_l;
229 2.0*(a_l*b_l*B_l - a_l*P_l - b_l*Q_l))/A_l));
231 A_l = B_l = C_l = P_l = Q_l = R_l = 0.0;
234 for (
int i=0; i<M0; i++)
248 for (
int i=M0; i<obsList.size(); i++)
262 b_l = (P_l*B_l - A_l*Q_l)/(B_l*B_l - A_l*C_l);
263 a_l = (Q_l - C_l*b_l)/B_l;
264 wrms_l = (R_l + a_l*a_l*A_l + b_l*b_l*C_l + 2.0*(a_l*b_l*B_l - a_l*P_l - b_l*Q_l))/A_l;
265 b_r = (P_r*B_r - A_r*Q_r)/(B_r*B_r - A_r*C_r);
266 a_r = (Q_r - C_r*b_r)/B_r;
267 wrms_r = (R_r + a_r*a_r*A_r + b_r*b_r*C_r + 2.0*(a_r*b_r*B_r - a_r*P_r - b_r*Q_r))/A_r;
269 obsList.at(M0-1)->owner()->setBaselineClock_F1 (sqrt(fabs(wrms_l)) + sqrt(fabs(wrms_r)));
270 obsList.at(M0-1)->owner()->setBaselineClock_F1l(sqrt(fabs(wrms_l)));
271 obsList.at(M0-1)->owner()->setBaselineClock_F1r(sqrt(fabs(wrms_r)));
275 for (
int i=M0; i<obsList.size()-M0+1; i++)
297 b_l = (P_l*B_l - A_l*Q_l)/(B_l*B_l - A_l*C_l);
298 a_l = (Q_l - C_l*b_l)/B_l;
299 wrms_l = (R_l + a_l*a_l*A_l + b_l*b_l*C_l + 2.0*(a_l*b_l*B_l - a_l*P_l - b_l*Q_l))/A_l;
300 b_r = (P_r*B_r - A_r*Q_r)/(B_r*B_r - A_r*C_r);
301 a_r = (Q_r - C_r*b_r)/B_r;
302 wrms_r = (R_r + a_r*a_r*A_r + b_r*b_r*C_r + 2.0*(a_r*b_r*B_r - a_r*P_r - b_r*Q_r))/A_r;
334 if (obsList.size()<4)
341 double minWrms, maxWrms;
343 minWrms = maxWrms = obsList.at(0)->owner()->getBaselineClock_F1();
344 for (
int i=0; i<obsList.size(); i++)
352 if (maxWrms < obs->owner()->getBaselineClock_F1())
355 if (maxWrms==minWrms)
373 if (minIdx>obsList.size()-3)
387 while (i<obsList.size() &&
388 obsList.at(i-1)->owner()->getBaselineClock_F1()<=obsList.at(i)->owner()->getBaselineClock_F1())
399 obsList.at(i)->owner()->getBaselineClock_F1()<=obsList.at(i-1)->owner()->getBaselineClock_F1())
436 ": scan4Ambiguities(): the number of processed observations at the baseline [" +
437 getKey() +
"] is zero; skipping");
442 int num=oList.size(), numUp=0, numDn=0;
443 for (
int i=0; i<num; i++)
452 bool isUp=numUp>numDn;
453 int n=std::max(numUp, numDn);
457 ": scan4Ambiguities(): the number of observations in the good stratum at the baseline [" +
458 getKey() +
"] less than 4; applying simple correction");
459 for (
int i=0; i<oList.size()-1; i++)
461 double closestResidual=oList.at(i)->activeDelay()->getResidual();
469 SgMJD t0 = (*oList.at(oList.size()-1)->owner() - *oList.at(0)->owner())/2.0;
471 for (
int i=0; i<num; i++)
477 x(j) = *o->
owner() - t0;
484 double sA=0.0, sB=0.0, sC=0.0, closestResidual, d;
485 for (
int i=0; i<n; i++)
491 closestResidual = sB/sA;
521 ": scan4Ambiguities(): the number of processed observations at the baseline [" +
522 getKey() +
"] is zero; skipping");
528 double closestResidual;
529 if (obsList.size() <= nAvg)
531 obsList.at(0)->activeDelay()->adjustAmbiguity();
532 closestResidual = obsList.at(0)->activeDelay()->getResidual();
533 for (
int i=0; i<obsList.size()-1; i++)
535 obsList.at(i+1)->activeDelay()->adjustAmbiguity(closestResidual);
536 closestResidual = obsList.at(i+1)->activeDelay()->getResidual();
541 closestResidual = 0.0;
542 for (
int i=0; i<nAvg; i++)
543 closestResidual += obsList.at(i)->activeDelay()->getResidual();
544 closestResidual /= nAvg;
545 for (
int i=0; i<nAvg; i++)
546 obsList.at(i)->activeDelay()->adjustAmbiguity(closestResidual);
547 for (
int i=nAvg; i<obsList.size(); i++)
549 closestResidual = 0.0;
550 for (
int j=0; j<nAvg; j++)
551 closestResidual += obsList.at(i + j - nAvg)->activeDelay()->getResidual();
552 closestResidual /= nAvg;
554 obsList.at(i)->activeDelay()->adjustAmbiguity(closestResidual);
562 closestResidual = fabs(obsList.at(crIdx)->activeDelay()->getResidual());
563 for (
int i=0; i<obsList.size(); i++)
572 closestResidual = obsList.at(crIdx)->activeDelay()->getResidual();
574 obsList.at(crIdx)->activeDelay()->adjustAmbiguity(closestResidual);
575 closestResidual = obsList.at(crIdx)->activeDelay()->getResidual();
577 for (
int i=crIdx; i>0; i--)
579 closestResidual = obsList.at(i)->activeDelay()->getResidual();
580 obsList.at(i-1)->activeDelay()->adjustAmbiguity(closestResidual);
582 for (
int i=crIdx; i<obsList.size()-1; i++)
584 closestResidual = obsList.at(i)->activeDelay()->getResidual();
585 o = obsList.at(i + 1);
586 obsList.at(i+1)->activeDelay()->adjustAmbiguity(closestResidual);
606 if (oList.size() == 0)
609 ": evaluateMeanGrDelResiduals(): the number of processed observations at the baseline [" +
610 getKey() +
"] is zero; skipping");
615 double sA=0.0, sB=0.0, sC=0.0;
617 for (
int i=0; i<oList.size(); i++)
645 shift = deltaN*ambigSpacing;
663 QString name(
getKey().left(8));
664 if (stations.contains(name))
665 stn = stations.value(name);
675 QString name(
getKey().right(8));
676 if (stations.contains(name))
677 stn = stations.value(name);
699 ": setAmbiguities2min(): the number of processed observations at the baseline [" +
700 getKey() +
"] is zero; skipping");
705 int num=oList.size(), meanAmbig;
707 for (
int i=0; i<num; i++)
708 sum += oList.at(i)->activeDelay()->getNumOfAmbiguities();
709 meanAmbig = round(sum/num);
728 if (s.status() != QDataStream::Ok)
731 ": saveIntermediateResults(): error writting data");
734 return s.status() == QDataStream::Ok;
748 if (s.status() != QDataStream::Ok)
751 ": loadIntermediateResults(): error reading data: " +
752 (s.status()==QDataStream::ReadPastEnd?
"read past end of the file":
"read corrupt data"));
758 return s.status()==QDataStream::Ok;
bool isAttr(uint a) const
virtual void write(LogLevel, quint32, const QString &, bool=false)
bool loadIntermediateResults(QDataStream &)
const QString & getKey() const
bool saveIntermediateResults(QDataStream &) const
@ Attr_PROCESSED
the observation has been processed;
double getSolution() const
double getElement(unsigned int i) const
SgVlbiStationInfo * stn_2(QMap< QString, SgVlbiStationInfo * >) const
QList< SgVlbiObservable * > observables_
double meanGrDelResidualsSigma_
void evaluateCBIndicator()
double typicalGrdAmbigSpacing_
QMap< int, int > numOfChanByCount_
QMap< double, int > grdAmbigsBySpacing_
double typicalPhdAmbigSpacing_
SgVlbiStationInfo * stn_1(QMap< QString, SgVlbiStationInfo * >) const
SgClockBreakIndicator * cbIndicator_
double dClockSigma() const
void scan4Ambiguities_m1()
void evaluateMeanGrDelResiduals()
bool loadIntermediateResults(QDataStream &)
void calculateClockF1(SgTaskConfig *)
QString strPhdAmbigsStat_
static const QString className()
bool saveIntermediateResults(QDataStream &) const
double meanGrDelResiduals_
QString strGrdAmbigsStat_
void scan4Ambiguities_m2()
QMap< double, int > phdAmbigsBySpacing_
void shiftAmbiguities(int deltaN)
void setGrdAmbiguities2min()
double getAmbiguitySpacing() const
void adjustAmbiguity(double closestResidual=0.0)
void setNumOfAmbiguities(int)
int getNumOfAmbiguities() const
SgTaskConfig::VlbiDelayType getDelayType() const
double getResidual() const
const SgMJD & epoch() const
SgVlbiObservation * owner()
SgVlbiMeasurement * activeDelay()
@ Attr_PASSED_CL_FN1
the observation participated in the procedure "calc clc fn#1"
void setBaselineClock_F1l(double f)
double getBaselineClock_F1() const
void setBaselineClock_F1(double f)
void setBaselineClock_F1r(double f)