General Purpose Geodetic Library
SgKombFormat.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 #include <QtCore/QDataStream>
27 #include <QtCore/QFile>
28 
29 #include <SgKombFormat.h>
30 #include <SgLogger.h>
31 #include <SgVlbiSourceInfo.h>
32 
33 
34 
35 
36 
37 
38 
39 /***===================================================================================================*/
45 // static first:
47 {
48  return "SgKombHeaderRecord";
49 };
50 
51 
52 
53 //
55 {
56  std::cout << " HDentry #" << idx_
57  << ": " << prefix_;
58  if (bandId_[0] != ' ' || bandId_[1] != ' ' )
59  std::cout << " @ " << bandId_ << "-band\n";
60  else
61  std::cout << "\n";
62 };
63 
64 
65 
66 //
68 {
69  s >> (qint16 &)record.idx_
70  >> (qint8 &)record.prefix_[0] >> (qint8 &)record.prefix_[1]
71  >> (qint8 &)record.prefix_[2] >> (qint8 &)record.prefix_[3]
72  >> (qint8 &)record.bandId_[0] >> (qint8 &)record.bandId_[1];
73  record.prefix_[4] = record.bandId_[2] = 0;
74  return s;
75 };
76 /*=====================================================================================================*/
77 
78 
79 
80 
81 /***===================================================================================================*/
87 // static first:
88 const QString SgKombHeader::className()
89 {
90  return "SgKombHeader";
91 };
92 
93 
94 
95 //
97 {
98  std::cout << "HD #" << idx_
99  << ": [" << prefix_
100  << "] Exp: " << experimentCode_
101  << " Bl: " << baselineId_
102  << ", KOMB=[" << kombFileName_ << "]\n";
103  std::cout << " #" << obsIdx_
104  << " " << totalNumberOfRecs_
105  << "/" << totalNumberOfHeaderRecs_ << "\n";
106  for (int i=0; i<entries_.size(); i++)
107  entries_.at(i)->debugReport();
108 };
109 
110 
111 
112 //
114 {
115  char c1, c2, c3;
116  s >> (qint8 &)header.prefix_[0] >> (qint8 &)header.prefix_[1];
117  s >> (qint8 &)header.prefixIdx_[0] >> (qint8 &)header.prefixIdx_[1];
118  s >> (qint8 &)c1 >> (qint8 &)c2 >> (qint8 &)c3; // == KSP
119  //std::cout << " Got: " << c1 << c2 << c3 << "\n";
120  s >> (qint8 &)c1; // unused
121 
122  s >> (qint8 &)header.experimentCode_[0] >> (qint8 &)header.experimentCode_[1]
123  >> (qint8 &)header.experimentCode_[2] >> (qint8 &)header.experimentCode_[3]
124  >> (qint8 &)header.experimentCode_[4] >> (qint8 &)header.experimentCode_[5]
125  >> (qint8 &)header.experimentCode_[6] >> (qint8 &)header.experimentCode_[7]
126  >> (qint8 &)header.experimentCode_[8] >> (qint8 &)header.experimentCode_[9];
127 
128  s >> (qint16 &)header.obsIdx_;
129 
130  s >> (qint8 &)header.baselineId_[0] >> (qint8 &)header.baselineId_[1];
131  s >> (qint16 &)header.totalNumberOfRecs_;
132  s >> (qint16 &)header.totalNumberOfHeaderRecs_;
133  s >> (qint8 &)header.kombFileName_[0] >> (qint8 &)header.kombFileName_[1]
134  >> (qint8 &)header.kombFileName_[2] >> (qint8 &)header.kombFileName_[3]
135  >> (qint8 &)header.kombFileName_[4] >> (qint8 &)header.kombFileName_[5];
136 
137  header.prefix_[2] = header.prefixIdx_[2] = header.experimentCode_[10] = header.baselineId_[2] =
138  header.kombFileName_[6] = 0;
139 
140  bool isOk;
141  header.idx_ = QString(header.prefixIdx_).toInt(&isOk);
142  if (!isOk)
143  header.idx_ = -1;
144 
145 // for (int i=0; i<24; i++)
146 // s >> (qint8 &)c1;
147  s.skipRawData(24);
148 
149  SgKombHeaderRecord *rec;
150  for (int i=0; i<25; i++)
151  {
152  rec = new SgKombHeaderRecord;
153  s >> *rec;
154  if (rec->prefix_[0] != 0)
155  header.entries_ << rec;
156  else
157  delete rec;
158  };
159  return s;
160 };
161 /*=====================================================================================================*/
162 
163 
164 
165 
166 
167 
168 
169 
170 
171 
172 /***===================================================================================================*/
178 // static first:
180 {
181  return "SgKombOb01Record";
182 };
183 
184 
185 
186 //
188 {
189  std::cout << " OB01: prefix= " << prefix_ << " Experiment: " << experimentCode_
190  << " obsIdx_=" << obsIdx_ << " baseline: [" << baselineId_ << "]\n";
191  std::cout << " TStart: " << qPrintable(tStart_.toString())
192  << " TStop : " << qPrintable(tFinis_.toString())
193  << " TRefer: " << qPrintable(tRefer_.toString()) << "\n";
194  std::cout << " CorrFName=[" << correlatorFileName_ << "] "
195  << " KombFName=[" << kombFileName_ << "] "
196  << " TCorrPrcs: " << qPrintable(tProcByCorr_.toString()) << "\n";
197  std::cout << " PPperiod: " << periodPp_ << " " << " numOfPP: " << numOfPp_
198  << " samplingPeriod: " << samplingPeriod_ << " videoBandWidth: " << videoBandWidth_
199  << " CorrMode= [" << correlatorMode_ << "]\n";
200  std::cout << " Baseline=[" << station1Name_ << ":" << station2Name_ << "]"
201  << " @ " << sourceName_ << "\n";
202  std::cout << " aPrioriObses: " << aPrioriObses_[0]
203  << ", " << aPrioriObses_[1]
204  << ", " << aPrioriObses_[2]
205  << ", " << aPrioriObses_[3] << "\n";
206  std::cout << " aPrioriClockError: " << aPrioriClockError_
207  << " aPrioriClockOffset_: " << aPrioriClockOffset_
208  << " clockRateDiff_: " << clockRateDiff_
209  << " instrumentalDelay: " << instrumentalDelay_ << "\n";
210  std::cout << " SrcCoords: RA " << qPrintable(SgVlbiSourceInfo::ra2String(srcRa_/RAD2DEG))
211  << " DE " << qPrintable(SgVlbiSourceInfo::dn2String(srcDe_/RAD2DEG)) << "\n";
212  std::cout << " Stn1Coords: R=" <<
213  qPrintable(QString("").sprintf("(%12.3f, %12.3f, %12.3f)",
214  r1_.at(X_AXIS), r1_.at(Y_AXIS), r1_.at(Z_AXIS))) << "\n";
215  std::cout << " Stn2Coords: R=" <<
216  qPrintable(QString("").sprintf("(%12.3f, %12.3f, %12.3f)",
217  r2_.at(X_AXIS), r2_.at(Y_AXIS), r2_.at(Z_AXIS))) << "\n";
218 };
219 
220 
221 
222 //
224 {
225  s >> (qint8 &)rec.prefix_[0] >> (qint8 &)rec.prefix_[1]
226  >> (qint8 &)rec.prefix_[2] >> (qint8 &)rec.prefix_[3];
227  s.skipRawData(4);
228  s >> (qint8 &)rec.experimentCode_[0] >> (qint8 &)rec.experimentCode_[1]
229  >> (qint8 &)rec.experimentCode_[2] >> (qint8 &)rec.experimentCode_[3]
230  >> (qint8 &)rec.experimentCode_[4] >> (qint8 &)rec.experimentCode_[5]
231  >> (qint8 &)rec.experimentCode_[6] >> (qint8 &)rec.experimentCode_[7]
232  >> (qint8 &)rec.experimentCode_[8] >> (qint8 &)rec.experimentCode_[9];
233  s >> (qint16 &)rec.obsIdx_;
234  s >> (qint8 &)rec.baselineId_[0] >> (qint8 &)rec.baselineId_[1];
235  s >> (qint16 &)rec.epochObsStart_[0] >> (qint16 &)rec.epochObsStart_[1]
236  >> (qint16 &)rec.epochObsStart_[2] >> (qint16 &)rec.epochObsStart_[3]
237  >> (qint16 &)rec.epochObsStart_[4];
238  s >> (qint16 &)rec.epochObsStop_[0] >> (qint16 &)rec.epochObsStop_[1]
239  >> (qint16 &)rec.epochObsStop_[2] >> (qint16 &)rec.epochObsStop_[3]
240  >> (qint16 &)rec.epochObsStop_[4];
241  s >> (qint16 &)rec.epochObsRef_[0] >> (qint16 &)rec.epochObsRef_[1]
242  >> (qint16 &)rec.epochObsRef_[2] >> (qint16 &)rec.epochObsRef_[3]
243  >> (qint16 &)rec.epochObsRef_[4];
244  s >> (qint8 &)rec.correlatorFileName_[0] >> (qint8 &)rec.correlatorFileName_[1]
245  >> (qint8 &)rec.correlatorFileName_[2] >> (qint8 &)rec.correlatorFileName_[3]
246  >> (qint8 &)rec.correlatorFileName_[4] >> (qint8 &)rec.correlatorFileName_[5];
247  s.skipRawData(2);
248  s >> (qint8 &)rec.kombFileName_[0] >> (qint8 &)rec.kombFileName_[1]
249  >> (qint8 &)rec.kombFileName_[2] >> (qint8 &)rec.kombFileName_[3]
250  >> (qint8 &)rec.kombFileName_[4] >> (qint8 &)rec.kombFileName_[5];
251  s.skipRawData(2);
252  s >> (qint16 &)rec.epochProcCorr_[0] >> (qint16 &)rec.epochProcCorr_[1]
253  >> (qint16 &)rec.epochProcCorr_[2] >> (qint16 &)rec.epochProcCorr_[3];
254  s.skipRawData(4);
255  s >> (qint16 &)rec.periodPp_ >> (qint16 &)rec.numOfPp_;
256  s >> (float&)rec.samplingPeriod_ >> (float&)rec.videoBandWidth_;
257 
258  s >> (qint8 &)rec.correlatorMode_[0] >> (qint8 &)rec.correlatorMode_[1];
259  s >> (qint8 &)rec.sourceName_[0] >> (qint8 &)rec.sourceName_[1]
260  >> (qint8 &)rec.sourceName_[2] >> (qint8 &)rec.sourceName_[3]
261  >> (qint8 &)rec.sourceName_[4] >> (qint8 &)rec.sourceName_[5]
262  >> (qint8 &)rec.sourceName_[6] >> (qint8 &)rec.sourceName_[7];
263  s >> (float&)rec.srcDe_;
264  s.skipRawData(4); // Greenwhich hour angle of the source at PRT
265 // s.skipRawData(8); // declination of radio source J2000 + Greenwhich hour angle of the source at PRT
266  s >> (qint8 &)rec.station1Name_[0] >> (qint8 &)rec.station1Name_[1]
267  >> (qint8 &)rec.station1Name_[2] >> (qint8 &)rec.station1Name_[3]
268  >> (qint8 &)rec.station1Name_[4] >> (qint8 &)rec.station1Name_[5]
269  >> (qint8 &)rec.station1Name_[6] >> (qint8 &)rec.station1Name_[7]
270  >> (qint8 &)rec.station2Name_[0] >> (qint8 &)rec.station2Name_[1]
271  >> (qint8 &)rec.station2Name_[2] >> (qint8 &)rec.station2Name_[3]
272  >> (qint8 &)rec.station2Name_[4] >> (qint8 &)rec.station2Name_[5]
273  >> (qint8 &)rec.station2Name_[6] >> (qint8 &)rec.station2Name_[7];
274  s >> (double&)rec.r1_(X_AXIS) >> (double&)rec.r1_(Y_AXIS) >> (double&)rec.r1_(Z_AXIS);
275  s >> (double&)rec.r2_(X_AXIS) >> (double&)rec.r2_(Y_AXIS) >> (double&)rec.r2_(Z_AXIS);
276  s >> (double&)rec.aPrioriObses_[0] >> (double&)rec.aPrioriObses_[1]
277  >> (double&)rec.aPrioriObses_[2] >> (double&)rec.aPrioriObses_[3]
278  >> (double&)rec.aPrioriClockError_ >> (double&)rec.clockRateDiff_
279  >> (double&)rec.instrumentalDelay_
280  >> (double&)rec.aPrioriClockOffset_;
281  s >> (float&)rec.srcRa_;
282 
283  rec.prefix_[4] = rec.experimentCode_[10] = rec.baselineId_[2] = rec.correlatorFileName_[6] =
284  rec.kombFileName_[6] = rec.correlatorMode_[2] = rec.sourceName_[8] = rec.station1Name_[8] =
285  rec.station2Name_[8] = 0;
286  s.skipRawData(14);
287 
288 
289  rec.tStart_.setUpEpoch(rec.epochObsStart_[0], 0, rec.epochObsStart_[1],
290  rec.epochObsStart_[2], rec.epochObsStart_[3], rec.epochObsStart_[4]);
291  rec.tFinis_.setUpEpoch(rec.epochObsStop_[0], 0, rec.epochObsStop_[1],
292  rec.epochObsStop_[2], rec.epochObsStop_[3], rec.epochObsStop_[4]);
293  rec.tRefer_.setUpEpoch(rec.epochObsRef_[0], 0, rec.epochObsRef_[1],
294  rec.epochObsRef_[2], rec.epochObsRef_[3], rec.epochObsRef_[4]);
295  rec.tProcByCorr_.setUpEpoch(rec.epochProcCorr_[0], 0, rec.epochProcCorr_[1],
296  rec.epochProcCorr_[2], rec.epochProcCorr_[3], 0);
297 
298  return s;
299 };
300 /*=====================================================================================================*/
301 
302 
303 
304 
305 
306 
307 
308 
309 
310 
311 /***===================================================================================================*/
317 // static first:
319 {
320  return "SgKombOb02Record";
321 };
322 
323 
324 
325 //
327 {
328  std::cout << " OB02: prefix= " << prefix_
329  << " numOfChannels= " << numOfChannels_
330  << ", index table:\n";
331 
332  for (int i=0; i<16; i++)
333  {
334  for (int j=0; j<2; j++)
335  std::cout << idxNumTable_[i][j] << " ";
336  std::cout << "\n";
337  };
338 
339 };
340 
341 
342 
343 //
345 {
346  s >> (qint8 &)rec.prefix_[0] >> (qint8 &)rec.prefix_[1]
347  >> (qint8 &)rec.prefix_[2] >> (qint8 &)rec.prefix_[3];
348  rec.prefix_[4] = 0;
349  s.skipRawData(4 + 8 + 8 + 32);
350  s >> (qint16 &)rec.numOfChannels_;
351  for (int i=0; i<16; i++)
352  for (int j=0; j<2; j++)
353  s >> (qint16 &)rec.idxNumTable_[i][j];
354  s.skipRawData(134);
355  return s;
356 };
357 /*=====================================================================================================*/
358 
359 
360 
361 
362 
363 
364 
365 
366 
367 
368 /***===================================================================================================*/
374 // static first:
376 {
377  return "SgKombOb03Record";
378 };
379 
380 
381 
382 //
384 {
385  std::cout << " OB03: prefix= " << prefix_ << "\n";
386  for (int i=0; i<16; i++)
387  {
388  std::cout << " #" << i
389  << ": rfFreqs=" << rfFreqs_[i]
390  << ", phCalFreqs=" << phCalFreqs_[i] << "\n";
391  };
392 };
393 
394 
395 
396 //
398 {
399  s >> (qint8&)rec.prefix_[0] >> (qint8&)rec.prefix_[1]
400  >> (qint8&)rec.prefix_[2] >> (qint8&)rec.prefix_[3];
401  rec.prefix_[4] = 0;
402  s.skipRawData(4);
403  for (int i=0; i<16; i++)
404  s >> (double&)rec.rfFreqs_[i];
405  for (int i=0; i<16; i++)
406  s >> (float&)rec.phCalFreqs_[i];
407  s.skipRawData(56);
408  return s;
409 };
410 /*=====================================================================================================*/
411 
412 
413 
414 
415 
416 
417 
418 
419 
420 
421 /***===================================================================================================*/
427 // static first:
429 {
430  return "SgKombBd01Record";
431 };
432 
433 
434 
435 //
437 {
438  std::cout << " BD01: prefix= " << prefix_
439  << " bwsMode= [" << bwsMode_ << "]"
440  << " " << bandId_ << "-band"
441  << " KOMB Procsd Number= " << kombProcsdNumber_
442  << "\n";
443  std::cout << " total Num Of Proc Channels: " << totalNumOfProcChannels_
444  << " tapeQualityCode= [" << tapeQualityCode_ << "]"
445  << " procRefFreq= " << procRefFreq_ << "Hz"
446  << "\n";
447  std::cout
448  << " TCorrStart : " << qPrintable(tCorrStart_.toString()) << "\n"
449  << " TCorrFinis : " << qPrintable(tCorrFinis_.toString()) << "\n"
450  << " TProcByKomb: " << qPrintable(tProcByKomb_.toString()) << "\n";
451 
452  for (int i=0; i<16; i++)
453  {
454  std::cout << " #" << i
455  << ": rfFreqs=" << rfFreqs_[i]
456  << " idxNum: " << idxNumTable_[i][0] << ":" << idxNumTable_[i][1]
457  << "\n";
458  };
459 };
460 
461 
462 
463 //
465 {
466  s >> (qint8&)rec.prefix_[0] >> (qint8&)rec.prefix_[1]
467  >> (qint8&)rec.prefix_[2] >> (qint8&)rec.prefix_[3];
468  s >> (qint8&)rec.bwsMode_[0] >> (qint8&)rec.bwsMode_[1]
469  >> (qint8&)rec.bwsMode_[2] >> (qint8&)rec.bwsMode_[3];
470  s >> (qint8&)rec.bandId_[0] >> (qint8&)rec.bandId_[1];
471  s >> (qint16&)rec.epochProcKomb_[0] >> (qint16&)rec.epochProcKomb_[1]
472  >> (qint16&)rec.epochProcKomb_[2] >> (qint16&)rec.epochProcKomb_[3];
473  s >> (qint16&)rec.kombProcsdNumber_;
474  s >> (qint16&)rec.epochCorrStart_[0] >> (qint16&)rec.epochCorrStart_[1]
475  >> (qint16&)rec.epochCorrStart_[2] >> (qint16&)rec.epochCorrStart_[3]
476  >> (qint16&)rec.epochCorrStart_[4] >> (qint16&)rec.epochCorrStart_[5];
477  s >> (qint16&)rec.epochCorrFinis_[0] >> (qint16&)rec.epochCorrFinis_[1]
478  >> (qint16&)rec.epochCorrFinis_[2] >> (qint16&)rec.epochCorrFinis_[3]
479  >> (qint16&)rec.epochCorrFinis_[4] >> (qint16&)rec.epochCorrFinis_[5];
480  s >> (qint16&)rec.totalNumOfProcChannels_;
481  for (int i=0; i<16; i++)
482  for (int j=0; j<2; j++)
483  s >> (qint16 &)rec.idxNumTable_[i][j];
484  s >> (qint8&)rec.tapeQualityCode_[0] >> (qint8&)rec.tapeQualityCode_[1]
485  >> (qint8&)rec.tapeQualityCode_[2] >> (qint8&)rec.tapeQualityCode_[3]
486  >> (qint8&)rec.tapeQualityCode_[4] >> (qint8&)rec.tapeQualityCode_[5];
487  s >> (double&)rec.procRefFreq_;
488  for (int i=0; i<16; i++)
489  s >> (double&)rec.rfFreqs_[i];
490  s.skipRawData(4);
491 
492  rec.tProcByKomb_.setUpEpoch(rec.epochProcKomb_[0], 0, rec.epochProcKomb_[1],
493  rec.epochProcKomb_[2], rec.epochProcKomb_[3], 0.0);
494 
495  rec.tCorrStart_.setUpEpoch(rec.epochCorrStart_[0], 0, rec.epochCorrStart_[1],
496  rec.epochCorrStart_[2], rec.epochCorrStart_[3],
497  rec.epochCorrStart_[4] + rec.epochCorrStart_[5]/1000.0);
498 
499  rec.tCorrFinis_.setUpEpoch(rec.epochCorrFinis_[0], 0, rec.epochCorrFinis_[1],
500  rec.epochCorrFinis_[2], rec.epochCorrFinis_[3],
501  rec.epochCorrFinis_[4] + rec.epochCorrFinis_[5]/1000.0);
502 
503  rec.prefix_[4] = rec.bwsMode_[4] = rec.bandId_[2] = rec.tapeQualityCode_[6] = 0;
504  return s;
505 };
506 /*=====================================================================================================*/
507 
508 
509 
510 
511 
512 
513 
514 
515 
516 
517 /***===================================================================================================*/
523 // static first:
525 {
526  return "SgKombBd02Record";
527 };
528 
529 
530 
531 //
533 {
534  std::cout << " BD02: prefix= " << prefix_
535  << " bwsMode= [" << bwsMode_ << "]"
536  << " " << bandId_ << "-band"
537  << "\n";
538  std::cout << " KOMB QCode: [" << kombQualityCode_ << "]"
539  << " rmsPpNumByChan= " << rmsPpNumByChan_
540  << " effectiveIntegrationPeriod= " << effectiveIntegrationPeriod_
541  << " rejectionRate= " << rejectionRate_
542  << "\n";
543  for (int i=0; i<20; i++)
544  {
545  std::cout << " #" << i
546  << " errorStatusMaskCode: [" << errorStatusMaskCode(i) << "]"
547  << "\n";
548  };
549  //char errorStatusMaskCode_[20][5];
550  std::cout << " obsDelayAtCentrlEpoch= " << obsDelayAtCentrlEpoch_
551  << " obsDelayRateAtCentrlEpoch= " << obsDelayRateAtCentrlEpoch_
552  << " obsTotalPhaseAtCentrlEpoch= " << obsTotalPhaseAtCentrlEpoch_
553  << "\n";
554  std::cout << " obsTotalPhaseAtReferEpoch= " << obsTotalPhaseAtReferEpoch_
555  << " obsTotalPhaseAtEarthCenterEpoch= " << obsTotalPhaseAtEarthCenterEpoch_
556  << " obsResidPhaseAtEarthCenterEpoch= " << obsResidPhaseAtEarthCenterEpoch_
557  << "\n";
558  std::cout << " searchWndCoarseDelay= ("
559  << searchWndCoarseDelay_[0] << ", " << searchWndCoarseDelay_[1] << ")"
560  << " searchWndFineDelay= ("
561  << searchWndFineDelay_[0] << ", " << searchWndFineDelay_[1] << ")"
562  << " searchWndFineDelayRate= ("
563  << searchWndFineDelayRate_[0] << ", " << searchWndFineDelayRate_[1] << ")"
564  << "\n";
565  std::cout << " deltaEpochs= " << deltaEpochs_
566  << "\n";
567 
568  std::cout << " TObsCentral: " << qPrintable(tObsCentral_.toString()) << "\n";
569  for (int i=0; i<16; i++)
570  {
571  std::cout << " #" << i
572  << " procPpNumTable: " << procPpNumTable_[i][0] << ":" << procPpNumTable_[i][1]
573  << "\n";
574  };
575 };
576 
577 
578 
579 //
581 {
582  s >> (qint8&)rec.prefix_[0] >> (qint8&)rec.prefix_[1]
583  >> (qint8&)rec.prefix_[2] >> (qint8&)rec.prefix_[3];
584  s >> (qint8&)rec.bwsMode_[0] >> (qint8&)rec.bwsMode_[1]
585  >> (qint8&)rec.bwsMode_[2] >> (qint8&)rec.bwsMode_[3];
586  s >> (qint8&)rec.bandId_[0] >> (qint8&)rec.bandId_[1];
587  s >> (qint8&)rec.kombQualityCode_[0] >> (qint8&)rec.kombQualityCode_[1];
588  for (int i=0; i<20; i++)
589  {
590  s >> (qint8&)rec.errorStatusMaskCode_[i][0] >> (qint8&)rec.errorStatusMaskCode_[i][1]
591  >> (qint8&)rec.errorStatusMaskCode_[i][2] >> (qint8&)rec.errorStatusMaskCode_[i][3];
592  rec.errorStatusMaskCode_[i][4] = 0;
593  };
594  for (int i=0; i<16; i++)
595  for (int j=0; j<2; j++)
596  s >> (qint16 &)rec.procPpNumTable_[i][j];
597  s >> (float&)rec.rmsPpNumByChan_ >> (float&)rec.effectiveIntegrationPeriod_
598  >> (float&)rec.rejectionRate_;
599  s >> (qint16&)rec.epochObsCentral_[0] >> (qint16&)rec.epochObsCentral_[1]
600  >> (qint16&)rec.epochObsCentral_[2] >> (qint16&)rec.epochObsCentral_[3]
601  >> (qint16&)rec.epochObsCentral_[4] >> (qint16&)rec.epochObsCentral_[5];
602  s >> (double&)rec.obsDelayAtCentrlEpoch_ >> (double&)rec.obsDelayRateAtCentrlEpoch_
603  >> (float&)rec.obsTotalPhaseAtCentrlEpoch_;
604  s >> (float&)rec.searchWndCoarseDelay_[0] >> (float&)rec.searchWndCoarseDelay_[1]
605  >> (float&)rec.searchWndFineDelay_[0] >> (float&)rec.searchWndFineDelay_[1]
606  >> (float&)rec.searchWndFineDelayRate_[0] >> (float&)rec.searchWndFineDelayRate_[1];
607 
608  s >> (double&)rec.deltaEpochs_ >> (float&)rec.obsTotalPhaseAtReferEpoch_
610  s.skipRawData(12);
611 
613  rec.epochObsCentral_[2], rec.epochObsCentral_[3],
614  rec.epochObsCentral_[4] + rec.epochObsCentral_[5]/1000.0);
615  rec.prefix_[4] = rec.bwsMode_[4] = rec.bandId_[2] = rec.kombQualityCode_[2] = 0;
616  return s;
617 };
618 /*=====================================================================================================*/
619 
620 
621 
622 
623 
624 
625 
626 
627 
628 
629 /***===================================================================================================*/
635 // static first:
637 {
638  return "SgKombBd03Record";
639 };
640 
641 
642 
643 //
645 {
646  std::cout << " BD03: prefix= " << prefix_
647  << " bwsMode= [" << bwsMode_ << "]"
648  << " " << bandId_ << "-band"
649  << "\n";
650  std::cout
651 // << " phaseCalRate@1= " << phaseCalRate1_
652 // << " phaseCalRate@2= " << phaseCalRate2_
653  << qPrintable(QString("").sprintf(" phaseCalRate@1=%.28g phaseCalRate@2= %.28g",
655 
656  << "\n";
657  for (int i=0; i<16; i++)
658  {
659  std::cout << " #" << i
660  << " phaseCal: Amp&Phase @1: "
661  << phaseCalAmpPhase1_[i][0] << " : " << phaseCalAmpPhase1_[i][1]
662  << "\n";
663  };
664 };
665 
666 
667 
668 //
670 {
671  s >> (qint8&)rec.prefix_[0] >> (qint8&)rec.prefix_[1]
672  >> (qint8&)rec.prefix_[2] >> (qint8&)rec.prefix_[3];
673  s >> (qint8&)rec.bwsMode_[0] >> (qint8&)rec.bwsMode_[1]
674  >> (qint8&)rec.bwsMode_[2] >> (qint8&)rec.bwsMode_[3];
675  s >> (qint8&)rec.bandId_[0] >> (qint8&)rec.bandId_[1];
676  s >> (double&)rec.phaseCalRate1_ >> (double&)rec.phaseCalRate2_;
677  for (int i=0; i<16; i++)
678  for (int j=0; j<2; j++)
679  s >> (float&)rec.phaseCalAmpPhase1_[i][j];
680  s.skipRawData(102);
681  rec.prefix_[4] = rec.bwsMode_[4] = rec.bandId_[2] = 0;
682  return s;
683 };
684 /*=====================================================================================================*/
685 
686 
687 
688 
689 
690 
691 
692 
693 
694 
695 /***===================================================================================================*/
701 // static first:
703 {
704  return "SgKombBd04Record";
705 };
706 
707 
708 
709 //
711 {
712  std::cout << " BD04: prefix= " << prefix_
713  << " bwsMode= [" << bwsMode_ << "]"
714  << " " << bandId_ << "-band"
715  << "\n";
716  for (int i=0; i<16; i++)
717  {
718  std::cout << " #" << i
719  << " phaseCal: Amp&Phase @2: "
720  << phaseCalAmpPhase2_[i][0] << " : " << phaseCalAmpPhase2_[i][1]
721  << "\n";
722  };
723 };
724 
725 
726 
727 //
729 {
730  s >> (qint8&)rec.prefix_[0] >> (qint8&)rec.prefix_[1]
731  >> (qint8&)rec.prefix_[2] >> (qint8&)rec.prefix_[3];
732  s >> (qint8&)rec.bwsMode_[0] >> (qint8&)rec.bwsMode_[1]
733  >> (qint8&)rec.bwsMode_[2] >> (qint8&)rec.bwsMode_[3];
734  s >> (qint8&)rec.bandId_[0] >> (qint8&)rec.bandId_[1];
735  s.skipRawData(16);
736  for (int i=0; i<16; i++)
737  for (int j=0; j<2; j++)
738  s >> (float&)rec.phaseCalAmpPhase2_[i][j];
739  s.skipRawData(102);
740  rec.prefix_[4] = rec.bwsMode_[4] = rec.bandId_[2] = 0;
741  return s;
742 };
743 /*=====================================================================================================*/
744 
745 
746 
747 
748 
749 
750 
751 
752 
753 
754 /***===================================================================================================*/
760 // static first:
762 {
763  return "SgKombBd05Record";
764 };
765 
766 
767 
768 //
770 {
771  std::cout << " BD05: prefix= " << prefix_
772  << " bwsMode= [" << bwsMode_ << "]"
773  << " " << bandId_ << "-band"
774  << "\n";
775  std::cout << " fineSearchFringeAmplitude= " << fineSearchFringeAmplitude_
776  << " coarseSearchFringeAmplitude= " << coarseSearchFringeAmplitude_
777  << " snr= " << snr_
778  << " incohFringeAmplitude= " << incohFringeAmplitude_
779  << " falseDetectionProbability= " << falseDetectionProbability_
780  << "\n";
781  std::cout << " obsDelayAtReferEpoch= " << obsDelayAtReferEpoch_
782  << " obsDelayResid= " << obsDelayResid_
783  << " obsDelaySigma= " << obsDelaySigma_
784  << " obsDelayAmbiguity= " << obsDelayAmbiguity_
785  << "\n";
786  std::cout << " obsDelayRateResid= " << obsDelayRateResid_
787  << " obsDelaySigma= " << obsDelaySigma_
788  << " obsDelayRateSigma= " << obsDelayRateSigma_
789  << "\n";
790  std::cout << " obsCoarseDelayAtReferEpoch= " << obsCoarseDelayAtReferEpoch_
791  << " obsCoarseDelayResid= " << obsCoarseDelayResid_
792  << " obsCoarseDelaySigma= " << obsCoarseDelaySigma_
793  << " obsCoarseDelayRateResid= " << obsCoarseDelayRateResid_
794  << "\n";
795  std::cout << " phaseDelayAtReferEpoch= " << phaseDelayAtReferEpoch_
796  << " phaseDelayAtReferEpochPlus_1sec= " << phaseDelayAtReferEpochPlus_1sec_
797  << " phaseDelayAtReferEpochMinus_1sec= " << phaseDelayAtReferEpochMinus_1sec_
798  << "\n";
799  for (int i=0; i<16; i++)
800  {
801  std::cout << " #" << i
802  << " fringe Amp&Phase: "
803  << fringeAmpPhase_[i][0] << " : " << fringeAmpPhase_[i][1]
804  << "\n";
805  };
806 };
807 
808 
809 
810 //
812 {
813  s >> (qint8&)rec.prefix_[0] >> (qint8&)rec.prefix_[1]
814  >> (qint8&)rec.prefix_[2] >> (qint8&)rec.prefix_[3];
815  s >> (qint8&)rec.bwsMode_[0] >> (qint8&)rec.bwsMode_[1]
816  >> (qint8&)rec.bwsMode_[2] >> (qint8&)rec.bwsMode_[3];
817  s >> (qint8&)rec.bandId_[0] >> (qint8&)rec.bandId_[1];
818  s >> (float&)rec.fineSearchFringeAmplitude_ >> (float&)rec.coarseSearchFringeAmplitude_
819  >> (float&)rec.snr_ >> (float&)rec.incohFringeAmplitude_ >> (float&)rec.falseDetectionProbability_;
820  s >> (double&)rec.obsDelayAtReferEpoch_ >> (double&)rec.obsDelayResid_ >> (float&)rec.obsDelaySigma_
821  >> (float&)rec.obsDelayAmbiguity_;
822  s >> (double&)rec.obsDelayRateAtReferEpoch_ >> (double&)rec.obsDelayRateResid_
823  >> (float&)rec.obsDelayRateSigma_ >> (double&)rec.obsCoarseDelayAtReferEpoch_
824  >> (double&)rec.obsCoarseDelayResid_ >> (float&)rec.obsCoarseDelaySigma_
825  >> (double&)rec.obsCoarseDelayRateResid_;
826  s >> (double&)rec.phaseDelayAtReferEpoch_ >> (double&)rec.phaseDelayAtReferEpochPlus_1sec_
827  >> (double&)rec.phaseDelayAtReferEpochMinus_1sec_;
828  for (int i=0; i<16; i++)
829  for (int j=0; j<2; j++)
830  s >> (float&)rec.fringeAmpPhase_[i][j];
831  s.skipRawData(2);
832  rec.prefix_[4] = rec.bwsMode_[4] = rec.bandId_[2] = 0;
833  return s;
834 };
835 /*=====================================================================================================*/
836 
837 
838 
839 
840 
841 
842 
843 
844 
845 
846 /***===================================================================================================*/
852 // static first:
853 const QString SgKombReader::className()
854 {
855  return "SgKombReader";
856 };
857 
858 
859 
860 //
862 {
863 };
864 
865 
866 
867 //
869 {
870  for (int i=0; i<headers_.size(); i++)
871  delete headers_.at(i);
872  headers_.clear();
873  headRecs_.clear();
874  for (QMap<QString, SgKombBd01Record*>::iterator it=bd01ByBand_.begin(); it!=bd01ByBand_.end(); ++it)
875  delete it.value();
876  for (QMap<QString, SgKombBd02Record*>::iterator it=bd02ByBand_.begin(); it!=bd02ByBand_.end(); ++it)
877  delete it.value();
878  for (QMap<QString, SgKombBd03Record*>::iterator it=bd03ByBand_.begin(); it!=bd03ByBand_.end(); ++it)
879  delete it.value();
880  for (QMap<QString, SgKombBd04Record*>::iterator it=bd04ByBand_.begin(); it!=bd04ByBand_.end(); ++it)
881  delete it.value();
882  for (QMap<QString, SgKombBd05Record*>::iterator it=bd05ByBand_.begin(); it!=bd05ByBand_.end(); ++it)
883  delete it.value();
884  bd01ByBand_.clear();
885  bd02ByBand_.clear();
886  bd03ByBand_.clear();
887  bd04ByBand_.clear();
888  bd05ByBand_.clear();
889  mapOfBands_.clear();
890  isOk_ = false;
891 };
892 
893 
894 
895 //
896 void SgKombReader::readFile(const QString& fileName)
897 {
898  SgKombStream s;
899  QFile f;
900  f.setFileName((fileName_=fileName));
901  f.open(QIODevice::ReadOnly);
902  s.setDevice(&f);
903  s.setByteOrder(QDataStream::BigEndian);
904 #if QT_VERSION >= 0x040500
905  s.setVersion (QDataStream::Qt_4_5); // starting from Qt_4_6 Qt spoils floats and doubles :(
906 #endif
907 // s.setVersion (QDataStream::Qt_4_5); // starting from Qt_4_6 Qt spoils floats and doubles :(
908  // s.setByteOrder(QDataStream::LittleEndian);
909 
910  clearData();
911  // read the header:
912  int numOfHdRecs;
913  SgKombHeader* hd;
914  QString bandKey("");
915  hd = new SgKombHeader;
916  s >> *hd;
917  numOfHdRecs = hd->totalNumberOfHeaderRecs();
918  if (isVerbose_)
919  hd->debugReport();
920  headers_ << hd;
921  for (int j=0; j<hd->entries().size(); j++)
922  headRecs_ << hd->entries().at(j);
923  for (int i=1; i<numOfHdRecs; i++)
924  {
925  hd = new SgKombHeader;
926  s >> *hd;
927  headers_ << hd;
928  if (isVerbose_)
929  hd->debugReport();
930  for (int j=0; j<hd->entries().size(); j++)
931  headRecs_ << hd->entries().at(j);
932  };
933 
934  for (int i=numOfHdRecs; i<headRecs_.size() && !s.atEnd(); i++)
935  {
936  SgKombHeaderRecord *entry=headRecs_.at(i);
937  if (strcmp(entry->prefix(), "OB01")==0)
938  {
939  s >> ob01_;
940  if (isVerbose_)
941  ob01_.debugReport();
942  }
943  else if (strcmp(entry->prefix(), "OB02")==0)
944  {
945  s >> ob02_;
946  if (isVerbose_)
947  ob02_.debugReport();
948  }
949  else if (strcmp(entry->prefix(), "OB03")==0)
950  {
951  s >> ob03_;
952  if (isVerbose_)
953  ob03_.debugReport();
954  }
955  else if (strcmp(entry->prefix(), "BD01")==0)
956  {
958  s >> *bd01;
959  bandKey = bd01->bandId();
960  if (bd01ByBand_.contains(bandKey))
961  {
962  delete bd01ByBand_[bandKey];
963  bd01ByBand_.remove(bandKey);
965  "::readFile(): the BD01 record has been replaced with the new one");
966  };
967  bd01ByBand_.insert(bandKey, bd01);
968  if (!mapOfBands_.contains(bandKey))
969  mapOfBands_.insert(bandKey, bandKey);
970  if (isVerbose_)
971  bd01->debugReport();
972  }
973  else if (strcmp(entry->prefix(), "BD02")==0)
974  {
976  s >> *bd02;
977  bandKey = bd02->bandId();
978  if (bd02ByBand_.contains(bandKey))
979  {
980  delete bd02ByBand_[bandKey];
981  bd02ByBand_.remove(bandKey);
983  "::readFile(): the BD02 record has been replaced with the new one");
984  };
985  bd02ByBand_.insert(bandKey, bd02);
986  if (!mapOfBands_.contains(bandKey))
987  mapOfBands_.insert(bandKey, bandKey);
988  if (isVerbose_)
989  bd02->debugReport();
990  }
991  else if (strcmp(entry->prefix(), "BD03")==0)
992  {
994  s >> *bd03;
995  bandKey = bd03->bandId();
996  if (bd03ByBand_.contains(bandKey))
997  {
998  delete bd03ByBand_[bandKey];
999  bd03ByBand_.remove(bandKey);
1001  "::readFile(): the BD03 record has been replaced with the new one");
1002  };
1003  bd03ByBand_.insert(bandKey, bd03);
1004  if (!mapOfBands_.contains(bandKey))
1005  mapOfBands_.insert(bandKey, bandKey);
1006  if (isVerbose_)
1007  bd03->debugReport();
1008  }
1009  else if (strcmp(entry->prefix(), "BD04")==0)
1010  {
1012  s >> *bd04;
1013  bandKey = bd04->bandId();
1014  if (bd04ByBand_.contains(bandKey))
1015  {
1016  delete bd04ByBand_[bandKey];
1017  bd04ByBand_.remove(bandKey);
1019  "::readFile(): the BD04 record has been replaced with the new one");
1020  };
1021  bd04ByBand_.insert(bandKey, bd04);
1022  if (!mapOfBands_.contains(bandKey))
1023  mapOfBands_.insert(bandKey, bandKey);
1024  if (isVerbose_)
1025  bd04->debugReport();
1026  }
1027  else if (strcmp(entry->prefix(), "BD05")==0)
1028  {
1030  s >> *bd05;
1031  bandKey = bd05->bandId();
1032  if (bd05ByBand_.contains(bandKey))
1033  {
1034  delete bd05ByBand_[bandKey];
1035  bd05ByBand_.remove(bandKey);
1037  "::readFile(): the BD05 record has been replaced with the new one");
1038  };
1039  bd05ByBand_.insert(bandKey, bd05);
1040  if (!mapOfBands_.contains(bandKey))
1041  mapOfBands_.insert(bandKey, bandKey);
1042  if (isVerbose_)
1043  bd05->debugReport();
1044  }
1045  else
1046  {
1047  s.skipRawData(256);
1048  // std::cout << " ...skipped\n";
1049  };
1050  };
1051  //
1052  // check the records:
1053  if (strlen(ob01_.sourceName())==0 || *ob01_.sourceName()=='?')
1054  {
1056  "::readFile(): the OB01 record has wrong source name");
1057  return;
1058  };
1059  if (strlen(ob01_.station1Name())==0 || *ob01_.station1Name()=='?')
1060  {
1062  "::readFile(): the OB01 record has wrong station1 name");
1063  return;
1064  };
1065  if (strlen(ob01_.station2Name())==0 || *ob01_.station2Name()=='?')
1066  {
1068  "::readFile(): the OB01 record has wrong station1 name");
1069  return;
1070  };
1071  if (ob02_.numOfChannels()==0)
1072  {
1074  "::readFile(): the OB02 record has zero number of channels");
1075  return;
1076  };
1077  // numbers of bands:
1078  if (mapOfBands_.size() != bd01ByBand_.size())
1079  {
1081  "::readFile(): the number of registered bands, " + QString("").setNum(mapOfBands_.size()) +
1082  ", is not equal to the number of bands of BD01 records, " +
1083  QString("").setNum(bd01ByBand_.size()));
1084  return;
1085  };
1086  if (mapOfBands_.size() != bd02ByBand_.size())
1087  {
1089  "::readFile(): the number of registered bands, " + QString("").setNum(mapOfBands_.size()) +
1090  ", is not equal to the number of bands of BD02 records, " +
1091  QString("").setNum(bd02ByBand_.size()));
1092  return;
1093  };
1094  if (mapOfBands_.size() != bd03ByBand_.size())
1095  {
1097  "::readFile(): the number of registered bands, " + QString("").setNum(mapOfBands_.size()) +
1098  ", is not equal to the number of bands of BD03 records, " +
1099  QString("").setNum(bd03ByBand_.size()));
1100  return;
1101  };
1102  if (mapOfBands_.size() != bd04ByBand_.size())
1103  {
1105  "::readFile(): the number of registered bands, " + QString("").setNum(mapOfBands_.size()) +
1106  ", is not equal to the number of bands of BD04 records, " +
1107  QString("").setNum(bd04ByBand_.size()));
1108  return;
1109  };
1110  if (mapOfBands_.size() != bd05ByBand_.size())
1111  {
1113  "::readFile(): the number of registered bands, " + QString("").setNum(mapOfBands_.size()) +
1114  ", is not equal to the number of bands of BD05 records, " +
1115  QString("").setNum(bd05ByBand_.size()));
1116  return;
1117  };
1118  for (QMap<QString, QString>::iterator it=mapOfBands_.begin(); it!=mapOfBands_.end(); ++it)
1119  {
1120  if (!bd01ByBand_.contains(it.key()))
1121  {
1123  "::readFile(): the " + it.key() + "-band is missed in the set of bands of BD01 records");
1124  return;
1125  };
1126  if (!bd02ByBand_.contains(it.key()))
1127  {
1129  "::readFile(): the " + it.key() + "-band is missed in the set of bands of BD02 records");
1130  return;
1131  };
1132  if (!bd03ByBand_.contains(it.key()))
1133  {
1135  "::readFile(): the " + it.key() + "-band is missed in the set of bands of BD03 records");
1136  return;
1137  };
1138  if (!bd04ByBand_.contains(it.key()))
1139  {
1141  "::readFile(): the " + it.key() + "-band is missed in the set of bands of BD04 records");
1142  return;
1143  };
1144  if (!bd05ByBand_.contains(it.key()))
1145  {
1147  "::readFile(): the " + it.key() + "-band is missed in the set of bands of BD05 records");
1148  return;
1149  };
1150  };
1151  isOk_ = true;
1152 };
1153 /*=====================================================================================================*/
1154 
1155 
1156 
1157 
1158 
1159 
1160 
1161 
1162 
1163 
1164 /*=====================================================================================================*/
1165 
1166 //
1167 // aux functions:
1168 //
1169 
1170 
1171 // i/o:
1172 
1173 
1174 /*=====================================================================================================*/
1175 //
1176 // constants:
1177 //
1178 
1179 
1180 /*=====================================================================================================*/
SgKombStream & operator>>(SgKombStream &s, SgKombHeaderRecord &record)
SgLogger * logger
Definition: SgLogger.cpp:231
@ Z_AXIS
Definition: SgMathSupport.h:81
@ X_AXIS
Definition: SgMathSupport.h:81
@ Y_AXIS
Definition: SgMathSupport.h:81
#define RAD2DEG
radians to degrees:
Definition: SgMathSupport.h:41
double at(DIRECTION i) const
Definition: Sg3dVector.h:91
short epochProcKomb_[4]
Definition: SgKombFormat.h:445
char tapeQualityCode_[7]
Definition: SgKombFormat.h:451
short epochCorrFinis_[6]
Definition: SgKombFormat.h:448
short totalNumOfProcChannels_
Definition: SgKombFormat.h:449
double rfFreqs_[16]
Definition: SgKombFormat.h:453
const char * bandId() const
Definition: SgKombFormat.h:413
short epochCorrStart_[6]
Definition: SgKombFormat.h:447
short idxNumTable_[16][2]
Definition: SgKombFormat.h:450
static const QString className()
double obsDelayAtCentrlEpoch_
Definition: SgKombFormat.h:536
float obsTotalPhaseAtReferEpoch_
Definition: SgKombFormat.h:543
const char * bandId() const
Definition: SgKombFormat.h:488
char kombQualityCode_[3]
Definition: SgKombFormat.h:529
float obsTotalPhaseAtEarthCenterEpoch_
Definition: SgKombFormat.h:544
float effectiveIntegrationPeriod_
Definition: SgKombFormat.h:533
float searchWndFineDelayRate_[2]
Definition: SgKombFormat.h:541
char errorStatusMaskCode_[20][5]
Definition: SgKombFormat.h:530
float obsResidPhaseAtEarthCenterEpoch_
Definition: SgKombFormat.h:545
float searchWndCoarseDelay_[2]
Definition: SgKombFormat.h:539
short procPpNumTable_[16][2]
Definition: SgKombFormat.h:531
static const QString className()
float obsTotalPhaseAtCentrlEpoch_
Definition: SgKombFormat.h:538
short epochObsCentral_[6]
Definition: SgKombFormat.h:535
double obsDelayRateAtCentrlEpoch_
Definition: SgKombFormat.h:537
const char * errorStatusMaskCode(int i) const
Definition: SgKombFormat.h:490
float searchWndFineDelay_[2]
Definition: SgKombFormat.h:540
static const QString className()
float phaseCalAmpPhase1_[16][2]
Definition: SgKombFormat.h:605
const char * bandId() const
Definition: SgKombFormat.h:578
const char * bandId() const
Definition: SgKombFormat.h:637
static const QString className()
float phaseCalAmpPhase2_[16][2]
Definition: SgKombFormat.h:660
double obsCoarseDelayAtReferEpoch_
Definition: SgKombFormat.h:746
double obsDelayAtReferEpoch_
Definition: SgKombFormat.h:739
double phaseDelayAtReferEpochMinus_1sec_
Definition: SgKombFormat.h:752
float obsDelayRateSigma_
Definition: SgKombFormat.h:745
float coarseSearchFringeAmplitude_
Definition: SgKombFormat.h:735
float fineSearchFringeAmplitude_
Definition: SgKombFormat.h:734
float obsCoarseDelaySigma_
Definition: SgKombFormat.h:748
float incohFringeAmplitude_
Definition: SgKombFormat.h:737
float obsDelayAmbiguity_
Definition: SgKombFormat.h:742
double phaseDelayAtReferEpochPlus_1sec_
Definition: SgKombFormat.h:751
double obsDelayRateAtReferEpoch_
Definition: SgKombFormat.h:743
static const QString className()
double obsCoarseDelayResid_
Definition: SgKombFormat.h:747
float falseDetectionProbability_
Definition: SgKombFormat.h:738
double obsDelayRateResid_
Definition: SgKombFormat.h:744
float fringeAmpPhase_[16][2]
Definition: SgKombFormat.h:753
double obsCoarseDelayRateResid_
Definition: SgKombFormat.h:749
double phaseDelayAtReferEpoch_
Definition: SgKombFormat.h:750
const char * bandId() const
Definition: SgKombFormat.h:692
const char * prefix() const
Definition: SgKombFormat.h:92
static const QString className()
QList< SgKombHeaderRecord * > entries_
Definition: SgKombFormat.h:177
char prefixIdx_[3]
Definition: SgKombFormat.h:170
short totalNumberOfRecs_
Definition: SgKombFormat.h:174
char prefix_[3]
Definition: SgKombFormat.h:169
char experimentCode_[11]
Definition: SgKombFormat.h:171
void debugReport()
static const QString className()
short totalNumberOfHeaderRecs() const
Definition: SgKombFormat.h:149
const QList< SgKombHeaderRecord * > & entries() const
Definition: SgKombFormat.h:151
char baselineId_[3]
Definition: SgKombFormat.h:173
char kombFileName_[7]
Definition: SgKombFormat.h:176
short totalNumberOfHeaderRecs_
Definition: SgKombFormat.h:175
char correlatorMode_[3]
Definition: SgKombFormat.h:263
char correlatorFileName_[7]
Definition: SgKombFormat.h:256
char experimentCode_[11]
Definition: SgKombFormat.h:250
double instrumentalDelay_
Definition: SgKombFormat.h:271
char station1Name_[9]
Definition: SgKombFormat.h:265
short epochObsRef_[5]
Definition: SgKombFormat.h:255
const char * station1Name() const
Definition: SgKombFormat.h:222
double aPrioriClockError_
Definition: SgKombFormat.h:268
short epochObsStop_[5]
Definition: SgKombFormat.h:254
const char * station2Name() const
Definition: SgKombFormat.h:223
short epochProcCorr_[4]
Definition: SgKombFormat.h:258
const char * sourceName() const
Definition: SgKombFormat.h:221
char kombFileName_[7]
Definition: SgKombFormat.h:257
double aPrioriObses_[4]
Definition: SgKombFormat.h:267
char station2Name_[9]
Definition: SgKombFormat.h:266
Sg3dVector r1_
Definition: SgKombFormat.h:278
short epochObsStart_[5]
Definition: SgKombFormat.h:253
static const QString className()
Sg3dVector r2_
Definition: SgKombFormat.h:279
double aPrioriClockOffset_
Definition: SgKombFormat.h:269
short idxNumTable_[16][2]
Definition: SgKombFormat.h:330
static const QString className()
short numOfChannels() const
Definition: SgKombFormat.h:310
double rfFreqs_[16]
Definition: SgKombFormat.h:380
static const QString className()
float phCalFreqs_[16]
Definition: SgKombFormat.h:381
SgKombOb01Record ob01_
Definition: SgKombFormat.h:828
QMap< QString, SgKombBd04Record * > bd04ByBand_
Definition: SgKombFormat.h:838
QMap< QString, SgKombBd05Record * > bd05ByBand_
Definition: SgKombFormat.h:840
static const QString className()
SgKombOb03Record ob03_
Definition: SgKombFormat.h:830
const SgKombBd03Record * bd03(const QString &bandKey) const
Definition: SgKombFormat.h:799
QMap< QString, SgKombBd02Record * > bd02ByBand_
Definition: SgKombFormat.h:834
const SgKombBd04Record * bd04(const QString &bandKey) const
Definition: SgKombFormat.h:801
const SgKombBd05Record * bd05(const QString &bandKey) const
Definition: SgKombFormat.h:803
QMap< QString, SgKombBd03Record * > bd03ByBand_
Definition: SgKombFormat.h:836
const SgKombBd01Record * bd01(const QString &bandKey) const
Definition: SgKombFormat.h:795
const SgKombBd02Record * bd02(const QString &bandKey) const
Definition: SgKombFormat.h:797
QMap< QString, QString > mapOfBands_
Definition: SgKombFormat.h:841
QString fileName_
Definition: SgKombFormat.h:825
void readFile(const QString &fileName)
void debugReport()
QList< SgKombHeaderRecord * > headRecs_
Definition: SgKombFormat.h:827
SgKombOb02Record ob02_
Definition: SgKombFormat.h:829
QList< SgKombHeader * > headers_
Definition: SgKombFormat.h:826
QMap< QString, SgKombBd01Record * > bd01ByBand_
Definition: SgKombFormat.h:832
virtual void write(LogLevel, quint32, const QString &, bool=false)
Definition: SgLogger.cpp:88
@ IO_BIN
Definition: SgLogger.h:64
QString toString(Format format=F_Verbose) const
Definition: SgMJD.cpp:1008
void setUpEpoch(int year, int month, int day, int hour, int min, double sec)
Definition: SgMJD.cpp:255
static QString dn2String(double dn, bool mandatorySign=false)
static QString ra2String(double ra)