casa
$Rev:20696$
|
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,// /bb/spw 00121 vector<vector<uint32_t> > vv_numAutoPolProduct, // /bb/spw 00122 vector<vector<uint32_t> > vv_numSpectralPoint, // /bb/spw 00123 vector<vector<uint32_t> > vv_numBin, // /bb/spw 00124 vector<vector<Enum<NetSideband> > > vv_e_sideband, // /bb/spw 00125 uint32_t numApc, 00126 vector<uint32_t> v_numSpectralWindow, // /bb 00127 uint32_t numBaseband, 00128 uint32_t numAnt, 00129 CorrelationMode correlationMode); 00130 00157 DataStructure( vector<vector<uint32_t> > vv_numAutoPolProduct, // /bb/spw 00158 vector<vector<uint32_t> > vv_numSpectralPoint, // /bb/spw 00159 vector<vector<uint32_t> > vv_numBin, // /bb/spw 00160 vector<vector<Enum<NetSideband> > > vv_e_sideband, // /bb/spw 00161 uint32_t numApc, 00162 vector<uint32_t> v_numSpectralWindow, // /bb 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_;// /bb/spw 00327 vector<vector<uint32_t> > vv_numAutoPolProduct_; // /bb/spw 00328 vector<vector<uint32_t> > vv_numSpectralPoint_; // /bb/spw 00329 vector<vector<uint32_t> > vv_numBin_; // /bb/spw 00330 vector<vector<Enum<NetSideband> > > vv_e_sideband_; // /bb/spw 00331 uint32_t numApc_; 00332 vector<uint32_t> v_numSpectralWindow_; // /bb 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); // TODO 00445 00449 DataDump( vector<vector<uint32_t> > vv_numPolProduct, // /bb/spw 00450 vector<vector<uint32_t> > vv_numSpectralPoint, // /bb/spw 00451 vector<vector<uint32_t> > vv_numBin, // /bb/spw 00452 vector<vector<Enum<NetSideband> > > vv_e_sideband, // /bb/spw 00453 uint32_t numApc, 00454 vector<uint32_t> v_numSpectralWindow, // /bb 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, // /bb/spw 00468 vector<vector<uint32_t> > vv_numSpectralPoint, // /bb/spw 00469 vector<vector<uint32_t> > vv_numBin, // /bb/spw 00470 vector<vector<Enum<NetSideband> > > vv_e_sideband, // /bb/spw 00471 uint32_t numApc, 00472 vector<uint32_t> v_numSpectralWindow, // /bb 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,// /bb/spw 00486 vector<vector<uint32_t> > vv_numAutoPolProduct, // /bb/spw 00487 vector<vector<uint32_t> > vv_numSpectralPoint, // /bb/spw 00488 vector<vector<uint32_t> > vv_numBin, // /bb/spw 00489 vector<vector<Enum<NetSideband> > > vv_e_sideband, // /bb/spw 00490 uint32_t numApc, 00491 vector<uint32_t> v_numSpectralWindow, // /bb 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 // Accessor 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 // /nant/nbb/nspw/nbin/napc/nsp/npol 00723 // | | | | | | | 00724 // | | | | | | corr or uncorr (enum) 00725 // | | | | | scId (global keys) 00726 // | | | | spwNames (keys in baseband context) 00727 // | | | basebandNames (global keys) 00728 // | | antNames (global keys) 00729 // | configDescId (global key) 00730 00732 00761 DataDump operator - (const DataDump & B); // shape unchanged 00762 00787 DataDump operator -= (const DataDump &); // shape unchanged 00788 00816 DataDump operator + (const DataDump &); // shape unchanged 00817 00818 00847 DataDump operator += (const DataDump &); 00848 00849 DataDump operator * (const float &); 00850 DataDump operator / (const float &); 00851 /* DataDump operator * (const DataProfile &); */ 00852 /* DataDump operator / (const DataProfile &); */ 00853 /* DataProfile operator *= (const DataProfile &); */ 00854 /* Dataprofile operator /= (const DataProfile &); */ 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 //DataDump binSequence(vector<const DataDump &>); see Subscan 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_; // /bb/spw 00900 vector<float> v_scaleFactor_; // /ndd linearized version of vv_scaleFactor_ for fast access 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,// /bb/spw 00924 vector<vector<uint32_t> > vv_numAutoPolProduct, // /bb/spw 00925 vector<vector<uint32_t> > vv_numSpectralPoint, // /bb/spw 00926 vector<vector<uint32_t> > vv_numBin, // /bb/spw 00927 vector<vector<Enum<NetSideband> > > vv_e_sideband, // /bb/spw 00928 uint32_t numApc, 00929 vector<uint32_t> v_numSpectralWindow, // /bb 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, // /bb/spw 00959 vector<vector<uint32_t> > vv_numSpectralPoint, // /bb/spw 00960 vector<vector<uint32_t> > vv_numBin, // /bb/spw 00961 vector<vector<Enum<NetSideband> > > vv_e_sideband, // /bb/spw 00962 uint32_t numApc, 00963 vector<uint32_t> v_numSpectralWindow, // /bb 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, // /bb/spw 00976 vector<vector<uint32_t> > vv_numSpectralPoint, // /bb/spw 00977 vector<vector<uint32_t> > vv_numBin, // /bb/spw 00978 vector<vector<Enum<NetSideband> > > vv_e_sideband, // /bb/spw 00979 uint32_t numApc, 00980 vector<uint32_t> v_numSpectralWindow, // /bb 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, // TODO 01022 uint32_t integNum); 01023 ~Integration(); 01024 01025 Integration( const Integration & a); 01026 01027 01028 private: 01029 /* uint32_t integrationNum_; */ 01030 /* uint32_t subintegrationNum_; */ 01031 }; 01032 01033 /* uint32_t Integration::subintegrationNum_=0; */ 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, // /bb/spw 01061 vector<vector<uint32_t> > vv_numBin, // /bb/spw 01062 vector<vector<Enum<NetSideband> > > vv_e_sideband, // /bb/spw 01063 vector<uint32_t> v_numSpectralWindow, // /bb 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, // /bb/spw 01082 vector<vector<uint32_t> > vv_numBin, // /bb/spw 01083 vector<vector<Enum<NetSideband> > > vv_e_sideband, // /bb/spw 01084 vector<uint32_t> v_numSpectralWindow, // /bb 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, // TODO 01094 uint32_t integNum, 01095 uint32_t subintegNum); 01096 01104 Subintegration( vector<vector<uint32_t> > vv_numPolProduct, // /bb/spw 01105 vector<vector<uint32_t> > vv_numBin, // /bb/spw 01106 vector<vector<Enum<NetSideband> > > vv_e_sideband, // /bb/spw 01107 uint32_t numApc, 01108 vector<uint32_t> v_numSpectralWindow, // /bb 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, // /bb/spw 01126 vector<vector<uint32_t> > vv_numSpectralPoint, // /bb/spw 01127 vector<vector<uint32_t> > vv_numBin, // /bb/spw 01128 vector<vector<Enum<NetSideband> > > vv_e_sideband, // /bb/spw 01129 uint32_t numApc, 01130 vector<uint32_t> v_numSpectralWindow, // /bb 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, // /bb/spw 01148 vector<vector<uint32_t> > vv_numSpectralPoint, // /bb/spw 01149 vector<vector<uint32_t> > vv_numBin, // /bb/spw 01150 vector<vector<Enum<NetSideband> > > vv_e_sideband, // /bb/spw 01151 uint32_t numApc, 01152 vector<uint32_t> v_numSpectralWindow, // /bb 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, // TODO 01162 uint32_t integNum, 01163 uint32_t subintegNum); 01164 01165 private: 01166 01167 /* uint32_t integrationNum_; */ 01168 /* uint32_t subintegrationNum_; */ 01169 01170 }; 01171 01172 } 01173 01174 #define _INTEGRATION_H 01175 #endif