Cache n DCS time-bins to avoid large cpu overhead
authorshahoian <ruben.shahoyan@cern.ch>
Tue, 27 Jan 2015 17:10:43 +0000 (18:10 +0100)
committershahoian <ruben.shahoyan@cern.ch>
Tue, 27 Jan 2015 17:58:16 +0000 (18:58 +0100)
TRD/TRDbase/AliTRDcalibDB.cxx
TRD/TRDbase/AliTRDclusterizer.cxx
TRD/TRDbase/AliTRDclusterizer.h

index b2a9e73..25b21dd 100644 (file)
@@ -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;
index 8b7b579..32baaa4 100644 (file)
@@ -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;
     }
   }
index 9b7950b..6d8ebfc 100644 (file)
@@ -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
 
 };