From 160e2085d689294804008e3009a23ddda253c8b1 Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 27 Jan 2015 18:10:43 +0100 Subject: [PATCH] Cache n DCS time-bins to avoid large cpu overhead --- TRD/TRDbase/AliTRDcalibDB.cxx | 2 ++ TRD/TRDbase/AliTRDclusterizer.cxx | 34 +++++++++++++++++++++++-------- TRD/TRDbase/AliTRDclusterizer.h | 6 ++++-- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/TRD/TRDbase/AliTRDcalibDB.cxx b/TRD/TRDbase/AliTRDcalibDB.cxx index b2a9e738731..25b21dd4522 100644 --- a/TRD/TRDbase/AliTRDcalibDB.cxx +++ b/TRD/TRDbase/AliTRDcalibDB.cxx @@ -127,6 +127,8 @@ AliTRDcalibDB::AliTRDcalibDB() // TODO invalid calibration data to be used. // + fRun = AliCDBManager::Instance()->GetRun(); + for (Int_t i = 0; i < kCDBCacheSize; ++i) { fCDBCache[i] = 0; fCDBEntries[i] = 0; diff --git a/TRD/TRDbase/AliTRDclusterizer.cxx b/TRD/TRDbase/AliTRDclusterizer.cxx index 8b7b579c907..32baaa4b667 100644 --- a/TRD/TRDbase/AliTRDclusterizer.cxx +++ b/TRD/TRDbase/AliTRDclusterizer.cxx @@ -82,6 +82,8 @@ AliTRDclusterizer::AliTRDclusterizer(const AliTRDReconstructor *const rec) ,fVolid(0) ,fColMax(0) ,fTimeTotal(0) + ,fTimeBinsDCS(-999) + ,fRun(-1) ,fCalGainFactorROC(NULL) ,fCalGainFactorDetValue(0) ,fCalNoiseROC(NULL) @@ -142,6 +144,8 @@ AliTRDclusterizer::AliTRDclusterizer(const Text_t *name ,fVolid(0) ,fColMax(0) ,fTimeTotal(0) + ,fTimeBinsDCS(-999) + ,fRun(-1) ,fCalGainFactorROC(NULL) ,fCalGainFactorDetValue(0) ,fCalNoiseROC(NULL) @@ -195,6 +199,8 @@ AliTRDclusterizer::AliTRDclusterizer(const AliTRDclusterizer &c) ,fVolid(0) ,fColMax(0) ,fTimeTotal(0) + ,fTimeBinsDCS(-999) + ,fRun(-1) ,fCalGainFactorROC(NULL) ,fCalGainFactorDetValue(0) ,fCalNoiseROC(NULL) @@ -288,6 +294,8 @@ void AliTRDclusterizer::Copy(TObject &c) const ((AliTRDclusterizer &) c).fVolid = 0; ((AliTRDclusterizer &) c).fColMax = 0; ((AliTRDclusterizer &) c).fTimeTotal = 0; + ((AliTRDclusterizer &) c).fTimeBinsDCS = -999; + ((AliTRDclusterizer &) c).fRun = -1; ((AliTRDclusterizer &) c).fCalGainFactorROC = NULL; ((AliTRDclusterizer &) c).fCalGainFactorDetValue = 0; ((AliTRDclusterizer &) c).fCalNoiseROC = NULL; @@ -677,7 +685,6 @@ Bool_t AliTRDclusterizer::Raw2Clusters(AliRawReader *rawReader) // // Creates clusters from raw data // - return Raw2ClustersChamber(rawReader); } @@ -688,6 +695,18 @@ Bool_t AliTRDclusterizer::Raw2ClustersChamber(AliRawReader *rawReader) // // Creates clusters from raw data // + // if first call or run number was changed, update cached value ot timebinsDCS + AliTRDcalibDB* const calibration = AliTRDcalibDB::Instance(); + if (!calibration) { + AliFatal("No AliTRDcalibDB instance available\n"); + return kFALSE; + } + + if (fTimeBinsDCS==-999 || fRun!=(int)calibration->GetRun()) { + fRun = calibration->GetRun(); + fTimeBinsDCS = calibration->GetNumberOfTimeBinsDCS(); + AliInfoF("Set number of DCS time bins to %d for run %d",fTimeBinsDCS,fRun); + } // Create the digits manager if (!fDigitsManager){ @@ -859,25 +878,24 @@ Bool_t AliTRDclusterizer::MakeClusters(Int_t det) if(nrows != fIndexes->GetNrow()) AliDebug(1, Form("N rows missmatch in Digits for Det[%3d] :: Geom[%3d] RAW[%3d]", fDet, nrows, fIndexes->GetNrow())); // Check consistency between OCDB and raw data - Int_t nTimeOCDB = calibration->GetNumberOfTimeBinsDCS(); if(fReconstructor->IsHLT()){ - if((nTimeOCDB > -1) && (fTimeTotal != nTimeOCDB)){ + if((fTimeBinsDCS > -1) && (fTimeTotal != fTimeBinsDCS)){ AliWarning(Form("Number of timebins does not match OCDB value (RAW[%d] OCDB[%d]), using raw value" - ,fTimeTotal,nTimeOCDB)); + ,fTimeTotal,fTimeBinsDCS)); } }else{ - if(nTimeOCDB == -1){ + if(fTimeBinsDCS == -1){ AliDebug(1, "Undefined number of timebins in OCDB, using value from raw data."); if(!(fTimeTotal>0)){ AliError(Form("Number of timebins in raw data is negative, skipping chamber[%3d]!", fDet)); return kFALSE; } - }else if(nTimeOCDB == -2){ + }else if(fTimeBinsDCS == -2){ AliError("Mixed number of timebins in OCDB, no reconstruction of TRD data!"); return kFALSE; - }else if(fTimeTotal != nTimeOCDB){ + }else if(fTimeTotal != fTimeBinsDCS){ AliError(Form("Number of timebins in raw data does not match OCDB value (RAW[%d] OCDB[%d]), skipping chamber[%3d]!" - ,fTimeTotal,nTimeOCDB, fDet)); + ,fTimeTotal,fTimeBinsDCS, fDet)); return kFALSE; } } diff --git a/TRD/TRDbase/AliTRDclusterizer.h b/TRD/TRDbase/AliTRDclusterizer.h index 9b7950b9d37..6d8ebfc5b01 100644 --- a/TRD/TRDbase/AliTRDclusterizer.h +++ b/TRD/TRDbase/AliTRDclusterizer.h @@ -109,6 +109,7 @@ class AliTRDclusterizer : public TNamed static UChar_t GetStatus(Short_t &signal); Int_t GetAddedClusters() const {return fNoOfClusters;} Int_t GetNTimeBins() const {return fTimeTotal;} + Int_t GetNTimeBinsDCS() const {return fTimeBinsDCS;} Bool_t IsClustersOwner() const {return TestBit(kClOwner);} virtual void SetClustersOwner(Bool_t own=kTRUE) {SetBit(kClOwner, own); if(!own) {fRecPoints = 0x0; fNoOfClusters=0;} } @@ -164,6 +165,8 @@ protected: UShort_t fVolid; // Volume ID Int_t fColMax; // Number of Colums in one detector Int_t fTimeTotal; // Number of time bins + Int_t fTimeBinsDCS; // number or time bins from DCS (OCDB) + Int_t fRun; // last run processed (to update cached OCDB params if run changes) AliTRDCalROC *fCalGainFactorROC; // Calibration object with pad wise values for the gain factors Float_t fCalGainFactorDetValue; // Calibration value for chamber wise noise AliTRDCalROC *fCalNoiseROC; // Calibration object with pad wise values for the noise @@ -176,11 +179,10 @@ protected: Int_t fBaseline; // Baseline of the ADC values AliTRDrawStream *fRawStream; // Raw data streamer UInt_t fTrgFlags[AliTRDgeometry::kNsector]; // trigger flags - private: inline void CalcAdditionalInfo(const MaxStruct &Max, Short_t *const signals, Int_t &nPadCount); - ClassDef(AliTRDclusterizer,6) // TRD clusterfinder + ClassDef(AliTRDclusterizer,7) // TRD clusterfinder }; -- 2.43.5