]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EMCAL/AliEMCALLoader.cxx
Added support for strip range calib objects
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALLoader.cxx
index f3f09e5c114002e6f440b570f3447c7b55b48eb4..663f6b95dadf9922cbbf3aa3c8b51fd926973671 100644 (file)
@@ -40,6 +40,7 @@
 //////////////////////////////////////////////////////////////////////////////
 
 // --- ROOT system ---
+#include "TMath.h"
 #include "TTree.h"
 
 // --- Standard library ---
 #include "AliCDBLocal.h"
 #include "AliCDBStorage.h"
 #include "AliCDBManager.h"
+#include "AliCDBEntry.h"
 #include "AliEMCALHit.h"
 
 ClassImp(AliEMCALLoader)
   
 const TString AliEMCALLoader::fgkECARecPointsBranchName("EMCALECARP");//Name for branch with ECA Reconstructed Points
 AliEMCALCalibData* AliEMCALLoader::fgCalibData = 0; //calibation data
+AliEMCALRecParam * AliEMCALLoader::fgRecParam  = 0; //reconstruction parameters
 
 //____________________________________________________________________________ 
 AliEMCALLoader::AliEMCALLoader()
+  : fDebug(0),
+    fHits(0),
+    fDigits(0),
+    fSDigits(0),
+    fRecPoints(0)
 {
   //Default constructor for EMCAL Loader Class
 
@@ -70,8 +78,13 @@ AliEMCALLoader::AliEMCALLoader()
 }
 
 //____________________________________________________________________________ 
