Modified treatment of FEE filter type determination (Frederick+Hans) and enable onlin...
authorcblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 23 Apr 2012 08:46:11 +0000 (08:46 +0000)
committercblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 23 Apr 2012 08:46:11 +0000 (08:46 +0000)
TRD/AliTRDcalibDB.cxx
TRD/AliTRDcalibDB.h
TRD/AliTRDdigitizer.cxx

index f2ad28d..32ea602 100644 (file)
@@ -987,44 +987,7 @@ void AliTRDcalibDB::GetFilterType(TString &filterType)
   // Returns the filter type
   //
 
-  const TObjArray *dcsArr = dynamic_cast<const TObjArray *>(GetCachedCDBObject(kIDDCS));
-  if(!dcsArr){
-    filterType = "";
-    return;
-  }
-
-  Int_t esor   = 0; // Take SOR
-  Int_t calver = 0; // Check CalDCS version
-  if (!strcmp(dcsArr->At(0)->ClassName(),"AliTRDCalDCS"))   calver = 1;
-  if (!strcmp(dcsArr->At(0)->ClassName(),"AliTRDCalDCSv2")) calver = 2;
-
-  if      (calver == 1) {
-
-    // DCS object
-    const AliTRDCalDCS *calDCS = dynamic_cast<const AliTRDCalDCS *>(dcsArr->At(esor));
-    if(!calDCS){
-      filterType = "";
-      return;
-    } 
-    filterType = calDCS->GetGlobalFilterType();
-
-  } 
-  else if (calver == 2) {
-
-    // DCSv2 object
-    const AliTRDCalDCSv2 *calDCSv2 = dynamic_cast<const AliTRDCalDCSv2 *>(dcsArr->At(esor));
-    if(!calDCSv2){
-      filterType = "";
-      return;
-    } 
-    filterType = calDCSv2->GetGlobalFilterType();
-
-  } 
-  else {
-
-    AliError("NO DCS/DCSv2 OCDB entry found!");
-
-  }
+  GetDCSConfigParOption(kFltrSet, 0, filterType);
 
 }
 
@@ -1209,20 +1172,76 @@ void AliTRDcalibDB::GetGlobalConfigurationVersion(TString &version)
 }
 
 //_____________________________________________________________________________
