X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EMCAL%2FAliEMCALLoader.cxx;h=9c32e91d32ad7b7d5e922ab5f0b0396092b21829;hb=bdf70a4cdc213e42f79d98a0833eb85413ab3b90;hp=2e448a158ed317a92ba0190c01e810bbd3293c61;hpb=bcdecbbec5d5c7beaf078d1d103199a56a79a230;p=u%2Fmrichter%2FAliRoot.git diff --git a/EMCAL/AliEMCALLoader.cxx b/EMCAL/AliEMCALLoader.cxx index 2e448a158ed..9c32e91d32a 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,14 +29,14 @@ // //*-- 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 --- @@ -52,32 +45,40 @@ #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 -AliEMCALCalibData* AliEMCALLoader::fCalibData = 0; //calibation data -AliEMCALAlignData* AliEMCALLoader::fAlignData = 0; //alignment data +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 //____________________________________________________________________________ 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) { - fDebug=0; - fHits = new TClonesArray("AliEMCALHit"); - fDigits = new TClonesArray("AliEMCALDigit"); - fSDigits = new TClonesArray("AliEMCALDigit"); - fRecPoints = new TObjArray(); + //Specific constructor for EMCAL Loader class + +} + +//____________________________________________________________________________ +AliEMCALLoader::AliEMCALLoader(const Char_t *name, TFolder *topfolder) + : AliLoader(name,topfolder), fDebug(0) +{ + //Specific constructor for EMCAL Loader class + } //____________________________________________________________________________ @@ -86,107 +87,172 @@ 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; -} - -//____________________________________________________________________________ -AliEMCALAlignData* AliEMCALLoader::AlignData() -{ - // Check if the instance of AliEMCALAlignData exists, and return it - - if( !(AliCDBManager::Instance()->IsDefaultStorageSet()) ) - fAlignData=0x0; - return fAlignData; +// 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(); + } //____________________________________________________________________________ AliEMCALCalibData* AliEMCALLoader::CalibData() { - // Check if the instance of AliEMCALCalibData exists, and return it - - if( !(AliCDBManager::Instance()->IsDefaultStorageSet()) ) { - fCalibData=0x0; - return fCalibData; - } - - return fCalibData; - + // 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; + } //____________________________________________________________________________ -Int_t AliEMCALLoader::CalibrateRaw(Double_t energy, Int_t module, - Int_t column, Int_t row) -{ - // Convert energy into digitized amplitude for a cell relId - // It is a user responsilibity to open CDB and set - // AliEMCALCalibData object by the following operators: - // - // AliCDBLocal *loc = new AliCDBLocal("deCalibDB"); - // AliEMCALCalibData* clb = (AliEMCALCalibData*)AliCDBStorage::Instance() - // ->Get(path_to_calibdata,run_number); - // AliEMCALGetter* gime = AliEMCALGetter::Instance("galice.root"); - // gime->SetCalibData(clb); - - if (CalibData() == 0) - Warning("CalibrateRaw","Calibration DB is not initiated!"); - - Float_t gainFactor = 0.0015; // width of one ADC channel in GeV - Float_t pedestal = 0.005; // pedestals - - if(CalibData()) { - gainFactor = CalibData()->GetADCchannel (module,column,row); - pedestal = CalibData()->GetADCpedestal(module,column,row); - } +//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; - Int_t amp = static_cast( (energy - pedestal) / gainFactor + 0.5 ) ; - return amp; } - //____________________________________________________________________________ -Int_t AliEMCALLoader::GetEvent() { +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 - - // Now connect and fill TClonesArray - - // Hits - TTree *treeH = TreeH(); - if (treeH) { - treeH->SetBranchAddress(fDetectorName,&fHits); - if (treeH->GetEntries() > 1) - AliWarning("Multiple arrays in treeH no longer supported"); - treeH->GetEvent(0); - } - - // SDigits + + // *** 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); +}