]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONDigitCalibrator.cxx
o Add task for setting up the pid object in a analysis independent (ESD, AOD) way
[u/mrichter/AliRoot.git] / MUON / AliMUONDigitCalibrator.cxx
index 0566086a3539fdc0559ba4e9adcfe49bfc5cd028..aff3997a523f3fc3b534008ad584f59c61b2155e 100644 (file)
 
 #include "AliMUONDigitCalibrator.h"
 
+#include "AliCDBEntry.h"
+#include "AliCDBManager.h"
 #include "AliLog.h"
 #include "AliMUONCalibrationData.h"
+#include "AliMUONConstants.h"
 #include "AliMUONLogger.h"
 #include "AliMUONPadStatusMaker.h"
 #include "AliMUONPadStatusMapMaker.h"
@@ -64,6 +67,57 @@ const Int_t AliMUONDigitCalibrator::fgkGainConstantCapa(1);
 const Int_t AliMUONDigitCalibrator::fgkGain(2);
 const Int_t AliMUONDigitCalibrator::fgkInjectionGain(3);
 
+//_____________________________________________________________________________
+AliMUONDigitCalibrator::AliMUONDigitCalibrator(Int_t runNumber, const char* calibMode)
+: TObject(),
+fLogger(new AliMUONLogger(20000)),
+fStatusMaker(0x0),
+fStatusMapMaker(0x0),
+fPedestals(0x0),
+fGains(0x0),
+fApplyGains(0),
+fCapacitances(0x0),
+fNumberOfBadPads(0),
+fNumberOfPads(0),
+fChargeSigmaCut(0),
+fMask(0)
+{
+  /// ctor
+  
+  AliMUONRecoParam* recoParam(0x0);
+  
+  AliCDBEntry* e = AliCDBManager::Instance()->Get("MUON/Calib/RecoParam",runNumber);
+  if (e)
+  {
+    TObject* o = e->GetObject();
+    if ( o->IsA() == TObjArray::Class() )
+    {
+      TObjArray* a = static_cast<TObjArray*>(o);
+      TIter next(a);
+      AliMUONRecoParam* p;
+      while ( ( p = static_cast<AliMUONRecoParam*>(next()) ))
+      {
+        if ( p->IsDefault()) recoParam = p;
+      }
+    }
+    else
+    {
+      recoParam = static_cast<AliMUONRecoParam*>(o);
+    }
+  }
+  if (!recoParam)
+  {
+    AliError("Cannot get the recoParam. Failing");
+    return;
+  }
+  
+  // OK. Now get all we need and work...
+  
+  AliMUONCalibrationData calib(runNumber);
+  
+  Ctor(calibMode,calib,recoParam,kFALSE);
+}
+
 //_____________________________________________________________________________
 AliMUONDigitCalibrator::AliMUONDigitCalibrator(const AliMUONCalibrationData& calib,
                                                const AliMUONRecoParam* recoParams,
@@ -111,7 +165,8 @@ fMask(0)
 void
 AliMUONDigitCalibrator::Ctor(const char* calibMode,
                              const AliMUONCalibrationData& calib,
-                             const AliMUONRecoParam* recoParams)
+                             const AliMUONRecoParam* recoParams,
+                             Bool_t deferredInitialization)
 {
   /// designated ctor
   
@@ -175,8 +230,6 @@ AliMUONDigitCalibrator::Ctor(const char* calibMode,
     fLogger->Log(Form("SigmaCut=%e",fChargeSigmaCut));
   }
   
-  Bool_t deferredInitialization = kTRUE;
-  
   fStatusMapMaker = new AliMUONPadStatusMapMaker(*fStatusMaker,fMask,deferredInitialization);
   
   fPedestals = calib.Pedestals();
@@ -311,11 +364,11 @@ AliMUONDigitCalibrator::CalibrateDigit(Int_t detElemId, Int_t manuId, Int_t manu
   
        // Gain (mV/fC) = 1/(a0*capa) with a0~1.25 and capa~0.2 
   Float_t charge(0);
-  Float_t capa(0.2); // capa = 0.2 and a0 = 1.25
-       Float_t a0(1.25);  // is equivalent to gain = 4 mV/fC
-       Float_t a1(0);
-       Float_t adc2mv(0.61); // 1 ADC channel = 0.61 mV
-       Float_t injGain(4); // By default the gain is set to 4 mV/fC
+  Float_t capa(AliMUONConstants::DefaultCapa()); // capa = 0.2 and a0 = 1.25
+  Float_t a0(AliMUONConstants::DefaultA0());  // is equivalent to gain = 4 mV/fC
+  Float_t a1(0);
+  Float_t adc2mv(AliMUONConstants::DefaultADC2MV()); // 1 ADC channel = 0.61 mV
+  Float_t injGain(4); // By default the gain is set to 4 mV/fC
   //
   // Note that the ChargeMax (for one pad) is roughly 4096 * 0.61 mV/channel / 4 mV/fC = 625 fC