MS2ASDM.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 #include <ms/MeasurementSets/MeasurementSet.h>
00026 #include <ms/MeasurementSets/MSColumns.h>
00027 #include <casa/aips.h>
00028 #include <casa/Arrays/Array.h>
00029 #include <casa/Arrays/Vector.h>
00030 #include <map>
00031 #include <vector>
00032 #include <casa/OS/Directory.h>
00033
00034 #include <alma/ASDM/ASDM.h>
00035 #include <alma/ASDM/Tag.h>
00036 #include <alma/ASDM/ComplexWrapper.h>
00037 #include <alma/ASDM/Frequency.h>
00038 #include <alma/ASDM/Angle.h>
00039 #include <alma/ASDM/AngularRate.h>
00040 #include <alma/ASDM/Length.h>
00041 #include <alma/ASDM/Temperature.h>
00042 #include <alma/ASDM/ArrayTimeInterval.h>
00043 #include <alma/ASDM/EntityRef.h>
00044 #include <alma/Enumerations/CStokesParameter.h>
00045 #include <alma/Enumerations/CAntennaType.h>
00046 #include <alma/Enumerations/CBasebandName.h>
00047 #include <alma/Enumerations/CNetSideband.h>
00048 #include <alma/Enumerations/CFrequencyReferenceCode.h>
00049 #include <alma/Enumerations/CReceiverBand.h>
00050 #include <alma/Enumerations/CReceiverSideband.h>
00051
00052
00053 #ifndef MSVIS_MS2ASDM_H
00054 namespace casa {
00055
00056 #define MSVIS_MS2ASDM_H
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 class MS2ASDM : public ROMSColumns
00079 {
00080
00081 public:
00082
00083
00084 MS2ASDM(MeasurementSet& ms);
00085
00086 ~MS2ASDM();
00087
00088 const String& showversion();
00089
00090
00091 void setVerbosity(const uInt verbosity = 2){
00092 verbosity_p = verbosity; }
00093
00094 void setBaseUid(const String& baseuid);
00095
00096 const String& getBaseUid();
00097
00098 const std::string& getCurrentUid();
00099
00100
00101 const std::string& getCurrentUidAsFileName();
00102
00103
00104 void setSubScanDuration(const Double subscanDuration = 24.*3600.){
00105 subscanDuration_p = subscanDuration; }
00106
00107
00108 Double getSubScanDuration(){ return subscanDuration_p; }
00109
00110
00111 void setSBDuration(const Double sBDuration = 2700.){
00112 schedBlockDuration_p = sBDuration; }
00113
00114
00115 Double getSBDuration(){ return schedBlockDuration_p; }
00116
00117 void setDataAPCorrected(const Bool isCorrected = True){
00118 dataIsAPCorrected_p = isCorrected; }
00119
00120 Bool dataIsAPCorrected(){ return dataIsAPCorrected_p; }
00121
00122 void setObservatoryName(const String& telName){
00123 telName_p = telName; }
00124
00125 void getObservatoryName( String& telName ){
00126 telName = telName_p; }
00127
00128
00129 StokesParameterMod::StokesParameter ASDMStokesParameter( Stokes::StokesTypes s);
00130
00131
00132 AntennaTypeMod::AntennaType ASDMAntennaType( const String& type );
00133
00134
00135 ArrayTime ASDMArrayTime( const Double seconds ){
00136 return ArrayTime((int64_t) (floor(seconds*ArrayTime::unitsInASecond))); }
00137
00138
00139 Double MSTimeSecs( const ArrayTime atime ){
00140 return (Double) atime.get() / (Double)ArrayTime::unitsInASecond; }
00141
00142 asdm::Interval ASDMInterval( const Double seconds ){
00143 return asdm::Interval((int64_t) (floor(seconds*ArrayTime::unitsInASecond))); }
00144
00145
00146 asdm::ArrayTimeInterval ASDMTimeInterval( const Quantity midpoint, const Quantity interval);
00147
00148
00149 Double timestampStartSecs(const uInt mainTabRow){
00150 return timeQuant()(mainTabRow).getValue("s") - intervalQuant()(mainTabRow).getValue("s")/2.; }
00151
00152
00153 Double timestampEndSecs(const uInt mainTabRow){
00154 return timeQuant()(mainTabRow).getValue("s") + intervalQuant()(mainTabRow).getValue("s")/2.; }
00155
00156
00157 vector< asdm::Angle > ASDMAngleV(const MDirection mDir);
00158
00159
00160 DirectionReferenceCodeMod::DirectionReferenceCode ASDMDirRefCode(const MDirection::Types type);
00161
00162
00163 BasebandNameMod::BasebandName ASDMBBName( const Int bbcNo );
00164
00165
00166 NetSidebandMod::NetSideband ASDMNetSideBand( const Int netSideband );
00167
00168
00169
00170
00171 Int setRecBands( const asdm::Frequency refFreq,
00172 Double& frequency,
00173 ReceiverBandMod::ReceiverBand& frequencyBand,
00174 ReceiverSidebandMod::ReceiverSideband& receiverSideband);
00175
00176 FrequencyReferenceCodeMod::FrequencyReferenceCode ASDMFreqRefCode( const MFrequency::Types refFrame );
00177
00178 Unit unitASDMFreq(){ return Unit(String(asdm::Frequency::unit())); }
00179
00180 Unit unitASDMAngle(){ return Unit(String(asdm::Angle::unit())); }
00181
00182 Unit unitASDMAngularRate(){ return Unit(String(asdm::AngularRate::unit())); }
00183
00184 Unit unitASDMLength(){ return Unit(String(asdm::Length::unit())); }
00185
00186 Unit unitASDMTemp(){ return Unit(String(asdm::Temperature::unit())); }
00187
00188 asdm::Complex ASDMComplex( casa::Complex x ){ return asdm::Complex(x.real(), x.imag()); }
00189
00190
00191 Bool writeASDM(const String& asdmfile="",
00192 const String& datacolumn="data",
00193 const String& archiveid="S0",
00194 const String& rangeid="X1",
00195 const Bool verbose=True,
00196 const Double maxSubscanDuration = 24.*3600.,
00197 const Double maxSchedBlockDuration = 2700.,
00198 const Bool msDataIsAPCorrected=True
00199 );
00200
00201 private:
00202
00203
00204 Bool incrementUid();
00205
00206 Bool setDirectory(const String& asdmfile);
00207
00208
00209 Bool writeStation();
00210
00211 Bool writeAntenna();
00212
00213 Bool writeSpectralWindow();
00214
00215 Bool writeSource();
00216
00217 Bool writePolarization();
00218
00219 Bool writeCorrelatorMode();
00220 Bool writeAlmaRadiometer();
00221 Bool writeHolography();
00222
00223 Bool writeProcessor();
00224
00225 Bool writeField();
00226
00227 Bool writeReceiver();
00228
00229 Bool writeFeed();
00230
00231 Bool writeDataDescription();
00232
00233 Bool writeSwitchCycle();
00234
00235 Bool writeState();
00236
00237 Bool writeSysCal();
00238
00239 Bool writeConfigDescription();
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253 Bool writeSBSummaryAndExecBlockStubs();
00254
00255 Bool writeMainAndScanAndSubScan(const String& datacolumn);
00256
00257
00258
00259 Int writeMainBinSubScanForOneDDIdFIdPair(const Int theDDId, const Int theFieldId,
00260 const String& datacolumn,
00261 const uInt theScan, const uInt theSubScan,
00262 const uInt startRow, const uInt endRow,
00263 const asdm::Tag eBlockId,
00264 int& datasize, asdm::EntityRef& dataOid,
00265 vector< asdm::Tag >& stateId);
00266
00267 Bool writePointingModel();
00268
00269 Bool writePointing();
00270
00271
00272
00273
00274 Bool stokesTypePresent( const Vector< Int > corrT, const Stokes::StokesTypes st );
00275
00276
00277
00278
00279 MeasurementSet ms_p;
00280
00281 asdm::ASDM* ASDM_p;
00282
00283 string asdmVersion_p;
00284
00285 uInt verbosity_p;
00286
00287 String baseUid_p;
00288
00289
00290 uInt runningId_p;
00291
00292
00293 String currentUid_p;
00294
00295 String telName_p;
00296
00297 Double subscanDuration_p;
00298
00299 Double schedBlockDuration_p;
00300
00301 Bool dataIsAPCorrected_p;
00302
00303
00304
00305 string asdmUID_p;
00306
00307 String asdmDir_p;
00308
00309 SimpleOrderedMap <String, asdm::Tag> asdmStationId_p;
00310 SimpleOrderedMap <Int, asdm::Tag> asdmAntennaId_p;
00311 SimpleOrderedMap <Int, asdm::Tag> asdmSpectralWindowId_p;
00312 SimpleOrderedMap <Int, asdm::Tag> asdmPolarizationId_p;
00313 SimpleOrderedMap <Int, asdm::Tag> asdmProcessorId_p;
00314 SimpleOrderedMap <Int, asdm::Tag> asdmFieldId_p;
00315 SimpleOrderedMap <Int, asdm::Tag> asdmEphemerisId_p;
00316 SimpleOrderedMap <Int, asdm::Tag> asdmDataDescriptionId_p;
00317 SimpleOrderedMap <Int, asdm::Tag> asdmStateId_p;
00318 SimpleOrderedMap <uInt, asdm::Tag> asdmConfigDescriptionId_p;
00319 SimpleOrderedMap <Int, asdm::Tag> asdmSBSummaryId_p;
00320 SimpleOrderedMap <Double, asdm::Tag> asdmExecBlockId_p;
00321 SimpleOrderedMap <Int, int> asdmFeedId_p;
00322 SimpleOrderedMap <Int, int> asdmSourceId_p;
00323 SimpleOrderedMap <asdm::Tag, int> asdmPointingModelId_p;
00324
00325 vector< vector< Bool > > skipCorr_p;
00326
00327
00328
00329 };
00330
00331
00332 }
00333
00334
00335
00336
00337
00338 #endif
00339