General Purpose Geodetic Library
NsScrPrx4Observation.h
Go to the documentation of this file.
1 /*
2  *
3  * This file is a part of nuSolve. nuSolve is a part of CALC/SOLVE system
4  * and is designed to perform data analyis of a geodetic VLBI session.
5  * Copyright (C) 2017-2020 Sergei Bolotin.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef NS_SCR_PRX_4_OBSERVATION_H
23 #define NS_SCR_PRX_4_OBSERVATION_H
24 
25 
26 #ifdef HAVE_CONFIG_H
27 # include <config.h>
28 #endif
29 
30 
31 #include <QtCore/QtGlobal>
32 #include <QtCore/QDateTime>
33 #include <QtCore/QMap>
34 #include <QtCore/QList>
35 #include <QtCore/QObject>
36 #include <QtCore/QString>
37 #include <QtCore/QStringList>
38 
39 #if 0 < HAVE_SCRIPTS
40 # include <QtScript/QScriptEngine>
41 # include <QtScript/QScriptValue>
42 #endif
43 
44 #include <SgObjectInfo.h>
45 #include <SgVlbiAuxObservation.h>
46 #include <SgVlbiBand.h>
47 #include <SgVlbiBaselineInfo.h>
48 #include <SgVlbiObservation.h>
49 #include <SgVlbiObservation.h>
50 #include <SgVlbiSession.h>
51 #include <SgVlbiSourceInfo.h>
52 #include <SgVlbiStationInfo.h>
53 
54 
55 
56 #include "NsScrPrx4TaskConfig.h"
57 
58 
59 class NsScrPrx4Baseline;
60 class NsScrPrx4Session;
61 class NsScrPrx4Source;
62 class NsScrPrx4Station;
63 /***===================================================================================================*/
70 {
71  Q_OBJECT
72  Q_PROPERTY(QString key
73  READ getKey)
74  Q_PROPERTY(QString scanName
75  READ getScanName)
76  Q_PROPERTY(QDateTime epoch
77  READ getEpoch)
78  Q_PROPERTY(QString epochStr
79  READ getEpochStr)
80  Q_PROPERTY(double gmst
81  READ getGmst)
82  Q_PROPERTY(bool isValid
83  READ isValid WRITE setIsValid)
84  Q_PROPERTY(bool isProcessed
85  READ isProcessed /*WRITE setIsProcessed*/)
86  Q_PROPERTY(int numOfBands
87  READ getNumOfBands)
88 
89  Q_PROPERTY(NsScrPrx4Station* station_1
90  READ getStation_1)
91  Q_PROPERTY(NsScrPrx4Station* station_2
92  READ getStation_2)
93  Q_PROPERTY(NsScrPrx4Baseline* baseline
94  READ getBaseline)
95  Q_PROPERTY(NsScrPrx4Source* source
96  READ getSource)
97 
98 
99 public:
101  : QObject(parent) {obs_=&obs; session_=session;};
102  inline ~NsScrPrx4VlbiObservation() {obs_=NULL; session_=NULL;};
103 
104 public slots:
105  inline const QString& getKey() const {return obs_->getKey();};
106  inline QString getScanName() const {return obs_->getScanName();};
107  inline QDateTime getEpoch() const {return obs_->toQDateTime();};
108  inline QString getEpochStr() const {return obs_->toString(SgMJD::F_YYYYMMDDHHMMSSSS);};
109  inline double getGmst() const {return obs_->gmst();};
110  inline bool isValid() const {return !obs_->isAttr(SgVlbiObservation::Attr_NOT_VALID);};
111  inline bool isProcessed() const {return obs_->isAttr(SgVlbiObservation::Attr_PROCESSED);};
112  inline int getNumOfBands() const {return obs_->observableByKey().size();};
113 
118 
119 
121 //inline void setIsProcessed(bool is) {obs_->assignAttr(SgVlbiObservation::Attr_PROCESSED, is);};
122 
123  inline int qualityFactor(const QString& bandKey) const
124  {return obs_->observableByKey().contains(bandKey)?
125  obs_->observableByKey().value(bandKey)->getQualityFactor():-1;};
126  inline double correlationCoeff(const QString& bandKey) const
127  {return obs_->observableByKey().contains(bandKey)?
128  obs_->observableByKey().value(bandKey)->getCorrCoeff():-1.0;};
129  inline double snr(const QString& bandKey) const
130  {return obs_->observableByKey().contains(bandKey)?
131  obs_->observableByKey().value(bandKey)->getSnr():-1.0;};
132  inline int numOfChannels(const QString& bandKey) const
133  {return obs_->observableByKey().contains(bandKey)?
134  obs_->observableByKey().value(bandKey)->getNumOfChannels():-1;};
135  inline bool isUsable(const QString& bandKey) const
136  {return obs_->observableByKey().contains(bandKey)?
137  obs_->observableByKey().value(bandKey)->isUsable():false;};
138 
139  double delayValue(const QString& bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const;
140  double delayValueGeoc(const QString& bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const;
141  double delayStdDev(const QString& bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const;
142  double delayResidual(const QString& bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const;
143  double delayResidualNorm(const QString& bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const;
144  double delayAmbiguitySpacing(const QString& bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const;
145  int delayNumOfAmbiguities(const QString& bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const;
146  double delaySourceStructure(const QString& bandKey) const
147  {return obs_->observableByKey().contains(bandKey)?
148  obs_->observableByKey().value(bandKey)->getTauS():0.0;};
149 
150  double rateValue(const QString& bandKey) const
151  {return obs_->observableByKey().contains(bandKey)?
152  obs_->observableByKey().value(bandKey)->phDRate().getValue():0.0;};
153  double rateStdDev(const QString& bandKey) const
154  {return obs_->observableByKey().contains(bandKey)?
155  obs_->observableByKey().value(bandKey)->phDRate().getSigma():-1.0;};
156  double rateResidual(const QString& bandKey) const
157  {return obs_->observableByKey().contains(bandKey)?
158  obs_->observableByKey().value(bandKey)->phDRate().getResidual():0.0;};
159  double rateResidualNorm(const QString& bandKey) const
160  {return obs_->observableByKey().contains(bandKey)?
161  obs_->observableByKey().value(bandKey)->phDRate().getResidualNorm():0.0;};
162 
163 
164 
165 
166 
167 protected:
170 };
171 /*=====================================================================================================*/
172 
173 
174 
175 
176 
177 
178 /***===================================================================================================*/
185 {
186  Q_OBJECT
187  Q_PROPERTY(QDateTime epoch
188  READ getEpoch)
189  Q_PROPERTY(bool isValid
190  READ isValid)
191  Q_PROPERTY(double cableCalibration
192  READ getCableCalibration)
193  Q_PROPERTY(double atmPressure
194  READ getAtmPressure)
195  Q_PROPERTY(double atmTemperature
196  READ getAtmTemperature)
197  Q_PROPERTY(double atmHumidity
198  READ getAtmHumidity)
199 
200  Q_PROPERTY(NsScrPrx4Station* station
201  READ getStation)
202 
203 
204 public:
206  : QObject(parent) {aux_=&aux; station_=stn;};
208 
209 public slots:
210  inline QDateTime getEpoch() const {return aux_->toQDateTime();};
211  inline bool isValid() const {return !aux_->isAttr(SgVlbiObservation::Attr_NOT_VALID);};
212  inline bool isProcessed() const {return aux_->isAttr(SgVlbiObservation::Attr_PROCESSED);};
213  inline double getCableCalibration() const {return aux_->getCableCalibration();};
214  inline double getAtmPressure() const {return aux_->getMeteoData().getPressure();};
215  inline double getAtmTemperature() const {return aux_->getMeteoData().getTemperature();};
216  inline double getAtmHumidity() const {return aux_->getMeteoData().getRelativeHumidity();};
217  inline NsScrPrx4Station* getStation() {return station_;};
218 
219 protected:
222 };
223 /*=====================================================================================================*/
224 
225 
226 
227 
228 
229 
230 
231 
232 #if 0 < HAVE_SCRIPTS
233 
234 Q_DECLARE_METATYPE(NsScrPrx4VlbiObservation*);
235 Q_DECLARE_METATYPE(QList<NsScrPrx4VlbiObservation*>);
236 
237 Q_DECLARE_METATYPE(NsScrPrx4VlbiAuxObservation*);
238 Q_DECLARE_METATYPE(QList<NsScrPrx4VlbiAuxObservation*>);
239 
240 #endif
241 
242 
243 
244 
245 
246 
247 
248 
249 
250 
251 
252 /*=====================================================================================================*/
253 //
254 // aux functions:
255 //
256 #if 0 < HAVE_SCRIPTS
257 
258 
259 
260 // observation:
261 inline QScriptValue toScriptValue4VlbiObs(QScriptEngine *eng, NsScrPrx4VlbiObservation* const &in)
262 {
263  return eng->newQObject(in);
264 };
265 //
266 inline void fromScriptValue4VlbiObs(const QScriptValue &obj, NsScrPrx4VlbiObservation* &out)
267 {
268  out = qobject_cast<NsScrPrx4VlbiObservation*>(obj.toQObject());
269 };
270 
271 
272 
273 // auxiliary data:
274 inline QScriptValue toScriptValue4VlbiAuxObs(QScriptEngine *eng, NsScrPrx4VlbiAuxObservation* const &in)
275 {
276  return eng->newQObject(in);
277 };
278 //
279 inline void fromScriptValue4VlbiAuxObs(const QScriptValue &obj, NsScrPrx4VlbiAuxObservation* &out)
280 {
281  out = qobject_cast<NsScrPrx4VlbiAuxObservation*>(obj.toQObject());
282 };
283 
284 
285 #endif // SCRIPT_SUPPORT
286 
287 
288 /*=====================================================================================================*/
289 #endif // NS_SCR_PRX_4_OBSERVATION_H
290 
NsScrPrx4VlbiAuxObservation(SgVlbiAuxObservation &aux, NsScrPrx4Station *stn, QObject *parent=0)
NsScrPrx4Baseline * baseline
double delayValue(const QString &bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const
double snr(const QString &bandKey) const
NsScrPrx4Station * station_1
double rateResidual(const QString &bandKey) const
double correlationCoeff(const QString &bandKey) const
double delayAmbiguitySpacing(const QString &bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const
NsScrPrx4Station * station_2
double rateValue(const QString &bandKey) const
double rateResidualNorm(const QString &bandKey) const
double delayStdDev(const QString &bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const
double delayResidualNorm(const QString &bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const
double delayResidual(const QString &bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const
double delaySourceStructure(const QString &bandKey) const
int numOfChannels(const QString &bandKey) const
const QString & getKey() const
bool isUsable(const QString &bandKey) const
NsScrPrx4Baseline * getBaseline()
NsScrPrx4Station * getStation_2()
double delayValueGeoc(const QString &bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const
double rateStdDev(const QString &bandKey) const
int delayNumOfAmbiguities(const QString &bandKey, NsScrPrx4TaskConfig::VlbiDelayType t) const
NsScrPrx4Station * getStation_1()
int qualityFactor(const QString &bandKey) const
NsScrPrx4VlbiObservation(SgVlbiObservation &obs, NsScrPrx4Session *session, QObject *parent=0)
bool isAttr(uint a) const
Definition: SgAttribute.h:226
void assignAttr(uint a, bool b)
Definition: SgAttribute.h:100
@ 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:1008
double gmst() const
Definition: SgMJD.cpp:1264
QDateTime toQDateTime() const
Definition: SgMJD.cpp:152
double getPressure() const
Definition: SgMeteoData.h:242
double getTemperature() const
Definition: SgMeteoData.h:234
double getRelativeHumidity() const
Definition: SgMeteoData.h:250
@ Attr_NOT_VALID
omit the observation;
Definition: SgObservation.h:78
@ Attr_PROCESSED
the observation has been processed;
Definition: SgObservation.h:79
double getCableCalibration() const
const SgMeteoData & getMeteoData() const
const QString & getScanName() const
QMap< QString, SgVlbiObservable * > & observableByKey()
const QString & getKey()