From: phille Date: Fri, 2 Feb 2007 11:17:04 +0000 (+0000) Subject: A new structure AliHLTPHOSValidCellDataStruct.h was added in order to improve X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=commitdiff_plain;h=2bcb5a06570d79196825d359a2049c776bd7c01f A new structure AliHLTPHOSValidCellDataStruct.h was added in order to improve the online processing performance. Instead of looping trough all 35480 channels the raw anlyzer algorithm only has to loop the data in an array of ValidCellDataStructs. This, combined with a counter counting the number of channels containing valid data drastically improves performance because the arrays containing analyzed data dont have to be resetted. The AliHLTPHOSRawAnalyzer class was modified to incorporate this new feature. --- diff --git a/HLT/PHOS/AliHLTPHOSLinkDef.h b/HLT/PHOS/AliHLTPHOSLinkDef.h index 1cdd2f142fa..88bec6cbf6a 100644 --- a/HLT/PHOS/AliHLTPHOSLinkDef.h +++ b/HLT/PHOS/AliHLTPHOSLinkDef.h @@ -12,7 +12,7 @@ #pragma link C++ class AliHLTPHOSPulseGenerator+; #pragma link C++ class AliHLTPHOSEmcCalibData+; #pragma link C++ class AliHLTPHOSDefinitions+; -#pragma link C++ class AliHLTPHOSValiCellDataStruct+; +//#pragma link C++ class AliHLTPHOSValidCellDataStruct+; //#pragma link C++ class AliHLTPHOSRawAnalyzerComponent+; //#pragma link C++ class AliHLTPHOSRawAnalyzerPeakFinderComponent+; //#pragma link C++ class AliHLTPHOSRawAnalyzerCrudeComponent+; diff --git a/HLT/PHOS/AliHLTPHOSModuleCellEnergyDataStruct.h b/HLT/PHOS/AliHLTPHOSModuleCellEnergyDataStruct.h index a45ff395a5b..d5281505972 100644 --- a/HLT/PHOS/AliHLTPHOSModuleCellEnergyDataStruct.h +++ b/HLT/PHOS/AliHLTPHOSModuleCellEnergyDataStruct.h @@ -2,12 +2,16 @@ #define ALIHLTPHOSNODULECELLENERGYDATASTRUCT_H #include "AliHLTPHOSCommonDefs.h" +#include "AliHLTPHOSValiCellDataStruct.h" struct AliHLTPHOSModuleCellEnergyDataStruct { AliHLTUInt8_t fModuleID; AliHLTUInt16_t fCnt; - AliHLTUInt16_t fValidData[N_ROWS_MOD*N_COLUMNS_MOD*N_GAINS]; + // AliHLTUInt16_t fValidData[N_ROWS_MOD*N_COLUMNS_MOD*N_GAINS]; + + AliHLTPHOSValidCellDataStruct fValidData[N_RCUS]; + unsigned long cellEnergies[N_ROWS_MOD][N_COLUMNS_MOD][N_GAINS]; }; diff --git a/HLT/PHOS/AliHLTPHOSRawAnalyzer.cxx b/HLT/PHOS/AliHLTPHOSRawAnalyzer.cxx index fccd6f87c41..e5e361fc52b 100644 --- a/HLT/PHOS/AliHLTPHOSRawAnalyzer.cxx +++ b/HLT/PHOS/AliHLTPHOSRawAnalyzer.cxx @@ -23,7 +23,6 @@ using std::endl; AliHLTPHOSRawAnalyzer:: AliHLTPHOSRawAnalyzer():fFloatDataPtr(0), fSampleFrequency(10), fTau(2), fDTof(99999), fDAmpl(99999), n(99999) { - // cout <<"AliHLTPHOSRawAnalyzer Base class::Creating a new AliHLTPHOSRawAnalyzer() object"<fRcuX = fRcuX; outPtr->fRcuZ = fRcuZ; outPtr->fModuleID = fModuleID; - outPtr->fCnt = 0; + + // cout << "analyzing evnt: " << fEventCount << "Module:" << fModuleID << "Rcu(" << fRcuZ <<"," << fRcuX << ")" << endl; + + // outPtr->fCnt = 0; + tmpChannelCnt = 0; + // outPtr->fValidData.fRcuX = fRcuX; + // outPtr->fValidData.fRcuZ = fRcuZ; + while(fPHOSRawStream->Next()) { @@ -160,28 +172,47 @@ int AliHLTPHOSRawAnalyzerComponent::DoEvent( const AliHLTComponentEventData& evt analyzerPtr->SetData(fTmpChannelData); // cout << "sampleCnt = " << sampleCnt << endl; analyzerPtr->Evaluate(0, sampleCnt); - fMaxValues[tmpMod][tmpRow][tmpCol][tmpGain] = analyzerPtr->GetEnergy(); + // fMaxValues[tmpMod][tmpRow][tmpCol][tmpGain] = analyzerPtr->GetEnergy(); // outPtr->fValidData[fCnt] = ; - outPtr->fCnt ++; + // outPtr->fCnt ++; //fCnt; - outPtr->fCellEnergies[tmpRow - fRcuRowOffeset][tmpCol - fRcuColOffeset][tmpGain] = fMaxValues[tmpMod][tmpRow][tmpCol][tmpGain]; + // outPtr->fCellEnergies[tmpRow - fRcuRowOffeset][tmpCol - fRcuColOffeset][tmpGain] = fMaxValues[tmpMod][tmpRow][tmpCol][tmpGain]; + // outPtr->fCellEnergies[tmpRow][tmpCol][tmpGain] = fMaxValues[tmpMod][tmpRow][tmpCol][tmpGain]; + outPtr->fCellEnergies[tmpRow][tmpCol][tmpGain] = analyzerPtr->GetEnergy(); sampleCnt = 0; - ResetDataPtr(); + + outPtr->fValidData[tmpChannelCnt].fGain = tmpGain; + outPtr->fValidData[tmpChannelCnt].fRow = tmpRow; + outPtr->fValidData[tmpChannelCnt].fCol = tmpCol; + + tmpChannelCnt ++; + + // outPtr->fCnt ++; + // ResetDataPtr(); } - tmpMod = fPHOSRawStream->GetModule(); - tmpRow = fPHOSRawStream->GetRow(); - tmpCol = fPHOSRawStream->GetColumn(); + + + tmpMod = fPHOSRawStream->GetModule() ; + tmpRow = fPHOSRawStream->GetRow() - fRcuRowOffeset; + tmpCol = fPHOSRawStream->GetColumn() - fRcuColOffeset; tmpGain = fPHOSRawStream->IsLowGain(); + // outPtr->fValidData.fRow = tmpRow; + // outPtr->fValidData).fCol = tmpCol; + + processedChannels ++; } fTmpChannelData[fPHOSRawStream->GetTime()] = fPHOSRawStream->GetSignal(); sampleCnt ++; } - + + + outPtr->fCnt = tmpChannelCnt; + // cout << "outPtr->fCnt = " << outPtr->fCnt << endl; AliHLTComponentBlockData bd; FillBlockData( bd ); diff --git a/HLT/PHOS/AliHLTPHOSRawAnalyzerComponent.h b/HLT/PHOS/AliHLTPHOSRawAnalyzerComponent.h index dbacfea7457..179b9d9bb60 100644 --- a/HLT/PHOS/AliHLTPHOSRawAnalyzerComponent.h +++ b/HLT/PHOS/AliHLTPHOSRawAnalyzerComponent.h @@ -10,6 +10,9 @@ #include "AliCaloRawStream.h" #include "AliHLTPHOSDefinitions.h" +class AliHLTPHOSRcuCellEnergyDataStruct; + + class AliHLTPHOSRawAnalyzerComponent: public AliHLTProcessor { public: @@ -42,7 +45,7 @@ class AliHLTPHOSRawAnalyzerComponent: public AliHLTProcessor void ResetDataPtr(); private: - int fEventCount; + static int fEventCount; AliHLTUInt32_t fEquippmentID; AliHLTUInt16_t fRcuX; AliHLTUInt16_t fRcuZ; @@ -53,6 +56,7 @@ class AliHLTPHOSRawAnalyzerComponent: public AliHLTProcessor Double_t fMaxValues[5][64][56][2]; AliCaloRawStream *fPHOSRawStream; AliRawReaderMemory *fRawMemoryReader; + AliHLTPHOSRcuCellEnergyDataStruct* outPtr; static const AliHLTComponentDataType inputDataTypes[]; }; #endif diff --git a/HLT/PHOS/AliHLTPHOSRcuCellEnergyDataStruct.h b/HLT/PHOS/AliHLTPHOSRcuCellEnergyDataStruct.h index 6adb562271f..04abc946d02 100644 --- a/HLT/PHOS/AliHLTPHOSRcuCellEnergyDataStruct.h +++ b/HLT/PHOS/AliHLTPHOSRcuCellEnergyDataStruct.h @@ -10,8 +10,8 @@ struct AliHLTPHOSRcuCellEnergyDataStruct AliHLTUInt16_t fRcuZ; AliHLTUInt16_t fModuleID; AliHLTUInt16_t fCnt; - AliHLTPHOSValiCellDataStruct fValidData; - Double_t fCellEnergies[ N_ROWS_RCU][ N_COLUMNS_RCU][N_GAINS]; + AliHLTPHOSValidCellDataStruct fValidData[N_ROWS_RCU*N_COLUMNS_RCU*N_GAINS]; + Double_t fCellEnergies[N_ROWS_RCU][N_COLUMNS_RCU][N_GAINS]; }; diff --git a/HLT/PHOS/AliHLTPHOSValidCellDataStruct.h b/HLT/PHOS/AliHLTPHOSValidCellDataStruct.h index d4a90acac74..8f3c5fd0c4d 100644 --- a/HLT/PHOS/AliHLTPHOSValidCellDataStruct.h +++ b/HLT/PHOS/AliHLTPHOSValidCellDataStruct.h @@ -5,11 +5,11 @@ //#include "AliHLTDataTypes.h" //#include "Rtypes.h" -struct AliHLTPHOSValiCellDataStruct +struct AliHLTPHOSValidCellDataStruct { - AliHLTUInt16_t fRcuX; - AliHLTUInt16_t fRcuZ; - AliHLTUInt16_t fModuleID; + // AliHLTUInt16_t fRcuX; + // AliHLTUInt16_t fRcuZ; + // AliHLTUInt16_t fModuleID; AliHLTUInt16_t fRow; AliHLTUInt16_t fCol; AliHLTUInt16_t fGain;