Changed the handled objects from per-channel to per-manu, in order to speed up
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 2 Mar 2006 16:48:18 +0000 (16:48 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 2 Mar 2006 16:48:18 +0000 (16:48 +0000)
the whole process. Also added the handling of dead channels
(Laurent)

MUON/AliMUONCalibrationData.cxx
MUON/AliMUONCalibrationData.h

index 38d1c71..0fcb558 100644 (file)
@@ -20,9 +20,9 @@
 #include "AliCDBEntry.h"
 #include "AliCDBManager.h"
 #include "AliCDBStorage.h"
-#include "AliMUONCalibParam.h"
 #include "AliLog.h"
-#include "AliMUONV3DStore.h"
+#include "AliMUONV2DStore.h"
+#include "AliMUONVCalibParam.h"
 #include "Riostream.h"
 
 ClassImp(AliMUONCalibrationData)
@@ -34,12 +34,22 @@ AliMUONCalibrationData::AliMUONCalibrationData(Int_t runNumber,
 fIsValid(kTRUE),
 fRunNumber(runNumber), 
 fGains(0x0), 
-fPedestals(0x0)
+fPedestals(0x0),
+fDeadChannels(0x0)
 {
+  //
+  // Default ctor.
+  // If deferredInitialization is false, we read *all* calibrations
+  // at once.
+  // So when using this class to access only one kind of calibrations (e.g.
+  // only pedestals), you should put deferredInitialization to kTRUE, which
+  // will instruct this object to fetch the data only when neeeded.
+  //
   if ( deferredInitialization == kFALSE )
   {
     Gains();
     Pedestals();
+    DeadChannels();
   }
 }
 
@@ -47,14 +57,62 @@ fPedestals(0x0)
 //_____________________________________________________________________________
 AliMUONCalibrationData::~AliMUONCalibrationData()
 {
+  //
+  // dtor. Note that we're the owner of our pointers.
+  //
   delete fPedestals;
   delete fGains;
+  delete fDeadChannels;
+}
+
+
+//_____________________________________________________________________________
+AliMUONVCalibParam*
+AliMUONCalibrationData::DeadChannel(Int_t detElemId, Int_t manuId) const
+{
+  //
+  // Return the calibration for a given (detElemId, manuId) pair
+  // Note that for DeadChannel, it's "legal" to return 0x0 (e.g. if a manu
+  // is perfect, we might simply forget it in the store).
+  //
+  return
+  static_cast<AliMUONVCalibParam*>(DeadChannels()->Get(detElemId,manuId));
+}
+
+//_____________________________________________________________________________
+AliMUONV2DStore*
+AliMUONCalibrationData::DeadChannels() const
+{
+  //
+  // Create (if needed) and return the internal store for DeadChannels.
+  //
+  if (!fDeadChannels)
+  {
+    AliCDBEntry* entry = GetEntry("MUON/Calib/DeadChannels");
+    if (entry)
+    {
+      fDeadChannels = dynamic_cast<AliMUONV2DStore*>(entry->GetObject());
+      if (!fDeadChannels)
+      {
+        AliError("fDeadChannels not of the expected type !!!");
+      }
+    }
+    else
+    {
+      AliError("Could not get dead channels !");
+    }
+  }
+  return fDeadChannels;
 }
 
 //_____________________________________________________________________________
 AliCDBEntry*
 AliMUONCalibrationData::GetEntry(const char* path) const
 {
+  //
+  // Access the CDB for a given path (e.g. MUON/Calib/Pedestals),
+  // and return the corresponding CDBEntry.
+  //
   AliInfo(Form("Fetching %s from Condition DataBase for run %d",path,fRunNumber));
   
   AliCDBManager* man = AliCDBManager::Instance();
@@ -72,30 +130,37 @@ AliMUONCalibrationData::GetEntry(const char* path) const
 }
 
 //_____________________________________________________________________________
-AliMUONCalibParam*
-AliMUONCalibrationData::Gain(Int_t detElemId, 
-                             Int_t manuId, Int_t manuChannel) const
+AliMUONVCalibParam*
+AliMUONCalibrationData::Gain(Int_t detElemId, Int_t manuId) const
 {
-  AliMUONCalibParam* gain = 
-  static_cast<AliMUONCalibParam*>(Gains()->Get(detElemId,manuId,manuChannel));
+  //
+  // Return the gains for a given (detElemId, manuId) pair
+  // Note that, unlike the DeadChannel case, if the result is 0x0, that's an
+  // error (meaning that we should get gains for all channels).
+  //
+  AliMUONVCalibParam* gain = 
+    static_cast<AliMUONVCalibParam*>(Gains()->Get(detElemId,manuId));
   if (!gain)
   {
-    AliError(Form("Could not get gain for detElemId=%d manuId=%d "
-                  "manuChannel=%d",detElemId,manuId,manuChannel));
+    AliError(Form("Could not get gain for detElemId=%d manuId=%d ",
+                    detElemId,manuId));
   }
   return gain;
 }
 
 //_____________________________________________________________________________
-AliMUONV3DStore*
+AliMUONV2DStore*
 AliMUONCalibrationData::Gains() const
 {
+  //
+  // Create (if needed) and return the internal store for gains.
+  //
   if (!fGains)
   {
     AliCDBEntry* entry = GetEntry("MUON/Calib/Gains");
     if (entry)
     {
-      fGains = dynamic_cast<AliMUONV3DStore*>(entry->GetObject());
+      fGains = dynamic_cast<AliMUONV2DStore*>(entry->GetObject());
       if (!fGains)
       {
         AliError("Gains not of the expected type !!!");
@@ -110,22 +175,18 @@ AliMUONCalibrationData::Gains() const
 }
 
 //_____________________________________________________________________________
-Bool_t
-AliMUONCalibrationData::IsValid() const
-{
-  return fIsValid;
-}
-
-//_____________________________________________________________________________
-AliMUONV3DStore*
+AliMUONV2DStore*
 AliMUONCalibrationData::Pedestals() const
 {
+  //
+  // Create (if needed) and return the internal storage for pedestals.
+  //
   if (!fPedestals)
   {
     AliCDBEntry* entry = GetEntry("MUON/Calib/Pedestals");
     if (entry)
     {
-      fPedestals = dynamic_cast<AliMUONV3DStore*>(entry->GetObject());
+      fPedestals = dynamic_cast<AliMUONV2DStore*>(entry->GetObject());
       if (!fPedestals)
       {
         AliError("fPedestals not of the expected type !!!");
@@ -143,30 +204,32 @@ AliMUONCalibrationData::Pedestals() const
 void
 AliMUONCalibrationData::Print(Option_t*) const
 {
+  //
+  // A very basic dump of our guts.
+  //  
   cout << "RunNumber " << RunNumber()
     << " fGains=" << fGains
-  << " fPedestals=" << fPedestals
+    << " fPedestals=" << fPedestals
+    << " fDeadChannels=" << fDeadChannels
   << endl;
 }
 
-//_____________________________________________________________________________
-Int_t
-AliMUONCalibrationData::RunNumber() const
-{
-  return fRunNumber;
-}
 
 //_____________________________________________________________________________
-AliMUONCalibParam*
-AliMUONCalibrationData::Pedestal(Int_t detElemId, 
-                                 Int_t manuId, Int_t manuChannel) const
+AliMUONVCalibParam*
+AliMUONCalibrationData::Pedestal(Int_t detElemId, Int_t manuId) const
 {
-  AliMUONCalibParam* ped = 
-    static_cast<AliMUONCalibParam*>(Pedestals()->Get(detElemId,manuId,manuChannel));
+  //
+  // Return the pedestals for a given (detElemId, manuId) pair.
+  // A return value of 0x0 is considered an error, meaning we should get
+  // pedestals for all channels.
+  //
+  AliMUONVCalibParam* ped = 
+    static_cast<AliMUONVCalibParam*>(Pedestals()->Get(detElemId,manuId));
   if (!ped)
   {
-    AliError(Form("Could not get pedestal for detElemId=%d manuId=%d "
-                  "manuChannel=%d",detElemId,manuId,manuChannel));
+    AliError(Form("Could not get pedestal for detElemId=%d manuId=%d ",
+                  detElemId,manuId));
   }
   return ped;
 }
index 87f8286..50edf6f 100644 (file)
@@ -5,8 +5,10 @@
 
 /// \ingroup base
 /// \class AliMUONCalibrationData
-/// \brief Single entry point to access pedestals and gains from the
-/// (de)calibrator or any class needing the calibration data
+/// \brief Single entry point to access MUON calibration data.
+///
+/// For the moment, this class stores pedestals, gains and deadchannels
+/// that are fetched from the CDB.
 /// 
 /// \author Laurent Aphecetche
 
 #endif
 
 class AliCDBEntry;
-class AliMUONCalibParam;
-class AliMUONV3DStore;
+class AliMUONVCalibParam;
+class AliMUONV2DStore;
 
 class AliMUONCalibrationData : public TObject
 {
 public:
+  /** Constructor.
+    * @param runNumber is used as a key to the CDB
+    * @param deferredInitialization if kFALSE, all the calibrations are fetched
+    * regardless of whether you'll use them or not.
+    */
   AliMUONCalibrationData(Int_t runNumber=-1, Bool_t deferredInitialization=kTRUE);
   virtual ~AliMUONCalibrationData();
+
+  /// Get the DeadChannel calibration object for channels within (detElemId,manuId).
+  AliMUONVCalibParam* DeadChannel(Int_t detElemId, Int_t manuId) const;
   
-  AliMUONCalibParam* Gain(Int_t detElemId, Int_t manuId, Int_t manuChannel) const;
-  
-  Bool_t IsValid() const;
+  /// Get the Gain calibration object for channels within (detElemId,manuId).
+  AliMUONVCalibParam* Gain(Int_t detElemId, Int_t manuId) const;
+
+  /// Whether this object is valid or not (might be invalid if fetching from CDB failed).
+  Bool_t IsValid() const { return fIsValid; }
   
-  AliMUONCalibParam* Pedestal(Int_t detElemId, Int_t manuId, Int_t manuChannel) const;
+  /// Get the Pedestal calibration object for channels within (detElemId,manuId).
+  AliMUONVCalibParam* Pedestal(Int_t detElemId, Int_t manuId) const;
   
+  /// Dump to screen.
   virtual void Print(Option_t* opt="") const;
   
-  Int_t RunNumber() const;  
+  /// The runnumber used by this object.
+  Int_t RunNumber() const { return fRunNumber; }
   
 private:
   AliCDBEntry* GetEntry(const char* path) const;
-  AliMUONV3DStore* Gains() const;
-  AliMUONV3DStore* Pedestals() const;
-
+  AliMUONV2DStore* Gains() const;
+  AliMUONV2DStore* Pedestals() const;
+  AliMUONV2DStore* DeadChannels() const;
+  
 private:  
   mutable Bool_t fIsValid;
   Int_t fRunNumber;
-  mutable AliMUONV3DStore* fGains; //!
-  mutable AliMUONV3DStore* fPedestals; //!
+  mutable AliMUONV2DStore* fGains; //!
+  mutable AliMUONV2DStore* fPedestals; //!
+  mutable AliMUONV2DStore* fDeadChannels; //!
   
-  ClassDef(AliMUONCalibrationData,1) // Storage for all MUON calibration data.
+  ClassDef(AliMUONCalibrationData,2) // Storage for all MUON calibration data.
 };
 
 #endif