General Purpose Geodetic Library
nuSolve.cpp
Go to the documentation of this file.
1 /*
2  *
3  * This file is a part of nuSolve. nuSolve is a part of CALC/SOLVE system
4  * and is designed to perform data analyis of a geodetic VLBI session.
5  * Copyright (C) 2010-2020 Sergei Bolotin.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #include "nuSolve.h"
23 
24 #include <argp.h>
25 #include <signal.h>
26 #include <unistd.h>
27 
28 #include <stdio.h>
29 #include <omp.h>
30 
31 
32 
33 #include <QtCore/QCoreApplication>
34 #include <QtCore/QFile>
35 #include <QtCore/QList>
36 #include <QtCore/QSettings>
37 
38 #if QT_VERSION >= 0x050000
39 # include <QtWidgets/QApplication>
40 # include <QtWidgets/QMessageBox>
41 #else
42 # include <QtGui/QApplication>
43 # include <QtGui/QMessageBox>
44 #endif
45 
46 #include <QtGui/QFont>
47 #include <QtGui/QIcon>
48 
49 
50 
51 
52 #include "NsMainWindow.h"
53 #include "NsStartupWizard.h"
54 #include "NsSessionHandler.h"
55 #include "NsScrSupport.h"
56 
57 
58 
62 
65 const int currentSettingsVersion(20170328);
66 
67 const QString origOrgName("NASA GSFC");
68 const QString origDmnName("gsfc.nasa.gov");
69 const QString origAppName("nuSolve");
70 
71 // HOPS's whims:
72 #ifdef OLD_HOPS
73 char progname[80];
74 int msglev=2;
75 #endif
76 
77 // for ARGP parser:
78 const char *argp_program_bug_address = "Sergei Bolotin <sergei.bolotin@nasa.gov>";
79 
80 struct nsOptions
81 {
82  QSettings *settings;
83  QString altSetupName;
84  QString altSetupAppName;
86 
94 
98  QString scriptFileName;
99  QString databaseName;
101 
102 };
103 
104 //
105 // a parser for ARGP:
106 static int parse_opt(int key, char *arg, struct argp_state *state)
107 {
108  QString str("");
109  struct nsOptions *options=(struct nsOptions*)state->input;
110  //
111  switch (key)
112  {
113  case 'a':
114  options->altSetupName = QString(arg);
115  if (!options->altSetupName.contains("/..")) // are there any other elements of path that we should avoid?
116  {
117  options->altSetupAppName = origAppName + "-" + options->altSetupName;
118  options->have2UseAltSetup = true;
119  }
120  else
121  {
123  ": parse_opt(): it is dangerous to use a string \"" + options->altSetupName +
124  "\" as an alternative config name");
126  ": parse_opt(): you can overwrite another file (un)intentionally");
127  delete options->settings;
128  exit(22);
129  };
130  break;
131  case 'c':
132  options->isForcedCatalogMode = true;
133  break;
134  case 'd':
135  options->useDefaultSetup = true;
137  ": parse_opt(): using default setup");
138  break;
139  case 'f':
140  if (strcmp(arg, "dbh") == 0)
141  options->ofFmt = SgVlbiSessionInfo::OT_DBH;
142  else if (strcmp(arg, "vgos") == 0)
143  options->ofFmt = SgVlbiSessionInfo::OT_VDB;
144  else
145  {
147  ": parse_opt(): the data storage format \"" + arg + "\" is unrecognized");
148  delete options->settings;
149  exit(1);
150  };
151  break;
152  case 'i':
153  options->isNeedSignalHandler = false;
155  ": parse_opt(): will not interrupt signals");
156  break;
157  case 'l':
158  options->have2LoadImmatureSession = true;
159  break;
160  case 'm':
161  options->have2ForceAutomaticProcessing = true;
162  break;
163  case 'n':
164  options->have2SkipAutomaticProcessing = true;
165  break;
166  case 'q':
167  break;
168  case 's':
169  options->isForcedStandaloneMode = true;
170  break;
171  case 't':
172  options->scriptFileName = QString(arg);
173  break;
174  case 'W':
175  options->shouldInvokeSystemWideWizard = true;
176  break;
177  case 'w':
178  options->have2ForceWizard = true;
179  break;
180 
181  //
182  case 'V':
183  std::cout << qPrintable(nuSolveVersion.name(SgVersion::NF_Petrov)) << "\n";
184  exit(0);
185  break;
186  //
187  case ARGP_KEY_ARG:
188  if (options->scriptFileName.size())
189  options->args << QString(arg);
190  else
191  options->databaseName = QString(arg);
192  break;
193  case ARGP_KEY_END:
194  //if (state->arg_num < 1)
195  // argp_usage (state);
196  break;
197  default:
198  return ARGP_ERR_UNKNOWN;
199  break;
200  };
201  return 0;
202 };
203 //
204 //
205 
206 
207 
208 
209 
210 
211 
212 
213 void loadSettings(QSettings&);
214 void loadSettingsOldStyle(QSettings&);
215 void saveSettings(QSettings&, bool shouldInvokeSystemWideWizard);
216 void checkSettings(QSettings&);
217 void rmOldStyleSettings(QSettings&);
219 
220 
221 // saved actions for signals:
222 // RT errors:
223 struct sigaction saveSIGFPE;
224 struct sigaction saveSIGILL;
225 struct sigaction saveSIGSEGV;
226 struct sigaction saveSIGABRT;
227 struct sigaction saveSIGBUS;
228 
229 // termination signals:
230 struct sigaction saveSIGINT;
231 struct sigaction saveSIGHUP;
232 struct sigaction saveSIGTERM;
233 
234 // default:
235 struct sigaction saveSIGDFL;
236 
237 
238 
239 //
241 {
242  QString str("Signal handler: catched the \"");
243  str += strsignal(signum);
244  str += "\" signal";
245  std::cout << qPrintable(str) << "; saving the Log...\n";
247  logger->clearSpool();
248 
249  QMessageBox::critical(0, nuSolveVersion.name() + ": signal handler",
250  QString("An internal error occurred.\n\n") + str +
251  ".\n\nThe application will now exit.");
252 
253  // special handling:
254  switch(signum)
255  {
256  //run-time errors:
257  case SIGFPE:
258  sigaction(signum, &saveSIGFPE, NULL);
259  break;
260  case SIGILL:
261  sigaction(signum, &saveSIGILL, NULL);
262  break;
263  case SIGSEGV:
264  sigaction(signum, &saveSIGSEGV,NULL);
265  break;
266  case SIGABRT:
267  sigaction(signum, &saveSIGABRT,NULL);
268  break;
269  case SIGBUS:
270  sigaction(signum, &saveSIGBUS, NULL);
271  break;
272  //interups:
273  case SIGINT:
274  sigaction(signum, &saveSIGINT, NULL);
275  break;
276  case SIGHUP:
277  sigaction(signum, &saveSIGHUP, NULL);
278  break;
279  case SIGTERM:
280  sigaction(signum, &saveSIGTERM,NULL);
281  break;
282  default:
283  std::cout << "got an unexpected signal, setting handler to default.\n";
284  sigaction(signum, &saveSIGDFL, NULL);
285  break;
286  };
287  std::cout << "Signal handler: processing default handler..\n";
288  raise(signum);
289 };
290 
291 
292 
293 /***===================================================================================================*/
299 int main(int argc, char** argv)
300 {
301  struct sigaction act;
302  struct nsOptions options;
303  int rc;
304  bool isFirstRun;
305 #ifdef SWCONFIG
306  const QString path2SystemWideConfig(SWCONFIG "/xdg");
307 #else
308  const QString path2SystemWideConfig("");
309 #endif
310 
311  options.altSetupAppName = QString("");
312  options.altSetupName = QString("");
313  options.have2UseAltSetup = false;
314  options.isForcedCatalogMode = false;
315  options.isForcedStandaloneMode=false;
316  options.useDefaultSetup = false;
318  options.have2SkipAutomaticProcessing = false;
319  options.have2ForceAutomaticProcessing = false;
320  options.isNeedSignalHandler = true;
321  options.have2ForceWizard = false;
322  options.shouldInvokeSystemWideWizard = false;
323  options.have2LoadImmatureSession = false;
324  options.scriptFileName = QString("");
325  options.databaseName = QString("");
326  options.args.clear();
327 
328  //
329  saveSIGDFL.sa_handler=SIG_DFL;
330  sigemptyset(&saveSIGDFL.sa_mask);
331  saveSIGDFL.sa_flags = 0;
332 
333  // init:
334  QCoreApplication::setOrganizationName(origOrgName);
335  QCoreApplication::setOrganizationDomain(origDmnName);
336  QCoreApplication::setApplicationName(origAppName);
337  //
338  // set up path to the system wide settings:
339  QSettings::setPath(QSettings::NativeFormat, QSettings::SystemScope, path2SystemWideConfig);
340  //
341  // HOPS's whims:
342 #ifdef OLD_HOPS
343  strcpy(progname, qPrintable("HOPS (on behalf of " + nuSolveVersion.getSoftwareName() + ")"));
344 #endif
345 //
346 // "The rest of arguments are treating as arguments of a script if \"-t\" option is present,\n"
347 // "otherwice turns the software into a command line mode and use the argument as a name\n"
348 // "of a database to process. The command line mode supposed to be applied to the INT type\n"
349 // "of sessions only.\n";
350  //
351  QString command("");
352  for (int i=0; i<argc; i++)
353  command += QString(argv[i]) + " ";
354  command.chop(1);
355  //
356  setup.setUpBinaryIdentities(QString(argv[0]));
357  //
358  options.settings = new QSettings;
359 
360  //
361  // ARGP setup:
362  //
363  struct argp_option argp_options[] =
364  {
365  {0, 0, 0, 0, "Configuration control:", 10},
366  {"alt", 'a', "STRING", 0,
367  "Use an alternative configuration STRING"},
368  {"default-setup", 'd', 0, 0,
369  "Use default setup (WARNING: existing configuration will be overwriten)"},
370 
371  {0, 0, 0, 0, "Script mode:", 11},
372  {"script", 't', "STRING", 0,
373  "Execute a script STRING. "},
374 
375  {0, 0, 0, 0, "Automatic processing (GUI mode):", 12},
376  {"force-automatic", 'm', 0, 0,
377  "Force executing of automatic processing"},
378  {"no-automatic", 'n', 0, 0,
379  "Do not run automatic processing even if a session is eligible for it"},
380 
381  {0, 0, 0, 0, "Input control:", 13},
382  {"catalog", 'c', 0, 0,
383  "Force run in the catalog aware mode (opposite to '-s')"},
384  {"format", 'f', "STRING", 0,
385  "Set the data storage format of the provided session to STRING (either \"dbh\" or \"vgos\")"},
386  {"read-all", 'l', 0, 0,
387  "Read all databases, even that that lack of essential information"},
388  {"standalone", 's', 0, 0,
389  "Force run in the standalone mode (opposite to '-c')"},
390 
391  {0, 0, 0, 0, "Invocation of startup wizard:", 14},
392  {"sys-wide-wizard", 'W', 0, 0,
393  "Run startup wizard for the system-wide settings"},
394  {"wizard", 'w', 0, 0,
395  "Force call of the startup wizard"},
396 
397  {0, 0, 0, 0, "Execution control:", 15},
398  {"no-interruptions", 'i', 0, 0,
399  "Do not catch interruptions"},
400 
401  {0, 0, 0, 0, "Operation modes:", -1},
402  {"version", 'V', 0, 0,
403  "Print program version"},
404  //
405  {0}
406  };
407 
408  QString salute("A program to make preliminary analysis of a geodetic "
409  "VLBI session.\v");
410 
411  salute += "The current version is:\n\t" + nuSolveVersion.name() + " released on " +
413  "\n\t" + libraryVersion.name() + " released on " +
415  salute +=
416  QString("\n\nThe program nuSolve is a part of nuSolve package. For datails see "
417  "\"nuSolve User Guide\", a part of nuSolve distribution. You can get the latest version of "
418  "nuSolve at\n\t\thttps://sourceforge.net/projects/nusolve");
419 
420  struct argp argp={argp_options, parse_opt,
421  "\n\nDATABASE\nSCRIPT [SCRIPT OPTIONS]", salute.toLatin1()};
422 
423  argp_parse (&argp, argc, argv, 0, 0, &options);
424  //
425  //
426  //
427  //
428  if (options.isNeedSignalHandler && !options.scriptFileName.size()) // do not catch signals in a script mode
429  {
430  act.sa_handler = handlerSIGs;
431  sigemptyset(&act.sa_mask);
432  act.sa_flags = 0;
433  sigaction(SIGFPE, &act, &saveSIGFPE);
434  sigaction(SIGILL, &act, &saveSIGILL);
435  sigaction(SIGSEGV,&act, &saveSIGSEGV);
436  sigaction(SIGABRT,&act, &saveSIGABRT);
437  sigaction(SIGBUS, &act, &saveSIGBUS);
438  sigaction(SIGINT, &act, &saveSIGINT);
439  sigaction(SIGHUP, &act, &saveSIGHUP);
440  sigaction(SIGTERM,&act, &saveSIGTERM);
441  };
442  //
443  //
444  isFirstRun = options.settings->allKeys().size()>0 ? false : true;
445  //
446  // load user saved values:
447  if (!options.useDefaultSetup)
448  {
449  // first, use "standard" set up:
450  checkSettings(*options.settings);
451  if (options.have2UseAltSetup)
452  {
454  ": using alternative config name \"" + options.altSetupName + "\"");
455  QSettings *altSettings = new QSettings(origOrgName, options.altSetupAppName);
456  loadSettings(*altSettings);
457  delete options.settings;
458  options.settings = altSettings;
459  config.setName(options.altSetupName);
460  }
461  else
462  config.setName("");
463  };
464  //
465  // check for the special needs:
466  // "User bad. Replace and press Enter":
467  if (options.isForcedCatalogMode && options.isForcedStandaloneMode)
468  {
469  options.isForcedCatalogMode = options.isForcedStandaloneMode = false;
471  ": combination of -c and -s options has no effect");
472  };
474  {
477  ": combination of -m and -n options has no effect");
478  };
479  //
480  //
482  options.isForcedCatalogMode = false;
483  else if (options.isForcedCatalogMode)
484  {
487  ": forced run in the catalog aware mode");
488  };
490  options.isForcedStandaloneMode = false;
491  else if (options.isForcedStandaloneMode)
492  {
495  ": forced run in the standalone mode");
496  };
497  if (options.have2SkipAutomaticProcessing)
498  {
501  ": the automatic process mode is supressed");
502  };
503  if (options.have2ForceAutomaticProcessing)
504  {
507  ": forced call the automatic processing");
508  };
509  //
510  if (options.have2LoadImmatureSession)
512  //
513  //
514  //
515  // adjust the logger:
516  if (options.settings->contains("Version/LibraryName"))
517  {
519  options.settings->value("Logger/FacilityERR", logger->getLogFacility(SgLogger::ERR)).toUInt());
521  options.settings->value("Logger/FacilityWRN", logger->getLogFacility(SgLogger::WRN)).toUInt());
523  options.settings->value("Logger/FacilityINF", logger->getLogFacility(SgLogger::INF)).toUInt());
525  options.settings->value("Logger/FacilityDBG", logger->getLogFacility(SgLogger::DBG)).toUInt());
526  };
527  logger->setFileName(options.settings->value("Logger/FileName", "nuSolve.log").toString());
529  logger->setCapacity(options.settings->value("Logger/Capacity", logger->getCapacity()).toInt());
531  options.settings->value("Logger/IsStoreInFile", logger->getIsStoreInFile()).toBool());
533  options.settings->value("Logger/IsNeedTimeMark", logger->getIsNeedTimeMark()).toBool());
535  options.settings->value("Logger/UseFullDate", logger->getUseFullDateFormat()).toBool());
536  //
537  //
538  //
539  // exec the application:
540  //
541  rc = 0;
542  if (options.scriptFileName.size())
543  {
544  bool hasDisplay=false;
545  const char* envDisplay=NULL;
546  if ((envDisplay=getenv("DISPLAY")) && strlen(envDisplay))
547  hasDisplay = true;
548 
549  if (hasDisplay)
550  {
551  QApplication app(argc, argv);
552  rc = executeScript(options.scriptFileName, options.args, hasDisplay);
553  }
554  else
555  {
556  QCoreApplication app(argc, argv);
557  rc = executeScript(options.scriptFileName, options.args, hasDisplay);
558  };
559 
560  logger->clearSpool();
561  logger->setIsStoreInFile(false);
562  // and exit:
563  delete options.settings;
564  return rc;
565  }
566  else if (options.databaseName.size() && !options.have2ForceWizard)
567  {
568  if (isFirstRun)
569  {
571  ": cannot proccess the database \"" + options.databaseName + "\": no config found");
572  return 1;
573  };
574  //
575  //
576  // check the input argument:
577  //
578  QString sessionName("");
579  if (options.ofFmt==SgVlbiSessionInfo::OT_DBH)
580  {
581  // standalone mode, check for existing file:
582  if ((options.isForcedStandaloneMode || !setup.getHave2UpdateCatalog()) && !QFile::exists(options.databaseName))
583  {
584  QString sTmp(setup.path2(setup.getPath2DbhFiles()) + "/" + options.databaseName);
585  if (QFile::exists(sTmp))
586  options.databaseName = sTmp;
587  else
588  {
590  ": cannot proccess the database \"" + options.databaseName + "\": file does not exist");
591  return 1;
592  };
593  };
594  //
595  // extract the session name:
596  QRegExp reDbName(".*([0-9]{2}[A-Z]{3}[0-9]{2}[A-Z0-9]{1,2}).*");
597  QRegExp reDbVerName(".*([0-9]{2}[A-Z]{3}[0-9]{2}[A-Z0-9]{1,2})_V([0-9]{3}).*");
598  QString sVer("");
599  if (-1 < reDbVerName.indexIn(options.databaseName))
600  {
601  sessionName = reDbVerName.cap(1);
602  sVer = reDbVerName.cap(2);
603  }
604  else if (-1 < reDbName.indexIn(options.databaseName))
605  sessionName = reDbName.cap(1);
606  else
607  {
609  ": cannot proccess the database \"" + options.databaseName + "\": does not look like a "
610  "database name");
611  return 1;
612  };
613  }
614  else if (options.ofFmt==SgVlbiSessionInfo::OT_VDB)
615  {
616  // determine a name of a wrapper file:
617  QString path2wrapperFile("");
618  QString wrapperFileName("");
619  int version(0);
620  QRegExp reDatabaseName("^[0-9]{2}[A-Z]{3}[0-9]{2}[A-Z0-9]{1,2}$");
621  QRegExp reDatabaseVersionName("^[0-9]{2}[A-Z]{3}[0-9]{2}[A-Z0-9]{1,2}_V[0-9]{3}$");
622  bool isOk;
623  // ok, this is a wrapper file name:
624  if (options.databaseName.right(4) == ".wrp")
625  {
628  path2wrapperFile, wrapperFileName, sessionName, version);
629  }
630  else if (reDatabaseName.exactMatch(options.databaseName) || reDatabaseVersionName.exactMatch(options.databaseName))
631  {
634  path2wrapperFile, wrapperFileName, sessionName, version);
635  }
636  else
637  {
639  ": cannot proccess the database \"" + options.databaseName + "\": file does not exist");
640  return 1;
641  };
642  if (isOk)
643  options.databaseName = path2wrapperFile + "/" + wrapperFileName;
644  else
645  {
647  ": cannot proccess the database \"" + options.databaseName + "\": file does not exist");
648  return 1;
649  };
650  };
651  //
652  //
653  SgMJD startEpoch(SgMJD::currentMJD());
654  QApplication app(argc, argv, false);
655  SgLogger *alDriver;
656  //
657 /*
658  // adjust the logger:
659  if (settings->contains("Version/LibraryName"))
660  {
661  logger->setLogFacility(SgLogger::ERR,
662  settings->value("Logger/FacilityERR", logger->getLogFacility(SgLogger::ERR)).toUInt());
663  logger->setLogFacility(SgLogger::WRN,
664  settings->value("Logger/FacilityWRN", logger->getLogFacility(SgLogger::WRN)).toUInt());
665  logger->setLogFacility(SgLogger::INF,
666  settings->value("Logger/FacilityINF", logger->getLogFacility(SgLogger::INF)).toUInt());
667  logger->setLogFacility(SgLogger::DBG,
668  settings->value("Logger/FacilityDBG", logger->getLogFacility(SgLogger::DBG)).toUInt());
669  };
670  logger->setFileName(settings->value("Logger/FileName", "nuSolve.log").toString());
671  logger->setDirName(setup.getPath2Home());
672  logger->setCapacity(settings->value("Logger/Capacity", logger->getCapacity()).toInt());
673  logger->setIsStoreInFile(
674  settings->value("Logger/IsStoreInFile", logger->getIsStoreInFile()).toBool());
675  logger->setIsNeedTimeMark(
676  settings->value("Logger/IsNeedTimeMark", logger->getIsNeedTimeMark()).toBool());
677  //
678 */
679  //
680  //
681  alDriver = new SgLogger(800, setup.getHave2SavePerSessionLog(), "drv-unnamed.log");
683  alDriver->setIsNeedTimeMark(true);
684  alDriver->setIsMute(true);
685  alDriver->setLogFacility(SgLogger::ERR, 0xFFFFFFFF);
686  alDriver->setLogFacility(SgLogger::WRN, 0xFFFFFFFF);
687  alDriver->setLogFacility(SgLogger::INF, 0xFFFFFFFF);
688  alDriver->setLogFacility(SgLogger::DBG, 0);
690  logger->attachSupplementLog("Driver", alDriver);
691  alDriver->setFileName(sessionName + ".log");
692  alDriver->rmLogFile();
693 
695  ": starting command line version");
696 
698  ": Library ID: " + libraryVersion.name());
700  ": Driver ID: " + nuSolveVersion.name());
701 
703  ": Host ID: " + setup.identities().getMachineNodeName() +
704  " (Hw: " + setup.identities().getMachineMachineName() +
705  "; Sw: " + setup.identities().getMachineRelease() +
706  " version of " + setup.identities().getMachineSysName() + ")");
707 
709  ": User ID: " + setup.identities().getUserName() +
712  ": User command: \"" + command + "\"");
714  ": Input data : " + options.databaseName);
715 
716  rc = processSession(options.databaseName, options.ofFmt);
717 
718  if (rc==0)
719  {
720  // report elapsed time:
721  SgMJD finisEpoch=SgMJD::currentMJD();
723  ": the elapsed time to process the session " + sessionName + " is: " +
724  interval2Str(finisEpoch - startEpoch) + " (" +
725  QString("").sprintf("%.2f", (finisEpoch - startEpoch)*86400.0) + " sec)");
726  }
727  else
729  ": processing of the database " + options.databaseName + " has failed");
730 
731  alDriver->clearSpool();
732  logger->detachSupplementLog("Driver");
733  delete alDriver;
734  //
735  logger->clearSpool();
736  logger->setIsStoreInFile(false);
737  //
738  //
739  }
740  else // =================== GUI part starts here: ===================
741  {
742  //
743  //
744  QApplication app(argc, argv);
745  QIcon appIcon(QPixmap(":/images/icon_2.5.png"));
746  app.setWindowIcon(appIcon);
747  //
748  if (options.settings->contains("Setup/GuiStyle"))
749  {
750  QString appStyle(options.settings->value("Setup/GuiStyle").toString());
751  if (!appStyle.contains("GTK")) // it crashes with "GTK+" style
752  {
753  QApplication::setStyle(appStyle);
754  QFont font("Sans Serif", 10);
755  if (options.settings->contains("Setup/GuiFont"))
756  font = options.settings->value("Setup/GuiFont").value<QFont>();
757  QApplication::setFont(font);
758  };
759  };
760  //
761  //--
762  if (options.have2ForceWizard || options.shouldInvokeSystemWideWizard ||
763  options.settings->value("Version/StartUpWizard", 0).toInt() < NsStartupWizard::serialNumber())
764  {
765  if (options.shouldInvokeSystemWideWizard)
766  {
767  if (!options.have2UseAltSetup)
768  {
769  QSettings *swSettings =
770  new QSettings(QSettings::SystemScope, origOrgName, origAppName);
771  if (!swSettings->isWritable())
772  {
774  ": cannot write system wide config");
775  delete swSettings;
776  return 1;
777  };
778  delete options.settings;
779  options.settings = swSettings;
780  }
781  else
783  ": using an alternative config name, system wide config edit request ignored");
784  };
785  //
786  NsStartupWizard startup(isFirstRun, options.have2ForceWizard, options.shouldInvokeSystemWideWizard);
787  if ((rc=startup.exec())==0)
788  {
789  delete options.settings;
790  logger->clearSpool();
791  return rc;
792  };
793  //
794  // save if user pressed "Finish":
795  options.settings->setValue("Version/StartUpWizard", startup.serialNumber());
797  };
798  //
799  mainWindow = new NsMainWindow;
800  mainWindow->show();
801  rc = app.exec();
802  delete mainWindow;
803  };
804  //
805  //
806  //
807  //
808  // roll back to previous values:
809  if (options.isForcedCatalogMode)
811  if (options.isForcedStandaloneMode)
813 
814  // save user values:
816 
817  delete options.settings;
818  return rc;
819 };
820 
821 
822 
823 //
824 void checkSettings(QSettings& settings)
825 {
826  if (settings.contains("Version/LibraryName"))
827  {
828  QString savedSoftName;
829  QString savedCodeName;
830  int savedMajorNum, savedMinorNum, savedTeenyNum, savedSettingsVersion;
831 
832  savedSoftName = settings.value("Version/LibraryName", "N/A").toString();
833  savedCodeName = settings.value("Version/LibraryComments", "N/A").toString();
834  savedMajorNum = settings.value("Version/LibraryMajor", 0).toInt();
835  savedMinorNum = settings.value("Version/LibraryMinor", 0).toInt();
836  savedTeenyNum = settings.value("Version/LibraryTeeny", 0).toInt();
837  storedLibraryVersion.setSoftwareName(savedSoftName);
838  storedLibraryVersion.setMajorNumber(savedMajorNum);
839  storedLibraryVersion.setMinorNumber(savedMinorNum);
840  storedLibraryVersion.setTeenyNumber(savedTeenyNum);
841  storedLibraryVersion.setCodeName(savedCodeName);
842 
843  savedSoftName = settings.value("Version/nuSolveName", "N/A").toString();
844  savedCodeName = settings.value("Version/nuSolveComments", "N/A").toString();
845  savedMajorNum = settings.value("Version/nuSolveMajor", 0).toInt();
846  savedMinorNum = settings.value("Version/nuSolveMinor", 0).toInt();
847  savedTeenyNum = settings.value("Version/nuSolveTeeny", 0).toInt();
848  storedNuSolveVersion.setSoftwareName(savedSoftName);
849  storedNuSolveVersion.setMajorNumber(savedMajorNum);
850  storedNuSolveVersion.setMinorNumber(savedMinorNum);
851  storedNuSolveVersion.setTeenyNumber(savedTeenyNum);
852  storedNuSolveVersion.setCodeName(savedCodeName);
853 
856  ": you are using an obsolete version, " + libraryVersion.name() + ", of the Library "
857  "than it was before: " + storedLibraryVersion.name());
860  ": you are using an obsolete version, " + nuSolveVersion.name() + ", of the software "
861  "than it was before: " + storedNuSolveVersion.name());
862 
863  savedSettingsVersion = settings.value("Version/nuSolveSettings", 0).toInt();
864 
865  loadSettings(settings);
866  if (savedSettingsVersion < currentSettingsVersion) // do something:
867  {
868  // correct PWL model:
869  if (savedSettingsVersion == 0)
870  {
871  int iMode;
872  iMode = settings.value("Config/EstimatorPwlMode", config.getPwlMode()).toInt();
873  switch (iMode)
874  {
875  case 0:
877  break;
878  case 1:
880  break;
881  default:
883  ": unrecognized PWL mode: " + QString("").setNum(iMode));
884  };
886  ": the PWL mode has been adjusted");
887  };
888  // something else:
889 
890  };
891 
892  }
893  else
894  {
895  loadSettingsOldStyle(settings);
896  rmOldStyleSettings(settings);
897  };
898 };
899 
900 
901 
902 //
903 void loadSettings(QSettings& settings)
904 {
905  // setup.identities:
907  settings.value("Identities/UserName",
908  setup.identities().getUserName()).toString());
910  settings.value("Identities/UserEmailAddress",
911  setup.identities().getUserEmailAddress()).toString());
913  settings.value("Identities/UserDefaultInitials",
914  setup.identities().getUserDefaultInitials()).toString());
916  settings.value("Identities/AcFullName",
917  setup.identities().getAcFullName()).toString());
919  settings.value("Identities/AcAbbreviatedName",
920  setup.identities().getAcAbbrevName()).toString());
922  settings.value("Identities/AcShortAbbreviatedName",
923  setup.identities().getAcAbbName()).toString());
924 
925  // setup:
926  // Pathes:
928  settings.value("Setup/Path2Home",
929  setup.getPath2Home()).toString());
931  settings.value("Setup/Path2CatalogInterfaceExec",
932  setup.getPath2CatNuInterfaceExec()).toString());
934  settings.value("Setup/Path2DbhFiles",
935  setup.getPath2DbhFiles()).toString());
937  settings.value("Setup/Path2OpenDbFiles",
938  setup.getPath2VgosDbFiles()).toString());
940  settings.value("Setup/Path2VgosDaFiles",
941  setup.getPath2VgosDaFiles()).toString());
943  settings.value("Setup/Path2APrioriFiles",
944  setup.getPath2APrioriFiles()).toString());
946  settings.value("Setup/Path2MasterFiles",
947  setup.getPath2MasterFiles()).toString());
949  settings.value("Setup/Path2SpoolfileOutput",
950  setup.getPath2SpoolFileOutput()).toString());
952  settings.value("Setup/Path2NotUsedObsFileOutput",
953  setup.getPath2NotUsedObsFileOutput()).toString());
955  settings.value("Setup/Path2ReportsOutput",
956  setup.getPath2ReportOutput()).toString());
958  settings.value("Setup/Path2NgsFilesOutput",
959  setup.getPath2NgsOutput()).toString());
961  settings.value("Setup/Path2PlotterFilesOutput",
962  setup.getPath2PlotterOutput()).toString());
964  settings.value("Setup/Path2IntermediateResults",
965  setup.getPath2IntermediateResults()).toString());
967  settings.value("Setup/AutoSavingMode",
968  setup.getAutoSavingMode()).toInt()));
970  settings.value("Setup/Have2UpdateCatalog",
971  setup.getHave2UpdateCatalog()).toBool());
973  settings.value("Setup/Have2AlterSessionCode",
974  setup.getHave2MaskSessionCode()).toBool());
976  settings.value("Setup/Have2KeepSpoolfileReports",
977  setup.getHave2KeepSpoolFileReports()).toBool());
979  settings.value("Setup/Have2WarnClosingWindow",
980  setup.getHave2WarnCloseWindow()).toBool());
982  settings.value("Setup/IsShortScreen",
983  setup.getIsShortScreen()).toBool());
985  settings.value("Setup/MainWinWidth",
986  setup.getMainWinWidth()).toInt());
988  settings.value("Setup/MainWinHeight",
989  setup.getMainWinHeight()).toInt());
991  settings.value("Setup/MainWinPosX",
992  setup.getMainWinPosX()).toInt());
994  settings.value("Setup/MainWinPosY",
995  setup.getMainWinPosY()).toInt());
996 
998  settings.value("Setup/SeWinWidth",
999  setup.getSeWinWidth()).toInt());
1001  settings.value("Setup/SeWinHeight",
1002  setup.getSeWinHeight()).toInt());
1004  settings.value("Setup/Have2AutoloadAllBands",
1005  setup.getHave2AutoloadAllBands()).toBool());
1007  settings.value("Setup/IsBandPlotPerSrcView",
1008  setup.getIsBandPlotPerSrcView()).toBool());
1010  settings.value("Setup/PlotterOutputFormat",
1011  setup.getPlotterOutputFormat()).toInt()));
1013  settings.value("Setup/LnfsFileName",
1014  setup.getLnfsFileName()).toString());
1016  settings.value("Setup/LnfsOriginType",
1017  setup.getLnfsOriginType()).toInt()));
1019  settings.value("Setup/LnfsIsThroughCatalog",
1020  setup.getLnfsIsThroughCatalog()).toBool());
1022  settings.value("Setup/Path2AuxLogs",
1023  setup.getPath2AuxLogs()).toString());
1025  settings.value("Setup/Have2SavePerSessionLog",
1026  setup.getHave2SavePerSessionLog()).toBool());
1028  settings.value("Setup/ExecExternalCommand",
1029  setup.getExecExternalCommand()).toBool());
1031  settings.value("Setup/ExternalCommand",
1032  setup.getExternalCommand()).toString());
1033 
1034 
1035  // config:
1037  settings.value("Config/QualityCodeThreshold",
1038  config.getQualityCodeThreshold()).toInt());
1040  settings.value("Config/GoodQualityCodeAtStartup",
1041  config.getGoodQualityCodeAtStartup()).toInt());
1043  settings.value("Config/UseGoodQualityCodeAtStartup",
1046  settings.value("Config/DoWeightCorrection",
1047  config.getDoWeightCorrection()).toBool());
1049  settings.value("Config/UseQualityCodeG",
1050  config.getUseQualityCodeG()).toBool());
1052  settings.value("Config/UseQualityCodeH",
1053  config.getUseQualityCodeH()).toBool());
1055  settings.value("Config/IsSolveCompatible",
1056  config.getIsSolveCompatible()).toBool());
1058  settings.value("Config/UseDynamicClockBreaks",
1059  config.getUseDynamicClockBreaks()).toBool());
1061  settings.value("Config/UseSolveObsSuppresionFlags",
1064  settings.value("Config/UseExternalWeights",
1065  config.getUseExternalWeights()).toBool());
1067  settings.value("Config/WeightCorrectionMode",
1068  config.getWcMode()).toInt()));
1070  settings.value("Config/ExternalWeightsFileName",
1071  config.getExtWeightsFileName()).toString());
1073  settings.value("Config/InitAuxSigma4Delay",
1074  config.getInitAuxSigma4Delay()).toDouble());
1076  settings.value("Config/InitAuxSigma4Rate",
1077  config.getInitAuxSigma4Rate()).toDouble());
1079  settings.value("Config/MinAuxSigma4Delay",
1080  config.getMinAuxSigma4Delay()).toDouble());
1082  settings.value("Config/MinAuxSigma4Rate",
1083  config.getMinAuxSigma4Rate()).toDouble());
1085  settings.value("Config/EstimatorPwlMode",
1086  config.getPwlMode()).toInt()));
1088  settings.value("Config/OutlierProcessingMode",
1089  config.getOpMode()).toInt()));
1091  settings.value("Config/OutlierProcessingAction",
1092  config.getOpAction()).toInt()));
1094  settings.value("Config/OutlierProcessingThreshold",
1095  config.getOpThreshold()).toDouble());
1097  settings.value("Config/OutlierProcessingIterationsLimit",
1098  config.getOpIterationsLimit()).toInt());
1100  settings.value("Config/OutlierProcessingSuppressWC",
1103  settings.value("Config/OutlierProcessingIsSolveCompatible",
1104  config.getOpIsSolveCompatible()).toBool());
1106  settings.value("Config/OutlierProcessingHave2NormalizeResiduals",
1107  config.getOpHave2NormalizeResiduals()).toBool());
1109  settings.value("Config/DoIono4Sbd",
1110  config.getDoIonoCorrection4SBD()).toBool());
1112  settings.value("Config/DoClockBreakDetectionMode_1",
1115  settings.value("Config/DoOutlierEliminationMode_1",
1118  settings.value("Config/IsActiveBandFollowsTab",
1119  config.getIsActiveBandFollowsTab()).toBool());
1121  settings.value("Config/IsObservableFollowsPlot",
1122  config.getIsObservableFollowsPlot()).toBool());
1124  settings.value("Config/UseExternalAPrioriSitePostions",
1127  settings.value("Config/UseExternalAPrioriSiteVelocities",
1130  settings.value("Config/UseExternalAPrioriSourcePostions",
1133  settings.value("Config/UseExternalAPrioriSourceSsm",
1134  config.getUseExtAPrioriSourceSsm()).toBool());
1136  settings.value("Config/UseExternalAPrioriEop",
1137  config.getUseExtAPrioriErp()).toBool());
1139  settings.value("Config/UseExternalAPrioriAxisOffsets",
1140  config.getUseExtAPrioriAxisOffsets()).toBool());
1142  settings.value("Config/UseExternalAPrioriHighFrequencyErp",
1143  config.getUseExtAPrioriHiFyErp()).toBool());
1145  settings.value("Config/UseExternalAPrioriMeanGradients",
1148  settings.value("Config/ExternalAPrioriSitePostionsFileName",
1151  settings.value("Config/ExternalAPrioriSiteVelocitiesFileName",
1154  settings.value("Config/ExternalAPrioriSourcePostionsFileName",
1157  settings.value("Config/ExternalAPrioriSourceSsmFileName",
1158  config.getExtAPrioriSourceSsmFileName()).toString());
1160  settings.value("Config/ExternalAPrioriEopFileName",
1161  config.getExtAPrioriErpFileName()).toString());
1163  settings.value("Config/ExternalAPrioriAxisOffsetFileName",
1166  settings.value("Config/ExternalAPrioriHighFrequencyErpFileName",
1167  config.getExtAPrioriHiFyErpFileName()).toString());
1169  settings.value("Config/ExternalAPrioriMeanGradientsFileName",
1172  settings.value("Config/EccentricitiesFileName",
1173  config.getEccentricitiesFileName()).toString());
1175  settings.value("Config/Have2ApplySourceSsm",
1176  config.getHave2ApplySourceSsm()).toBool());
1177 
1179  settings.value("Config/FlybyTropZenithMap",
1180  config.getFlybyTropZenithMap()).toInt()));
1181 
1183  settings.value("Config/Have2ApplyOceanTidesContribution",
1186  settings.value("Config/Have2ApplyPoleTideContribution",
1187  config.getHave2ApplyPoleTideContrib()).toBool());
1189  settings.value("Config/Have2ApplyEarthTideContribution",
1192  settings.value("Config/Have2ApplyWobblePxContribution",
1193  config.getHave2ApplyPxContrib()).toBool());
1195  settings.value("Config/Have2ApplyWobblePyContribution",
1196  config.getHave2ApplyPyContrib()).toBool());
1198  settings.value("Config/Have2ApplyAxisOffsetContribution",
1201  settings.value("Config/Have2ApplyNutationHighFrequencyContribution",
1204  settings.value("Config/Have2ApplyPolarMotionHighFrequencyContribution",
1207  settings.value("Config/Have2ApplyUT1HighFrequencyContribution",
1210  settings.value("Config/Have2ApplyFeedCorrectionContribution",
1211  config.getHave2ApplyFeedCorrContrib()).toBool());
1213  settings.value("Config/Have2ApplyTiltRemvrContribution",
1216  settings.value("Config/Have2ApplyNielHydrostaticTroposphereContribution",
1217  config.getHave2ApplyNdryContrib()).toBool());
1219  settings.value("Config/Have2ApplyNielWetTroposphereContribution",
1220  config.getHave2ApplyNwetContrib()).toBool());
1222  settings.value("Config/Have2ApplyUnphaseCalibrationContribution",
1225  settings.value("Config/Have2ApplyOceanPoleTideContribution",
1228  settings.value("Config/Have2ApplyGpsIonoContrib",
1229  config.getHave2ApplyGpsIonoContrib()).toBool());
1231  settings.value("Config/Have2ApplyPolarMotionLibrationContribution",
1234  settings.value("Config/Have2ApplyUT1LibrationContribution",
1237  settings.value("Config/Have2ApplyOldOceanTidesContribution",
1240  settings.value("Config/Have2ApplyOldPoleTideContribution",
1243  settings.value("Config/IsNoviceUser",
1244  config.getIsNoviceUser()).toBool());
1246  settings.value("Config/LastModifiedNetId",
1247  config.getLastModifiedNetId()).toString());
1248  //
1249  // adjustments:
1252  {
1256  ": loadSettings(): using troposphere correction contributions were turned off, "
1257  "use flyby values instead");
1258  };
1261  {
1265  ": loadSettings(): the flyby troposphere mapping function is not set, "
1266  "the contributions were turned on");
1267  };
1268 
1269 
1270  //
1271  //
1272  int size=settings.beginReadArray("Config/AutomaticProcessingByNetId");
1273  // remove default set up:
1274  if (size)
1275  config.apByNetId().clear();
1276  // load saved data:
1277  for (int i=0; i<size; ++i)
1278  {
1279  settings.setArrayIndex(i);
1281  ap;
1282  QString netId;
1283  netId = settings.value("networkId").toString();
1284  ap.doSessionSetup_ = settings.value("doSessionSetup", ap.doSessionSetup_)
1285  .toBool();
1286  ap.doIonoCorrection4SBD_ = settings.value("doIonoCorrection4SBD", ap.doIonoCorrection4SBD_)
1287  .toBool();
1288  ap.doAmbigResolution_ = settings.value("doAmbigResolution", ap.doAmbigResolution_)
1289  .toBool();
1290  ap.doClockBreaksDetection_= settings.value("doClockBreaksDetection", ap.doClockBreaksDetection_)
1291  .toBool();
1292  ap.doIonoCorrection4All_ = settings.value("doIonoCorrection4All", ap.doIonoCorrection4All_)
1293  .toBool();
1294  ap.doOutliers_ = settings.value("doOutliers", ap.doOutliers_)
1295  .toBool();
1296  ap.doWeights_ = settings.value("doWeights", ap.doWeights_)
1297  .toBool();
1298  ap.doReportNotUsedData_ = settings.value("doReportNotUsedData", ap.doReportNotUsedData_)
1299  .toBool();
1301  settings.value("FinalSolution", ap.finalSolution_)
1302  .toInt());
1303  config.apByNetId()[netId] = ap;
1304  };
1305  settings.endArray();
1306  //
1307 };
1308 
1309 
1310 
1311 //
1312 void loadSettingsOldStyle(QSettings& settings)
1313 {
1314  // setup.identities:
1316  settings.value("Identities/User name",
1317  setup.identities().getUserName()).toString());
1319  settings.value("Identities/User email address",
1320  setup.identities().getUserEmailAddress()).toString());
1322  settings.value("Identities/User default initials",
1323  setup.identities().getUserDefaultInitials()).toString());
1325  settings.value("Identities/Analysis center full name",
1326  setup.identities().getAcFullName()).toString());
1328  settings.value("Identities/Analysis center abbreviated name",
1329  setup.identities().getAcAbbrevName()).toString());
1331  settings.value("Identities/Analysis center short abbreviated name",
1332  setup.identities().getAcAbbName()).toString());
1333 
1334  // setup:
1335  // Pathes:
1337  settings.value("Setup/Path to catalog interface exec",
1338  setup.getPath2CatNuInterfaceExec()).toString());
1340  settings.value("Setup/Path to DBH files",
1341  setup.getPath2DbhFiles()).toString());
1343  settings.value("Setup/Path to a priori files",
1344  setup.getPath2APrioriFiles()).toString());
1346  settings.value("Setup/Path to master files",
1347  setup.getPath2MasterFiles()).toString());
1349  settings.value("Setup/Path to spoolfile output",
1350  setup.getPath2SpoolFileOutput()).toString());
1352  settings.value("Setup/Path to reports output",
1353  setup.getPath2ReportOutput()).toString());
1355  settings.value("Setup/Path to NGS files output",
1356  setup.getPath2NgsOutput()).toString());
1358  settings.value("Setup/Have to update catalog",
1359  setup.getHave2UpdateCatalog()).toBool());
1361  settings.value("Setup/Have to alter session code",
1362  setup.getHave2MaskSessionCode()).toBool());
1364  settings.value("Setup/Have to keep spoolfile reports",
1365  setup.getHave2KeepSpoolFileReports()).toBool());
1366  // GUI:
1368  settings.value("Setup/Have to warn closing window",
1369  setup.getHave2WarnCloseWindow()).toBool());
1370 
1371  // config:
1373  settings.value("Config/Do weight correction",
1374  config.getDoWeightCorrection()).toBool());
1376  settings.value("Config/Is SOLVE compatible",
1377  config.getIsSolveCompatible()).toBool());
1379  settings.value("Config/Use external weights",
1380  config.getUseExternalWeights()).toBool());
1382  settings.value("Config/Weight correction mode",
1383  config.getWcMode()).toInt()));
1385  settings.value("Config/External weights file name",
1386  config.getExtWeightsFileName()).toString());
1388  settings.value("Config/EstimatorPwlMode",
1389  config.getPwlMode()).toInt()));
1391  settings.value("Config/Outlier processing mode",
1392  config.getOpMode()).toInt()));
1394  settings.value("Config/Outlier processing action",
1395  config.getOpAction()).toInt()));
1397  settings.value("Config/Outlier processing threshold",
1398  config.getOpThreshold()).toDouble());
1400  settings.value("Config/Outlier processing iterations limit",
1401  config.getOpIterationsLimit()).toInt());
1403  settings.value("Config/Outlier processing WC suppresion",
1406  settings.value("Config/Do iono 4SBD",
1407  config.getDoIonoCorrection4SBD()).toBool());
1409  settings.value("Config/Do CB Mode 1",
1412  settings.value("Config/Do OP Mode 1",
1415  settings.value("Config/Is active band follows tab",
1416  config.getIsActiveBandFollowsTab()).toBool());
1418  settings.value("Config/Is observable follows plotter",
1419  config.getIsObservableFollowsPlot()).toBool());
1421  settings.value("Config/Use external a priori sites postions",
1424  settings.value("Config/Use external a priori sites velocities",
1427  settings.value("Config/Use external a priori sources positions",
1430  settings.value("Config/Use external a priori axis offsets",
1431  config.getUseExtAPrioriAxisOffsets()).toBool());
1433  settings.value("Config/Use external a priori high frequency ERP",
1434  config.getUseExtAPrioriHiFyErp()).toBool());
1436  settings.value("Config/Use external a priori mean gradients",
1439  settings.value("Config/External a priori sites postions file name",
1442  settings.value("Config/External a priori sites velocities file name",
1445  settings.value("Config/External a priori sources positions file name",
1448  settings.value("Config/External a priori axis offsets file name",
1451  settings.value("Config/External a priori high frequency ERP file name",
1452  config.getExtAPrioriHiFyErpFileName()).toString());
1454  settings.value("Config/External a priori mean gradients file name",
1457  settings.value("Config/Have to apply ocean tides contribution",
1460  settings.value("Config/Have to apply pole tide contribution",
1461  config.getHave2ApplyPoleTideContrib()).toBool());
1463  settings.value("Config/Have to apply earth tide contribution",
1466  settings.value("Config/Have to apply wobble Px contribution",
1467  config.getHave2ApplyPxContrib()).toBool());
1469  settings.value("Config/Have to apply wobble Py contribution",
1470  config.getHave2ApplyPyContrib()).toBool());
1472  settings.value("Config/Have to apply axis offset contribution",
1475  settings.value("Config/Have to apply nutation high frequency contribution",
1478  settings.value("Config/Have to apply polar motion high frequency contribution",
1481  settings.value("Config/Have to apply UT1 high frequency contribution",
1484  settings.value("Config/Have to apply feed correction contribution",
1485  config.getHave2ApplyFeedCorrContrib()).toBool());
1487  settings.value("Config/Have to apply tilt remvr contribution",
1490  settings.value("Config/Have to apply Niel hydrostatic troposphere contribution",
1491  config.getHave2ApplyNdryContrib()).toBool());
1493  settings.value("Config/Have to apply Niel wet troposphere contribution",
1494  config.getHave2ApplyNwetContrib()).toBool());
1496  settings.value("Config/Have to apply unphase calibration contribution",
1498 };
1499 
1500 
1501 
1502 //
1503 void rmOldStyleSettings(QSettings& settings)
1504 {
1505  // setup.identities:
1506  settings.remove("Identities/User name");
1507  settings.remove("Identities/User email address");
1508  settings.remove("Identities/User default initials");
1509  settings.remove("Identities/Analysis center full name");
1510  settings.remove("Identities/Analysis center abbreviated name");
1511  settings.remove("Identities/Analysis center short abbreviated name");
1512 
1513  // setup:
1514  // Pathes:
1515  settings.remove("Setup/Path to catalog interface exec");
1516  settings.remove("Setup/Path to DBH files");
1517  settings.remove("Setup/Path to a priori files");
1518  settings.remove("Setup/Path to master files");
1519  settings.remove("Setup/Path to spoolfile output");
1520  settings.remove("Setup/Path to reports output");
1521  settings.remove("Setup/Path to NGS files output");
1522  settings.remove("Setup/Have to update catalog");
1523  settings.remove("Setup/Have to alter session code");
1524  settings.remove("Setup/Have to keep spoolfile reports");
1525  // GUI:
1526  settings.remove("Setup/Have to warn closing window");
1527 
1528  // config:
1529  settings.remove("Config/Do weight correction");
1530  settings.remove("Config/Is SOLVE compatible");
1531  settings.remove("Config/Use external weights");
1532  settings.remove("Config/Weight correction mode");
1533  settings.remove("Config/External weights file name");
1534  settings.remove("Config/Outlier processing mode");
1535  settings.remove("Config/Outlier processing action");
1536  settings.remove("Config/Outlier processing threshold");
1537  settings.remove("Config/Outlier processing iterations limit");
1538  settings.remove("Config/Outlier processing WC suppresion");
1539  settings.remove("Config/Do iono 4SBD");
1540  settings.remove("Config/Do CB Mode 1");
1541  settings.remove("Config/Do OP Mode 1");
1542  settings.remove("Config/Is active band follows tab");
1543  settings.remove("Config/Is observable follows plotter");
1544  settings.remove("Config/Use external a priori sites postions");
1545  settings.remove("Config/Use external a priori sites velocities");
1546  settings.remove("Config/Use external a priori sources positions");
1547  settings.remove("Config/Use external a priori axis offsets");
1548  settings.remove("Config/Use external a priori high frequency ERP");
1549  settings.remove("Config/Use external a priori mean gradients");
1550  settings.remove("Config/External a priori sites postions file name");
1551  settings.remove("Config/External a priori sites velocities file name");
1552  settings.remove("Config/External a priori sources positions file name");
1553  settings.remove("Config/External a priori axis offsets file name");
1554  settings.remove("Config/External a priori high frequency ERP file name");
1555  settings.remove("Config/External a priori mean gradients file name");
1556  settings.remove("Config/Have to apply ocean tides contribution");
1557  settings.remove("Config/Have to apply pole tide contribution");
1558  settings.remove("Config/Have to apply earth tide contribution");
1559  settings.remove("Config/Have to apply wobble Px contribution");
1560  settings.remove("Config/Have to apply wobble Py contribution");
1561  settings.remove("Config/Have to apply axis offset contribution");
1562  settings.remove("Config/Have to apply nutation high frequency contribution");
1563  settings.remove("Config/Have to apply polar motion high frequency contribution");
1564  settings.remove("Config/Have to apply UT1 high frequency contribution");
1565  settings.remove("Config/Have to apply feed correction contribution");
1566  settings.remove("Config/Have to apply tilt remvr contribution");
1567  settings.remove("Config/Have to apply Niel hydrostatic troposphere contribution");
1568  settings.remove("Config/Have to apply Niel wet troposphere contribution");
1569  settings.remove("Config/Have to apply unphase calibration contribution");
1570 };
1571 
1572 
1573 
1574 //
1575 void saveSettings(QSettings& settings, bool shouldInvokeSystemWideWizard)
1576 {
1577  // setup.identities:
1578  if (!shouldInvokeSystemWideWizard)
1579  {
1580  settings.setValue("Identities/UserName",
1582  settings.setValue("Identities/UserEmailAddress",
1584  settings.setValue("Identities/UserDefaultInitials",
1586  };
1587  settings.setValue("Identities/AcFullName",
1589  settings.setValue("Identities/AcAbbreviatedName",
1591  settings.setValue("Identities/AcShortAbbreviatedName",
1593  // setup:
1594  // Pathes:
1595  if (!shouldInvokeSystemWideWizard)
1596  {
1597  settings.setValue("Setup/Path2Home",
1598  setup.getPath2Home());
1599  };
1600  settings.setValue("Setup/Path2CatalogInterfaceExec",
1602  settings.setValue("Setup/Path2DbhFiles",
1604  settings.setValue("Setup/Path2OpenDbFiles",
1606  settings.setValue("Setup/Path2VgosDaFiles",
1608  settings.setValue("Setup/Path2APrioriFiles",
1610  settings.setValue("Setup/Path2MasterFiles",
1612  settings.setValue("Setup/Path2SpoolfileOutput",
1614  settings.setValue("Setup/Path2NotUsedObsFileOutput",
1616  settings.setValue("Setup/Path2ReportsOutput",
1618  settings.setValue("Setup/Path2NgsFilesOutput",
1620  settings.setValue("Setup/Path2PlotterFilesOutput",
1622  settings.setValue("Setup/Path2IntermediateResults",
1624 
1625  if (!shouldInvokeSystemWideWizard)
1626  {
1627  settings.setValue("Setup/AutoSavingMode",
1629  settings.setValue("Setup/Have2UpdateCatalog",
1631  settings.setValue("Setup/Have2AlterSessionCode",
1633  settings.setValue("Setup/Have2KeepSpoolfileReports",
1635  settings.setValue("Setup/Have2WarnClosingWindow",
1637  settings.setValue("Setup/IsShortScreen",
1639  settings.setValue("Setup/MainWinWidth",
1641  settings.setValue("Setup/MainWinHeight",
1643  settings.setValue("Setup/MainWinPosX",
1644  setup.getMainWinPosX());
1645  settings.setValue("Setup/MainWinPosY",
1646  setup.getMainWinPosY());
1647 
1648  settings.setValue("Setup/SeWinWidth",
1649  setup.getSeWinWidth());
1650  settings.setValue("Setup/SeWinHeight",
1651  setup.getSeWinHeight());
1652  settings.setValue("Setup/Have2AutoloadAllBands",
1654  settings.setValue("Setup/IsBandPlotPerSrcView",
1656  settings.setValue("Setup/PlotterOutputFormat",
1658  settings.setValue("Setup/LnfsFileName",
1660  settings.setValue("Setup/LnfsOriginType",
1662  settings.setValue("Setup/LnfsIsThroughCatalog",
1664  };
1665  settings.setValue("Setup/Path2AuxLogs",
1667  if (!shouldInvokeSystemWideWizard)
1668  {
1669  settings.setValue("Setup/Have2SavePerSessionLog",
1671  settings.setValue("Setup/ExecExternalCommand",
1673  settings.setValue("Setup/ExternalCommand",
1675  };
1676 
1677  // config:
1678  if (!shouldInvokeSystemWideWizard)
1679  {
1680  settings.setValue("Config/QualityCodeThreshold",
1682  settings.setValue("Config/GoodQualityCodeAtStartup",
1684  settings.setValue("Config/UseGoodQualityCodeAtStartup",
1686  settings.setValue("Config/DoWeightCorrection",
1688  settings.setValue("Config/UseQualityCodeG",
1690  settings.setValue("Config/UseQualityCodeH",
1692  settings.setValue("Config/IsSolveCompatible",
1694  settings.setValue("Config/UseDynamicClockBreaks",
1696  settings.setValue("Config/UseSolveObsSuppresionFlags",
1698  settings.setValue("Config/UseExternalWeights",
1700  settings.setValue("Config/WeightCorrectionMode",
1701  config.getWcMode());
1702  settings.setValue("Config/ExternalWeightsFileName",
1704  settings.setValue("Config/InitAuxSigma4Delay",
1706  settings.setValue("Config/InitAuxSigma4Rate",
1708  settings.setValue("Config/MinAuxSigma4Delay",
1710  settings.setValue("Config/MinAuxSigma4Rate",
1712  settings.setValue("Config/EstimatorPwlMode",
1713  config.getPwlMode());
1714  settings.setValue("Config/OutlierProcessingMode",
1715  config.getOpMode());
1716  settings.setValue("Config/OutlierProcessingAction",
1717  config.getOpAction());
1718  settings.setValue("Config/OutlierProcessingThreshold",
1720  settings.setValue("Config/OutlierProcessingIterationsLimit",
1722  settings.setValue("Config/OutlierProcessingSuppressWC",
1724  settings.setValue("Config/OutlierProcessingIsSolveCompatible",
1726  settings.setValue("Config/OutlierProcessingHave2NormalizeResiduals",
1728  settings.setValue("Config/DoIono4Sbd",
1730  settings.setValue("Config/DoClockBreakDetectionMode_1",
1732  settings.setValue("Config/DoOutlierEliminationMode_1",
1734  settings.setValue("Config/IsActiveBandFollowsTab",
1736  settings.setValue("Config/IsObservableFollowsPlot",
1738  settings.setValue("Config/UseExternalAPrioriSitePostions",
1740  settings.setValue("Config/UseExternalAPrioriSiteVelocities",
1742  settings.setValue("Config/UseExternalAPrioriSourcePostions",
1744  settings.setValue("Config/UseExternalAPrioriSourceSsm",
1746  settings.setValue("Config/UseExternalAPrioriEop",
1748  settings.setValue("Config/UseExternalAPrioriAxisOffsets",
1750  settings.setValue("Config/UseExternalAPrioriHighFrequencyErp",
1752  settings.setValue("Config/UseExternalAPrioriMeanGradients",
1754  settings.setValue("Config/ExternalAPrioriSitePostionsFileName",
1756  settings.setValue("Config/ExternalAPrioriSiteVelocitiesFileName",
1758  settings.setValue("Config/ExternalAPrioriSourcePostionsFileName",
1760  settings.setValue("Config/ExternalAPrioriSourceSsmFileName",
1762  settings.setValue("Config/ExternalAPrioriEopFileName",
1764  settings.setValue("Config/ExternalAPrioriAxisOffsetFileName",
1766  settings.setValue("Config/ExternalAPrioriHighFrequencyErpFileName",
1768  settings.setValue("Config/ExternalAPrioriMeanGradientsFileName",
1770  settings.setValue("Config/EccentricitiesFileName",
1772  settings.setValue("Config/Have2ApplySourceSsm",
1774 
1775  settings.setValue("Config/FlybyTropZenithMap",
1777 
1778  settings.setValue("Config/Have2ApplyOceanTidesContribution",
1780  settings.setValue("Config/Have2ApplyPoleTideContribution",
1782  settings.setValue("Config/Have2ApplyEarthTideContribution",
1784  settings.setValue("Config/Have2ApplyWobblePxContribution",
1786  settings.setValue("Config/Have2ApplyWobblePyContribution",
1788  settings.setValue("Config/Have2ApplyAxisOffsetContribution",
1790  settings.setValue("Config/Have2ApplyNutationHighFrequencyContribution",
1792  settings.setValue("Config/Have2ApplyPolarMotionHighFrequencyContribution",
1794  settings.setValue("Config/Have2ApplyUT1HighFrequencyContribution",
1796  settings.setValue("Config/Have2ApplyFeedCorrectionContribution",
1798  settings.setValue("Config/Have2ApplyTiltRemvrContribution",
1800  settings.setValue("Config/Have2ApplyNielHydrostaticTroposphereContribution",
1802  settings.setValue("Config/Have2ApplyNielWetTroposphereContribution",
1804  settings.setValue("Config/Have2ApplyUnphaseCalibrationContribution",
1806  settings.setValue("Config/Have2ApplyOceanPoleTideContribution",
1808  settings.setValue("Config/Have2ApplyGpsIonoContrib",
1810  settings.setValue("Config/Have2ApplyPolarMotionLibrationContribution",
1812  settings.setValue("Config/Have2ApplyUT1LibrationContribution",
1814  settings.setValue("Config/Have2ApplyOldOceanTidesContribution",
1816  settings.setValue("Config/Have2ApplyOldPoleTideContribution",
1818  settings.setValue("Config/IsNoviceUser",
1820  };
1821  // versions:
1822  settings.setValue("Version/LibraryName", libraryVersion.getSoftwareName());
1823  settings.setValue("Version/LibraryMajor", libraryVersion.getMajorNumber());
1824  settings.setValue("Version/LibraryMinor", libraryVersion.getMinorNumber());
1825  settings.setValue("Version/LibraryTeeny", libraryVersion.getTeenyNumber());
1826  settings.setValue("Version/LibraryComments", libraryVersion.getCodeName());
1827  settings.setValue("Version/nuSolveName", nuSolveVersion.getSoftwareName());
1828  settings.setValue("Version/nuSolveMajor", nuSolveVersion.getMajorNumber());
1829  settings.setValue("Version/nuSolveMinor", nuSolveVersion.getMinorNumber());
1830  settings.setValue("Version/nuSolveTeeny", nuSolveVersion.getTeenyNumber());
1831  settings.setValue("Version/nuSolveComments", nuSolveVersion.getCodeName());
1832  settings.setValue("Version/nuSolveSettings", currentSettingsVersion);
1833  //
1834  //
1835  if (!shouldInvokeSystemWideWizard)
1836  {
1837  settings.setValue("Config/LastModifiedNetId", config.getLastModifiedNetId());
1838  };
1839  // clear it:
1840  if (!shouldInvokeSystemWideWizard)
1841  {
1842  settings.remove("Config/AutomaticProcessingByNetId");
1843  settings.beginWriteArray("Config/AutomaticProcessingByNetId", config.apByNetId().size());
1844  int idx(0);
1845  for (QMap<QString, SgTaskConfig::AutomaticProcessing>::const_iterator it=config.apByNetId().begin();
1846  it!=config.apByNetId().end(); ++it, ++idx)
1847  {
1848  settings.setArrayIndex(idx);
1850  &ap=it.value();
1851  const QString &id=it.key();
1852  settings.setValue("networkId", id);
1853  settings.setValue("doSessionSetup", ap.doSessionSetup_);
1854  settings.setValue("doIonoCorrection4SBD", ap.doIonoCorrection4SBD_);
1855  settings.setValue("doAmbigResolution", ap.doAmbigResolution_);
1856  settings.setValue("doClockBreaksDetection", ap.doClockBreaksDetection_);
1857  settings.setValue("doIonoCorrection4All", ap.doIonoCorrection4All_);
1858  settings.setValue("doOutliers", ap.doOutliers_);
1859  settings.setValue("doWeights", ap.doWeights_);
1860  settings.setValue("doReportNotUsedData", ap.doReportNotUsedData_);
1861  settings.setValue("FinalSolution", ap.finalSolution_);
1862  };
1863  settings.endArray();
1864  //
1865  };
1866 };
1867 
1868 
1869 
1870 //
1871 int processSession(const QString& databaseName, SgVlbiSessionInfo::OriginType fmt)
1872 {
1874  ": processing " + databaseName + " session");
1875 
1876  bool isOk(false);
1877  NsSessionHandler *handler;
1878  handler = new NsSessionHandler(databaseName, "", &config, &parametersDescriptor, fmt);
1879  if (handler->importSession(false) && handler->performPia())
1880  isOk = handler->saveResults();
1881  delete handler;
1882 
1883  return isOk?0:-1;
1884 };
1885 /*=====================================================================================================*/
1886 
1887 
1888 
1889 
1890 
1891 
1892 
1893 
1894 
1895 
1896 
1897 
1898 
1899 /*=====================================================================================================*/
1900 
NsMainWindow * mainWindow
int executeScript(const QString &scriptFileName, const QList< QString > args, bool hasDisplay)
SgVersion nuSolveVersion("nuSolve", 0, 8, 2, "Dark Hollow Falls (rc2)", SgMJD(2023, 4, 3, 10, 59))
SgLogger * logger
Definition: SgLogger.cpp:231
QString interval2Str(double days)
Definition: SgMJD.cpp:1371
double signum(const double x)
Definition: SgMathSupport.h:89
SgVersion libraryVersion("SgLib", 0, 8, 2, "Compton Peak (rc2)", SgMJD(2023, 4, 3, 10, 59))
bool importSession(bool guiExpected)
void setExecExternalCommand(bool b)
Definition: NsSetup.h:300
void setPath2APrioriFiles(const QString &)
Definition: NsSetup.h:736
const QString & getPath2AuxLogs() const
Definition: NsSetup.h:510
void setPath2NgsOutput(const QString &)
Definition: NsSetup.h:776
int getMainWinHeight() const
Definition: NsSetup.h:598
void setPath2DbhFiles(const QString &)
Definition: NsSetup.h:720
void setUpBinaryIdentities(const QString &)
Definition: NsSetup.cpp:104
void setSeWinWidth(int)
Definition: NsSetup.h:912
void setHave2LoadImmatureSession(bool)
Definition: NsSetup.h:848
QString path2(const QString &) const
Definition: NsSetup.h:1008
AutoSaving getAutoSavingMode() const
Definition: NsSetup.h:502
void setMainWinPosY(int)
Definition: NsSetup.h:904
const QString & getPath2ReportOutput() const
Definition: NsSetup.h:470
const QString & getPath2CatNuInterfaceExec() const
Definition: NsSetup.h:414
void setPath2SpoolFileOutput(const QString &)
Definition: NsSetup.h:752
const QString & getPath2MasterFiles() const
Definition: NsSetup.h:446
void setPath2VgosDaFiles(const QString &path)
Definition: NsSetup.h:206
bool getExecExternalCommand() const
Definition: NsSetup.h:185
bool getHave2SavePerSessionLog() const
Definition: NsSetup.h:518
const QString & getPath2SpoolFileOutput() const
Definition: NsSetup.h:454
bool getHave2AutoloadAllBands() const
Definition: NsSetup.h:638
const QString & getExternalCommand() const
Definition: NsSetup.h:187
void setPath2IntermediateResults(const QString &)
Definition: NsSetup.h:792
void setLnfsOriginType(SgVlbiSessionInfo::OriginType)
Definition: NsSetup.h:960
void setHave2SavePerSessionLog(bool)
Definition: NsSetup.h:816
bool getHave2MaskSessionCode() const
Definition: NsSetup.h:534
SgPlot::OutputFormat getPlotterOutputFormat() const
Definition: NsSetup.h:654
const QString & getPath2Home() const
Definition: NsSetup.h:406
void setHave2ForceAutomaticProcessing(bool)
Definition: NsSetup.h:984
void setSeWinHeight(int)
Definition: NsSetup.h:920
void setPath2CatNuInterfaceExec(const QString &)
Definition: NsSetup.h:712
void setPath2Home(const QString &)
Definition: NsSetup.h:704
void setPath2ReportOutput(const QString &)
Definition: NsSetup.h:768
int getMainWinWidth() const
Definition: NsSetup.h:590
SgIdentities & identities()
Definition: NsSetup.h:566
bool getHave2KeepSpoolFileReports() const
Definition: NsSetup.h:542
void setHave2WarnCloseWindow(bool)
Definition: NsSetup.h:864
int getSeWinWidth() const
Definition: NsSetup.h:622
void setMainWinPosX(int)
Definition: NsSetup.h:896
void setPath2NotUsedObsFileOutput(const QString &)
Definition: NsSetup.h:760
const QString & getPath2APrioriFiles() const
Definition: NsSetup.h:438
void setPlotterOutputFormat(SgPlot::OutputFormat)
Definition: NsSetup.h:944
void setMainWinWidth(int)
Definition: NsSetup.h:880
bool getIsShortScreen() const
Definition: NsSetup.h:582
const QString & getPath2VgosDaFiles() const
Definition: NsSetup.h:87
bool getHave2UpdateCatalog() const
Definition: NsSetup.h:526
const QString & getLnfsFileName() const
Definition: NsSetup.h:662
const QString & getPath2DbhFiles() const
Definition: NsSetup.h:422
void setIsBandPlotPerSrcView(bool)
Definition: NsSetup.h:936
int getMainWinPosX() const
Definition: NsSetup.h:606
int getSeWinHeight() const
Definition: NsSetup.h:630
void setPath2PlotterOutput(const QString &)
Definition: NsSetup.h:784
const QString & getPath2PlotterOutput() const
Definition: NsSetup.h:486
AutoSaving
Definition: NsSetup.h:49
void setHave2KeepSpoolFileReports(bool)
Definition: NsSetup.h:840
void setPath2VgosDbFiles(const QString &)
Definition: NsSetup.h:728
const QString & getPath2VgosDbFiles() const
Definition: NsSetup.h:430
bool getHave2WarnCloseWindow() const
Definition: NsSetup.h:574
void setPath2MasterFiles(const QString &)
Definition: NsSetup.h:744
void setHave2AutoloadAllBands(bool)
Definition: NsSetup.h:928
void setLnfsFileName(const QString &)
Definition: NsSetup.h:952
bool getLnfsIsThroughCatalog() const
Definition: NsSetup.h:678
void setLnfsIsThroughCatalog(bool)
Definition: NsSetup.h:968
SgVlbiSessionInfo::OriginType getLnfsOriginType() const
Definition: NsSetup.h:670
void setHave2SkipAutomaticProcessing(bool)
Definition: NsSetup.h:976
int getMainWinPosY() const
Definition: NsSetup.h:614
const QString & getPath2NgsOutput() const
Definition: NsSetup.h:478
bool getIsBandPlotPerSrcView() const
Definition: NsSetup.h:646
void setHave2MaskSessionCode(bool)
Definition: NsSetup.h:832
void setHave2UpdateCatalog(bool)
Definition: NsSetup.h:824
void setIsShortScreen(bool)
Definition: NsSetup.h:872
void setPath2AuxLogs(const QString &)
Definition: NsSetup.h:808
const QString & getPath2NotUsedObsFileOutput() const
Definition: NsSetup.h:462
const QString & getPath2IntermediateResults() const
Definition: NsSetup.h:494
void setAutoSavingMode(AutoSaving)
Definition: NsSetup.h:800
void setExternalCommand(const QString &command)
Definition: NsSetup.h:302
void setMainWinHeight(int)
Definition: NsSetup.h:888
static int serialNumber()
const QString & getAcAbbrevName() const
Definition: SgIdentities.h:247
const QString & getAcAbbName() const
Definition: SgIdentities.h:255
void setAcAbbrevName(const QString &)
Definition: SgIdentities.h:367
void setAcFullName(const QString &)
Definition: SgIdentities.h:359
const QString & getUserEmailAddress() const
Definition: SgIdentities.h:223
void setAcAbbName(const QString &)
Definition: SgIdentities.h:375
const QString & getMachineMachineName() const
Definition: SgIdentities.h:303
const QString & getMachineRelease() const
Definition: SgIdentities.h:319
const QString & getMachineNodeName() const
Definition: SgIdentities.h:295
const QString & getUserDefaultInitials() const
Definition: SgIdentities.h:231
const QString & getAcFullName() const
Definition: SgIdentities.h:239
void setUserDefaultInitials(const QString &)
Definition: SgIdentities.h:351
void setUserEmailAddress(const QString &)
Definition: SgIdentities.h:343
void setUserName(const QString &)
Definition: SgIdentities.h:335
const QString & getUserName() const
Definition: SgIdentities.h:215
const QString & getMachineSysName() const
Definition: SgIdentities.h:311
virtual void write(LogLevel, quint32, const QString &, bool=false)
Definition: SgLogger.cpp:88
bool getIsStoreInFile() const
Definition: SgLogger.h:137
void attachSupplementLog(const QString &name, SgLogger *auxLogger)
Definition: SgLogger.cpp:172
void setIsStoreInFile(bool isStoreInFile)
Definition: SgLogger.h:127
void setLogFacility(LogLevel lvl, quint32 f)
Definition: SgLogger.h:131
void setFileName(const QString &fileName)
Definition: SgLogger.h:125
void setIsNeedTimeMark(bool isNeedTimeMark)
Definition: SgLogger.h:129
quint32 getLogFacility(LogLevel lvl) const
Definition: SgLogger.h:141
void setDirName(const QString &dirName)
Definition: SgLogger.h:124
@ DATA
Definition: SgLogger.h:78
@ PREPROC
Definition: SgLogger.h:98
@ SESSION
Definition: SgLogger.h:77
virtual void clearSpool()
Definition: SgLogger.cpp:116
void setCapacity(int capacity)
Definition: SgLogger.h:126
bool getIsNeedTimeMark() const
Definition: SgLogger.h:139
int getCapacity() const
Definition: SgLogger.h:136
bool getUseFullDateFormat() const
Definition: SgLogger.h:138
void setIsMute(bool is)
Definition: SgLogger.h:130
void detachSupplementLog(const QString &name)
Definition: SgLogger.cpp:187
void setUseFullDateFormat(bool useFullDateFormat)
Definition: SgLogger.h:128
void rmLogFile()
Definition: SgLogger.cpp:148
Definition: SgMJD.h:59
@ F_DDMonYYYY
Date: 2010 Apr 02.
Definition: SgMJD.h:87
QString toString(Format format=F_Verbose) const
Definition: SgMJD.cpp:1008
static SgMJD currentMJD()
Definition: SgMJD.cpp:119
void setUseExtAPrioriHiFyErp(bool)
const QString & getEccentricitiesFileName() const
void setHave2ApplyUt1OceanTideHFContrib(bool b)
Definition: SgTaskConfig.h:616
bool getUseQualityCodeH() const
Definition: SgTaskConfig.h:849
bool getHave2ApplyNutationHFContrib() const
Definition: SgTaskConfig.h:386
const QString & getExtAPrioriSitesVelocitiesFileName() const
bool getDoIonoCorrection4SBD() const
Definition: SgTaskConfig.h:897
bool getIsObservableFollowsPlot() const
const QString & getExtWeightsFileName() const
Definition: SgTaskConfig.h:969
bool getUseExtAPrioriSitesVelocities() const
void setUseGoodQualityCodeAtStartup(bool)
void setHave2ApplyGpsIonoContrib(bool b)
Definition: SgTaskConfig.h:614
bool getHave2ApplyOldPoleTideContrib() const
Definition: SgTaskConfig.h:393
void setHave2ApplySourceSsm(bool b)
Definition: SgTaskConfig.h:615
void setName(const QString &)
void setExtAPrioriMeanGradientsFileName(const QString &)
void setInitAuxSigma4Rate(double s)
Definition: SgTaskConfig.h:481
void setUseExtAPrioriSitesVelocities(bool)
void setDoIonoCorrection4SBD(bool)
void setUseExtAPrioriAxisOffsets(bool)
void setDoWeightCorrection(bool)
bool getUseExtAPrioriSourceSsm() const
void setExtAPrioriHiFyErpFileName(const QString &)
void setUseQualityCodeG(bool)
OutliersProcessingMode getOpMode() const
Definition: SgTaskConfig.h:977
bool getUseExtAPrioriHiFyErp() const
double getMinAuxSigma4Rate() const
Definition: SgTaskConfig.h:242
void setUseExternalWeights(bool)
void setHave2ApplyEarthTideContrib(bool b)
Definition: SgTaskConfig.h:611
bool getUseExtAPrioriSitesPositions() const
bool getUseExtAPrioriErp() const
bool getOpIsSolveCompatible() const
void setWcMode(WeightCorrectionMode)
bool getIsSolveCompatible() const
Definition: SgTaskConfig.h:913
void setIsObservableFollowsPlot(bool)
void setHave2ApplyOceanPoleTideContrib(bool b)
Definition: SgTaskConfig.h:621
void setHave2ApplyTiltRemvrContrib(bool b)
Definition: SgTaskConfig.h:623
bool getDoWeightCorrection() const
Definition: SgTaskConfig.h:905
bool getUseExtAPrioriMeanGradients() const
void setExtWeightsFileName(const QString &)
bool getHave2ApplyEarthTideContrib() const
Definition: SgTaskConfig.h:379
EstimatorPwlMode getPwlMode() const
Definition: SgTaskConfig.h:953
bool getDoClockBreakDetectionMode1() const
void setDoClockBreakDetectionMode1(bool)
WeightCorrectionMode getWcMode() const
Definition: SgTaskConfig.h:945
void setOpThreshold(double)
void setIsNoviceUser(bool is)
Definition: SgTaskConfig.h:527
int getGoodQualityCodeAtStartup() const
Definition: SgTaskConfig.h:857
void setGoodQualityCodeAtStartup(int)
bool getHave2ApplyPyContrib() const
Definition: SgTaskConfig.h:378
const QString & getExtAPrioriSitesPositionsFileName() const
void setDoOutliersEliminationMode1(bool)
const QString & getExtAPrioriHiFyErpFileName() const
void setExtAPrioriSourcesPositionsFileName(const QString &)
QMap< QString, AutomaticProcessing > & apByNetId()
Definition: SgTaskConfig.h:637
void setFlybyTropZenithMap(TropZenithMap m)
Definition: SgTaskConfig.h:632
bool getUseExternalWeights() const
Definition: SgTaskConfig.h:937
void setInitAuxSigma4Delay(double s)
Definition: SgTaskConfig.h:480
bool getHave2ApplyOceanTideContrib() const
Definition: SgTaskConfig.h:380
int getQualityCodeThreshold() const
Definition: SgTaskConfig.h:833
bool getUseExtAPrioriSourcesPositions() const
void setEccentricitiesFileName(const QString &)
double getMinAuxSigma4Delay() const
Definition: SgTaskConfig.h:241
void setIsActiveBandFollowsTab(bool)
double getInitAuxSigma4Delay() const
Definition: SgTaskConfig.h:243
void setIsSolveCompatible(bool)
bool getHave2ApplyNdryContrib() const
Definition: SgTaskConfig.h:397
void setUseExtAPrioriMeanGradients(bool)
bool getHave2ApplyUt1OceanTideHFContrib() const
Definition: SgTaskConfig.h:384
bool getIsNoviceUser() const
Definition: SgTaskConfig.h:294
bool getUseQualityCodeG() const
Definition: SgTaskConfig.h:841
void setUseQualityCodeH(bool)
bool getHave2ApplyPxyOceanTideHFContrib() const
Definition: SgTaskConfig.h:385
void setUseExtAPrioriSourceSsm(bool)
void setPwlMode(EstimatorPwlMode)
const QString & getLastModifiedNetId() const
Definition: SgTaskConfig.h:403
void setHave2ApplyOceanTideContrib(bool b)
Definition: SgTaskConfig.h:612
bool getDoOutliersEliminationMode1() const
bool getHave2ApplyOldOceanTideContrib() const
Definition: SgTaskConfig.h:392
void setUseSolveObsSuppresionFlags(bool)
void setOpIsSolveCompatible(bool)
void setExtAPrioriSourceSsmFileName(const QString &)
bool getHave2ApplyPoleTideContrib() const
Definition: SgTaskConfig.h:381
bool getUseExtAPrioriAxisOffsets() const
void setHave2ApplyPoleTideContrib(bool b)
Definition: SgTaskConfig.h:613
void setExtAPrioriSitesVelocitiesFileName(const QString &)
bool getHave2ApplyGpsIonoContrib() const
Definition: SgTaskConfig.h:382
void setHave2ApplyOldPoleTideContrib(bool b)
Definition: SgTaskConfig.h:625
bool getIsActiveBandFollowsTab() const
void setOpHave2SuppressWeightCorrection(bool)
bool getHave2ApplyPxyLibrationContrib() const
Definition: SgTaskConfig.h:388
void setHave2ApplyNdryContrib(bool b)
Definition: SgTaskConfig.h:629
void setHave2ApplyPxyOceanTideHFContrib(bool b)
Definition: SgTaskConfig.h:617
bool getUseSolveObsSuppresionFlags() const
Definition: SgTaskConfig.h:929
bool getHave2ApplyTiltRemvrContrib() const
Definition: SgTaskConfig.h:391
TropZenithMap getFlybyTropZenithMap() const
Definition: SgTaskConfig.h:400
bool getUseDynamicClockBreaks() const
Definition: SgTaskConfig.h:921
void setMinAuxSigma4Rate(double s)
Definition: SgTaskConfig.h:479
void setOpMode(OutliersProcessingMode)
int getOpIterationsLimit() const
void setUseExtAPrioriErp(bool)
bool getOpHave2NormalizeResiduals() const
void setOpIterationsLimit(int)
void setExtAPrioriErpFileName(const QString &)
void setUseExtAPrioriSourcesPositions(bool)
void setExtAPrioriAxisOffsetsFileName(const QString &)
const QString & getExtAPrioriMeanGradientsFileName() const
void setHave2ApplyNwetContrib(bool b)
Definition: SgTaskConfig.h:630
void setQualityCodeThreshold(int)
void setOpHave2NormalizeResiduals(bool)
void setHave2ApplyOldOceanTideContrib(bool b)
Definition: SgTaskConfig.h:624
const QString & getExtAPrioriSourcesPositionsFileName() const
bool getHave2ApplySourceSsm() const
Definition: SgTaskConfig.h:383
bool getHave2ApplyPxContrib() const
Definition: SgTaskConfig.h:377
bool getHave2ApplyOceanPoleTideContrib() const
Definition: SgTaskConfig.h:389
double getOpThreshold() const
Definition: SgTaskConfig.h:993
void setHave2ApplyPxyLibrationContrib(bool b)
Definition: SgTaskConfig.h:620
void setMinAuxSigma4Delay(double s)
Definition: SgTaskConfig.h:478
void setHave2ApplyPyContrib(bool b)
Definition: SgTaskConfig.h:610
bool getUseGoodQualityCodeAtStartup() const
Definition: SgTaskConfig.h:865
double getInitAuxSigma4Rate() const
Definition: SgTaskConfig.h:244
void setHave2ApplyPxContrib(bool b)
Definition: SgTaskConfig.h:609
void setHave2ApplyFeedCorrContrib(bool b)
Definition: SgTaskConfig.h:622
const QString & getExtAPrioriAxisOffsetsFileName() const
void setUseDynamicClockBreaks(bool)
void setHave2ApplyNutationHFContrib(bool b)
Definition: SgTaskConfig.h:618
void setHave2ApplyUt1LibrationContrib(bool b)
Definition: SgTaskConfig.h:619
void setHave2ApplyAxisOffsetContrib(bool b)
Definition: SgTaskConfig.h:627
void setUseExtAPrioriSitesPositions(bool)
void setHave2ApplyUnPhaseCalContrib(bool b)
Definition: SgTaskConfig.h:628
bool getHave2ApplyFeedCorrContrib() const
Definition: SgTaskConfig.h:390
bool getHave2ApplyNwetContrib() const
Definition: SgTaskConfig.h:398
bool getOpHave2SuppressWeightCorrection() const
const QString & getExtAPrioriErpFileName() const
void setLastModifiedNetId(const QString &netId)
Definition: SgTaskConfig.h:635
bool getHave2ApplyUt1LibrationContrib() const
Definition: SgTaskConfig.h:387
bool getHave2ApplyUnPhaseCalContrib() const
Definition: SgTaskConfig.h:396
void setOpAction(OutliersProcessingAction)
void setExtAPrioriSitesPositionsFileName(const QString &)
OutliersProcessingAction getOpAction() const
Definition: SgTaskConfig.h:985
bool getHave2ApplyAxisOffsetContrib() const
Definition: SgTaskConfig.h:395
const QString & getExtAPrioriSourceSsmFileName() const
@ NF_Petrov
Definition: SgVersion.h:59
void setTeenyNumber(int)
Definition: SgVersion.h:328
void setCodeName(const QString &)
Definition: SgVersion.h:336
int getMinorNumber() const
Definition: SgVersion.h:270
const SgMJD & getReleaseEpoch() const
Definition: SgVersion.h:294
const QString & getSoftwareName() const
Definition: SgVersion.h:254
QString name(NameFormat fmt=NF_Human) const
Definition: SgVersion.cpp:54
void setMinorNumber(int)
Definition: SgVersion.h:320
int getTeenyNumber() const
Definition: SgVersion.h:278
void setMajorNumber(int)
Definition: SgVersion.h:312
const QString & getCodeName() const
Definition: SgVersion.h:286
void setSoftwareName(const QString &)
Definition: SgVersion.h:304
int getMajorNumber() const
Definition: SgVersion.h:262
@ OT_DBH
observations are from database files provided by correlators;
@ OT_VDB
observations are from vgosDb data tree;
static bool guessSessionByWrapperFileName(const QString &inputArg, const QString &path2VgosDb, QString &path2wrapperFile, QString &wrapperFileName, QString &sessionName, int &version)
static bool guessWrapperFileNameBySession(const QString &inputArg, const QString &path2VgosDb, const QString &acAbbName, QString &path2wrapperFile, QString &wrapperFileName, QString &sessionName, int &version, bool noYears=false)
const QString origAppName("nuSolve")
NsSetup setup
Definition: nuSolve.cpp:61
struct sigaction saveSIGHUP
Definition: nuSolve.cpp:231
void loadSettings(QSettings &)
Definition: nuSolve.cpp:903
const QString origOrgName("NASA GSFC")
int main(int argc, char **argv)
Definition: nuSolve.cpp:299
void checkSettings(QSettings &)
Definition: nuSolve.cpp:824
void loadSettingsOldStyle(QSettings &)
Definition: nuSolve.cpp:1312
const QString origDmnName("gsfc.nasa.gov")
struct sigaction saveSIGDFL
Definition: nuSolve.cpp:235
struct sigaction saveSIGABRT
Definition: nuSolve.cpp:226
struct sigaction saveSIGBUS
Definition: nuSolve.cpp:227
const int currentSettingsVersion(20170328)
struct sigaction saveSIGFPE
Definition: nuSolve.cpp:223
SgVersion storedLibraryVersion
Definition: nuSolve.cpp:63
struct sigaction saveSIGILL
Definition: nuSolve.cpp:224
const char * argp_program_bug_address
Definition: nuSolve.cpp:78
static int parse_opt(int key, char *arg, struct argp_state *state)
Definition: nuSolve.cpp:106
struct sigaction saveSIGSEGV
Definition: nuSolve.cpp:225
struct sigaction saveSIGINT
Definition: nuSolve.cpp:230
struct sigaction saveSIGTERM
Definition: nuSolve.cpp:232
SgVersion storedNuSolveVersion
Definition: nuSolve.cpp:64
void rmOldStyleSettings(QSettings &)
Definition: nuSolve.cpp:1503
int processSession(const QString &databaseName, SgVlbiSessionInfo::OriginType fmt)
Definition: nuSolve.cpp:1871
SgTaskConfig config
Definition: nuSolve.cpp:59
void handlerSIGs(int signum)
Definition: nuSolve.cpp:240
SgParametersDescriptor parametersDescriptor
Definition: nuSolve.cpp:60
void saveSettings(QSettings &, bool shouldInvokeSystemWideWizard)
Definition: nuSolve.cpp:1575
bool have2LoadImmatureSession
Definition: nuSolve.cpp:97
bool have2SkipAutomaticProcessing
Definition: nuSolve.cpp:91
bool have2ForceAutomaticProcessing
Definition: nuSolve.cpp:92
bool shouldInvokeSystemWideWizard
Definition: nuSolve.cpp:96
QList< QString > args
Definition: nuSolve.cpp:100
QString altSetupAppName
Definition: nuSolve.cpp:84
QSettings * settings
Definition: nuSolve.cpp:82
bool isForcedCatalogMode
Definition: nuSolve.cpp:87
QString altSetupName
Definition: nuSolve.cpp:83
SgVlbiSessionInfo::OriginType ofFmt
Definition: nuSolve.cpp:90
bool have2UseAltSetup
Definition: nuSolve.cpp:85
bool isNeedSignalHandler
Definition: nuSolve.cpp:93
bool isForcedStandaloneMode
Definition: nuSolve.cpp:88
bool have2ForceWizard
Definition: nuSolve.cpp:95
QString scriptFileName
Definition: nuSolve.cpp:98
QString databaseName
Definition: nuSolve.cpp:99
bool useDefaultSetup
Definition: nuSolve.cpp:89