-Bool_t AliTRDcalibDB::HasOnlineFilterPedestal()
+void AliTRDcalibDB::GetDCSConfigParOption(Int_t cfgType, Int_t option, TString &cfgo)
 {
   //
-  // Checks whether pedestal filter was applied online
+  // Get a configuration (see enum in header file) or the options of a configuration
+  // option == 0 returns the configuration itself
+  // option >  0 returns the optional parameter Nr. (option) of the configuration (cfgType)
   //
 
-  TString cname;
+  // define the delimiters
+  TString cdelim = "_";
+  TString odelim = "-";
 
-  // Temporary: Get the filter config from the configuration name
+  // get the full configuration name
+  TString cname;
   GetGlobalConfiguration(cname);
-  TString filterconfig = cname(cname.First("_") + 1, cname.First("-") - cname.First("_") - 1);
+  TObjArray *carr = cname.Tokenize(cdelim);
+  Int_t nconfig = carr->GetEntries();
+
+  // protect
+  if (nconfig == 0) {
+    AliError("Bad DCS configuration name!");
+    cfgo = "";
+    return;
+  } else if ((nconfig-1) < cfgType) {
+    AliError("Not enough DCS configuration parameters!");
+    cfgo = "";
+    return;
+  }
+
+  TString fullcfg = ((TObjString*)carr->At(cfgType))->GetString();
+
+  if (fullcfg.Contains(odelim)) {
 
-  // TString filterconfig;
-  //GetFilterType(filterconfig);
+    TObjArray *oarr = fullcfg.Tokenize(odelim);
+    Int_t noptions = oarr->GetEntries();
+
+    // protect
+    if ((noptions-1) < option) {
+      AliError("Not enough DCS configuration options defined!");
+      cfgo = "";
+      return;
+    }
+
+    cfgo = ((TObjString*)oarr->At(option))->GetString();
+    return;
+
+  }
+  else {
+
+    if (option != 0) {
+      AliError("Not enough DCS configuration options defined!");
+      cfgo = "";
+      return;
+    }
+    cfgo = fullcfg;
+    return;
+
+  }
+
+}
+
+//_____________________________________________________________________________
+Bool_t AliTRDcalibDB::HasOnlineFilterPedestal()
+{
+  //
+  // Checks whether pedestal filter was applied online
+  //
+
+  TString filterconfig;
+  GetFilterType(filterconfig);
 
   return filterconfig.Contains("p");
 
@@ -1235,14 +1254,8 @@ Bool_t AliTRDcalibDB::HasOnlineFilterGain()
   // Checks whether online gain filter was applied
   //
 
-  TString cname;
-
-  // Temporary: Get the filter config from the configuration name
-  GetGlobalConfiguration(cname);
-  TString filterconfig = cname(cname.First("_") + 1, cname.First("-") - cname.First("_") - 1);
-
-  //TString filterconfig;
-  //GetFilterType(filterconfig);
+  TString filterconfig;
+  GetFilterType(filterconfig);
 
   return filterconfig.Contains("g");
 
@@ -1255,14 +1268,8 @@ Bool_t AliTRDcalibDB::HasOnlineTailCancellation()
   // Checks whether online tail cancellation was applied
   //
 
-  TString cname;
-
-  // Temporary: Get the filter config from the configuration name
-  GetGlobalConfiguration(cname);
-  TString filterconfig = cname(cname.First("_") + 1, cname.First("-") - cname.First("_") - 1);
-
-  //TString filterconfig;
-  //GetFilterType(filterconfig);
+  TString filterconfig;
+  GetFilterType(filterconfig);
 
   return filterconfig.Contains("t");
 
index ba1a40d..a3d440c 100644 (file)
@@ -48,6 +48,13 @@ class AliTRDcalibDB : public TObject {
        , kNsector =  18
        , kNdet    = 540 };
   
+  enum { kFltrSet = 1
+       , kReadout
+       , kTimebin
+       , kTrkMode
+       , kTrigSet
+       , kAddOpti };
+
   static AliTRDcalibDB               *Instance();
   static void                         Terminate();
 
@@ -90,6 +97,7 @@ class AliTRDcalibDB : public TObject {
   void                                GetFilterType(TString &filterType);
   void                                GetGlobalConfiguration(TString &config);
   void                                GetGlobalConfigurationVersion(TString &version);
+  void                                GetDCSConfigParOption(Int_t cfgType, Int_t option, TString &cfgo);
 
   Int_t                               GetOnlineGainTableID();
 
index fc53d10..e29be55 100644 (file)
@@ -1235,9 +1235,10 @@ Bool_t AliTRDdigitizer::Signal2ADC(Int_t det, AliTRDarraySignal *signals)
   }
 
   // The gain factor calibration objects
-  const AliTRDCalDet *calGainFactorDet      = calibration->GetGainFactorDet();  
-  AliTRDCalROC       *calGainFactorROC      = 0x0;
-  Float_t             calGainFactorDetValue = 0.0;
+  const AliTRDCalDet          *calGainFactorDet      = calibration->GetGainFactorDet();  
+  AliTRDCalROC                *calGainFactorROC      = 0x0;
+  Float_t                      calGainFactorDetValue = 0.0;
+  AliTRDCalOnlineGainTableROC *onlineGainFactorROC   = 0x0;
 
   AliTRDarrayADC     *digits = 0x0;
 
@@ -1271,8 +1272,9 @@ Bool_t AliTRDdigitizer::Signal2ADC(Int_t det, AliTRDarraySignal *signals)
   calGainFactorDetValue = calGainFactorDet->GetValue(det);
 
   // Get the online gain factors
-  //AliTRDCalOnlineGainTableROC *onlineGainFactorROC 
-  //  = calibration->GetOnlineGainTableROC(det);
+  if (calibration->HasOnlineFilterGain()) {
+    onlineGainFactorROC = calibration->GetOnlineGainTableROC(det);
+  }
 
   // Create the digits for this chamber
   for (row  = 0; row  <  nRowMax; row++ ) {
@@ -1286,12 +1288,17 @@ Bool_t AliTRDdigitizer::Signal2ADC(Int_t det, AliTRDarraySignal *signals)
       }
 
       // The gain factors
-      Float_t padgain = calGainFactorDetValue 
-                      * calGainFactorROC->GetValue(col,row);
+      Float_t padgain    = calGainFactorDetValue 
+                         * calGainFactorROC->GetValue(col,row);
       if (padgain <= 0) {
         AliError(Form("Not a valid gain %f, %d %d %d",padgain,det,col,row));
       }
 
+      // The online gain correction
+      Float_t onlinegain = onlineGainFactorROC 
+                         ? onlineGainFactorROC->GetGainCorrectionFactor(row,col) 
+                         : 1.0;
+
       for (time = 0; time < nTimeTotal; time++) {
 
        // Get the signal amplitude
@@ -1300,6 +1307,7 @@ Bool_t AliTRDdigitizer::Signal2ADC(Int_t det, AliTRDarraySignal *signals)
         signalAmp *= coupling;
        // Gain factors
        signalAmp *= padgain;
+        signalAmp /= onlinegain;
 
         // Add the noise, starting from minus ADC baseline in electrons
         signalAmp  = TMath::Max((Double_t) gRandom->Gaus(signalAmp,simParam->GetNoise())
@@ -1426,6 +1434,7 @@ Bool_t AliTRDdigitizer::Digits2SDigits(AliTRDdigitsManager * const manDig
   //                      / convert;
 
   // The gainfactor calibration objects
+  // Not used since these digits are supposed to be from real raw data
   //const AliTRDCalDet *calGainFactorDet      = calibration->GetGainFactorDet();  
   //AliTRDCalROC       *calGainFactorROC      = 0;
   //Float_t             calGainFactorDetValue = 0.0;