SDMBinData.h

Go to the documentation of this file.
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 // Enumerations used to select data:
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 // Views:
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 // #include "Singleton.hpp"
00033 // #include "ExecBlockDir.hpp"
00034 
00035 
00036 using namespace std;
00037 using namespace asdm;
00038 
00039 namespace sdmbin{
00040 
00042 class SDMBinData{
00043  public:
00044   /*   SDMBinData(); */
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_;  // true ==> autoData will be transformed into complex data
00291   EnumSet<ScanIntent>                   es_si_;  // set of scan intents selected
00292   EnumSet<ProcessorType>                es_pt_;  // set of processor type selected
00293   EnumSet<CorrelationMode>              es_cm_;  // set of correlation mode selected
00294   EnumSet<SpectralResolutionType>      es_srt_;  // set of spectral resolution types selected
00295   EnumSet<TimeSampling>                 es_ts_;  // set of time sampling selected
00296 
00297   Enum<CorrelationMode>                 e_qcm_;  // query to select a subset of data in a BLOB
00298   EnumSet<AtmPhaseCorrection>         es_qapc_;  // query to select a subset of data in a BLOB
00299 
00300   bool                                ddfirst_;  // true ==> output sequences of time for every dataDescription
00301 
00302   MainRow*                         mainRowPtr_;
00303   string                              dataOID_;
00304   SDMDataObjectReader                  blob_r_;  // current read-only BLOB
00305   vector<DataDump*>                v_dataDump_;
00306 
00307   const  float*                  floatDataPtr_;  // mutable attribute; autocorrelation data of a single dump
00308   const  short*                  shortDataPtr_;  // mutable attribute; visiblity data of a single dump
00309   const  int*                     longDataPtr_;  // mutable attribute; visiblity data of a single dump
00310   const  unsigned int*               flagsPtr_;  // mutable attribute; flags data in a single dump
00311   const  int64_t*            actualTimesPtr_;  // mutable attribute; actualTimes in a single dump 
00312   const  int64_t*        actualDurationsPtr_;  // mutable attribute; actualDurations in a single dump
00313   const  float*                   zeroLagsPtr_;  // mutable attribute; zeroLags in a single dump
00314   static MSData*                    msDataPtr_;  // mutable attribute; one MS-MAIN row given
00315   static SDMData*                  sdmDataPtr_;  // mutable attribute; one SDM-Main (v2) row 
00316   static BaselinesSet*           baselinesSet_;  // mutable attribute
00317   static vector<MSData*>          v_msDataPtr_;  // mutable attribute
00318   static VMSData*                  vmsDataPtr_;
00319   static vector<SDMData*>        v_sdmDataPtr_;
00320   map<Tag,BaselinesSet*>  m_cdId_baselinesSet_;
00321   set<Tag>                             s_cdId_; // the keys present in  m_cdId_baselinesSet_ (used for optimization)
00322   bool                            complexData_;
00323   static bool                  coutDeleteInfo_; // utility for debugging
00324   static bool                 baselineReverse_; // order in which the data are in the returning VMSData structure.
00325   static bool                    autoTrailing_; // position of the auto data relative cross data in the returning VMSData structure.
00326   static bool                          syscal_; // true ==> apply system temperature calibration.
00327 
00328   const float*               floatDataDumpPtr_;
00329 
00330   vector<pair<unsigned int,double> >    v_tci_; // Indexed time centroid sequence
00331 
00332   void   deleteMsData(MSData* msDataPtr);
00333 
00334 
00335 };
00336 
00337 }
00338 
00339 #define _SDMBINDATA_H
00340 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines