1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 //_________________________________________________________________________
19 // A singleton. This class should be used in the analysis stage to get
20 // reconstructed objects: Digits, RecPoints, TrackSegments and RecParticles,
21 // instead of directly reading them from galice.root file.
24 // The AliEMCALLoader now holds the TClonesArray and TObjArray for reading
25 // Hits, Dgits, SDigits and RecPoints. Filling is managed in the GetEvent()
28 // Creation/writing of files is managed by the relevant parts of the
29 // reconstruction software (AliEMCALDigitiser etx)
31 //*-- Author: Yves Schutz (SUBATECH) & Dmitri Peressounko (RRC KI & SUBATECH)
32 //*-- Completely redesigned by Dmitri Peressounko March 2001
34 //*-- YS June 2001 : renamed the original AliEMCALIndexToObject and make
35 //*-- systematic usage of TFolders without changing the interface
37 //*-- Marco van Leeuwen, Jan 2006: complete revision to simplify reading
38 //*-- and fit better in general ALICE scheme
40 //////////////////////////////////////////////////////////////////////////////
43 // --- ROOT system ---
47 // --- Standard library ---
49 // --- AliRoot header files ---
50 #include "AliEMCALLoader.h"
52 #include "AliCDBLocal.h"
53 #include "AliCDBStorage.h"
54 #include "AliCDBManager.h"
56 ClassImp(AliEMCALLoader)
58 const TString AliEMCALLoader::fgkECARecPointsBranchName("EMCALECARP");//Name for branch with ECA Reconstructed Points
59 AliEMCALCalibData* AliEMCALLoader::fCalibData = 0; //calibation data
60 AliEMCALAlignData* AliEMCALLoader::fAlignData = 0; //alignment data
62 //____________________________________________________________________________
63 AliEMCALLoader::AliEMCALLoader()
66 fHits = new TClonesArray("AliEMCALHit");
67 fDigits = new TClonesArray("AliEMCALDigit");
68 fSDigits = new TClonesArray("AliEMCALDigit");
69 fRecPoints = new TObjArray();
72 //____________________________________________________________________________
73 AliEMCALLoader::AliEMCALLoader(const Char_t *detname,const Char_t *eventfoldername):
74 AliLoader(detname,eventfoldername)
77 fHits = new TClonesArray("AliEMCALHit");
78 fDigits = new TClonesArray("AliEMCALDigit");
79 fSDigits = new TClonesArray("AliEMCALDigit");
80 fRecPoints = new TObjArray();
83 //____________________________________________________________________________
84 AliEMCALLoader::~AliEMCALLoader()
86 // Disconnect trees and remove arrays
88 TreeH()->SetBranchAddress(fDetectorName,0);
90 TreeD()->SetBranchAddress(fDetectorName,0);
92 TreeS()->SetBranchAddress(fDetectorName,0);
94 TreeR()->SetBranchAddress(fgkECARecPointsBranchName,0);
101 //____________________________________________________________________________
102 AliEMCALAlignData* AliEMCALLoader::AlignData()
104 // Check if the instance of AliEMCALAlignData exists, and return it
106 if( !(AliCDBManager::Instance()->IsDefaultStorageSet()) )
111 //____________________________________________________________________________
112 AliEMCALCalibData* AliEMCALLoader::CalibData()
114 // Check if the instance of AliEMCALCalibData exists, and return it
116 if( !(AliCDBManager::Instance()->IsDefaultStorageSet()) )
123 //____________________________________________________________________________
124 Int_t AliEMCALLoader::CalibrateRaw(Double_t energy, Int_t module,
125 Int_t column, Int_t row)
127 // Convert energy into digitized amplitude for a cell relId
128 // It is a user responsilibity to open CDB and set
129 // AliEMCALCalibData object by the following operators:
131 // AliCDBLocal *loc = new AliCDBLocal("deCalibDB");
132 // AliEMCALCalibData* clb = (AliEMCALCalibData*)AliCDBStorage::Instance()
133 // ->Get(path_to_calibdata,run_number);
134 // AliEMCALGetter* gime = AliEMCALGetter::Instance("galice.root");
135 // gime->SetCalibData(clb);
137 if (CalibData() == 0)
138 Warning("CalibrateRaw","Calibration DB is not initiated!");
140 Float_t gainFactor = 0.00305;//0.0015; // width of one ADC channel in GeV
141 Float_t pedestal = 0.009;//0.005; // pedestals
144 gainFactor = CalibData()->GetADCchannel (module,column,row);
145 pedestal = CalibData()->GetADCpedestal(module,column,row);
148 Int_t amp = static_cast<Int_t>( (energy - pedestal) / gainFactor + 0.5 ) ;
152 //____________________________________________________________________________
153 Int_t AliEMCALLoader::LoadHits(Option_t* opt) {
155 Int_t status = AliLoader::LoadHits(opt); // First call AliLoader to do all the groundwork
157 TTree *treeH = TreeH();
160 treeH->SetBranchAddress(fDetectorName,&fHits);
161 if (treeH->GetEntries() > 1)
162 AliWarning("Multiple arrays in treeH no longer supported");
169 //____________________________________________________________________________
170 Int_t AliEMCALLoader::LoadSDigits(Option_t* opt) {
172 Int_t status = AliLoader::LoadSDigits(opt); // First call AliLoader to do all the groundwork
174 TTree *treeS = TreeS();
177 treeS->SetBranchAddress(fDetectorName,&fSDigits);
184 //____________________________________________________________________________
185 Int_t AliEMCALLoader::LoadDigits(Option_t* opt) {
187 Int_t status = AliLoader::LoadDigits(opt); // First call AliLoader to do all the groundwork
189 TTree *treeD = TreeD();
192 treeD->SetBranchAddress(fDetectorName,&fDigits);
199 //____________________________________________________________________________
200 Int_t AliEMCALLoader::LoadRecPoints(Option_t* opt) {
202 Int_t status = AliLoader::LoadRecPoints(opt); // First call AliLoader to do all the groundwork
204 TTree *treeR = TreeR();
206 treeR->SetBranchAddress(fgkECARecPointsBranchName,&fRecPoints);
213 //____________________________________________________________________________
214 Int_t AliEMCALLoader::GetEvent() {
216 AliLoader::GetEvent(); // First call AliLoader to do all the groundwork
218 // Now connect and fill TClonesArray
221 TTree *treeH = TreeH();
224 treeH->SetBranchAddress(fDetectorName,&fHits);
225 if (treeH->GetEntries() > 1)
226 AliWarning("Multiple arrays in treeH no longer supported");
232 TTree *treeS = TreeS();
234 treeS->SetBranchAddress(fDetectorName,&fSDigits);
239 TTree *treeD = TreeD();
241 treeD->SetBranchAddress(fDetectorName,&fDigits);
246 TTree *treeR = TreeR();
248 treeR->SetBranchAddress(fgkECARecPointsBranchName,&fRecPoints);