General Purpose Geodetic Library
SgVlbiSessionIoSupport.cpp
Go to the documentation of this file.
1 /*
2  *
3  * This file is a part of Space Geodetic Library. The library is used by
4  * nuSolve, a part of CALC/SOLVE system, and designed to make analysis of
5  * geodetic VLBI observations.
6  * Copyright (C) 2010-2020 Sergei Bolotin.
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program. If not, see <http://www.gnu.org/licenses/>.
20  *
21  */
22 
23 #include <iostream>
24 #include <stdlib.h>
25 
26 
27 #include <QtCore/QDir>
28 #include <QtCore/QFile>
29 #include <QtCore/QTextStream>
30 
31 
32 #include <SgVlbiSession.h>
33 
34 #include <SgLogger.h>
35 
36 
37 
38 
39 /*=======================================================================================================
40 *
41 * Auxiliary data structures
42 *
43 *======================================================================================================*/
44 extern const QString sStationCalibrationList[]=
45  { "CABL DEL", "UNPHASCL", "NDRYCONT", "NWETCONT", " ", "WVR DELY" };
46 
47 extern const QString sFlybyCalibrationList[]=
48  { "CFAKBDRY", "CFAKBWET", "CFAJJDRY", "IFADRFLY", "IFADRYSS", "MTTDRFLY", "MTTDRYSS", "NMFDRFLY" };
49 
50 extern const QString sObsCalibrationList_v10[]=
51  { "PTD CONT", "WOBXCONT", "WOBYCONT", "ETD CONT", "OCE CONT", "PTOLDCON",
52  "UT1ORTHO", "WOBORTHO", "WOBNUTAT", "FEED.COR", "WAHRCONT", "TILTRMVR" };
53 
54 extern const QString sObsCalibrationList_v11[]=
55  { "PTD CONT", "WOBXCONT", "WOBYCONT", "ETD CONT", "OCE CONT", "UT1ORTHO", "WOBORTHO",
56  "WOBLIBRA", "UT1LIBRA", "OPTLCONT", "FEED.COR", "OCE_OLD ", "TILTRMVR", "PTOLDCON" };
57 
58 extern const QString sAntennaMountTypes[]=
59  {"AZEL", "EQUA", "X_YN", "X_YE", "RICHMOND", "UNKN"};
60 
62 {
75 };
77 {
92 };
93 
94 
95 
96 /*=======================================================================================================
97 *
98 * I/O support:
99 *
100 *======================================================================================================*/
101 //
102 bool SgVlbiSession::guessWrapperFileNameBySession(const QString& inputArg, const QString& path2VgosDb,
103  const QString& acAbbName,
104  QString& path2wrapperFile, QString& wrapperFileName, QString& sessionName, int& version, bool noYears)
105 {
106  // here inputArg is a session name with or without version part, e.g.:
107  // 15AUG01XK_V004
108  // 15AUG01XK
109  //
111  "::guessWrapperFileNameBySession(): processing: " + inputArg);
112  bool isOk;
113  int nn;
114  QString vVer("");
115  QString kKind("");
116  QString iInst("");
117  QString sYr("");
118  QRegExp reVer(".*_V([0-9]{3}).*");
119 
120  version = -1;
121 //if (inputArg.size() == 14 && inputArg.at(10)=='V')
122  if (-1 < reVer.indexIn(inputArg))
123  {
124  sessionName = inputArg.mid(0, 9);
125 // nn = inputArg.mid(11, 3).toInt(&isOk);
126  nn = reVer.cap(1).toInt(&isOk);
127  if (isOk)
128  {
129  version = nn;
130  vVer.sprintf("_V%03d", version);
132  "::guessWrapperFileNameBySession(): user provided version is: " + QString("").setNum(version));
133  }
134  else
135  {
137  "::guessWrapperFileNameBySession(): cannot guess the version number form: \"" + inputArg + "\"");
138  return false;
139  };
140  }
141  else
142  sessionName = inputArg;
143  //
144  path2wrapperFile = path2VgosDb;
145  if (path2wrapperFile.right(1) == '/')
146  path2wrapperFile.chop(1);
147  //
148  if (!noYears)
149  {
150  nn = inputArg.mid(0,2).toInt();
151  if (77 < nn)
152  nn += 1900;
153  else
154  nn += 2000;
155  sYr.sprintf("%4d", nn);
156  if (path2wrapperFile.right(4) != sYr)
157  path2wrapperFile += "/" + sYr;
158  };
159  path2wrapperFile += "/" + sessionName;
160  //
161  if (!QDir(path2wrapperFile).exists())
162  {
164  "::guessWrapperFileNameBySession(): the input directory \"" + path2wrapperFile +
165  "\" does not exist");
166  return false;
167  }
168  else
170  "::guessWrapperFileNameBySession(): the path to the wrapper file is: \"" + path2wrapperFile +
171  "\"");
172 
173  // look up the file:
174  QStringList fltList;
175  fltList << sessionName + vVer + "*.wrp";
176  QStringList fList=QDir(path2wrapperFile).entryList(fltList,
177  QDir::Files | QDir::Readable, QDir::Name);
178  if (fList.size() == 0)
179  {
181  "::guessWrapperFileNameBySession(): no any wrapper file was found in \"" + path2wrapperFile +
182  "\"");
183  return false;
184  }
185  else if (fList.size() == 1)
186  {
187  wrapperFileName = fList.at(0);
188  if (version == -1)
189  {
190  if (-1 < reVer.indexIn(wrapperFileName))
191  {
192  nn = reVer.cap(1).toInt(&isOk);
193  if (isOk)
194  {
195  version = nn;
197  "::guessWrapperFileNameBySession(): guessed version is: " + QString("").setNum(version));
198  }
199  else
200  {
202  "::guessWrapperFileNameBySession(): cannot guess the version number form: \"" +
203  wrapperFileName + "\"");
204  return false;
205  };
206  };
207  };
209  "::guessWrapperFileNameBySession(): the wrapper file name is: \"" + wrapperFileName + "\"");
210  return true;
211  }
212  else
213  {
214  if (version == -1)
215  {
216  // find out the largest version number (the list is sorted by name):
217  QString str=fList.at(fList.size() - 1);
218  QRegExp reSn(".*([0-9]{2}[A-Z]{3}[0-9]{2}[A-Z0-9]{1,2})_V([0-9]{3}).*");
219  QString sVer("");
220  if (-1 < reSn.indexIn(str))
221  {
222  vVer = reSn.cap(2);
223  bool isOk;
224  int nn;
225  nn = vVer.toInt(&isOk);
226  if (isOk)
227  {
228  version = nn;
229  vVer.sprintf("_V%03d", version);
231  "::guessWrapperFileNameBySession(): guessed version is: " + QString("").setNum(version));
232  }
233  else
234  {
236  "::guessWrapperFileNameBySession(): cannot guess a database version from the file \"" +
237  str + "\"");
238  return false;
239  };
240  }
241  else
242  {
244  "::guessWrapperFileNameBySession(): cannot parse the string \"" + str +
245  "\", need to update the template");
246  return false;
247  };
248  //
249  fList.clear();
250  fltList.clear();
251  fltList << sessionName + vVer + "*.wrp";
252  fList = QDir(path2wrapperFile).entryList(fltList, QDir::Files | QDir::Readable, QDir::Name);
253  if (fList.size() == 1) // if only one file, stop searching:
254  {
255  wrapperFileName = fList.at(0);
257  "::guessWrapperFileNameBySession(): guessed the wrapper file name: \"" + wrapperFileName +
258  "\"");
259  return true;
260  };
261  };
262  // ok, at this point all files have the same version.
263  QStringList noK, kAll;
264  for (int i=0; i<fList.size(); i++)
265  {
266  if (fList.at(i).contains("_kall", Qt::CaseInsensitive))
267  kAll << fList.at(i);
268  if (!fList.at(i).contains("_k", Qt::CaseInsensitive))
269  noK << fList.at(i);
270  };
271  if (noK.size() == 1)
272  {
273  wrapperFileName = noK.at(0);
275  "::guessWrapperFileNameBySession(): guessed the wrapper file name: \"" + wrapperFileName + "\"");
276  return true;
277  }
278  else if (kAll.size() == 1)
279  {
280  wrapperFileName = kAll.at(0);
282  "::guessWrapperFileNameBySession(): guessed the wrapper file name: \"" + wrapperFileName + "\"");
283  return true;
284  }
285  else if (/*noK.size() == 0 &&*/ 1 < kAll.size()) // more than one _kall:
286  {
287  QStringList noI, iUs, iIvs;
288  QString usId("_i"), ivsId("_iIVS");
289  usId += acAbbName;
290  for (int i=0; i<kAll.size(); i++)
291  {
292  if (kAll.at(i).contains(usId, Qt::CaseInsensitive))
293  iUs << kAll.at(i);
294  if (kAll.at(i).contains(ivsId, Qt::CaseInsensitive))
295  iIvs << kAll.at(i);
296 
297  if (!kAll.at(i).contains("_i", Qt::CaseInsensitive))
298  noI << kAll.at(i);
299  };
300  if (iUs.size() == 1)
301  {
302  wrapperFileName = iUs.at(0);
304  "::guessWrapperFileNameBySession(): guessed the wrapper file name: \"" +
305  wrapperFileName + "\"");
306  return true;
307  }
308  if (iIvs.size() == 1)
309  {
310  wrapperFileName = iIvs.at(0);
312  "::guessWrapperFileNameBySession(): guessed the wrapper file name: \"" +
313  wrapperFileName + "\"");
314  return true;
315  }
316  else if (noI.size() == 1)
317  {
318  wrapperFileName = noI.at(0);
320  "::guessWrapperFileNameBySession(): guessed the wrapper file name: \"" +
321  wrapperFileName + "\"");
322  return true;
323  }
324  else if (1 < iUs.size())
325  {
326  wrapperFileName = iUs.at(0);
328  "::guessWrapperFileNameBySession(): guessed the wrapper file name: \"" +
329  wrapperFileName + "\"");
330  return true;
331  }
332  else if (1 < iIvs.size())
333  {
334  wrapperFileName = iIvs.at(0);
336  "::guessWrapperFileNameBySession(): guessed the wrapper file name: \"" +
337  wrapperFileName + "\"");
338  return true;
339  }
340  else if (1 < noI.size())
341  {
342  wrapperFileName = noI.at(0);
344  "::guessWrapperFileNameBySession(): guessed the wrapper file name: \"" +
345  wrapperFileName + "\"");
346  return true;
347  }
348  else
349  {
350  wrapperFileName = kAll.at(0);
352  "::guessWrapperFileNameBySession(): guessed the wrapper file name (last resort): \"" +
353  wrapperFileName + "\"");
354  return true;
355  };
356  }
357  else
358  {
360  "::guessWrapperFileNameBySession(): cannot guess wrapper file name: noK.size()=" +
361  QString("").setNum(noK.size()) + ", kAll.size()=" + QString("").setNum(kAll.size()) );
362  return false;
363  };
364  };
365  //
366  return true;
367 };
368 
369 
370 
371 //
372 bool SgVlbiSession::guessSessionByWrapperFileName(const QString& inputArg, const QString& path2VgosDb,
373  QString& path2wrapperFile, QString& wrapperFileName, QString& sessionName, int& version)
374 {
376  "::guessSessionByWrapperFileName(): processing: " + inputArg);
377  //
378  // split input on path and filename:
379  int idx=inputArg.lastIndexOf("/");
380  if (idx == -1)
381  {
382  path2wrapperFile = ".";
383  wrapperFileName = inputArg;
384  }
385  else if (idx == 0) // ?
386  {
387  path2wrapperFile = "/";
388  wrapperFileName = inputArg.mid(1);
389  }
390  else
391  {
392  path2wrapperFile = inputArg.left(idx);
393  wrapperFileName = inputArg.mid(idx + 1);
394  };
395  // add the default path:
396  if (path2wrapperFile.at(0) != QChar('/') && path2wrapperFile.at(0) != QChar('.'))
397  {
398  path2wrapperFile = path2VgosDb + "/" + path2wrapperFile;
400  "::guessSessionByWrapperFileName(): the path to wrapper file has been modified to \"" +
401  path2wrapperFile + "\"");
402  };
403  //
404  // check for existance:
405  if (!QFile::exists((path2wrapperFile.size()?path2wrapperFile + "/" : "") + wrapperFileName))
406  {
408  "::guessSessionByWrapperFileName(): the provided file, " + path2wrapperFile + "/" +
409  wrapperFileName + ", does not exist");
410  return false;
411  };
412  //
413  //
414 //QRegExp reSn(".*/([0-9]{2}[A-Z]{3}[0-9]{2}[A-Z]{2})_V([0-9]{3}).*");
415  QRegExp reSn(".*([0-9]{2}[A-Z]{3}[0-9]{2}[A-Z0-9]{1,2})_V([0-9]{3}).*");
416  QString sVer("");
417  if (-1 < reSn.indexIn(inputArg))
418  {
419  sessionName = reSn.cap(1);
420  sVer = reSn.cap(2);
421  bool isOk;
422  int v;
423  v = sVer.toInt(&isOk);
424  if (isOk)
425  version = v;
426  else
428  "::guessSessionByWrapperFileName(): cannot guess a database version from the string \"" +
429  inputArg + "\"");
430  }
431  else
432  {
434  "::guessSessionByWrapperFileName(): cannot guess a database name from the string \"" +
435  inputArg + "\"");
436  return false;
437  };
438  //
439  return true;
440 };
441 
442 
443 
444 //
445 void SgVlbiSession::applyObsCalibrationSetup(int bitFlags, const QList<QString> &calList)
446 {
447  int num=calList.size();
448  if ((calcInfo_.getDversion()<11.0 && num!=12) ||
449  (calcInfo_.getDversion()>=11.0 && num!=14) )
450  {
452  "::applyObsCalibrationSetup(): for the version " + QString("").setNum(calcInfo_.getDversion()) +
453  " of CALC the size of calibration list is unexpected, " + QString("").setNum(num) +
454  "; it have to be " + QString("").setNum(calcInfo_.getDversion()<11.0?12:14));
455  // return;
456  };
457  if (bitFlags == 0)
458  {
460  "::applyObsCalibrationSetup(): all the bit flags are zeros, nothing to apply");
461  return;
462  };
463 
464  //
465  // clear all flags that can be overwritten from database setup:
481  bool isOn;
482  for (int i=0; i<num; i++)
483  {
484  const QString &str=calList.at(i);
485  isOn = bitFlags & (1<<i);
486  if (str == "PTD CONT")
488  else if (str == "WOBXCONT")
490  else if (str == "WOBYCONT")
492  else if (str == "ETD CONT")
494  else if (str == "OCE CONT")
496  else if (str == "UT1ORTHO")
498  else if (str == "WOBORTHO")
500  else if (str == "WOBNUTAT")
502  else if (str == "FEED.COR")
504  else if (str == "TILTRMVR")
506  else if (str == "WOBLIBRA")
508  else if (str == "UT1LIBRA")
510  else if (str == "OPTLCONT")
512  else if (str == "OCE_OLD ")
514  else if (str == "PTOLDCON")
516  else if (str == "WAHRCONT")
517  {}
518  else
520  "::applyObsCalibrationSetup(): got an unexpected contribution code: " + str + "; ignored");
521  };
524  "::applyObsCalibrationSetup(): calibration set up has been applied assuming version #" +
525  QString("").setNum(calcInfo_.getDversion()) + " of CALC");
526 };
527 
528 
529 
530 //
532 {
533  bitFlags = 0;
534  calList.clear();
535  if (calcInfo_.getDversion() < 11.0)
536  {
537  for (int i=0; i<12; i++)
538  calList << sObsCalibrationList_v10[i];
539  //
541  bitFlags += 1 << O10_OCEAN_TIDE;
543  bitFlags += 1 << O10_POLE_TIDE;
545  bitFlags += 1 << O10_EARTH_TIDE;
547  bitFlags += 1 << O10_WOBBLE_X;
549  bitFlags += 1 << O10_WOBBLE_Y;
551  bitFlags += 1 << O10_WOB_NUTAT;
553  bitFlags += 1 << O10_WOB_ORTHO;
555  bitFlags += 1 << O10_UT1_ORTHO;
557  bitFlags += 1 << O10_FEED_ROT;
559  bitFlags += 1 << O10_TILT_RMVR;
561  bitFlags += 1 << O10_POLE_TIDE_OLD;
562  }
563  else
564  {
565  for (int i=0; i<14; i++)
566  calList << sObsCalibrationList_v11[i];
567  //
569  bitFlags += 1 << O11_OCEAN_TIDE;
571  bitFlags += 1 << O11_POLE_TIDE;
573  bitFlags += 1 << O11_EARTH_TIDE;
575  bitFlags += 1 << O11_WOBBLE_X;
577  bitFlags += 1 << O11_WOBBLE_Y;
579  bitFlags += 1 << O11_OCN_POLE_TIDE;
581  bitFlags += 1 << O11_WOB_LIBRA;
583  bitFlags += 1 << O11_UT1_LIBRA;
585  bitFlags += 1 << O11_WOB_ORTHO;
587  bitFlags += 1 << O11_UT1_ORTHO;
589  bitFlags += 1 << O11_FEED_ROT;
591  bitFlags += 1 << O11_TILT_RMVR;
593  bitFlags += 1 << O11_OCEAN_TIDE_OLD;
595  bitFlags += 1 << O11_POLE_TIDE_OLD;
596  };
598  "::formObsCalibrationSetup(): calibration set up has been formed assuming version #" +
599  QString("").setNum(calcInfo_.getDversion()) + " of CALC");
600 };
601 
602 
603 
604 //
605 void SgVlbiSession::importMapFile(const QString& mapFileName, QMap<QString, QString>& map4Stn,
606  QMap<QString, QString>& map4Src, QMap<QString, QString>& map4Bnd)
607 {
608  if (map4Stn.size())
609  map4Stn.clear();
610  if (map4Src.size())
611  map4Src.clear();
612  if (!mapFileName.size()) // empty string, nothing to do (even complain)
613  return;
614  //
615  //
616  QFile f(mapFileName);
617  if (!f.exists())
618  {
620  "::importMapFile(): the map file [" + f.fileName() + "] does not exist");
621  return;
622  }
623  else
624  {
625  if (f.open(QFile::ReadOnly))
626  {
627  QTextStream s(&f);
628  QString str(""), from(""), to("");
629  int numOfStrs, numOfSrc, numOfStn, numOfBnd;
630  QRegExp reStn("^stn:\\s*([0-9A-Z]{1}[0-9A-Z\\s_+-]{1,6}[0-9A-Z_]{1})\\s*=>"
631  "\\s*([0-9A-Z-]{1}[0-9A-Z\\s_+-]{1,6}[0-9A-Z_-]{1}).*");
632  QRegExp reSrc("^src:\\s*([0-9A-Z]{1}[0-9A-Z\\s_+-]{1,6}[0-9A-Z_]{1})\\s*=>"
633  "\\s*([0-9A-Z-]{1}[0-9A-Z\\s_+-]{1,6}[0-9A-Z_-]{1}).*");
634  QRegExp reBnd("^bnd:\\s*([0-9A-Za-z]{1,2})\\s*=>\\s*([0-9A-Za-z-]{1,3}).*");
635  numOfStrs = numOfSrc = numOfStn = numOfBnd = 0;
636  while (!s.atEnd())
637  {
638  str = s.readLine();
639  numOfStrs++;
640  if (str.size())
641  {
642 
643  if (-1 < reStn.indexIn(str))
644  {
645  if (reStn.cap(2) == sSkipCode_)
646  {
647  from = reStn.cap(1).leftJustified(8, ' ', true);
648  if (!map4Stn.contains(from))
649  map4Stn.insert(from, sSkipCode_);
650  else
651  map4Stn[from] = sSkipCode_;
653  "::importMapFile(): the station \"" + from + "\" will be excluded from the session");
654  }
655  else
656  {
657  from = reStn.cap(1).leftJustified(8, ' ', true);
658  to = reStn.cap(2).leftJustified(8, ' ', true);
659  if (!map4Stn.contains(from))
660  {
661  map4Stn.insert(from, to);
663  "::importMapFile(): a station map record added: \"" + from + "\" => \"" + to + "\"");
664  }
665  else if (map4Stn.value(from) == to)
667  "::importMapFile(): a station map record \"" + from + "\" => \"" + to +
668  "\" is already in the map");
669  else
671  "::importMapFile(): an attempt to change a station map record \"" + from +
672  "\" => \"" + to + "\"; ignored");
673  };
674  }
675  else if (str.left(4) == "stn:")
677  "::importMapFile(): cannot parse a station map string: \"" + str + "\"");
678  //
679  // sources:
680  if (-1 < reSrc.indexIn(str))
681  {
682  if (reSrc.cap(2) == sSkipCode_)
683  {
684  from = reSrc.cap(1).leftJustified(8, ' ', true);
685  if (!map4Src.contains(from))
686  map4Src.insert(from, sSkipCode_);
687  else
688  map4Src[from] = sSkipCode_;
690  "::importMapFile(): the source \"" + from + "\" will be excluded from the session");
691  }
692  else
693  {
694  from = reSrc.cap(1).leftJustified(8, ' ', true);
695  to = reSrc.cap(2).leftJustified(8, ' ', true);;
696  if (!map4Src.contains(from))
697  {
698  map4Src.insert(from, to);
700  "::importMapFile(): a source map record added: \"" + from + "\" => \"" + to + "\"");
701  }
702  else if (map4Src.value(from) == to)
704  "::importMapFile(): a source map record \"" + from + "\" => \"" + to +
705  "\" is already in the map");
706  else
708  "::importMapFile(): an attempt to change a source map record \"" + from +
709  "\" => \"" + to + "\"; ignored");
710  };
711  }
712  else if (str.left(4) == "src:")
714  "::importMapFile(): cannot parse a source map string: \"" + str + "\"");
715  //
716  // bands:
717  if (-1 < reBnd.indexIn(str))
718  {
719  if (reBnd.cap(2) == sSkipCode_)
720  {
721  from = reBnd.cap(1).trimmed();
722  if (!map4Bnd.contains(from))
723  map4Bnd.insert(from, sSkipCode_);
724  else
725  map4Bnd[from] = sSkipCode_;
727  "::importMapFile(): the band \"" + from + "\" will be excluded from the session");
728  }
729  else
730  {
731  from = reBnd.cap(1).trimmed();
732  to = reBnd.cap(2).trimmed();
733  if (!map4Bnd.contains(from))
734  {
735  map4Bnd.insert(from, to);
737  "::importMapFile(): a band map record added: \"" + from + "\" => \"" + to + "\"");
738  }
739  else if (map4Bnd.value(from) == to)
741  "::importMapFile(): a band map record \"" + from + "\" => \"" + to +
742  "\" is already in the map");
743  else
745  "::importMapFile(): an attempt to change a band map record \"" + from +
746  "\" => \"" + to + "\"; ignored");
747  };
748  }
749  else if (str.left(4) == "bnd:")
751  "::importMapFile(): cannot parse a band map string: \"" + str + "\"");
752  };
753  };
754  f.close();
755  s.setDevice(NULL);
757  "::importMapFile(): read " + QString("").setNum(numOfStrs) +
758  " strings from the map file [" + f.fileName() + "]");
759  }
760  else
761  {
763  "::importMapFile(): cannot open the map file [" + f.fileName() + "] for read access");
764  return;
765  };
766  };
767 };
768 
769 
770 
771 
772 //
773 bool SgVlbiSession::check4NameMap(const QMap<QString, QString> &map, QString& name)
774 {
775  if (!map.size()) // nothing to do
776  return true;
777  if (map.contains(name))
778  {
779  if (map.value(name) == sSkipCode_)
780  {
782  "::check4stationNameMap(): the object \"" + name + "\" have to be skipped");
783  return false;
784  };
786  "::check4stationNameMap(): the input object name \"" + name + "\" is mapping to \"" +
787  map.value(name) + "\"");
788  name = map.value(name);
789  };
790  return true;
791 };
792 
793 
794 
795 
796 /*=====================================================================================================*/
797 
798 /*=====================================================================================================*/
SgLogger * logger
Definition: SgLogger.cpp:231
const QString sObsCalibrationList_v11[]
@ O10_POLE_TIDE_OLD
const QString sObsCalibrationList_v10[]
const QString sAntennaMountTypes[]
const QString sFlybyCalibrationList[]
@ O11_OCN_POLE_TIDE
@ O11_OCEAN_TIDE_OLD
@ O11_POLE_TIDE_OLD
const QString sStationCalibrationList[]
virtual void write(LogLevel, quint32, const QString &, bool=false)
Definition: SgLogger.cpp:88
@ IO_TXT
Definition: SgLogger.h:65
@ IO_DBH
Definition: SgLogger.h:67
@ SESSION
Definition: SgLogger.h:77
double getDversion() const
Definition: SgModelsInfo.h:114
void setHave2ApplyUt1OceanTideHFContrib(bool b)
Definition: SgTaskConfig.h:603
bool getHave2ApplyNutationHFContrib() const
Definition: SgTaskConfig.h:374
bool getHave2ApplyOldPoleTideContrib() const
Definition: SgTaskConfig.h:381
void setContribsAreFromDatabase(bool b)
Definition: SgTaskConfig.h:595
void setHave2ApplyEarthTideContrib(bool b)
Definition: SgTaskConfig.h:598
void setHave2ApplyOceanPoleTideContrib(bool b)
Definition: SgTaskConfig.h:608
void setHave2ApplyTiltRemvrContrib(bool b)
Definition: SgTaskConfig.h:610
bool getHave2ApplyEarthTideContrib() const
Definition: SgTaskConfig.h:367
bool getHave2ApplyPyContrib() const
Definition: SgTaskConfig.h:366
bool getHave2ApplyOceanTideContrib() const
Definition: SgTaskConfig.h:368
bool getHave2ApplyUt1OceanTideHFContrib() const
Definition: SgTaskConfig.h:372
bool getHave2ApplyPxyOceanTideHFContrib() const
Definition: SgTaskConfig.h:373
void setHave2ApplyOceanTideContrib(bool b)
Definition: SgTaskConfig.h:599
bool getHave2ApplyOldOceanTideContrib() const
Definition: SgTaskConfig.h:380
bool getHave2ApplyPoleTideContrib() const
Definition: SgTaskConfig.h:369
void setHave2ApplyPoleTideContrib(bool b)
Definition: SgTaskConfig.h:600
void setHave2ApplyOldPoleTideContrib(bool b)
Definition: SgTaskConfig.h:612
bool getHave2ApplyPxyLibrationContrib() const
Definition: SgTaskConfig.h:376
void setHave2ApplyPxyOceanTideHFContrib(bool b)
Definition: SgTaskConfig.h:604
bool getHave2ApplyTiltRemvrContrib() const
Definition: SgTaskConfig.h:379
void setHave2ApplyOldOceanTideContrib(bool b)
Definition: SgTaskConfig.h:611
bool getHave2ApplyPxContrib() const
Definition: SgTaskConfig.h:365
void setHave2ApplyPxyLibrationContrib(bool b)
Definition: SgTaskConfig.h:607
void setHave2ApplyPyContrib(bool b)
Definition: SgTaskConfig.h:597
void setHave2ApplyPxContrib(bool b)
Definition: SgTaskConfig.h:596
void setHave2ApplyFeedCorrContrib(bool b)
Definition: SgTaskConfig.h:609
void setHave2ApplyNutationHFContrib(bool b)
Definition: SgTaskConfig.h:605
void setHave2ApplyUt1LibrationContrib(bool b)
Definition: SgTaskConfig.h:606
bool getHave2ApplyFeedCorrContrib() const
Definition: SgTaskConfig.h:378
bool getHave2ApplyUt1LibrationContrib() const
Definition: SgTaskConfig.h:375
void formObsCalibrationSetup(int &bitFlags, QList< QString > &calList)
void applyObsCalibrationSetup(int bitFlags, const QList< QString > &calList)
static bool guessSessionByWrapperFileName(const QString &inputArg, const QString &path2VgosDb, QString &path2wrapperFile, QString &wrapperFileName, QString &sessionName, int &version)
SgModelsInfo calcInfo_
void importMapFile(const QString &mapFileName, QMap< QString, QString > &map4Stn, QMap< QString, QString > &map4Src, QMap< QString, QString > &map4Bnd)
static bool guessWrapperFileNameBySession(const QString &inputArg, const QString &path2VgosDb, const QString &acAbbName, QString &path2wrapperFile, QString &wrapperFileName, QString &sessionName, int &version, bool noYears=false)
static const QString sSkipCode_
static QString className()
SgTaskConfig * config_
bool check4NameMap(const QMap< QString, QString > &map, QString &name)