MSFieldColumns.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef MS_MSFIELDCOLUMNS_H
00029 #define MS_MSFIELDCOLUMNS_H
00030
00031 #include <casacore/casa/aips.h>
00032 #include <casacore/measures/Measures/MDirection.h>
00033 #include <casacore/measures/Measures/MEpoch.h>
00034 #include <casacore/measures/Measures/MCDirection.h>
00035 #include <casacore/measures/Measures/MCEpoch.h>
00036 #include <casacore/measures/Measures/MRadialVelocity.h>
00037 #include <casacore/measures/Measures/MeasComet.h>
00038 #include <casacore/measures/TableMeasures/ArrayMeasColumn.h>
00039 #include <casacore/measures/TableMeasures/ScalarMeasColumn.h>
00040 #include <casacore/measures/TableMeasures/ScalarQuantColumn.h>
00041 #include <casacore/tables/Tables/ArrayColumn.h>
00042 #include <casacore/tables/Tables/ScalarColumn.h>
00043 #include <casacore/casa/BasicSL/String.h>
00044 #include <casacore/casa/Containers/SimOrdMap.h>
00045
00046 namespace casacore {
00047
00048 class MVDirection;
00049 class MSField;
00050 template <class Qtype> class Quantum;
00051 template <class T> class Matrix;
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 class ROMSFieldColumns
00087 {
00088 public:
00089
00090 ROMSFieldColumns(const MSField& msField);
00091
00092
00093 ~ROMSFieldColumns();
00094
00095
00096
00097 const ROScalarColumn<String>& code() const {return code_p;}
00098 const ROArrayColumn<Double>& delayDir() const {return delayDir_p;}
00099 const ROArrayMeasColumn<MDirection>& delayDirMeasCol() const
00100 {return delayDirMeas_p;}
00101 const ROScalarColumn<Bool>& flagRow() const {return flagRow_p;}
00102 const ROScalarColumn<String>& name() const {return name_p;}
00103 const ROScalarColumn<Int>& numPoly() const {return numPoly_p;}
00104 const ROArrayColumn<Double>& phaseDir() const {return phaseDir_p;}
00105 const ROArrayMeasColumn<MDirection>& phaseDirMeasCol() const
00106 {return phaseDirMeas_p;}
00107 const ROArrayColumn<Double>& referenceDir() const {return referenceDir_p;}
00108 const ROArrayMeasColumn<MDirection>& referenceDirMeasCol() const
00109 {return referenceDirMeas_p;}
00110 const ROScalarColumn<Int>& sourceId() const {return sourceId_p;}
00111 const ROScalarColumn<Double>& time() const {return time_p;}
00112 const ROScalarQuantColumn<Double>& timeQuant() const { return timeQuant_p;}
00113 const ROScalarMeasColumn<MEpoch>& timeMeas() const { return timeMeas_p;}
00114
00115
00116
00117
00118 const ROScalarColumn<Int>& ephemerisId() const {return ephemerisId_p;}
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134 MDirection delayDirMeas(Int row, Double time = 0) const;
00135 MDirection phaseDirMeas(Int row, Double time = 0) const;
00136 MDirection referenceDirMeas(Int row, Double time = 0) const;
00137 MRadialVelocity radVelMeas(Int row, Double time = 0) const;
00138 Quantity rho(Int row, Double time = 0) const;
00139 Bool needInterTime(Int row) const;
00140 String ephemPath(Int row) const;
00141
00142
00143
00144
00145 uInt nrow() const {return name_p.nrow();}
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157 Int matchDirection(const MDirection& referenceDirection,
00158 const MDirection& delayDirection,
00159 const MDirection& phaseDirection,
00160 const Quantum<Double>& maxSeparation,
00161 Int tryRow=-1,
00162 Double time=0);
00163
00164
00165
00166 void updateMeasComets();
00167
00168
00169 protected:
00170
00171
00172 ROMSFieldColumns();
00173
00174
00175 void attach(const MSField& msField);
00176
00177 Int measCometIndex(int row) const;
00178 String measCometsPath_p;
00179 Vector<MeasComet*> measCometsV_p;
00180 SimpleOrderedMap <Int, Int> ephIdToMeasComet_p;
00181
00182
00183
00184
00185
00186 MDirection extractDirMeas(const MDirection& offsetDir,
00187 Int index, Double& interTime,
00188 MEpoch originEpoch) const;
00189
00190 void getMJDs(Double& originMJD, Double& interMJD,
00191 const Double interTime, const MEpoch originEpoch) const;
00192
00193 private:
00194
00195
00196 ROMSFieldColumns(const ROMSFieldColumns&);
00197 ROMSFieldColumns& operator=(const ROMSFieldColumns&);
00198
00199
00200
00201 void attachOptionalCols(const MSField& msField);
00202
00203
00204
00205
00206
00207
00208 Bool matchReferenceDir(uInt row, const MVDirection& dirVal,
00209 const Double& sepInRad,
00210 MVDirection& mvdir, Double time=0) const;
00211 Bool matchDelayDir(uInt row, const MVDirection& dirVal,
00212 const Double& sepInRad,
00213 MVDirection& mvdir, Double time=0) const;
00214 Bool matchPhaseDir(uInt row, const MVDirection& dirVal,
00215 const Double& sepInRad,
00216 MVDirection& mvdir, Double time=0) const;
00217
00218
00219
00220 ROScalarColumn<String> name_p;
00221 ROScalarColumn<String> code_p;
00222 ROScalarColumn<Double> time_p;
00223 ROScalarColumn<Int> numPoly_p;
00224 ROArrayColumn<Double> delayDir_p;
00225 ROArrayColumn<Double> phaseDir_p;
00226 ROArrayColumn<Double> referenceDir_p;
00227 ROScalarColumn<Int> sourceId_p;
00228 ROScalarColumn<Bool> flagRow_p;
00229
00230 ROScalarColumn<Int> ephemerisId_p;
00231
00232
00233 ROScalarMeasColumn<MEpoch> timeMeas_p;
00234 ROArrayMeasColumn<MDirection> delayDirMeas_p;
00235 ROArrayMeasColumn<MDirection> phaseDirMeas_p;
00236 ROArrayMeasColumn<MDirection> referenceDirMeas_p;
00237
00238
00239 ROScalarQuantColumn<Double> timeQuant_p;
00240 };
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275 class MSFieldColumns: public ROMSFieldColumns
00276 {
00277 public:
00278
00279 MSFieldColumns(MSField& msField);
00280
00281
00282 ~MSFieldColumns();
00283
00284
00285
00286
00287
00288
00289
00290
00291 ScalarColumn<String>& code() {return code_p;}
00292 ArrayColumn<Double>& delayDir() {return delayDir_p;}
00293 ArrayMeasColumn<MDirection>& delayDirMeasCol()
00294 {return delayDirMeas_p;}
00295 ScalarColumn<Bool>& flagRow() {return flagRow_p;}
00296 ScalarColumn<String>& name() {return name_p;}
00297 ScalarColumn<Int>& numPoly() {return numPoly_p;}
00298 ArrayColumn<Double>& phaseDir() {return phaseDir_p;}
00299 ArrayMeasColumn<MDirection>& phaseDirMeasCol()
00300 {return phaseDirMeas_p;}
00301 ArrayColumn<Double>& referenceDir() {return referenceDir_p;}
00302 ArrayMeasColumn<MDirection>& referenceDirMeasCol()
00303 {return referenceDirMeas_p;}
00304 ScalarColumn<Int>& sourceId() {return sourceId_p;}
00305 ScalarColumn<Double>& time() {return time_p;}
00306 ScalarQuantColumn<Double>& timeQuant() { return timeQuant_p;}
00307 ScalarMeasColumn<MEpoch>& timeMeas() { return timeMeas_p;}
00308
00309
00310
00311
00312 ScalarColumn<Int>& ephemerisId() {return ephemerisId_p;}
00313
00314
00315
00316
00317 const ROScalarColumn<String>& code() const {
00318 return ROMSFieldColumns::code();}
00319 const ROArrayColumn<Double>& delayDir() const {
00320 return ROMSFieldColumns::delayDir();}
00321 const ROArrayMeasColumn<MDirection>& delayDirMeasCol() const {
00322 return ROMSFieldColumns::delayDirMeasCol();}
00323 const ROScalarColumn<Bool>& flagRow() const {
00324 return ROMSFieldColumns::flagRow();}
00325 const ROScalarColumn<String>& name() const {
00326 return ROMSFieldColumns::name();}
00327 const ROScalarColumn<Int>& numPoly() const {
00328 return ROMSFieldColumns::numPoly();}
00329 const ROArrayColumn<Double>& phaseDir() const {
00330 return ROMSFieldColumns::phaseDir();}
00331 const ROArrayMeasColumn<MDirection>& phaseDirMeasCol() const {
00332 return ROMSFieldColumns::phaseDirMeasCol();}
00333 const ROArrayColumn<Double>& referenceDir() const {
00334 return ROMSFieldColumns::referenceDir();}
00335 const ROArrayMeasColumn<MDirection>& referenceDirMeasCol() const {
00336 return ROMSFieldColumns::referenceDirMeasCol();}
00337 const ROScalarColumn<Int>& sourceId() const {
00338 return ROMSFieldColumns::sourceId();}
00339 const ROScalarColumn<Double>& time() const {
00340 return ROMSFieldColumns::time();}
00341 const ROScalarQuantColumn<Double>& timeQuant() const {
00342 return ROMSFieldColumns::timeQuant();}
00343 const ROScalarMeasColumn<MEpoch>& timeMeas() const {
00344 return ROMSFieldColumns::timeMeas();}
00345
00346
00347
00348
00349 const ROScalarColumn<Int>& ephemerisId() const {
00350 return ROMSFieldColumns::ephemerisId();}
00351
00352
00353
00354 static MDirection interpolateDirMeas(const Array<MDirection>& arrDir,
00355 Int numPoly, Double interTime,
00356 Double timeOrigin);
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368 void setEpochRef(MEpoch::Types ref, Bool tableMustBeEmpty=True);
00369
00370
00371
00372
00373 void setDirectionRef(MDirection::Types ref);
00374
00375 protected:
00376
00377
00378 MSFieldColumns();
00379
00380
00381 void attach(MSField& msField);
00382
00383 private:
00384
00385
00386 MSFieldColumns(const MSFieldColumns&);
00387 MSFieldColumns& operator=(const MSFieldColumns&);
00388
00389
00390
00391 void attachOptionalCols(MSField& msField);
00392
00393
00394 ScalarColumn<String> name_p;
00395 ScalarColumn<String> code_p;
00396 ScalarColumn<Double> time_p;
00397 ScalarColumn<Int> numPoly_p;
00398 ArrayColumn<Double> delayDir_p;
00399 ArrayColumn<Double> phaseDir_p;
00400 ArrayColumn<Double> referenceDir_p;
00401 ScalarColumn<Int> sourceId_p;
00402 ScalarColumn<Bool> flagRow_p;
00403
00404 ScalarColumn<Int> ephemerisId_p;
00405
00406
00407 ScalarMeasColumn<MEpoch> timeMeas_p;
00408 ArrayMeasColumn<MDirection> delayDirMeas_p;
00409 ArrayMeasColumn<MDirection> phaseDirMeas_p;
00410 ArrayMeasColumn<MDirection> referenceDirMeas_p;
00411
00412
00413 ScalarQuantColumn<Double> timeQuant_p;
00414
00415 };
00416
00417
00418 }
00419
00420 #endif