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();
122  {
125 // task_->parameters()->getClock0Mode() == SgParameterCfg::PM_PWL
126  )
127  {
128  si->clearEstClockModel();
130  "::prepare4Run(): clocks have been reset for " + si->getKey());
131  };
132  //
133  // if the num of polynomials was decreased, clear higher terms:
134  for (int i=si->getClocksModelOrder(); i<si->maxNumOfPolynomials(); i++)
135  si->setEstClockModel(i, 0.0, 0.0);
136  //
139 // task_->parameters()->getZenithMode() == SgParameterCfg::PM_PWL ||
140 // task_->parameters()->getZenithMode() == SgParameterCfg::PM_STC
141  )
143  };
144  };
145  //
146  //
147  // eow?
148  return true;
149 };
150 
151 
152 
153 //
154 void SgSingleSessionTaskManager::run(bool haveProcessAllBands)
155 {
157  "::run(): data analysis procedure initiated", true);
159  if (have2InteractWithGui_ &&
162  have2InteractWithGui_ = false;
163 
164  SgVlbiBand *band=NULL;
165  SgTaskConfig *cfg=task_->config();
166  int obsIdx=0;
167  bool isNeedReweighting=cfg->getDoWeightCorrection();
168  bool isRoughAnalysis=cfg->getUseDelayType()==SgTaskConfig::VD_SB_DELAY;
169  bool useDelays=cfg->getUseDelayType()!=SgTaskConfig::VD_NONE;
170  bool useRates=cfg->getUseRateType()!=SgTaskConfig::VR_NONE;
171 
172  // set up parameters lists:
174  int nDataTypes(useDelays && useRates?2:1);
175  estimator_->prepare2Run(nDataTypes*observations_->size(), tStart_, tFinis_, tRefer_);
176  //
177  //
178  // set up constraints:
184  {
189  };
192  //
193  //
194  // collect eligible observations:
195  QList<SgObservation*> eligibleObservations;
196  for (obsIdx=0; obsIdx<observations_->size(); obsIdx++)
197  {
198  SgObservation *obs=observations_->at(obsIdx);
200  obs->evaluateTheoreticalValues(this);
201  if (obs->isEligible(cfg))
202  {
203  eligibleObservations << obs;
204  }
205  };
206  // and process them:
207  // GUI:
208  //
209  //------------------- begin of data processing -------------------
210  //
212  (*longOperationStart_)(0, eligibleObservations.size(), "Processing observations");
213  for (obsIdx=0; obsIdx<eligibleObservations.size(); obsIdx++)
214  {
215  SgObservation *obs=eligibleObservations.at(obsIdx);
216  // delay:
217  if (useDelays)
218  {
220  obs->prepare4Analysis(this);
221  estimator_->processObs(*obs, obs->o_c(), obs->sigma());
222  };
223  // rate:
224  if (useRates)
225  {
227  obs->prepare4Analysis(this);
228  estimator_->processObs(*obs, obs->o_c(), obs->sigma());
229  };
230  //
231  // tell GUI about progress:
232  if (have2InteractWithGui_ && (obsIdx%200==0))
233  (*longOperationProgress_)(obsIdx);
234  };
235 
236  // GUI:
238  (*longOperationStop_)();
239  eligibleObservations.clear();
240  estimator_->finisRun();
241  //
242  //------------------- observations are processed -------------------
243  //
244  //
245  //
247  "::run(): the solution is obtained, starting evaluation of residuals and statistics", true);
248  //
251  //-------------------------------------------------------------------
252  //
253  // evaluate residuals:
254  //
255  for (obsIdx=0; obsIdx<observations_->size(); obsIdx++)
256  {
257  SgObservation *obs=observations_->at(obsIdx);
259  obs->evaluateResiduals(this); // <--- need to optimize a little bit..
260  };
261  //
262  // update statistics:
263  for (int iBand=0; iBand<currentSession_->numberOfBands(); iBand++)
264  {
265  band = currentSession_->bands().at(iBand);
266  //
267  if (isNeedReweighting && cfg->getWcMode()==SgTaskConfig::WCM_BAND)
268  band->recalcSigma2add(cfg);
269  //
270  if (haveProcessAllBands || iBand==cfg->getActiveBandIdx())
271  {
272  switch (cfg->getOpMode())
273  {
274  default:
276  band->calcNormalizedResiduals(band->observables(), cfg);
277  break;
279  for (BaselinesByName_it it=band->baselinesByName().begin(); it!=band->baselinesByName().end();
280  ++it)
281  {
282  SgVlbiBaselineInfo *baselineInfo=it.value();
283  if (baselineInfo && !baselineInfo->isAttr(SgVlbiBaselineInfo::Attr_NOT_VALID))
284  baselineInfo->calcNormalizedResiduals(baselineInfo->observables(), cfg);
285  };
286  break;
287  };
288  };
289  };
290  //
291  //
292  //
293  // propagate statistics to session-wide structures:
294  QString sLabel("");
295  band = currentSession_->bands().at(cfg->getActiveBandIdx());
296  //
297  if (band)
298  {
299  sLabel = band->getKey();
300 // if (currentSession_->isAttr(SgVlbiSession::Attr_FF_ION_C_CALCULATED))
302  {
303  for (int i=0; i<currentSession_->bands().size(); i++)
304  if (currentSession_->bands().at(i)->getKey() != band->getKey())
305  sLabel += "/" + currentSession_->bands().at(i)->getKey();
306  };
307  sLabel += ":";
309  (*longOperationShowStats_)(sLabel, band->numTotal(DT_DELAY), band->numProcessed(DT_DELAY),
310  band->wrms(DT_DELAY)*1.0e12, band->reducedChi2(DT_DELAY));
311 
312  // stations infos:
313  for (StationsByName_it it=band->stationsByName().begin(); it!=band->stationsByName().end(); ++it)
314  {
315  SgVlbiStationInfo *si=it.value(), *sni=NULL;
316  if (si && (sni=currentSession_->stationsByName().value(si->getKey())))
317  {
318  sni->copyStatistics(si);
319  if (!isRoughAnalysis && sni->numProcessed(DT_DELAY)<4 &&
320  !sni->isAttr(SgVlbiStationInfo::Attr_NOT_VALID))
321  {
322  sni->addAttr(SgVlbiStationInfo::Attr_NOT_VALID);
324  "::run(): the station " + sni->getKey() +
325  " was deselected from the solution due to a small number of observations");
326  };
327  };
328  };
329  // sources infos:
330  for (SourcesByName_it it=band->sourcesByName().begin(); it!=band->sourcesByName().end(); ++it)
331  {
332  SgVlbiSourceInfo *si=it.value(), *sni=NULL;
333  if (si && (sni=currentSession_->sourcesByName().value(si->getKey())))
334  {
335  sni->copyStatistics(si);
336  double ra(sni->getRA()), dn(sni->getDN());
338  {
339  ra = sni->getRA_ea();
340  dn = sni->getDN_ea();
341  };
342  sni->setAl2Estd(SgVlbiSourceInfo::arcLength(ra, dn,
343  ra+sni->pRA()->getSolution(), dn+sni->pDN()->getSolution()));
344  };
345  };
346  // baselines infos:
347  for (BaselinesByName_it it=band->baselinesByName().begin(); it!=band->baselinesByName().end(); ++it)
348  {
349  SgVlbiBaselineInfo *bi=it.value(), *bni=NULL;
350  if (bi && (bni=currentSession_->baselinesByName().value(bi->getKey())))
351  {
352  if (isNeedReweighting &&
354  !bni->isAttr(SgVlbiBaselineInfo::Attr_SKIP_WC) )
355  {
356  bi->recalcSigma2add(cfg);
357  bni->copySigmas2add(bi);
358  };
359  //
360  // special case for rates (set default sig0 if rates were not in the solution):
361  if (!useRates && bni->getSigma2add(DT_RATE)==0.0)
362  bni->setSigma2add(DT_RATE, 100.0e-15);
363  //
364  bni->copyStatistics(bi);
365  //
366  if (!isRoughAnalysis && bni->numProcessed(DT_DELAY)<4 &&
368  {
371  "::run(): the baseline " + bni->getKey() +
372  " was deselected from the solution due to a small number of observations");
373  };
374  };
375  };
376  };
377  //-------------------------- ??????
378  //
379  for (SourcesByName_it it=currentSession_->sourcesByName().begin();
380  it!=currentSession_->sourcesByName().end(); ++it)
381  {
382  SgVlbiSourceInfo *si=it.value();
385  )
386  {
387 /*
388  if (si->getSmtType() == SgVlbiSourceInfo::SMT_TWO_POINTS)
389  {
390  if (si->pX() && si->pY() && si->pK() && si->pB())
391  {
392  si->setK(si->getK() + si->pK()->getSolution());
393  si->setB(si->getB() + si->pB()->getSolution());
394  si->setX(si->getX() + si->pX()->getSolution());
395  si->setY(si->getY() + si->pY()->getSolution());
396  si->setKsig(si->pK()->getSigma());
397  si->setBsig(si->pB()->getSigma());
398  si->setXsig(si->pX()->getSigma());
399  si->setYsig(si->pY()->getSigma());
400 
401  if (si->isExtSS())
402  {
403  si->setA0(si->getA0() + si->pA0()->getSolution());
404  si->setB0(si->getB0() + si->pB0()->getSolution());
405  si->setTheta0(si->getTheta0() + si->pTheta0()->getSolution());
406  si->setA1(si->getA1() + si->pA1()->getSolution());
407  si->setB1(si->getB1() + si->pB1()->getSolution());
408  si->setTheta1(si->getTheta1() + si->pTheta1()->getSolution());
409 
410  si->setA0Sig(si->pA0()->getSigma());
411  si->setB0Sig(si->pB0()->getSigma());
412  si->setTheta0Sig(si->pTheta0()->getSigma());
413  si->setA1Sig(si->pA1()->getSigma());
414  si->setB1Sig(si->pB1()->getSigma());
415  si->setTheta1Sig(si->pTheta1()->getSigma());
416  };
417 
418  if (si->isExtSS())
419  logger->write(SgLogger::DBG, SgLogger::RUN, className() +
420  "::run(): aux parameters for " + si->getKey() +
421  QString("").sprintf(": K=%.4f B=%.4f X=%.4f(mas) Y=%.4f(mas) "
422  "A0=%.4f(mas) B0=%.4f(mas) Th0=%.4f(deg) A1=%.4f(mas) B1=%.4f(mas) "
423  "Th1=%.4f(deg) %.3f(ps)",
424  si->getK(), si->getB(), si->getX()*RAD2MAS, si->getY()*RAD2MAS,
425  si->getA0()*RAD2MAS, si->getB0()*RAD2MAS, si->getTheta0()*RAD2DEG,
426  si->getA1()*RAD2MAS, si->getB1()*RAD2MAS, si->getTheta1()*RAD2DEG,
427  si->wrms(DT_DELAY)*1.0e12));
428  else
429  logger->write(SgLogger::DBG, SgLogger::RUN, className() +
430  "::run(): aux parameters for " + si->getKey() +
431  QString("").sprintf(": K=%.4f B=%.4f X=%.4f(mas) Y=%.4f(mas)",
432  si->getK(), si->getB(), si->getX()*RAD2MAS, si->getY()*RAD2MAS));
433  }
434  else
435  logger->write(SgLogger::ERR, SgLogger::RUN, className() +
436  "::run(): aux parameters are NULL for " + si->getKey());
437  }
438  else if (si->getSmtType() == SgVlbiSourceInfo::SMT_MULTIPLE_POINTS)
439 */
440  {
441  for (int i=0; i<si->sModel().size(); i++)
442  {
443  if (si->sModel()[i].pK())
444  {
445  si->sModel()[i].setK(si->sModel()[i].getK() + si->sModel()[i].pK()->getSolution());
446  si->sModel()[i].setB(si->sModel()[i].getB() + si->sModel()[i].pB()->getSolution());
447  si->sModel()[i].setX(si->sModel()[i].getX() + si->sModel()[i].pX()->getSolution());
448  si->sModel()[i].setY(si->sModel()[i].getY() + si->sModel()[i].pY()->getSolution());
449 
450  si->sModel()[i].setKsig(si->sModel()[i].pK()->getSigma());
451  si->sModel()[i].setBsig(si->sModel()[i].pB()->getSigma());
452  si->sModel()[i].setXsig(si->sModel()[i].pX()->getSigma());
453  si->sModel()[i].setYsig(si->sModel()[i].pY()->getSigma());
454 
456  "::run(): aux parameters for " + si->getKey() +
457  QString("").sprintf(": X=%.4f (%.4f) Y=%.4f (%.4f) K=%.4f (%.4f) B=%.4f (%.4f) %.3f(ps)",
458  si->sModel()[i].getX()*RAD2MAS,
459  si->sModel()[i].getXsig()*RAD2MAS,
460  si->sModel()[i].getY()*RAD2MAS,
461  si->sModel()[i].getYsig()*RAD2MAS,
462  si->sModel()[i].getK(),
463  si->sModel()[i].getKsig(),
464  si->sModel()[i].getB(),
465  si->sModel()[i].getBsig(),
466  si->wrms(DT_DELAY)*1.0e12));
467  };
468  };
469  };
470  };
471  };
472  //-------------------------- ??????
473  //
474  //
475  // the execution is finished
477  if (isNeedReweighting)
479  //
480  // set some general stat info:
483  currentSession_->setNumOfDOF(round(band->dof(DT_DELAY)));
484 
485  //
486  // make a report:
487  const char* obsTypeNames[]=
488  {"None", "Single Band Delays", "Group Delays", "Phase Delays"};
490  "::run(): data analysis procedure finished", true);
492  "::run(): " + QString("").sprintf("%d observables were reduced to %d parameters",
494  if (useDelays)
495  {
497  "::run(): " +
498  QString("").sprintf("(%d/%d/%d) observations of %s on the %s-Band were processed",
499  band->numTotal(DT_DELAY),
500  band->numUsable(DT_DELAY),
501  band->numProcessed(DT_DELAY),
502  obsTypeNames[cfg->getUseDelayType()],
503  qPrintable(band->getKey())), true);
505  "::run(): " +
506  QString("").sprintf("WRMS= %.2fps with reduced chi2=%.4f, Tmean = ",
507  band->wrms(DT_DELAY)*1.0E12,
508  band->reducedChi2(DT_DELAY)) +
509  qPrintable(currentSession_->getTMean().toString(SgMJD::F_Simple)), true);
512  };
513  if (useRates)
514  {
516  "::run(): " +
517  QString("").sprintf("(%d/%d/%d) observations of Delay Rates on the %s-Band were processed",
518  band->numTotal(DT_RATE),
519  band->numUsable(DT_RATE),
520  band->numProcessed(DT_RATE),
521  qPrintable(band->getKey())), true);
523  "::run(): " +
524  QString("").sprintf("WRMS= %.2ffs/s with reduced chi2=%.4f, Tmean = ",
525  band->wrms(DT_RATE )*1.0E15,
526  band->reducedChi2(DT_RATE)) +
527  qPrintable(currentSession_->getTMean().toString(SgMJD::F_Simple)), true);
528  };
530  "::run(): " + QString("").sprintf("the largest condition number of the working matrix is %.6E",
531  estimator_->maxConditionNumber()), true);
533  "::run(): elapsed time for the task is: " +
535  QString("").sprintf("%.2f", (finisRunEpoch_ - startRunEpoch_)*86400.0) + " sec)", true);
536 };
537 
538 
539 
540 //
542 {
543  // save estimated parameters and made aux reports:
545  for (; it!=currentSession_->stationsByName().end(); ++it)
546  {
547  SgVlbiStationInfo *si = it.value();
549  {
551  for (int i=0; i<si->getClocksModelOrder(); i++)
552  {
553  double c = si->getEstClockModel(i) + si->pClocks(i)->getSolution();
554  si->setEstClockModel(i, c, si->pClocks(i)->getSigma());
555  };
557  {
558  double c = si->getEstWetZenithDelay() + si->pZenithDelay()->getSolution();
559  si->setEstWetZenithDelay(c, si->pZenithDelay()->getSigma());
560  };
561  };
562  };
563  //
564  //
566  {
567  QString str;
569  "::finisRun(): ==== baseline length aux. report ====");
570  //
571  //
572  BaselinesByName_it it_bl;
573  for (it_bl=currentSession_->baselinesByName().begin();
574  it_bl!=currentSession_->baselinesByName().end(); ++it_bl)
575  {
576  SgVlbiBaselineInfo *bi=it_bl.value();
577  QString blName;
578  blName = bi->getKey();
579  // baseline vector:
581  {
582  SgVlbiStationInfo *s1, *s2;
583  if (currentSession_->stationsByName().contains(blName.mid(0,8)))
584  s1 = currentSession_->stationsByName().value(blName.mid(0,8));
585  else
586  s1 = NULL;
587  if (currentSession_->stationsByName().contains(blName.mid(9,8)))
588  s2 = currentSession_->stationsByName().value(blName.mid(9,8));
589  else
590  s2 = NULL;
591  if (s1 && s2)
592  {
593  Sg3dVector b, b_apriori;
594  b_apriori = (s2->getR() - s1->getR());
596  {
597  SgMJD t(bi->pBx()->getTMean());
598  b_apriori = s2->getR_ea() - s1->getR_ea() +
599  (s2->getV_ea() - s1->getV_ea())*
601  };
602  b = b_apriori +
603  Sg3dVector(bi->pBx()->getSolution(), bi->pBy()->getSolution(), bi->pBz()->getSolution());
604  double l(b.module()), l_apriori(b_apriori.module());
605  str.sprintf("length a priori: %14.2f (mm) a posteriori: %14.2f (mm)"
606  " change in length: %10.2f (mm)",
607  l_apriori*1000.0, l*1000.0, (l-l_apriori)*1000.0);
609  "::finisRun(): Baseline " + blName + ": " + str +
610  " on " + bi->pBx()->getTMean().toString(SgMJD::F_Simple));
611  }
612  else
614  "::finisRun(): a station pointer is NULL");
615  };
616  };
617  //
618  //
620  "::finisRun(): ==== end of aux report ====");
621  };
622 
624 
625  // destroy calcable objects:
626  if (refraction_)
627  {
628  delete refraction_;
629  refraction_ = NULL;
630  };
631 
633  "::finisRun(): the task is finished");
634 };
635 
636 
637 
638 //
640 {
641  // lists of gloabal parameters:
642  if (globalParameters_)
643  {
646  "::updateParamaterLists(): the list of global parameters (" +
647  QString("_").setNum(globalParameters_->size()) + ") has been created");
648  };
649  // lists of arc parameters:
650  if (arcParameters_)
651  {
654  "::updateParamaterLists(): the list of arc parameters (" +
655  QString("_").setNum(arcParameters_->size()) + ") has been created");
656  };
657 
658  // lists of local parameters:
659  if (localParameters_)
660  {
663  "::updateParamaterLists(): the list of local parameters (" +
664  QString("_").setNum(localParameters_->size()) + ") has been created");
665  };
666 
667  // lists of PWL parameters:
668  if (pwlParameters_)
669  {
672  "::updateParamaterLists(): the list of `picewise linear' parameters (" +
673  QString("_").setNum(pwlParameters_->size()) + ") has been created");
674  };
675 
676  // lists of stochastic parameters:
678  {
681  "::updateParamaterLists(): the list of stochastic parameters (" +
682  QString("_").setNum(stochasticParameters_->size()) + ") has been created");
683  };
684 
689 };
690 /*=====================================================================================================*/
691 
692 
693 
694 
695 /*=======================================================================================================
696 *
697 * FRIENDS:
698 *
699 *======================================================================================================*/
700 //
701 
702 
703 
704 /*=====================================================================================================*/
705 //
706 // aux functions:
707 //
708 
709 
710 // i/o:
711 
712 
713 /*=====================================================================================================*/
714 //
715 // constants:
716 //
717 
718 
719 /*=====================================================================================================*/
SgLogger * logger
Definition: SgLogger.cpp:231
QString interval2Str(double days)
Definition: SgMJD.cpp:1371
#define RAD2MAS
radians to ms:
Definition: SgMathSupport.h:73
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:1008
static SgMJD currentMJD()
Definition: SgMJD.cpp:119
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:977
bool getUseExtAPrioriSitesPositions() const
VlbiDelayType getUseDelayType() const
Definition: SgTaskConfig.h:873
bool getDoWeightCorrection() const
Definition: SgTaskConfig.h:905
CableCalSource getFlybyCableCalSource() const
Definition: SgTaskConfig.h:401
WeightCorrectionMode getWcMode() const
Definition: SgTaskConfig.h:945
bool getUseExtAPrioriSourcesPositions() const
VlbiRateType getUseRateType() const
Definition: SgTaskConfig.h:881
void setDataType(VlbiDataType t)
Definition: SgTaskConfig.h:432
int getActiveBandIdx() const
Definition: SgTaskConfig.h:889
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)
void prepare2Run(SgTaskConfig::CableCalSource src)
@ 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)