General Purpose Geodetic Library
SgGuiVlbiStationList.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 #include <SgGuiVlbiStationList.h>
25 
26 
27 #if QT_VERSION >= 0x050000
28 # include <QtWidgets/QBoxLayout>
29 # include <QtWidgets/QGroupBox>
30 # include <QtWidgets/QLabel>
31 # include <QtWidgets/QLineEdit>
32 # include <QtWidgets/QMessageBox>
33 # include <QtWidgets/QPushButton>
34 #else
35 # include <QtGui/QBoxLayout>
36 # include <QtGui/QGroupBox>
37 # include <QtGui/QLabel>
38 # include <QtGui/QLineEdit>
39 # include <QtGui/QMessageBox>
40 # include <QtGui/QPushButton>
41 #endif
42 
43 
44 
45 
46 #include <SgGuiParameterCfg.h>
47 #include <SgLogger.h>
48 #include <SgParametersDescriptor.h>
49 
50 
51 
52 
53 
55 {
57  SCI_NAME = 1,
60  //
63  SCI_S_ACM = 6,
68 
70 
73  SCI_S_LC = 14,
74  SCI_S_LZ = 15,
78  //
86 };
87 
88 
89 
90 /*=======================================================================================================
91 *
92 * SgGuiVlbiStationItem METHODS:
93 *
94 *======================================================================================================*/
96 {
97  int column=treeWidget()->sortColumn();
98  double dL, dR;
99  bool isOk;
100  dL = text(column).toDouble(&isOk);
101  if (isOk)
102  {
103  dR = other.text(column).toDouble(&isOk);
104  if (isOk)
105  return dL < dR;
106  };
107  return QTreeWidgetItem::operator<(other);
108 };
109 /*=====================================================================================================*/
110 
111 
112 
113 
114 /*=======================================================================================================
115 *
116 * SgGuiVlbiStationList METHODS:
117 *
118 *======================================================================================================*/
120  QMap<QString, SgVlbiStationInfo*>* map, const SgMJD& t0, QWidget* parent, Qt::WindowFlags f)
121  : QWidget(parent, f)
122 {
123  scl4delay_ = 1.0e12;
124  scl4rate_ = 1.0e15;
125  constColumns_ = -1;
126  t0_ = t0;
127  browseMode_ = mode;
128  stationsByName_ = map;
129  ownerName_ = ownerName;
130  QString str;
131  QBoxLayout *layout = new QVBoxLayout(this);
132  QStringList headerLabels;
133  headerLabels
134  << "Idx"
135  << "Name"
136  << "Tot.Obs"
137  << "Prc.Obs"
138  ;
139  switch (browseMode_)
140  {
141  case OBM_BAND:
142  constColumns_ = 11;
143  headerLabels
144  << "Disp(ps)"
145  << "Disp(fs/s)"
146  << "Sig0(ps)"
147  << "Sig0(fs/s)"
148  << "WRMS(ps)"
149  << "WRMS(fs/s)"
150  << "Clk.Brks"
151  ;
152  break;
153  case OBM_SESSION:
154  constColumns_ = 8;
155  headerLabels
156  << "Scans"
157  << "WRMS(ps)"
158  << "ACM"
159  << "Clk:Brk"
160  << "Clk:n"
161  << "Clk:Ref"
162  << "Omit"
163  << "Cab.Sgn"
164  << "Cab.Cal"
165  << "Flags"
166  << "LC"
167  << "LZ"
168  << "R:Est"
169  << "R:C"
170  << "AxO:Est"
171  ;
172  break;
173  case OBM_PROJECT:
174  break;
175  };
176  //
177  tweStations_ = new SgGuiQTreeWidgetExt(this);
178  tweStations_->setColumnCount(headerLabels.count());
179  tweStations_->setHeaderLabels(headerLabels);
180  //
181  QMap<QString, SgVlbiStationInfo*>::const_iterator i = stationsByName_->constBegin();
182  for (; i!=stationsByName_->constEnd(); ++i)
183  {
184  SgVlbiStationInfo* stInfo = i.value();
185 
187  item->setStInfo(stInfo);
188  item->setText(SCI_NUMBER, str.sprintf("%4d", stInfo->getIdx()));
189  item->setData(SCI_NUMBER, Qt::TextAlignmentRole, Qt::AlignRight);
190  item->setToolTip(SCI_NUMBER, "Index of a station");
191 
192  item->setText(SCI_NAME, stInfo->getKey());
193  item->setData(SCI_NAME, Qt::TextAlignmentRole, Qt::AlignLeft);
194 
195  item->setText(SCI_TOT_OBS, str.sprintf("%7d", stInfo->numTotal(DT_DELAY)));
196  item->setData(SCI_TOT_OBS, Qt::TextAlignmentRole, Qt::AlignRight);
197 
198  item->setText(SCI_PRC_OBS, str.sprintf("%7d", stInfo->numProcessed(DT_DELAY)));
199  item->setData(SCI_PRC_OBS, Qt::TextAlignmentRole, Qt::AlignRight);
200 
201  if (browseMode_==OBM_BAND)
202  {
203  item->setText(SCI_B_DISP_DEL, str.sprintf("%11.1f", stInfo->dispersion(DT_DELAY)*scl4delay_));
204  item->setData(SCI_B_DISP_DEL, Qt::TextAlignmentRole, Qt::AlignRight);
205  item->setText(SCI_B_DISP_RAT, str.sprintf("%11.1f", stInfo->dispersion(DT_RATE)*scl4rate_));
206  item->setData(SCI_B_DISP_RAT, Qt::TextAlignmentRole, Qt::AlignRight);
207 
208  item->setText(SCI_B_SIG0_DEL, str.sprintf("%11.1f", stInfo->getSigma2add(DT_DELAY)*scl4delay_));
209  item->setData(SCI_B_SIG0_DEL, Qt::TextAlignmentRole, Qt::AlignRight);
210  item->setText(SCI_B_SIG0_RAT, str.sprintf("%11.1f", stInfo->getSigma2add(DT_RATE)*scl4rate_));
211  item->setData(SCI_B_SIG0_RAT, Qt::TextAlignmentRole, Qt::AlignRight);
212 
213  item->setText(SCI_B_WRMS_DEL, str.sprintf("%11.1f", stInfo->wrms(DT_DELAY)*scl4delay_));
214  item->setData(SCI_B_WRMS_DEL, Qt::TextAlignmentRole, Qt::AlignRight);
215  item->setText(SCI_B_WRMS_RAT, str.sprintf("%11.1f", stInfo->wrms(DT_RATE)*scl4rate_));
216  item->setData(SCI_B_WRMS_RAT, Qt::TextAlignmentRole, Qt::AlignRight);
217 
218  item->setText(SCI_B_CLK_BRKS, str.sprintf("%d", stInfo->clockBreaks().size()));
219  item->setData(SCI_B_CLK_BRKS, Qt::TextAlignmentRole, Qt::AlignCenter);
220  //
221  };
223  {
224  item->setText(SCI_S_SCANS, str.sprintf("%7d", stInfo->auxObservationByScanId()->size()));
225  item->setData(SCI_S_SCANS, Qt::TextAlignmentRole, Qt::AlignRight);
226 
227  item->setText(SCI_S_WRMS_DEL, str.sprintf("%11.1f", stInfo->wrms(DT_DELAY)*scl4delay_));
228  item->setData(SCI_S_WRMS_DEL, Qt::TextAlignmentRole, Qt::AlignRight);
229 // item->setText(SCI_S_WRMS_RAT, str.sprintf("%11.1f", stInfo->wrms(DT_RATE)*scl4rate_));
230 // item->setData(SCI_S_WRMS_RAT, Qt::TextAlignmentRole, Qt::AlignRight);
231 
232  item->setText(SCI_S_CLK_BRKS, str.sprintf("%d", stInfo->clockBreaks().size()));
233  item->setData(SCI_S_CLK_BRKS, Qt::TextAlignmentRole, Qt::AlignCenter);
234 
235  item->setText(SCI_S_ACM, stInfo->getNeed2useAPrioriClocks()? "Y" : "");
236  item->setData(SCI_S_ACM, Qt::TextAlignmentRole, Qt::AlignCenter);
237  //
238  //
239  item->setText(SCI_S_IGNORE, stInfo->isAttr(SgVlbiStationInfo::Attr_NOT_VALID)? "X" : "");
240  item->setData(SCI_S_IGNORE, Qt::TextAlignmentRole, Qt::AlignCenter);
241  //
242  item->setText(SCI_S_CBL_SGN, stInfo->getCableCalMultiplierDBCal()==-1.0?"-":
243  (stInfo->getCableCalMultiplierDBCal()==1.0?"+":" "));
244  item->setData(SCI_S_CBL_SGN, Qt::TextAlignmentRole, Qt::AlignCenter);
245  //
246  item->setText(SCI_S_CLK_TERMS, str.sprintf("%2d", stInfo->getClocksModelOrder()));
247  item->setData(SCI_S_CLK_TERMS, Qt::TextAlignmentRole, Qt::AlignRight);
248  //
249  item->setText(SCI_S_REF_CLK, stInfo->isAttr(SgVlbiStationInfo::Attr_REFERENCE_CLOCKS)? "R" : "");
250  item->setData(SCI_S_REF_CLK, Qt::TextAlignmentRole, Qt::AlignCenter);
251  //
252  item->setText(SCI_S_CBL_CAL, stInfo->isAttr(SgVlbiStationInfo::Attr_IGNORE_CABLE_CAL)? "" :
253  (stInfo->isAttr(SgVlbiStationInfo::Attr_INVERSE_CABLE)? "-Y" : "Y"));
254  item->setData(SCI_S_CBL_CAL, Qt::TextAlignmentRole, Qt::AlignCenter);
255  //
256  item->setText(SCI_S_FLAGS,
257  QString(stInfo->isAttr(SgVlbiStationInfo::Attr_BAD_METEO)? "m" : "") +
258  QString(stInfo->isAttr(SgVlbiStationInfo::Attr_ART_METEO)? "a" : "") +
259  QString(stInfo->isAttr(SgVlbiStationInfo::Attr_DONT_ESTIMATE_TRPS)? "-Z" : "")
260  );
261  item->setData(SCI_S_FLAGS, Qt::TextAlignmentRole, Qt::AlignCenter);
262  //
263  item->setText(SCI_S_LC, stInfo->isAttr(SgVlbiStationInfo::Attr_USE_LOCAL_CLOCKS)? "Y" : "");
264  item->setData(SCI_S_LC, Qt::TextAlignmentRole, Qt::AlignCenter);
265  //
266  item->setText(SCI_S_LZ, stInfo->isAttr(SgVlbiStationInfo::Attr_USE_LOCAL_ZENITH)? "Y" : "");
267  item->setData(SCI_S_LZ, Qt::TextAlignmentRole, Qt::AlignCenter);
268  //
269  item->setText(SCI_S_COO_EST, stInfo->isAttr(SgVlbiStationInfo::Attr_ESTIMATE_COO)? "Y" : "");
270  item->setData(SCI_S_COO_EST, Qt::TextAlignmentRole, Qt::AlignCenter);
271  //
272  item->setText(SCI_S_COO_CON, stInfo->isAttr(SgVlbiStationInfo::Attr_CONSTRAIN_COO)? "*" : "");
273  item->setData(SCI_S_COO_CON, Qt::TextAlignmentRole, Qt::AlignCenter);
274  //
275  item->setText(SCI_S_AXO_EST, stInfo->isAttr(SgVlbiStationInfo::Attr_ESTIMATE_AXO)? "Y" : "");
276  item->setData(SCI_S_AXO_EST, Qt::TextAlignmentRole, Qt::AlignCenter);
277  };
278  };
279 
280  tweStations_->header()->resizeSections(QHeaderView::ResizeToContents);
281 #if QT_VERSION >= 0x050000
282  tweStations_->header()->setSectionResizeMode(QHeaderView::Interactive);
283 #else
284  tweStations_->header()->setResizeMode(QHeaderView::Interactive);
285 #endif
286 
287  tweStations_->header()->setStretchLastSection(false);
288 
289  tweStations_->setSortingEnabled(true);
290  tweStations_->setUniformRowHeights(true);
291  tweStations_->sortByColumn(1, Qt::AscendingOrder);
292  tweStations_->setFocus();
293  tweStations_->setItemsExpandable(false);
294  tweStations_->setAllColumnsShowFocus(true);
295  layout->addWidget(tweStations_);
296 
297  if (browseMode_!=OBM_BAND)
298  {
299  connect(tweStations_,
300  SIGNAL(moveUponItem(QTreeWidgetItem*, int, Qt::MouseButton, Qt::KeyboardModifiers)),
301  SLOT (toggleEntryMoveEnable(QTreeWidgetItem*, int, Qt::MouseButton, Qt::KeyboardModifiers))
302  );
303  };
304  connect(tweStations_,
305  SIGNAL(itemDoubleClicked (QTreeWidgetItem*, int)),
306  SLOT (entryDoubleClicked(QTreeWidgetItem*, int))
307  );
308 };
309 
310 
311 
312 //
314  Qt::MouseButton mouseButtonState, Qt::KeyboardModifiers modifiers)
315 {
316  if (!item) // may be NULL
317  return;
318 
319  int n;
320  QString str;
321  SgVlbiStationInfo *stInfo=((SgGuiVlbiStationItem*)item)->getStInfo();
322  switch (column)
323  {
324  case SCI_S_IGNORE:
326  item->setText(SCI_S_IGNORE, stInfo->isAttr(SgVlbiStationInfo::Attr_NOT_VALID)? "X" : "");
327  break;
328  case SCI_S_CLK_TERMS:
329  n = stInfo->getClocksModelOrder();
330  switch (mouseButtonState)
331  {
332  case Qt::LeftButton:
333  if (n>0)
334  n--;
335  break;
336  case Qt::RightButton:
337  if (n<10)
338  n++;
339  break;
340  default:
341  n = 3;
342  break;
343  };
344  stInfo->setClocksModelOrder(n);
345  item->setText(SCI_S_CLK_TERMS, str.sprintf("%2d", stInfo->getClocksModelOrder()));
346  break;
347  case SCI_S_REF_CLK:
350  {
351  item->setText(SCI_S_REF_CLK, "R");
352  emit refClockStationSelected(stInfo->getKey());
353  }
354  else
355  {
356  item->setText(SCI_S_REF_CLK, "");
357  emit refClockStationDeselected(stInfo->getKey());
358  };
359  break;
360  case SCI_S_CBL_CAL:
361  if (modifiers == Qt::ControlModifier)
363  else
366  (stInfo->isAttr(SgVlbiStationInfo::Attr_INVERSE_CABLE)? "-Y" : "Y"));
367  break;
368  case SCI_S_FLAGS:
370  item->setText(SCI_S_FLAGS,
371  QString(stInfo->isAttr(SgVlbiStationInfo::Attr_BAD_METEO)? "m" : "") +
372  QString(stInfo->isAttr(SgVlbiStationInfo::Attr_ART_METEO)? "a" : "") +
373  QString(stInfo->isAttr(SgVlbiStationInfo::Attr_DONT_ESTIMATE_TRPS)? "-Z" : "")
374  );
375  break;
376  case SCI_S_LC:
378  item->setText(SCI_S_LC, stInfo->isAttr(SgVlbiStationInfo::Attr_USE_LOCAL_CLOCKS)? "Y" : "");
379  break;
380  case SCI_S_LZ:
382  item->setText(SCI_S_LZ, stInfo->isAttr(SgVlbiStationInfo::Attr_USE_LOCAL_ZENITH)? "Y" : "");
383  break;
384  case SCI_S_COO_EST:
386  item->setText(SCI_S_COO_EST, stInfo->isAttr(SgVlbiStationInfo::Attr_ESTIMATE_COO)? "Y" : "");
387  break;
388  case SCI_S_COO_CON:
390  item->setText(SCI_S_COO_CON, stInfo->isAttr(SgVlbiStationInfo::Attr_CONSTRAIN_COO)? "*" : "");
391  break;
392  case SCI_S_AXO_EST:
394  item->setText(SCI_S_AXO_EST, stInfo->isAttr(SgVlbiStationInfo::Attr_ESTIMATE_AXO)? "Y" : "");
395  break;
396  default:
397  // std::cout << "default, n=" << n << "\n";
398  break;
399  };
400 };
401 
402 
403 
404 //
406 {
407  if (!item || column>=constColumns_)
408 // if (!item)
409  return;
410  SgVlbiStationInfo *stInfo = ((SgGuiVlbiStationItem*)item)->getStInfo();
411  // std::cout << " column=" << column << ", station: " << qPrintable(stInfo->getKey()) << "\n";
412  if (stInfo)
413  {
415  t0_, this);
416  connect(siEditor, SIGNAL(contentModified(bool)), SLOT(modifyStationInfo(bool)));
417  siEditor->show();
418  };
419 };
420 
421 
422 
423 //
425 {
426  if (isModified)
427  updateContent();
428 };
429 
430 
431 
432 //
434 {
435  QString str;
436  SgVlbiStationInfo *stInfo=NULL;
437  SgGuiVlbiStationItem *item=NULL;
438  QTreeWidgetItemIterator it(tweStations_);
439  while (*it)
440  {
441  item = (SgGuiVlbiStationItem*)(*it);
442  stInfo = item->getStInfo();
443  item->setText(SCI_NUMBER, str.sprintf("%4d", stInfo->getIdx()));
444  item->setText(SCI_NAME, stInfo->getKey());
445  item->setText(SCI_TOT_OBS, str.sprintf("%7d", stInfo->numTotal(DT_DELAY)));
446  item->setText(SCI_PRC_OBS, str.sprintf("%7d", stInfo->numProcessed(DT_DELAY)));
447  if (browseMode_==OBM_BAND)
448  {
449  item->setText(SCI_B_DISP_DEL, str.sprintf("%11.1f", stInfo->dispersion(DT_DELAY)*scl4delay_));
450  item->setText(SCI_B_DISP_RAT, str.sprintf("%11.1f", stInfo->dispersion(DT_RATE )*scl4rate_));
451  item->setText(SCI_B_SIG0_DEL, str.sprintf("%11.1f", stInfo->getSigma2add(DT_DELAY)*scl4delay_));
452  item->setText(SCI_B_SIG0_RAT, str.sprintf("%11.1f", stInfo->getSigma2add(DT_RATE )*scl4rate_));
453  item->setText(SCI_B_WRMS_DEL, str.sprintf("%11.1f", stInfo->wrms(DT_DELAY)*scl4delay_));
454  item->setText(SCI_B_WRMS_RAT, str.sprintf("%11.1f", stInfo->wrms(DT_RATE )*scl4rate_));
455  item->setText(SCI_B_CLK_BRKS, str.sprintf("%d", stInfo->clockBreaks().size()));
456  };
458  {
459  item->setText(SCI_S_SCANS, str.sprintf("%7d", stInfo->auxObservationByScanId()->size()));
460  item->setText(SCI_S_WRMS_DEL, str.sprintf("%11.1f", stInfo->wrms(DT_DELAY)*scl4delay_));
461 // item->setText(SCI_S_WRMS_RAT, str.sprintf("%11.1f", stInfo->wrms(DT_RATE)*scl4rate_));
462  item->setText(SCI_S_CLK_BRKS, str.sprintf("%d", stInfo->clockBreaks().size()));
463  item->setText(SCI_S_ACM, stInfo->getNeed2useAPrioriClocks()? "Y" : "");
464  item->setText(SCI_S_IGNORE, stInfo->isAttr(SgVlbiStationInfo::Attr_NOT_VALID)? "X" : "");
465  item->setText(SCI_S_CLK_TERMS,str.sprintf("%2d", stInfo->getClocksModelOrder()));
466  item->setText(SCI_S_REF_CLK, stInfo->isAttr(SgVlbiStationInfo::Attr_REFERENCE_CLOCKS)? "R" : "");
467  item->setText(SCI_S_CBL_CAL, stInfo->isAttr(SgVlbiStationInfo::Attr_IGNORE_CABLE_CAL)? "" :
468  (stInfo->isAttr(SgVlbiStationInfo::Attr_INVERSE_CABLE)? "-Y" : "Y"));
469  item->setText(SCI_S_FLAGS,
470  QString(stInfo->isAttr(SgVlbiStationInfo::Attr_BAD_METEO)? "m" : "") +
471  QString(stInfo->isAttr(SgVlbiStationInfo::Attr_ART_METEO)? "a" : "") +
472  QString(stInfo->isAttr(SgVlbiStationInfo::Attr_DONT_ESTIMATE_TRPS)? "-Z" : "")
473  );
474  item->setText(SCI_S_LC, stInfo->isAttr(SgVlbiStationInfo::Attr_USE_LOCAL_CLOCKS)? "Y" : "");
475  item->setText(SCI_S_LZ, stInfo->isAttr(SgVlbiStationInfo::Attr_USE_LOCAL_ZENITH)? "Y" : "");
476  item->setText(SCI_S_COO_EST, stInfo->isAttr(SgVlbiStationInfo::Attr_ESTIMATE_COO)? "Y" : "");
477  item->setText(SCI_S_COO_CON, stInfo->isAttr(SgVlbiStationInfo::Attr_CONSTRAIN_COO)? "*" : "");
478  item->setText(SCI_S_AXO_EST, stInfo->isAttr(SgVlbiStationInfo::Attr_ESTIMATE_AXO)? "Y" : "");
479  };
480  ++it;
481  };
482 };
483 /*=====================================================================================================*/
484 
485 
486 
487 
488 
489 
490 /*=======================================================================================================
491 *
492 * SgGuiVlbiStnInfoEditor METHODS:
493 *
494 *======================================================================================================*/
496  const QString& ownerName, const SgMJD& t0, QWidget* parent, Qt::WindowFlags flags)
497  : QDialog(parent, flags)
498 {
499  static const QString attrNames[] =
500  {
501  QString("Ignore the station"),
502  QString("Clocks of the station are the reference ones"),
503  QString("The station has a bad cable calibration"),
504  QString("The station has an inverted cable calibration"),
505  QString("Metheo data on the station are wrong"),
506  QString("Metheo data on the station are artificial or suspicious"),
507  QString("Do not estimate tropospheric refraction parameters"),
508  };
509  QString str;
510  QSize btnSize;
511  stationInfo_ = stnInfo;
512  browseMode_ = mode;
513 
514  t0_ = t0;
516  bModel_.setT0(t0_);
517 
518  isModified_ = false;
519 
520  switch (browseMode_)
521  {
522  case OBM_BAND:
523  setWindowTitle("The station " + stationInfo_->getKey() + " on the " + ownerName + "-Band");
524  break;
525  case OBM_SESSION:
526  setWindowTitle("The station " + stationInfo_->getKey() + " at " + ownerName + " session");
527  break;
528  case OBM_PROJECT:
529  setWindowTitle("The station " + stationInfo_->getKey() + " of " + ownerName + " project");
530  break;
531  };
532 
533  //
534  QVBoxLayout *mainLayout=new QVBoxLayout(this);
535 
536  // clock breaks:
537  QGroupBox *gBox=new QGroupBox("List of Clock Break Events", this);
538  QBoxLayout *layout=new QVBoxLayout(gBox);
539 
540  QStringList headerLabels;
541  headerLabels
542  << "Epoch of a clock break "
543  << "Jump (ns)"
544  << "Sigma (ns)"
545  << "Dynamic"
546  ;
547  twClockBreaks_ = new QTreeWidget(gBox);
548  twClockBreaks_->setColumnCount(2);
549  twClockBreaks_->setHeaderLabels(headerLabels);
550  //
551  //
552  for (int i=0; i<bModel_.size(); i++)
553  {
554  SgParameterBreak *b=bModel_.at(i);
556  item->setClockBreak(b);
557  item->setText( 0, b->toString(SgMJD::F_YYYYMMDDHHMMSSSS));
558  item->setData( 0, Qt::TextAlignmentRole, Qt::AlignRight);
559  item->setText( 1, QString("").sprintf("%.1f", b->getA0()));
560  item->setData( 1, Qt::TextAlignmentRole, Qt::AlignRight);
561  item->setText( 2, QString("").sprintf("%.1f", b->getS0()));
562  item->setData( 2, Qt::TextAlignmentRole, Qt::AlignRight);
563  item->setText( 3, b->isAttr(SgParameterBreak::Attr_DYNAMIC)?"Y":"N");
564  item->setData( 3, Qt::TextAlignmentRole, Qt::AlignCenter);
565  };
566  twClockBreaks_->header()->resizeSections(QHeaderView::ResizeToContents);
567 #if QT_VERSION >= 0x050000
568  twClockBreaks_->header()->setSectionResizeMode(QHeaderView::Interactive);
569 #else
570  twClockBreaks_->header()->setResizeMode(QHeaderView::Interactive);
571 #endif
572 
573  twClockBreaks_->header()->setStretchLastSection(false);
574  twClockBreaks_->setSortingEnabled(true);
575  twClockBreaks_->setUniformRowHeights(true);
576  twClockBreaks_->sortByColumn(0, Qt::AscendingOrder);
577  twClockBreaks_->setFocus();
578  twClockBreaks_->setItemsExpandable(false);
579  twClockBreaks_->setAllColumnsShowFocus(true);
580  twClockBreaks_->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
581  twClockBreaks_->setMinimumSize(twClockBreaks_->sizeHint());
582  layout->addWidget(twClockBreaks_);
583 
584  QPushButton *bAdd =new QPushButton("Add", this);
585  QPushButton *bEdit =new QPushButton("Edit", this);
586  QPushButton *bDelete=new QPushButton("Delete", this);
587 
588  bDelete->setMinimumSize((btnSize=bDelete->sizeHint()));
589  bAdd->setMinimumSize(btnSize);
590  bEdit->setMinimumSize(btnSize);
591 
592  QBoxLayout *subLayout=new QHBoxLayout();
593  layout->addLayout(subLayout);
594  subLayout->addStretch(1);
595  subLayout->addSpacing(3*btnSize.width());
596  subLayout->addWidget(bAdd);
597  subLayout->addWidget(bEdit);
598  subLayout->addWidget(bDelete);
599 
600  mainLayout->addWidget(gBox);
601 
602  // attributes:
603  if (browseMode_ == OBM_SESSION)
604  {
605  QPushButton *bLClocks=new QPushButton("Edit Clocks", this);
606  QPushButton *bLZenith=new QPushButton("Edit Zenith", this);
607  QGroupBox *gboxAttr=new QGroupBox("Attributes of Station", this);
608  layout = new QVBoxLayout(gboxAttr);
609  for (int i=0; i<7; i++)
610  {
611  cbAttributes_[i] = new QCheckBox(attrNames[i], gboxAttr);
612  cbAttributes_[i]->setMinimumSize(cbAttributes_[i]->sizeHint());
613  layout->addWidget(cbAttributes_[i]);
614  };
622 
623  // options:
624  mainLayout->addSpacing(15);
625  mainLayout->addWidget(gboxAttr, 10);
626 
627  QGridLayout *grid=new QGridLayout();
628  QLabel *label;
629  mainLayout->addLayout(grid);
630  //
631  cbUseAPrioriClocks_ = new QCheckBox("Use user specified a priori clocks", this);
633  cbUseAPrioriClocks_->setMinimumSize(cbUseAPrioriClocks_->sizeHint());
634  grid->addWidget(cbUseAPrioriClocks_, 0,0);
635 
636  label = new QLabel("Offset (s):", this);
637  label->setMinimumSize(label->sizeHint());
638  grid->addWidget(label, 0, 1);
639 
640  leAPrioriClockTerm_0_ = new QLineEdit(str.sprintf("%g", stationInfo_->getAPrioriClockTerm_0()), this);
641  leAPrioriClockTerm_0_->setMinimumWidth(leAPrioriClockTerm_0_->fontMetrics().width("WWWWW"));
642  grid->addWidget(leAPrioriClockTerm_0_, 0,2);
643 
644  label = new QLabel("Rate (s/s):", this);
645  label->setMinimumSize(label->sizeHint());
646  grid->addWidget(label, 1, 1);
647 
648  leAPrioriClockTerm_1_ = new QLineEdit(str.sprintf("%g", stationInfo_->getAPrioriClockTerm_1()), this);
649  leAPrioriClockTerm_1_->setMinimumWidth(leAPrioriClockTerm_1_->fontMetrics().width("WWWWW"));
650  grid->addWidget(leAPrioriClockTerm_1_, 1,2);
651  //
652  //
653  label = new QLabel("Number of polynomials for a clock model:", this);
654  label->setMinimumSize(label->sizeHint());
655  grid->addWidget(label, 2, 0);
656 
657  sbOrder_ = new QSpinBox(this);
658  sbOrder_->setRange( 0, 10);
660  sbOrder_->setMinimumSize(sbOrder_->sizeHint());
661  grid->addWidget(sbOrder_, 2,1, 1,2);
662 
663  switch (stationInfo_->pcClocks()->getPMode())
664  {
665  default:
667  str="No";
668  break;
670  str="Arc";
671  break;
673  str="PWL";
674  break;
676  str="Stc";
677  break;
678  };
679  cbUseLocalClocks_ = new QCheckBox("Use local setup of parameters for clocks (" + str + ")", this);
681  cbUseLocalClocks_->setMinimumSize(cbUseLocalClocks_->sizeHint());
682  grid->addWidget(cbUseLocalClocks_, 3,0);
683 
684  switch (stationInfo_->pcZenith()->getPMode())
685  {
686  default:
688  str="No";
689  break;
691  str="Arc";
692  break;
694  str="PWL";
695  break;
697  str="Stc";
698  break;
699  };
700  cbUseLocalZenith_ = new QCheckBox("Use local setup of parameters for zenith delays (" + str + ")",
701  this);
703  cbUseLocalZenith_->setMinimumSize(cbUseLocalZenith_->sizeHint());
704  grid->addWidget(cbUseLocalZenith_, 4,0);
705 
706  bLClocks->setMinimumSize(bLClocks->sizeHint());
707  grid->addWidget(bLClocks, 3,1, 1,2);
708 
709  bLZenith->setMinimumSize(bLZenith->sizeHint());
710  grid->addWidget(bLZenith, 4,1, 1,2);
711 
712  connect(bLClocks,SIGNAL(clicked()), SLOT(editLocalClocks()));
713  connect(bLZenith,SIGNAL(clicked()), SLOT(editLocalZenith()));
714  };
715 
716  //
717  //
718  //---
719  subLayout = new QHBoxLayout();
720  mainLayout->addSpacing(15);
721  mainLayout->addStretch(1);
722  mainLayout->addLayout(subLayout);
723 
724  QPushButton *bOk=new QPushButton("OK", this);
725  QPushButton *bCancel=new QPushButton("Cancel", this);
726  bOk->setDefault(true);
727 
728  bCancel->setMinimumSize((btnSize=bCancel->sizeHint()));
729  bOk->setMinimumSize(btnSize);
730 
731  subLayout->addStretch(1);
732  subLayout->addWidget(bOk);
733  subLayout->addWidget(bCancel);
734 
735 
736  connect(twClockBreaks_, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)),
738 
739  connect(bOk, SIGNAL(clicked()), SLOT(accept()));
740  connect(bAdd, SIGNAL(clicked()), SLOT(insertClockBreakRecord()));
741  connect(bEdit, SIGNAL(clicked()), SLOT(editClockBreakRecord()));
742  connect(bDelete, SIGNAL(clicked()), SLOT(deleteClockBreakRecord()));
743  connect(bCancel, SIGNAL(clicked()), SLOT(reject()));
744 
745  mainLayout->activate();
746 };
747 
748 
749 
750 //
752 {
753  stationInfo_ = NULL;
755 };
756 
757 
758 
759 //
761 {
762  acquireData();
763  QDialog::accept();
764  deleteLater();
765 };
766 
767 
768 
769 //
771 {
772  bool isOk;
773  if (isModified_) // now, the flag could be changed only by clock break editor
775 
776  int l=0;
777  if (browseMode_ == OBM_SESSION)
778  {
779  // Attributes:
781  {
783  isModified_ = true;
784  };
786  {
788  isModified_ = true;
789  };
791  {
793  isModified_ = true;
794  };
796  {
798  isModified_ = true;
799  };
801  {
803  isModified_ = true;
804  };
806  {
808  isModified_ = true;
809  };
810  if (cbAttributes_[6]->isChecked() !=
812  {
814  isModified_ = true;
815  };
816 
818  {
821  isModified_ = true;
822  };
824  {
825  double d;
826  d = leAPrioriClockTerm_0_->text().toDouble(&isOk);
827  if (isOk && d!=stationInfo_->getAPrioriClockTerm_0())
828  {
831  isModified_ = true;
832  };
833  d = leAPrioriClockTerm_1_->text().toDouble(&isOk);
834  if (isOk && d!=stationInfo_->getAPrioriClockTerm_1())
835  {
838  isModified_ = true;
839  };
840  };
841  // Peculiar parameters:
843  {
845  isModified_ = true;
846  };
848  {
850  isModified_ = true;
851  };
852  if ((l=sbOrder_->value()) != stationInfo_->getClocksModelOrder())
853  {
855  isModified_ = true;
856  };
857  };
858 };
859 
860 
861 
862 //
864 {
865  if (item && column>-1)
866  {
869  connect (cbEditor, SIGNAL(clockBreakModified(bool)), SLOT(updateModifyStatus(bool)));
870  cbEditor->show();
871  };
872 };
873 
874 
875 
876 //
878 {
881  connect (e, SIGNAL(valueModified(bool)), SLOT(updateModifyStatus(bool)));
882  connect (e, SIGNAL(valueModified(bool)), SLOT(updateLClocksMode(bool)));
883  e->show();
884 };
885 
886 
887 
888 //
890 {
893  connect (e, SIGNAL(valueModified(bool)), SLOT(updateModifyStatus(bool)));
894  connect (e, SIGNAL(valueModified(bool)), SLOT(updateLZenithMode(bool)));
895  e->show();
896 };
897 
898 
899 
900 //
902 {
903  isModified_ = isModified_ || isModified;
904 };
905 
906 
907 
908 //
910 {
911  if (isModified)
912  {
913  QString str;
914  switch (stationInfo_->pcClocks()->getPMode())
915  {
916  default:
918  str="No";
919  break;
921  str="Arc";
922  break;
924  str="PWL";
925  break;
927  str="Stc";
928  break;
929  };
930  cbUseLocalClocks_->setText("Use local setup of parameters for clocks (" + str + ")");
931  };
932 };
933 
934 
935 
936 //
938 {
939  if (isModified)
940  {
941  QString str;
942  switch (stationInfo_->pcZenith()->getPMode())
943  {
944  default:
946  str="No";
947  break;
949  str="Arc";
950  break;
952  str="PWL";
953  break;
955  str="Stc";
956  break;
957  };
958  cbUseLocalZenith_->setText("Use local setup of parameters for zenith delays (" + str + ")");
959  };
960 };
961 
962 
963 
964 //
966 {
967  if (b && bModel_.addBreak(b))
968  {
970  cbItem->setClockBreak(b);
971  cbItem->setText( 0, b->toString(SgMJD::F_YYYYMMDDHHMMSSSS));
972  cbItem->setData( 0, Qt::TextAlignmentRole, Qt::AlignRight);
973  cbItem->setText( 1, QString("").sprintf("%.1f", b->getA0()));
974  cbItem->setData( 1, Qt::TextAlignmentRole, Qt::AlignRight);
975  cbItem->setText( 2, QString("").sprintf("%.1f", b->getS0()));
976  cbItem->setData( 2, Qt::TextAlignmentRole, Qt::AlignRight);
977  cbItem->setText( 3, b->isAttr(SgParameterBreak::Attr_DYNAMIC)?"Y":"N");
978  cbItem->setData( 3, Qt::TextAlignmentRole, Qt::AlignCenter);
979  twClockBreaks_->resizeColumnToContents(0);
980  twClockBreaks_->resizeColumnToContents(1);
981  twClockBreaks_->resizeColumnToContents(2);
982  twClockBreaks_->resizeColumnToContents(3);
983  };
984 };
985 
986 
987 
988 //
990 {
991  if (twClockBreaks_->selectedItems().size())
992  {
995  (SgGuiVlbiClockBreakItem*)(twClockBreaks_->selectedItems().at(0)), this);
996  connect (cbEditor, SIGNAL(clockBreakModified(bool)), SLOT(updateModifyStatus(bool)));
997  cbEditor->show();
998  };
999 };
1000 
1001 
1002 
1003 //
1005 {
1006  if (twClockBreaks_->selectedItems().size())
1007  {
1008  SgGuiVlbiClockBreakItem *cbItem=(SgGuiVlbiClockBreakItem*)(twClockBreaks_->selectedItems().at(0));
1009  SgParameterBreak *b=cbItem->getClockBreak();
1010  if (QMessageBox::warning(this, "Delete?",
1011  "Are you sure to delete clock break happened on\n \"" +
1012  b->toString() + "\"?\n",
1013  QMessageBox::No | QMessageBox::Yes, QMessageBox::No)==QMessageBox::Yes)
1014  {
1015  delete cbItem;
1016  bModel_.delBreak(*b);
1017  isModified_ = true;
1018  };
1019  };
1020 };
1021 
1022 
1023 
1024 //
1026 {
1028  NULL, this);
1029  connect (cbEditor, SIGNAL(clockBreakModified(bool)), SLOT(updateModifyStatus(bool)));
1030  connect (cbEditor, SIGNAL(clockBreakCreated(SgParameterBreak*)),
1032  cbEditor->show();
1033 };
1034 /*=====================================================================================================*/
1035 
1036 
1037 
1038 
1039 
1040 
1041 /*=======================================================================================================
1042 *
1043 * SgGuiVlbiStnClockBreakEditor METHODS:
1044 *
1045 *======================================================================================================*/
1047  SgGuiVlbiClockBreakItem* cbItem, QWidget *parent, Qt::WindowFlags flags)
1048  : QDialog(parent, flags)
1049 {
1050  browseMode_ = mode;
1051  cbModel_ = model;
1052  cbItem_ = cbItem;
1053  clockBreak_ = cbItem?cbItem->getClockBreak():NULL;
1054 // twClockBreaks_ = cbItem_?cbItem_->treeWidget():NULL;
1055 
1056  isModified_ = false;
1057  isNewClockBreak_ = false;
1058  setWindowTitle("Clock Break Editor");
1059 
1060  QLabel *label;
1061  QGroupBox *gbox;
1062  QBoxLayout *layout, *subLayout;
1063  QGridLayout *grid;
1064 
1065  QString str;
1066  int yr=0, mo=0, dy=0, hr=0, mi=0;
1067  double se=0.0, valA0=0.0, sigA0=0.0;
1068 
1069  if (!clockBreak_)
1070  {
1073  isModified_ = true;
1074  isNewClockBreak_ = true;
1075  };
1076 
1077  SgMJD::MJD_reverse(clockBreak_->getDate(), clockBreak_->getTime(), yr, mo, dy, hr, mi, se);
1078 
1079  valA0 = clockBreak_->getA0();
1080  sigA0 = clockBreak_->getS0();
1081 
1082  gbox = new QGroupBox("Clock Break", this);
1083  grid = new QGridLayout(gbox);
1084 
1085  label= new QLabel("Epoch:", gbox);
1086  label->setMinimumSize(label->sizeHint());
1087  grid ->addWidget(label, 1, 0, Qt::AlignLeft | Qt::AlignVCenter);
1088 
1089  label= new QLabel("Value (ns):", gbox);
1090  label->setMinimumSize(label->sizeHint());
1091  grid ->addWidget(label, 2, 0, Qt::AlignLeft | Qt::AlignVCenter);
1092 
1093  label= new QLabel("Sigma (ns):", gbox);
1094  label->setMinimumSize(label->sizeHint());
1095  grid ->addWidget(label, 3, 0, Qt::AlignLeft | Qt::AlignVCenter);
1096 
1097  //
1098  label= new QLabel("YYYY", gbox);
1099  label->setMinimumSize(label->sizeHint());
1100  grid ->addWidget(label, 0, 1);
1101 
1102  label= new QLabel("/", gbox);
1103  label->setMinimumSize(label->sizeHint());
1104  grid ->addWidget(label, 1, 2);
1105 
1106  label= new QLabel("MM", gbox);
1107  label->setMinimumSize(label->sizeHint());
1108  grid ->addWidget(label, 0, 3);
1109 
1110  label= new QLabel("/", gbox);
1111  label->setMinimumSize(label->sizeHint());
1112  grid ->addWidget(label, 1, 4);
1113 
1114  label= new QLabel("DD", gbox);
1115  label->setMinimumSize(label->sizeHint());
1116  grid ->addWidget(label, 0, 5);
1117 
1118  label= new QLabel("HH", gbox);
1119  label->setMinimumSize(label->sizeHint());
1120  grid ->addWidget(label, 0, 7);
1121 
1122  label= new QLabel(":", gbox);
1123  label->setMinimumSize(label->sizeHint());
1124  grid ->addWidget(label, 1, 8);
1125 
1126  label= new QLabel("MM", gbox);
1127  label->setMinimumSize(label->sizeHint());
1128  grid ->addWidget(label, 0, 9);
1129 
1130  label= new QLabel(":", gbox);
1131  label->setMinimumSize(label->sizeHint());
1132  grid ->addWidget(label, 1,10);
1133 
1134  label= new QLabel("SS.SS", gbox);
1135  label->setMinimumSize(label->sizeHint());
1136  grid ->addWidget(label, 0,11);
1137 
1138  //
1139  leYr_ = new QLineEdit(str.sprintf("%04d", yr), gbox);
1140  leYr_->setFixedWidth(leYr_->fontMetrics().width("YYYY") + 10);
1141  grid ->addWidget(leYr_, 1, 1);
1142 
1143  leMn_ = new QLineEdit(str.sprintf("%02d", mo), gbox);
1144  leMn_->setFixedWidth(leMn_->fontMetrics().width("MM") + 10);
1145  grid ->addWidget(leMn_, 1, 3);
1146 
1147  leDy_ = new QLineEdit(str.sprintf("%02d", dy), gbox);
1148  leDy_->setFixedWidth(leDy_->fontMetrics().width("MM") + 10);
1149  grid ->addWidget(leDy_, 1, 5);
1150 
1151  leHr_ = new QLineEdit(str.sprintf("%02d", hr), gbox);
1152  leHr_->setFixedWidth(leHr_->fontMetrics().width("MM") + 10);
1153  grid ->addWidget(leHr_, 1, 7);
1154 
1155  leMi_ = new QLineEdit(str.sprintf("%02d", mi), gbox);
1156  leMi_->setFixedWidth(leMi_->fontMetrics().width("MM") + 10);
1157  grid ->addWidget(leMi_, 1, 9);
1158 
1159  leSc_ = new QLineEdit(str.sprintf("%5.2f", se), gbox);
1160  leSc_->setFixedWidth(leSc_->fontMetrics().width("SS.SS") + 10);
1161  grid ->addWidget(leSc_, 1,11);
1162 
1163  //
1164  leA0_ = new QLineEdit(str.sprintf("%.2f", valA0), gbox);
1165  leA0_->setMinimumSize(leA0_->sizeHint());
1166  grid ->addWidget(leA0_, 2,1, 1,5);
1167  //grid->addColSpacing(6, 15);
1168 
1169  //
1170  leS0_ = new QLineEdit(str.sprintf("%.2f", sigA0), gbox);
1171  leS0_->setMinimumSize(leS0_->sizeHint());
1172  grid ->addWidget(leS0_, 3,1, 1,5);
1173 
1174  grid->addItem(new QSpacerItem(15, 0), 0, 6);
1175 
1176 
1177  //---
1178  layout = new QVBoxLayout(this);
1179  layout -> addWidget(gbox);
1180 
1181  cbIsDynamic_ = new QCheckBox("Estimate clock break parameters in a common solution", this);
1182  if (browseMode_ == OBM_SESSION) // for session-wide only:
1184  cbIsDynamic_->setMinimumSize(cbIsDynamic_->sizeHint());
1185  layout->addWidget(cbIsDynamic_);
1186  layout->addSpacing(15);
1187  // prevent a user from modification of this attribute for band-dependent clock breaks:
1188  if (browseMode_ != OBM_SESSION)
1189  cbIsDynamic_->setEnabled(false);
1190 
1191  subLayout = new QHBoxLayout();
1192  layout->addLayout(subLayout);
1193  subLayout->addStretch(1);
1194 
1195  QPushButton *bOk=new QPushButton("OK", this);
1196  QPushButton *bCancel=new QPushButton("Cancel", this);
1197  bOk->setDefault(true);
1198  QSize btnSize;
1199 
1200  bCancel->setMinimumSize((btnSize=bCancel->sizeHint()));
1201  bOk->setMinimumSize(btnSize);
1202  subLayout->addWidget(bOk);
1203  subLayout->addWidget(bCancel);
1204  connect(bOk, SIGNAL(clicked()), SLOT(accept()));
1205  connect(bCancel, SIGNAL(clicked()), SLOT(reject()));
1206 };
1207 
1208 
1209 
1210 //
1212 {
1213  acquireData();
1214  QDialog::accept();
1215  if (isNewClockBreak_)
1217  else if (isModified_)
1218  {
1220  cbItem_->setText( 1, QString("").sprintf("%.1f", clockBreak_->getA0()));
1221  cbItem_->setText( 2, QString("").sprintf("%.1f", clockBreak_->getS0()));
1222  cbItem_->setText( 3, clockBreak_->isAttr(SgParameterBreak::Attr_DYNAMIC)?"Y":"N");
1223 // twClockBreaks_->resizeColumnToContents(0);
1224 // twClockBreaks_->resizeColumnToContents(1);
1225  };
1227  deleteLater();
1228 };
1229 
1230 
1231 
1232 //
1234 {
1235  emit clockBreakModified(false);
1236  QDialog::reject();
1238  delete clockBreak_;
1239  deleteLater();
1240 };
1241 
1242 
1243 
1244 //
1246 {
1247  if (!clockBreak_)
1248  return;
1249 
1250  bool isOK=true;
1251  int yr=0;
1252  int mn=0;
1253  int dy=0;
1254  int hr=0;
1255  int mi=0;
1256  double d=0.0;
1257 
1258  if (isOK)
1259  yr = leYr_->text().toInt(&isOK);
1260  if (isOK)
1261  mn = leMn_->text().toInt(&isOK);
1262  if (isOK)
1263  dy = leDy_->text().toInt(&isOK);
1264  if (isOK)
1265  hr = leHr_->text().toInt(&isOK);
1266  if (isOK)
1267  mi = leMi_->text().toInt(&isOK);
1268  if (isOK)
1269  d = leSc_->text().toDouble(&isOK);
1270 
1271  SgMJD t(yr, mn, dy, hr, mi, d);
1272  if (isOK && t!=*clockBreak_)
1273  {
1274  isModified_ = true;
1275  *(SgMJD*)clockBreak_ = t;
1276  };
1277  if (isOK)
1278  d = leA0_->text().toDouble(&isOK);
1279  if (isOK && d!=clockBreak_->getA0())
1280  {
1281  isModified_ = true;
1282  clockBreak_->setA0(d);
1283  };
1284  if (isOK)
1285  d = leS0_->text().toDouble(&isOK);
1286  if (isOK && d!=clockBreak_->getS0() && d>=0.0)
1287  {
1288  isModified_ = true;
1289  clockBreak_->setS0(d);
1290  };
1291  if (isOK && cbIsDynamic_->isChecked()!=clockBreak_->isAttr(SgParameterBreak::Attr_DYNAMIC))
1292  {
1293  if (cbIsDynamic_->isChecked())
1295  else
1297  isModified_ = true;
1298  };
1299 };
1300 /*=====================================================================================================*/
1301 
1302 
1303 
1304 /*=====================================================================================================*/
StationColumnIndex
@ SCI_S_COO_EST
@ SCI_S_WRMS_DEL
@ SCI_B_DISP_DEL
@ SCI_B_WRMS_RAT
@ SCI_B_CLK_BRKS
@ SCI_S_REF_CLK
@ SCI_S_CLK_BRKS
@ SCI_S_COO_CON
@ SCI_B_SIG0_DEL
@ SCI_S_CBL_CAL
@ SCI_B_SIG0_RAT
@ SCI_S_CBL_SGN
@ SCI_S_CLK_TERMS
@ SCI_S_IGNORE
@ SCI_S_AXO_EST
@ SCI_B_DISP_RAT
@ SCI_B_WRMS_DEL
bool operator<(const SgMJD &T1, const SgMJD &T2)
Definition: SgMJD.h:554
SgObjectBrowseMode
Definition: SgObjectInfo.h:46
@ OBM_BAND
Definition: SgObjectInfo.h:46
@ OBM_PROJECT
Definition: SgObjectInfo.h:46
@ OBM_SESSION
Definition: SgObjectInfo.h:46
@ DT_DELAY
Definition: SgWrmsable.h:44
@ DT_RATE
Definition: SgWrmsable.h:45
bool isAttr(uint a) const
Definition: SgAttribute.h:226
void xorAttr(uint a)
Definition: SgAttribute.h:218
void delAttr(uint a)
Definition: SgAttribute.h:210
void addAttr(uint a)
Definition: SgAttribute.h:202
void setT0(const SgMJD &t)
Definition: SgBreakModel.h:540
bool delBreak(const SgMJD &t)
bool addBreak(const SgMJD &t, double a0=0.0, double a1=0.0, double a2=0.0, bool isDynamic=false)
const SgMJD & getT0() const
Definition: SgBreakModel.h:532
SgParameterBreak * getClockBreak()
void setClockBreak(SgParameterBreak *clockBreak)
void setStInfo(SgVlbiStationInfo *info)
virtual bool operator<(const QTreeWidgetItem &other) const
SgVlbiStationInfo * getStInfo()
void refClockStationSelected(const QString &)
void entryDoubleClicked(QTreeWidgetItem *, int)
QMap< QString, SgVlbiStationInfo * > * stationsByName_
void refClockStationDeselected(const QString &)
SgGuiQTreeWidgetExt * tweStations_
SgObjectBrowseMode browseMode_
SgGuiVlbiStationList(SgObjectBrowseMode, const QString &, QMap< QString, SgVlbiStationInfo * > *, const SgMJD &t=tZero, QWidget *=0, Qt::WindowFlags=0)
void toggleEntryMoveEnable(QTreeWidgetItem *, int, Qt::MouseButton, Qt::KeyboardModifiers)
SgGuiVlbiStnClockBreakEditor(SgBreakModel *, SgObjectBrowseMode, SgGuiVlbiClockBreakItem *, QWidget *=0, Qt::WindowFlags=0)
void clockBreakCreated(SgParameterBreak *)
SgGuiVlbiClockBreakItem * cbItem_
SgVlbiStationInfo * stationInfo_
void editClockBreakRecordItem(QTreeWidgetItem *, int)
SgGuiVlbiStnInfoEditor(SgVlbiStationInfo *, SgObjectBrowseMode, const QString &, const SgMJD &, QWidget *=0, Qt::WindowFlags=0)
SgObjectBrowseMode browseMode_
void addNewClockBreak(SgParameterBreak *)
Definition: SgMJD.h:59
double getTime() const
Definition: SgMJD.h:457
@ F_YYYYMMDDHHMMSSSS
Long verbose: Fri, the 2nd of Apr, 2010; 17hr 02min 43.6400sec.
Definition: SgMJD.h:67
QString toString(Format format=F_Verbose) const
Definition: SgMJD.cpp:1007
int getDate() const
Definition: SgMJD.h:449
static void MJD_reverse(int date, double time, int &nYear, int &nMonth, int &nDay, int &nHour, int &nMin, double &dSec)
Definition: SgMJD.cpp:74
int getIdx() const
Definition: SgObjectInfo.h:335
double dispersion(DataType, bool=false) const
Definition: SgObjectInfo.h:439
double getSigma2add(DataType) const
Definition: SgObjectInfo.h:367
const QString & getKey() const
Definition: SgObjectInfo.h:319
int numProcessed(DataType dType) const
Definition: SgObjectInfo.h:351
double wrms(DataType) const
Definition: SgObjectInfo.h:567
int numTotal(DataType dType) const
Definition: SgObjectInfo.h:343
void setS0(double a)
Definition: SgBreakModel.h:443
double getS0() const
Definition: SgBreakModel.h:387
double getA0() const
Definition: SgBreakModel.h:363
void setA0(double a)
Definition: SgBreakModel.h:419
@ Attr_DYNAMIC
parameters supposed to be estimated during the common solution;
Definition: SgBreakModel.h:60
@ Attr_MODIFIED
parameters were modified;
Definition: SgBreakModel.h:59
PMode getPMode() const
@ Idx_ZENITH
index for wet zenith delay
@ Idx_CLOCK_0
index for clocks (order #0)
void setNeed2useAPrioriClocks(bool)
QMap< QString, SgVlbiAuxObservation * > * auxObservationByScanId()
@ Attr_ESTIMATE_AXO
estimate axis offset;
@ Attr_NOT_VALID
omit the station;
@ Attr_INVERSE_CABLE
cable calibration correction has wrong sign;
@ Attr_ART_METEO
indicates that the station has artificial meteo parameters;
@ Attr_CONSTRAIN_COO
constrain station position in estimation;
@ Attr_REFERENCE_CLOCKS
the clocks are the reference ones;
@ Attr_DONT_ESTIMATE_TRPS
do not estimate parameters of troposphere delay for station;
@ Attr_IGNORE_CABLE_CAL
do not apply cable calibration;
@ Attr_ESTIMATE_COO
estimate station position;
@ Attr_USE_LOCAL_ZENITH
use its own setup for the zenith delay parameter;
@ Attr_USE_LOCAL_CLOCKS
use its own setup for the clock parameter;
@ Attr_BAD_METEO
indicates that the station has bad meteo parameters;
SgParameterCfg * pcZenith()
void setAPrioriClockTerm_1(double)
SgParameterCfg * pcClocks()
double getCableCalMultiplierDBCal() const
SgBreakModel & clockBreaks()
double getAPrioriClockTerm_1() const
void setClocksModelOrder(int n)
int getClocksModelOrder() const
void setAPrioriClockTerm_0(double)
bool getNeed2useAPrioriClocks() const
double getAPrioriClockTerm_0() const