General Purpose Geodetic Library
SgVgosDbLoadScan.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 
24 
25 #include <math.h>
26 
27 #include <SgLogger.h>
28 #include <SgNetCdf.h>
29 #include <SgVgosDb.h>
30 
31 
32 
33 
34 
35 
36 
37 
38 /*=====================================================================================================*/
39 /* */
40 /* SgVgosDb implementation (continue -- loadScan part of vgosDb data tree) */
41 /* */
42 /*=====================================================================================================*/
43 //
45 {
46  if (vScanTimeUTC_.isEmpty())
47  {
49  "::loadEpochs4Scans(): the vgosDb variable ScanTimeUTC is empty");
50  return false;
51  };
53  ncdf.getData();
54  if (!checkFormat(fcfTimeUTC, ncdf))
55  {
57  "::loadEpochs4Scans(): format check failed");
58  return false;
59  };
60  const double *pSeconds=ncdf.lookupVar(fcSecond.name())->data2double();
61  const short *pYMDHM =ncdf.lookupVar(fcYmdhm .name())->data2short();
62  epochs.clear();
63  numOfScans_ = ncdf.lookupVar(fcSecond.name())->dimensions().at(0)->getN();
64  for (int i=0; i<numOfScans_; i++)
65  epochs.append( SgMJD(pYMDHM[5*i ], pYMDHM[5*i+1], pYMDHM[5*i+2], pYMDHM[5*i+3],
66  pYMDHM[5*i+4], pSeconds[i]));
67  if (epochs.size())
69  "::loadEpochs4Scans(): read " + QString("").setNum(epochs.size()) +
70  " scan epochs from " + ncdf.getFileName());
71  return true;
72 };
73 
74 
75 
76 //
77 bool SgVgosDb::loadScanName(QVector<QString>& scanNames, QVector<QString>& scanFullNames)
78 {
79  if (vScanName_.isEmpty())
80  {
82  "::loadScanName(): the vgosDb variable ScanName is empty");
83  return false;
84  };
86  ncdf.getData();
87  if (!checkFormat(fcfScanNameInput, ncdf))
88  {
90  "::loadScanName(): format check failed");
91  return false;
92  };
93  // some sessions do not have scan names
94  const char *pN=NULL, *pF=NULL;
95  int lN=0, lF=0;
96  //
97  if (ncdf.lookupVar(fcScanNameInput.name()))
98  {
99  pN = ncdf.lookupVar(fcScanNameInput.name())->data2char();
100  lN = ncdf.lookupVar(fcScanNameInput.name())->dimensions().at(1)->getN();
101  scanNames.resize(numOfScans_);
102  };
103  if (ncdf.lookupVar(fcScanNameFull.name()))
104  {
105  pF = ncdf.lookupVar(fcScanNameFull.name())->data2char();
106  lF = ncdf.lookupVar(fcScanNameFull.name())->dimensions().at(1)->getN();
107  scanFullNames.resize(numOfScans_);
108  };
109  //
110  for (int i=0; i<numOfScans_; i++)
111  {
112  if (pN)
113  scanNames [i] = QString::fromLatin1(pN + lN*i, lN);
114  if (pF)
115  scanFullNames[i] = QString::fromLatin1(pF + lF*i, lF);
116  };
117  if (pN && pF)
119  "::loadScanName(): data successfully loaded from " + ncdf.getFileName());
120  else if (pN)
122  "::loadScanName(): only scan names are available in " + ncdf.getFileName());
123  else if (pF)
125  "::loadScanName(): only scan full names are available in " + ncdf.getFileName());
126  else
128  "::loadScanName(): nothing to load from " + ncdf.getFileName());
129  return true;
130 };
131 
132 
133 
134 //
135 bool SgVgosDb::loadScanEphemeris(SgMatrix*& rSun, SgMatrix*& rMoon, SgMatrix*& rEarth,
136  SgMatrix*& vSun, SgMatrix*& vMoon, SgMatrix*& vEarth, SgMatrix*& aEarth)
137 {
138  if (vEphemeris_.isEmpty())
139  {
141  "::loadScanEphemeris(): the vgosDb variable Ephemeris is empty");
142  return false;
143  };
145  ncdf.getData();
146  if (!checkFormat(fcfEphemeris, ncdf))
147  {
149  "::loadScanEphemeris(): format check failed");
150  return false;
151  };
152  const double *pS=ncdf.lookupVar(fcSunXyz.name())->data2double();
153  const double *pM=ncdf.lookupVar(fcMoonXyz.name())->data2double();
154  const double *pE=ncdf.lookupVar(fcEarthXyz.name())->data2double();
155 
156  rSun = new SgMatrix(numOfScans_, 3);
157  rMoon = new SgMatrix(numOfScans_, 3);
158  rEarth = new SgMatrix(numOfScans_, 3);
159  vSun = new SgMatrix(numOfScans_, 3);
160  vMoon = new SgMatrix(numOfScans_, 3);
161  vEarth = new SgMatrix(numOfScans_, 3);
162  aEarth = new SgMatrix(numOfScans_, 3);
163 
164  for (int i=0; i<numOfScans_; i++)
165  {
166  rSun->setElement(i, 0, pS[6*i ]);
167  rSun->setElement(i, 1, pS[6*i + 1]);
168  rSun->setElement(i, 2, pS[6*i + 2]);
169  vSun->setElement(i, 0, pS[6*i + 3]);
170  vSun->setElement(i, 1, pS[6*i + 4]);
171  vSun->setElement(i, 2, pS[6*i + 5]);
172 
173  rMoon->setElement(i, 0, pM[6*i ]);
174  rMoon->setElement(i, 1, pM[6*i + 1]);
175  rMoon->setElement(i, 2, pM[6*i + 2]);
176  vMoon->setElement(i, 0, pM[6*i + 3]);
177  vMoon->setElement(i, 1, pM[6*i + 4]);
178  vMoon->setElement(i, 2, pM[6*i + 5]);
179 
180  rEarth->setElement(i, 0, pE[9*i ]);
181  rEarth->setElement(i, 1, pE[9*i + 1]);
182  rEarth->setElement(i, 2, pE[9*i + 2]);
183  vEarth->setElement(i, 0, pE[9*i + 3]);
184  vEarth->setElement(i, 1, pE[9*i + 4]);
185  vEarth->setElement(i, 2, pE[9*i + 5]);
186  aEarth->setElement(i, 0, pE[9*i + 6]);
187  aEarth->setElement(i, 1, pE[9*i + 7]);
188  aEarth->setElement(i, 2, pE[9*i + 8]);
189  };
191  "::loadScanEphemeris(): data loaded successfully from " + ncdf.getFileName());
192  return true;
193 };
194 
195 
196 
197 //
198 bool SgVgosDb::loadScanNutationEqxWahr(SgMatrix*& pPsiEps, SgMatrix*& pPsiEps_rates)
199 {
201  {
203  "::loadScanNutationEqxWahr(): the vgosDb variable NutationEqx_kWahr is empty");
204  return false;
205  };
207  ncdf.getData();
208  if (!checkFormat(fcfNutationEqx, ncdf))
209  {
211  "::loadScanNutationEqxWahr(): format check failed");
212  return false;
213  };
214  const double *p=ncdf.lookupVar(fcNutationEqx.name())->data2double();
215  pPsiEps = new SgMatrix(numOfScans_, 2); // vals : dPsi and dEps
216  pPsiEps_rates = new SgMatrix(numOfScans_, 2); // rates: dPsi and dEps
217  for (int i=0; i<numOfScans_; i++)
218  {
219  pPsiEps->setElement(i,0, p[2*2*i ]);
220  pPsiEps->setElement(i,1, p[2*2*i + 1]);
221 
222  pPsiEps_rates->setElement(i,0, p[2*2*i + 2]);
223  pPsiEps_rates->setElement(i,1, p[2*2*i + 3]);
224  };
226  "::loadScanNutationEqxWahr(): data loaded successfully from " + ncdf.getFileName());
227  return true;
228 };
229 
230 
231 
232 //
233 bool SgVgosDb::loadScanNutationEqx(SgMatrix*& pPsiEps, SgMatrix*& pPsiEps_rates, QString& kind)
234 {
235  kind = "";
236  if (vNutationEqx_.isEmpty())
237  {
239  "::loadScanNutationEqx(): the vgosDb variable NutationEqx is empty");
240  return false;
241  };
243  ncdf.getData();
244  if (!checkFormat(fcfNutationEqx, ncdf))
245  {
247  "::loadScanNutationEqx(): format check failed");
248  return false;
249  };
250  const double *p=ncdf.lookupVar(fcNutationEqx.name())->data2double();
251  pPsiEps = new SgMatrix(numOfScans_, 2); // vals : dPsi and dEps
252  pPsiEps_rates = new SgMatrix(numOfScans_, 2); // rates: dPsi and dEps
253  for (int i=0; i<numOfScans_; i++)
254  {
255  pPsiEps->setElement(i,0, p[2*2*i ]);
256  pPsiEps->setElement(i,1, p[2*2*i + 1]);
257 
258  pPsiEps_rates->setElement(i,0, p[2*2*i + 2]);
259  pPsiEps_rates->setElement(i,1, p[2*2*i + 3]);
260  };
261  kind = vNutationEqx_.getKind();
263  "::loadScanNutationEqx(): data loaded successfully from " + ncdf.getFileName());
264  return true;
265 };
266 
267 
268 
269 //
270 bool SgVgosDb::loadScanNutationNro(SgMatrix*& pXys, SgMatrix*& pXys_rates, QString& kind)
271 {
272  kind = "";
273  if (vNutationNro_.isEmpty())
274  {
276  "::loadScanNutationNRO(): the vgosDb variable NutationNro is empty");
277  return false;
278  };
280  ncdf.getData();
281 
282  if (!checkFormat(fcfNutationNro, ncdf))
283  {
285  "::loadScanNutationNRO(): format check failed");
286  return false;
287  };
288  const double *p=ncdf.lookupVar(fcNutationNro.name())->data2double();
289  pXys = new SgMatrix(numOfScans_, 3); // vals : Cip_X, Cip_Y, Cip_S
290  pXys_rates = new SgMatrix(numOfScans_, 3); // rates: Cip_X, Cip_Y, Cip_S
291  for (int i=0; i<numOfScans_; i++)
292  {
293  pXys->setElement(i,0, p[2*3*i ]);
294  pXys->setElement(i,1, p[2*3*i + 1]);
295  pXys->setElement(i,2, p[2*3*i + 2]);
296 
297  pXys_rates->setElement(i,0, p[2*3*i + 3]);
298  pXys_rates->setElement(i,1, p[2*3*i + 4]);
299  pXys_rates->setElement(i,2, p[2*3*i + 5]);
300  };
301  kind = vNutationNro_.getKind();
303  "::loadScanNutationNRO(): data loaded successfully from " + ncdf.getFileName());
304  return true;
305 };
306 
307 
308 
309 //
310 bool SgVgosDb::loadScanCrootFname(QVector<QString>& corrRootFnames)
311 {
313  if (var.isEmpty())
314  {
316  "::loadScanCrootFname(): the vgosDb variable CorrRootFile is empty");
317  return false;
318  };
319  SgNetCdf ncdf(path2RootDir_ + "/" + var.getFileName());
320  ncdf.getData();
321  if (!checkFormat(fcfCorrRootFile, ncdf))
322  {
324  "::loadScanCrootFname(): format check failed");
325  return false;
326  };
327  if (!ncdf.lookupVar(fcCROOTFIL.name()))
328  {
330  "::loadScanCrootFname(): cannot find the variable " + fcCROOTFIL.name() + " in the file");
331  return false;
332  };
333  const char *pN=ncdf.lookupVar(fcCROOTFIL.name())->data2char();
334  int lN=ncdf.lookupVar(fcCROOTFIL.name())->dimensions().at(1)->getN();
335  corrRootFnames.resize(numOfScans_);
336  for (int i=0; i<numOfScans_; i++)
337  corrRootFnames[i] = QString::fromLatin1(pN + lN*i, lN);
339  "::loadScanCrootFname(): data successfully loaded from " + ncdf.getFileName());
340  return true;
341 };
342 
343 
344 
345 //
347 {
348  if (vRot_CF2J2K_.isEmpty())
349  {
351  "::loadScanTrf2crf(): the vgosDb variable Rot_CF2J2K is empty");
352  return false;
353  };
355  ncdf.getData();
356 
357  if (!checkFormat(fcfRotCf2J2K, ncdf))
358  {
360  "::loadScanTrf2crf(): format check failed");
361  return false;
362  };
363  double *p=ncdf.lookupVar(fcRotCf2J2K.name())->data2double();
364  val = new SgMatrix(numOfScans_, 9);
365  rat = new SgMatrix(numOfScans_, 9);
366  acc = new SgMatrix(numOfScans_, 9);
367  for (int i=0; i<numOfScans_; i++)
368  for (int j=0; j<9; j++)
369  {
370  val->setElement(i, j, p[27*i + j ]);
371  rat->setElement(i, j, p[27*i + 9 + j ]);
372  acc->setElement(i, j, p[27*i +18 + j ]);
373  };
375  "::loadScanTrf2crf(): data loaded successfully from " + ncdf.getFileName());
376  return true;
377 };
378 
379 
380 
381 //
383 {
384  if (vErpApriori_.isEmpty())
385  {
387  "::loadErpApriori(): the vgosDb variable ErpApriori is empty");
388  return false;
389  };
391  ncdf.getData();
392 
393  if (!checkFormat(fcfErpApriori, ncdf))
394  {
396  "::loadErpApriori(): format check failed");
397  return false;
398  };
399  double *pU=ncdf.lookupVar(fcUt1_Tai.name())->data2double();
400  double *pP=ncdf.lookupVar(fcPolarMotion.name())->data2double();
401 
402  ut1_tai = new SgVector(numOfScans_);
403  pm = new SgMatrix(numOfScans_, 2);
404  for (int i=0; i<numOfScans_; i++)
405  {
406  ut1_tai->setElement(i, pU[i]);
407  pm->setElement(i, 0, pP[2*i ]);
408  pm->setElement(i, 1, pP[2*i + 1]);
409  };
411  "::loadErpApriori(): data loaded successfully from " + ncdf.getFileName());
412  return true;
413 };
414 /*=====================================================================================================*/
415 
416 
417 
418 
419 
420 /*=====================================================================================================*/
421 //
422 // Constants:
423 //
424 
425 // const char* name, nc_type type, bool isMandatory, const QList<int> dims,
426 // const QString& attLCode="", const QString& attDefinition="",
427 // const QString& attUnits="", const QString& attBand=""
428 
429 // Variable descriptions:
431  fcScanName ("ScanName", NC_CHAR, false,QList<int>() << SD_NumScans << 10 ),
432  fcScanNameInput ("ScanName", NC_CHAR, false,QList<int>() << SD_NumScans << SD_Any ),
433  fcScanNameFull ("ScanNameFull", NC_CHAR, false,QList<int>() << SD_NumScans << 30 ),
434  fcNutationEqxWahr ("NutationEQX", NC_DOUBLE, true, QList<int>() << SD_NumScans << 2 << 2,
435  "NUT WAHR", "Wahr nut vals - Dpsi Deps&rates"),
436  fcNutationEqx ("NutationEQX", NC_DOUBLE, true, QList<int>() << SD_NumScans << 2 << 2,
437  "NUT2006A", "IAU2006A Nut. - Dpsi Deps Rates"),
438  fcNutationNro ("NutationNRO", NC_DOUBLE, true, QList<int>() << SD_NumScans << 2 << 3,
439  "NUT06XYS", "2000/2006 Nut/Prec X,Y, S & Rates"),
440  fcCROOTFIL ("CROOTFIL", NC_CHAR, false,QList<int>() << SD_NumScans << 16,
441  "CROOTFIL", "Correlator root file name.......", "", "?"),
442  fcMjd ("MJD", NC_INT, true, QList<int>() << SD_NumScans,
443  "", "Integer part of MJD time tag of scan", "day"),
444  fcDayFrac ("DayFrac", NC_DOUBLE, true, QList<int>() << SD_NumScans,
445  "", "Fractional day part of time tag of scan", "day"),
446  fcSunXyz ("SunXYZ", NC_DOUBLE, true, QList<int>() << SD_NumScans << 2 << 3,
447  "SUN DATA", "Solar geocentric coordinates and velocities", "Meter|Meter/sec"),
448  fcMoonXyz ("MoonXYZ", NC_DOUBLE, true, QList<int>() << SD_NumScans << 2 << 3,
449  "MOONDATA", "Lunar geocentric coordinates and velocities", "Meter|Meter/sec"),
450  fcEarthXyz ("EarthXYZ", NC_DOUBLE, true, QList<int>() << SD_NumScans << 3 << 3,
451  "EARTH CE", "Earth barycentric coordinates, vels and accs", "Meter|Meter/sec|Meter/sec/sec"),
452  fcRotCf2J2K ("Rot-CF2J2K", NC_DOUBLE, true, QList<int>() << SD_NumScans << 3 << 3 << 3,
453  "CF2J2K ", "Crust-fixed to J2000 Rot. Matrix and deriviatives"),
454 
455  fcUt1_Tai ("UT1", NC_DOUBLE, true, QList<int>() << SD_NumScans,
456  "UT1 -TAI", "UT1 time of day for this obsvr.", "second"),
457  fcPolarMotion ("PolarMotion", NC_DOUBLE, true, QList<int>() << SD_NumScans << 2,
458  "POLAR XY", "Polar motion X & Y for obs (rad)", "radian")
459 
460  ;
461 
462 
463 
464 
465 
466 // netCDF files:
479 
480  ;
481 
482 
483 
484 
485 /*=====================================================================================================*/
486 
@ SD_NumScans
Definition: SgIoDriver.h:54
@ SD_Any
Definition: SgIoDriver.h:62
SgLogger * logger
Definition: SgLogger.cpp:231
QList< SgVgosDb::FmtChkVar * > fcfScanNameInput
QList< SgVgosDb::FmtChkVar * > fcfNutationEqxWahr
QList< SgVgosDb::FmtChkVar * > fcfCorrRootFile
SgVgosDb::FmtChkVar fcEarthXyz("EarthXYZ", NC_DOUBLE, true, QList< int >()<< SD_NumScans<< 3<< 3, "EARTH CE", "Earth barycentric coordinates, vels and accs", "Meter|Meter/sec|Meter/sec/sec")
QList< SgVgosDb::FmtChkVar * > fcfRotCf2J2K
SgVgosDb::FmtChkVar fcNutationNro("NutationNRO", NC_DOUBLE, true, QList< int >()<< SD_NumScans<< 2<< 3, "NUT06XYS", "2000/2006 Nut/Prec X,Y, S & Rates")
SgVgosDb::FmtChkVar fcUt1_Tai("UT1", NC_DOUBLE, true, QList< int >()<< SD_NumScans, "UT1 -TAI", "UT1 time of day for this obsvr.", "second")
SgVgosDb::FmtChkVar fcDayFrac("DayFrac", NC_DOUBLE, true, QList< int >()<< SD_NumScans, "", "Fractional day part of time tag of scan", "day")
SgVgosDb::FmtChkVar fcSunXyz("SunXYZ", NC_DOUBLE, true, QList< int >()<< SD_NumScans<< 2<< 3, "SUN DATA", "Solar geocentric coordinates and velocities", "Meter|Meter/sec")
SgVgosDb::FmtChkVar fcMoonXyz("MoonXYZ", NC_DOUBLE, true, QList< int >()<< SD_NumScans<< 2<< 3, "MOONDATA", "Lunar geocentric coordinates and velocities", "Meter|Meter/sec")
SgVgosDb::FmtChkVar fcPolarMotion("PolarMotion", NC_DOUBLE, true, QList< int >()<< SD_NumScans<< 2, "POLAR XY", "Polar motion X & Y for obs (rad)", "radian")
SgVgosDb::FmtChkVar fcCROOTFIL("CROOTFIL", NC_CHAR, false, QList< int >()<< SD_NumScans<< 16, "CROOTFIL", "Correlator root file name.......", "", "?")
SgVgosDb::FmtChkVar fcMjd("MJD", NC_INT, true, QList< int >()<< SD_NumScans, "", "Integer part of MJD time tag of scan", "day")
QList< SgVgosDb::FmtChkVar * > fcfEphemeris
QList< SgVgosDb::FmtChkVar * > fcfNutationEqx
SgVgosDb::FmtChkVar fcNutationEqx("NutationEQX", NC_DOUBLE, true, QList< int >()<< SD_NumScans<< 2<< 2, "NUT2006A", "IAU2006A Nut. - Dpsi Deps Rates")
QList< SgVgosDb::FmtChkVar * > fcfNutationNro
SgVgosDb::FmtChkVar fcScanNameInput("ScanName", NC_CHAR, false, QList< int >()<< SD_NumScans<< SD_Any)
QList< SgVgosDb::FmtChkVar * > fcfScanTimeMjd
SgVgosDb::FmtChkVar fcScanName("ScanName", NC_CHAR, false, QList< int >()<< SD_NumScans<< 10)
QList< SgVgosDb::FmtChkVar * > fcfScanName
SgVgosDb::FmtChkVar fcScanNameFull("ScanNameFull", NC_CHAR, false, QList< int >()<< SD_NumScans<< 30)
SgVgosDb::FmtChkVar fcRotCf2J2K("Rot-CF2J2K", NC_DOUBLE, true, QList< int >()<< SD_NumScans<< 3<< 3<< 3, "CF2J2K ", "Crust-fixed to J2000 Rot. Matrix and deriviatives")
QList< SgVgosDb::FmtChkVar * > fcfErpApriori
SgVgosDb::FmtChkVar fcNutationEqxWahr("NutationEQX", NC_DOUBLE, true, QList< int >()<< SD_NumScans<< 2<< 2, "NUT WAHR", "Wahr nut vals - Dpsi Deps&rates")
SgVgosDb::FmtChkVar fcSecond("Second", NC_DOUBLE, true, QList< int >()<< SD_Any, "SEC TAG ", "Seconds part of UTC TAG.........", "second")
SgVgosDb::FmtChkVar fcYmdhm("YMDHM", NC_SHORT, true, QList< int >()<< SD_Any<< 5, "UTC TAG ", "Epoch UTC YMDHM.................")
QList< SgVgosDb::FmtChkVar * > fcfTimeUTC
Definition: SgVgosDb.cpp:2669
virtual void write(LogLevel, quint32, const QString &, bool=false)
Definition: SgLogger.cpp:88
@ IO_NCDF
Definition: SgLogger.h:66
Definition: SgMJD.h:59
void setElement(unsigned int i, unsigned int j, double d)
Definition: SgMatrix.h:402
const char * data2char() const
Definition: SgNetCdf.cpp:459
const short * data2short() const
Definition: SgNetCdf.cpp:481
const QList< SgNcdfDimension * > & dimensions() const
Definition: SgNetCdf.h:247
const double * data2double() const
Definition: SgNetCdf.cpp:525
SgNcdfVariable * lookupVar(const QString &name) const
Definition: SgNetCdf.h:395
const QString & getFileName() const
Definition: SgNetCdf.h:497
bool getData()
Definition: SgNetCdf.cpp:1053
bool isEmpty() const
Definition: SgVgosDb.cpp:159
const QString & getKind() const
Definition: SgVgosDb.h:94
const QString & getFileName() const
Definition: SgVgosDb.h:100
void setElement(unsigned int i, double d)
Definition: SgVector.h:348
const QString & name() const
Definition: SgVgosDb.h:213
SgVdbVariable vErpApriori_
Definition: SgVgosDb.h:1466
SgVdbVariable vNutationNro_
Definition: SgVgosDb.h:1470
static const QString className()
Definition: SgVgosDb.cpp:251
bool loadScanNutationEqx(SgMatrix *&pPsiEps, SgMatrix *&pPsiEps_rates, QString &kind)
bool checkFormat(const QList< FmtChkVar * > &, const SgNetCdf &, bool ok2fail=false)
Definition: SgVgosDb.cpp:2173
bool loadScanNutationEqxWahr(SgMatrix *&pPsiEps, SgMatrix *&pPsiEps_rates)
SgVdbVariable vNutationEqx_
Definition: SgVgosDb.h:1469
bool loadScanName(QVector< QString > &scanNames, QVector< QString > &scanFullNames)
bool loadScanTrf2crf(SgMatrix *&val, SgMatrix *&rat, SgMatrix *&acc)
SgVdbVariable vScanTimeUTC_
Definition: SgVgosDb.h:1464
SgVdbVariable vNutationEqx_kWahr_
Definition: SgVgosDb.h:1468
bool loadScanNutationNro(SgMatrix *&pXys, SgMatrix *&pXys_rates, QString &kind)
SgVdbVariable vScanName_
Definition: SgVgosDb.h:1465
SgVdbVariable vRot_CF2J2K_
Definition: SgVgosDb.h:1471
bool loadScanCrootFname(QVector< QString > &corrRootFnames)
QString path2RootDir_
Definition: SgVgosDb.h:1406
bool loadEpochs4Scans(QList< SgMJD > &)
SgVdbVariable vEphemeris_
Definition: SgVgosDb.h:1467
int numOfScans_
Definition: SgVgosDb.h:1398
bool loadScanEphemeris(SgMatrix *&rSun, SgMatrix *&rMoon, SgMatrix *&rEarth, SgMatrix *&vSun, SgMatrix *&vMoon, SgMatrix *&vEarth, SgMatrix *&aEarth)
SgVdbVariable vCorrRootFile_
Definition: SgVgosDb.h:1472
bool loadErpApriori(SgVector *&ut1_tai, SgMatrix *&pm)