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 char progname[80];
73 int msglev=2;
74 
75 // for ARGP parser:
76 const char *argp_program_bug_address = "Sergei Bolotin <sergei.bolotin@nasa.gov>";
77 
78 struct nsOptions
79 {
80  QSettings *settings;
81  QString altSetupName;
82  QString altSetupAppName;
84 
92 
96  QString scriptFileName;
97  QString databaseName;
99 
100 };
101 
102 //
103 // a parser for ARGP:
104 static int parse_opt(int key, char *arg, struct argp_state *state)
105 {
106 // int n;
107 // bool isOk;
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  strcpy(progname, qPrintable("HOPS (on behalf of " + nuSolveVersion.getSoftwareName() + ")"));
343  //
344 // "The rest of arguments are treating as arguments of a script if \"-t\" option is present,\n"
345 // "otherwice turns the software into a command line mode and use the argument as a name\n"
346 // "of a database to process. The command line mode supposed to be applied to the INT type\n"
347 // "of sessions only.\n";
348  //
349  QString command("");
350  for (int i=0; i<argc; i++)
351  command += QString(argv[i]) + " ";
352  command.chop(1);
353  //
354  setup.setUpBinaryIdentities(QString(argv[0]));
355  //
356  options.settings = new QSettings;
357 
358  //
359  // ARGP setup:
360  //
361  struct argp_option argp_options[] =
362  {
363  {0, 0, 0, 0, "Configuration control:", 10},
364  {"alt", 'a', "STRING", 0,
365  "Use an alternative configuration STRING"},
366  {"default-setup", 'd', 0, 0,
367  "Use default setup (WARNING: existing configuration will be overwriten)"},
368 
369  {0, 0, 0, 0, "Script mode:", 11},
370  {"script", 't', "STRING", 0,
371  "Execute a script STRING. "},
372 
373  {0, 0, 0, 0, "Automatic processing (GUI mode):", 12},
374  {"force-automatic", 'm', 0, 0,
375  "Force executing of automatic processing"},
376  {"no-automatic", 'n', 0, 0,
377  "Do not run automatic processing even if a session is eligible for it"},
378 
379  {0, 0, 0, 0, "Input control:", 13},
380  {"catalog", 'c', 0, 0,
381  "Force run in the catalog aware mode (opposite to '-s')"},
382  {"format", 'f', "STRING", 0,
383  "Set the data storage format of the provided session to STRING (either \"dbh\" or \"vgos\")"},
384  {"read-all", 'l', 0, 0,
385  "Read all databases, even that that lack of essential information"},
386  {"standalone", 's', 0, 0,
387  "Force run in the standalone mode (opposite to '-c')"},
388 
389  {0, 0, 0, 0, "Invocation of startup wizard:", 14},
390  {"sys-wide-wizard", 'W', 0, 0,
391  "Run startup wizard for the system-wide settings"},
392  {"wizard", 'w', 0, 0,
393  "Force call of the startup wizard"},
394 
395  {0, 0, 0, 0, "Execution control:", 15},
396  {"no-interruptions", 'i', 0, 0,
397  "Do not catch interruptions"},
398 
399  {0, 0, 0, 0, "Operation modes:", -1},
400  {"version", 'V', 0, 0,
401  "Print program version"},
402  //
403  {0}
404  };
405 
406  QString salute("A program to make preliminary analysis of a geodetic "
407  "VLBI session.\v");
408 
409  salute += "The current version is:\n\t" + nuSolveVersion.name() + " released on " +
411  "\n\t" + libraryVersion.name() + " released on " +
413  salute +=
414  QString("\n\nThe program nuSolve is a part of nuSolve package. For datails see "
415  "\"nuSolve User Guide\", a part of nuSolve distribution. You can get the latest version of "
416  "nuSolve at\n\t\thttps://sourceforge.net/projects/nusolve");
417 
418  struct argp argp={argp_options, parse_opt,
419  "\n\nDATABASE\nSCRIPT [SCRIPT OPTIONS]", salute.toLatin1()};
420 
421  argp_parse (&argp, argc, argv, 0, 0, &options);
422  //
423  //
424  //
425  //
426  if (options.isNeedSignalHandler && !options.scriptFileName.size()) // do not catch signals in a script mode
427  {
428  act.sa_handler = handlerSIGs;
429  sigemptyset(&act.sa_mask);
430  act.sa_flags = 0;
431  sigaction(SIGFPE, &act, &saveSIGFPE);
432  sigaction(SIGILL, &act, &saveSIGILL);
433  sigaction(SIGSEGV,&act, &saveSIGSEGV);
434  sigaction(SIGABRT,&act, &saveSIGABRT);
435  sigaction(SIGBUS, &act, &saveSIGBUS);
436  sigaction(SIGINT, &act, &saveSIGINT);
437  sigaction(SIGHUP, &act, &saveSIGHUP);
438  sigaction(SIGTERM,&act, &saveSIGTERM);
439  };
440  //
441  //
442  isFirstRun = options.settings->allKeys().size()>0 ? false : true;
443  //
444  // load user saved values:
445  if (!options.useDefaultSetup)
446  {
447  // first, use "standard" set up:
448  checkSettings(*options.settings);
449  if (options.have2UseAltSetup)
450  {
452  ": using alternative config name \"" + options.altSetupName + "\"");
453  QSettings *altSettings = new QSettings(origOrgName, options.altSetupAppName);
454  loadSettings(*altSettings);
455  delete options.settings;
456  options.settings = altSettings;
457  config.setName(options.altSetupName);
458  }
459  else
460  config.setName("");
461  };
462  //
463  // check for the special needs:
464  // "User bad. Replace and press Enter":
465  if (options.isForcedCatalogMode && options.isForcedStandaloneMode)
466  {
467  options.isForcedCatalogMode = options.isForcedStandaloneMode = false;
469  ": combination of -c and -s options has no effect");
470  };
472  {
475  ": combination of -m and -n options has no effect");
476  };
477  //
478  //
480  options.isForcedCatalogMode = false;
481  else if (options.isForcedCatalogMode)
482  {
485  ": forced run in the catalog aware mode");
486  };
488  options.isForcedStandaloneMode = false;
489  else if (options.isForcedStandaloneMode)
490  {
493  ": forced run in the standalone mode");
494  };
495  if (options.have2SkipAutomaticProcessing)
496  {
499  ": the automatic process mode is supressed");
500  };
501  if (options.have2ForceAutomaticProcessing)
502  {
505  ": forced call the automatic processing");
506  };
507  //
508  if (options.have2LoadImmatureSession)
510  //
511  //
512  //
513  // adjust the logger:
514  if (options.settings->contains("Version/LibraryName"))
515  {
517  options.settings->value("Logger/FacilityERR", logger->getLogFacility(SgLogger::ERR)).toUInt());
519  options.settings->value("Logger/FacilityWRN", logger->getLogFacility(SgLogger::WRN)).toUInt());
521  options.settings->value("Logger/FacilityINF", logger->getLogFacility(SgLogger::INF)).toUInt());
523  options.settings->value("Logger/FacilityDBG", logger->getLogFacility(SgLogger::DBG)).toUInt());
524  };
525  logger->setFileName(options.settings->value("Logger/FileName", "nuSolve.log").toString());
527  logger->setCapacity(options.settings->value("Logger/Capacity", logger->getCapacity()).toInt());
529  options.settings->value("Logger/IsStoreInFile", logger->getIsStoreInFile()).toBool());
531  options.settings->value("Logger/IsNeedTimeMark", logger->getIsNeedTimeMark()).toBool());
533  options.settings->value("Logger/UseFullDate", logger->getUseFullDateFormat()).toBool());
534  //
535  //
536  //
537  // exec the application:
538  //
539  rc = 0;
540  if (options.scriptFileName.size())
541  {
542  bool hasDisplay=false;
543  const char* envDisplay=NULL;
544  if ((envDisplay=getenv("DISPLAY")) && strlen(envDisplay))
545  hasDisplay = true;
546 
547  if (hasDisplay)
548  {
549  QApplication app(argc, argv);
550  rc = executeScript(options.scriptFileName, options.args, hasDisplay);
551  }
552  else
553  {
554  QCoreApplication app(argc, argv);
555  rc = executeScript(options.scriptFileName, options.args, hasDisplay);
556  };
557 
558  logger->clearSpool();
559  logger->setIsStoreInFile(false);
560  // and exit:
561  delete options.settings;
562  return rc;
563  }
564  else if (options.databaseName.size() && !options.have2ForceWizard)
565  {
566  if (isFirstRun)
567  {
569  ": cannot proccess the database \"" + options.databaseName + "\": no config found");
570  return -1;
571  };
572  //
573  //
574  // check the input argument:
575  //
576  QString sessionName("");
577  if (options.ofFmt==SgVlbiSessionInfo::OT_DBH)
578  {
579  // standalone mode, check for existing file:
580  if ((options.isForcedStandaloneMode || !setup.getHave2UpdateCatalog()) && !QFile::exists(options.databaseName))
581  {
582  QString sTmp(setup.path2(setup.getPath2DbhFiles()) + "/" + options.databaseName);
583  if (QFile::exists(sTmp))
584  options.databaseName = sTmp;
585  else
586  {
588  ": cannot proccess the database \"" + options.databaseName + "\": file does not exist");
589  return -1;
590  };
591  };
592  //
593  // extract the session name:
594  QRegExp reDbName(".*([0-9]{2}[A-Z]{3}[0-9]{2}[A-Z0-9]{1,2}).*");
595  QRegExp reDbVerName(".*([0-9]{2}[A-Z]{3}[0-9]{2}[A-Z0-9]{1,2})_V([0-9]{3}).*");
596  QString sVer("");
597  if (-1 < reDbVerName.indexIn(options.databaseName))
598  {
599  sessionName = reDbVerName.cap(1);
600  sVer = reDbVerName.cap(2);
601  }
602  else if (-1 < reDbName.indexIn(options.databaseName))
603  sessionName = reDbName.cap(1);
604  else
605  {
607  ": cannot proccess the database \"" + options.databaseName + "\": does not look like a "
608  "database name");
609  return -1;
610  };
611  }
612  else if (options.ofFmt==SgVlbiSessionInfo::OT_VDB)
613  {
614  // determine a name of a wrapper file:
615  QString path2wrapperFile("");
616  QString wrapperFileName("");
617  int version(0);
618  QRegExp reDatabaseName("^[0-9]{2}[A-Z]{3}[0-9]{2}[A-Z0-9]{1,2}$");
619  QRegExp reDatabaseVersionName("^[0-9]{2}[A-Z]{3}[0-9]{2}[A-Z0-9]{1,2}_V[0-9]{3}$");
620  bool isOk;
621  // ok, this is a wrapper file name:
622  if (options.databaseName.right(4) == ".wrp")
623  {
626  path2wrapperFile, wrapperFileName, sessionName, version);
627  }
628  else if (reDatabaseName.exactMatch(options.databaseName) || reDatabaseVersionName.exactMatch(options.databaseName))
629  {
632  path2wrapperFile, wrapperFileName, sessionName, version);
633  }
634  else
635  {
637  ": cannot proccess the database \"" + options.databaseName + "\": file does not exist");
638  return -1;
639  };
640  if (isOk)
641  options.databaseName = path2wrapperFile + "/" + wrapperFileName;
642  else
643  {
645  ": cannot proccess the database \"" + options.databaseName + "\": file does not exist");
646  return -1;
647  };
648  };
649  //
650  //
651  SgMJD startEpoch(SgMJD::currentMJD());
652  QApplication app(argc, argv, false);
653  SgLogger *alDriver;
654  //
655 /*
656  // adjust the logger:
657  if (settings->contains("Version/LibraryName"))
658  {
659  logger->setLogFacility(SgLogger::ERR,
660  settings->value("Logger/FacilityERR", logger->getLogFacility(SgLogger::ERR)).toUInt());
661  logger->setLogFacility(SgLogger::WRN,
662  settings->value("Logger/FacilityWRN", logger->getLogFacility(SgLogger::WRN)).toUInt());
663  logger->setLogFacility(SgLogger::INF,
664  settings->value("Logger/FacilityINF", logger->getLogFacility(SgLogger::INF)).toUInt());
665  logger->setLogFacility(SgLogger::DBG,
666  settings->value("Logger/FacilityDBG", logger->getLogFacility(SgLogger::DBG)).toUInt());
667  };
668  logger->setFileName(settings->value("Logger/FileName", "nuSolve.log").toString());
669  logger->setDirName(setup.getPath2Home());
670  logger->setCapacity(settings->value("Logger/Capacity", logger->getCapacity()).toInt());
671  logger->setIsStoreInFile(
672  settings->value("Logger/IsStoreInFile", logger->getIsStoreInFile()).toBool());
673  logger->setIsNeedTimeMark(
674  settings->value("Logger/IsNeedTimeMark", logger->getIsNeedTimeMark()).toBool());
675  //
676 */
677  //
678  //
679  alDriver = new SgLogger(800, setup.getHave2SavePerSessionLog(), "drv-unnamed.log");
681  alDriver->setIsNeedTimeMark(true);
682  alDriver->setIsMute(true);
683  alDriver->setLogFacility(SgLogger::ERR, 0xFFFFFFFF);
684  alDriver->setLogFacility(SgLogger::WRN, 0xFFFFFFFF);
685  alDriver->setLogFacility(SgLogger::INF, 0xFFFFFFFF);
686  alDriver->setLogFacility(SgLogger::DBG, 0);
688  logger->attachSupplementLog("Driver", alDriver);
689  alDriver->setFileName(sessionName + ".log");
690  alDriver->rmLogFile();
691 
693  ": starting command line version");
694 
696  ": Library ID: " + libraryVersion.name());
698  ": Driver ID: " + nuSolveVersion.name());
699 
701  ": Host ID: " + setup.identities().getMachineNodeName() +
702  " (Hw: " + setup.identities().getMachineMachineName() +
703  "; Sw: " + setup.identities().getMachineRelease() +
704  " version of " + setup.identities().getMachineSysName() + ")");
705 
707  ": User ID: " + setup.identities().getUserName() +
710  ": User command: \"" + command + "\"");
712  ": Input data : " + options.databaseName);
713 
714  rc = processSession(options.databaseName, options.ofFmt);
715 
716  if (rc==0)
717  {
718  // report elapsed time:
719  SgMJD finisEpoch=SgMJD::currentMJD();
721  ": the elapsed time to process the session " + sessionName + " is: " +
722  interval2Str(finisEpoch - startEpoch) + " (" +
723  QString("").sprintf("%.2f", (finisEpoch - startEpoch)*86400.0) + " sec)");
724  }
725  else
727  ": processing of the database " + options.databaseName + " has failed");
728 
729  alDriver->clearSpool();
730  logger->detachSupplementLog("Driver");
731  delete alDriver;
732  //
733  logger->clearSpool();
734  logger->setIsStoreInFile(false);
735  //
736  //
737  }
738  else // =================== GUI part starts here: ===================
739  {
740  //
741  //
742  QApplication app(argc, argv);
743  QIcon appIcon(QPixmap(":/images/icon_2.5.png"));
744  app.setWindowIcon(appIcon);
745  //
746  if (options.settings->contains("Setup/GuiStyle"))
747  {
748  QString appStyle(options.settings->value("Setup/GuiStyle").toString());
749  if (!appStyle.contains("GTK")) // it crashes with "GTK+" style
750  {
751  QApplication::setStyle(appStyle);
752  QFont font("Sans Serif", 10);
753  if (options.settings->contains("Setup/GuiFont"))
754  font = options.settings->value("Setup/GuiFont").value<QFont>();
755  QApplication::setFont(font);
756  };
757  };
758  //
759  //--
760  if (options.have2ForceWizard || options.shouldInvokeSystemWideWizard ||
761  options.settings->value("Version/StartUpWizard", 0).toInt() < NsStartupWizard::serialNumber())
762  {
763  if (options.shouldInvokeSystemWideWizard)
764  {
765  if (!options.have2UseAltSetup)
766  {
767  QSettings *swSettings =
768  new QSettings(QSettings::SystemScope, origOrgName, origAppName);
769  if (!swSettings->isWritable())
770  {
772  ": cannot write system wide config");
773  delete swSettings;
774  return 2;
775  };
776  delete options.settings;
777  options.settings = swSettings;
778  }
779  else
781  ": using an alternative config name, system wide config edit request ignored");
782  };
783  //
784  NsStartupWizard startup(isFirstRun, options.have2ForceWizard, options.shouldInvokeSystemWideWizard);
785  if ((rc=startup.exec())==0)
786  {
787  delete options.settings;
788  logger->clearSpool();
789  return rc;
790  };
791  //
792  // save if user pressed "Finish":
793  options.settings->setValue("Version/StartUpWizard", startup.serialNumber());
795  };
796  //
797  mainWindow = new NsMainWindow;
798  mainWindow->show();
799  rc = app.exec();
800  delete mainWindow;
801  };
802  //
803  //
804  //
805  //
806  // roll back to previous values:
807  if (options.isForcedCatalogMode)
809  if (options.isForcedStandaloneMode)
811 
812  // save user values:
814 
815  delete options.settings;
816  return rc;
817 };
818 
819 
820 
821 //
822 void checkSettings(QSettings& settings)
823 {
824  if (settings.contains("Version/LibraryName"))
825  {
826  QString savedSoftName;
827  QString savedCodeName;
828  int savedMajorNum, savedMinorNum, savedTeenyNum, savedSettingsVersion;
829 
830  savedSoftName = settings.value("Version/LibraryName", "N/A").toString();
831  savedCodeName = settings.value("Version/LibraryComments", "N/A").toString();
832  savedMajorNum = settings.value("Version/LibraryMajor", 0).toInt();
833  savedMinorNum = settings.value("Version/LibraryMinor", 0).toInt();
834  savedTeenyNum = settings.value("Version/LibraryTeeny", 0).toInt();
835  storedLibraryVersion.setSoftwareName(savedSoftName);
836  storedLibraryVersion.setMajorNumber(savedMajorNum);
837  storedLibraryVersion.setMinorNumber(savedMinorNum);
838  storedLibraryVersion.setTeenyNumber(savedTeenyNum);
839  storedLibraryVersion.setCodeName(savedCodeName);
840 
841  savedSoftName = settings.value("Version/nuSolveName", "N/A").toString();
842  savedCodeName = settings.value("Version/nuSolveComments", "N/A").toString();
843  savedMajorNum = settings.value("Version/nuSolveMajor", 0).toInt();
844  savedMinorNum = settings.value("Version/nuSolveMinor", 0).toInt();
845  savedTeenyNum = settings.value("Version/nuSolveTeeny", 0).toInt();
846  storedNuSolveVersion.setSoftwareName(savedSoftName);
847  storedNuSolveVersion.setMajorNumber(savedMajorNum);
848  storedNuSolveVersion.setMinorNumber(savedMinorNum);
849  storedNuSolveVersion.setTeenyNumber(savedTeenyNum);
850  storedNuSolveVersion.setCodeName(savedCodeName);
851 
854  ": you are using an obsolete version, " + libraryVersion.name() + ", of the Library "
855  "than it was before: " + storedLibraryVersion.name());
858  ": you are using an obsolete version, " + nuSolveVersion.name() + ", of the software "
859  "than it was before: " + storedNuSolveVersion.name());
860 
861  savedSettingsVersion = settings.value("Version/nuSolveSettings", 0).toInt();
862 
863  loadSettings(settings);
864  if (savedSettingsVersion < currentSettingsVersion) // do something:
865  {
866  // correct PWL model:
867  if (savedSettingsVersion == 0)
868  {
869  int iMode;
870  iMode = settings.value("Config/EstimatorPwlMode", config.getPwlMode()).toInt();
871  switch (iMode)
872  {
873  case 0:
875  break;
876  case 1:
878  break;
879  default:
881  ": unrecognized PWL mode: " + QString("").setNum(iMode));
882  };
884  ": the PWL mode has been adjusted");
885  };
886  // something else:
887 
888  };
889 
890  }
891  else
892  {
893  loadSettingsOldStyle(settings);
894  rmOldStyleSettings(settings);
895  };
896 };
897 
898 
899 
900 //
901 void loadSettings(QSettings& settings)
902 {
903  // setup.identities:
905  settings.value("Identities/UserName",
906  setup.identities().getUserName()).toString());
908  settings.value("Identities/UserEmailAddress",
909  setup.identities().getUserEmailAddress()).toString());
911  settings.value("Identities/UserDefaultInitials",
912  setup.identities().getUserDefaultInitials()).toString());
914  settings.value("Identities/AcFullName",
915  setup.identities().getAcFullName()).toString());
917  settings.value("Identities/AcAbbreviatedName",
918  setup.identities().getAcAbbrevName()).toString());
920  settings.value("Identities/AcShortAbbreviatedName",
921  setup.identities().getAcAbbName()).toString());
922 
923  // setup:
924  // Pathes:
926  settings.value("Setup/Path2Home",
927  setup.getPath2Home()).toString());
929  settings.value("Setup/Path2CatalogInterfaceExec",
930  setup.getPath2CatNuInterfaceExec()).toString());
932  settings.value("Setup/Path2DbhFiles",
933  setup.getPath2DbhFiles()).toString());
935  settings.value("Setup/Path2OpenDbFiles",
936  setup.getPath2VgosDbFiles()).toString());
938  settings.value("Setup/Path2VgosDaFiles",
939  setup.getPath2VgosDaFiles()).toString());
941  settings.value("Setup/Path2APrioriFiles",
942  setup.getPath2APrioriFiles()).toString());
944  settings.value("Setup/Path2MasterFiles",
945  setup.getPath2MasterFiles()).toString());
947  settings.value("Setup/Path2SpoolfileOutput",
948  setup.getPath2SpoolFileOutput()).toString());
950  settings.value("Setup/Path2NotUsedObsFileOutput",
951  setup.getPath2NotUsedObsFileOutput()).toString());
953  settings.value("Setup/Path2ReportsOutput",
954  setup.getPath2ReportOutput()).toString());
956  settings.value("Setup/Path2NgsFilesOutput",
957  setup.getPath2NgsOutput()).toString());
959  settings.value("Setup/Path2PlotterFilesOutput",
960  setup.getPath2PlotterOutput()).toString());
962  settings.value("Setup/Path2IntermediateResults",
963  setup.getPath2IntermediateResults()).toString());
965  settings.value("Setup/AutoSavingMode",
966  setup.getAutoSavingMode()).toInt()));
968  settings.value("Setup/Have2UpdateCatalog",
969  setup.getHave2UpdateCatalog()).toBool());
971  settings.value("Setup/Have2AlterSessionCode",
972  setup.getHave2MaskSessionCode()).toBool());
974  settings.value("Setup/Have2KeepSpoolfileReports",
975  setup.getHave2KeepSpoolFileReports()).toBool());
977  settings.value("Setup/Have2WarnClosingWindow",
978  setup.getHave2WarnCloseWindow()).toBool());
980  settings.value("Setup/IsShortScreen",
981  setup.getIsShortScreen()).toBool());
983  settings.value("Setup/MainWinWidth",
984  setup.getMainWinWidth()).toInt());
986  settings.value("Setup/MainWinHeight",
987  setup.getMainWinHeight()).toInt());
989  settings.value("Setup/MainWinPosX",
990  setup.getMainWinPosX()).toInt());
992  settings.value("Setup/MainWinPosY",
993  setup.getMainWinPosY()).toInt());
994 
996  settings.value("Setup/SeWinWidth",
997  setup.getSeWinWidth()).toInt());
999  settings.value("Setup/SeWinHeight",
1000  setup.getSeWinHeight()).toInt());
1002  settings.value("Setup/Have2AutoloadAllBands",
1003  setup.getHave2AutoloadAllBands()).toBool());
1005  settings.value("Setup/IsBandPlotPerSrcView",
1006  setup.getIsBandPlotPerSrcView()).toBool());
1008  settings.value("Setup/PlotterOutputFormat",
1009  setup.getPlotterOutputFormat()).toInt()));
1011  settings.value("Setup/LnfsFileName",
1012  setup.getLnfsFileName()).toString());
1014  settings.value("Setup/LnfsOriginType",
1015  setup.getLnfsOriginType()).toInt()));
1017  settings.value("Setup/LnfsIsThroughCatalog",
1018  setup.getLnfsIsThroughCatalog()).toBool());
1020  settings.value("Setup/Path2AuxLogs",
1021  setup.getPath2AuxLogs()).toString());
1023  settings.value("Setup/Have2SavePerSessionLog",
1024  setup.getHave2SavePerSessionLog()).toBool());
1026  settings.value("Setup/ExecExternalCommand",
1027  setup.getExecExternalCommand()).toBool());
1029  settings.value("Setup/ExternalCommand",
1030  setup.getExternalCommand()).toString());
1031 
1032 
1033  // config:
1035  settings.value("Config/QualityCodeThreshold",
1036  config.getQualityCodeThreshold()).toInt());
1038  settings.value("Config/GoodQualityCodeAtStartup",
1039  config.getGoodQualityCodeAtStartup()).toInt());
1041  settings.value("Config/UseGoodQualityCodeAtStartup",
1044  settings.value("Config/DoWeightCorrection",
1045  config.getDoWeightCorrection()).toBool());
1047  settings.value("Config/UseQualityCodeG",
1048  config.getUseQualityCodeG()).toBool());
1050  settings.value("Config/UseQualityCodeH",
1051  config.getUseQualityCodeH()).toBool());
1053  settings.value("Config/IsSolveCompatible",
1054  config.getIsSolveCompatible()).toBool());
1056  settings.value("Config/UseDynamicClockBreaks",
1057  config.getUseDynamicClockBreaks()).toBool());
1059  settings.value("Config/UseSolveObsSuppresionFlags",
1062  settings.value("Config/UseExternalWeights",
1063  config.getUseExternalWeights()).toBool());
1065  settings.value("Config/WeightCorrectionMode",
1066  config.getWcMode()).toInt()));
1068  settings.value("Config/ExternalWeightsFileName",
1069  config.getExtWeightsFileName()).toString());
1071  settings.value("Config/InitAuxSigma4Delay",
1072  config.getInitAuxSigma4Delay()).toDouble());
1074  settings.value("Config/InitAuxSigma4Rate",
1075  config.getInitAuxSigma4Rate()).toDouble());
1077  settings.value("Config/MinAuxSigma4Delay",
1078  config.getMinAuxSigma4Delay()).toDouble());
1080  settings.value("Config/MinAuxSigma4Rate",
1081  config.getMinAuxSigma4Rate()).toDouble());
1083  settings.value("Config/EstimatorPwlMode",
1084  config.getPwlMode()).toInt()));
1086  settings.value("Config/OutlierProcessingMode",
1087  config.getOpMode()).toInt()));
1089  settings.value("Config/OutlierProcessingAction",
1090  config.getOpAction()).toInt()));
1092  settings.value("Config/OutlierProcessingThreshold",
1093  config.getOpThreshold()).toDouble());
1095  settings.value("Config/OutlierProcessingIterationsLimit",
1096  config.getOpIterationsLimit()).toInt());
1098  settings.value("Config/OutlierProcessingSuppressWC",
1101  settings.value("Config/OutlierProcessingIsSolveCompatible",
1102  config.getOpIsSolveCompatible()).toBool());
1104  settings.value("Config/OutlierProcessingHave2NormalizeResiduals",
1105  config.getOpHave2NormalizeResiduals()).toBool());
1107  settings.value("Config/DoIono4Sbd",
1108  config.getDoIonoCorrection4SBD()).toBool());
1110  settings.value("Config/DoClockBreakDetectionMode_1",
1113  settings.value("Config/DoOutlierEliminationMode_1",
1116  settings.value("Config/IsActiveBandFollowsTab",
1117  config.getIsActiveBandFollowsTab()).toBool());
1119  settings.value("Config/IsObservableFollowsPlot",
1120  config.getIsObservableFollowsPlot()).toBool());
1122  settings.value("Config/UseExternalAPrioriSitePostions",
1125  settings.value("Config/UseExternalAPrioriSiteVelocities",
1128  settings.value("Config/UseExternalAPrioriSourcePostions",
1131  settings.value("Config/UseExternalAPrioriSourceSsm",
1132  config.getUseExtAPrioriSourceSsm()).toBool());
1134  settings.value("Config/UseExternalAPrioriEop",
1135  config.getUseExtAPrioriErp()).toBool());
1137  settings.value("Config/UseExternalAPrioriAxisOffsets",
1138  config.getUseExtAPrioriAxisOffsets()).toBool());
1140  settings.value("Config/UseExternalAPrioriHighFrequencyErp",
1141  config.getUseExtAPrioriHiFyErp()).toBool());
1143  settings.value("Config/UseExternalAPrioriMeanGradients",
1146  settings.value("Config/ExternalAPrioriSitePostionsFileName",
1149  settings.value("Config/ExternalAPrioriSiteVelocitiesFileName",
1152  settings.value("Config/ExternalAPrioriSourcePostionsFileName",
1155  settings.value("Config/ExternalAPrioriSourceSsmFileName",
1156  config.getExtAPrioriSourceSsmFileName()).toString());
1158  settings.value("Config/ExternalAPrioriEopFileName",
1159  config.getExtAPrioriErpFileName()).toString());
1161  settings.value("Config/ExternalAPrioriAxisOffsetFileName",
1164  settings.value("Config/ExternalAPrioriHighFrequencyErpFileName",
1165  config.getExtAPrioriHiFyErpFileName()).toString());
1167  settings.value("Config/ExternalAPrioriMeanGradientsFileName",
1170  settings.value("Config/EccentricitiesFileName",
1171  config.getEccentricitiesFileName()).toString());
1173  settings.value("Config/Have2ApplySourceSsm",
1174  config.getHave2ApplySourceSsm()).toBool());
1175 
1177  settings.value("Config/FlybyTropZenithMap",
1178  config.getFlybyTropZenithMap()).toInt()));
1179 
1181  settings.value("Config/Have2ApplyOceanTidesContribution",
1184  settings.value("Config/Have2ApplyPoleTideContribution",
1185  config.getHave2ApplyPoleTideContrib()).toBool());
1187  settings.value("Config/Have2ApplyEarthTideContribution",
1190  settings.value("Config/Have2ApplyWobblePxContribution",
1191  config.getHave2ApplyPxContrib()).toBool());
1193  settings.value("Config/Have2ApplyWobblePyContribution",
1194  config.getHave2ApplyPyContrib()).toBool());
1196  settings.value("Config/Have2ApplyAxisOffsetContribution",
1199  settings.value("Config/Have2ApplyNutationHighFrequencyContribution",
1202  settings.value("Config/Have2ApplyPolarMotionHighFrequencyContribution",
1205  settings.value("Config/Have2ApplyUT1HighFrequencyContribution",
1208  settings.value("Config/Have2ApplyFeedCorrectionContribution",
1209  config.getHave2ApplyFeedCorrContrib()).toBool());
1211  settings.value("Config/Have2ApplyTiltRemvrContribution",
1214  settings.value("Config/Have2ApplyNielHydrostaticTroposphereContribution",
1215  config.getHave2ApplyNdryContrib()).toBool());
1217  settings.value("Config/Have2ApplyNielWetTroposphereContribution",
1218  config.getHave2ApplyNwetContrib()).toBool());
1220  settings.value("Config/Have2ApplyUnphaseCalibrationContribution",
1223  settings.value("Config/Have2ApplyOceanPoleTideContribution",
1226  settings.value("Config/Have2ApplyGpsIonoContrib",
1227  config.getHave2ApplyGpsIonoContrib()).toBool());
1229  settings.value("Config/Have2ApplyPolarMotionLibrationContribution",
1232  settings.value("Config/Have2ApplyUT1LibrationContribution",
1235  settings.value("Config/Have2ApplyOldOceanTidesContribution",
1238  settings.value("Config/Have2ApplyOldPoleTideContribution",
1241  settings.value("Config/IsNoviceUser",
1242  config.getIsNoviceUser()).toBool());
1244  settings.value("Config/LastModifiedNetId",
1245  config.getLastModifiedNetId()).toString());
1246  //
1247  // adjustments:
1250  {
1254  ": loadSettings(): using troposphere correction contributions were turned off, "
1255  "use flyby values instead");
1256  };
1259  {
1263  ": loadSettings(): the flyby troposphere mapping function is not set, "
1264  "the contributions were turned on");
1265  };
1266 
1267 
1268  //
1269  //
1270  int size=settings.beginReadArray("Config/AutomaticProcessingByNetId");
1271  // remove default set up:
1272  if (size)
1273  config.apByNetId().clear();
1274  // load saved data:
1275  for (int i=0; i<size; ++i)
1276  {
1277  settings.setArrayIndex(i);
1279  ap;
1280  QString netId;
1281  netId = settings.value("networkId").toString();
1282  ap.doSessionSetup_ = settings.value("doSessionSetup", ap.doSessionSetup_)
1283  .toBool();
1284  ap.doIonoCorrection4SBD_ = settings.value("doIonoCorrection4SBD", ap.doIonoCorrection4SBD_)
1285  .toBool();
1286  ap.doAmbigResolution_ = settings.value("doAmbigResolution", ap.doAmbigResolution_)
1287  .toBool();
1288  ap.doClockBreaksDetection_= settings.value("doClockBreaksDetection", ap.doClockBreaksDetection_)
1289  .toBool();
1290  ap.doIonoCorrection4All_ = settings.value("doIonoCorrection4All", ap.doIonoCorrection4All_)
1291  .toBool();
1292  ap.doOutliers_ = settings.value("doOutliers", ap.doOutliers_)
1293  .toBool();
1294  ap.doWeights_ = settings.value("doWeights", ap.doWeights_)
1295  .toBool();
1296  ap.doReportNotUsedData_ = settings.value("doReportNotUsedData", ap.doReportNotUsedData_)
1297  .toBool();
1299  settings.value("FinalSolution", ap.finalSolution_)
1300  .toInt());
1301  config.apByNetId()[netId] = ap;
1302  };
1303  settings.endArray();
1304  //
1305 };
1306 
1307 
1308 
1309 //
1310 void loadSettingsOldStyle(QSettings& settings)
1311 {
1312  // setup.identities:
1314  settings.value("Identities/User name",
1315  setup.identities().getUserName()).toString());
1317  settings.value("Identities/User email address",
1318  setup.identities().getUserEmailAddress()).toString());
1320  settings.value("Identities/User default initials",
1321  setup.identities().getUserDefaultInitials()).toString());
1323  settings.value("Identities/Analysis center full name",
1324  setup.identities().getAcFullName()).toString());
1326  settings.value("Identities/Analysis center abbreviated name",
1327  setup.identities().getAcAbbrevName()).toString());
1329  settings.value("Identities/Analysis center short abbreviated name",
1330  setup.identities().getAcAbbName()).toString());
1331 
1332  // setup:
1333  // Pathes:
1335  settings.value("Setup/Path to catalog interface exec",
1336  setup.getPath2CatNuInterfaceExec()).toString());
1338  settings.value("Setup/Path to DBH files",
1339  setup.getPath2DbhFiles()).toString());
1341  settings.value("Setup/Path to a priori files",
1342  setup.getPath2APrioriFiles()).toString());
1344  settings.value("Setup/Path to master files",
1345  setup.getPath2MasterFiles()).toString());
1347  settings.value("Setup/Path to spoolfile output",
1348  setup.getPath2SpoolFileOutput()).toString());
1350  settings.value("Setup/Path to reports output",
1351  setup.getPath2ReportOutput()).toString());
1353  settings.value("Setup/Path to NGS files output",
1354  setup.getPath2NgsOutput()).toString());
1356  settings.value("Setup/Have to update catalog",
1357  setup.getHave2UpdateCatalog()).toBool());
1359  settings.value("Setup/Have to alter session code",
1360  setup.getHave2MaskSessionCode()).toBool());
1362  settings.value("Setup/Have to keep spoolfile reports",
1363  setup.getHave2KeepSpoolFileReports()).toBool());
1364  // GUI:
1366  settings.value("Setup/Have to warn closing window",
1367  setup.getHave2WarnCloseWindow()).toBool());
1368 
1369  // config:
1371  settings.value("Config/Do weight correction",
1372  config.getDoWeightCorrection()).toBool());
1374  settings.value("Config/Is SOLVE compatible",
1375  config.getIsSolveCompatible()).toBool());
1377  settings.value("Config/Use external weights",
1378  config.getUseExternalWeights()).toBool());
1380  settings.value("Config/Weight correction mode",
1381  config.getWcMode()).toInt()));
1383  settings.value("Config/External weights file name",
1384  config.getExtWeightsFileName()).toString());
1386  settings.value("Config/EstimatorPwlMode",
1387  config.getPwlMode()).toInt()));
1389  settings.value("Config/Outlier processing mode",
1390  config.getOpMode()).toInt()));
1392  settings.value("Config/Outlier processing action",
1393  config.getOpAction()).toInt()));
1395  settings.value("Config/Outlier processing threshold",
1396  config.getOpThreshold()).toDouble());
1398  settings.value("Config/Outlier processing iterations limit",
1399  config.getOpIterationsLimit()).toInt());
1401  settings.value("Config/Outlier processing WC suppresion",
1404  settings.value("Config/Do iono 4SBD",
1405  config.getDoIonoCorrection4SBD()).toBool());
1407  settings.value("Config/Do CB Mode 1",
1410  settings.value("Config/Do OP Mode 1",
1413  settings.value("Config/Is active band follows tab",
1414  config.getIsActiveBandFollowsTab()).toBool());
1416  settings.value("Config/Is observable follows plotter",
1417  config.getIsObservableFollowsPlot()).toBool());
1419  settings.value("Config/Use external a priori sites postions",
1422  settings.value("Config/Use external a priori sites velocities",
1425  settings.value("Config/Use external a priori sources positions",
1428  settings.value("Config/Use external a priori axis offsets",
1429  config.getUseExtAPrioriAxisOffsets()).toBool());
1431  settings.value("Config/Use external a priori high frequency ERP",
1432  config.getUseExtAPrioriHiFyErp()).toBool());
1434  settings.value("Config/Use external a priori mean gradients",
1437  settings.value("Config/External a priori sites postions file name",
1440  settings.value("Config/External a priori sites velocities file name",
1443  settings.value("Config/External a priori sources positions file name",
1446  settings.value("Config/External a priori axis offsets file name",
1449  settings.value("Config/External a priori high frequency ERP file name",
1450  config.getExtAPrioriHiFyErpFileName()).toString());
1452  settings.value("Config/External a priori mean gradients file name",
1455  settings.value("Config/Have to apply ocean tides contribution",
1458  settings.value("Config/Have to apply pole tide contribution",
1459  config.getHave2ApplyPoleTideContrib()).toBool());
1461  settings.value("Config/Have to apply earth tide contribution",
1464  settings.value("Config/Have to apply wobble Px contribution",
1465  config.getHave2ApplyPxContrib()).toBool());
1467  settings.value("Config/Have to apply wobble Py contribution",
1468  config.getHave2ApplyPyContrib()).toBool());
1470  settings.value("Config/Have to apply axis offset contribution",
1473  settings.value("Config/Have to apply nutation high frequency contribution",
1476  settings.value("Config/Have to apply polar motion high frequency contribution",
1479  settings.value("Config/Have to apply UT1 high frequency contribution",
1482  settings.value("Config/Have to apply feed correction contribution",
1483  config.getHave2ApplyFeedCorrContrib()).toBool());
1485  settings.value("Config/Have to apply tilt remvr contribution",
1488  settings.value("Config/Have to apply Niel hydrostatic troposphere contribution",
1489  config.getHave2ApplyNdryContrib()).toBool());
1491  settings.value("Config/Have to apply Niel wet troposphere contribution",
1492  config.getHave2ApplyNwetContrib()).toBool());
1494  settings.value("Config/Have to apply unphase calibration contribution",
1496 };
1497 
1498 
1499 
1500 //
1501 void rmOldStyleSettings(QSettings& settings)
1502 {
1503  // setup.identities:
1504  settings.remove("Identities/User name");
1505  settings.remove("Identities/User email address");
1506  settings.remove("Identities/User default initials");
1507  settings.remove("Identities/Analysis center full name");
1508  settings.remove("Identities/Analysis center abbreviated name");
1509  settings.remove("Identities/Analysis center short abbreviated name");
1510 
1511  // setup:
1512  // Pathes:
1513  settings.remove("Setup/Path to catalog interface exec");
1514  settings.remove("Setup/Path to DBH files");
1515  settings.remove("Setup/Path to a priori files");
1516  settings.remove("Setup/Path to master files");
1517  settings.remove("Setup/Path to spoolfile output");
1518  settings.remove("Setup/Path to reports output");
1519  settings.remove("Setup/Path to NGS files output");
1520  settings.remove("Setup/Have to update catalog");
1521  settings.remove("Setup/Have to alter session code");
1522  settings.remove("Setup/Have to keep spoolfile reports");
1523  // GUI:
1524  settings.remove("Setup/Have to warn closing window");
1525 
1526  // config:
1527  settings.remove("Config/Do weight correction");
1528  settings.remove("Config/Is SOLVE compatible");
1529  settings.remove("Config/Use external weights");
1530  settings.remove("Config/Weight correction mode");
1531  settings.remove("Config/External weights file name");
1532  settings.remove("Config/Outlier processing mode");
1533  settings.remove("Config/Outlier processing action");
1534  settings.remove("Config/Outlier processing threshold");
1535  settings.remove("Config/Outlier processing iterations limit");
1536  settings.remove("Config/Outlier processing WC suppresion");
1537  settings.remove("Config/Do iono 4SBD");
1538  settings.remove("Config/Do CB Mode 1");
1539  settings.remove("Config/Do OP Mode 1");
1540  settings.remove("Config/Is active band follows tab");
1541  settings.remove("Config/Is observable follows plotter");
1542  settings.remove("Config/Use external a priori sites postions");
1543  settings.remove("Config/Use external a priori sites velocities");
1544  settings.remove("Config/Use external a priori sources positions");
1545  settings.remove("Config/Use external a priori axis offsets");
1546  settings.remove("Config/Use external a priori high frequency ERP");
1547  settings.remove("Config/Use external a priori mean gradients");
1548  settings.remove("Config/External a priori sites postions file name");
1549  settings.remove("Config/External a priori sites velocities file name");
1550  settings.remove("Config/External a priori sources positions file name");
1551  settings.remove("Config/External a priori axis offsets file name");
1552  settings.remove("Config/External a priori high frequency ERP file name");
1553  settings.remove("Config/External a priori mean gradients file name");
1554  settings.remove("Config/Have to apply ocean tides contribution");
1555  settings.remove("Config/Have to apply pole tide contribution");
1556  settings.remove("Config/Have to apply earth tide contribution");
1557  settings.remove("Config/Have to apply wobble Px contribution");
1558  settings.remove("Config/Have to apply wobble Py contribution");
1559  settings.remove("Config/Have to apply axis offset contribution");
1560  settings.remove("Config/Have to apply nutation high frequency contribution");
1561  settings.remove("Config/Have to apply polar motion high frequency contribution");
1562  settings.remove("Config/Have to apply UT1 high frequency contribution");
1563  settings.remove("Config/Have to apply feed correction contribution");
1564  settings.remove("Config/Have to apply tilt remvr contribution");
1565  settings.remove("Config/Have to apply Niel hydrostatic troposphere contribution");
1566  settings.remove("Config/Have to apply Niel wet troposphere contribution");
1567  settings.remove("Config/Have to apply unphase calibration contribution");
1568 };
1569 
1570 
1571 
1572 //
1573 void saveSettings(QSettings& settings, bool shouldInvokeSystemWideWizard)
1574 {
1575  // setup.identities:
1576  if (!shouldInvokeSystemWideWizard)
1577  {
1578  settings.setValue("Identities/UserName",
1580  settings.setValue("Identities/UserEmailAddress",
1582  settings.setValue("Identities/UserDefaultInitials",
1584  };
1585  settings.setValue("Identities/AcFullName",
1587  settings.setValue("Identities/AcAbbreviatedName",
1589  settings.setValue("Identities/AcShortAbbreviatedName",
1591  // setup:
1592  // Pathes:
1593  if (!shouldInvokeSystemWideWizard)
1594  {
1595  settings.setValue("Setup/Path2Home",
1596  setup.getPath2Home());
1597  };
1598  settings.setValue("Setup/Path2CatalogInterfaceExec",
1600  settings.setValue("Setup/Path2DbhFiles",
1602  settings.setValue("Setup/Path2OpenDbFiles",
1604  settings.setValue("Setup/Path2VgosDaFiles",
1606  settings.setValue("Setup/Path2APrioriFiles",
1608  settings.setValue("Setup/Path2MasterFiles",
1610  settings.setValue("Setup/Path2SpoolfileOutput",
1612  settings.setValue("Setup/Path2NotUsedObsFileOutput",
1614  settings.setValue("Setup/Path2ReportsOutput",
1616  settings.setValue("Setup/Path2NgsFilesOutput",
1618  settings.setValue("Setup/Path2PlotterFilesOutput",
1620  settings.setValue("Setup/Path2IntermediateResults",
1622 
1623  if (!shouldInvokeSystemWideWizard)
1624  {
1625  settings.setValue("Setup/AutoSavingMode",
1627  settings.setValue("Setup/Have2UpdateCatalog",
1629  settings.setValue("Setup/Have2AlterSessionCode",
1631  settings.setValue("Setup/Have2KeepSpoolfileReports",
1633  settings.setValue("Setup/Have2WarnClosingWindow",
1635  settings.setValue("Setup/IsShortScreen",
1637  settings.setValue("Setup/MainWinWidth",
1639  settings.setValue("Setup/MainWinHeight",
1641  settings.setValue("Setup/MainWinPosX",
1642  setup.getMainWinPosX());
1643  settings.setValue("Setup/MainWinPosY",
1644  setup.getMainWinPosY());
1645 
1646  settings.setValue("Setup/SeWinWidth",
1647  setup.getSeWinWidth());
1648  settings.setValue("Setup/SeWinHeight",
1649  setup.getSeWinHeight());
1650  settings.setValue("Setup/Have2AutoloadAllBands",
1652  settings.setValue("Setup/IsBandPlotPerSrcView",
1654  settings.setValue("Setup/PlotterOutputFormat",
1656  settings.setValue("Setup/LnfsFileName",
1658  settings.setValue("Setup/LnfsOriginType",
1660  settings.setValue("Setup/LnfsIsThroughCatalog",
1662  };
1663  settings.setValue("Setup/Path2AuxLogs",
1665  if (!shouldInvokeSystemWideWizard)
1666  {
1667  settings.setValue("Setup/Have2SavePerSessionLog",
1669  settings.setValue("Setup/ExecExternalCommand",
1671  settings.setValue("Setup/ExternalCommand",
1673  };
1674 
1675  // config:
1676  if (!shouldInvokeSystemWideWizard)
1677  {
1678  settings.setValue("Config/QualityCodeThreshold",
1680  settings.setValue("Config/GoodQualityCodeAtStartup",
1682  settings.setValue("Config/UseGoodQualityCodeAtStartup",
1684  settings.setValue("Config/DoWeightCorrection",
1686  settings.setValue("Config/UseQualityCodeG",
1688  settings.setValue("Config/UseQualityCodeH",
1690  settings.setValue("Config/IsSolveCompatible",
1692  settings.setValue("Config/UseDynamicClockBreaks",
1694  settings.setValue("Config/UseSolveObsSuppresionFlags",
1696  settings.setValue("Config/UseExternalWeights",
1698  settings.setValue("Config/WeightCorrectionMode",
1699  config.getWcMode());
1700  settings.setValue("Config/ExternalWeightsFileName",
1702  settings.setValue("Config/InitAuxSigma4Delay",
1704  settings.setValue("Config/InitAuxSigma4Rate",
1706  settings.setValue("Config/MinAuxSigma4Delay",
1708  settings.setValue("Config/MinAuxSigma4Rate",
1710  settings.setValue("Config/EstimatorPwlMode",
1711  config.getPwlMode());
1712  settings.setValue("Config/OutlierProcessingMode",
1713  config.getOpMode());
1714  settings.setValue("Config/OutlierProcessingAction",
1715  config.getOpAction());
1716  settings.setValue("Config/OutlierProcessingThreshold",
1718  settings.setValue("Config/OutlierProcessingIterationsLimit",
1720  settings.setValue("Config/OutlierProcessingSuppressWC",
1722  settings.setValue("Config/OutlierProcessingIsSolveCompatible",
1724  settings.setValue("Config/OutlierProcessingHave2NormalizeResiduals",
1726  settings.setValue("Config/DoIono4Sbd",
1728  settings.setValue("Config/DoClockBreakDetectionMode_1",
1730  settings.setValue("Config/DoOutlierEliminationMode_1",
1732  settings.setValue("Config/IsActiveBandFollowsTab",
1734  settings.setValue("Config/IsObservableFollowsPlot",
1736  settings.setValue("Config/UseExternalAPrioriSitePostions",
1738  settings.setValue("Config/UseExternalAPrioriSiteVelocities",
1740  settings.setValue("Config/UseExternalAPrioriSourcePostions",
1742  settings.setValue("Config/UseExternalAPrioriSourceSsm",
1744  settings.setValue("Config/UseExternalAPrioriEop",
1746  settings.setValue("Config/UseExternalAPrioriAxisOffsets",
1748  settings.setValue("Config/UseExternalAPrioriHighFrequencyErp",
1750  settings.setValue("Config/UseExternalAPrioriMeanGradients",
1752  settings.setValue("Config/ExternalAPrioriSitePostionsFileName",
1754  settings.setValue("Config/ExternalAPrioriSiteVelocitiesFileName",
1756  settings.setValue("Config/ExternalAPrioriSourcePostionsFileName",
1758  settings.setValue("Config/ExternalAPrioriSourceSsmFileName",
1760  settings.setValue("Config/ExternalAPrioriEopFileName",
1762  settings.setValue("Config/ExternalAPrioriAxisOffsetFileName",
1764  settings.setValue("Config/ExternalAPrioriHighFrequencyErpFileName",
1766  settings.setValue("Config/ExternalAPrioriMeanGradientsFileName",
1768  settings.setValue("Config/EccentricitiesFileName",
1770  settings.setValue("Config/Have2ApplySourceSsm",
1772 
1773  settings.setValue("Config/FlybyTropZenithMap",
1775 
1776  settings.setValue("Config/Have2ApplyOceanTidesContribution",
1778  settings.setValue("Config/Have2ApplyPoleTideContribution",
1780  settings.setValue("Config/Have2ApplyEarthTideContribution",
1782  settings.setValue("Config/Have2ApplyWobblePxContribution",
1784  settings.setValue("Config/Have2ApplyWobblePyContribution",
1786  settings.setValue("Config/Have2ApplyAxisOffsetContribution",
1788  settings.setValue("Config/Have2ApplyNutationHighFrequencyContribution",
1790  settings.setValue("Config/Have2ApplyPolarMotionHighFrequencyContribution",
1792  settings.setValue("Config/Have2ApplyUT1HighFrequencyContribution",
1794  settings.setValue("Config/Have2ApplyFeedCorrectionContribution",
1796  settings.setValue("Config/Have2ApplyTiltRemvrContribution",
1798  settings.setValue("Config/Have2ApplyNielHydrostaticTroposphereContribution",
1800  settings.setValue("Config/Have2ApplyNielWetTroposphereContribution",
1802  settings.setValue("Config/Have2ApplyUnphaseCalibrationContribution",
1804  settings.setValue("Config/Have2ApplyOceanPoleTideContribution",
1806  settings.setValue("Config/Have2ApplyGpsIonoContrib",
1808  settings.setValue("Config/Have2ApplyPolarMotionLibrationContribution",
1810  settings.setValue("Config/Have2ApplyUT1LibrationContribution",
1812  settings.setValue("Config/Have2ApplyOldOceanTidesContribution",
1814  settings.setValue("Config/Have2ApplyOldPoleTideContribution",
1816  settings.setValue("Config/IsNoviceUser",
1818  };
1819  // versions:
1820  settings.setValue("Version/LibraryName", libraryVersion.getSoftwareName());
1821  settings.setValue("Version/LibraryMajor", libraryVersion.getMajorNumber());
1822  settings.setValue("Version/LibraryMinor", libraryVersion.getMinorNumber());
1823  settings.setValue("Version/LibraryTeeny", libraryVersion.getTeenyNumber());
1824  settings.setValue("Version/LibraryComments", libraryVersion.getCodeName());
1825  settings.setValue("Version/nuSolveName", nuSolveVersion.getSoftwareName());
1826  settings.setValue("Version/nuSolveMajor", nuSolveVersion.getMajorNumber());
1827  settings.setValue("Version/nuSolveMinor", nuSolveVersion.getMinorNumber());
1828  settings.setValue("Version/nuSolveTeeny", nuSolveVersion.getTeenyNumber());
1829  settings.setValue("Version/nuSolveComments", nuSolveVersion.getCodeName());
1830  settings.setValue("Version/nuSolveSettings", currentSettingsVersion);
1831  //
1832  //
1833  if (!shouldInvokeSystemWideWizard)
1834  {
1835  settings.setValue("Config/LastModifiedNetId", config.getLastModifiedNetId());
1836  };
1837  // clear it:
1838  if (!shouldInvokeSystemWideWizard)
1839  {
1840  settings.remove("Config/AutomaticProcessingByNetId");
1841  settings.beginWriteArray("Config/AutomaticProcessingByNetId", config.apByNetId().size());
1842  int idx(0);
1843  for (QMap<QString, SgTaskConfig::AutomaticProcessing>::const_iterator it=config.apByNetId().begin();
1844  it!=config.apByNetId().end(); ++it, ++idx)
1845  {
1846  settings.setArrayIndex(idx);
1848  &ap=it.value();
1849  const QString &id=it.key();
1850  settings.setValue("networkId", id);
1851  settings.setValue("doSessionSetup", ap.doSessionSetup_);
1852  settings.setValue("doIonoCorrection4SBD", ap.doIonoCorrection4SBD_);
1853  settings.setValue("doAmbigResolution", ap.doAmbigResolution_);
1854  settings.setValue("doClockBreaksDetection", ap.doClockBreaksDetection_);
1855  settings.setValue("doIonoCorrection4All", ap.doIonoCorrection4All_);
1856  settings.setValue("doOutliers", ap.doOutliers_);
1857  settings.setValue("doWeights", ap.doWeights_);
1858  settings.setValue("doReportNotUsedData", ap.doReportNotUsedData_);
1859  settings.setValue("FinalSolution", ap.finalSolution_);
1860  };
1861  settings.endArray();
1862  //
1863  };
1864 };
1865 
1866 
1867 
1868 //
1869 int processSession(const QString& databaseName, SgVlbiSessionInfo::OriginType fmt)
1870 {
1872  ": processing " + databaseName + " session");
1873 
1874  bool isOk(false);
1875  NsSessionHandler *handler;
1876  handler = new NsSessionHandler(databaseName, "", &config, &parametersDescriptor, fmt);
1877  if (handler->importSession(false) && handler->performPia())
1878  isOk = handler->saveResults();
1879  delete handler;
1880 
1881  return isOk?0:-1;
1882 };
1883 /*=====================================================================================================*/
1884 
1885 
1886 
1887 
1888 
1889 
1890 
1891 
1892 
1893 
1894 
1895 
1896 
1897 /*=====================================================================================================*/
1898 
NsMainWindow * mainWindow
int executeScript(const QString &scriptFileName, const QList< QString > args, bool hasDisplay)
SgVersion nuSolveVersion("nuSolve", 0, 7, 5, "Carroll Creek (rc)", SgMJD(2022, 2, 18, 17, 34))
SgLogger * logger
Definition: SgLogger.cpp:231
QString interval2Str(double days)
Definition: SgMJD.cpp:1370
double signum(const double x)
Definition: SgMathSupport.h:71
SgVersion libraryVersion("SgLib", 0, 7, 5, "Tuscarora (rc1)", SgMJD(2022, 2, 18, 17, 34))
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:1007
static SgMJD currentMJD()
Definition: SgMJD.cpp:118
void setUseExtAPrioriHiFyErp(bool)
const QString & getEccentricitiesFileName() const
void setHave2ApplyUt1OceanTideHFContrib(bool b)
Definition: SgTaskConfig.h:603
bool getUseQualityCodeH() const
Definition: SgTaskConfig.h:833
bool getHave2ApplyNutationHFContrib() const
Definition: SgTaskConfig.h:374
const QString & getExtAPrioriSitesVelocitiesFileName() const
bool getDoIonoCorrection4SBD() const
Definition: SgTaskConfig.h:881
bool getIsObservableFollowsPlot() const
const QString & getExtWeightsFileName() const
Definition: SgTaskConfig.h:953
bool getUseExtAPrioriSitesVelocities() const
void setUseGoodQualityCodeAtStartup(bool)
void setHave2ApplyGpsIonoContrib(bool b)
Definition: SgTaskConfig.h:601
bool getHave2ApplyOldPoleTideContrib() const
Definition: SgTaskConfig.h:381
void setHave2ApplySourceSsm(bool b)
Definition: SgTaskConfig.h:602
void setName(const QString &)
void setExtAPrioriMeanGradientsFileName(const QString &)
void setInitAuxSigma4Rate(double s)
Definition: SgTaskConfig.h:468
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:961
bool getUseExtAPrioriHiFyErp() const
double getMinAuxSigma4Rate() const
Definition: SgTaskConfig.h:230
void setUseExternalWeights(bool)
void setHave2ApplyEarthTideContrib(bool b)
Definition: SgTaskConfig.h:598
bool getUseExtAPrioriSitesPositions() const
bool getUseExtAPrioriErp() const
bool getOpIsSolveCompatible() const
void setWcMode(WeightCorrectionMode)
bool getIsSolveCompatible() const
Definition: SgTaskConfig.h:897
void setIsObservableFollowsPlot(bool)
void setHave2ApplyOceanPoleTideContrib(bool b)
Definition: SgTaskConfig.h:608
void setHave2ApplyTiltRemvrContrib(bool b)
Definition: SgTaskConfig.h:610
bool getDoWeightCorrection() const
Definition: SgTaskConfig.h:889
bool getUseExtAPrioriMeanGradients() const
void setExtWeightsFileName(const QString &)
bool getHave2ApplyEarthTideContrib() const
Definition: SgTaskConfig.h:367
EstimatorPwlMode getPwlMode() const
Definition: SgTaskConfig.h:937
bool getDoClockBreakDetectionMode1() const
void setDoClockBreakDetectionMode1(bool)
WeightCorrectionMode getWcMode() const
Definition: SgTaskConfig.h:929
void setOpThreshold(double)
void setIsNoviceUser(bool is)
Definition: SgTaskConfig.h:514
int getGoodQualityCodeAtStartup() const
Definition: SgTaskConfig.h:841
void setGoodQualityCodeAtStartup(int)
bool getHave2ApplyPyContrib() const
Definition: SgTaskConfig.h:366
const QString & getExtAPrioriSitesPositionsFileName() const
void setDoOutliersEliminationMode1(bool)
const QString & getExtAPrioriHiFyErpFileName() const
void setExtAPrioriSourcesPositionsFileName(const QString &)
QMap< QString, AutomaticProcessing > & apByNetId()
Definition: SgTaskConfig.h:623
void setFlybyTropZenithMap(TropZenithMap m)
Definition: SgTaskConfig.h:619
bool getUseExternalWeights() const
Definition: SgTaskConfig.h:921
void setInitAuxSigma4Delay(double s)
Definition: SgTaskConfig.h:467
bool getHave2ApplyOceanTideContrib() const
Definition: SgTaskConfig.h:368
int getQualityCodeThreshold() const
Definition: SgTaskConfig.h:817
bool getUseExtAPrioriSourcesPositions() const
void setEccentricitiesFileName(const QString &)
double getMinAuxSigma4Delay() const
Definition: SgTaskConfig.h:229
void setIsActiveBandFollowsTab(bool)
double getInitAuxSigma4Delay() const
Definition: SgTaskConfig.h:231
void setIsSolveCompatible(bool)
bool getHave2ApplyNdryContrib() const
Definition: SgTaskConfig.h:385
void setUseExtAPrioriMeanGradients(bool)
bool getHave2ApplyUt1OceanTideHFContrib() const
Definition: SgTaskConfig.h:372
bool getIsNoviceUser() const
Definition: SgTaskConfig.h:282
bool getUseQualityCodeG() const
Definition: SgTaskConfig.h:825
void setUseQualityCodeH(bool)
bool getHave2ApplyPxyOceanTideHFContrib() const
Definition: SgTaskConfig.h:373
void setUseExtAPrioriSourceSsm(bool)
void setPwlMode(EstimatorPwlMode)
const QString & getLastModifiedNetId() const
Definition: SgTaskConfig.h:390
void setHave2ApplyOceanTideContrib(bool b)
Definition: SgTaskConfig.h:599
bool getDoOutliersEliminationMode1() const
bool getHave2ApplyOldOceanTideContrib() const
Definition: SgTaskConfig.h:380
void setUseSolveObsSuppresionFlags(bool)
void setOpIsSolveCompatible(bool)
void setExtAPrioriSourceSsmFileName(const QString &)
bool getHave2ApplyPoleTideContrib() const
Definition: SgTaskConfig.h:369
bool getUseExtAPrioriAxisOffsets() const
void setHave2ApplyPoleTideContrib(bool b)
Definition: SgTaskConfig.h:600
void setExtAPrioriSitesVelocitiesFileName(const QString &)
bool getHave2ApplyGpsIonoContrib() const
Definition: SgTaskConfig.h:370
void setHave2ApplyOldPoleTideContrib(bool b)
Definition: SgTaskConfig.h:612
bool getIsActiveBandFollowsTab() const
void setOpHave2SuppressWeightCorrection(bool)
bool getHave2ApplyPxyLibrationContrib() const
Definition: SgTaskConfig.h:376
void setHave2ApplyNdryContrib(bool b)
Definition: SgTaskConfig.h:616
void setHave2ApplyPxyOceanTideHFContrib(bool b)
Definition: SgTaskConfig.h:604
bool getUseSolveObsSuppresionFlags() const
Definition: SgTaskConfig.h:913
bool getHave2ApplyTiltRemvrContrib() const
Definition: SgTaskConfig.h:379
TropZenithMap getFlybyTropZenithMap() const
Definition: SgTaskConfig.h:388
bool getUseDynamicClockBreaks() const
Definition: SgTaskConfig.h:905
void setMinAuxSigma4Rate(double s)
Definition: SgTaskConfig.h:466
void setOpMode(OutliersProcessingMode)
int getOpIterationsLimit() const
Definition: SgTaskConfig.h:985
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:617
void setQualityCodeThreshold(int)
void setOpHave2NormalizeResiduals(bool)
void setHave2ApplyOldOceanTideContrib(bool b)
Definition: SgTaskConfig.h:611
const QString & getExtAPrioriSourcesPositionsFileName() const
bool getHave2ApplySourceSsm() const
Definition: SgTaskConfig.h:371
bool getHave2ApplyPxContrib() const
Definition: SgTaskConfig.h:365
bool getHave2ApplyOceanPoleTideContrib() const
Definition: SgTaskConfig.h:377
double getOpThreshold() const
Definition: SgTaskConfig.h:977
void setHave2ApplyPxyLibrationContrib(bool b)
Definition: SgTaskConfig.h:607
void setMinAuxSigma4Delay(double s)
Definition: SgTaskConfig.h:465
void setHave2ApplyPyContrib(bool b)
Definition: SgTaskConfig.h:597
bool getUseGoodQualityCodeAtStartup() const
Definition: SgTaskConfig.h:849
double getInitAuxSigma4Rate() const
Definition: SgTaskConfig.h:232
void setHave2ApplyPxContrib(bool b)
Definition: SgTaskConfig.h:596
void setHave2ApplyFeedCorrContrib(bool b)
Definition: SgTaskConfig.h:609
const QString & getExtAPrioriAxisOffsetsFileName() const
void setUseDynamicClockBreaks(bool)
void setHave2ApplyNutationHFContrib(bool b)
Definition: SgTaskConfig.h:605
void setHave2ApplyUt1LibrationContrib(bool b)
Definition: SgTaskConfig.h:606
void setHave2ApplyAxisOffsetContrib(bool b)
Definition: SgTaskConfig.h:614
void setUseExtAPrioriSitesPositions(bool)
void setHave2ApplyUnPhaseCalContrib(bool b)
Definition: SgTaskConfig.h:615
bool getHave2ApplyFeedCorrContrib() const
Definition: SgTaskConfig.h:378
bool getHave2ApplyNwetContrib() const
Definition: SgTaskConfig.h:386
bool getOpHave2SuppressWeightCorrection() const
Definition: SgTaskConfig.h:993
const QString & getExtAPrioriErpFileName() const
void setLastModifiedNetId(const QString &netId)
Definition: SgTaskConfig.h:621
bool getHave2ApplyUt1LibrationContrib() const
Definition: SgTaskConfig.h:375
bool getHave2ApplyUnPhaseCalContrib() const
Definition: SgTaskConfig.h:384
void setOpAction(OutliersProcessingAction)
void setExtAPrioriSitesPositionsFileName(const QString &)
OutliersProcessingAction getOpAction() const
Definition: SgTaskConfig.h:969
bool getHave2ApplyAxisOffsetContrib() const
Definition: SgTaskConfig.h:383
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:901
const QString origOrgName("NASA GSFC")
char progname[80]
Definition: nuSolve.cpp:72
int main(int argc, char **argv)
Definition: nuSolve.cpp:299
void checkSettings(QSettings &)
Definition: nuSolve.cpp:822
void loadSettingsOldStyle(QSettings &)
Definition: nuSolve.cpp:1310
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:76
static int parse_opt(int key, char *arg, struct argp_state *state)
Definition: nuSolve.cpp:104
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:1501
int msglev
Definition: nuSolve.cpp:73
int processSession(const QString &databaseName, SgVlbiSessionInfo::OriginType fmt)
Definition: nuSolve.cpp:1869
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:1573
bool have2LoadImmatureSession
Definition: nuSolve.cpp:95
bool have2SkipAutomaticProcessing
Definition: nuSolve.cpp:89
bool have2ForceAutomaticProcessing
Definition: nuSolve.cpp:90
bool shouldInvokeSystemWideWizard
Definition: nuSolve.cpp:94
QList< QString > args
Definition: nuSolve.cpp:98
QString altSetupAppName
Definition: nuSolve.cpp:82
QSettings * settings
Definition: nuSolve.cpp:80
bool isForcedCatalogMode
Definition: nuSolve.cpp:85
QString altSetupName
Definition: nuSolve.cpp:81
SgVlbiSessionInfo::OriginType ofFmt
Definition: nuSolve.cpp:88
bool have2UseAltSetup
Definition: nuSolve.cpp:83
bool isNeedSignalHandler
Definition: nuSolve.cpp:91
bool isForcedStandaloneMode
Definition: nuSolve.cpp:86
bool have2ForceWizard
Definition: nuSolve.cpp:93
QString scriptFileName
Definition: nuSolve.cpp:96
QString databaseName
Definition: nuSolve.cpp:97
bool useDefaultSetup
Definition: nuSolve.cpp:87