General Purpose Geodetic Library
SgSingleSessionTaskManager.cpp
Go to the documentation of this file.
1 /*
2  *
3  * This file is a part of Space Geodetic Library. The library is used by
4  * nuSolve, a part of CALC/SOLVE system, and designed to make analysis of
5  * geodetic VLBI observations.
6  * Copyright (C) 2010-2020 Sergei Bolotin.
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program. If not, see <http://www.gnu.org/licenses/>.
20  *
21  */
22 
23 
25 
26 
27 #include <Sg3dVector.h>
28 #include <SgEstimator.h>
29 #include <SgLogger.h>
30 #include <SgRefraction.h>
31 #include <SgVlbiBand.h>
32 
33 
34 
35 /*=======================================================================================================
36 *
37 * METHODS:
38 *
39 *======================================================================================================*/
40 //
42 {
43  return "SgSingleSessionTaskManager";
44 };
45 
46 
47 
48 //
50 {
52  "::prepare4Run(): preparing to run the task");
53 
55 
56  // create the list of parameters:
62 
63  // a list of VLBI sessions, just check that there is only one session, warn user if it is not true:
64  if (task_->sessionsByName().size()==0)
65  {
67  "::prepare4Run(): there is no VLBI session to process");
68  return false;
69  };
70  if (task_->sessionsByName().size()>1)
72  "::prepare4Run(): too many sessions in the task");
73 
75  {
76  currentSessionInfo_ = task_->sessionsByName().begin().value();
77  // ok, we expect that that should be already seted up, so notify a user:
79  "::prepare4Run(): the current sessionInfo object has been adjusted");
80  };
81  if (!currentSession_)
82  {
83  // ok, we expect that that should be already seted up, so notify a user:
85  "::prepare4Run(): the current session object is not defined");
86  return false;
87  };
88 
89  // check the cache, it should be prepared before prepare4Run() call:
90  if (!observations_)
91  {
93  "::prepare4Run(): the pointer on observations is NULL");
94  return false;
95  };
96  if (!observations_->size())
97  {
99  "::prepare4Run(): there is no any observations in the container of observations");
100  return false;
101  };
102 
103  tStart_ = *observations_->first();
104  tFinis_ = *observations_->last();
106 
107  // create CALCable objects:
109 
110  // prepare the session:
113 
114  // should we clear them?
115  // clear estimated parameters:
117  it!=currentSession_->stationsByName().end(); ++it)
118  {
119  SgVlbiStationInfo *si=it.value();
121  {
124 // task_->parameters()->getClock0Mode() == SgParameterCfg::PM_PWL
125  )
126  {
127  si->clearEstClockModel();
129  "::prepare4Run(): clocks have been reset for " + si->getKey());
130  };
131  //
132  // if the num of polynomials was decreased, clear higher terms:
133  for (int i=si->getClocksModelOrder(); i<si->maxNumOfPolynomials(); i++)
134  si->setEstClockModel(i, 0.0, 0.0);
135  //
138 // task_->parameters()->getZenithMode() == SgParameterCfg::PM_PWL ||
139 // task_->parameters()->getZenithMode() == SgParameterCfg::PM_STC
140  )
142  };
143  };
144  //
145  //
146  // eow?
147  return true;
148 };
149 
150 
151 
152 //
153 void SgSingleSessionTaskManager::run(bool haveProcessAllBands)
154 {
156  "::run(): data analysis procedure initiated", true);
158  if (have2InteractWithGui_ &&
161  have2InteractWithGui_ = false;
162 
163  SgVlbiBand *band=NULL;
164  SgTaskConfig *cfg=task_->config();
165  int obsIdx=0;
166  bool isNeedReweighting=cfg->getDoWeightCorrection();
167  bool isRoughAnalysis=cfg->getUseDelayType()==SgTaskConfig::VD_SB_DELAY;
168  bool useDelays=cfg->getUseDelayType()!=SgTaskConfig::VD_NONE;
169  bool useRates=cfg->getUseRateType()!=SgTaskConfig::VR_NONE;
170 
171  // set up parameters lists:
173  int nDataTypes(useDelays && useRates?2:1);
174  estimator_->prepare2Run(nDataTypes*observations_->size(), tStart_, tFinis_, tRefer_);
175  //
176  //
177  // set up constraints:
183  {
188  };
191  //
192  //
193  // collect eligible observations:
194  QList<SgObservation*> eligibleObservations;
195  for (obsIdx=0; obsIdx<observations_->size(); obsIdx++)
196  {
197  SgObservation *obs=observations_->at(obsIdx);
199  obs->evaluateTheoreticalValues(this);
200  if (obs->isEligible(cfg))
201  {
202  eligibleObservations << obs;
203  }
204  };
205  // and process them:
206  // GUI:
207  //
208  //------------------- begin of data processing -------------------
209  //
211  (*longOperationStart_)(0, eligibleObservations.size(), "Processing observations");
212  for (obsIdx=0; obsIdx<eligibleObservations.size(); obsIdx++)
213  {
214  SgObservation *obs=eligibleObservations.at(obsIdx);
215  // delay:
216  if (useDelays)
217  {
219  obs->prepare4Analysis(this);
220  estimator_->processObs(*obs, obs->o_c(), obs->sigma());
221  };
222  // rate:
223  if (useRates)
224  {
226  obs->prepare4Analysis(this);
227  estimator_->processObs(*obs, obs->o_c(), obs->sigma());
228  };
229  //
230  // tell GUI about progress:
231  if (have2InteractWithGui_ && (obsIdx%200==0))
232  (*longOperationProgress_)(obsIdx);
233  };
234 
235  // GUI:
237  (*longOperationStop_)();
238  eligibleObservations.clear();
239  estimator_->finisRun();
240  //
241  //------------------- observations are processed -------------------
242  //
243  //
244  //
246  "::run(): the solution is obtained, starting evaluation of residuals and statistics", true);
247  //
250  //-------------------------------------------------------------------
251  //
252  // evaluate residuals:
253  //
254  for (obsIdx=0; obsIdx<observations_->size(); obsIdx++)
255  {
256  SgObservation *obs=observations_->at(obsIdx);
258  obs->evaluateResiduals(this); // <--- need to optimize a little bit..
259  };
260  //
261  // update statistics:
262  for (int iBand=0; iBand<currentSession_->numberOfBands(); iBand++)
263  {
264  band = currentSession_->bands().at(iBand);
265  //
266  if (isNeedReweighting && cfg->getWcMode()==SgTaskConfig::WCM_BAND)
267  band->recalcSigma2add(cfg);
268  //
269  if (haveProcessAllBands || iBand==cfg->getActiveBandIdx())
270  {
271  switch (cfg->getOpMode())
272  {
273  default:
275  band->calcNormalizedResiduals(band->observables(), cfg);
276  break;
278  for (BaselinesByName_it it=band->baselinesByName().begin(); it!=band->baselinesByName().end();
279  ++it)
280  {
281  SgVlbiBaselineInfo *baselineInfo=it.value();
282  if (baselineInfo && !baselineInfo->isAttr(SgVlbiBaselineInfo::Attr_NOT_VALID))
283  baselineInfo->calcNormalizedResiduals(baselineInfo->observables(), cfg);
284  };
285  break;
286  };
287  };
288  };
289  //
290  //
291  //
292  // propagate statistics to session-wide structures:
293  QString sLabel("");
294  band = currentSession_->bands().at(cfg->getActiveBandIdx());
295  //
296  if (band)
297  {
298  sLabel = band->getKey();
299 // if (currentSession_->isAttr(SgVlbiSession::Attr_FF_ION_C_CALCULATED))
301  {
302  for (int i=0; i<currentSession_->bands().size(); i++)
303  if (currentSession_->bands().at(i)->getKey() != band->getKey())
304  sLabel += "/" + currentSession_->bands().at(i)->getKey();
305  };
306  sLabel += ":";
308  (*longOperationShowStats_)(sLabel, band->numTotal(DT_DELAY), band->numProcessed(DT_DELAY),
309  band->wrms(DT_DELAY)*1.0e12, band->reducedChi2(DT_DELAY));
310 
311  // stations infos:
312  for (StationsByName_it it=band->stationsByName().begin(); it!=band->stationsByName().end(); ++it)
313  {
314  SgVlbiStationInfo *si=it.value(), *sni=NULL;
315  if (si && (sni=currentSession_->stationsByName().value(si->getKey())))
316  {
317  sni->copyStatistics(si);
318  if (!isRoughAnalysis && sni->numProcessed(DT_DELAY)<4 &&
319  !sni->isAttr(SgVlbiStationInfo::Attr_NOT_VALID))
320  {
321  sni->addAttr(SgVlbiStationInfo::Attr_NOT_VALID);
323  "::run(): the station " + sni->getKey() +
324  " was deselected from the solution due to a small number of observations");
325  };
326  };
327  };
328  // sources infos:
329  for (SourcesByName_it it=band->sourcesByName().begin(); it!=band->sourcesByName().end(); ++it)
330  {
331  SgVlbiSourceInfo *si=it.value(), *sni=NULL;
332  if (si && (sni=currentSession_->sourcesByName().value(si->getKey())))
333  {
334  sni->copyStatistics(si);
335  double ra(sni->getRA()), dn(sni->getDN());
337  {
338  ra = sni->getRA_ea();
339  dn = sni->getDN_ea();
340  };
341  sni->setAl2Estd(SgVlbiSourceInfo::arcLength(ra, dn,
342  ra+sni->pRA()->getSolution(), dn+sni->pDN()->getSolution()));
343  };
344  };
345  // baselines infos:
346  for (BaselinesByName_it it=band->baselinesByName().begin(); it!=band->baselinesByName().end(); ++it)
347  {
348  SgVlbiBaselineInfo *bi=it.value(), *bni=NULL;
349  if (bi && (bni=currentSession_->baselinesByName().value(bi->getKey())))
350  {
351  if (isNeedReweighting &&
353  !bni->isAttr(SgVlbiBaselineInfo::Attr_SKIP_WC) )
354  {
355  bi->recalcSigma2add(cfg);
356  bni->copySigmas2add(bi);
357  };
358  //
359  // special case for rates (set default sig0 if rates were not in the solution):
360  if (!useRates && bni->getSigma2add(DT_RATE)==0.0)
361  bni->setSigma2add(DT_RATE, 100.0e-15);
362  //
363  bni->copyStatistics(bi);
364  //
365  if (!isRoughAnalysis && bni->numProcessed(DT_DELAY)<4 &&
367  {
370  "::run(): the baseline " + bni->getKey() +
371  " was deselected from the solution due to a small number of observations");
372  };
373  };
374  };
375  };
376  //-------------------------- ??????
377  //
378  for (SourcesByName_it it=currentSession_->sourcesByName().begin();
379  it!=currentSession_->sourcesByName().end(); ++it)
380  {
381  SgVlbiSourceInfo *si=it.value();
384  )
385  {
386 /*
387  if (si->getSmtType() == SgVlbiSourceInfo::SMT_TWO_POINTS)
388  {
389  if (si->pX() && si->pY() && si->pK() && si->pB())
390  {
391  si->setK(si->getK() + si->pK()->getSolution());
392  si->setB(si->getB() + si->pB()->getSolution());
393  si->setX(si->getX() + si->pX()->getSolution());
394  si->setY(si->getY() + si->pY()->getSolution());
395  si->setKsig(si->pK()->getSigma());
396  si->setBsig(si->pB()->getSigma());
397  si->setXsig(si->pX()->getSigma());
398  si->setYsig(si->pY()->getSigma());
399 
400  if (si->isExtSS())
401  {
402  si->setA0(si->getA0() + si->pA0()->getSolution());
403  si->setB0(si->getB0() + si->pB0()->getSolution());
404  si->setTheta0(si->getTheta0() + si->pTheta0()->getSolution());
405  si->setA1(si->getA1() + si->pA1()->getSolution());
406  si->setB1(si->getB1() + si->pB1()->getSolution());
407  si->setTheta1(si->getTheta1() + si->pTheta1()->getSolution());
408 
409  si->setA0Sig(si->pA0()->getSigma());
410  si->setB0Sig(si->pB0()->getSigma());
411  si->setTheta0Sig(si->pTheta0()->getSigma());
412  si->setA1Sig(si->pA1()->getSigma());
413  si->setB1Sig(si->pB1()->getSigma());
414  si->setTheta1Sig(si->pTheta1()->getSigma());
415  };
416 
417  if (si->isExtSS())
418  logger->write(SgLogger::DBG, SgLogger::RUN, className() +
419  "::run(): aux parameters for " + si->getKey() +
420  QString("").sprintf(": K=%.4f B=%.4f X=%.4f(mas) Y=%.4f(mas) "
421  "A0=%.4f(mas) B0=%.4f(mas) Th0=%.4f(deg) A1=%.4f(mas) B1=%.4f(mas) "
422  "Th1=%.4f(deg) %.3f(ps)",
423  si->getK(), si->getB(), si->getX()*RAD2MAS, si->getY()*RAD2MAS,
424  si->getA0()*RAD2MAS, si->getB0()*RAD2MAS, si->getTheta0()*RAD2DEG,
425  si->getA1()*RAD2MAS, si->getB1()*RAD2MAS, si->getTheta1()*RAD2DEG,
426  si->wrms(DT_DELAY)*1.0e12));
427  else
428  logger->write(SgLogger::DBG, SgLogger::RUN, className() +
429  "::run(): aux parameters for " + si->getKey() +
430  QString("").sprintf(": K=%.4f B=%.4f X=%.4f(mas) Y=%.4f(mas)",
431  si->getK(), si->getB(), si->getX()*RAD2MAS, si->getY()*RAD2MAS));
432  }
433  else
434  logger->write(SgLogger::ERR, SgLogger::RUN, className() +
435  "::run(): aux parameters are NULL for " + si->getKey());
436  }
437  else if (si->getSmtType() == SgVlbiSourceInfo::SMT_MULTIPLE_POINTS)
438 */
439  {
440  for (int i=0; i<si->sModel().size(); i++)
441  {
442  if (si->sModel()[i].pK())
443  {
444  si->sModel()[i].setK(si->sModel()[i].getK() + si->sModel()[i].pK()->getSolution());
445  si->sModel()[i].setB(si->sModel()[i].getB() + si->sModel()[i].pB()->getSolution());
446  si->sModel()[i].setX(si->sModel()[i].getX() + si->sModel()[i].pX()->getSolution());
447  si->sModel()[i].setY(si->sModel()[i].getY() + si->sModel()[i].pY()->getSolution());
448 
449  si->sModel()[i].setKsig(si->sModel()[i].pK()->getSigma());
450  si->sModel()[i].setBsig(si->sModel()[i].pB()->getSigma());
451  si->sModel()[i].setXsig(si->sModel()[i].pX()->getSigma());
452  si->sModel()[i].setYsig(si->sModel()[i].pY()->getSigma());
453 
455  "::run(): aux parameters for " + si->getKey() +
456  QString("").sprintf(": X=%.4f (%.4f) Y=%.4f (%.4f) K=%.4f (%.4f) B=%.4f (%.4f) %.3f(ps)",
457  si->sModel()[i].getX()*RAD2MAS,
458  si->sModel()[i].getXsig()*RAD2MAS,
459  si->sModel()[i].getY()*RAD2MAS,
460  si->sModel()[i].getYsig()*RAD2MAS,
461  si->sModel()[i].getK(),
462  si->sModel()[i].getKsig(),
463  si->sModel()[i].getB(),
464  si->sModel()[i].getBsig(),
465  si->wrms(DT_DELAY)*1.0e12));
466  };
467  };
468  };
469  };
470  };
471  //-------------------------- ??????
472  //
473  //
474  // the execution is finished
476  if (isNeedReweighting)
478  //
479  // set some general stat info:
482  currentSession_->setNumOfDOF(round(band->dof(DT_DELAY)));
483 
484  //
485  // make a report:
486  const char* obsTypeNames[]=
487  {"None", "Single Band Delays", "Group Delays", "Phase Delays"};
489  "::run(): data analysis procedure finished", true);
491  "::run(): " + QString("").sprintf("%d observables were reduced to %d parameters",
493  if (useDelays)
494  {
496  "::run(): " +
497  QString("").sprintf("(%d/%d/%d) observations of %s on the %s-Band were processed",
498  band->numTotal(DT_DELAY),
499  band->numUsable(DT_DELAY),
500  band->numProcessed(DT_DELAY),
501  obsTypeNames[cfg->getUseDelayType()],
502  qPrintable(band->getKey())), true);
504  "::run(): " +
505  QString("").sprintf("WRMS= %.2fps with reduced chi2=%.4f, Tmean = ",
506  band->wrms(DT_DELAY)*1.0E12,
507  band->reducedChi2(DT_DELAY)) +
508  qPrintable(currentSession_->getTMean().toString(SgMJD::F_Simple)), true);
511  };
512  if (useRates)
513  {
515  "::run(): " +
516  QString("").sprintf("(%d/%d/%d) observations of Delay Rates on the %s-Band were processed",
517  band->numTotal(DT_RATE),
518  band->numUsable(DT_RATE),
519  band->numProcessed(DT_RATE),
520  qPrintable(band->getKey())), true);
522  "::run(): " +
523  QString("").sprintf("WRMS= %.2ffs/s with reduced chi2=%.4f, Tmean = ",
524  band->wrms(DT_RATE )*1.0E15,
525  band->reducedChi2(DT_RATE)) +
526  qPrintable(currentSession_->getTMean().toString(SgMJD::F_Simple)), true);
527  };
529  "::run(): " + QString("").sprintf("the largest condition number of the working matrix is %.6E",
530  estimator_->maxConditionNumber()), true);
532  "::run(): elapsed time for the task is: " +
534  QString("").sprintf("%.2f", (finisRunEpoch_ - startRunEpoch_)*86400.0) + " sec)", true);
535 };
536 
537 
538 
539 //
541 {
542  // save estimated parameters and made aux reports:
544  for (; it!=currentSession_->stationsByName().end(); ++it)
545  {
546  SgVlbiStationInfo *si = it.value();
548  {
550  for (int i=0; i<si->getClocksModelOrder(); i++)
551  {
552  double c = si->getEstClockModel(i) + si->pClocks(i)->getSolution();
553  si->setEstClockModel(i, c, si->pClocks(i)->getSigma());
554  };
556  {
557  double c = si->getEstWetZenithDelay() + si->pZenithDelay()->getSolution();
558  si->setEstWetZenithDelay(c, si->pZenithDelay()->getSigma());
559  };
560  };
561  };
562  //
563  //
565  {
566  QString str;
568  "::finisRun(): ==== baseline length aux. report ====");
569  //
570  //
571  BaselinesByName_it it_bl;
572  for (it_bl=currentSession_->baselinesByName().begin();
573  it_bl!=currentSession_->baselinesByName().end(); ++it_bl)
574  {
575  SgVlbiBaselineInfo *bi=it_bl.value();
576  QString blName;
577  blName = bi->getKey();
578  // baseline vector:
580  {
581  SgVlbiStationInfo *s1, *s2;
582  if (currentSession_->stationsByName().contains(blName.mid(0,8)))
583  s1 = currentSession_->stationsByName().value(blName.mid(0,8));
584  else
585  s1 = NULL;
586  if (currentSession_->stationsByName().contains(blName.mid(9,8)))
587  s2 = currentSession_->stationsByName().value(blName.mid(9,8));
588  else
589  s2 = NULL;
590  if (s1 && s2)
591  {
592  Sg3dVector b, b_apriori;
593  b_apriori = (s2->getR() - s1->getR());
595  {
596  SgMJD t(bi->pBx()->getTMean());
597  b_apriori = s2->getR_ea() - s1->getR_ea() +
598  (s2->getV_ea() - s1->getV_ea())*
600  };
601  b = b_apriori +
602  Sg3dVector(bi->pBx()->getSolution(), bi->pBy()->getSolution(), bi->pBz()->getSolution());
603  double l(b.module()), l_apriori(b_apriori.module());
604  str.sprintf("length a priori: %14.2f (mm) a posteriori: %14.2f (mm)"
605  " change in length: %10.2f (mm)",
606  l_apriori*1000.0, l*1000.0, (l-l_apriori)*1000.0);
608  "::finisRun(): Baseline " + blName + ": " + str +
609  " on " + bi->pBx()->getTMean().toString(SgMJD::F_Simple));
610  }
611  else
613  "::finisRun(): a station pointer is NULL");
614  };
615  };
616  //
617  //
619  "::finisRun(): ==== end of aux report ====");
620  };
621 
623 
624  // destroy calcable objects:
625  if (refraction_)
626  {
627  delete refraction_;
628  refraction_ = NULL;
629  };
630 
632  "::finisRun(): the task is finished");
633 };
634 
635 
636 
637 //
639 {
640  // lists of gloabal parameters:
641  if (globalParameters_)
642  {
645  "::updateParamaterLists(): the list of global parameters (" +
646  QString("_").setNum(globalParameters_->size()) + ") has been created");
647  };
648  // lists of arc parameters:
649  if (arcParameters_)
650  {
653  "::updateParamaterLists(): the list of arc parameters (" +
654  QString("_").setNum(arcParameters_->size()) + ") has been created");
655  };
656 
657  // lists of local parameters:
658  if (localParameters_)
659  {
662  "::updateParamaterLists(): the list of local parameters (" +
663  QString("_").setNum(localParameters_->size()) + ") has been created");
664  };
665 
666  // lists of PWL parameters:
667  if (pwlParameters_)
668  {
671  "::updateParamaterLists(): the list of `picewise linear' parameters (" +
672  QString("_").setNum(pwlParameters_->size()) + ") has been created");
673  };
674 
675  // lists of stochastic parameters:
677  {
680  "::updateParamaterLists(): the list of stochastic parameters (" +
681  QString("_").setNum(stochasticParameters_->size()) + ") has been created");
682  };
683 
688 };
689 /*=====================================================================================================*/
690 
691 
692 
693 
694 /*=======================================================================================================
695 *
696 * FRIENDS:
697 *
698 *======================================================================================================*/
699 //
700 
701 
702 
703 /*=====================================================================================================*/
704 //
705 // aux functions:
706 //
707 
708 
709 // i/o:
710 
711 
712 /*=====================================================================================================*/
713 //
714 // constants:
715 //
716 
717 
718 /*=====================================================================================================*/
SgLogger * logger
Definition: SgLogger.cpp:231
QString interval2Str(double days)
Definition: SgMJD.cpp:1370
#define RAD2MAS
radians to ms:
Definition: SgMathSupport.h:60
QMap< QString, SgVlbiBaselineInfo * >::iterator BaselinesByName_it
QMap< QString, SgVlbiSourceInfo * >::iterator SourcesByName_it
QMap< QString, SgVlbiStationInfo * >::iterator StationsByName_it
@ DT_DELAY
Definition: SgWrmsable.h:44
@ DT_RATE
Definition: SgWrmsable.h:45
double module() const
Definition: Sg3dVector.h:99
const SgMJD & getT0() const
bool isAttr(uint a) const
Definition: SgAttribute.h:226
void delAttr(uint a)
Definition: SgAttribute.h:210
void addAttr(uint a)
Definition: SgAttribute.h:202
double maxConditionNumber() const
Definition: SgEstimator.h:171
int numOfProcessedObs() const
Definition: SgEstimator.h:108
void prepareStochasticSolution4Epoch(const SgMJD &, QList< SgParameter * > *)
void addParametersList(QList< SgParameter * > *, bool=false)
void prepare2Run(int numOfExpectedObs, const SgMJD &, const SgMJD &, const SgMJD &)
QList< SgParameter * > * stochasticParametersList()
Definition: SgEstimator.h:388
QList< SgParameter * > * allRegularParametersList()
Definition: SgEstimator.h:380
void processObs(const SgMJD &t, const SgVector &o_c, const SgVector &sigma)
virtual void write(LogLevel, quint32, const QString &, bool=false)
Definition: SgLogger.cpp:88
@ ESTIMATOR
Definition: SgLogger.h:90
@ DATA
Definition: SgLogger.h:78
Definition: SgMJD.h:59
@ F_Simple
Digits: 2010/04/02 17:02:43.6.
Definition: SgMJD.h:68
QString toString(Format format=F_Verbose) const
Definition: SgMJD.cpp:1007
static SgMJD currentMJD()
Definition: SgMJD.cpp:118
void calcNormalizedResiduals(const QList< SgVlbiObservable * > &observables, const SgTaskConfig *cfg)
Definition: SgObjectInfo.h:618
const QString & getKey() const
Definition: SgObjectInfo.h:319
int numProcessed(DataType dType) const
Definition: SgObjectInfo.h:351
void recalcSigma2add(const SgTaskConfig *cfg)
int numUsable(DataType) const
Definition: SgObjectInfo.h:359
double dof(DataType) const
Definition: SgObjectInfo.h:575
void copyStatistics(SgObjectInfo *)
Definition: SgObjectInfo.h:583
double wrms(DataType) const
Definition: SgObjectInfo.h:567
int numTotal(DataType dType) const
Definition: SgObjectInfo.h:343
double reducedChi2(DataType) const
Definition: SgObjectInfo.h:423
virtual void prepare4Analysis(SgTaskManager *)=0
virtual void evaluateResiduals(SgTaskManager *)=0
virtual const SgVector & o_c()=0
virtual const SgVector & sigma()=0
virtual bool isEligible(const SgTaskConfig *)
virtual void evaluateTheoreticalValues(SgTaskManager *)=0
@ Attr_PROCESSED
the observation has been processed;
Definition: SgObservation.h:79
double getSolution() const
Definition: SgParameter.h:435
double getSigma() const
Definition: SgParameter.h:443
@ Attr_IS_SOLVED
for estimator use
Definition: SgParameter.h:57
SgParameterCfg::PMode getPolusXYMode() const
SgParameterCfg::PMode getStnCooMode() const
SgParameterCfg::PMode getClock0Mode() const
SgParameterCfg::PMode getZenithMode() const
SgParameterCfg::PMode getBlLengthMode() const
SgParameterCfg::PMode getSrcCooMode() const
SgParameterCfg::PMode getPolusUT1Mode() const
SgMJD getTMean(const SgMJD &=tZero) const
Definition: SgPartial.h:416
OutliersProcessingMode getOpMode() const
Definition: SgTaskConfig.h:961
bool getUseExtAPrioriSitesPositions() const
VlbiDelayType getUseDelayType() const
Definition: SgTaskConfig.h:857
bool getDoWeightCorrection() const
Definition: SgTaskConfig.h:889
WeightCorrectionMode getWcMode() const
Definition: SgTaskConfig.h:929
bool getUseExtAPrioriSourcesPositions() const
VlbiRateType getUseRateType() const
Definition: SgTaskConfig.h:865
void setDataType(VlbiDataType t)
Definition: SgTaskConfig.h:419
int getActiveBandIdx() const
Definition: SgTaskConfig.h:873
SgTask * task_
SgMJD startRunEpoch_
QList< SgObservation * > * observations_
QList< SgParameter * > * localParameters_
QList< SgParameter * > * arcParameters_
void(* longOperationMessage_)(const QString &message)
void(* longOperationStart_)(int minStep, int maxStep, const QString &message)
void(* longOperationStop_)()
int constrainTroposphericParameters()
void(* longOperationProgress_)(int step)
SgEstimator * estimator_
void(* longOperationShowStats_)(const QString &label, int numTot, int numPrc, double wrms, double chi2)
SgVlbiSession * currentSession_
int constrainStcPositionsNNR()
SgVlbiSessionInfo * currentSessionInfo_
int constrainStcPositionsNNT()
QList< SgParameter * > * pwlParameters_
QList< SgParameter * > * globalParameters_
int constrainSourcesPositions()
SgRefraction * refraction_
SgMJD finisRunEpoch_
QList< SgParameter * > * stochasticParameters_
bool have2InteractWithGui_
void fillParameterList(QList< SgParameter * > *&, SgParameterCfg::PMode)
SgParametersDescriptor * parameters()
Definition: SgTask.h:211
SgTaskConfig * config()
Definition: SgTask.h:204
SessionInfosByName & sessionsByName()
Definition: SgTask.h:219
QMap< QString, SgVlbiBaselineInfo * > & baselinesByName()
Definition: SgVlbiBand.h:376
QMap< QString, SgVlbiStationInfo * > & stationsByName()
Definition: SgVlbiBand.h:368
QList< SgVlbiObservable * > & observables()
Definition: SgVlbiBand.h:288
QMap< QString, SgVlbiSourceInfo * > & sourcesByName()
Definition: SgVlbiBand.h:384
@ Attr_NOT_VALID
omit the baseline;
@ Attr_SKIP_WC
do not make weight corrections for this baseline;
QList< SgVlbiObservable * > & observables()
@ Attr_FF_WEIGHTS_CORRECTED
weights have been corrected;
@ Attr_FF_PHASE_DEL_USED
station clocks or zenith delays were set.
@ Attr_HAS_IONO_CORR
the theoretical values are available;
const SgMJD & getTMean() const
int numberOfBands() const
const SgAPriories & getApStationVelocities() const
QList< SgVlbiBand * > & bands()
void setNumOfConstraints(int n)
QMap< QString, SgVlbiStationInfo * > & stationsByName()
const SgMJD & tRefer() const
void setNumOfParameters(int n)
QMap< QString, SgVlbiSourceInfo * > & sourcesByName()
void createParameters()
void setNumOfDOF(int n)
QMap< QString, SgVlbiBaselineInfo * > & baselinesByName()
void releaseParameters()
QList< StructModelMp > & sModel()
static double arcLength(double ra_1, double dn_1, double ra_2, double dn_2)
@ Attr_APPLY_SSM
apply the source structure model;
@ Attr_NOT_VALID
omit the source;
const Sg3dVector & getV_ea()
void setEstWetZenithDelay(double d, double s)
@ Attr_NOT_VALID
omit the station;
const Sg3dVector & getR()
SgParameter * pClocks(int i)
SgParameter * pZenithDelay()
double getEstWetZenithDelay() const
const Sg3dVector & getR_ea()
int getClocksModelOrder() const
double getEstClockModel(int idx) const
void setEstClockModel(int idx, double d, double s)