00001 #if !defined(_INTEGRATION_H)
00002
00003 #include <vector>
00004 #include <CorrelationMode.h>
00005 #include <AxisName.h>
00006 #include <NetSideband.h>
00007
00008 using namespace std;
00009
00010 namespace sdmbin {
00011
00044 class DataStructure{
00045 public:
00047 DataStructure();
00048
00058 DataStructure( uint32_t numPolProduct,
00059 uint32_t numBin,
00060 Enum<NetSideband> e_sideband,
00061 uint32_t numBaseband,
00062 uint32_t numAnt,
00063 CorrelationMode correlationMode);
00064
00086 DataStructure( uint32_t numPolProduct,
00087 uint32_t numSpectralPoint,
00088 uint32_t numBin,
00089 Enum<NetSideband> e_sideband,
00090 uint32_t numBaseband,
00091 uint32_t numAnt,
00092 CorrelationMode correlationMode);
00093
00120 DataStructure( vector<vector<uint32_t> > vv_numCrossPolProduct,
00121 vector<vector<uint32_t> > vv_numAutoPolProduct,
00122 vector<vector<uint32_t> > vv_numSpectralPoint,
00123 vector<vector<uint32_t> > vv_numBin,
00124 vector<vector<Enum<NetSideband> > > vv_e_sideband,
00125 uint32_t numApc,
00126 vector<uint32_t> v_numSpectralWindow,
00127 uint32_t numBaseband,
00128 uint32_t numAnt,
00129 CorrelationMode correlationMode);
00130
00157 DataStructure( vector<vector<uint32_t> > vv_numAutoPolProduct,
00158 vector<vector<uint32_t> > vv_numSpectralPoint,
00159 vector<vector<uint32_t> > vv_numBin,
00160 vector<vector<Enum<NetSideband> > > vv_e_sideband,
00161 uint32_t numApc,
00162 vector<uint32_t> v_numSpectralWindow,
00163 uint32_t numBaseband,
00164 uint32_t numAnt,
00165 CorrelationMode correlationMode);
00166
00168 DataStructure( const DataStructure &);
00169
00171 ~DataStructure();
00172
00173
00177 vector<vector<uint32_t> > numCrossPolProducts();
00178
00182 vector<vector<uint32_t> > numAutoPolProducts();
00183
00187 vector<vector<uint32_t> > numSpectralPoints();
00188
00189
00193 vector<vector<uint32_t> > numBins();
00194
00198 vector<vector<Enum<NetSideband> > > sidebands();
00199
00201 uint32_t numApc();
00202
00204 vector<uint32_t> numSpectralWindows();
00205
00207 uint32_t numBaseband();
00208
00210 uint32_t numAnt();
00211
00217 CorrelationMode correlationMode();
00218
00229 vector<uint32_t> leafAxisSizes();
00230
00243 vector<uint32_t> leafAxisSizes(uint32_t basebandIndex, uint32_t spectralWindowIndex);
00244
00259 vector<uint32_t> leafAxisSizes(uint32_t dataDescriptionIndex);
00260
00261
00270 uint32_t isIndexible() const;
00271
00272
00280 vector<uint32_t> eAxisSizes() const;
00281
00288 vector<uint32_t> axisSizes() const;
00289
00294 uint32_t dimension() const;
00295
00300 vector<uint32_t> minAxSize() const;
00301
00306 vector<uint32_t> maxAxSize() const;
00307
00310 uint32_t numAutoData() const;
00311
00314 uint32_t numCrossData() const;
00315
00319 string axisSequence() const;
00320
00323 void summary() const;
00324
00325 protected:
00326 vector<vector<uint32_t> > vv_numCrossPolProduct_;
00327 vector<vector<uint32_t> > vv_numAutoPolProduct_;
00328 vector<vector<uint32_t> > vv_numSpectralPoint_;
00329 vector<vector<uint32_t> > vv_numBin_;
00330 vector<vector<Enum<NetSideband> > > vv_e_sideband_;
00331 uint32_t numApc_;
00332 vector<uint32_t> v_numSpectralWindow_;
00333 uint32_t numBaseband_;
00334 uint32_t numAnt_;
00335 CorrelationMode correlationMode_;
00336 string axisSequence_;
00337 vector<uint32_t> v_minSize_;
00338 vector<uint32_t> v_maxSize_;
00339
00340 private:
00341 string setStructureProperties();
00342 };
00343
00370 class DataDump : public DataStructure {
00371 public:
00372 DataDump();
00373
00395 DataDump( uint32_t numPolProduct,
00396 uint32_t numBin,
00397 Enum<NetSideband> e_sideband,
00398 uint32_t numBaseband,
00399 uint32_t numAnt,
00400 CorrelationMode correlationMode,
00401 uint64_t time,
00402 uint64_t timeCentroid,
00403 uint64_t interval,
00404 uint64_t exposure,
00405 const float* floatData);
00406
00432 DataDump( uint32_t numSdPolProduct,
00433 uint32_t numSpectralPoint,
00434 uint32_t numBin,
00435 Enum<NetSideband> e_sideband,
00436 uint32_t numBaseband,
00437 uint32_t numAnt,
00438 CorrelationMode correlationMode,
00439 uint64_t time,
00440 uint64_t timeCentroid,
00441 uint64_t interval,
00442 uint64_t exposure,
00443 const float* floatData,
00444 const uint32_t* dataFlags);
00445
00449 DataDump( vector<vector<uint32_t> > vv_numPolProduct,
00450 vector<vector<uint32_t> > vv_numSpectralPoint,
00451 vector<vector<uint32_t> > vv_numBin,
00452 vector<vector<Enum<NetSideband> > > vv_e_sideband,
00453 uint32_t numApc,
00454 vector<uint32_t> v_numSpectralWindow,
00455 uint32_t numBaseband,
00456 uint32_t numAnt,
00457 CorrelationMode correlationMode,
00458 uint64_t time,
00459 uint64_t timeCentroid,
00460 uint64_t interval,
00461 uint64_t exposure,
00462 const float* floatData);
00463
00467 DataDump( vector<vector<uint32_t> > vv_numPolProduct,
00468 vector<vector<uint32_t> > vv_numSpectralPoint,
00469 vector<vector<uint32_t> > vv_numBin,
00470 vector<vector<Enum<NetSideband> > > vv_e_sideband,
00471 uint32_t numApc,
00472 vector<uint32_t> v_numSpectralWindow,
00473 uint32_t numBaseband,
00474 uint32_t numAnt,
00475 CorrelationMode correlationMode,
00476 uint64_t time,
00477 uint64_t timeCentroid,
00478 uint64_t interval,
00479 uint64_t exposure,
00480 const float* floatData,
00481 const uint32_t* dataFlags);
00482
00485 DataDump( vector<vector<uint32_t> > vv_numCrossPolProduct,
00486 vector<vector<uint32_t> > vv_numAutoPolProduct,
00487 vector<vector<uint32_t> > vv_numSpectralPoint,
00488 vector<vector<uint32_t> > vv_numBin,
00489 vector<vector<Enum<NetSideband> > > vv_e_sideband,
00490 uint32_t numApc,
00491 vector<uint32_t> v_numSpectralWindow,
00492 uint32_t numBaseband,
00493 uint32_t numAnt,
00494 CorrelationMode correlationMode,
00495 uint64_t time,
00496 uint64_t timeCentroid,
00497 uint64_t interval,
00498 uint64_t exposure);
00499
00517 ~DataDump();
00518
00522 DataDump(const DataDump& a);
00523
00525 DataDump & operator = (const DataDump& a);
00526
00527 void attachFlags( uint32_t declaredSize, EnumSet<AxisName> es_an,
00528 uint32_t numData, const uint32_t* flagsPtr);
00529 void importFlags( uint32_t declaredSize, EnumSet<AxisName> es_an,
00530 uint32_t numData, const uint32_t* flagsPtr);
00531
00532 void attachActualTimes( uint32_t declaredSize, EnumSet<AxisName> es_an,
00533 uint32_t numData, const int64_t * actualTimesPtr);
00534
00535 void importActualTimes( uint32_t declaredSize, EnumSet<AxisName> es_an,
00536 uint32_t numData, const int64_t * actualTimesPtr);
00537
00538 void attachActualDurations( uint32_t declaredSize, EnumSet<AxisName> es_an,
00539 uint32_t numData, const int64_t * durationsPtr);
00540
00541 void importActualDurations( uint32_t declaredSize, EnumSet<AxisName> es_an,
00542 uint32_t numData, const int64_t * durationsPtr);
00543
00544
00545 void attachZeroLags ( uint32_t declaredSize, EnumSet<AxisName> es_an,
00546 uint32_t numData, const float* zeroLagsPtr);
00547
00548 void importZeroLags ( uint32_t declaredSize, EnumSet<AxisName> es_an,
00549 uint32_t numData, const float* zeroLagsPtr);
00550
00551
00552 void attachAutoData ( uint32_t declaredSize, EnumSet<AxisName> es_an,
00553 uint32_t numData, const float * autoDataPtr);
00554
00555 void importAutoData ( uint32_t declaredSize, EnumSet<AxisName> es_an,
00556 uint32_t numData, const float * autoDataPtr);
00557
00558 void attachCrossData ( uint32_t declaredSize, EnumSet<AxisName> es_an,
00559 uint32_t numData, const short int* crossDataPtr);
00560 void importCrossData ( uint32_t declaredSize, EnumSet<AxisName> es_an,
00561 uint32_t numData, const short int* crossDataPtr);
00562 void attachCrossData ( uint32_t declaredSize, EnumSet<AxisName> es_an,
00563 uint32_t numData, const int * crossDataPtr);
00564 void importCrossData ( uint32_t declaredSize, EnumSet<AxisName> es_an,
00565 uint32_t numData, const int * crossDataPtr);
00566 void attachCrossData ( uint32_t declaredSize, EnumSet<AxisName> es_an,
00567 uint32_t numData, const float * crossDataPtr);
00568 void importCrossData ( uint32_t declaredSize, EnumSet<AxisName> es_an,
00569 uint32_t numData, const float * crossDataPtr);
00570
00571 void setScaleFactor(vector<vector<float> > vv_scaleFactor);
00572 uint32_t setIntegration(uint32_t integNum);
00573 uint32_t setSubintegration(uint32_t integNum, uint32_t subintegNum);
00574 uint32_t setContextUsingProjectPath(string projectPathUri);
00575
00576
00577 uint32_t integrationNum();
00578 uint32_t subintegrationNum();
00579
00580 float scaleFactor(uint32_t nbb, uint32_t nspw);
00581
00582 float scaleFactor(uint32_t ndd);
00583
00588 uint64_t time() const;
00589 uint64_t timeCentroid() const;
00590 uint64_t interval() const;
00591 uint64_t exposure() const;
00593
00598 const int64_t* actualTimes() const;
00599 const int64_t* actualDurations() const;
00604 const uint32_t* flags() const;
00605 const float* zeroLags() const;
00606
00607
00619 const float* autoData() const;
00620
00621 const short* crossDataShort() const;
00622
00623 const int* crossDataLong() const;
00624
00625 const float* crossDataFloat() const;
00626
00637 uint32_t floatData(vector<vector<float>& >);
00638
00639
00656 uint32_t floatData(vector<vector<float*> >&);
00657
00658
00664 uint32_t floatData(vector<vector<vector<float> > >&);
00665
00666
00684 uint32_t floatData(vector<vector<vector<float*> > >&);
00685
00686
00702 uint32_t floatData(vector<vector<vector<vector<float> > > >&);
00703
00704
00705
00711 uint32_t floatData(vector<vector<vector<vector<float*> > > >&);
00712
00720 uint32_t floatData(vector<vector<vector<vector<vector<float> > > > >&);
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00732
00761 DataDump operator - (const DataDump & B);
00762
00787 DataDump operator -= (const DataDump &);
00788
00816 DataDump operator + (const DataDump &);
00817
00818
00847 DataDump operator += (const DataDump &);
00848
00849 DataDump operator * (const float &);
00850 DataDump operator / (const float &);
00851
00852
00853
00854
00855
00856
00857
00859
00865 DataDump spectralAverage();
00866 DataDump spectralAverage(uint32_t startIndex, uint32_t endIndex);
00867 DataDump decim(const DataDump &);
00868 DataDump subtractRef(const DataDump &);
00870
00871
00872
00873
00874 protected:
00875
00876 uint32_t integrationNum_;
00877 uint32_t subintegrationNum_;
00878 uint64_t time_;
00879 uint64_t timeCentroid_;
00880 uint64_t interval_;
00881 uint64_t exposure_;
00882
00883 EnumSet<AxisName> es_flagsAxes_;
00884 EnumSet<AxisName> es_actualTimesAxes_;
00885 EnumSet<AxisName> es_actualDurationsAxes_;
00886 EnumSet<AxisName> es_weightsAxes_;
00887 EnumSet<AxisName> es_zeroLagsAxes_;
00888 EnumSet<AxisName> es_autoDataAxes_;
00889 EnumSet<AxisName> es_crossDataAxes_;
00890
00891 uint32_t numFlags_;
00892 uint32_t numActualTimes_;
00893 uint32_t numActualDurations_;
00894 uint32_t numWeights_;
00895 uint32_t numZeroLags_;
00896 uint32_t numAutoData_;
00897 uint32_t numCrossData_;
00898
00899 vector<vector<float> > vv_scaleFactor_;
00900 vector<float> v_scaleFactor_;
00901
00902 const uint32_t* cuintFlagsPtr_;
00903 const int64_t* clonlonActualTimesPtr_;
00904 const int64_t* clonlonActualDurationsPtr_;
00905 const float* cfloatWeightsPtr_;
00906 const float* cfloatZeroLagsPtr_;
00907 const float* cfloatAutoDataPtr_;
00908 const short int* cshortCrossDataPtr_;
00909 const int* cintCrossDataPtr_;
00910 const float* cfloatCrossDataPtr_;
00911
00912 uint32_t* uintFlagsPtr_;
00913 int64_t* lonlonActualTimesPtr_;
00914 int64_t* lonlonActualDurationsPtr_;
00915 float* floatWeightsPtr_;
00916 float* floatZeroLagsPtr_;
00917 float* floatAutoDataPtr_;
00918 short int* shortCrossDataPtr_;
00919 int* intCrossDataPtr_;
00920 float* floatCrossDataPtr_;
00921
00923 DataDump( vector<vector<uint32_t> > vv_numCrossPolProduct,
00924 vector<vector<uint32_t> > vv_numAutoPolProduct,
00925 vector<vector<uint32_t> > vv_numSpectralPoint,
00926 vector<vector<uint32_t> > vv_numBin,
00927 vector<vector<Enum<NetSideband> > > vv_e_sideband,
00928 uint32_t numApc,
00929 vector<uint32_t> v_numSpectralWindow,
00930 uint32_t numBaseband,
00931 uint32_t numAnt,
00932 CorrelationMode correlationMode,
00933 uint64_t time,
00934 uint64_t timeCentroid,
00935 uint64_t interval,
00936 uint64_t exposure,
00937 uint32_t numCrossData,
00938 const int* crossData,
00939 uint32_t numAutoData,
00940 const float* floatData,
00941 uint32_t numFlags,
00942 const uint32_t* dataFlags);
00943
00944 private:
00945
00946 void getDataStructure();
00947 };
00948
00949
00954 class Integration : public DataDump
00955 {
00956 public:
00957 Integration();
00958 Integration( vector<vector<uint32_t> > vv_numPolProduct,
00959 vector<vector<uint32_t> > vv_numSpectralPoint,
00960 vector<vector<uint32_t> > vv_numBin,
00961 vector<vector<Enum<NetSideband> > > vv_e_sideband,
00962 uint32_t numApc,
00963 vector<uint32_t> v_numSpectralWindow,
00964 uint32_t numBaseband,
00965 uint32_t numAnt,
00966 CorrelationMode correlationMode,
00967 uint64_t time,
00968 uint64_t timeCentroid,
00969 uint64_t interval,
00970 uint64_t exposure,
00971 float* floatData,
00972 uint32_t integNum);
00973
00974
00975 Integration( vector<vector<uint32_t> > vv_numPolProduct,
00976 vector<vector<uint32_t> > vv_numSpectralPoint,
00977 vector<vector<uint32_t> > vv_numBin,
00978 vector<vector<Enum<NetSideband> > > vv_e_sideband,
00979 uint32_t numApc,
00980 vector<uint32_t> v_numSpectralWindow,
00981 uint32_t numBaseband,
00982 uint32_t numAnt,
00983 CorrelationMode correlationMode,
00984 uint64_t time,
00985 uint64_t timeCentroid,
00986 uint64_t interval,
00987 uint64_t exposure,
00988 float* floatData,
00989 uint32_t* dataFlags,
00990 uint32_t integNum);
00991
00992 Integration( uint32_t numPolProduct,
00993 uint32_t numSpectralPoint,
00994 uint32_t numBin,
00995 Enum<NetSideband> e_sideband,
00996 uint32_t numApc,
00997 uint32_t numSpectralWindow,
00998 uint32_t numBaseband,
00999 uint32_t numAnt,
01000 CorrelationMode correlationMode,
01001 uint64_t time,
01002 uint64_t timeCentroid,
01003 uint64_t interval,
01004 uint64_t exposure,
01005 float* floatData);
01006
01007 Integration( uint32_t numPolProduct,
01008 uint32_t numSpectralPoint,
01009 uint32_t numBin,
01010 Enum<NetSideband> e_sideband,
01011 uint32_t numApc,
01012 uint32_t numSpectralWindow,
01013 uint32_t numBaseband,
01014 uint32_t numAnt,
01015 CorrelationMode correlationMode,
01016 uint64_t time,
01017 uint64_t timeCentroid,
01018 uint64_t interval,
01019 uint64_t exposure,
01020 float* floatData,
01021 uint32_t* dataFlags,
01022 uint32_t integNum);
01023 ~Integration();
01024
01025 Integration( const Integration & a);
01026
01027
01028 private:
01029
01030
01031 };
01032
01033
01034
01040 class Subintegration : public DataDump
01041 {
01042 public:
01043
01052 Subintegration (const Integration&, uint32_t subintegNum );
01053
01060 Subintegration( vector<vector<uint32_t> > vv_numPolProduct,
01061 vector<vector<uint32_t> > vv_numBin,
01062 vector<vector<Enum<NetSideband> > > vv_e_sideband,
01063 vector<uint32_t> v_numSpectralWindow,
01064 uint32_t numBaseband,
01065 uint32_t numAnt,
01066 CorrelationMode correlationMode,
01067 uint64_t time,
01068 uint64_t timeCentroid,
01069 uint64_t interval,
01070 uint64_t exposure,
01071 float* floatData,
01072 uint32_t integNum,
01073 uint32_t subintegNum);
01074
01081 Subintegration( vector<vector<uint32_t> > vv_numPolProduct,
01082 vector<vector<uint32_t> > vv_numBin,
01083 vector<vector<Enum<NetSideband> > > vv_e_sideband,
01084 vector<uint32_t> v_numSpectralWindow,
01085 uint32_t numBaseband,
01086 uint32_t numAnt,
01087 CorrelationMode correlationMode,
01088 uint64_t time,
01089 uint64_t timeCentroid,
01090 uint64_t interval,
01091 uint64_t exposure,
01092 float* floatData,
01093 uint32_t* dataFlags,
01094 uint32_t integNum,
01095 uint32_t subintegNum);
01096
01104 Subintegration( vector<vector<uint32_t> > vv_numPolProduct,
01105 vector<vector<uint32_t> > vv_numBin,
01106 vector<vector<Enum<NetSideband> > > vv_e_sideband,
01107 uint32_t numApc,
01108 vector<uint32_t> v_numSpectralWindow,
01109 uint32_t numBaseband,
01110 uint32_t numAnt,
01111 CorrelationMode correlationMode,
01112 uint64_t time,
01113 uint64_t timeCentroid,
01114 uint64_t interval,
01115 uint64_t exposure,
01116 float* floatData,
01117 uint32_t integNum,
01118 uint32_t subintegNum);
01119
01125 Subintegration( vector<vector<uint32_t> > vv_numPolProduct,
01126 vector<vector<uint32_t> > vv_numSpectralPoint,
01127 vector<vector<uint32_t> > vv_numBin,
01128 vector<vector<Enum<NetSideband> > > vv_e_sideband,
01129 uint32_t numApc,
01130 vector<uint32_t> v_numSpectralWindow,
01131 uint32_t numBaseband,
01132 uint32_t numAnt,
01133 CorrelationMode correlationMode,
01134 uint64_t time,
01135 uint64_t timeCentroid,
01136 uint64_t interval,
01137 uint64_t exposure,
01138 float* floatData,
01139 uint32_t integNum,
01140 uint32_t subintegNum);
01141
01147 Subintegration( vector<vector<uint32_t> > vv_numPolProduct,
01148 vector<vector<uint32_t> > vv_numSpectralPoint,
01149 vector<vector<uint32_t> > vv_numBin,
01150 vector<vector<Enum<NetSideband> > > vv_e_sideband,
01151 uint32_t numApc,
01152 vector<uint32_t> v_numSpectralWindow,
01153 uint32_t numBaseband,
01154 uint32_t numAnt,
01155 CorrelationMode correlationMode,
01156 uint64_t time,
01157 uint64_t timeCentroid,
01158 uint64_t interval,
01159 uint64_t exposure,
01160 float* floatData,
01161 uint32_t* dataFlags,
01162 uint32_t integNum,
01163 uint32_t subintegNum);
01164
01165 private:
01166
01167
01168
01169
01170 };
01171
01172 }
01173
01174 #define _INTEGRATION_H
01175 #endif