-AliEMCALLoader::AliEMCALLoader(const Char_t *detname,const Char_t *eventfoldername):
-  AliLoader(detname,eventfoldername)
+AliEMCALLoader::AliEMCALLoader(const Char_t *detname,const Char_t *eventfoldername)
+  : AliLoader(detname,eventfoldername),
+    fDebug(0),
+    fHits(0),
+    fDigits(0),
+    fSDigits(0),
+    fRecPoints(0)
 {
   //Specific constructor for EMCAL Loader class
 
@@ -83,16 +96,33 @@ AliEMCALLoader::AliEMCALLoader(const Char_t *detname,const Char_t *eventfolderna
 }
 
 //____________________________________________________________________________
-AliEMCALLoader::AliEMCALLoader(const AliEMCALLoader & obj):AliLoader(obj)
+AliEMCALLoader::AliEMCALLoader(const Char_t *name, TFolder *topfolder)
+  : AliLoader(name,topfolder),
+    fDebug(0),
+    fHits(0),
+    fDigits(0),
+    fSDigits(0),
+    fRecPoints(0)
 {
-  //copy ctor
+  //Specific constructor for EMCAL Loader class
 
-  fDebug = obj.fDebug;
-  fHits = obj.fHits;
-  fDigits = obj.fDigits;
-  fSDigits = obj.fSDigits;
-  fRecPoints = obj.fRecPoints;
+  fDebug=0;
+  fHits = new TClonesArray("AliEMCALHit");
+  fDigits = new TClonesArray("AliEMCALDigit");
+  fSDigits = new TClonesArray("AliEMCALDigit");
+  fRecPoints = new TObjArray();
+}
 
+//____________________________________________________________________________
+AliEMCALLoader::AliEMCALLoader(const AliEMCALLoader & obj)
+  : AliLoader(obj),
+    fDebug(obj.fDebug),
+    fHits(obj.fHits),
+    fDigits(obj.fDigits),
+    fSDigits(obj.fSDigits),
+    fRecPoints(obj.fRecPoints)
+{
+  //copy ctor
 }
 
 //____________________________________________________________________________ 
@@ -107,7 +137,10 @@ AliEMCALLoader::~AliEMCALLoader()
     TreeS()->SetBranchAddress(fDetectorName,0);
   if (TreeR())
     TreeR()->SetBranchAddress(fgkECARecPointsBranchName,0);
-  delete fHits;
+  if (fHits) {
+    fHits->Delete();
+    delete fHits;
+  }
   delete fDigits;
   delete fSDigits;
   delete fRecPoints;
@@ -116,15 +149,42 @@ AliEMCALLoader::~AliEMCALLoader()
 //____________________________________________________________________________ 
 AliEMCALCalibData* AliEMCALLoader::CalibData()
 { 
-  // Check if the instance of AliEMCALCalibData exists, and return it
+  // Check if the instance of AliEMCALCalibData exists, if not, create it if 
+  // the OCDB is available, and finally return it.
 
-  if( !(AliCDBManager::Instance()->IsDefaultStorageSet()) ) 
-    fgCalibData=0x0;
+  if(!fgCalibData && (AliCDBManager::Instance()->IsDefaultStorageSet()))
+    {
+      AliCDBEntry *entry = (AliCDBEntry*) 
+       AliCDBManager::Instance()->Get("EMCAL/Calib/Data");
+      if (entry) fgCalibData =  (AliEMCALCalibData*) entry->GetObject();
+    }
+  
+  if(!fgCalibData)
+    AliFatal("Calibration parameters not found in CDB!");
   
   return fgCalibData;
   
 }
 
+//____________________________________________________________________________ 
+AliEMCALRecParam* AliEMCALLoader::RecParam()
+{ 
+  // Check if the instance of AliEMCALRecParam exists, if not, create it if 
+  // the OCDB is available, and finally return it.
+
+  if(!fgRecParam && (AliCDBManager::Instance()->IsDefaultStorageSet())) {
+    AliCDBEntry *entry = (AliCDBEntry*) 
+      AliCDBManager::Instance()->Get("EMCAL/Config/RecParam/");
+    if (entry) fgRecParam =  (AliEMCALRecParam*) entry->GetObject();
+  }
+  
+  if(!fgRecParam)
+    AliWarning("Recostruction parameters not found in CDB!");
+  
+  return fgRecParam;
+  
+}
+
 //____________________________________________________________________________ 
 Int_t AliEMCALLoader::CalibrateRaw(Double_t energy, Int_t module, 
                                   Int_t column, Int_t row)
@@ -172,36 +232,57 @@ Int_t AliEMCALLoader::GetEvent()
      Int_t nEnt = treeH->GetEntries();  // TreeH has array of hits for every primary
      fHits->Clear();
      Int_t index = 0;
-     TClonesArray *temp_arr = new TClonesArray("AliEMCALHit");
-     treeH->SetBranchAddress(fDetectorName,&temp_arr);
+     TClonesArray *tempArr = 0x0;
+     TBranch * branchH = treeH->GetBranch(fDetectorName);
+     branchH->SetAddress(&tempArr);
      for (Int_t iEnt = 0; iEnt < nEnt; iEnt++) {
        treeH->GetEntry(iEnt);
-       Int_t nHit = temp_arr->GetEntriesFast();
+       Int_t nHit = tempArr->GetEntriesFast();
        for (Int_t iHit = 0; iHit < nHit; iHit++) {
-        new ((*fHits)[index]) AliEMCALHit(*((AliEMCALHit*)temp_arr->At(iHit)));
+        new ((*fHits)[index]) AliEMCALHit(*((AliEMCALHit*)tempArr->At(iHit)));
         index++;
        }
      }
+     branchH->ResetAddress();
+     if (tempArr) {
+       tempArr->Delete();
+       delete tempArr;
+     }
    }
   
    // SDigits
    TTree *treeS = TreeS();
    if (treeS) {
-     treeS->SetBranchAddress(fDetectorName,&fSDigits);
+     TBranch * branchS = treeS->GetBranch(fDetectorName);
+     branchS->ResetAddress();
+     if (fSDigits) {
+       fSDigits->Clear();
+     }
+     branchS->SetAddress(&fSDigits);
      treeS->GetEvent(0);
    }
    
    // Digits
    TTree *treeD = TreeD();
    if (treeD) {
-     treeD->SetBranchAddress(fDetectorName,&fDigits);
+     TBranch * branchD = treeD->GetBranch(fDetectorName);
+     branchD->ResetAddress();
+     if (fDigits) {
+       fDigits->Clear();
+     }
+     branchD->SetAddress(&fDigits);
      treeD->GetEvent(0);
    }
 
    // RecPoints
    TTree *treeR = TreeR();
    if (treeR) {
-     treeR->SetBranchAddress(fgkECARecPointsBranchName,&fRecPoints);
+     TBranch * branchR = treeR->GetBranch(fgkECARecPointsBranchName);
+     branchR->ResetAddress();
+     if (fRecPoints) {
+       fRecPoints->Clear();
+     }
+     branchR->SetAddress(&fRecPoints);
      treeR->GetEvent(0);
    }