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/Complex.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 BasebandNameMod::BasebandName ASDMBBName( const Int bbcNo );
00161
00162
00163 NetSidebandMod::NetSideband ASDMNetSideBand( const Int netSideband );
00164
00165
00166
00167
00168 Int setRecBands( const asdm::Frequency refFreq,
00169 Double& frequency,
00170 ReceiverBandMod::ReceiverBand& frequencyBand,
00171 ReceiverSidebandMod::ReceiverSideband& receiverSideband);
00172
00173 FrequencyReferenceCodeMod::FrequencyReferenceCode ASDMFreqRefCode( const MFrequency::Types refFrame );
00174
00175 Unit unitASDMFreq(){ return Unit(String(asdm::Frequency::unit())); }
00176
00177 Unit unitASDMAngle(){ return Unit(String(asdm::Angle::unit())); }
00178
00179 Unit unitASDMAngularRate(){ return Unit(String(asdm::AngularRate::unit())); }
00180
00181 Unit unitASDMLength(){ return Unit(String(asdm::Length::unit())); }
00182
00183 Unit unitASDMTemp(){ return Unit(String(asdm::Temperature::unit())); }
00184
00185 asdm::Complex ASDMComplex( casa::Complex x ){ return asdm::Complex(x.real(), x.imag()); }
00186
00187
00188 Bool writeASDM(const String& asdmfile="",
00189 const String& datacolumn="data",
00190 const String& archiveid="S0",
00191 const String& rangeid="X1",
00192 const Bool verbose=True,
00193 const Double maxSubscanDuration = 24.*3600.,
00194 const Double maxSchedBlockDuration = 2700.,
00195 const Bool msDataIsAPCorrected=True
00196 );
00197
00198 private:
00199
00200
00201 Bool incrementUid();
00202
00203 Bool setDirectory(const String& asdmfile);
00204
00205
00206 Bool writeStation();
00207
00208 Bool writeAntenna();
00209
00210 Bool writeSpectralWindow();
00211
00212 Bool writeSource();
00213
00214 Bool writePolarization();
00215
00216 Bool writeCorrelatorMode();
00217 Bool writeAlmaRadiometer();
00218 Bool writeHolography();
00219
00220 Bool writeProcessor();
00221
00222 Bool writeField();
00223
00224 Bool writeReceiver();
00225
00226 Bool writeFeed();
00227
00228 Bool writeDataDescription();
00229
00230 Bool writeSwitchCycle();
00231
00232 Bool writeState();
00233
00234 Bool writeSysCal();
00235
00236 Bool writeConfigDescription();
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250 Bool writeSBSummaryAndExecBlockStubs();
00251
00252 Bool writeMainAndScanAndSubScan(const String& datacolumn);
00253
00254
00255
00256 Int writeMainBinSubScanForOneDDIdFIdPair(const Int theDDId, const Int theFieldId,
00257 const String& datacolumn,
00258 const uInt theScan, const uInt theSubScan,
00259 const uInt startRow, const uInt endRow,
00260 const asdm::Tag eBlockId,
00261 int& datasize, asdm::EntityRef& dataOid,
00262 vector< asdm::Tag >& stateId);
00263
00264 Bool writePointingModel();
00265
00266 Bool writePointing();
00267
00268
00269
00270
00271 Bool stokesTypePresent( const Vector< Int > corrT, const Stokes::StokesTypes st );
00272
00273
00274
00275
00276 MeasurementSet ms_p;
00277
00278 asdm::ASDM* ASDM_p;
00279
00280 string asdmVersion_p;
00281
00282 uInt verbosity_p;
00283
00284 String baseUid_p;
00285
00286
00287 uInt runningId_p;
00288
00289
00290 String currentUid_p;
00291
00292 String telName_p;
00293
00294 Double subscanDuration_p;
00295
00296 Double schedBlockDuration_p;
00297
00298 Bool dataIsAPCorrected_p;
00299
00300
00301
00302 string asdmUID_p;
00303
00304 String asdmDir_p;
00305
00306 SimpleOrderedMap <String, asdm::Tag> asdmStationId_p;
00307 SimpleOrderedMap <Int, asdm::Tag> asdmAntennaId_p;
00308 SimpleOrderedMap <Int, asdm::Tag> asdmSpectralWindowId_p;
00309 SimpleOrderedMap <Int, asdm::Tag> asdmPolarizationId_p;
00310 SimpleOrderedMap <Int, asdm::Tag> asdmProcessorId_p;
00311 SimpleOrderedMap <Int, asdm::Tag> asdmFieldId_p;
00312 SimpleOrderedMap <Int, asdm::Tag> asdmEphemerisId_p;
00313 SimpleOrderedMap <Int, asdm::Tag> asdmDataDescriptionId_p;
00314 SimpleOrderedMap <Int, asdm::Tag> asdmStateId_p;
00315 SimpleOrderedMap <uInt, asdm::Tag> asdmConfigDescriptionId_p;
00316 SimpleOrderedMap <Int, asdm::Tag> asdmSBSummaryId_p;
00317 SimpleOrderedMap <Double, asdm::Tag> asdmExecBlockId_p;
00318 SimpleOrderedMap <Int, int> asdmFeedId_p;
00319 SimpleOrderedMap <Int, int> asdmSourceId_p;
00320 SimpleOrderedMap <asdm::Tag, int> asdmPointingModelId_p;
00321
00322 vector< vector< Bool > > skipCorr_p;
00323
00324
00325
00326 };
00327
00328
00329 }
00330
00331
00332
00333
00334
00335 #endif
00336