00001 #if !defined(_SDMBINDATA_H)
00002
00003 #include <iostream>
00004 #include <sstream>
00005 #include <string>
00006
00007 #include <ASDMEntities.h>
00008 #include <Tag.h>
00009 #include <ArrayTime.h>
00010 #include <ArrayTimeInterval.h>
00011
00012
00013 #include <AtmPhaseCorrection.h>
00014 #include <CorrelationMode.h>
00015 #include <ProcessorType.h>
00016 #include <ScanIntent.h>
00017 #include <SpectralResolutionType.h>
00018 #include <TimeSampling.h>
00019
00020 #include <CorrelatorType.h>
00021
00022
00023 #include "SDMDataViews.h"
00024
00025 #include "BaselinesSet.h"
00026 #include "Integration.h"
00027
00028
00029 #include "SDMDataObjectReader.h"
00030 using namespace asdmbinaries;
00031
00032
00033
00034
00035
00036 using namespace std;
00037 using namespace asdm;
00038
00039 namespace sdmbin{
00040
00042 class SDMBinData{
00043 public:
00044
00060 SDMBinData( ASDM* const datasetPtr, string execBlockDir);
00061
00062 ~SDMBinData();
00063
00071 void select( EnumSet<ScanIntent> es_si);
00072
00080 void select( EnumSet<ProcessorType> es_pt);
00081
00089 void select( EnumSet<CorrelationMode> es_cm);
00090
00098 void select( EnumSet<SpectralResolutionType> es_srt);
00099
00107 void select( EnumSet<TimeSampling> es_ts);
00108
00109
00119 void select( EnumSet<CorrelationMode> es_cm,
00120 EnumSet<SpectralResolutionType> es_srt,
00121 EnumSet<TimeSampling> es_ts);
00122
00123
00132 void selectDataSubset( Enum<CorrelationMode> e_qcm,
00133 EnumSet<AtmPhaseCorrection> es_qapc );
00134
00139 void setPriorityDataDescription();
00140
00147 vector<pair<unsigned int,double> > timeSequence()const;
00148
00152 bool dataDescriptionFirst()const;
00153
00159 void applySysCal();
00160
00164 bool sysCalApplied() const;
00165
00173 bool acceptMainRow( MainRow* const mainRowPtr);
00174
00175
00181 string reasonToReject(MainRow* const mainRowPtr);
00182
00183
00199 bool isComplexData();
00200
00201 vector<SDMData*> getData();
00202
00208 vector<MSData*> getData( Enum<CorrelationMode> e_qcm, EnumSet<AtmPhaseCorrection> es_qapc);
00209
00210 MSData* getData( unsigned int na, unsigned int nfe, unsigned int ndd, unsigned int nbin) throw (Error);
00211
00212 MSData* getCalibratedData( unsigned int na, unsigned int nfe, unsigned int ndd, unsigned int nbin,
00213 pair<bool,vector<vector<float> > > p_tsys) throw (Error);
00214
00215 MSData* getData( unsigned int na1, unsigned int nfe1, unsigned int na2, unsigned int nfe2,
00216 unsigned int ndd, unsigned int nbin, vector<unsigned int> v_napc,
00217 float scleFactor);
00218
00219 MSData* getCalibratedData( unsigned int na1, unsigned int nfe1, unsigned int na2, unsigned int nfe2,
00220 unsigned int ndd, unsigned int nbin, vector<unsigned int> v_napc,
00221 float scleFactor,
00222 pair<bool,vector<vector<float> > > p_tsys);
00223
00224 MSData* getData( Tag antId, int feedId,
00225 Tag dataDescId,
00226 AtmPhaseCorrection apc,
00227 unsigned int binNum);
00228
00229 MSData* getData( Tag antId1, int feedId1,
00230 Tag antId2, int feedId2,
00231 Tag dataDescId,
00232 vector<AtmPhaseCorrection> v_apc,
00233 unsigned int binNum);
00234
00235 const VMSData* getDataCols();
00236
00237 const VMSData* getDataCols( Enum<CorrelationMode> e_qcm, EnumSet<AtmPhaseCorrection> es_qapc );
00238
00246 static bool baselineReverse();
00247
00253 static bool autoTrailing();
00254
00256 static pair<bool,bool> dataOrder();
00257
00258 protected:
00259
00263 int attachDataObject(string dataOID);
00264
00267 void detachDataObject();
00268
00281 MSState getMSState( unsigned int subscanNum,
00282 vector<Tag> v_stateId,
00283 vector<Tag> v_antennaId, vector<int> v_feedId, vector<Tag> v_ddId,
00284 unsigned int na, unsigned int nfe, unsigned int nspw, ArrayTime timeOfDump);
00285
00286 private:
00287 static ASDM* datasetPtr_;
00288 static string execBlockDir_;
00289 static bool canSelect_;
00290 static bool forceComplex_;
00291 EnumSet<ScanIntent> es_si_;
00292 EnumSet<ProcessorType> es_pt_;
00293 EnumSet<CorrelationMode> es_cm_;
00294 EnumSet<SpectralResolutionType> es_srt_;
00295 EnumSet<TimeSampling> es_ts_;
00296
00297 Enum<CorrelationMode> e_qcm_;
00298 EnumSet<AtmPhaseCorrection> es_qapc_;
00299
00300 bool ddfirst_;
00301
00302 MainRow* mainRowPtr_;
00303 string dataOID_;
00304 SDMDataObjectReader blob_r_;
00305 vector<DataDump*> v_dataDump_;
00306
00307 const float* floatDataPtr_;
00308 const short* shortDataPtr_;
00309 const int* longDataPtr_;
00310 const unsigned int* flagsPtr_;
00311 const int64_t* actualTimesPtr_;
00312 const int64_t* actualDurationsPtr_;
00313 const float* zeroLagsPtr_;
00314 static MSData* msDataPtr_;
00315 static SDMData* sdmDataPtr_;
00316 static BaselinesSet* baselinesSet_;
00317 static vector<MSData*> v_msDataPtr_;
00318 static VMSData* vmsDataPtr_;
00319 static vector<SDMData*> v_sdmDataPtr_;
00320 map<Tag,BaselinesSet*> m_cdId_baselinesSet_;
00321 set<Tag> s_cdId_;
00322 bool complexData_;
00323 static bool coutDeleteInfo_;
00324 static bool baselineReverse_;
00325 static bool autoTrailing_;
00326 static bool syscal_;
00327
00328 const float* floatDataDumpPtr_;
00329
00330 vector<pair<unsigned int,double> > v_tci_;
00331
00332 void deleteMsData(MSData* msDataPtr);
00333
00334
00335 };
00336
00337 }
00338
00339 #define _SDMBINDATA_H
00340 #endif