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