X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EMCAL%2FAliEMCALLoader.cxx;h=c44c07581172c61cb94056d5f78099f76f4ef37b;hb=09b1b46b012d4f69086467b4312b607c448ef81f;hp=6074f07dbf8ed42bf227903fbf608a062e2d5a58;hpb=5dee926e8ba960b0765de85362fdef7d54b225a2;p=u%2Fmrichter%2FAliRoot.git diff --git a/EMCAL/AliEMCALLoader.cxx b/EMCAL/AliEMCALLoader.cxx index 6074f07dbf8..c44c0758117 100644 --- a/EMCAL/AliEMCALLoader.cxx +++ b/EMCAL/AliEMCALLoader.cxx @@ -16,17 +16,10 @@ /* $Id$ */ //_________________________________________________________________________ -// A singleton. This class should be used in the analysis stage to get -// reconstructed objects: Digits, RecPoints, TrackSegments and RecParticles, -// instead of directly reading them from galice.root file. -// -// MvL Feb 2006: -// The AliEMCALLoader now holds the TClonesArray and TObjArray for reading +// The AliEMCALLoader gets the TClonesArray and TObjArray for reading // Hits, Dgits, SDigits and RecPoints. Filling is managed in the GetEvent() // method. -// -// Creation/writing of files is managed by the relevant parts of the -// reconstruction software (AliEMCALDigitiser etx) +// It also provides acces methods to the calibration and simulation OCDB parameters // //*-- Author: Yves Schutz (SUBATECH) & Dmitri Peressounko (RRC KI & SUBATECH) //*-- Completely redesigned by Dmitri Peressounko March 2001 @@ -36,43 +29,57 @@ // //*-- Marco van Leeuwen, Jan 2006: complete revision to simplify reading //*-- and fit better in general ALICE scheme +//*-- GCB: Remove TClonesArrays and TObjArrays data members, they are created elsewhere. +//*-- Provide access to OCDB calibration and simulation parameters. // ////////////////////////////////////////////////////////////////////////////// - // --- ROOT system --- - +#include "TMath.h" #include "TTree.h" - // --- Standard library --- // --- AliRoot header files --- #include "AliEMCALLoader.h" #include "AliLog.h" +#include "AliCDBLocal.h" +#include "AliCDBStorage.h" +#include "AliCDBManager.h" +#include "AliCDBEntry.h" -ClassImp(AliEMCALLoader) + ClassImp(AliEMCALLoader) -const TString AliEMCALLoader::fgkECARecPointsBranchName("EMCALECARP");//Name for branch with ECA Reconstructed Points +const TString AliEMCALLoader::fgkECARecPointsBranchName("EMCALECARP");//Name for branch with ECA Reconstructed Points +const TString AliEMCALLoader::fgkECADigitsBranchName("DIGITS");//Name for branch with ECA Digits +const TString AliEMCALLoader::fgkECASDigitsBranchName("SDIGITS");//Name for branch with ECA SDigits + +AliEMCALCalibData* AliEMCALLoader::fgCalibData = 0; //calibration data +AliCaloCalibPedestal* AliEMCALLoader::fgCaloPed = 0; //dead map data +AliEMCALSimParam* AliEMCALLoader::fgSimParam = 0; //simulation parameters +AliEMCALRecParam* AliEMCALLoader::fgRecParam = 0; //reconstruction parameters //____________________________________________________________________________ AliEMCALLoader::AliEMCALLoader() +: fDebug(0) { - fDebug = 0; - fHits = new TClonesArray("AliEMCALHit"); - fDigits = new TClonesArray("AliEMCALDigit"); - fSDigits = new TClonesArray("AliEMCALDigit"); - fRecPoints = new TObjArray(); + //Default constructor for EMCAL Loader Class + } //____________________________________________________________________________ -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) +{ + //Specific constructor for EMCAL Loader class + +} + +//____________________________________________________________________________ +AliEMCALLoader::AliEMCALLoader(const Char_t *name, TFolder *topfolder) + : AliLoader(name,topfolder), fDebug(0) { - fDebug=0; - fHits = new TClonesArray("AliEMCALHit"); - fDigits = new TClonesArray("AliEMCALDigit"); - fSDigits = new TClonesArray("AliEMCALDigit"); - fRecPoints = new TObjArray(); + //Specific constructor for EMCAL Loader class + } //____________________________________________________________________________ @@ -81,54 +88,196 @@ AliEMCALLoader::~AliEMCALLoader() // Disconnect trees and remove arrays if (TreeH()) TreeH()->SetBranchAddress(fDetectorName,0); - if (TreeD()) - TreeD()->SetBranchAddress(fDetectorName,0); - if (TreeS()) - TreeS()->SetBranchAddress(fDetectorName,0); - if (TreeR()) - TreeR()->SetBranchAddress(fgkECARecPointsBranchName,0); - delete fHits; - delete fDigits; - delete fSDigits; - delete fRecPoints; +// if (TreeD()) +// TreeD()->SetBranchAddress(fDetectorName,0); +// if (TreeS()) +// TreeS()->SetBranchAddress(fDetectorName,0); +// if (TreeR()) +// TreeR()->SetBranchAddress(fgkECARecPointsBranchName,0); + + Clean(fgkECASDigitsBranchName); + Clean(fgkECADigitsBranchName); + Clean(fgkECARecPointsBranchName); + + AliLoader::CleanFolders(); + } //____________________________________________________________________________ -Int_t AliEMCALLoader::GetEvent() { - AliLoader::GetEvent(); // First call AliLoader to do all the groundwork +AliEMCALCalibData* AliEMCALLoader::CalibData() +{ + // Check if the instance of AliEMCALCalibData exists, if not, create it if + // the OCDB is available, and finally return it. + + 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; + +} + +//____________________________________________________________________________ +AliCaloCalibPedestal* AliEMCALLoader::PedestalData() +{ + // Check if the instance of AliCaloCalibPedestal exists, if not, create it if + // the OCDB is available, and finally return it. + + if(!fgCaloPed && (AliCDBManager::Instance()->IsDefaultStorageSet())) + { + AliCDBEntry *entry = (AliCDBEntry*) + AliCDBManager::Instance()->Get("EMCAL/Calib/Pedestals"); + if (entry) fgCaloPed = (AliCaloCalibPedestal*) entry->GetObject(); + } + + if(!fgCaloPed) + AliFatal("Pedestal info not found in CDB!"); + + return fgCaloPed; + +} + +//____________________________________________________________________________ +AliEMCALSimParam* AliEMCALLoader::SimulationParameters() +{ + // Check if the instance of AliEMCALSimParam exists, if not, create it if + // the OCDB is available, and finally return it. + + if(!fgSimParam && (AliCDBManager::Instance()->IsDefaultStorageSet())) + { + AliCDBEntry *entry = (AliCDBEntry*) + AliCDBManager::Instance()->Get("EMCAL/Calib/SimParam"); + if (entry) fgSimParam = (AliEMCALSimParam*) entry->GetObject(); + + } + + if(!fgSimParam) + AliFatal("Simulations parameters not found in CDB!"); + + return fgSimParam; + +} - AliDebug(1,__PRETTY_FUNCTION__); - // Now connect and fill TClonesArray - // Hits - TTree *treeH = TreeH(); - if (treeH) { - treeH->SetBranchAddress(fDetectorName,&fHits); - if (treeH->GetEntries() > 1) - Warning(__PRETTY_FUNCTION__,"multiple arrays in treeH no longer supported"); - treeH->GetEvent(0); +//____________________________________________________________________________ +AliEMCALRecParam* AliEMCALLoader::ReconstructionParameters(Int_t eventType = 0) +{ + // Check if the instance of AliEMCALRecParam exists, if not, create it if + // the OCDB is available, and finally return it. + // The event type must be provided. + + if(!fgRecParam && (AliCDBManager::Instance()->IsDefaultStorageSet())) + { + AliCDBEntry *entry = (AliCDBEntry*) + AliCDBManager::Instance()->Get("EMCAL/Calib/RecoParam"); + if (entry) fgRecParam = (AliEMCALRecParam*)((TObjArray *) entry->GetObject())->At(eventType); + } + + if(!fgRecParam) + AliFatal("Reconstruction parameters not found in CDB!"); + + return fgRecParam; + +} + - // SDigits +//____________________________________________________________________________ +Int_t AliEMCALLoader::GetEvent() +{ + //Method to load all of the data + //members of the EMCAL for a given + //event from the Trees + + AliLoader::GetEvent(); // First call AliLoader to do all the groundwork + + // *** Hits *** + // Hits are now handled directly on the AliEMCALSDigitizer, the only place it is requested. + // together with AliEveEMCALData + + // *** SDigits *** + // Initialize the SDigits TClonesArray, only if it did not existed before + MakeSDigitsArray(); + TTree *treeS = TreeS(); if (treeS) { - treeS->SetBranchAddress(fDetectorName,&fSDigits); - treeS->GetEvent(0); + TBranch * branchS = treeS->GetBranch(fDetectorName); + + // Reset SDigits array and branch + branchS->ResetAddress(); + TClonesArray* sdigits = const_cast(this)->SDigits(); + if (sdigits) sdigits->Clear("C"); + + branchS->SetAddress(&sdigits); + branchS->GetEntry(0); } - - // Digits + + // *** Digits *** + // Initialize the Digits TClonesArray, only if it did not existed before + MakeDigitsArray(); + TTree *treeD = TreeD(); if (treeD) { - treeD->SetBranchAddress(fDetectorName,&fDigits); - treeD->GetEvent(0); + TBranch * branchD = treeD->GetBranch(fDetectorName); + + // Reset Digits array and branch + branchD->ResetAddress(); + TClonesArray* digits = const_cast(this)->Digits(); + if (digits) digits->Clear("C"); + + branchD->SetAddress(&digits); + branchD->GetEntry(0); } - - // RecPoints + + // *** RecPoints *** + // Initialize the RecPoints TObjArray, only if it did not existed before + MakeRecPointsArray(); + TTree *treeR = TreeR(); if (treeR) { - treeR->SetBranchAddress(fgkECARecPointsBranchName,&fRecPoints); - treeR->GetEvent(0); + TBranch * branchR = treeR->GetBranch(fgkECARecPointsBranchName); + + // Reset RecPoints array and branch + branchR->ResetAddress(); + TObjArray* rp = const_cast(this)->RecPoints(); + if (rp) rp->Clear(); + + branchR->SetAddress(&rp); + branchR->GetEntry(0); } - + return 0; } + +//____________________________________________________________________________ +void AliEMCALLoader::MakeSDigitsArray(){ + // Add SDigits array to the data folder + if (SDigits()) return; + TClonesArray* sdigits = new TClonesArray("AliEMCALDigit",0); + sdigits->SetName(fgkECASDigitsBranchName); + GetDetectorDataFolder()->Add(sdigits); +} + +//____________________________________________________________________________ +void AliEMCALLoader::MakeDigitsArray(){ + // Add Digits array to the data folder + if (Digits()) return; + TClonesArray* digits = new TClonesArray("AliEMCALDigit",0); + digits->SetName(fgkECADigitsBranchName); + GetDetectorDataFolder()->Add(digits); +} + +//____________________________________________________________________________ +void AliEMCALLoader::MakeRecPointsArray(){ + // Add RecPoints array to the data folder + if (RecPoints()) return; + TObjArray* rp = new TObjArray(0); + rp->SetName(fgkECARecPointsBranchName); + GetDetectorDataFolder()->Add(rp); +}