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 **************************************************************************/
17 //_________________________________________________________________________
18 // Class to check results from simulations or reconstructed real data.
19 // Fill few histograms and do some checking plots
21 //-- Author: Gustavo Conesa (INFN-LNF)
22 //_________________________________________________________________________
25 // --- ROOT system ---
26 //#include "Riostream.h"
27 #include "TObjArray.h"
28 #include "TParticle.h"
29 #include "TDatabasePDG.h"
38 //---- AliRoot system ----
39 #include "AliAnaCalorimeterQA.h"
40 #include "AliCaloTrackReader.h"
42 #include "AliAODCaloCells.h"
43 #include "AliESDCaloCells.h"
44 #include "AliAODCaloCluster.h"
45 #include "AliFiducialCut.h"
46 #include "AliESDtrack.h"
47 #include "AliAODTrack.h"
48 #include "AliESDCaloCluster.h"
49 #include "AliESDEvent.h"
50 #include "AliAODEvent.h"
51 #include "AliVEventHandler.h"
52 #include "AliAnalysisManager.h"
53 #include "AliAODMCParticle.h"
54 #include "AliMCAnalysisUtils.h"
55 #include "AliAODPid.h"
56 #include "AliPHOSGeoUtils.h"
57 #include "AliEMCALGeoUtils.h"
59 ClassImp(AliAnaCalorimeterQA)
61 //____________________________________________________________________________
62 AliAnaCalorimeterQA::AliAnaCalorimeterQA() :
63 AliAnaPartCorrBaseClass(), fCalorimeter(""), fStyleMacro(""), fMakePlots(kFALSE), fCorrelateCalos(kFALSE),
64 fPHOSGeo(0x0),fEMCALGeo(0x0), fEMCALGeoName("EMCAL_COMPLETE"), fNModules(12),
65 fhE(0),fhPt(0),fhPhi(0),fhEta(0), fhEtaPhi(0), fhEtaPhiE(0),
66 fhECharged(0),fhPtCharged(0),fhPhiCharged(0),fhEtaCharged(0), fhEtaPhiCharged(0),
67 fhEChargedNoOut(0),fhPtChargedNoOut(0),fhPhiChargedNoOut(0),fhEtaChargedNoOut(0), fhEtaPhiChargedNoOut(0),
68 fhDeltaE(0), fhDeltaPt(0),fhDeltaPhi(0),fhDeltaEta(0), fhRatioE(0), fhRatioPt(0),fhRatioPhi(0),fhRatioEta(0),
69 fh2E(0),fh2Pt(0),fh2Phi(0),fh2Eta(0), fhIM(0), fhIMCellCut(0),fhAsym(0), fhNCellsPerCluster(0), fhNClusters(0), fhNCells(0), fhAmplitude(0),
70 fhCaloCorrNClusters(0), fhCaloCorrEClusters(0), fhCaloCorrNCells(0), fhCaloCorrECells(0),
71 fhEMod(0),fhNClustersMod(0), fhNCellsPerClusterMod(0), fhNCellsMod(0),
72 fhGridCellsMod(0), fhGridCellsEMod(0), fhAmplitudeMod(0), fhIMMod(0), fhIMCellCutMod(0),
73 fhGenGamPt(0),fhGenGamEta(0),fhGenGamPhi(0),fhGenPi0Pt(0),fhGenPi0Eta(0),fhGenPi0Phi(0),
74 fhGenEtaPt(0),fhGenEtaEta(0),fhGenEtaPhi(0),fhGenOmegaPt(0),fhGenOmegaEta(0),fhGenOmegaPhi(0),
75 fhGenElePt(0),fhGenEleEta(0),fhGenElePhi(0), fhEMVxyz(0), fhEMR(0), fhHaVxyz(0), fhHaR(0),
76 fhGamE(0),fhGamPt(0),fhGamPhi(0),fhGamEta(0),
77 fhGamDeltaE(0), fhGamDeltaPt(0),fhGamDeltaPhi(0),fhGamDeltaEta(0), fhGamRatioE(0), fhGamRatioPt(0),fhGamRatioPhi(0),fhGamRatioEta(0),
78 fhEleE(0),fhElePt(0),fhElePhi(0),fhEleEta(0),
79 fhPi0E(0),fhPi0Pt(0),fhPi0Phi(0),fhPi0Eta(0), fhNeHadE(0),fhNeHadPt(0),fhNeHadPhi(0),fhNeHadEta(0),
80 fhChHadE(0),fhChHadPt(0),fhChHadPhi(0),fhChHadEta(0),
81 fhGamECharged(0),fhGamPtCharged(0),fhGamPhiCharged(0),fhGamEtaCharged(0),
82 fhEleECharged(0),fhElePtCharged(0),fhElePhiCharged(0),fhEleEtaCharged(0),
83 fhPi0ECharged(0),fhPi0PtCharged(0),fhPi0PhiCharged(0),fhPi0EtaCharged(0),
84 fhNeHadECharged(0),fhNeHadPtCharged(0),fhNeHadPhiCharged(0),fhNeHadEtaCharged(0),
85 fhChHadECharged(0),fhChHadPtCharged(0),fhChHadPhiCharged(0),fhChHadEtaCharged(0),
86 fhGenGamAccE(0),fhGenGamAccPt(0),fhGenGamAccEta(0),fhGenGamAccPhi(0),
87 fhGenPi0AccE(0),fhGenPi0AccPt(0),fhGenPi0AccEta(0),fhGenPi0AccPhi(0),
88 fh1pOverE(0),fh1dR(0),fh2EledEdx(0), fh2MatchdEdx(0),fhMCEle1pOverE(0),fhMCEle1dR(0),fhMCEle2MatchdEdx(0),
89 fhMCChHad1pOverE(0),fhMCChHad1dR(0),fhMCChHad2MatchdEdx(0),fhMCNeutral1pOverE(0),fhMCNeutral1dR(0),fhMCNeutral2MatchdEdx(0),
90 fh1pOverER02(0), fhMCEle1pOverER02(0), fhMCChHad1pOverER02(0), fhMCNeutral1pOverER02(0)
94 //Initialize parameters
98 //____________________________________________________________________________
99 AliAnaCalorimeterQA::AliAnaCalorimeterQA(const AliAnaCalorimeterQA & qa) :
100 AliAnaPartCorrBaseClass(qa), fCalorimeter(qa.fCalorimeter), fStyleMacro(qa.fStyleMacro),
101 fMakePlots(qa.fMakePlots), fCorrelateCalos(qa.fCorrelateCalos),
102 fPHOSGeo(qa.fPHOSGeo),fEMCALGeo(qa.fEMCALGeo), fEMCALGeoName(qa.fEMCALGeoName), fNModules(qa.fNModules),
103 fhE(qa.fhE),fhPt(qa.fhPt), fhPhi(qa.fhPhi), fhEta(qa.fhEta),
104 fhEtaPhi(qa.fhEtaPhi), fhEtaPhiE(qa.fhEtaPhiE), fhECharged(qa.fhECharged),fhPtCharged(qa.fhPtCharged),fhPhiCharged(qa.fhPhiCharged),
105 fhEtaCharged(qa.fhEtaCharged), fhEtaPhiCharged(qa.fhEtaPhiCharged),
106 fhEChargedNoOut(qa.fhEChargedNoOut),fhPtChargedNoOut(qa.fhPtChargedNoOut),fhPhiChargedNoOut(qa.fhPhiChargedNoOut),
107 fhEtaChargedNoOut(qa.fhEtaChargedNoOut), fhEtaPhiChargedNoOut(qa.fhEtaPhiChargedNoOut),
108 fhDeltaE(qa.fhDeltaE), fhDeltaPt(qa.fhDeltaPt), fhDeltaPhi(qa.fhDeltaPhi), fhDeltaEta(qa.fhDeltaEta),
109 fhRatioE(qa.fhRatioE), fhRatioPt(qa.fhRatioPt), fhRatioPhi(qa.fhRatioPhi), fhRatioEta(qa.fhRatioEta),
110 fh2E(qa.fh2E), fh2Pt(qa.fh2Pt), fh2Phi(qa.fh2Phi),fh2Eta(qa.fh2Eta),
111 fhIM(qa.fhIM), fhIMCellCut(qa.fhIMCellCut), fhAsym(qa.fhAsym), fhNCellsPerCluster(qa.fhNCellsPerCluster), fhNClusters(qa.fhNClusters),
112 fhNCells(qa.fhNCells), fhAmplitude(qa.fhAmplitude),
113 fhCaloCorrNClusters(qa.fhCaloCorrNClusters), fhCaloCorrEClusters(qa.fhCaloCorrEClusters),
114 fhCaloCorrNCells(qa.fhCaloCorrNCells), fhCaloCorrECells(qa.fhCaloCorrECells),
115 fhEMod(qa.fhEMod),fhNClustersMod(qa.fhNClustersMod), fhNCellsPerClusterMod(qa.fhNCellsPerClusterMod), fhNCellsMod(qa.fhNCellsMod),
116 fhGridCellsMod(qa.fhGridCellsMod), fhGridCellsEMod(qa.fhGridCellsEMod), fhAmplitudeMod(qa.fhAmplitudeMod),
117 fhIMMod(qa.fhIMMod),fhIMCellCutMod(qa.fhIMCellCutMod),
118 fhGenGamPt(qa.fhGenGamPt), fhGenGamEta(qa.fhGenGamEta), fhGenGamPhi(qa.fhGenGamPhi),
119 fhGenPi0Pt(qa.fhGenPi0Pt), fhGenPi0Eta(qa.fhGenPi0Eta), fhGenPi0Phi(qa.fhGenPi0Phi),
120 fhGenEtaPt(qa.fhGenEtaPt), fhGenEtaEta(qa.fhGenEtaEta), fhGenEtaPhi(qa.fhGenEtaPhi),
121 fhGenOmegaPt(qa.fhGenOmegaPt), fhGenOmegaEta(qa.fhGenOmegaEta), fhGenOmegaPhi(qa.fhGenOmegaPhi),
122 fhGenElePt(qa.fhGenElePt), fhGenEleEta(qa.fhGenEleEta), fhGenElePhi(qa.fhGenElePhi),
123 fhEMVxyz(qa.fhEMVxyz), fhEMR(qa.fhEMR), fhHaVxyz(qa.fhHaVxyz), fhHaR(qa.fhHaR),
124 fhGamE(qa.fhGamE),fhGamPt(qa.fhGamPt),fhGamPhi(qa.fhGamPhi),fhGamEta(qa.fhGamEta),
125 fhGamDeltaE(qa.fhGamDeltaE), fhGamDeltaPt(qa.fhGamDeltaPt), fhGamDeltaPhi(qa.fhGamDeltaPhi), fhGamDeltaEta(qa.fhGamDeltaEta),
126 fhGamRatioE(qa.fhGamRatioE), fhGamRatioPt(qa.fhGamRatioPt), fhGamRatioPhi(qa.fhGamRatioPhi), fhGamRatioEta(qa.fhGamRatioEta),
127 fhEleE(qa.fhEleE),fhElePt(qa.fhElePt),fhElePhi(qa.fhElePhi),fhEleEta(qa.fhEleEta),
128 fhPi0E(qa.fhPi0E),fhPi0Pt(qa.fhPi0Pt),fhPi0Phi(qa.fhPi0Phi),fhPi0Eta(qa.fhPi0Eta),
129 fhNeHadE(qa.fhNeHadE),fhNeHadPt(qa.fhNeHadPt),fhNeHadPhi(qa.fhNeHadPhi),fhNeHadEta(qa.fhNeHadEta),
130 fhChHadE(qa.fhChHadE),fhChHadPt(qa.fhChHadPt),fhChHadPhi(qa.fhChHadPhi),fhChHadEta(qa.fhChHadEta),
131 fhGamECharged(qa.fhGamECharged),fhGamPtCharged(qa.fhGamPtCharged),fhGamPhiCharged(qa.fhGamPhiCharged),fhGamEtaCharged(qa.fhGamEtaCharged),
132 fhEleECharged(qa.fhEleECharged),fhElePtCharged(qa.fhElePtCharged),fhElePhiCharged(qa.fhElePhiCharged),fhEleEtaCharged(qa.fhEleEtaCharged),
133 fhPi0ECharged(qa.fhPi0ECharged),fhPi0PtCharged(qa.fhPi0PtCharged),fhPi0PhiCharged(qa.fhPi0PhiCharged),fhPi0EtaCharged(qa.fhPi0EtaCharged),
134 fhNeHadECharged(qa.fhNeHadECharged),fhNeHadPtCharged(qa.fhNeHadPtCharged),fhNeHadPhiCharged(qa.fhNeHadPhiCharged),fhNeHadEtaCharged(qa.fhNeHadEtaCharged),
135 fhChHadECharged(qa.fhChHadECharged),fhChHadPtCharged(qa.fhChHadPtCharged),fhChHadPhiCharged(qa.fhChHadPhiCharged),fhChHadEtaCharged(qa.fhChHadEtaCharged),
136 fhGenGamAccE(qa.fhGenGamAccE),fhGenGamAccPt(qa.fhGenGamAccPt),fhGenGamAccEta(qa.fhGenGamAccEta),fhGenGamAccPhi(qa.fhGenGamAccPhi),
137 fhGenPi0AccE(qa.fhGenPi0AccE),fhGenPi0AccPt(qa.fhGenPi0AccPt),fhGenPi0AccEta(qa.fhGenPi0AccEta),fhGenPi0AccPhi(qa.fhGenPi0AccPhi),
138 fh1pOverE(qa.fh1pOverE),fh1dR(qa.fh1dR),fh2EledEdx(qa.fh2EledEdx), fh2MatchdEdx(qa.fh2MatchdEdx),
139 fhMCEle1pOverE(qa.fhMCEle1pOverE),fhMCEle1dR(qa.fhMCEle1dR), fhMCEle2MatchdEdx(qa.fhMCEle2MatchdEdx),
140 fhMCChHad1pOverE(qa.fhMCChHad1pOverE),fhMCChHad1dR(qa.fhMCChHad1dR), fhMCChHad2MatchdEdx(qa.fhMCChHad2MatchdEdx),
141 fhMCNeutral1pOverE(qa.fhMCNeutral1pOverE),fhMCNeutral1dR(qa.fhMCNeutral1dR), fhMCNeutral2MatchdEdx(qa.fhMCNeutral2MatchdEdx),
142 fh1pOverER02(qa.fh1pOverER02), fhMCEle1pOverER02(qa.fhMCEle1pOverER02),fhMCChHad1pOverER02(qa.fhMCChHad1pOverER02), fhMCNeutral1pOverER02(qa.fhMCNeutral1pOverER02)
148 //_________________________________________________________________________
149 AliAnaCalorimeterQA & AliAnaCalorimeterQA::operator = (const AliAnaCalorimeterQA & qa)
151 // assignment operator
153 if(this == &qa)return *this;
154 ((AliAnaPartCorrBaseClass *)this)->operator=(qa);
156 fCalorimeter = qa.fCalorimeter;
157 fStyleMacro = qa.fStyleMacro;
158 fMakePlots = qa.fMakePlots;
159 fCorrelateCalos = qa.fCorrelateCalos;
161 fPHOSGeo = qa.fPHOSGeo;
162 fEMCALGeo = qa.fEMCALGeo;
163 fEMCALGeoName = qa.fEMCALGeoName ;
164 fNModules = qa.fNModules;
170 fhEtaPhi = qa.fhEtaPhi;
171 fhEtaPhiE= qa.fhEtaPhiE;
173 fhECharged = qa.fhECharged;
174 fhPtCharged = qa.fhPtCharged;
175 fhPhiCharged = qa.fhPhiCharged;
176 fhEtaCharged = qa.fhEtaCharged;
177 fhEtaPhiCharged = qa.fhEtaPhiCharged;
179 fhEChargedNoOut = qa.fhEChargedNoOut;
180 fhPtChargedNoOut = qa.fhPtChargedNoOut;
181 fhPhiChargedNoOut = qa.fhPhiChargedNoOut;
182 fhEtaChargedNoOut = qa.fhEtaChargedNoOut;
183 fhEtaPhiChargedNoOut = qa.fhEtaPhiChargedNoOut;
185 fhIM = qa.fhIM; fhIMCellCut = qa.fhIMCellCut;
188 fhNCellsPerCluster = qa.fhNCellsPerCluster;
189 fhNClusters = qa.fhNClusters;
191 fhDeltaE = qa.fhDeltaE;
192 fhDeltaPt = qa.fhDeltaPt;
193 fhDeltaPhi = qa.fhDeltaPhi;
194 fhDeltaEta = qa.fhDeltaEta;
196 fhRatioE = qa.fhRatioE;
197 fhRatioPt = qa.fhRatioPt;
198 fhRatioPhi = qa.fhRatioPhi;
199 fhRatioEta = qa.fhRatioEta;
207 fhNCells = qa.fhNCells;
208 fhAmplitude = qa.fhAmplitude;
210 fhCaloCorrNClusters = qa.fhCaloCorrNClusters; fhCaloCorrEClusters = qa.fhCaloCorrEClusters;
211 fhCaloCorrNCells = qa.fhCaloCorrNCells; fhCaloCorrECells = qa.fhCaloCorrECells;
213 fhEMod = qa.fhEMod; fhNClustersMod = qa.fhNClustersMod;
214 fhNCellsPerClusterMod = qa.fhNCellsPerClusterMod; fhNCellsMod = qa.fhNCellsMod;
215 fhGridCellsMod = qa.fhGridCellsMod; fhGridCellsEMod = qa.fhGridCellsEMod;
216 fhAmplitudeMod = qa.fhAmplitudeMod; fhIMMod=qa.fhIMMod; fhIMCellCutMod=qa.fhIMCellCutMod;
218 fhGenGamPt = qa.fhGenGamPt ; fhGenGamEta = qa.fhGenGamEta ; fhGenGamPhi = qa.fhGenGamPhi ;
219 fhGenPi0Pt = qa.fhGenPi0Pt ; fhGenPi0Eta = qa.fhGenPi0Eta ; fhGenPi0Phi = qa.fhGenPi0Phi ;
220 fhGenEtaPt = qa.fhGenEtaPt ; fhGenEtaEta = qa.fhGenEtaEta ; fhGenEtaPhi = qa.fhGenEtaPhi ;
221 fhGenOmegaPt = qa.fhGenOmegaPt ; fhGenOmegaEta = qa.fhGenOmegaEta ; fhGenOmegaPhi = qa.fhGenOmegaPhi ;
222 fhGenElePt = qa.fhGenElePt ; fhGenEleEta = qa.fhGenEleEta ; fhGenElePhi = qa.fhGenElePhi ;
224 fhEMVxyz = qa.fhEMVxyz ; fhEMR = qa.fhEMR ; fhHaVxyz = qa.fhHaVxyz ; fhHaR = qa.fhHaR ;
225 fhGamE = qa.fhGamE ;fhGamPt = qa.fhGamPt ;fhGamPhi = qa.fhGamPhi ;fhGamEta = qa.fhGamEta ;
226 fhGamDeltaE = qa.fhDeltaE; fhGamDeltaPt = qa.fhDeltaPt; fhGamDeltaPhi = qa.fhDeltaPhi; fhGamDeltaEta = qa.fhDeltaEta;
228 fhGamRatioE = qa.fhGamRatioE; fhGamRatioPt = qa.fhGamRatioPt; fhGamRatioPhi = qa.fhGamRatioPhi; fhGamRatioEta = qa.fhGamRatioEta;
230 fhEleE = qa.fhEleE ;fhElePt = qa.fhElePt ;fhElePhi = qa.fhElePhi ;fhEleEta = qa.fhEleEta ;
231 fhPi0E = qa.fhPi0E ;fhPi0Pt = qa.fhPi0Pt ;fhPi0Phi = qa.fhPi0Phi ;fhPi0Eta = qa.fhPi0Eta ;
232 fhNeHadE = qa.fhNeHadE ;fhNeHadPt = qa.fhNeHadPt ;fhNeHadPhi = qa.fhNeHadPhi ;fhNeHadEta = qa.fhNeHadEta ;
233 fhChHadE = qa.fhChHadE ;fhChHadPt = qa.fhChHadPt ;fhChHadPhi = qa.fhChHadPhi ;fhChHadEta = qa.fhChHadEta ;
234 fhGenGamAccE = qa.fhGenGamAccE ; fhGenPi0AccE = qa.fhGenPi0AccE ;
235 fhGenGamAccPt = qa.fhGenGamAccPt ;fhGenGamAccEta = qa.fhGenGamAccEta ;fhGenGamAccPhi = qa.fhGenGamAccPhi ;
236 fhGenPi0AccPt = qa.fhGenPi0AccPt ;fhGenPi0AccEta = qa.fhGenPi0AccEta; fhGenPi0AccPhi = qa.fhGenPi0AccPhi ;
238 fhGamECharged = qa.fhGamECharged; fhGamPtCharged = qa.fhGamPtCharged; fhGamPhiCharged = qa.fhGamPhiCharged; fhGamEtaCharged = qa.fhGamEtaCharged;
239 fhEleECharged = qa.fhEleECharged; fhElePtCharged = qa.fhElePtCharged; fhElePhiCharged = qa.fhElePhiCharged; fhEleEtaCharged = qa.fhEleEtaCharged;
240 fhPi0ECharged = qa.fhPi0ECharged; fhPi0PtCharged = qa.fhPi0PtCharged; fhPi0PhiCharged = qa.fhPi0PhiCharged; fhPi0EtaCharged = qa.fhPi0EtaCharged;
241 fhNeHadECharged = qa.fhNeHadECharged; fhNeHadPtCharged = qa.fhNeHadPtCharged; fhNeHadPhiCharged = qa.fhNeHadPhiCharged; fhNeHadEtaCharged = qa.fhNeHadEtaCharged;
242 fhChHadECharged = qa.fhChHadECharged; fhChHadPtCharged = qa.fhChHadPtCharged; fhChHadPhiCharged = qa.fhChHadPhiCharged; fhChHadEtaCharged = qa.fhChHadEtaCharged;
244 fh1pOverE = qa.fh1pOverE;
246 fh2MatchdEdx = qa.fh2MatchdEdx;
247 fh2EledEdx = qa.fh2EledEdx;
249 fhMCEle1pOverE = qa.fhMCEle1pOverE;
250 fhMCEle1dR = qa.fhMCEle1dR;
251 fhMCEle2MatchdEdx = qa.fhMCEle2MatchdEdx ;
253 fhMCChHad1pOverE = qa.fhMCChHad1pOverE; fhMCChHad1dR = qa.fhMCChHad1dR; fhMCChHad2MatchdEdx = qa.fhMCChHad2MatchdEdx;
254 fhMCNeutral1pOverE = qa.fhMCNeutral1pOverE; fhMCNeutral1dR = qa.fhMCNeutral1dR; fhMCNeutral2MatchdEdx = qa.fhMCNeutral2MatchdEdx;
255 fh1pOverER02 = qa.fh1pOverER02; fhMCEle1pOverER02 = qa.fhMCEle1pOverER02; fhMCChHad1pOverER02 = qa.fhMCChHad1pOverER02;
256 fhMCNeutral1pOverER02 = qa.fhMCNeutral1pOverER02;
262 //________________________________________________________________________________________________________________________________________________
263 AliAnaCalorimeterQA::~AliAnaCalorimeterQA() {
266 if(fPHOSGeo) delete fPHOSGeo ;
267 if(fEMCALGeo) delete fEMCALGeo ;
272 //________________________________________________________________________
273 TList * AliAnaCalorimeterQA::GetCreateOutputObjects()
275 // Create histograms to be saved in output file and
276 // store them in fOutputContainer
278 //If Geometry library loaded, do geometry selection during analysis.
279 printf("AliAnaPi0::GetCreateOutputObjects() - PHOS geometry initialized!\n");
280 fPHOSGeo = new AliPHOSGeoUtils("PHOSgeo") ;
282 printf("AliAnaPi0::GetCreateOutputObjects() - EMCAL geometry initialized!\n");
283 fEMCALGeo = new AliEMCALGeoUtils(fEMCALGeoName) ;
284 TList * outputContainer = new TList() ;
285 outputContainer->SetName("QAHistos") ;
289 Int_t nptbins = GetHistoNPtBins();
290 Int_t nphibins = GetHistoNPhiBins();
291 Int_t netabins = GetHistoNEtaBins();
292 Float_t ptmax = GetHistoPtMax();
293 Float_t phimax = GetHistoPhiMax();
294 Float_t etamax = GetHistoEtaMax();
295 Float_t ptmin = GetHistoPtMin();
296 Float_t phimin = GetHistoPhiMin();
297 Float_t etamin = GetHistoEtaMin();
299 fhE = new TH1F ("hE","E reconstructed clusters ", nptbins,ptmin,ptmax);
300 fhE->SetXTitle("E (GeV)");
301 outputContainer->Add(fhE);
303 fhPt = new TH1F ("hPt","p_{T} reconstructed clusters", nptbins,ptmin,ptmax);
304 fhPt->SetXTitle("p_{T} (GeV/c)");
305 outputContainer->Add(fhPt);
307 fhPhi = new TH1F ("hPhi","#phi reconstructed clusters ",nphibins,phimin,phimax);
308 fhPhi->SetXTitle("#phi (rad)");
309 outputContainer->Add(fhPhi);
311 fhEta = new TH1F ("hEta","#eta reconstructed clusters ",netabins,etamin,etamax);
312 fhEta->SetXTitle("#eta ");
313 outputContainer->Add(fhEta);
315 fhEtaPhi = new TH2F ("hEtaPhi","#eta vs #phi, reconstructed clusters ",netabins,etamin,etamax,nphibins,phimin,phimax);
316 fhEtaPhi->SetXTitle("#eta ");
317 fhEtaPhi->SetYTitle("#phi ");
318 outputContainer->Add(fhEtaPhi);
320 fhEtaPhiE = new TH3F ("hEtaPhiE","#eta vs #phi vs energy, reconstructed clusters",netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
321 fhEtaPhiE->SetXTitle("#eta ");
322 fhEtaPhiE->SetYTitle("#phi (rad)");
323 fhEtaPhiE->SetZTitle("E (GeV) ");
324 outputContainer->Add(fhEtaPhiE);
328 fhECharged = new TH1F ("hECharged","E reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
329 fhECharged->SetXTitle("E (GeV)");
330 outputContainer->Add(fhECharged);
332 fhPtCharged = new TH1F ("hPtCharged","p_{T} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
333 fhPtCharged->SetXTitle("p_{T} (GeV/c)");
334 outputContainer->Add(fhPtCharged);
336 fhPhiCharged = new TH1F ("hPhiCharged","#phi reconstructed clusters, matched with track",nphibins,phimin,phimax);
337 fhPhiCharged->SetXTitle("#phi (rad)");
338 outputContainer->Add(fhPhiCharged);
340 fhEtaCharged = new TH1F ("hEtaCharged","#eta reconstructed clusters, matched with track",netabins,etamin,etamax);
341 fhEtaCharged->SetXTitle("#eta ");
342 outputContainer->Add(fhEtaCharged);
344 fhEtaPhiCharged = new TH2F ("hEtaPhiCharged","#eta vs #phi, reconstructed clusters, matched with track",netabins,etamin,etamax,nphibins,phimin,phimax);
345 fhEtaPhiCharged->SetXTitle("#eta ");
346 fhEtaPhiCharged->SetYTitle("#phi ");
347 outputContainer->Add(fhEtaPhiCharged);
349 fhEChargedNoOut = new TH1F ("hEChargedNoOut","E reconstructed clusters, matched with track, no output track params", nptbins,ptmin,ptmax);
350 fhEChargedNoOut->SetXTitle("E (GeV)");
351 outputContainer->Add(fhEChargedNoOut);
353 fhPtChargedNoOut = new TH1F ("hPtChargedNoOut","p_{T} reconstructed clusters, matched with track, no output track params", nptbins,ptmin,ptmax);
354 fhPtChargedNoOut->SetXTitle("p_{T} (GeV/c)");
355 outputContainer->Add(fhPtChargedNoOut);
357 fhPhiChargedNoOut = new TH1F ("hPhiChargedNoOut","#phi reconstructed clusters, matched with track, no output track params",nphibins,phimin,phimax);
358 fhPhiChargedNoOut->SetXTitle("#phi (rad)");
359 outputContainer->Add(fhPhiChargedNoOut);
361 fhEtaChargedNoOut = new TH1F ("hEtaChargedNoOut","#eta reconstructed clusters, matched with track, no output track params",netabins,etamin,etamax);
362 fhEtaChargedNoOut->SetXTitle("#eta ");
363 outputContainer->Add(fhEtaChargedNoOut);
365 fhEtaPhiChargedNoOut = new TH2F ("hEtaPhiChargedNoOut","#eta vs #phi, reconstructed clusters, matched with track, no output track params",netabins,etamin,etamax,nphibins,phimin,phimax);
366 fhEtaPhiChargedNoOut->SetXTitle("#eta ");
367 fhEtaPhiChargedNoOut->SetYTitle("#phi ");
368 outputContainer->Add(fhEtaPhiChargedNoOut);
370 fh1pOverE = new TH2F("h1pOverE","TRACK matches p/E",200,0.,100., 100,0.,10.);
371 fh1pOverE->SetYTitle("p/E");
372 fh1pOverE->SetXTitle("p_{T} (GeV/c)");
373 outputContainer->Add(fh1pOverE);
375 fh1dR = new TH1F("h1dR","TRACK matches dR",300, 0.,TMath::Pi());
376 fh1dR->SetXTitle("#Delta R (rad)");
377 outputContainer->Add(fh1dR) ;
379 fh2MatchdEdx = new TH2F("h2MatchdEdx","dE/dx vs. p for all matches",200,0.,50.,200,0.,400.);
380 fh2MatchdEdx->SetXTitle("p (GeV/c)");
381 fh2MatchdEdx->SetYTitle("<dE/dx>");
382 outputContainer->Add(fh2MatchdEdx);
384 fh2EledEdx = new TH2F("h2EledEdx","dE/dx vs. p for electrons",200,0.,50.,200,0.,400.);
385 fh2EledEdx->SetXTitle("p (GeV/c)");
386 fh2EledEdx->SetYTitle("<dE/dx>");
387 outputContainer->Add(fh2EledEdx) ;
389 fh1pOverER02 = new TH2F("h1pOverER02","TRACK matches p/E, all",200,0.,100.,100,0.,10.);
390 fh1pOverER02->SetYTitle("p/E");
391 fh1pOverER02->SetXTitle("p_{T} (GeV/c)");
392 outputContainer->Add(fh1pOverER02);
394 fhIM = new TH2F ("hIM","Cluster pairs Invariant mass vs reconstructed pair energy",nptbins,ptmin,ptmax,200,0,1);
395 fhIM->SetXTitle("E_{cluster pairs} (GeV) ");
396 fhIM->SetYTitle("M_{cluster pairs} (GeV/c^{2})");
397 outputContainer->Add(fhIM);
399 fhIMCellCut = new TH2F ("hIMCellCut","Cluster (n cell > 1) pairs Invariant mass vs reconstructed pair energy",nptbins,ptmin,ptmax,200,0,1);
400 fhIMCellCut->SetXTitle("E_{cluster pairs} (GeV) ");
401 fhIMCellCut->SetYTitle("M_{cluster pairs} (GeV/c^{2})");
402 outputContainer->Add(fhIMCellCut);
404 fhAsym = new TH2F ("hAssym","Cluster pairs Asymmetry vs reconstructed pair energy",nptbins,ptmin,ptmax,100,0,1);
405 fhAsym->SetXTitle("E_{cluster pairs} (GeV) ");
406 fhAsym->SetYTitle("Asymmetry");
407 outputContainer->Add(fhAsym);
409 fhNCellsPerCluster = new TH2F ("hNCellsPerCluster","# cells per cluster vs cluster energy", nptbins,ptmin,ptmax, 200,0,200);
410 fhNCellsPerCluster->SetXTitle("E (GeV)");
411 fhNCellsPerCluster->SetYTitle("n cells");
412 outputContainer->Add(fhNCellsPerCluster);
414 fhNClusters = new TH1F ("hNClusters","# clusters", 300,0,300);
415 fhNClusters->SetXTitle("number of clusters");
416 outputContainer->Add(fhNClusters);
419 fhNCells = new TH1F ("hNCells","# cells", 18000,0,18000);
420 fhNCells->SetXTitle("n cells");
421 outputContainer->Add(fhNCells);
423 fhAmplitude = new TH1F ("hAmplitude","Cell Energy", 500,0,100);
424 fhAmplitude->SetXTitle("Cell Energy (GeV)");
425 outputContainer->Add(fhAmplitude);
428 fhCaloCorrNClusters = new TH2F ("hCaloCorrNClusters","# clusters in EMCAL vs PHOS", 300,0,300, 300,0,300);
429 fhCaloCorrNClusters->SetXTitle("number of clusters in EMCAL");
430 fhCaloCorrNClusters->SetYTitle("number of clusters in PHOS");
431 outputContainer->Add(fhCaloCorrNClusters);
433 fhCaloCorrEClusters = new TH2F ("hCaloCorrEClusters","summed energy of clusters in EMCAL vs PHOS", 300,0,300, 300,0,300);
434 fhCaloCorrEClusters->SetXTitle("#Sigma E of clusters in EMCAL (GeV)");
435 fhCaloCorrEClusters->SetYTitle("#Sigma E of clusters in PHOS (GeV)");
436 outputContainer->Add(fhCaloCorrEClusters);
438 fhCaloCorrNCells = new TH2F ("hCaloCorrNCells","# Cells in EMCAL vs PHOS", 300,0,300, 300,0,300);
439 fhCaloCorrNCells->SetXTitle("number of Cells in EMCAL");
440 fhCaloCorrNCells->SetYTitle("number of Cells in PHOS");
441 outputContainer->Add(fhCaloCorrNCells);
443 fhCaloCorrECells = new TH2F ("hCaloCorrECells","summed energy of Cells in EMCAL vs PHOS", 300,0,300, 300,0,300);
444 fhCaloCorrECells->SetXTitle("#Sigma E of Cells in EMCAL (GeV)");
445 fhCaloCorrECells->SetYTitle("#Sigma E of Cells in PHOS (GeV)");
446 outputContainer->Add(fhCaloCorrECells);
447 }//correlate calorimeters
450 fhEMod = new TH1F*[fNModules];
451 fhNClustersMod = new TH1F*[fNModules];
452 fhNCellsPerClusterMod = new TH2F*[fNModules];
453 fhNCellsMod = new TH1F*[fNModules];
454 fhGridCellsMod = new TH2F*[fNModules];
455 fhGridCellsEMod = new TH2F*[fNModules];
456 fhAmplitudeMod = new TH1F*[fNModules];
457 fhIMMod = new TH2F*[fNModules];
458 fhIMCellCutMod = new TH2F*[fNModules];
460 for(Int_t imod = 0; imod < fNModules; imod++){
462 fhEMod[imod] = new TH1F (Form("hE_Mod%d",imod),Form("Cluster reconstructed Energy in Module %d ",imod), nptbins,ptmin,ptmax);
463 fhEMod[imod]->SetXTitle("E (GeV)");
464 outputContainer->Add(fhEMod[imod]);
466 fhNClustersMod[imod] = new TH1F (Form("hNClusters_Mod%d",imod),Form("# clusters in Module %d",imod), 300,0,300);
467 fhNClustersMod[imod]->SetXTitle("number of clusters");
468 outputContainer->Add(fhNClustersMod[imod]);
470 fhNCellsPerClusterMod[imod] = new TH2F (Form("hNCellsPerCluster_Mod%d",imod),
471 Form("# cells per cluster vs cluster energy in Module %d",imod),
472 nptbins,ptmin,ptmax, 200,0,200);
473 fhNCellsPerClusterMod[imod]->SetXTitle("E (GeV)");
474 fhNCellsPerClusterMod[imod]->SetYTitle("n cells");
475 outputContainer->Add(fhNCellsPerClusterMod[imod]);
477 fhNCellsMod[imod] = new TH1F (Form("hNCells_Mod%d",imod),Form("# cells in Module %d",imod), 18000,0,18000);
478 fhNCellsMod[imod]->SetXTitle("n cells");
479 outputContainer->Add(fhNCellsMod[imod]);
482 if(fCalorimeter=="PHOS"){
486 fhGridCellsMod[imod] = new TH2F (Form("hGridCells_Mod%d",imod),Form("Entries in grid of cells in Module %d",imod),
487 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
488 fhGridCellsMod[imod]->SetXTitle("row (phi direction)");
489 fhGridCellsMod[imod]->SetXTitle("column (eta direction)");
490 outputContainer->Add(fhGridCellsMod[imod]);
492 fhGridCellsEMod[imod] = new TH2F (Form("hGridCellsE_Mod%d",imod),Form("Accumulated energy in grid of cells in Module %d",imod),
493 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
494 fhGridCellsEMod[imod]->SetXTitle("row (phi direction)");
495 fhGridCellsEMod[imod]->SetXTitle("column (eta direction)");
496 outputContainer->Add(fhGridCellsEMod[imod]);
498 fhAmplitudeMod[imod] = new TH1F (Form("hAmplitude_Mod%d",imod),Form("Cell Energy in Module %d",imod), 500,0,50);
499 fhAmplitudeMod[imod]->SetXTitle("Cell Energy (GeV)");
500 outputContainer->Add(fhAmplitudeMod[imod]);
502 fhIMMod[imod] = new TH2F (Form("hIM_Mod%d",imod),
503 Form("Cluster pairs Invariant mass vs reconstructed pair energy in Module %d",imod),
504 nptbins,ptmin,ptmax,200,0,1);
505 fhIMMod[imod]->SetXTitle("E_{cluster pairs} (GeV) ");
506 fhIMMod[imod]->SetYTitle("M_{cluster pairs} (GeV/c^{2})");
507 outputContainer->Add(fhIMMod[imod]);
509 fhIMCellCutMod[imod] = new TH2F (Form("hIMCellCut_Mod%d",imod),
510 Form("Cluster (n cells > 1) pairs Invariant mass vs reconstructed pair energy in Module %d",imod),
511 nptbins,ptmin,ptmax,200,0,1);
512 fhIMCellCutMod[imod]->SetXTitle("E_{cluster pairs} (GeV) ");
513 fhIMCellCutMod[imod]->SetYTitle("M_{cluster pairs} (GeV/c^{2})");
514 outputContainer->Add(fhIMCellCutMod[imod]);
519 //Monte Carlo Histograms
522 fhDeltaE = new TH1F ("hDeltaE","MC - Reco E ", 200,-50,50);
523 fhDeltaE->SetXTitle("#Delta E (GeV)");
524 outputContainer->Add(fhDeltaE);
526 fhDeltaPt = new TH1F ("hDeltaPt","MC - Reco p_{T} ", 200,-50,50);
527 fhDeltaPt->SetXTitle("#Delta p_{T} (GeV/c)");
528 outputContainer->Add(fhDeltaPt);
530 fhDeltaPhi = new TH1F ("hDeltaPhi","MC - Reco #phi ",100,-2,2);
531 fhDeltaPhi->SetXTitle("#Delta #phi (rad)");
532 outputContainer->Add(fhDeltaPhi);
534 fhDeltaEta = new TH1F ("hDeltaEta","MC- Reco #eta",100,-1,1);
535 fhDeltaEta->SetXTitle("#Delta #eta ");
536 outputContainer->Add(fhDeltaEta);
538 fhRatioE = new TH1F ("hRatioE","Reco/MC E ", 200,0,2);
539 fhRatioE->SetXTitle("E_{reco}/E_{gen}");
540 outputContainer->Add(fhRatioE);
542 fhRatioPt = new TH1F ("hRatioPt","Reco/MC p_{T} ", 200,0,2);
543 fhRatioPt->SetXTitle("p_{T, reco}/p_{T, gen}");
544 outputContainer->Add(fhRatioPt);
546 fhRatioPhi = new TH1F ("hRatioPhi","Reco/MC #phi ",200,0,2);
547 fhRatioPhi->SetXTitle("#phi_{reco}/#phi_{gen}");
548 outputContainer->Add(fhRatioPhi);
550 fhRatioEta = new TH1F ("hRatioEta","Reco/MC #eta",200,0,2);
551 fhRatioEta->SetXTitle("#eta_{reco}/#eta_{gen} ");
552 outputContainer->Add(fhRatioEta);
554 fh2E = new TH2F ("h2E","E distribution, reconstructed vs generated", nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
555 fh2E->SetXTitle("E_{rec} (GeV)");
556 fh2E->SetYTitle("E_{gen} (GeV)");
557 outputContainer->Add(fh2E);
559 fh2Pt = new TH2F ("h2Pt","p_T distribution, reconstructed vs generated", nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
560 fh2Pt->SetXTitle("p_{T,rec} (GeV/c)");
561 fh2Pt->SetYTitle("p_{T,gen} (GeV/c)");
562 outputContainer->Add(fh2Pt);
564 fh2Phi = new TH2F ("h2Phi","#phi distribution, reconstructed vs generated", nphibins,phimin,phimax, nphibins,phimin,phimax);
565 fh2Phi->SetXTitle("#phi_{rec} (rad)");
566 fh2Phi->SetYTitle("#phi_{gen} (rad)");
567 outputContainer->Add(fh2Phi);
569 fh2Eta = new TH2F ("h2Eta","#eta distribution, reconstructed vs generated", netabins,etamin,etamax,netabins,etamin,etamax);
570 fh2Eta->SetXTitle("#eta_{rec} ");
571 fh2Eta->SetYTitle("#eta_{gen} ");
572 outputContainer->Add(fh2Eta);
574 //Fill histos depending on origin of cluster
575 fhGamE = new TH2F ("hGamE","E reconstructed vs E generated from #gamma", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
576 fhGamE->SetXTitle("E_{rec} (GeV)");
577 fhGamE->SetXTitle("E_{gen} (GeV)");
578 outputContainer->Add(fhGamE);
580 fhGamPt = new TH2F ("hGamPt","p_{T} reconstructed vs E generated from #gamma", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
581 fhGamPt->SetXTitle("p_{T rec} (GeV/c)");
582 fhGamPt->SetYTitle("p_{T gen} (GeV/c)");
583 outputContainer->Add(fhGamPt);
585 fhGamPhi = new TH2F ("hGamPhi","#phi reconstructed vs E generated from #gamma",nphibins,phimin,phimax,nphibins,phimin,phimax);
586 fhGamPhi->SetXTitle("#phi_{rec} (rad)");
587 fhGamPhi->SetYTitle("#phi_{gen} (rad)");
588 outputContainer->Add(fhGamPhi);
590 fhGamEta = new TH2F ("hGamEta","#eta reconstructed vs E generated from #gamma",netabins,etamin,etamax,netabins,etamin,etamax);
591 fhGamEta->SetXTitle("#eta_{rec} ");
592 fhGamEta->SetYTitle("#eta_{gen} ");
593 outputContainer->Add(fhGamEta);
595 fhGamDeltaE = new TH1F ("hGamDeltaE","#gamma MC - Reco E ", 200,-50,50);
596 fhGamDeltaE->SetXTitle("#Delta E (GeV)");
597 outputContainer->Add(fhGamDeltaE);
599 fhGamDeltaPt = new TH1F ("hGamDeltaPt","#gamma MC - Reco p_{T} ", 200,-50,50);
600 fhGamDeltaPt->SetXTitle("#Delta p_{T} (GeV/c)");
601 outputContainer->Add(fhGamDeltaPt);
603 fhGamDeltaPhi = new TH1F ("hGamDeltaPhi","#gamma MC - Reco #phi ",100,-2,2);
604 fhGamDeltaPhi->SetXTitle("#Delta #phi (rad)");
605 outputContainer->Add(fhGamDeltaPhi);
607 fhGamDeltaEta = new TH1F ("hGamDeltaEta","#gamma MC- Reco #eta",100,-1,1);
608 fhGamDeltaEta->SetXTitle("#Delta #eta ");
609 outputContainer->Add(fhGamDeltaEta);
611 fhGamRatioE = new TH1F ("hGamRatioE","#gamma Reco/MC E ", 200,0,2);
612 fhGamRatioE->SetXTitle("E_{reco}/E_{gen}");
613 outputContainer->Add(fhGamRatioE);
615 fhGamRatioPt = new TH1F ("hGamRatioPt","#gamma Reco/MC p_{T} ", 200,0,2);
616 fhGamRatioPt->SetXTitle("p_{T, reco}/p_{T, gen}");
617 outputContainer->Add(fhGamRatioPt);
619 fhGamRatioPhi = new TH1F ("hGamRatioPhi","#gamma Reco/MC #phi ",200,0,2);
620 fhGamRatioPhi->SetXTitle("#phi_{reco}/#phi_{gen}");
621 outputContainer->Add(fhGamRatioPhi);
623 fhGamRatioEta = new TH1F ("hGamRatioEta","#gamma Reco/MC #eta",200,0,2);
624 fhGamRatioEta->SetXTitle("#eta_{reco}/#eta_{gen} ");
625 outputContainer->Add(fhGamRatioEta);
627 fhPi0E = new TH2F ("hPi0E","E reconstructed vs E generated from #pi^{0}", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
628 fhPi0E->SetXTitle("E_{rec} (GeV)");
629 fhPi0E->SetYTitle("E_{gen} (GeV)");
630 outputContainer->Add(fhPi0E);
632 fhPi0Pt = new TH2F ("hPi0Pt","p_{T} reconstructed vs E generated from #pi^{0}", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
633 fhPi0Pt->SetXTitle("p_{T rec} (GeV/c)");
634 fhPi0Pt->SetYTitle("p_{T gen} (GeV/c)");
635 outputContainer->Add(fhPi0Pt);
637 fhPi0Phi = new TH2F ("hPi0Phi","#phi reconstructed vs E generated from #pi^{0}",nphibins,phimin,phimax,nphibins,phimin,phimax);
638 fhPi0Phi->SetXTitle("#phi_{rec} (rad)");
639 fhPi0Phi->SetYTitle("#phi_{gen} (rad)");
640 outputContainer->Add(fhPi0Phi);
642 fhPi0Eta = new TH2F ("hPi0Eta","#eta reconstructed vs E generated from #pi^{0}",netabins,etamin,etamax,netabins,etamin,etamax);
643 fhPi0Eta->SetXTitle("#eta_{rec} ");
644 fhPi0Eta->SetYTitle("#eta_{gen} ");
645 outputContainer->Add(fhPi0Eta);
647 fhEleE = new TH2F ("hEleE","E reconstructed vs E generated from e^{#pm}", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
648 fhEleE->SetXTitle("E_{rec} (GeV)");
649 fhEleE->SetXTitle("E_{gen} (GeV)");
650 outputContainer->Add(fhEleE);
652 fhElePt = new TH2F ("hElePt","p_{T} reconstructed vs E generated from e^{#pm}", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
653 fhElePt->SetXTitle("p_{T rec} (GeV/c)");
654 fhElePt->SetYTitle("p_{T gen} (GeV/c)");
655 outputContainer->Add(fhElePt);
657 fhElePhi = new TH2F ("hElePhi","#phi reconstructed vs E generated from e^{#pm}",nphibins,phimin,phimax,nphibins,phimin,phimax);
658 fhElePhi->SetXTitle("#phi_{rec} (rad)");
659 fhElePhi->SetYTitle("#phi_{gen} (rad)");
660 outputContainer->Add(fhElePhi);
662 fhEleEta = new TH2F ("hEleEta","#eta reconstructed vs E generated from e^{#pm}",netabins,etamin,etamax,netabins,etamin,etamax);
663 fhEleEta->SetXTitle("#eta_{rec} ");
664 fhEleEta->SetYTitle("#eta_{gen} ");
665 outputContainer->Add(fhEleEta);
667 fhNeHadE = new TH2F ("hNeHadE","E reconstructed vs E generated from neutral hadron", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
668 fhNeHadE->SetXTitle("E_{rec} (GeV)");
669 fhNeHadE->SetYTitle("E_{gen} (GeV)");
670 outputContainer->Add(fhNeHadE);
672 fhNeHadPt = new TH2F ("hNeHadPt","p_{T} reconstructed vs E generated from neutral hadron", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
673 fhNeHadPt->SetXTitle("p_{T rec} (GeV/c)");
674 fhNeHadPt->SetYTitle("p_{T gen} (GeV/c)");
675 outputContainer->Add(fhNeHadPt);
677 fhNeHadPhi = new TH2F ("hNeHadPhi","#phi reconstructed vs E generated from neutral hadron",nphibins,phimin,phimax,nphibins,phimin,phimax);
678 fhNeHadPhi->SetXTitle("#phi_{rec} (rad)");
679 fhNeHadPhi->SetYTitle("#phi_{gen} (rad)");
680 outputContainer->Add(fhNeHadPhi);
682 fhNeHadEta = new TH2F ("hNeHadEta","#eta reconstructed vs E generated from neutral hadron",netabins,etamin,etamax,netabins,etamin,etamax);
683 fhNeHadEta->SetXTitle("#eta_{rec} ");
684 fhNeHadEta->SetYTitle("#eta_{gen} ");
685 outputContainer->Add(fhNeHadEta);
687 fhChHadE = new TH2F ("hChHadE","E reconstructed vs E generated from charged hadron", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
688 fhChHadE->SetXTitle("E_{rec} (GeV)");
689 fhChHadE->SetYTitle("E_{gen} (GeV)");
690 outputContainer->Add(fhChHadE);
692 fhChHadPt = new TH2F ("hChHadPt","p_{T} reconstructed vs E generated from charged hadron", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
693 fhChHadPt->SetXTitle("p_{T rec} (GeV/c)");
694 fhChHadPt->SetYTitle("p_{T gen} (GeV/c)");
695 outputContainer->Add(fhChHadPt);
697 fhChHadPhi = new TH2F ("hChHadPhi","#phi reconstructed vs E generated from charged hadron",nphibins,phimin,phimax,nphibins,phimin,phimax);
698 fhChHadPhi->SetXTitle("#phi_{rec} (rad)");
699 fhChHadPhi->SetYTitle("#phi_{gen} (rad)");
700 outputContainer->Add(fhChHadPhi);
702 fhChHadEta = new TH2F ("hChHadEta","#eta reconstructed vs E generated from charged hadron",netabins,etamin,etamax,netabins,etamin,etamax);
703 fhChHadEta->SetXTitle("#eta_{rec} ");
704 fhChHadEta->SetYTitle("#eta_{gen} ");
705 outputContainer->Add(fhChHadEta);
709 fhGamECharged = new TH2F ("hGamECharged","E reconstructed vs E generated from #gamma, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
710 fhGamECharged->SetXTitle("E_{rec} (GeV)");
711 fhGamECharged->SetXTitle("E_{gen} (GeV)");
712 outputContainer->Add(fhGamECharged);
714 fhGamPtCharged = new TH2F ("hGamPtCharged","p_{T} reconstructed vs E generated from #gamma, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
715 fhGamPtCharged->SetXTitle("p_{T rec} (GeV/c)");
716 fhGamPtCharged->SetYTitle("p_{T gen} (GeV/c)");
717 outputContainer->Add(fhGamPtCharged);
719 fhGamPhiCharged = new TH2F ("hGamPhiCharged","#phi reconstructed vs E generated from #gamma, track matched cluster",nphibins,phimin,phimax,nphibins,phimin,phimax);
720 fhGamPhiCharged->SetXTitle("#phi_{rec} (rad)");
721 fhGamPhiCharged->SetYTitle("#phi_{gen} (rad)");
722 outputContainer->Add(fhGamPhiCharged);
724 fhGamEtaCharged = new TH2F ("hGamEtaCharged","#eta reconstructed vs E generated from #gamma, track matched cluster",netabins,etamin,etamax,netabins,etamin,etamax);
725 fhGamEtaCharged->SetXTitle("#eta_{rec} ");
726 fhGamEtaCharged->SetYTitle("#eta_{gen} ");
727 outputContainer->Add(fhGamEtaCharged);
729 fhPi0ECharged = new TH2F ("hPi0ECharged","E reconstructed vs E generated from #pi^{0}, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
730 fhPi0ECharged->SetXTitle("E_{rec} (GeV)");
731 fhPi0ECharged->SetYTitle("E_{gen} (GeV)");
732 outputContainer->Add(fhPi0ECharged);
734 fhPi0PtCharged = new TH2F ("hPi0PtCharged","p_{T} reconstructed vs E generated from #pi^{0}, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
735 fhPi0PtCharged->SetXTitle("p_{T rec} (GeV/c)");
736 fhPi0PtCharged->SetYTitle("p_{T gen} (GeV/c)");
737 outputContainer->Add(fhPi0PtCharged);
739 fhPi0PhiCharged = new TH2F ("hPi0PhiCharged","#phi reconstructed vs E generated from #pi^{0}, track matched cluster",nphibins,phimin,phimax,nphibins,phimin,phimax);
740 fhPi0PhiCharged->SetXTitle("#phi_{rec} (rad)");
741 fhPi0PhiCharged->SetYTitle("#phi_{gen} (rad)");
742 outputContainer->Add(fhPi0PhiCharged);
744 fhPi0EtaCharged = new TH2F ("hPi0EtaCharged","#eta reconstructed vs E generated from #pi^{0}, track matched cluster",netabins,etamin,etamax,netabins,etamin,etamax);
745 fhPi0EtaCharged->SetXTitle("#eta_{rec} ");
746 fhPi0EtaCharged->SetYTitle("#eta_{gen} ");
747 outputContainer->Add(fhPi0EtaCharged);
749 fhEleECharged = new TH2F ("hEleECharged","E reconstructed vs E generated from e^{#pm}, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
750 fhEleECharged->SetXTitle("E_{rec} (GeV)");
751 fhEleECharged->SetXTitle("E_{gen} (GeV)");
752 outputContainer->Add(fhEleECharged);
754 fhElePtCharged = new TH2F ("hElePtCharged","p_{T} reconstructed vs E generated from e^{#pm}, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
755 fhElePtCharged->SetXTitle("p_{T rec} (GeV/c)");
756 fhElePtCharged->SetYTitle("p_{T gen} (GeV/c)");
757 outputContainer->Add(fhElePtCharged);
759 fhElePhiCharged = new TH2F ("hElePhiCharged","#phi reconstructed vs E generated from e^{#pm}, track matched cluster",nphibins,phimin,phimax,nphibins,phimin,phimax);
760 fhElePhiCharged->SetXTitle("#phi_{rec} (rad)");
761 fhElePhiCharged->SetYTitle("#phi_{gen} (rad)");
762 outputContainer->Add(fhElePhiCharged);
764 fhEleEtaCharged = new TH2F ("hEleEtaCharged","#eta reconstructed vs E generated from e^{#pm}, track matched cluster",netabins,etamin,etamax,netabins,etamin,etamax);
765 fhEleEtaCharged->SetXTitle("#eta_{rec} ");
766 fhEleEtaCharged->SetYTitle("#eta_{gen} ");
767 outputContainer->Add(fhEleEtaCharged);
769 fhNeHadECharged = new TH2F ("hNeHadECharged","E reconstructed vs E generated from neutral hadron, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
770 fhNeHadECharged->SetXTitle("E_{rec} (GeV)");
771 fhNeHadECharged->SetYTitle("E_{gen} (GeV)");
772 outputContainer->Add(fhNeHadECharged);
774 fhNeHadPtCharged = new TH2F ("hNeHadPtCharged","p_{T} reconstructed vs E generated from neutral hadron, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
775 fhNeHadPtCharged->SetXTitle("p_{T rec} (GeV/c)");
776 fhNeHadPtCharged->SetYTitle("p_{T gen} (GeV/c)");
777 outputContainer->Add(fhNeHadPtCharged);
779 fhNeHadPhiCharged = new TH2F ("hNeHadPhiCharged","#phi reconstructed vs E generated from neutral hadron, track matched cluster",nphibins,phimin,phimax,nphibins,phimin,phimax);
780 fhNeHadPhiCharged->SetXTitle("#phi_{rec} (rad)");
781 fhNeHadPhiCharged->SetYTitle("#phi_{gen} (rad)");
782 outputContainer->Add(fhNeHadPhiCharged);
784 fhNeHadEtaCharged = new TH2F ("hNeHadEtaCharged","#eta reconstructed vs E generated from neutral hadron, track matched cluster",netabins,etamin,etamax,netabins,etamin,etamax);
785 fhNeHadEtaCharged->SetXTitle("#eta_{rec} ");
786 fhNeHadEtaCharged->SetYTitle("#eta_{gen} ");
787 outputContainer->Add(fhNeHadEtaCharged);
789 fhChHadECharged = new TH2F ("hChHadECharged","E reconstructed vs E generated from charged hadron, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
790 fhChHadECharged->SetXTitle("E_{rec} (GeV)");
791 fhChHadECharged->SetYTitle("E_{gen} (GeV)");
792 outputContainer->Add(fhChHadECharged);
794 fhChHadPtCharged = new TH2F ("hChHadPtCharged","p_{T} reconstructed vs E generated from charged hadron, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
795 fhChHadPtCharged->SetXTitle("p_{T rec} (GeV/c)");
796 fhChHadPtCharged->SetYTitle("p_{T gen} (GeV/c)");
797 outputContainer->Add(fhChHadPtCharged);
799 fhChHadPhiCharged = new TH2F ("hChHadPhiCharged","#phi reconstructed vs E generated from charged hadron, track matched cluster",nphibins,phimin,phimax,nphibins,phimin,phimax);
800 fhChHadPhiCharged->SetXTitle("#phi (rad)");
801 fhChHadPhiCharged->SetXTitle("#phi_{rec} (rad)");
802 fhChHadPhiCharged->SetYTitle("#phi_{gen} (rad)");
803 outputContainer->Add(fhChHadPhiCharged);
805 fhChHadEtaCharged = new TH2F ("hChHadEtaCharged","#eta reconstructed vs E generated from charged hadron, track matched cluster",netabins,etamin,etamax,netabins,etamin,etamax);
806 fhChHadEtaCharged->SetXTitle("#eta_{rec} ");
807 fhChHadEtaCharged->SetYTitle("#eta_{gen} ");
808 outputContainer->Add(fhChHadEtaCharged);
810 //Vertex of generated particles
812 fhEMVxyz = new TH2F ("hEMVxyz","Production vertex of reconstructed ElectroMagnetic particles",100,0,500,100,0,500);//,100,0,500);
813 fhEMVxyz->SetXTitle("v_{x}");
814 fhEMVxyz->SetYTitle("v_{y}");
815 //fhEMVxyz->SetZTitle("v_{z}");
816 outputContainer->Add(fhEMVxyz);
818 fhHaVxyz = new TH2F ("hHaVxyz","Production vertex of reconstructed hadrons",100,0,500,100,0,500);//,100,0,500);
819 fhHaVxyz->SetXTitle("v_{x}");
820 fhHaVxyz->SetYTitle("v_{y}");
821 //fhHaVxyz->SetZTitle("v_{z}");
822 outputContainer->Add(fhHaVxyz);
824 fhEMR = new TH2F ("hEMR","Distance to production vertex of reconstructed ElectroMagnetic particles vs E rec",nptbins,ptmin,ptmax,100,0,500);
825 fhEMR->SetXTitle("E (GeV)");
826 fhEMR->SetYTitle("TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
827 outputContainer->Add(fhEMR);
829 fhHaR = new TH2F ("hHaR","Distance to production vertex of reconstructed Hadrons vs E rec",nptbins,ptmin,ptmax,100,0,500);
830 fhHaR->SetXTitle("E (GeV)");
831 fhHaR->SetYTitle("TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
832 outputContainer->Add(fhHaR);
837 fhGenGamPt = new TH1F("hGenGamPt" ,"p_{T} of generated #gamma",nptbins,ptmin,ptmax);
838 fhGenGamEta = new TH1F("hGenGamEta","Y of generated #gamma",netabins,etamin,etamax);
839 fhGenGamPhi = new TH1F("hGenGamPhi","#phi of generated #gamma",nphibins,phimin,phimax);
841 fhGenPi0Pt = new TH1F("hGenPi0Pt" ,"p_{T} of generated #pi^{0}",nptbins,ptmin,ptmax);
842 fhGenPi0Eta = new TH1F("hGenPi0Eta","Y of generated #pi^{0}",netabins,etamin,etamax);
843 fhGenPi0Phi = new TH1F("hGenPi0Phi","#phi of generated #pi^{0}",nphibins,phimin,phimax);
845 fhGenEtaPt = new TH1F("hGenEtaPt" ,"p_{T} of generated #eta",nptbins,ptmin,ptmax);
846 fhGenEtaEta = new TH1F("hGenEtaEta","Y of generated #eta",netabins,etamin,etamax);
847 fhGenEtaPhi = new TH1F("hGenEtaPhi","#phi of generated #eta",nphibins,phimin,phimax);
849 fhGenOmegaPt = new TH1F("hGenOmegaPt" ,"p_{T} of generated #omega",nptbins,ptmin,ptmax);
850 fhGenOmegaEta = new TH1F("hGenOmegaEta","Y of generated #omega",netabins,etamin,etamax);
851 fhGenOmegaPhi = new TH1F("hGenOmegaPhi","#phi of generated #omega",nphibins,phimin,phimax);
853 fhGenElePt = new TH1F("hGenElePt" ,"p_{T} of generated e^{#pm}",nptbins,ptmin,ptmax);
854 fhGenEleEta = new TH1F("hGenEleEta","Y of generated e^{#pm}",netabins,etamin,etamax);
855 fhGenElePhi = new TH1F("hGenElePhi","#phi of generated e^{#pm}",nphibins,phimin,phimax);
857 fhGenGamPt->SetXTitle("p_{T} (GeV/c)");
858 fhGenGamEta->SetXTitle("#eta");
859 fhGenGamPhi->SetXTitle("#phi (rad)");
860 outputContainer->Add(fhGenGamPt);
861 outputContainer->Add(fhGenGamEta);
862 outputContainer->Add(fhGenGamPhi);
864 fhGenPi0Pt->SetXTitle("p_{T} (GeV/c)");
865 fhGenPi0Eta->SetXTitle("#eta");
866 fhGenPi0Phi->SetXTitle("#phi (rad)");
867 outputContainer->Add(fhGenPi0Pt);
868 outputContainer->Add(fhGenPi0Eta);
869 outputContainer->Add(fhGenPi0Phi);
871 fhGenEtaPt->SetXTitle("p_{T} (GeV/c)");
872 fhGenEtaEta->SetXTitle("#eta");
873 fhGenEtaPhi->SetXTitle("#phi (rad)");
874 outputContainer->Add(fhGenEtaPt);
875 outputContainer->Add(fhGenEtaEta);
876 outputContainer->Add(fhGenEtaPhi);
878 fhGenOmegaPt->SetXTitle("p_{T} (GeV/c)");
879 fhGenOmegaEta->SetXTitle("#eta");
880 fhGenOmegaPhi->SetXTitle("#phi (rad)");
881 outputContainer->Add(fhGenOmegaPt);
882 outputContainer->Add(fhGenOmegaEta);
883 outputContainer->Add(fhGenOmegaPhi);
885 fhGenElePt->SetXTitle("p_{T} (GeV/c)");
886 fhGenEleEta->SetXTitle("#eta");
887 fhGenElePhi->SetXTitle("#phi (rad)");
888 outputContainer->Add(fhGenElePt);
889 outputContainer->Add(fhGenEleEta);
890 outputContainer->Add(fhGenElePhi);
892 fhGenGamAccE = new TH1F("hGenGamAccE" ,"E of generated #gamma in calorimeter acceptance",nptbins,ptmin,ptmax);
893 fhGenGamAccPt = new TH1F("hGenGamAccPt" ,"p_{T} of generated #gamma in calorimeter acceptance",nptbins,ptmin,ptmax);
894 fhGenGamAccEta = new TH1F("hGenGamAccEta","Y of generated #gamma in calorimeter acceptance",netabins,etamin,etamax);
895 fhGenGamAccPhi = new TH1F("hGenGamAccPhi","#phi of generated #gamma in calorimeter acceptance",nphibins,phimin,phimax);
897 fhGenPi0AccE = new TH1F("hGenPi0AccE" ,"E of generated #pi^{0} in calorimeter acceptance",nptbins,ptmin,ptmax);
898 fhGenPi0AccPt = new TH1F("hGenPi0AccPt" ,"p_{T} of generated #pi^{0} in calorimeter acceptance",nptbins,ptmin,ptmax);
899 fhGenPi0AccEta = new TH1F("hGenPi0AccEta","Y of generated #pi^{0} in calorimeter acceptance",netabins,etamin,etamax);
900 fhGenPi0AccPhi = new TH1F("hGenPi0AccPhi","#phi of generated #pi^{0} in calorimeter acceptance",nphibins,phimin,phimax);
902 fhGenGamAccE ->SetXTitle("E (GeV)");
903 fhGenGamAccPt ->SetXTitle("p_{T} (GeV/c)");
904 fhGenGamAccEta->SetXTitle("#eta");
905 fhGenGamAccPhi->SetXTitle("#phi (rad)");
906 outputContainer->Add(fhGenGamAccE);
907 outputContainer->Add(fhGenGamAccPt);
908 outputContainer->Add(fhGenGamAccEta);
909 outputContainer->Add(fhGenGamAccPhi);
911 fhGenPi0AccE ->SetXTitle("E (GeV)");
912 fhGenPi0AccPt ->SetXTitle("p_{T} (GeV/c)");
913 fhGenPi0AccEta->SetXTitle("#eta");
914 fhGenPi0AccPhi->SetXTitle("#phi (rad)");
915 outputContainer->Add(fhGenPi0AccE);
916 outputContainer->Add(fhGenPi0AccPt);
917 outputContainer->Add(fhGenPi0AccEta);
918 outputContainer->Add(fhGenPi0AccPhi);
922 fhMCEle1pOverE = new TH2F("hMCEle1pOverE","TRACK matches p/E, MC electrons",200,0.,100.,100,0.,10.);
923 fhMCEle1pOverE->SetYTitle("p/E");
924 fhMCEle1pOverE->SetXTitle("p_{T} (GeV/c)");
925 outputContainer->Add(fhMCEle1pOverE);
927 fhMCEle1dR = new TH1F("hMCEle1dR","TRACK matches dR, MC electrons",300, 0.,TMath::Pi());
928 fhMCEle1dR->SetXTitle("#Delta R (rad)");
929 outputContainer->Add(fhMCEle1dR) ;
931 fhMCEle2MatchdEdx = new TH2F("hMCEle2MatchdEdx","dE/dx vs. p for all matches, MC electrons",200,0.,50.,200,0.,400.);
932 fhMCEle2MatchdEdx->SetXTitle("p (GeV/c)");
933 fhMCEle2MatchdEdx->SetYTitle("<dE/dx>");
934 outputContainer->Add(fhMCEle2MatchdEdx);
936 fhMCChHad1pOverE = new TH2F("hMCChHad1pOverE","TRACK matches p/E, MC charged hadrons",200,0.,100.,100,0.,10.);
937 fhMCChHad1pOverE->SetYTitle("p/E");
938 fhMCChHad1pOverE->SetXTitle("p_{T} (GeV/c)");
939 outputContainer->Add(fhMCChHad1pOverE);
941 fhMCChHad1dR = new TH1F("hMCChHad1dR","TRACK matches dR, MC charged hadrons",300, 0.,TMath::Pi());
942 fhMCChHad1dR->SetXTitle("#Delta R (rad)");
943 outputContainer->Add(fhMCChHad1dR) ;
945 fhMCChHad2MatchdEdx = new TH2F("hMCChHad2MatchdEdx","dE/dx vs. p for all matches, MC charged hadrons",200,0.,50.,200,0.,400.);
946 fhMCChHad2MatchdEdx->SetXTitle("p (GeV/c)");
947 fhMCChHad2MatchdEdx->SetYTitle("<dE/dx>");
948 outputContainer->Add(fhMCChHad2MatchdEdx);
950 fhMCNeutral1pOverE = new TH2F("hMCNeutral1pOverE","TRACK matches p/E, MC neutrals",200,0.,100.,100,0.,10.);
951 fhMCNeutral1pOverE->SetYTitle("p/E");
952 fhMCNeutral1pOverE->SetXTitle("p_{T} (GeV/c)");
953 outputContainer->Add(fhMCNeutral1pOverE);
955 fhMCNeutral1dR = new TH1F("hMCNeutral1dR","TRACK matches dR, MC neutrals",300, 0.,TMath::Pi());
956 fhMCNeutral1dR->SetXTitle("#Delta R (rad)");
957 outputContainer->Add(fhMCNeutral1dR) ;
959 fhMCNeutral2MatchdEdx = new TH2F("hMCNeutral2MatchdEdx","dE/dx vs. p for all matches, MC neutrals",200,0.,50.,200,0.,400.);
960 fhMCNeutral2MatchdEdx->SetXTitle("p (GeV/c)");
961 fhMCNeutral2MatchdEdx->SetYTitle("<dE/dx>");
962 outputContainer->Add(fhMCNeutral2MatchdEdx);
964 fhMCEle1pOverER02 = new TH2F("hMCEle1pOverER02","TRACK matches p/E, MC electrons",200,0.,100.,100,0.,10.);
965 fhMCEle1pOverER02->SetYTitle("p/E");
966 fhMCEle1pOverER02->SetXTitle("p_{T} (GeV/c)");
967 outputContainer->Add(fhMCEle1pOverER02);
969 fhMCChHad1pOverER02 = new TH2F("hMCChHad1pOverER02","TRACK matches p/E, MC charged hadrons",200,0.,100.,100,0.,10.);
970 fhMCChHad1pOverER02->SetYTitle("p/E");
971 fhMCChHad1pOverER02->SetXTitle("p_{T} (GeV/c)");
972 outputContainer->Add(fhMCChHad1pOverER02);
974 fhMCNeutral1pOverER02 = new TH2F("hMCNeutral1pOverER02","TRACK matches p/E, MC neutrals",200,0.,100.,100,0.,10.);
975 fhMCNeutral1pOverER02->SetYTitle("p/E");
976 fhMCNeutral1pOverER02->SetXTitle("p_{T} (GeV/c)");
977 outputContainer->Add(fhMCNeutral1pOverER02);
980 return outputContainer;
983 //____________________________________________________________________________________________________________________________________________________
984 Int_t AliAnaCalorimeterQA::GetModuleNumber(AliESDCaloCluster * cluster)
986 //Get the EMCAL/PHOS module number that corresponds to this cluster
988 Double_t v[]={0.,0.,0.}; //not necessary to pass the real vertex.
989 cluster->GetMomentum(lv,v);
990 Float_t phi = lv.Phi();
991 if(phi < 0) phi+=TMath::TwoPi();
993 if(fCalorimeter=="EMCAL"){
994 fEMCALGeo->GetAbsCellIdFromEtaPhi(lv.Eta(),phi, absId);
996 printf("AliAnaCalorimeterQA::GetModuleNumber(ESD) - EMCAL: cluster eta %f, phi %f, absid %d, SuperModule %d\n",
997 lv.Eta(), phi*TMath::RadToDeg(),absId, fEMCALGeo->GetSuperModuleNumber(absId));
998 return fEMCALGeo->GetSuperModuleNumber(absId) ;
1002 if ( cluster->GetNCells() > 0) {
1003 absId = cluster->GetCellAbsId(0);
1005 printf("AliAnaCalorimeterQA::GetModuleNumber(ESD) - PHOS: cluster eta %f, phi %f, e %f, absId %d\n",
1006 lv.Eta(), phi*TMath::RadToDeg(), lv.E(), absId);
1011 fPHOSGeo->AbsToRelNumbering(absId,relId);
1013 printf("AliAnaCalorimeterQA::GetModuleNumber(ESD) - PHOS: Module %d\n",relId[0]-1);
1022 //____________________________________________________________________________________________________________________________________________________
1023 Int_t AliAnaCalorimeterQA::GetModuleNumber(AliAODCaloCluster * cluster)
1025 //Get the EMCAL/PHOS module number that corresponds to this cluster
1027 Double_t v[]={0.,0.,0.}; //not necessary to pass the real vertex.
1028 cluster->GetMomentum(lv,v);
1029 Float_t phi = lv.Phi();
1030 if(phi < 0) phi+=TMath::TwoPi();
1032 if(fCalorimeter=="EMCAL"){
1033 fEMCALGeo->GetAbsCellIdFromEtaPhi(lv.Eta(),phi, absId);
1035 printf("AliAnaCalorimeterQA::GetModuleNumber(ESD) - EMCAL: cluster eta %f, phi %f, absid %d, SuperModule %d\n",
1036 lv.Eta(), phi*TMath::RadToDeg(),absId, fEMCALGeo->GetSuperModuleNumber(absId));
1037 return fEMCALGeo->GetSuperModuleNumber(absId) ;
1041 if ( cluster->GetNCells() > 0) {
1042 absId = cluster->GetCellAbsId(0);
1044 printf("AliAnaCalorimeterQA::GetModuleNumber(AOD) - PHOS: cluster eta %f, phi %f, e %f, absId %d\n",
1045 lv.Eta(), phi*TMath::RadToDeg(), lv.E(), absId);
1050 fPHOSGeo->AbsToRelNumbering(absId,relId);
1052 printf("AliAnaCalorimeterQA::GetModuleNumber(AOD) - PHOS: Module %d\n",relId[0]-1);
1060 //____________________________________________________________________________________________________________________________________________________
1061 Int_t AliAnaCalorimeterQA::GetModuleNumberCellIndexes(const Int_t absId, Int_t & icol, Int_t & irow)
1063 //Get the EMCAL/PHOS module number that corresponds to this absId
1066 if(fCalorimeter=="EMCAL"){
1067 Int_t iTower = -1, iIphi = -1, iIeta = -1;
1068 fEMCALGeo->GetCellIndex(absId,imod,iTower,iIphi,iIeta);
1069 fEMCALGeo->GetCellPhiEtaIndexInSModule(imod,iTower,
1070 iIphi, iIeta,irow,icol);
1075 fPHOSGeo->AbsToRelNumbering(absId,relId);
1087 //__________________________________________________
1088 void AliAnaCalorimeterQA::Init()
1090 //Check if the data or settings are ok
1091 if(fCalorimeter != "PHOS" && fCalorimeter !="EMCAL"){
1092 printf("AliAnaCalorimeterQA::Init() - Wrong calorimeter name <%s>, END\n", fCalorimeter.Data());
1096 if(GetReader()->GetDataType()== AliCaloTrackReader::kMC){
1097 printf("AliAnaCalorimeterQA::Init() - Analysis of reconstructed data, MC reader not aplicable\n");
1104 //__________________________________________________
1105 void AliAnaCalorimeterQA::InitParameters()
1107 //Initialize the parameters of the analysis.
1108 AddToHistogramsName("AnaCaloQA_");
1110 fCalorimeter = "EMCAL"; //or PHOS
1112 fEMCALGeoName = "EMCAL_COMPLETE";
1113 fNModules = 12; // set maximum to maximum number of EMCAL modules
1117 //__________________________________________________________________
1118 void AliAnaCalorimeterQA::Print(const Option_t * opt) const
1120 //Print some relevant parameters set for the analysis
1124 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
1125 AliAnaPartCorrBaseClass::Print(" ");
1127 printf("Select Calorimeter %s \n",fCalorimeter.Data());
1128 printf("Make plots? %d \n",fMakePlots);
1129 printf("Plots style macro %s \n",fStyleMacro.Data());
1132 //__________________________________________________________________
1133 void AliAnaCalorimeterQA::MakeAnalysisFillHistograms()
1135 //Fill Calorimeter QA histograms
1137 TLorentzVector mom ;
1138 TLorentzVector mom2 ;
1139 TRefArray * caloClusters = new TRefArray();
1142 Int_t nCaloClusters = 0;
1143 Int_t nCaloCellsPerCluster = 0;
1144 Int_t nTracksMatched = 0;
1145 Int_t trackIndex = 0;
1148 //Play with the MC stack if available
1149 //Get the MC arrays and do some checks
1151 if(GetReader()->ReadStack()){
1154 printf("AliAnaPhoton::MakeAnalysisFillHistograms() - Stack not available, is the MC handler called? STOP\n");
1157 //Fill some pure MC histograms, only primaries.
1158 for(Int_t i=0 ; i<GetMCStack()->GetNprimary(); i++){//Only primary particles, for all MC transport put GetNtrack()
1159 TParticle *primary = GetMCStack()->Particle(i) ;
1160 //printf("i %d, %s: status = %d, primary? %d\n",i, primary->GetName(), primary->GetStatusCode(), primary->IsPrimary());
1161 if (primary->GetStatusCode() > 11) continue; //Working for PYTHIA and simple generators, check for HERWIG
1162 primary->Momentum(mom);
1163 MCHistograms(mom,TMath::Abs(primary->GetPdgCode()));
1166 else if(GetReader()->ReadAODMCParticles()){
1168 if(!GetReader()->GetAODMCParticles(0)) {
1169 printf("AliAnaPhoton::MakeAnalysisFillHistograms() - AODMCParticles not available!\n");
1172 //Fill some pure MC histograms, only primaries.
1173 for(Int_t i=0 ; i < (GetReader()->GetAODMCParticles(0))->GetEntriesFast(); i++){
1174 AliAODMCParticle *aodprimary = (AliAODMCParticle*) (GetReader()->GetAODMCParticles(0))->At(i) ;
1175 //printf("i %d, %s: primary? %d physical primary? %d, flag %d\n",
1176 // i,(TDatabasePDG::Instance()->GetParticle(aodprimary->GetPdgCode()))->GetName(),
1177 // aodprimary->IsPrimary(), aodprimary->IsPhysicalPrimary(), aodprimary->GetFlag());
1178 if (!aodprimary->IsPrimary()) continue; //accept all which is not MC transport generated. Don't know how to avoid partons
1179 //aodprimary->Momentum(mom);
1180 mom.SetPxPyPzE(aodprimary->Px(),aodprimary->Py(),aodprimary->Pz(),aodprimary->E());
1181 MCHistograms(mom,TMath::Abs(aodprimary->GetPdgCode()));
1188 //Get List with CaloClusters
1190 if(GetReader()->GetDataType()==AliCaloTrackReader::kESD) {
1191 if (fCalorimeter == "EMCAL") ((AliESDEvent*)GetReader()->GetInputEvent())->GetEMCALClusters(caloClusters);//GetAODEMCAL();
1192 else if(fCalorimeter == "PHOS") ((AliESDEvent*)GetReader()->GetInputEvent())->GetPHOSClusters (caloClusters);//GetAODPHOS();
1194 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Wrong calorimeter name <%s>, END\n", fCalorimeter.Data());
1198 else if(GetReader()->GetDataType()==AliCaloTrackReader::kAOD) {
1199 if (fCalorimeter == "EMCAL") ((AliAODEvent*)GetReader()->GetInputEvent())->GetEMCALClusters(caloClusters);//GetAODEMCAL();
1200 else if(fCalorimeter == "PHOS") ((AliAODEvent*)GetReader()->GetInputEvent())->GetPHOSClusters (caloClusters);//GetAODPHOS();
1202 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Wrong calorimeter name <%s>, END\n", fCalorimeter.Data());
1208 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - No CaloClusters available\n");
1212 //Correlate Calorimeters
1213 if(fCorrelateCalos) CorrelateCalorimeters(caloClusters);
1215 nCaloClusters = caloClusters->GetEntriesFast() ;
1216 fhNClusters->Fill(nCaloClusters);
1217 Int_t *nClustersInModule = new Int_t[fNModules];
1218 for(Int_t imod = 0; imod < fNModules; imod++ ) nClustersInModule[imod] = 0;
1221 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - In %s there are %d clusters \n", fCalorimeter.Data(), nCaloClusters);
1223 //Get vertex for photon momentum calculation
1224 Double_t v[3] ; //vertex ;
1225 GetReader()->GetVertex(v);
1226 TObject * track = 0x0;
1227 //Loop over CaloClusters
1228 for(Int_t iclus = 0; iclus < nCaloClusters; iclus++){
1230 if(GetDebug() > 0) printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - cluster: %d/%d, data %d \n",
1231 iclus+1,nCaloClusters,GetReader()->GetDataType());
1233 if(GetReader()->GetDataType()==AliCaloTrackReader::kESD){
1234 AliESDCaloCluster* clus = (AliESDCaloCluster*) (caloClusters->At(iclus));
1235 //Get cluster kinematics
1236 clus->GetMomentum(mom,v);
1237 //Get module of cluster
1238 nModule = GetModuleNumber(clus);
1239 if(nModule < fNModules) nClustersInModule[nModule]++;
1241 nLabel = clus->GetNLabels();
1242 if(clus->GetLabels()) labels = (clus->GetLabels())->GetArray();
1244 nCaloCellsPerCluster = clus->GetNCells();
1245 //matched cluster with tracks
1246 nTracksMatched = clus->GetNTracksMatched();
1247 trackIndex = clus->GetTrackMatched();
1248 if(trackIndex >= 0){
1249 track = (AliESDtrack*) ((AliESDEvent*)GetReader()->GetInputEvent())->GetTrack(trackIndex);
1252 if(nTracksMatched == 1) nTracksMatched = 0;
1257 AliAODCaloCluster* clus = (AliAODCaloCluster*) (caloClusters->At(iclus));
1259 //Get cluster kinematics
1260 clus->GetMomentum(mom,v);
1261 //Get module of cluster
1262 nModule = GetModuleNumber(clus);
1263 if(nModule < fNModules) nClustersInModule[nModule]++;
1265 nLabel = clus->GetNLabel();
1266 if(clus->GetLabels()) labels = clus->GetLabels();
1268 nCaloCellsPerCluster = clus->GetNCells();
1269 //matched cluster with tracks
1270 nTracksMatched = clus->GetNTracksMatched();
1271 if(nTracksMatched > 0)
1272 track = (AliAODTrack*)clus->GetTrackMatched(0);
1275 //Fill histograms related to single cluster or track matching
1276 ClusterHistograms(mom, nCaloCellsPerCluster, nModule, nTracksMatched, track, labels, nLabel);
1277 if(GetDebug()>1) printf("Invariant mass \n");
1279 Int_t nModule2 = -1;
1280 Int_t nCaloCellsPerCluster2=0;
1281 if (nCaloClusters > 1 ) {
1282 for(Int_t jclus = iclus + 1 ; jclus < nCaloClusters-1 ; jclus++) {
1283 if(GetReader()->GetDataType()==AliCaloTrackReader::kESD){
1284 AliESDCaloCluster* clus2 = (AliESDCaloCluster*) (caloClusters->At(jclus));
1285 //Get cluster kinematics
1286 clus2->GetMomentum(mom2,v);
1287 //Get module of cluster
1288 nModule2 = GetModuleNumber(clus2);
1290 nCaloCellsPerCluster2 = clus2->GetNCells();
1293 if(GetReader()->GetDataType()==AliCaloTrackReader::kAOD){
1294 AliAODCaloCluster* clus2 = (AliAODCaloCluster*) (caloClusters->At(jclus));
1295 //Get cluster kinematics
1296 clus2->GetMomentum(mom2,v);
1297 //Get module of cluster
1298 nModule2 = GetModuleNumber(clus2);
1300 nCaloCellsPerCluster2 = clus2->GetNCells();
1303 fhIM ->Fill((mom+mom2).E(),(mom+mom2).M());
1304 fhIMMod[nModule]->Fill((mom+mom2).E(),(mom+mom2).M());
1305 if(nCaloCellsPerCluster > 1 && nCaloCellsPerCluster2 > 1) {
1306 fhIMCellCut ->Fill((mom+mom2).E(),(mom+mom2).M());
1307 if(nModule < fNModules) fhIMCellCutMod[nModule]->Fill((mom+mom2).E(),(mom+mom2).M());
1309 fhAsym->Fill((mom+mom2).E(),TMath::Abs((mom.E()-mom2.E())/(mom.E()+mom2.E())));
1311 }// 2nd cluster loop
1312 }////more than 1 cluster in calorimeter
1315 //Number of clusters per module
1316 for(Int_t imod = 0; imod < fNModules; imod++ ){
1318 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - module %d calo %s clusters %d\n", imod, fCalorimeter.Data(), nClustersInModule[imod]);
1319 fhNClustersMod[imod]->Fill(nClustersInModule[imod]);
1323 Int_t *nCellsInModule = new Int_t[fNModules];
1324 for(Int_t imod = 0; imod < fNModules; imod++ ) nCellsInModule[imod] = 0;
1328 if(GetReader()->GetDataType()==AliCaloTrackReader::kESD){
1329 AliESDCaloCells * cell = 0x0;
1331 if(fCalorimeter == "PHOS") cell = ((AliESDEvent*)GetReader()->GetInputEvent())->GetPHOSCells();
1332 else cell = ((AliESDEvent*)GetReader()->GetInputEvent())->GetEMCALCells();
1335 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - STOP: No CELLS available for analysis");
1339 ncells = cell->GetNumberOfCells() ;
1340 fhNCells->Fill(ncells) ;
1342 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - In ESD %s cell entries %d\n", fCalorimeter.Data(), ncells);
1344 for (Int_t iCell = 0; iCell < ncells; iCell++) {
1345 if(GetDebug() > 2) printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Cell : amp %f, absId %d \n", cell->GetAmplitude(iCell), cell->GetCellNumber(iCell));
1346 nModule = GetModuleNumberCellIndexes(cell->GetCellNumber(iCell), icol, irow);
1347 if(GetDebug() > 2) printf("\t module %d, column %d, row %d \n", nModule,icol,irow);
1348 amp = cell->GetAmplitude(iCell);
1349 fhAmplitude->Fill(amp);
1350 fhAmplitudeMod[nModule]->Fill(cell->GetAmplitude(iCell));
1351 nCellsInModule[nModule]++;
1352 fhGridCellsMod[nModule]->Fill(icol,irow);
1353 fhGridCellsEMod[nModule]->Fill(icol,irow,amp);
1358 AliAODCaloCells * cell = 0x0;
1361 if(fCalorimeter == "PHOS") cell = ((AliAODEvent*)GetReader()->GetInputEvent())->GetPHOSCells();
1362 else cell = ((AliAODEvent*)GetReader()->GetInputEvent())->GetEMCALCells();
1365 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - STOP: No CELLS available for analysis");
1369 ncells = cell->GetNumberOfCells() ;
1370 fhNCells->Fill(ncells) ;
1372 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - In ESD %s cell entries %d\n", fCalorimeter.Data(), ncells);
1374 for (Int_t iCell = 0; iCell < ncells; iCell++) {
1375 if(GetDebug() > 2 ) printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Cell : amp %f, absId %d \n", cell->GetAmplitude(iCell), cell->GetCellNumber(iCell));
1376 nModule = GetModuleNumberCellIndexes(cell->GetCellNumber(iCell), icol, irow);
1377 if(GetDebug() > 2) printf("\t module %d, column %d, row %d \n", nModule,icol,irow);
1378 amp = cell->GetAmplitude(iCell);
1379 fhAmplitude->Fill(amp);
1380 if(nModule < fNModules) {
1381 fhAmplitudeMod[nModule]->Fill(cell->GetAmplitude(iCell));
1382 nCellsInModule[nModule]++;
1383 fhGridCellsMod[nModule]->Fill(icol,irow);
1384 fhGridCellsEMod[nModule]->Fill(icol,irow,amp);
1390 //Number of cells per module
1391 for(Int_t imod = 0; imod < fNModules; imod++ ) {
1393 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - module %d calo %s cells %d\n", imod, fCalorimeter.Data(), nCellsInModule[imod]);
1394 fhNCellsMod[imod]->Fill(nCellsInModule[imod]) ;
1398 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - End \n");
1402 //__________________________________
1403 void AliAnaCalorimeterQA::ClusterHistograms(const TLorentzVector mom, const Int_t nCaloCellsPerCluster,const Int_t nModule,
1404 const Int_t nTracksMatched, const TObject * track,
1405 const Int_t * labels, const Int_t nLabels){
1406 //Fill CaloCluster related histograms
1408 AliAODMCParticle * aodprimary = 0x0;
1409 TParticle * primary = 0x0;
1412 Float_t e = mom.E();
1413 Float_t pt = mom.Pt();
1414 Float_t eta = mom.Eta();
1415 Float_t phi = mom.Phi();
1416 if(phi < 0) phi +=TMath::TwoPi();
1417 if(GetDebug() > 0) {
1418 printf("AliAnaCalorimeterQA::ClusterHistograms() - cluster: E %2.3f, pT %2.3f, eta %2.3f, phi %2.3f \n",e,pt,eta,phi*TMath::RadToDeg());
1420 //printf("\t Primaries: nlabels %d, labels pointer %p\n",nLabels,labels);
1421 printf("\t Primaries: nlabels %d\n",nLabels);
1422 if(!nLabels || !labels) printf("\t Strange, no labels!!!\n");
1427 if(nModule < fNModules) fhEMod[nModule]->Fill(e);
1431 fhEtaPhi->Fill(eta,phi);
1432 fhEtaPhiE->Fill(eta,phi,e);
1434 fhNCellsPerCluster->Fill(e, nCaloCellsPerCluster);
1435 if(nModule < fNModules) fhNCellsPerClusterMod[nModule]->Fill(e, nCaloCellsPerCluster);
1437 //Fill histograms only possible when simulation
1438 if(IsDataMC() && nLabels > 0 && labels){
1440 //Play with the MC stack if available
1441 Int_t label = labels[0];
1444 if(GetDebug() >= 0) printf("AliAnaCalorimeterQA::ClusterHistograms() *** bad label ***: label %d \n", label);
1448 Int_t pdg =-1; Int_t pdg0 =-1;Int_t status = -1; Int_t iMother = -1; Int_t iParent = -1;
1449 Float_t vxMC= 0; Float_t vyMC = 0;
1450 Float_t eMC = 0; Float_t ptMC= 0; Float_t phiMC =0; Float_t etaMC = 0;
1454 tag = GetMCAnalysisUtils()->CheckOrigin(labels,nLabels, GetReader(),0);
1456 if(GetReader()->ReadStack() && !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCUnknown)){ //it MC stack and known tag
1458 if( label >= GetMCStack()->GetNtrack()) {
1459 if(GetDebug() >= 0) printf("AliAnaCalorimeterQA::ClusterHistograms() *** large label ***: label %d, n tracks %d \n", label, GetMCStack()->GetNtrack());
1463 primary = GetMCStack()->Particle(label);
1465 pdg0 = TMath::Abs(primary->GetPdgCode());
1467 status = primary->GetStatusCode();
1468 vxMC = primary->Vx();
1469 vyMC = primary->Vy();
1470 iParent = primary->GetFirstMother();
1472 if(GetDebug() > 1 ) {
1473 printf("AliAnaCalorimeterQA::ClusterHistograms() - Cluster most contributing mother: \n");
1474 printf("\t Mother label %d, pdg %d, %s, status %d, parent %d \n",iMother, pdg0, primary->GetName(),status, iParent);
1477 //Get final particle, no conversion products
1478 if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCConversion)){
1480 primary = GetMCStack()->Particle(iParent);
1481 pdg = TMath::Abs(primary->GetPdgCode());
1482 if(GetDebug() > 1 ) printf("AliAnaCalorimeterQA::ClusterHistograms() - Converted cluster!. Find before conversion: \n");
1483 while((pdg == 22 || pdg == 11) && status != 1){
1485 primary = GetMCStack()->Particle(iMother);
1486 status = primary->GetStatusCode();
1487 iParent = primary->GetFirstMother();
1488 pdg = TMath::Abs(primary->GetPdgCode());
1489 if(GetDebug() > 1 )printf("\t pdg %d, index %d, %s, status %d \n",pdg, iMother, primary->GetName(),status);
1492 if(GetDebug() > 1 ) {
1493 printf("AliAnaCalorimeterQA::ClusterHistograms() - Converted Cluster mother before conversion: \n");
1494 printf("\t Mother label %d, pdg %d, %s, status %d, parent %d \n",iMother, pdg, primary->GetName(), status, iParent);
1499 //Overlapped pi0 (or eta, there will be very few), get the meson
1500 if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPi0) ||
1501 GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCEta)){
1502 if(GetDebug() > 1 ) printf("AliAnaCalorimeterQA::ClusterHistograms() - Overlapped Meson decay!, Find it: \n");
1503 while(pdg != 111 && pdg != 221){
1505 primary = GetMCStack()->Particle(iMother);
1506 status = primary->GetStatusCode();
1507 iParent = primary->GetFirstMother();
1508 pdg = TMath::Abs(primary->GetPdgCode());
1509 if(GetDebug() > 1 ) printf("\t pdg %d, %s, index %d\n",pdg, primary->GetName(),iMother);
1511 printf("AliAnaCalorimeterQA::ClusterHistograms() - Tagged as Overlapped photon but meson not found, why?\n");
1516 if(GetDebug() > 2 ) printf("AliAnaCalorimeterQA::ClusterHistograms() - Overlapped %s decay, label %d \n",
1517 primary->GetName(),iMother);
1520 eMC = primary->Energy();
1521 ptMC = primary->Pt();
1522 phiMC = primary->Phi();
1523 etaMC = primary->Eta();
1524 pdg = TMath::Abs(primary->GetPdgCode());
1525 charge = (Int_t) TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
1528 else if(GetReader()->ReadAODMCParticles() && !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCUnknown)){//it MC AOD and known tag
1529 //Get the list of MC particles
1530 if(!GetReader()->GetAODMCParticles(0)) {
1531 printf("AliAnaCalorimeterQA::ClusterHistograms() - MCParticles not available!\n");
1535 aodprimary = (AliAODMCParticle*) (GetReader()->GetAODMCParticles(0))->At(label);
1537 pdg0 = TMath::Abs(aodprimary->GetPdgCode());
1539 status = aodprimary->IsPrimary();
1540 vxMC = aodprimary->Xv();
1541 vyMC = aodprimary->Yv();
1542 iParent = aodprimary->GetMother();
1544 if(GetDebug() > 1 ) {
1545 printf("AliAnaCalorimeterQA::ClusterHistograms() - Cluster most contributing mother: \n");
1546 printf("\t Mother label %d, pdg %d, Primary? %d, Physical Primary? %d, parent %d \n",
1547 iMother, pdg0, aodprimary->IsPrimary(), aodprimary->IsPhysicalPrimary(), iParent);
1550 //Get final particle, no conversion products
1551 if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCConversion)){
1553 printf("AliAnaCalorimeterQA::ClusterHistograms() - Converted cluster!. Find before conversion: \n");
1555 aodprimary = (AliAODMCParticle*)(GetReader()->GetAODMCParticles(0))->At(iParent);
1556 pdg = TMath::Abs(aodprimary->GetPdgCode());
1557 while ((pdg == 22 || pdg == 11) && !aodprimary->IsPhysicalPrimary()) {
1559 aodprimary = (AliAODMCParticle*)(GetReader()->GetAODMCParticles(0))->At(iMother);
1560 status = aodprimary->IsPrimary();
1561 iParent = aodprimary->GetMother();
1562 pdg = TMath::Abs(aodprimary->GetPdgCode());
1564 printf("\t pdg %d, index %d, Primary? %d, Physical Primary? %d \n",
1565 pdg, iMother, aodprimary->IsPrimary(), aodprimary->IsPhysicalPrimary());
1568 if(GetDebug() > 1 ) {
1569 printf("AliAnaCalorimeterQA::ClusterHistograms() - Converted Cluster mother before conversion: \n");
1570 printf("\t Mother label %d, pdg %d, parent %d, Primary? %d, Physical Primary? %d \n",
1571 iMother, pdg, iParent, aodprimary->IsPrimary(), aodprimary->IsPhysicalPrimary());
1576 //Overlapped pi0 (or eta, there will be very few), get the meson
1577 if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPi0) ||
1578 GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCEta)){
1579 if(GetDebug() > 1 ) printf("AliAnaCalorimeterQA::ClusterHistograms() - Overlapped Meson decay!, Find it: PDG %d, mom %d \n",pdg, iMother);
1580 while(pdg != 111 && pdg != 221){
1583 aodprimary = (AliAODMCParticle*)(GetReader()->GetAODMCParticles(0))->At(iMother);
1584 status = aodprimary->IsPrimary();
1585 iParent = aodprimary->GetMother();
1586 pdg = TMath::Abs(aodprimary->GetPdgCode());
1588 if(GetDebug() > 1 ) printf("\t pdg %d, index %d\n",pdg, iMother);
1591 printf("AliAnaCalorimeterQA::ClusterHistograms() - Tagged as Overlapped photon but meson not found, why?\n");
1596 if(GetDebug() > 2 ) printf("AliAnaCalorimeterQA::ClusterHistograms() - Overlapped %s decay, label %d \n",
1597 aodprimary->GetName(),iMother);
1600 status = aodprimary->IsPrimary();
1601 eMC = aodprimary->E();
1602 ptMC = aodprimary->Pt();
1603 phiMC = aodprimary->Phi();
1604 etaMC = aodprimary->Eta();
1605 pdg = TMath::Abs(aodprimary->GetPdgCode());
1606 charge = aodprimary->Charge();
1610 //Float_t vz = primary->Vz();
1611 Float_t r = TMath::Sqrt(vxMC*vxMC + vyMC*vyMC);
1612 if((pdg == 22 || TMath::Abs(pdg)==11) && status!=1) {
1613 fhEMVxyz ->Fill(vxMC,vyMC);//,vz);
1617 //printf("reco e %f, pt %f, phi %f, eta %f \n", e, pt, phi, eta);
1618 //printf("prim e %f, pt %f, phi %f, eta %f \n", eMC,ptMC,phiMC ,etaMC );
1619 //printf("vertex: vx %f, vy %f, vz %f, r %f \n", vxMC, vyMC, vz, r);
1622 fh2E ->Fill(e, eMC);
1623 fh2Pt ->Fill(pt, ptMC);
1624 fh2Phi ->Fill(phi, phiMC);
1625 fh2Eta ->Fill(eta, etaMC);
1626 fhDeltaE ->Fill(eMC-e);
1627 fhDeltaPt ->Fill(ptMC-pt);
1628 fhDeltaPhi->Fill(phiMC-phi);
1629 fhDeltaEta->Fill(etaMC-eta);
1630 if(eMC > 0) fhRatioE ->Fill(e/eMC);
1631 if(ptMC > 0) fhRatioPt ->Fill(pt/ptMC);
1632 if(phiMC > 0) fhRatioPhi->Fill(phi/phiMC);
1633 if(etaMC > 0) fhRatioEta->Fill(eta/etaMC);
1636 //Overlapped pi0 (or eta, there will be very few)
1637 if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPi0) ||
1638 GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCEta)){
1639 //cout<<"Fill pi0"<< "E "<< e <<" prim E "<<eMC<<endl;
1640 fhPi0E ->Fill(e,eMC);
1641 fhPi0Pt ->Fill(pt,ptMC);
1642 fhPi0Eta ->Fill(eta,etaMC);
1643 fhPi0Phi ->Fill(phi,phiMC);
1644 if( nTracksMatched > 0){
1645 fhPi0ECharged ->Fill(e,eMC);
1646 fhPi0PtCharged ->Fill(pt,ptMC);
1647 fhPi0PhiCharged ->Fill(phi,phiMC);
1648 fhPi0EtaCharged ->Fill(eta,etaMC);
1650 }//Overlapped pizero decay
1651 else if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPhoton)){
1652 fhGamE ->Fill(e,eMC);
1653 fhGamPt ->Fill(pt,ptMC);
1654 fhGamEta ->Fill(eta,etaMC);
1655 fhGamPhi ->Fill(phi,phiMC);
1656 fhGamDeltaE ->Fill(eMC-e);
1657 fhGamDeltaPt ->Fill(ptMC-pt);
1658 fhGamDeltaPhi->Fill(phiMC-phi);
1659 fhGamDeltaEta->Fill(etaMC-eta);
1660 if(eMC > 0) fhGamRatioE ->Fill(e/eMC);
1661 if(ptMC > 0) fhGamRatioPt ->Fill(pt/ptMC);
1662 if(phiMC > 0) fhGamRatioPhi->Fill(phi/phiMC);
1663 if(etaMC > 0) fhGamRatioEta->Fill(eta/etaMC);
1664 if( nTracksMatched > 0){
1665 fhGamECharged ->Fill(e,eMC);
1666 fhGamPtCharged ->Fill(pt,ptMC);
1667 fhGamPhiCharged ->Fill(phi,phiMC);
1668 fhGamEtaCharged ->Fill(eta,etaMC);
1671 else if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCElectron)){
1672 fhEleE ->Fill(e,eMC);
1673 fhElePt ->Fill(pt,ptMC);
1674 fhEleEta ->Fill(eta,etaMC);
1675 fhElePhi ->Fill(phi,phiMC);
1676 fhEMVxyz ->Fill(vxMC,vyMC);//,vz);
1678 if( nTracksMatched > 0){
1679 fhEleECharged ->Fill(e,eMC);
1680 fhElePtCharged ->Fill(pt,ptMC);
1681 fhElePhiCharged ->Fill(phi,phiMC);
1682 fhEleEtaCharged ->Fill(eta,etaMC);
1685 else if(charge == 0){
1686 fhNeHadE ->Fill(e,eMC);
1687 fhNeHadPt ->Fill(pt,ptMC);
1688 fhNeHadEta ->Fill(eta,etaMC);
1689 fhNeHadPhi ->Fill(phi,phiMC);
1690 fhHaVxyz ->Fill(vxMC,vyMC);//,vz);
1692 if( nTracksMatched > 0){
1693 fhNeHadECharged ->Fill(e,eMC);
1694 fhNeHadPtCharged ->Fill(pt,ptMC);
1695 fhNeHadPhiCharged ->Fill(phi,phiMC);
1696 fhNeHadEtaCharged ->Fill(eta,etaMC);
1700 fhChHadE ->Fill(e,eMC);
1701 fhChHadPt ->Fill(pt,ptMC);
1702 fhChHadEta ->Fill(eta,etaMC);
1703 fhChHadPhi ->Fill(phi,phiMC);
1704 fhHaVxyz ->Fill(vxMC,vyMC);//,vz);
1706 if( nTracksMatched > 0){
1707 fhChHadECharged ->Fill(e,eMC);
1708 fhChHadPtCharged ->Fill(pt,ptMC);
1709 fhChHadPhiCharged ->Fill(phi,phiMC);
1710 fhChHadEtaCharged ->Fill(eta,etaMC);
1716 //Match tracks and clusters
1717 //To be Modified in case of AODs
1719 //if(ntracksmatched==1 && trackIndex==-1) ntracksmatched=0;
1721 if( nTracksMatched > 0){
1722 fhECharged ->Fill(e);
1723 fhPtCharged ->Fill(pt);
1724 fhPhiCharged ->Fill(phi);
1725 fhEtaCharged ->Fill(eta);
1726 fhEtaPhiCharged->Fill(eta,phi);
1728 //printf("track index %d ntracks %d\n", esd->GetNumberOfTracks());
1729 //Study the track and matched cluster if track exists.
1731 Double_t emcpos[3] = {0.,0.,0.};
1732 Double_t emcmom[3] = {0.,0.,0.};
1733 Double_t radius = 441.0; //[cm] EMCAL radius +13cm
1734 Double_t bfield = 0.;
1740 Double_t tpcSignal = 0;
1741 Bool_t okpos = kFALSE;
1742 Bool_t okmom = kFALSE;
1743 Bool_t okout = kFALSE;
1747 //In case of ESDs get the parameters in this way
1748 if(GetReader()->GetDataType()==AliCaloTrackReader::kESD) {
1749 if (((AliESDtrack*)track)->GetOuterParam() ) {
1752 bfield = ((AliESDEvent*)GetReader()->GetInputEvent())->GetMagneticField();
1753 okpos = ((AliESDtrack*)track)->GetOuterParam()->GetXYZAt(radius,bfield,emcpos);
1754 okmom = ((AliESDtrack*)track)->GetOuterParam()->GetPxPyPzAt(radius,bfield,emcmom);
1755 if(!(okpos && okmom)) return;
1757 TVector3 position(emcpos[0],emcpos[1],emcpos[2]);
1758 TVector3 momentum(emcmom[0],emcmom[1],emcmom[2]);
1759 tphi = position.Phi();
1760 teta = position.Eta();
1761 tmom = momentum.Mag();
1763 //Double_t tphi = ((AliESDtrack*)track)->GetOuterParam()->Phi();
1764 //Double_t teta = ((AliESDtrack*)track)->GetOuterParam()->Eta();
1765 //Double_t tmom = ((AliESDtrack*)track)->GetOuterParam()->P();
1766 tpt = ((AliESDtrack*)track)->Pt();
1767 tmom2 = ((AliESDtrack*)track)->P();
1768 tpcSignal = ((AliESDtrack*)track)->GetTPCsignal();
1770 nITS = ((AliESDtrack*)track)->GetNcls(0);
1771 nTPC = ((AliESDtrack*)track)->GetNcls(1);
1772 }//Outer param available
1774 else if(GetReader()->GetDataType()==AliCaloTrackReader::kAOD) {
1775 AliAODPid* pid = (AliAODPid*) ((AliAODTrack *) track)->GetDetPid();
1778 pid->GetEMCALPosition(emcpos);
1779 pid->GetEMCALMomentum(emcmom);
1781 TVector3 position(emcpos[0],emcpos[1],emcpos[2]);
1782 TVector3 momentum(emcmom[0],emcmom[1],emcmom[2]);
1783 tphi = position.Phi();
1784 teta = position.Eta();
1785 tmom = momentum.Mag();
1787 tpt = ((AliAODTrack*)track)->Pt();
1788 tmom2 = ((AliAODTrack*)track)->P();
1789 tpcSignal = pid->GetTPCsignal();
1791 //nITS = ((AliAODTrack*)track)->GetNcls(0);
1792 //nTPC = ((AliAODTrack*)track)->GetNcls(1);
1793 }//Outer param available
1795 else return; //Do nothing case not implemented.
1798 Double_t deta = teta - eta;
1799 Double_t dphi = tphi - phi;
1800 if(dphi > TMath::Pi()) dphi -= 2*TMath::Pi();
1801 if(dphi < -TMath::Pi()) dphi += 2*TMath::Pi();
1802 Double_t dR = sqrt(dphi*dphi + deta*deta);
1804 Double_t pOverE = tmom/e;
1806 fh1pOverE->Fill(tpt, pOverE);
1807 if(dR < 0.02) fh1pOverER02->Fill(tpt,pOverE);
1810 fh2MatchdEdx->Fill(tmom2,tpcSignal);
1812 if(IsDataMC() && primary){
1813 Int_t pdg = primary->GetPdgCode();
1814 Double_t charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
1816 if(TMath::Abs(pdg) == 11){
1817 fhMCEle1pOverE->Fill(tpt,pOverE);
1818 fhMCEle1dR->Fill(dR);
1819 fhMCEle2MatchdEdx->Fill(tmom2,tpcSignal);
1820 if(dR < 0.02) fhMCEle1pOverER02->Fill(tpt,pOverE);
1823 fhMCChHad1pOverE->Fill(tpt,pOverE);
1824 fhMCChHad1dR->Fill(dR);
1825 fhMCChHad2MatchdEdx->Fill(tmom2,tpcSignal);
1826 if(dR < 0.02) fhMCChHad1pOverER02->Fill(tpt,pOverE);
1828 else if(charge == 0){
1829 fhMCNeutral1pOverE->Fill(tpt,pOverE);
1830 fhMCNeutral1dR->Fill(dR);
1831 fhMCNeutral2MatchdEdx->Fill(tmom2,tpcSignal);
1832 if(dR < 0.02) fhMCNeutral1pOverER02->Fill(tpt,pOverE);
1836 if(dR < 0.02 && pOverE > 0.5 && pOverE < 1.5
1837 && nCaloCellsPerCluster > 1 && nITS > 3 && nTPC > 20) {
1838 fh2EledEdx->Fill(tmom2,tpcSignal);
1841 else{//no ESD external param or AODPid
1842 ULong_t status=AliESDtrack::kTPCrefit;
1843 status|=AliESDtrack::kITSrefit;
1844 //printf("track status %d\n", track->GetStatus() );
1845 fhEChargedNoOut ->Fill(e);
1846 fhPtChargedNoOut ->Fill(pt);
1847 fhPhiChargedNoOut ->Fill(phi);
1848 fhEtaChargedNoOut ->Fill(eta);
1849 fhEtaPhiChargedNoOut ->Fill(eta,phi);
1850 if(GetDebug() >= 0 && ((((AliESDtrack*)track)->GetStatus() & status) == status)) printf("ITS+TPC\n");
1852 }//matched clusters with tracks
1856 //__________________________________
1857 void AliAnaCalorimeterQA::CorrelateCalorimeters(TRefArray* refArray){
1858 // Correlate information from PHOS and EMCAL
1859 TRefArray * caloClustersEMCAL = new TRefArray;
1860 TRefArray * caloClustersPHOS = new TRefArray;
1862 // Get once the array of clusters per calorimeter, avoid an extra loop.
1863 if(GetReader()->GetDataType()==AliCaloTrackReader::kESD) {
1864 if(fCalorimeter == "EMCAL"){
1865 ((AliESDEvent*)GetReader()->GetInputEvent())->GetPHOSClusters(caloClustersPHOS);
1866 caloClustersEMCAL = refArray;
1868 else if(fCalorimeter == "PHOS") {
1869 ((AliESDEvent*)GetReader()->GetInputEvent())->GetEMCALClusters (caloClustersEMCAL);
1870 caloClustersEMCAL = refArray;
1873 //Fill histograms with clusters
1875 fhCaloCorrNClusters->Fill(caloClustersEMCAL->GetEntriesFast(),caloClustersPHOS->GetEntriesFast());
1876 Float_t sumClusterEnergyEMCAL = 0;
1877 Float_t sumClusterEnergyPHOS = 0;
1879 for(iclus = 0 ; iclus < caloClustersEMCAL->GetEntriesFast() ; iclus++)
1880 sumClusterEnergyEMCAL += ((AliESDCaloCluster*) (caloClustersEMCAL->At(iclus)))->E();
1881 for(iclus = 0 ; iclus < caloClustersPHOS->GetEntriesFast(); iclus++)
1882 sumClusterEnergyPHOS += ((AliESDCaloCluster*) (caloClustersPHOS->At(iclus)))->E();
1883 fhCaloCorrEClusters->Fill(sumClusterEnergyEMCAL,sumClusterEnergyPHOS);
1885 //Fill histograms with cells
1887 AliESDCaloCells * cellsEMCAL = ((AliESDEvent*)GetReader()->GetInputEvent())->GetEMCALCells();
1888 AliESDCaloCells * cellsPHOS = ((AliESDEvent*)GetReader()->GetInputEvent())->GetPHOSCells();
1889 fhCaloCorrNCells ->Fill(cellsEMCAL->GetNumberOfCells(),cellsPHOS->GetNumberOfCells());
1892 Float_t sumCellEnergyEMCAL = 0;
1893 Float_t sumCellEnergyPHOS = 0;
1894 for(icell = 0 ; icell < cellsEMCAL->GetNumberOfCells() ; icell++)
1895 sumCellEnergyEMCAL += cellsEMCAL->GetAmplitude(icell);
1896 for(icell = 0 ; icell < cellsPHOS->GetNumberOfCells(); icell++)
1897 sumCellEnergyPHOS += cellsPHOS->GetAmplitude(icell);
1898 fhCaloCorrECells->Fill(sumCellEnergyEMCAL,sumCellEnergyPHOS);
1899 if(GetDebug() > 0 ){
1900 printf("AliAnaCalorimeterQA::CorrelateCalorimeters() - ESD: \n");
1901 printf("\t EMCAL: N cells %d, N clusters %d, summed E cells %f, summed E clusters %f \n",
1902 cellsEMCAL->GetNumberOfCells(),caloClustersEMCAL->GetEntriesFast(),sumCellEnergyEMCAL,sumClusterEnergyEMCAL);
1903 printf("\t PHOS : N cells %d, N clusters %d, summed E cells %f, summed E clusters %f \n",
1904 cellsPHOS->GetNumberOfCells(),caloClustersPHOS->GetEntriesFast(),sumCellEnergyPHOS,sumClusterEnergyPHOS);
1907 else if(GetReader()->GetDataType()==AliCaloTrackReader::kAOD) {
1908 if(fCalorimeter == "EMCAL"){
1909 ((AliAODEvent*)GetReader()->GetInputEvent())->GetPHOSClusters(caloClustersPHOS);
1910 caloClustersEMCAL = refArray;
1912 else if(fCalorimeter == "PHOS") {
1913 ((AliAODEvent*)GetReader()->GetInputEvent())->GetEMCALClusters (caloClustersEMCAL);
1914 caloClustersEMCAL = refArray;
1917 //Fill histograms with clusters
1919 fhCaloCorrNClusters->Fill(caloClustersEMCAL->GetEntriesFast(),caloClustersPHOS->GetEntriesFast());
1920 Float_t sumClusterEnergyEMCAL = 0;
1921 Float_t sumClusterEnergyPHOS = 0;
1923 for(iclus = 0 ; iclus < caloClustersEMCAL->GetEntriesFast() ; iclus++)
1924 sumClusterEnergyEMCAL += ((AliAODCaloCluster*) (caloClustersEMCAL->At(iclus)))->E();
1925 for(iclus = 0 ; iclus < caloClustersPHOS->GetEntriesFast(); iclus++)
1926 sumClusterEnergyPHOS += ((AliAODCaloCluster*) (caloClustersPHOS->At(iclus)))->E();
1927 fhCaloCorrEClusters->Fill(sumClusterEnergyEMCAL,sumClusterEnergyPHOS);
1929 //Fill histograms with cells
1931 AliAODCaloCells * cellsEMCAL = ((AliAODEvent*)GetReader()->GetInputEvent())->GetEMCALCells();
1932 AliAODCaloCells * cellsPHOS = ((AliAODEvent*)GetReader()->GetInputEvent())->GetPHOSCells();
1933 fhCaloCorrNCells ->Fill(cellsEMCAL->GetNumberOfCells(),cellsPHOS->GetNumberOfCells());
1936 Float_t sumCellEnergyEMCAL = 0;
1937 Float_t sumCellEnergyPHOS = 0;
1938 for(icell = 0 ; icell < cellsEMCAL->GetNumberOfCells() ; icell++)
1939 sumCellEnergyEMCAL += cellsEMCAL->GetAmplitude(icell);
1940 for(icell = 0 ; icell < cellsPHOS->GetNumberOfCells(); icell++)
1941 sumCellEnergyPHOS += cellsPHOS->GetAmplitude(icell);
1942 fhCaloCorrECells->Fill(sumCellEnergyEMCAL,sumCellEnergyPHOS);
1943 if(GetDebug() > 0 ){
1944 printf("AliAnaCalorimeterQA::CorrelateCalorimeters() - ESD: \n");
1945 printf("\t EMCAL: N cells %d, N clusters %d, summed E cells %f, summed E clusters %f \n",
1946 cellsEMCAL->GetNumberOfCells(),caloClustersEMCAL->GetEntriesFast(),sumCellEnergyEMCAL,sumClusterEnergyEMCAL);
1947 printf("\t PHOS : N cells %d, N clusters %d, summed E cells %f, summed E clusters %f \n",
1948 cellsPHOS->GetNumberOfCells(),caloClustersPHOS->GetEntriesFast(),sumCellEnergyPHOS,sumClusterEnergyPHOS);
1954 //______________________________________________________________________________
1955 void AliAnaCalorimeterQA::MCHistograms(const TLorentzVector mom, const Int_t pdg){
1956 //Fill pure monte carlo related histograms
1958 Float_t eMC = mom.E();
1959 Float_t ptMC = mom.Pt();
1960 Float_t phiMC = mom.Phi();
1962 phiMC += TMath::TwoPi();
1963 Float_t etaMC = mom.Eta();
1965 if (TMath::Abs(etaMC) > 1) return;
1968 if(IsFiducialCutOn()) in = GetFiducialCut()->IsInFiducialCut(mom,fCalorimeter) ;
1971 fhGenGamPt ->Fill(ptMC);
1972 fhGenGamEta->Fill(etaMC);
1973 fhGenGamPhi->Fill(phiMC);
1975 fhGenGamAccE ->Fill(eMC);
1976 fhGenGamAccPt ->Fill(ptMC);
1977 fhGenGamAccEta->Fill(etaMC);
1978 fhGenGamAccPhi->Fill(phiMC);
1981 else if (pdg==111) {
1982 fhGenPi0Pt ->Fill(ptMC);
1983 fhGenPi0Eta->Fill(etaMC);
1984 fhGenPi0Phi->Fill(phiMC);
1986 fhGenPi0AccE ->Fill(eMC);
1987 fhGenPi0AccPt ->Fill(ptMC);
1988 fhGenPi0AccEta->Fill(etaMC);
1989 fhGenPi0AccPhi->Fill(phiMC);
1992 else if (pdg==221) {
1993 fhGenEtaPt ->Fill(ptMC);
1994 fhGenEtaEta->Fill(etaMC);
1995 fhGenEtaPhi->Fill(phiMC);
1997 else if (pdg==223) {
1998 fhGenOmegaPt ->Fill(ptMC);
1999 fhGenOmegaEta->Fill(etaMC);
2000 fhGenOmegaPhi->Fill(phiMC);
2002 else if (TMath::Abs(pdg)==11) {
2003 fhGenElePt ->Fill(ptMC);
2004 fhGenEleEta->Fill(etaMC);
2005 fhGenElePhi->Fill(phiMC);
2010 //________________________________________________________________________
2011 void AliAnaCalorimeterQA::ReadHistograms(TList* outputList)
2013 // Needed when Terminate is executed in distributed environment
2014 // Refill analysis histograms of this class with corresponding histograms in output list.
2016 // Histograms of this analsys are kept in the same list as other analysis, recover the position of
2017 // the first one and then add the next
2018 Int_t index = outputList->IndexOf(outputList->FindObject(GetAddedHistogramsStringToName()+"hE"));
2019 printf("Calo: %s, index: %d, nmodules %d\n",fCalorimeter.Data(),index,fNModules);
2021 //Read histograms, must be in the same order as in GetCreateOutputObject.
2022 fhE = (TH1F *) outputList->At(index++);
2023 fhPt = (TH1F *) outputList->At(index++);
2024 fhPhi = (TH1F *) outputList->At(index++);
2025 fhEta = (TH1F *) outputList->At(index++);
2026 fhEtaPhi = (TH2F *) outputList->At(index++);
2027 fhEtaPhiE = (TH3F *) outputList->At(index++);
2029 fhECharged = (TH1F *) outputList->At(index++);
2030 fhPtCharged = (TH1F *) outputList->At(index++);
2031 fhPhiCharged = (TH1F *) outputList->At(index++);
2032 fhEtaCharged = (TH1F *) outputList->At(index++);
2033 fhEtaPhiCharged = (TH2F *) outputList->At(index++);
2035 fhEChargedNoOut = (TH1F *) outputList->At(index++);
2036 fhPtChargedNoOut = (TH1F *) outputList->At(index++);
2037 fhPhiChargedNoOut = (TH1F *) outputList->At(index++);
2038 fhEtaChargedNoOut = (TH1F *) outputList->At(index++);
2039 fhEtaPhiChargedNoOut = (TH2F *) outputList->At(index++);
2041 fh1pOverE = (TH2F *) outputList->At(index++);
2042 fh1dR = (TH1F *) outputList->At(index++);
2043 fh2MatchdEdx = (TH2F *) outputList->At(index++);
2044 fh2EledEdx = (TH2F *) outputList->At(index++);
2045 fh1pOverER02 = (TH2F *) outputList->At(index++);
2047 fhIM = (TH2F *) outputList->At(index++);
2048 fhIMCellCut = (TH2F *) outputList->At(index++);
2049 fhAsym = (TH2F *) outputList->At(index++);
2051 fhNCellsPerCluster = (TH2F *) outputList->At(index++);
2052 fhNClusters = (TH1F *) outputList->At(index++);
2053 fhNCells = (TH1F *) outputList->At(index++);
2054 fhAmplitude = (TH1F *) outputList->At(index++);
2056 if(fCorrelateCalos){
2057 fhCaloCorrNClusters = (TH2F *) outputList->At(index++);
2058 fhCaloCorrEClusters = (TH2F *) outputList->At(index++);
2059 fhCaloCorrNCells = (TH2F *) outputList->At(index++);
2060 fhCaloCorrECells = (TH2F *) outputList->At(index++);
2064 fhEMod = new TH1F*[fNModules];
2065 fhNClustersMod = new TH1F*[fNModules];
2066 fhNCellsPerClusterMod = new TH2F*[fNModules];
2067 fhNCellsMod = new TH1F*[fNModules];
2068 fhGridCellsMod = new TH2F*[fNModules];
2069 fhGridCellsEMod = new TH2F*[fNModules];
2070 fhAmplitudeMod = new TH1F*[fNModules];
2071 fhIMMod = new TH2F*[fNModules];
2072 fhIMCellCutMod = new TH2F*[fNModules];
2074 for(Int_t imod = 0 ; imod < fNModules; imod++){
2075 fhEMod[imod] = (TH1F *) outputList->At(index++);
2076 fhNClustersMod[imod] = (TH1F *) outputList->At(index++);
2077 fhNCellsPerClusterMod[imod] = (TH2F *) outputList->At(index++);
2078 fhNCellsMod[imod] = (TH1F *) outputList->At(index++);
2079 fhGridCellsMod[imod] = (TH2F *) outputList->At(index++);
2080 fhGridCellsEMod[imod] = (TH2F *) outputList->At(index++);
2081 fhAmplitudeMod[imod] = (TH1F *) outputList->At(index++);
2082 fhIMMod[imod] = (TH2F *) outputList->At(index++);
2083 fhIMCellCutMod[imod] = (TH2F *) outputList->At(index++);
2088 fhDeltaE = (TH1F *) outputList->At(index++);
2089 fhDeltaPt = (TH1F *) outputList->At(index++);
2090 fhDeltaPhi = (TH1F *) outputList->At(index++);
2091 fhDeltaEta = (TH1F *) outputList->At(index++);
2093 fhRatioE = (TH1F *) outputList->At(index++);
2094 fhRatioPt = (TH1F *) outputList->At(index++);
2095 fhRatioPhi = (TH1F *) outputList->At(index++);
2096 fhRatioEta = (TH1F *) outputList->At(index++);
2098 fh2E = (TH2F *) outputList->At(index++);
2099 fh2Pt = (TH2F *) outputList->At(index++);
2100 fh2Phi = (TH2F *) outputList->At(index++);
2101 fh2Eta = (TH2F *) outputList->At(index++);
2103 fhGamE = (TH2F *) outputList->At(index++);
2104 fhGamPt = (TH2F *) outputList->At(index++);
2105 fhGamPhi = (TH2F *) outputList->At(index++);
2106 fhGamEta = (TH2F *) outputList->At(index++);
2108 fhGamDeltaE = (TH1F *) outputList->At(index++);
2109 fhGamDeltaPt = (TH1F *) outputList->At(index++);
2110 fhGamDeltaPhi = (TH1F *) outputList->At(index++);
2111 fhGamDeltaEta = (TH1F *) outputList->At(index++);
2113 fhGamRatioE = (TH1F *) outputList->At(index++);
2114 fhGamRatioPt = (TH1F *) outputList->At(index++);
2115 fhGamRatioPhi = (TH1F *) outputList->At(index++);
2116 fhGamRatioEta = (TH1F *) outputList->At(index++);
2118 fhPi0E = (TH2F *) outputList->At(index++);
2119 fhPi0Pt = (TH2F *) outputList->At(index++);
2120 fhPi0Phi = (TH2F *) outputList->At(index++);
2121 fhPi0Eta = (TH2F *) outputList->At(index++);
2123 fhEleE = (TH2F *) outputList->At(index++);
2124 fhElePt = (TH2F *) outputList->At(index++);
2125 fhElePhi = (TH2F *) outputList->At(index++);
2126 fhEleEta = (TH2F *) outputList->At(index++);
2128 fhNeHadE = (TH2F *) outputList->At(index++);
2129 fhNeHadPt = (TH2F *) outputList->At(index++);
2130 fhNeHadPhi = (TH2F *) outputList->At(index++);
2131 fhNeHadEta = (TH2F *) outputList->At(index++);
2133 fhChHadE = (TH2F *) outputList->At(index++);
2134 fhChHadPt = (TH2F *) outputList->At(index++);
2135 fhChHadPhi = (TH2F *) outputList->At(index++);
2136 fhChHadEta = (TH2F *) outputList->At(index++);
2138 fhGamECharged = (TH2F *) outputList->At(index++);
2139 fhGamPtCharged = (TH2F *) outputList->At(index++);
2140 fhGamPhiCharged = (TH2F *) outputList->At(index++);
2141 fhGamEtaCharged = (TH2F *) outputList->At(index++);
2143 fhPi0ECharged = (TH2F *) outputList->At(index++);
2144 fhPi0PtCharged = (TH2F *) outputList->At(index++);
2145 fhPi0PhiCharged = (TH2F *) outputList->At(index++);
2146 fhPi0EtaCharged = (TH2F *) outputList->At(index++);
2148 fhEleECharged = (TH2F *) outputList->At(index++);
2149 fhElePtCharged = (TH2F *) outputList->At(index++);
2150 fhElePhiCharged = (TH2F *) outputList->At(index++);
2151 fhEleEtaCharged = (TH2F *) outputList->At(index++);
2153 fhNeHadECharged = (TH2F *) outputList->At(index++);
2154 fhNeHadPtCharged = (TH2F *) outputList->At(index++);
2155 fhNeHadPhiCharged = (TH2F *) outputList->At(index++);
2156 fhNeHadEtaCharged = (TH2F *) outputList->At(index++);
2158 fhChHadECharged = (TH2F *) outputList->At(index++);
2159 fhChHadPtCharged = (TH2F *) outputList->At(index++);
2160 fhChHadPhiCharged = (TH2F *) outputList->At(index++);
2161 fhChHadEtaCharged = (TH2F *) outputList->At(index++);
2163 // fhEMVxyz = (TH3F *) outputList->At(index++);
2164 // fhHaVxyz = (TH3F *) outputList->At(index++);
2166 fhEMVxyz = (TH2F *) outputList->At(index++);
2167 fhHaVxyz = (TH2F *) outputList->At(index++);
2168 fhEMR = (TH2F *) outputList->At(index++);
2169 fhHaR = (TH2F *) outputList->At(index++);
2171 fhGenGamPt = (TH1F *) outputList->At(index++);
2172 fhGenGamEta = (TH1F *) outputList->At(index++);
2173 fhGenGamPhi = (TH1F *) outputList->At(index++);
2175 fhGenPi0Pt = (TH1F *) outputList->At(index++);
2176 fhGenPi0Eta = (TH1F *) outputList->At(index++);
2177 fhGenPi0Phi = (TH1F *) outputList->At(index++);
2179 fhGenEtaPt = (TH1F *) outputList->At(index++);
2180 fhGenEtaEta = (TH1F *) outputList->At(index++);
2181 fhGenEtaPhi = (TH1F *) outputList->At(index++);
2183 fhGenOmegaPt = (TH1F *) outputList->At(index++);
2184 fhGenOmegaEta = (TH1F *) outputList->At(index++);
2185 fhGenOmegaPhi = (TH1F *) outputList->At(index++);
2187 fhGenElePt = (TH1F *) outputList->At(index++);
2188 fhGenEleEta = (TH1F *) outputList->At(index++);
2189 fhGenElePhi = (TH1F *) outputList->At(index++);
2191 fhGenGamAccE = (TH1F *) outputList->At(index++);
2192 fhGenGamAccPt = (TH1F *) outputList->At(index++);
2193 fhGenGamAccEta = (TH1F *) outputList->At(index++);
2194 fhGenGamAccPhi = (TH1F *) outputList->At(index++);
2196 fhGenPi0AccE = (TH1F *) outputList->At(index++);
2197 fhGenPi0AccPt = (TH1F *) outputList->At(index++);
2198 fhGenPi0AccEta = (TH1F *) outputList->At(index++);
2199 fhGenPi0AccPhi = (TH1F *) outputList->At(index++);
2201 fhMCEle1pOverE = (TH2F *) outputList->At(index++);
2202 fhMCEle1dR = (TH1F *) outputList->At(index++);
2203 fhMCEle2MatchdEdx = (TH2F *) outputList->At(index++);
2205 fhMCChHad1pOverE = (TH2F *) outputList->At(index++);
2206 fhMCChHad1dR = (TH1F *) outputList->At(index++);
2207 fhMCChHad2MatchdEdx = (TH2F *) outputList->At(index++);
2209 fhMCNeutral1pOverE = (TH2F *) outputList->At(index++);
2210 fhMCNeutral1dR = (TH1F *) outputList->At(index++);
2211 fhMCNeutral2MatchdEdx = (TH2F *) outputList->At(index++);
2213 fhMCEle1pOverER02 = (TH2F *) outputList->At(index++);
2214 fhMCChHad1pOverER02 = (TH2F *) outputList->At(index++);
2215 fhMCNeutral1pOverER02 = (TH2F *) outputList->At(index++);
2217 //for(Int_t i = 0; i<index ; i++) cout<<outputList->At(i)->GetName()<<endl;
2220 //__________________________________________________________________
2221 void AliAnaCalorimeterQA::Terminate(TList* outputList)
2223 //Do plots if requested
2226 //if(fRemoveOutputAOD){
2227 // sprintf(line, ".!rm -fR %s",((AliVEventHandler*)((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()))->GetOutputFileName());
2228 // gROOT->ProcessLine(line);
2230 printf("AliAnaCalorimeterQA::Terminate() - Make plots? %d\n",fMakePlots);
2231 if(!fMakePlots) return;
2233 //Do some plots to end
2234 if(fStyleMacro!="")gROOT->Macro(fStyleMacro);
2235 //Recover histograms from output histograms list, needed for distributed analysis.
2236 ReadHistograms(outputList);
2238 printf(" AliAnaCalorimeterQA::Terminate() *** %s Report:", GetName()) ;
2239 printf(" AliAnaCalorimeterQA::Terminate() pt : %5.3f , RMS : %5.3f \n", fhPt->GetMean(), fhPt->GetRMS() ) ;
2246 sprintf(cname,"QA_%s_nclustercellsamp",fCalorimeter.Data());
2247 TCanvas * c9 = new TCanvas(cname, " CaloClusters and CaloCells", 400, 400) ;
2252 TLegend pLegendN(0.7,0.6,0.9,0.8);
2253 pLegendN.SetTextSize(0.03);
2254 pLegendN.AddEntry(fhNClusters,"all modules","L");
2255 pLegendN.SetFillColor(10);
2256 pLegendN.SetBorderSize(1);
2258 if(fhNClusters->GetEntries() > 0) gPad->SetLogy();
2260 fhNClusters->SetLineColor(1);
2261 fhNClusters->Draw();
2262 for(Int_t imod = 0; imod < fNModules; imod++){
2263 fhNClustersMod[imod]->SetLineColor(imod+1);
2264 fhNClustersMod[imod]->Draw("same");
2265 pLegendN.AddEntry(fhNClustersMod[imod],Form("module %d",imod),"L");
2270 if(fhNCells->GetEntries() > 0) gPad->SetLogy();
2272 fhNCells->SetLineColor(1);
2274 for(Int_t imod = 0; imod < fNModules; imod++){
2275 fhNCellsMod[imod]->SetLineColor(imod+1);
2276 fhNCellsMod[imod]->Draw("same");
2279 if(fhNCellsPerCluster->GetEntries() > 0) gPad->SetLogy();
2281 TH1D *cpc = fhNCellsPerCluster->ProjectionY("cpc",-1,-1);
2282 cpc->SetLineColor(1);
2284 for(Int_t imod = 0; imod < fNModules; imod++){
2285 cpc = fhNCellsPerClusterMod[imod]->ProjectionY(Form("cpc_%d",imod),-1,-1);
2286 cpc->SetLineColor(imod+1);
2291 if(fhAmplitude->GetEntries() > 0) gPad->SetLogy();
2293 fhAmplitude->SetLineColor(1);
2294 fhAmplitude->Draw();
2295 for(Int_t imod = 0; imod < fNModules; imod++){
2296 fhAmplitudeMod[imod]->SetLineColor(imod+1);
2297 fhAmplitudeMod[imod]->Draw("same");
2300 sprintf(name,"QA_%s_CaloClustersAndCaloCells.eps",fCalorimeter.Data());
2301 c9->Print(name); printf("Plot: %s\n",name);
2303 if(fCorrelateCalos){
2304 //Calorimeter Correlation, PHOS vs EMCAL
2306 sprintf(cname,"QA_%s_CaloCorr_EMCALvsPHOS",fCalorimeter.Data());
2307 TCanvas * ccorr = new TCanvas(cname, " EMCAL vs PHOS", 400, 400) ;
2308 ccorr->Divide(2, 2);
2313 fhCaloCorrNClusters ->Draw();
2318 fhCaloCorrNCells->Draw();
2323 fhCaloCorrEClusters->Draw();
2328 fhCaloCorrECells->Draw();
2330 sprintf(name,"QA_%s_CaloCorr_EMCALvsPHOS.eps",fCalorimeter.Data());
2331 ccorr->Print(name); printf("Plot: %s\n",name);
2334 //Reconstructed distributions
2336 sprintf(cname,"QA_%s_rec",fCalorimeter.Data());
2337 TCanvas * c = new TCanvas(cname, "Reconstructed distributions", 400, 400) ;
2341 if(fhE->GetEntries() > 0) gPad->SetLogy();
2342 TLegend pLegendE(0.7,0.6,0.9,0.8);
2343 pLegendE.SetTextSize(0.03);
2344 pLegendE.AddEntry(fhE,"all modules","L");
2345 pLegendE.SetFillColor(10);
2346 pLegendE.SetBorderSize(1);
2348 fhE->SetLineColor(1);
2350 for(Int_t imod = 0; imod < fNModules; imod++){
2351 fhEMod[imod]->SetLineColor(imod+1);
2352 fhEMod[imod]->Draw("same");
2353 pLegendE.AddEntry(fhEMod[imod],Form("module %d",imod),"L");
2358 if(fhPt->GetEntries() > 0) gPad->SetLogy();
2359 fhPt->SetLineColor(4);
2363 fhPhi->SetLineColor(4);
2367 fhEta->SetLineColor(4);
2370 sprintf(name,"QA_%s_ReconstructedDistributions.eps",fCalorimeter.Data());
2371 c->Print(name); printf("Plot: %s\n",name);
2373 //Reconstructed distributions, matched with tracks
2375 sprintf(cname,"QA_%s_rectrackmatch",fCalorimeter.Data());
2376 TCanvas * c2 = new TCanvas(cname, "Reconstructed distributions, matched with tracks", 400, 400) ;
2380 if(fhECharged->GetEntries() > 0) gPad->SetLogy();
2381 fhECharged->SetLineColor(4);
2385 if(fhPtCharged->GetEntries() > 0) gPad->SetLogy();
2386 fhPtCharged->SetLineColor(4);
2387 fhPtCharged->Draw();
2390 fhPhiCharged->SetLineColor(4);
2391 fhPhiCharged->Draw();
2394 fhEtaCharged->SetLineColor(4);
2395 fhEtaCharged->Draw();
2397 sprintf(name,"QA_%s_ReconstructedDistributions_TrackMatched.eps",fCalorimeter.Data());
2398 c2->Print(name); printf("Plot: %s\n",name);
2400 TH1F * hEChargedClone = (TH1F*) fhECharged->Clone("EChargedClone");
2401 TH1F * hPtChargedClone = (TH1F*) fhPtCharged->Clone("PtChargedClone");
2402 TH1F * hEtaChargedClone = (TH1F*) fhEtaCharged->Clone("EtaChargedClone");
2403 TH1F * hPhiChargedClone = (TH1F*) fhPhiCharged->Clone("PhiChargedClone");
2405 TH1F * hEChargedClone2 = (TH1F*) fhECharged->Clone("EChargedClone2");
2406 TH1F * hPtChargedClone2 = (TH1F*) fhPtCharged->Clone("PtChargedClone2");
2407 TH1F * hEtaChargedClone2 = (TH1F*) fhEtaCharged->Clone("EtaChargedClone2");
2408 TH1F * hPhiChargedClone2 = (TH1F*) fhPhiCharged->Clone("PhiChargedClone2");
2410 //Ratio: reconstructed track matched/ all reconstructed
2412 sprintf(cname,"QA_%s_rectrackmatchrat",fCalorimeter.Data());
2413 TCanvas * c3 = new TCanvas(cname, "Ratio: reconstructed track matched/ all reconstructed", 400, 400) ;
2417 if(hEChargedClone->GetEntries() > 0) gPad->SetLogy();
2418 hEChargedClone->SetTitleOffset(1.6,"Y");
2419 hEChargedClone->SetYTitle("track matched / all ");
2420 hEChargedClone->SetXTitle("E (GeV)");
2421 hEChargedClone->Divide(fhE);
2422 hEChargedClone->Draw();
2425 if(hPtChargedClone->GetEntries() > 0) gPad->SetLogy();
2426 hPtChargedClone->SetTitleOffset(1.6,"Y");
2427 hPtChargedClone->SetYTitle("track matched / all ");
2428 hPtChargedClone->SetXTitle("p_{T} (GeV/c)");
2429 hPtChargedClone->Divide(fhPt);
2430 hPtChargedClone->Draw();
2433 if(hPhiChargedClone->GetEntries() > 0) gPad->SetLogy();
2434 hPhiChargedClone->SetTitleOffset(1.6,"Y");
2435 hPhiChargedClone->SetYTitle("track matched / all ");
2436 hPhiChargedClone->SetXTitle("#phi (rad)");
2437 hPhiChargedClone->Divide(fhPhi);
2438 hPhiChargedClone->Draw();
2441 if(hEtaChargedClone->GetEntries() > 0) gPad->SetLogy();
2442 hEtaChargedClone->SetTitleOffset(1.6,"Y");
2443 hEtaChargedClone->SetYTitle("track matched / all ");
2444 hEtaChargedClone->SetXTitle("#eta");
2445 hEtaChargedClone->Divide(fhEta);
2446 hEtaChargedClone->Draw();
2448 sprintf(name,"QA_%s_RatioReconstructedMatchedDistributions.eps",fCalorimeter.Data());
2449 c3->Print(name); printf("Plot: %s\n",name);
2451 //Ratio: reconstructed track matched (minus no track param) / all
2453 sprintf(cname,"QA_%s_rectrackmatchratout",fCalorimeter.Data());
2454 TCanvas * c333 = new TCanvas(cname, "Ratio: reconstructed track matched (with outer track param)/ all", 400, 400) ;
2458 hEChargedClone2->Add(fhEChargedNoOut,-1);
2459 hEChargedClone2->SetYTitle("track matched / all");
2460 hEChargedClone2->SetXTitle("E (GeV)");
2461 hEChargedClone2->Divide(fhE);
2462 hEChargedClone2->Draw();
2465 hPtChargedClone2->Add(fhPtChargedNoOut,-1);
2466 hPtChargedClone2->SetYTitle("track matched / all");
2467 hPtChargedClone2->SetXTitle("p_{T} (GeV/c)");
2468 hPtChargedClone2->Divide(fhPt);
2469 hPtChargedClone2->Draw();
2472 hPhiChargedClone2->Add(fhPhiChargedNoOut,-1);
2473 hPhiChargedClone2->SetYTitle("track matched / all");
2474 hPhiChargedClone2->SetXTitle("#phi (rad)");
2475 hPhiChargedClone2->Divide(fhPhi);
2476 hPhiChargedClone2->Draw();
2479 hEtaChargedClone2->Add(fhEtaChargedNoOut,-1);
2480 hEtaChargedClone2->SetYTitle("track matched / all");
2481 hEtaChargedClone2->SetXTitle("#eta");
2482 hEtaChargedClone2->Divide(fhEta);
2483 hEtaChargedClone2->Draw();
2485 sprintf(name,"QA_%s_RatioReconstructedMatchedDistributionsOuter.eps",fCalorimeter.Data());
2486 c333->Print(name); printf("Plot: %s\n",name);
2488 //Reconstructed distributions, matched with tracks but no outer param
2490 sprintf(cname,"QA_%s_rectrackmatch_noout",fCalorimeter.Data());
2491 TCanvas * c22 = new TCanvas(cname, "Reconstructed distributions, matched with tracks, no outer track param", 400, 400) ;
2495 if(fhEChargedNoOut->GetEntries() > 0) gPad->SetLogy();
2496 fhEChargedNoOut->SetLineColor(4);
2497 fhEChargedNoOut->Draw();
2500 if(fhEChargedNoOut->GetEntries() > 0) gPad->SetLogy();
2501 fhPtChargedNoOut->SetLineColor(4);
2502 fhPtChargedNoOut->Draw();
2505 fhPhiChargedNoOut->SetLineColor(4);
2506 fhPhiChargedNoOut->Draw();
2509 fhEtaChargedNoOut->SetLineColor(4);
2510 fhEtaChargedNoOut->Draw();
2512 sprintf(name,"QA_%s_ReconstructedDistributions_TrackMatched_NoOutParam.eps",fCalorimeter.Data());
2513 c22->Print(name); printf("Plot: %s\n",name);
2515 //Ratio: reconstructed track matched/ all reconstructed
2518 // TH1F * hEChargedNoOutClone = (TH1F*) fhEChargedNoOut->Clone("EChargedNoOutClone");
2519 // TH1F * hPtChargedNoOutClone = (TH1F*) fhPtChargedNoOut->Clone("PtChargedNoOutClone");
2520 // TH1F * hEtaChargedNoOutClone = (TH1F*) fhEtaChargedNoOut->Clone("EtaChargedNoOutClone");
2521 // TH1F * hPhiChargedNoOutClone = (TH1F*) fhPhiChargedNoOut->Clone("PhiChargedNoOutClone");
2523 // sprintf(cname,"QA_%s_rectrackmatchratnoout",fCalorimeter.Data());
2524 // TCanvas * c33 = new TCanvas(cname, "Ratio: reconstructed track matched/ all reconstructed", 400, 400) ;
2525 // c33->Divide(2, 2);
2528 // hEChargedNoOutClone->SetYTitle("track matched no out/ all matched");
2529 // hEChargedNoOutClone->SetXTitle("E (GeV)");
2530 // hEChargedNoOutClone->Divide(fhECharged);
2531 // hEChargedNoOutClone->Draw();
2534 // hPtChargedNoOutClone->SetYTitle("track matched no out / all matched");
2535 // hPtChargedNoOutClone->SetXTitle("p_{T} (GeV/c)");
2536 // hPtChargedNoOutClone->Divide(fhPtCharged);
2537 // hPtChargedNoOutClone->Draw();
2540 // hPhiChargedNoOutClone->SetYTitle("track matched no out/ all matched");
2541 // hPhiChargedNoOutClone->SetXTitle("#phi (rad)");
2542 // hPhiChargedNoOutClone->Divide(fhPhiCharged);
2543 // hPhiChargedNoOutClone->Draw();
2546 // hEtaChargedNoOutClone->SetYTitle("track matched no out/ all matched");
2547 // hEtaChargedNoOutClone->SetXTitle("#eta");
2548 // hEtaChargedNoOutClone->Divide(fhEtaCharged);
2549 // hEtaChargedNoOutClone->Draw();
2551 // sprintf(name,"QA_%s_RatioMatchedDistributionsAllToNoOut.eps",fCalorimeter.Data());
2552 // c33->Print(name); printf("Plot: %s\n",name);
2557 sprintf(cname,"QA_%s_etavsphivse",fCalorimeter.Data());
2558 // TCanvas * c4 = new TCanvas(cname, "reconstructed #eta vs #phi", 600, 200) ;
2559 // c4->Divide(3, 1);
2561 TCanvas * c4 = new TCanvas(cname, "reconstructed #eta vs #phi vs E", 600, 600) ;
2566 fhEtaPhi->Draw("contz");
2570 fhEtaPhiCharged->Draw("contz");
2573 {gStyle->SetOptStat(0);
2574 fhEtaPhi->Draw("contz");}
2575 //fhEtaPhiE->Draw();
2579 // fhEtaPhiChargedNoOut->Draw("cont");
2581 sprintf(name,"QA_%s_ReconstructedEtaVsPhiVsE.eps",fCalorimeter.Data());
2582 c4->Print(name); printf("Plot: %s\n",name);
2588 if(fhIM->GetEntries() > 1){
2589 Int_t nebins = fhIM->GetNbinsX();
2590 Int_t emax = (Int_t) fhIM->GetXaxis()->GetXmax();
2591 Int_t emin = (Int_t) fhIM->GetXaxis()->GetXmin();
2592 if (emin != 0 ) printf("emin != 0 \n");
2593 //printf("IM: nBinsX %d, emin %2.2f, emax %2.2f\n",nebins,emin,emax);
2595 sprintf(cname,"QA_%s_IM",fCalorimeter.Data());
2597 TCanvas * c5 = new TCanvas(cname, "Invariant mass", 600, 400) ;
2601 //fhIM->SetLineColor(4);
2604 binmax = (Int_t) (1-emin)*nebins/emax;
2605 TH1D *pyim1 = fhIM->ProjectionY("pyim1",binmin,binmax);
2606 pyim1->SetTitle("E_{pair} < 1 GeV");
2607 pyim1->SetLineColor(1);
2609 TLegend pLegendIM(0.7,0.6,0.9,0.8);
2610 pLegendIM.SetTextSize(0.03);
2611 pLegendIM.AddEntry(pyim1,"all modules","L");
2612 pLegendIM.SetFillColor(10);
2613 pLegendIM.SetBorderSize(1);
2614 for(Int_t imod = 0; imod < fNModules; imod++){
2615 pyim1 = fhIMMod[imod]->ProjectionY(Form("pyim1_%d",imod),binmin,binmax);
2616 pLegendIM.AddEntry(pyim1,Form("module %d",imod),"L");
2617 pyim1->SetLineColor(imod+1);
2618 pyim1->Draw("same");
2623 binmin = (Int_t) (1-emin)*nebins/emax;
2624 binmax = (Int_t) (2-emin)*nebins/emax;
2625 TH1D *pyim2 = fhIM->ProjectionY("pyim2",binmin,binmax);
2626 pyim2->SetTitle("1 < E_{pair} < 2 GeV");
2627 pyim2->SetLineColor(1);
2629 for(Int_t imod = 0; imod < fNModules; imod++){
2630 pyim2 = fhIMMod[imod]->ProjectionY(Form("pyim2_%d",imod),binmin,binmax);
2631 pyim2->SetLineColor(imod+1);
2632 pyim2->Draw("same");
2636 binmin = (Int_t) (2-emin)*nebins/emax;
2637 binmax = (Int_t) (3-emin)*nebins/emax;
2638 TH1D *pyim3 = fhIM->ProjectionY("pyim3",binmin,binmax);
2639 pyim3->SetTitle("2 < E_{pair} < 3 GeV");
2640 pyim3->SetLineColor(1);
2642 for(Int_t imod = 0; imod < fNModules; imod++){
2643 pyim3 = fhIMMod[imod]->ProjectionY(Form("pyim3_%d",imod),binmin,binmax);
2644 pyim3->SetLineColor(imod+1);
2645 pyim3->Draw("same");
2649 binmin = (Int_t) (3-emin)*nebins/emax;
2650 binmax = (Int_t) (4-emin)*nebins/emax;
2651 TH1D *pyim4 = fhIM->ProjectionY("pyim4",binmin,binmax);
2652 pyim4->SetTitle("3 < E_{pair} < 4 GeV");
2653 pyim4->SetLineColor(1);
2655 for(Int_t imod = 0; imod < fNModules; imod++){
2656 pyim4 = fhIMMod[imod]->ProjectionY(Form("pyim4_%d",imod),binmin,binmax);
2657 pyim4->SetLineColor(imod+1);
2658 pyim4->Draw("same");
2662 binmin = (Int_t) (4-emin)*nebins/emax;
2663 binmax = (Int_t) (5-emin)*nebins/emax;
2664 TH1D *pyim5 = fhIM->ProjectionY("pyim5",binmin,binmax);
2665 pyim5->SetTitle("4< E_{pair} < 5 GeV");
2666 pyim5->SetLineColor(1);
2668 for(Int_t imod = 0; imod < fNModules; imod++){
2669 pyim5 = fhIMMod[imod]->ProjectionY(Form("pyim5_%d",imod),binmin,binmax);
2670 pyim5->SetLineColor(imod+1);
2671 pyim5->Draw("same");
2675 binmin = (Int_t) (5-emin)*nebins/emax;
2677 TH1D *pyim10 = fhIM->ProjectionY("pyim10",binmin,binmax);
2678 pyim10->SetTitle("E_{pair} > 5 GeV");
2679 pyim10->SetLineColor(1);
2681 for(Int_t imod = 0; imod < fNModules; imod++){
2682 pyim10 = fhIMMod[imod]->ProjectionY(Form("pyim10_%d",imod),binmin,binmax);
2683 pyim10->SetLineColor(imod+1);
2684 pyim10->Draw("same");
2687 sprintf(name,"QA_%s_InvariantMass.eps",fCalorimeter.Data());
2688 c5->Print(name); printf("Plot: %s\n",name);
2692 if(fhIMCellCut->GetEntries() > 1){
2693 Int_t nebins = fhIMCellCut->GetNbinsX();
2694 Int_t emax = (Int_t) fhIMCellCut->GetXaxis()->GetXmax();
2695 Int_t emin = (Int_t) fhIMCellCut->GetXaxis()->GetXmin();
2696 if (emin != 0 ) printf("emin != 0 \n");
2697 //printf("IMCellCut: nBinsX %d, emin %2.2f, emax %2.2f\n",nebins,emin,emax);
2699 sprintf(cname,"QA_%s_IMCellCut",fCalorimeter.Data());
2700 // printf("c5cc\n");
2701 TCanvas * c5cc = new TCanvas(cname, "Invariant mass, Cell Cut", 600, 400) ;
2705 //fhIMCellCut->SetLineColor(4);
2706 //fhIMCellCut->Draw();
2708 binmax = (Int_t) (1-emin)*nebins/emax;
2709 TH1D *pyimcc1 = fhIMCellCut->ProjectionY("pyimcc1",binmin,binmax);
2710 pyimcc1->SetTitle("E_{pair} < 1 GeV");
2711 pyimcc1->SetLineColor(1);
2713 TLegend pLegendIMCellCut(0.7,0.6,0.9,0.8);
2714 pLegendIMCellCut.SetTextSize(0.03);
2715 pLegendIMCellCut.AddEntry(pyimcc1,"all modules","L");
2716 pLegendIMCellCut.SetFillColor(10);
2717 pLegendIMCellCut.SetBorderSize(1);
2718 for(Int_t imod = 0; imod < fNModules; imod++){
2719 pyimcc1 = fhIMCellCutMod[imod]->ProjectionY(Form("pyimcc1_%d",imod),binmin,binmax);
2720 pLegendIMCellCut.AddEntry(pyimcc1,Form("module %d",imod),"L");
2721 pyimcc1->SetLineColor(imod+1);
2722 pyimcc1->Draw("same");
2724 pLegendIMCellCut.Draw();
2727 binmin = (Int_t) (1-emin)*nebins/emax;
2728 binmax = (Int_t) (2-emin)*nebins/emax;
2729 TH1D *pyimcc2 = fhIMCellCut->ProjectionY("pyimcc2",binmin,binmax);
2730 pyimcc2->SetTitle("1 < E_{pair} < 2 GeV");
2731 pyimcc2->SetLineColor(1);
2733 for(Int_t imod = 0; imod < fNModules; imod++){
2734 pyimcc2 = fhIMCellCutMod[imod]->ProjectionY(Form("pyimcc2_%d",imod),binmin,binmax);
2735 pyimcc2->SetLineColor(imod+1);
2736 pyimcc2->Draw("same");
2740 binmin = (Int_t) (2-emin)*nebins/emax;
2741 binmax = (Int_t) (3-emin)*nebins/emax;
2742 TH1D *pyimcc3 = fhIMCellCut->ProjectionY("pyimcc3",binmin,binmax);
2743 pyimcc3->SetTitle("2 < E_{pair} < 3 GeV");
2744 pyimcc3->SetLineColor(1);
2746 for(Int_t imod = 0; imod < fNModules; imod++){
2747 pyimcc3 = fhIMCellCutMod[imod]->ProjectionY(Form("pyimcc3_%d",imod),binmin,binmax);
2748 pyimcc3->SetLineColor(imod+1);
2749 pyimcc3->Draw("same");
2753 binmin = (Int_t) (3-emin)*nebins/emax;
2754 binmax = (Int_t) (4-emin)*nebins/emax;
2755 TH1D *pyimcc4 = fhIMCellCut->ProjectionY("pyimcc4",binmin,binmax);
2756 pyimcc4->SetTitle("3 < E_{pair} < 4 GeV");
2757 pyimcc4->SetLineColor(1);
2759 for(Int_t imod = 0; imod < fNModules; imod++){
2760 pyimcc4 = fhIMCellCutMod[imod]->ProjectionY(Form("pyimcc4_%d",imod),binmin,binmax);
2761 pyimcc4->SetLineColor(imod+1);
2762 pyimcc4->Draw("same");
2766 binmin = (Int_t) (4-emin)*nebins/emax;
2767 binmax = (Int_t) (5-emin)*nebins/emax;
2768 TH1D *pyimcc5cc = fhIMCellCut->ProjectionY("pyimcc5cc",binmin,binmax);
2769 pyimcc5cc->SetTitle("4< E_{pair} < 5 GeV");
2770 pyimcc5cc->SetLineColor(1);
2772 for(Int_t imod = 0; imod < fNModules; imod++){
2773 pyimcc5cc = fhIMCellCutMod[imod]->ProjectionY(Form("pyimcc5cc_%d",imod),binmin,binmax);
2774 pyimcc5cc->SetLineColor(imod+1);
2775 pyimcc5cc->Draw("same");
2779 binmin = (Int_t) (5-emin)*nebins/emax;
2781 TH1D *pyimcc10 = fhIMCellCut->ProjectionY("pyimcc10",binmin,binmax);
2782 pyimcc10->SetTitle("E_{pair} > 5 GeV");
2783 pyimcc10->SetLineColor(1);
2785 for(Int_t imod = 0; imod < fNModules; imod++){
2786 pyimcc10 = fhIMCellCutMod[imod]->ProjectionY(Form("pyimcc10_%d",imod),binmin,binmax);
2787 pyimcc10->SetLineColor(imod+1);
2788 pyimcc10->Draw("same");
2791 sprintf(name,"QA_%s_InvariantMass_CellCut.eps",fCalorimeter.Data());
2792 c5cc->Print(name); printf("Plot: %s\n",name);
2797 if(fhAsym->GetEntries() > 1){
2798 Int_t nebins = fhAsym->GetNbinsX();
2799 Int_t emax = (Int_t) fhAsym->GetXaxis()->GetXmax();
2800 Int_t emin = (Int_t) fhAsym->GetXaxis()->GetXmin();
2801 if (emin != 0 ) printf("emin != 0 \n");
2802 //printf("Asym: nBinsX %d, emin %2.2f, emax %2.2f\n",nebins,emin,emax);
2804 sprintf(cname,"QA_%s_Asym",fCalorimeter.Data());
2806 TCanvas * c5b = new TCanvas(cname, "Asymmetry", 400, 400) ;
2810 fhAsym->SetTitleOffset(1.6,"Y");
2811 fhAsym->SetLineColor(4);
2816 binmax = (Int_t) (5-emin)*nebins/emax;
2817 TH1D *pyAsym5 = fhAsym->ProjectionY("pyAsym5",binmin,binmax);
2818 pyAsym5->SetTitle("E_{pair} < 5 GeV");
2819 pyAsym5->SetLineColor(4);
2823 binmin = (Int_t) (5-emin)*nebins/emax;
2824 binmax = (Int_t) (10-emin)*nebins/emax;
2825 TH1D *pyAsym510 = fhAsym->ProjectionY("pyAsym5_10",binmin,binmax);
2826 pyAsym510->SetTitle("5 < E_{pair} < 10 GeV");
2827 pyAsym510->SetLineColor(4);
2831 binmin = (Int_t) (10-emin)*nebins/emax;
2833 TH1D *pyAsym10 = fhAsym->ProjectionY("pyAsym10",binmin,binmax);
2834 pyAsym10->SetTitle("E_{pair} > 10 GeV");
2835 pyAsym10->SetLineColor(4);
2838 sprintf(name,"QA_%s_Asymmetry.eps",fCalorimeter.Data());
2839 c5b->Print(name); printf("Plot: %s\n",name);
2842 //Grid of cell per module plots
2844 gStyle->SetOptStat(0);
2845 sprintf(cname,"QA_%s_GridCellEntries",fCalorimeter.Data());
2847 TCanvas *cgrid = new TCanvas("cgrid","Number of entries per cell", 12,12,800,400);
2848 if(fNModules%2 == 0)
2849 cgrid->Divide(fNModules/2,2);
2851 cgrid->Divide(fNModules/2+1,2);
2853 for(Int_t imod = 0; imod < fNModules ; imod++){
2858 fhGridCellsMod[imod]->SetLabelSize(0.025,"z");
2859 fhGridCellsMod[imod]->Draw("colz");
2861 sprintf(name,"QA_%s_GridCellsEntries.eps",fCalorimeter.Data());
2862 cgrid->Print(name); printf("Plot: %s\n",name);
2864 sprintf(cname,"QA_%s_GridCellAccumEnergy",fCalorimeter.Data());
2866 TCanvas *cgridE = new TCanvas("cgridE","Summed energy per cell", 12,12,800,400);
2867 cgridE->Divide(fNModules/2,2);
2868 for(Int_t imod = 0; imod < fNModules ; imod++){
2873 fhGridCellsEMod[imod]->SetLabelSize(0.025,"z");
2874 fhGridCellsEMod[imod]->Draw("colz");
2876 sprintf(name,"QA_%s_GridCellsAccumEnergy.eps",fCalorimeter.Data());
2877 cgridE->Print(name); printf("Plot: %s\n",name);
2879 sprintf(cname,"QA_%s_GridCellAverageEnergy",fCalorimeter.Data());
2881 TCanvas *cgridEA = new TCanvas("cgridEA","Average energy per cell", 12,12,800,400);
2882 cgridEA->Divide(fNModules/2,2);
2883 for(Int_t imod = 0; imod < fNModules ; imod++){
2884 cgridEA->cd(imod+1);
2888 fhGridCellsEMod[imod]->SetLabelSize(0.025,"z");
2889 fhGridCellsEMod[imod]->Divide(fhGridCellsMod[imod]);
2890 fhGridCellsEMod[imod]->Draw("colz");
2892 sprintf(name,"QA_%s_GridCellsAverageEnergy.eps",fCalorimeter.Data());
2893 cgridEA->Print(name); printf("Plot: %s\n",name);
2898 //Reconstructed vs MC distributions
2900 sprintf(cname,"QA_%s_recvsmc",fCalorimeter.Data());
2901 TCanvas * c6 = new TCanvas(cname, "Reconstructed vs MC distributions", 400, 400) ;
2905 fh2E->SetTitleOffset(1.6,"Y");
2906 fh2E->SetLineColor(4);
2910 fh2Pt->SetTitleOffset(1.6,"Y");
2911 fh2Pt->SetLineColor(4);
2915 fh2Phi->SetTitleOffset(1.6,"Y");
2916 fh2Phi->SetLineColor(4);
2920 fh2Eta->SetTitleOffset(1.6,"Y");
2921 fh2Eta->SetLineColor(4);
2924 sprintf(name,"QA_%s_ReconstructedVSMCDistributions.eps",fCalorimeter.Data());
2925 c6->Print(name); printf("Plot: %s\n",name);
2927 //Reconstructed vs MC distributions
2929 sprintf(cname,"QA_%s_gamrecvsmc",fCalorimeter.Data());
2930 TCanvas * c6Gam = new TCanvas(cname, "Reconstructed vs MC distributions", 400, 400) ;
2931 c6Gam->Divide(2, 2);
2945 sprintf(name,"QA_%s_GammaReconstructedVSMCDistributions.eps",fCalorimeter.Data());
2946 c6->Print(name); printf("Plot: %s\n",name);
2948 //Generated - reconstructed
2950 sprintf(cname,"QA_%s_diffgenrec",fCalorimeter.Data());
2951 TCanvas * c7 = new TCanvas(cname, "generated - reconstructed", 400, 400) ;
2955 if(fhDeltaE->GetEntries() > 0) gPad->SetLogy();
2956 fhGamDeltaE->SetLineColor(4);
2958 fhGamDeltaE->Draw("same");
2960 TLegend pLegendd(0.65,0.55,0.9,0.8);
2961 pLegendd.SetTextSize(0.06);
2962 pLegendd.AddEntry(fhDeltaE,"all","L");
2963 pLegendd.AddEntry(fhGamDeltaE,"from #gamma","L");
2964 pLegendd.SetFillColor(10);
2965 pLegendd.SetBorderSize(1);
2969 if(fhDeltaPt->GetEntries() > 0) gPad->SetLogy();
2970 fhGamDeltaPt->SetLineColor(4);
2972 fhGamDeltaPt->Draw("same");
2975 fhGamDeltaPhi->SetLineColor(4);
2977 fhGamDeltaPhi->Draw("same");
2980 fhGamDeltaEta->SetLineColor(4);
2982 fhGamDeltaEta->Draw("same");
2984 sprintf(name,"QA_%s_DiffGeneratedReconstructed.eps",fCalorimeter.Data());
2985 c7->Print(name); printf("Plot: %s\n",name);
2987 // Reconstructed / Generated
2989 sprintf(cname,"QA_%s_ratiorecgen",fCalorimeter.Data());
2990 TCanvas * c8 = new TCanvas(cname, " reconstructed / generated", 400, 400) ;
2994 if(fhRatioE->GetEntries() > 0) gPad->SetLogy();
2995 fhGamRatioE->SetLineColor(4);
2997 fhGamRatioE->Draw("same");
2999 TLegend pLegendr(0.65,0.55,0.9,0.8);
3000 pLegendr.SetTextSize(0.06);
3001 pLegendr.AddEntry(fhRatioE,"all","L");
3002 pLegendr.AddEntry(fhGamRatioE,"from #gamma","L");
3003 pLegendr.SetFillColor(10);
3004 pLegendr.SetBorderSize(1);
3008 if(fhRatioPt->GetEntries() > 0) gPad->SetLogy();
3009 fhGamRatioPt->SetLineColor(4);
3011 fhGamRatioPt->Draw("same");
3014 fhGamRatioPhi->SetLineColor(4);
3016 fhGamRatioPhi->Draw("same");
3019 fhGamRatioEta->SetLineColor(4);
3021 fhGamRatioEta->Draw("same");
3023 sprintf(name,"QA_%s_ReconstructedDivGenerated.eps",fCalorimeter.Data());
3024 c8->Print(name); printf("Plot: %s\n",name);
3028 //Generated distributions
3030 sprintf(cname,"QA_%s_gen",fCalorimeter.Data());
3031 TCanvas * c10 = new TCanvas(cname, "Generated distributions", 600, 200) ;
3036 TH1F * haxispt = (TH1F*) fhGenPi0Pt->Clone("axispt");
3037 haxispt->SetTitle("Generated Particles p_{T}, |#eta| < 1");
3038 fhGenPi0Pt->SetLineColor(1);
3039 fhGenGamPt->SetLineColor(4);
3040 fhGenEtaPt->SetLineColor(2);
3041 fhGenOmegaPt->SetLineColor(7);
3042 fhGenElePt->SetLineColor(6);
3044 //Select the maximum of the histogram to show all lines.
3045 if(fhGenPi0Pt->GetMaximum() >= fhGenGamPt->GetMaximum() && fhGenPi0Pt->GetMaximum() >= fhGenEtaPt->GetMaximum() &&
3046 fhGenPi0Pt->GetMaximum() >= fhGenOmegaPt->GetMaximum() && fhGenPi0Pt->GetMaximum() >= fhGenElePt->GetMaximum())
3047 haxispt->SetMaximum(fhGenPi0Pt->GetMaximum());
3048 else if(fhGenGamPt->GetMaximum() >= fhGenPi0Pt->GetMaximum() && fhGenGamPt->GetMaximum() >= fhGenEtaPt->GetMaximum() &&
3049 fhGenGamPt->GetMaximum() >= fhGenOmegaPt->GetMaximum() && fhGenGamPt->GetMaximum() >= fhGenElePt->GetMaximum())
3050 haxispt->SetMaximum(fhGenGamPt->GetMaximum());
3051 else if(fhGenEtaPt->GetMaximum() >= fhGenPi0Pt->GetMaximum() && fhGenEtaPt->GetMaximum() >= fhGenGamPt->GetMaximum() &&
3052 fhGenEtaPt->GetMaximum() >= fhGenOmegaPt->GetMaximum() && fhGenEtaPt->GetMaximum() >= fhGenElePt->GetMaximum())
3053 haxispt->SetMaximum(fhGenEtaPt->GetMaximum());
3054 else if(fhGenOmegaPt->GetMaximum() >= fhGenPi0Pt->GetMaximum() && fhGenOmegaPt->GetMaximum() >= fhGenEtaPt->GetMaximum() &&
3055 fhGenOmegaPt->GetMaximum() >= fhGenGamPt->GetMaximum() && fhGenOmegaPt->GetMaximum() >= fhGenElePt->GetMaximum())
3056 haxispt->SetMaximum(fhGenOmegaPt->GetMaximum());
3057 else if(fhGenElePt->GetMaximum() >= fhGenPi0Pt->GetMaximum() && fhGenElePt->GetMaximum() >= fhGenEtaPt->GetMaximum() &&
3058 fhGenElePt->GetMaximum() >= fhGenOmegaPt->GetMaximum() && fhGenElePt->GetMaximum() >= fhGenGamPt->GetMaximum())
3059 haxispt->SetMaximum(fhGenElePt->GetMaximum());
3060 haxispt->SetMinimum(1);
3061 haxispt->Draw("axis");
3062 fhGenPi0Pt->Draw("same");
3063 fhGenGamPt->Draw("same");
3064 fhGenEtaPt->Draw("same");
3065 fhGenOmegaPt->Draw("same");
3066 fhGenElePt->Draw("same");
3068 TLegend pLegend(0.85,0.65,0.95,0.93);
3069 pLegend.SetTextSize(0.06);
3070 pLegend.AddEntry(fhGenPi0Pt," #pi^{0}","L");
3071 pLegend.AddEntry(fhGenGamPt," #gamma","L");
3072 pLegend.AddEntry(fhGenEtaPt," #eta","L");
3073 pLegend.AddEntry(fhGenOmegaPt," #omega","L");
3074 pLegend.AddEntry(fhGenElePt," e^{#pm}","L");
3075 pLegend.SetFillColor(10);
3076 pLegend.SetBorderSize(1);
3081 TH1F * haxiseta = (TH1F*) fhGenPi0Eta->Clone("axiseta");
3082 haxiseta->SetTitle("Generated Particles #eta, |#eta| < 1");
3083 fhGenPi0Eta->SetLineColor(1);
3084 fhGenGamEta->SetLineColor(4);
3085 fhGenEtaEta->SetLineColor(2);
3086 fhGenOmegaEta->SetLineColor(7);
3087 fhGenEleEta->SetLineColor(6);
3088 //Select the maximum of the histogram to show all lines.
3089 if(fhGenPi0Eta->GetMaximum() >= fhGenGamEta->GetMaximum() && fhGenPi0Eta->GetMaximum() >= fhGenEtaEta->GetMaximum() &&
3090 fhGenPi0Eta->GetMaximum() >= fhGenOmegaEta->GetMaximum() && fhGenPi0Eta->GetMaximum() >= fhGenEleEta->GetMaximum())
3091 haxiseta->SetMaximum(fhGenPi0Eta->GetMaximum());
3092 else if(fhGenGamEta->GetMaximum() >= fhGenPi0Eta->GetMaximum() && fhGenGamEta->GetMaximum() >= fhGenEtaEta->GetMaximum() &&
3093 fhGenGamEta->GetMaximum() >= fhGenOmegaEta->GetMaximum() && fhGenGamEta->GetMaximum() >= fhGenEleEta->GetMaximum())
3094 haxiseta->SetMaximum(fhGenGamEta->GetMaximum());
3095 else if(fhGenEtaEta->GetMaximum() >= fhGenPi0Eta->GetMaximum() && fhGenEtaEta->GetMaximum() >= fhGenGamEta->GetMaximum() &&
3096 fhGenEtaEta->GetMaximum() >= fhGenOmegaEta->GetMaximum() && fhGenEtaEta->GetMaximum() >= fhGenEleEta->GetMaximum())
3097 haxiseta->SetMaximum(fhGenEtaEta->GetMaximum());
3098 else if(fhGenOmegaEta->GetMaximum() >= fhGenPi0Eta->GetMaximum() && fhGenOmegaEta->GetMaximum() >= fhGenEtaEta->GetMaximum() &&
3099 fhGenOmegaEta->GetMaximum() >= fhGenGamEta->GetMaximum() && fhGenOmegaEta->GetMaximum() >= fhGenEleEta->GetMaximum())
3100 haxiseta->SetMaximum(fhGenOmegaEta->GetMaximum());
3101 else if(fhGenEleEta->GetMaximum() >= fhGenPi0Eta->GetMaximum() && fhGenEleEta->GetMaximum() >= fhGenEtaEta->GetMaximum() &&
3102 fhGenEleEta->GetMaximum() >= fhGenOmegaEta->GetMaximum() && fhGenEleEta->GetMaximum() >= fhGenGamEta->GetMaximum())
3103 haxiseta->SetMaximum(fhGenEleEta->GetMaximum());
3104 haxiseta->SetMinimum(100);
3105 haxiseta->Draw("axis");
3106 fhGenPi0Eta->Draw("same");
3107 fhGenGamEta->Draw("same");
3108 fhGenEtaEta->Draw("same");
3109 fhGenOmegaEta->Draw("same");
3110 fhGenEleEta->Draw("same");
3115 TH1F * haxisphi = (TH1F*) fhGenPi0Phi->Clone("axisphi");
3116 haxisphi->SetTitle("Generated Particles #phi, |#eta| < 1");
3117 fhGenPi0Phi->SetLineColor(1);
3118 fhGenGamPhi->SetLineColor(4);
3119 fhGenEtaPhi->SetLineColor(2);
3120 fhGenOmegaPhi->SetLineColor(7);
3121 fhGenElePhi->SetLineColor(6);
3122 //Select the maximum of the histogram to show all lines.
3123 if(fhGenPi0Phi->GetMaximum() >= fhGenGamPhi->GetMaximum() && fhGenPi0Phi->GetMaximum() >= fhGenEtaPhi->GetMaximum() &&
3124 fhGenPi0Phi->GetMaximum() >= fhGenOmegaPhi->GetMaximum() && fhGenPi0Phi->GetMaximum() >= fhGenElePhi->GetMaximum())
3125 haxisphi->SetMaximum(fhGenPi0Phi->GetMaximum());
3126 else if(fhGenGamPhi->GetMaximum() >= fhGenPi0Phi->GetMaximum() && fhGenGamPhi->GetMaximum() >= fhGenEtaPhi->GetMaximum() &&
3127 fhGenGamPhi->GetMaximum() >= fhGenOmegaPhi->GetMaximum() && fhGenGamPhi->GetMaximum() >= fhGenElePhi->GetMaximum())
3128 haxisphi->SetMaximum(fhGenGamPhi->GetMaximum());
3129 else if(fhGenEtaPhi->GetMaximum() >= fhGenPi0Phi->GetMaximum() && fhGenEtaPhi->GetMaximum() >= fhGenGamPhi->GetMaximum() &&
3130 fhGenEtaPhi->GetMaximum() >= fhGenOmegaPhi->GetMaximum() && fhGenEtaPhi->GetMaximum() >= fhGenElePhi->GetMaximum())
3131 haxisphi->SetMaximum(fhGenEtaPhi->GetMaximum());
3132 else if(fhGenOmegaPhi->GetMaximum() >= fhGenPi0Phi->GetMaximum() && fhGenOmegaPhi->GetMaximum() >= fhGenEtaPhi->GetMaximum() &&
3133 fhGenOmegaPhi->GetMaximum() >= fhGenGamPhi->GetMaximum() && fhGenOmegaPhi->GetMaximum() >= fhGenElePhi->GetMaximum())
3134 haxisphi->SetMaximum(fhGenOmegaPhi->GetMaximum());
3135 else if(fhGenElePhi->GetMaximum() >= fhGenPi0Phi->GetMaximum() && fhGenElePhi->GetMaximum() >= fhGenEtaPhi->GetMaximum() &&
3136 fhGenElePhi->GetMaximum() >= fhGenOmegaPhi->GetMaximum() && fhGenElePhi->GetMaximum() >= fhGenGamPhi->GetMaximum())
3137 haxisphi->SetMaximum(fhGenElePhi->GetMaximum());
3138 haxisphi->SetMinimum(100);
3139 haxisphi->Draw("axis");
3140 fhGenPi0Phi->Draw("same");
3141 fhGenGamPhi->Draw("same");
3142 fhGenEtaPhi->Draw("same");
3143 fhGenOmegaPhi->Draw("same");
3144 fhGenElePhi->Draw("same");
3146 sprintf(name,"QA_%s_GeneratedDistributions.eps",fCalorimeter.Data());
3147 c10->Print(name); printf("Plot: %s\n",name);
3150 //Reconstructed clusters depending on its original particle.
3152 sprintf(cname,"QA_%s_recgenid",fCalorimeter.Data());
3153 TCanvas * c11 = new TCanvas(cname, "Reconstructed particles, function of their original particle ID", 400, 400) ;
3159 TH1F * hGamE = (TH1F*) fhGamE->ProjectionX("hGamE",-1,-1);
3160 TH1F * hPi0E = (TH1F*) fhPi0E->ProjectionX("hPi0E",-1,-1);
3161 TH1F * hEleE = (TH1F*) fhEleE->ProjectionX("hEleE",-1,-1);
3162 TH1F * hNeHadE = (TH1F*) fhNeHadE->ProjectionX("hNeHadE",-1,-1);
3163 TH1F * hChHadE = (TH1F*) fhChHadE->ProjectionX("hChHadE",-1,-1);
3164 TH1F * haxisE = (TH1F*) hPi0E->Clone("axisE");
3165 haxisE->SetTitle("Reconstructed particles E, function of their original particle ID");
3166 hPi0E->SetLineColor(1);
3167 hGamE->SetLineColor(4);
3168 hNeHadE->SetLineColor(2);
3169 hChHadE->SetLineColor(7);
3170 hEleE->SetLineColor(6);
3172 //Select the maximum of the histogram to show all lines.
3173 if(hPi0E->GetMaximum() >= hGamE->GetMaximum() && hPi0E->GetMaximum() >= hNeHadE->GetMaximum() &&
3174 hPi0E->GetMaximum() >= hChHadE->GetMaximum() && hPi0E->GetMaximum() >= hEleE->GetMaximum())
3175 haxisE->SetMaximum(hPi0E->GetMaximum());
3176 else if(hGamE->GetMaximum() >= hPi0E->GetMaximum() && hGamE->GetMaximum() >= hNeHadE->GetMaximum() &&
3177 hGamE->GetMaximum() >= hChHadE->GetMaximum() && hGamE->GetMaximum() >= hEleE->GetMaximum())
3178 haxisE->SetMaximum(hGamE->GetMaximum());
3179 else if(hNeHadE->GetMaximum() >= hPi0E->GetMaximum() && hNeHadE->GetMaximum() >= hGamE->GetMaximum() &&
3180 hNeHadE->GetMaximum() >= hChHadE->GetMaximum() && hNeHadE->GetMaximum() >= hEleE->GetMaximum())
3181 haxisE->SetMaximum(hNeHadE->GetMaximum());
3182 else if(hChHadE->GetMaximum() >= hPi0E->GetMaximum() && hChHadE->GetMaximum() >= hNeHadE->GetMaximum() &&
3183 hChHadE->GetMaximum() >= hGamE->GetMaximum() && hChHadE->GetMaximum() >= hEleE->GetMaximum())
3184 haxisE->SetMaximum(hChHadE->GetMaximum());
3185 else if(hEleE->GetMaximum() >= hPi0E->GetMaximum() && hEleE->GetMaximum() >= hNeHadE->GetMaximum() &&
3186 hEleE->GetMaximum() >= hChHadE->GetMaximum() && hEleE->GetMaximum() >= hGamE->GetMaximum())
3187 haxisE->SetMaximum(hEleE->GetMaximum());
3188 haxisE->SetXTitle("E (GeV)");
3189 haxisE->SetMinimum(1);
3190 haxisE->Draw("axis");
3191 hPi0E->Draw("same");
3192 hGamE->Draw("same");
3193 hNeHadE->Draw("same");
3194 hChHadE->Draw("same");
3195 hEleE->Draw("same");
3197 TLegend pLegend2(0.8,0.65,0.95,0.93);
3198 pLegend2.SetTextSize(0.06);
3199 pLegend2.AddEntry(hPi0E," #pi^{0}","L");
3200 pLegend2.AddEntry(hGamE," #gamma","L");
3201 pLegend2.AddEntry(hEleE," e^{#pm}","L");
3202 pLegend2.AddEntry(hChHadE," h^{#pm}","L");
3203 pLegend2.AddEntry(hNeHadE," h^{0}","L");
3204 pLegend2.SetFillColor(10);
3205 pLegend2.SetBorderSize(1);
3211 //printf("%s, %s, %s, %s, %s\n",fhGamPt->GetName(),fhPi0Pt->GetName(),fhElePt->GetName(),fhNeHadPt->GetName(), fhChHadPt->GetName());
3212 TH1F * hGamPt = (TH1F*) fhGamPt->ProjectionX("hGamPt",-1,-1);
3213 TH1F * hPi0Pt = (TH1F*) fhPi0Pt->ProjectionX("hPi0Pt",-1,-1);
3214 TH1F * hElePt = (TH1F*) fhElePt->ProjectionX("hElePt",-1,-1);
3215 TH1F * hNeHadPt = (TH1F*) fhNeHadPt->ProjectionX("hNeHadPt",-1,-1);
3216 TH1F * hChHadPt = (TH1F*) fhChHadPt->ProjectionX("hChHadPt",-1,-1);
3217 haxispt = (TH1F*) hPi0Pt->Clone("axispt");
3218 haxispt->SetTitle("Reconstructed particles p_{T}, function of their original particle ID");
3219 hPi0Pt->SetLineColor(1);
3220 hGamPt->SetLineColor(4);
3221 hNeHadPt->SetLineColor(2);
3222 hChHadPt->SetLineColor(7);
3223 hElePt->SetLineColor(6);
3225 //Select the maximum of the histogram to show all lines.
3226 if(hPi0Pt->GetMaximum() >= hGamPt->GetMaximum() && hPi0Pt->GetMaximum() >= hNeHadPt->GetMaximum() &&
3227 hPi0Pt->GetMaximum() >= hChHadPt->GetMaximum() && hPi0Pt->GetMaximum() >= hElePt->GetMaximum())
3228 haxispt->SetMaximum(hPi0Pt->GetMaximum());
3229 else if(hGamPt->GetMaximum() >= hPi0Pt->GetMaximum() && hGamPt->GetMaximum() >= hNeHadPt->GetMaximum() &&
3230 hGamPt->GetMaximum() >= hChHadPt->GetMaximum() && hGamPt->GetMaximum() >= hElePt->GetMaximum())
3231 haxispt->SetMaximum(hGamPt->GetMaximum());
3232 else if(hNeHadPt->GetMaximum() >= hPi0Pt->GetMaximum() && hNeHadPt->GetMaximum() >= hGamPt->GetMaximum() &&
3233 hNeHadPt->GetMaximum() >= hChHadPt->GetMaximum() && hNeHadPt->GetMaximum() >= hElePt->GetMaximum())
3234 haxispt->SetMaximum(hNeHadPt->GetMaximum());
3235 else if(hChHadPt->GetMaximum() >= hPi0Pt->GetMaximum() && hChHadPt->GetMaximum() >= hNeHadPt->GetMaximum() &&
3236 hChHadPt->GetMaximum() >= hGamPt->GetMaximum() && hChHadPt->GetMaximum() >= hElePt->GetMaximum())
3237 haxispt->SetMaximum(hChHadPt->GetMaximum());
3238 else if(hElePt->GetMaximum() >= hPi0Pt->GetMaximum() && hElePt->GetMaximum() >= hNeHadPt->GetMaximum() &&
3239 hElePt->GetMaximum() >= hChHadPt->GetMaximum() && hElePt->GetMaximum() >= hGamPt->GetMaximum())
3240 haxispt->SetMaximum(hElePt->GetMaximum());
3241 haxispt->SetXTitle("p_{T} (GeV/c)");
3242 haxispt->SetMinimum(1);
3243 haxispt->Draw("axis");
3244 hPi0Pt->Draw("same");
3245 hGamPt->Draw("same");
3246 hNeHadPt->Draw("same");
3247 hChHadPt->Draw("same");
3248 hElePt->Draw("same");
3254 TH1F * hGamEta = (TH1F*) fhGamEta->ProjectionX("hGamEta",-1,-1);
3255 TH1F * hPi0Eta = (TH1F*) fhPi0Eta->ProjectionX("hPi0Eta",-1,-1);
3256 TH1F * hEleEta = (TH1F*) fhEleEta->ProjectionX("hEleEta",-1,-1);
3257 TH1F * hNeHadEta = (TH1F*) fhNeHadEta->ProjectionX("hNeHadEta",-1,-1);
3258 TH1F * hChHadEta = (TH1F*) fhChHadEta->ProjectionX("hChHadEta",-1,-1);
3259 haxiseta = (TH1F*) hPi0Eta->Clone("axiseta");
3260 haxiseta->SetTitle("Reconstructed particles #eta, function of their original particle ID");
3261 hPi0Eta->SetLineColor(1);
3262 hGamEta->SetLineColor(4);
3263 hNeHadEta->SetLineColor(2);
3264 hChHadEta->SetLineColor(7);
3265 hEleEta->SetLineColor(6);
3266 //Select the maximum of the histogram to show all lines.
3267 if(hPi0Eta->GetMaximum() >= hGamEta->GetMaximum() && hPi0Eta->GetMaximum() >= hNeHadEta->GetMaximum() &&
3268 hPi0Eta->GetMaximum() >= hChHadEta->GetMaximum() && hPi0Eta->GetMaximum() >= hEleEta->GetMaximum())
3269 haxiseta->SetMaximum(hPi0Eta->GetMaximum());
3270 else if(hGamEta->GetMaximum() >= hPi0Eta->GetMaximum() && hGamEta->GetMaximum() >= hNeHadEta->GetMaximum() &&
3271 hGamEta->GetMaximum() >= hChHadEta->GetMaximum() && hGamEta->GetMaximum() >= hEleEta->GetMaximum())
3272 haxiseta->SetMaximum(hGamEta->GetMaximum());
3273 else if(hNeHadEta->GetMaximum() >= hPi0Eta->GetMaximum() && hNeHadEta->GetMaximum() >= hGamEta->GetMaximum() &&
3274 hNeHadEta->GetMaximum() >= hChHadEta->GetMaximum() && hNeHadEta->GetMaximum() >= hEleEta->GetMaximum())
3275 haxiseta->SetMaximum(hNeHadEta->GetMaximum());
3276 else if(hChHadEta->GetMaximum() >= hPi0Eta->GetMaximum() && hChHadEta->GetMaximum() >= hNeHadEta->GetMaximum() &&
3277 hChHadEta->GetMaximum() >= hGamEta->GetMaximum() && hChHadEta->GetMaximum() >= hEleEta->GetMaximum())
3278 haxiseta->SetMaximum(hChHadEta->GetMaximum());
3279 else if(hEleEta->GetMaximum() >= hPi0Eta->GetMaximum() && hEleEta->GetMaximum() >= hNeHadEta->GetMaximum() &&
3280 hEleEta->GetMaximum() >= hChHadEta->GetMaximum() && hEleEta->GetMaximum() >= hGamEta->GetMaximum())
3281 haxiseta->SetMaximum(hEleEta->GetMaximum());
3283 haxiseta->SetXTitle("#eta");
3284 haxiseta->Draw("axis");
3285 hPi0Eta->Draw("same");
3286 hGamEta->Draw("same");
3287 hNeHadEta->Draw("same");
3288 hChHadEta->Draw("same");
3289 hEleEta->Draw("same");
3294 TH1F * hGamPhi = (TH1F*) fhGamPhi->ProjectionX("hGamPhi",-1,-1);
3295 TH1F * hPi0Phi = (TH1F*) fhPi0Phi->ProjectionX("hPi0Phi",-1,-1);
3296 TH1F * hElePhi = (TH1F*) fhElePhi->ProjectionX("hElePhi",-1,-1);
3297 TH1F * hNeHadPhi = (TH1F*) fhNeHadPhi->ProjectionX("hNeHadPhi",-1,-1);
3298 TH1F * hChHadPhi = (TH1F*) fhChHadPhi->ProjectionX("hChHadPhi",-1,-1);
3299 haxisphi = (TH1F*) hPi0Phi->Clone("axisphi");
3300 haxisphi->SetTitle("Reconstructed particles #phi, function of their original particle ID");
3302 hPi0Phi->SetLineColor(1);
3303 hGamPhi->SetLineColor(4);
3304 hNeHadPhi->SetLineColor(2);
3305 hChHadPhi->SetLineColor(7);
3306 hElePhi->SetLineColor(6);
3307 //Select the maximum of the histogram to show all lines.
3308 if(hPi0Phi->GetMaximum() >= hGamPhi->GetMaximum() && hPi0Phi->GetMaximum() >= hNeHadPhi->GetMaximum() &&
3309 hPi0Phi->GetMaximum() >= hChHadPhi->GetMaximum() && hPi0Phi->GetMaximum() >= hElePhi->GetMaximum())
3310 haxisphi->SetMaximum(hPi0Phi->GetMaximum());
3311 else if(hGamPhi->GetMaximum() >= hPi0Phi->GetMaximum() && hGamPhi->GetMaximum() >= hNeHadPhi->GetMaximum() &&
3312 hGamPhi->GetMaximum() >= hChHadPhi->GetMaximum() && hGamPhi->GetMaximum() >= hElePhi->GetMaximum())
3313 haxisphi->SetMaximum(hGamPhi->GetMaximum());
3314 else if(hNeHadPhi->GetMaximum() >= hPi0Phi->GetMaximum() && hNeHadPhi->GetMaximum() >= hGamPhi->GetMaximum() &&
3315 hNeHadPhi->GetMaximum() >= hChHadPhi->GetMaximum() && hNeHadPhi->GetMaximum() >= hElePhi->GetMaximum())
3316 haxisphi->SetMaximum(hNeHadPhi->GetMaximum());
3317 else if(hChHadPhi->GetMaximum() >= hPi0Phi->GetMaximum() && hChHadPhi->GetMaximum() >= hNeHadPhi->GetMaximum() &&
3318 hChHadPhi->GetMaximum() >= hGamPhi->GetMaximum() && hChHadPhi->GetMaximum() >= hElePhi->GetMaximum())
3319 haxisphi->SetMaximum(hChHadPhi->GetMaximum());
3320 else if(hElePhi->GetMaximum() >= hPi0Phi->GetMaximum() && hElePhi->GetMaximum() >= hNeHadPhi->GetMaximum() &&
3321 hElePhi->GetMaximum() >= hChHadPhi->GetMaximum() && hElePhi->GetMaximum() >= hGamPhi->GetMaximum())
3322 haxisphi->SetMaximum(hElePhi->GetMaximum());
3323 haxisphi->SetXTitle("#phi (rad)");
3324 haxisphi->Draw("axis");
3325 hPi0Phi->Draw("same");
3326 hGamPhi->Draw("same");
3327 hNeHadPhi->Draw("same");
3328 hChHadPhi->Draw("same");
3329 hElePhi->Draw("same");
3331 sprintf(name,"QA_%s_RecDistributionsGenID.eps",fCalorimeter.Data());
3332 c11->Print(name); printf("Plot: %s\n",name);
3335 //Ratio reconstructed clusters / generated particles in acceptance, for different particle ID
3338 TH1F * hPi0EClone = (TH1F*) hPi0E ->Clone("hPi0EClone");
3339 TH1F * hGamEClone = (TH1F*) hGamE ->Clone("hGamEClone");
3340 TH1F * hPi0PtClone = (TH1F*) hPi0Pt ->Clone("hPi0PtClone");
3341 TH1F * hGamPtClone = (TH1F*) hGamPt ->Clone("hGamPtClone");
3342 TH1F * hPi0EtaClone = (TH1F*) hPi0Eta->Clone("hPi0EtaClone");
3343 TH1F * hGamEtaClone = (TH1F*) hGamEta->Clone("hGamEtaClone");
3344 TH1F * hPi0PhiClone = (TH1F*) hPi0Phi->Clone("hPi0PhiClone");
3345 TH1F * hGamPhiClone = (TH1F*) hGamPhi->Clone("hGamPhiClone");
3347 sprintf(cname,"QA_%s_recgenidratio",fCalorimeter.Data());
3348 TCanvas * c12 = new TCanvas(cname, "Ratio reconstructed clusters / generated particles in acceptance, for different particle ID", 400, 400) ;
3353 haxisE->SetTitle("Ratio reconstructed clusters / generated particles in acceptance, for different particle ID");
3354 hPi0EClone->Divide(fhGenPi0AccE);
3355 hGamEClone->Divide(fhGenGamAccE);
3356 haxisE->SetMaximum(5);
3357 haxisE->SetMinimum(1e-2);
3358 haxisE->SetXTitle("E (GeV)");
3359 haxisE->SetYTitle("ratio = rec/gen");
3360 haxisE->Draw("axis");
3361 hPi0E->Draw("same");
3362 hGamE->Draw("same");
3364 TLegend pLegend3(0.75,0.2,0.9,0.4);
3365 pLegend3.SetTextSize(0.06);
3366 pLegend3.AddEntry(hPi0EClone," #pi^{0}","L");
3367 pLegend3.AddEntry(hGamEClone," #gamma","L");
3368 pLegend3.SetFillColor(10);
3369 pLegend3.SetBorderSize(1);
3374 haxispt->SetTitle("Ratio reconstructed clusters / generated particles in acceptance, for different particle ID");
3375 hPi0PtClone->Divide(fhGenPi0AccPt);
3376 hGamPtClone->Divide(fhGenGamAccPt);
3377 haxispt->SetMaximum(5);
3378 haxispt->SetMinimum(1e-2);
3379 haxispt->SetXTitle("p_{T} (GeV/c)");
3380 haxispt->SetYTitle("ratio = rec/gen");
3381 haxispt->Draw("axis");
3382 hPi0PtClone->Draw("same");
3383 hGamPtClone->Draw("same");
3388 haxiseta->SetTitle("Ratio reconstructed clusters / generated particles in acceptance, for different particle ID");
3389 hPi0EtaClone->Divide(fhGenPi0AccEta);
3390 hGamEtaClone->Divide(fhGenGamAccEta);
3391 haxiseta->SetMaximum(1.2);
3392 haxiseta->SetMinimum(1e-2);
3393 haxiseta->SetYTitle("ratio = rec/gen");
3394 haxiseta->SetXTitle("#eta");
3395 haxiseta->Draw("axis");
3396 hPi0EtaClone->Draw("same");
3397 hGamEtaClone->Draw("same");
3402 haxisphi->SetTitle("Ratio reconstructed clusters / generated particles in acceptance, for different particle ID");
3403 hPi0PhiClone->Divide(fhGenPi0AccPhi);
3404 hGamPhiClone->Divide(fhGenGamAccPhi);
3405 haxisphi->SetYTitle("ratio = rec/gen");
3406 haxisphi->SetXTitle("#phi (rad)");
3407 haxisphi->SetMaximum(1.2);
3408 haxisphi->SetMinimum(1e-2);
3409 haxisphi->Draw("axis");
3410 hPi0PhiClone->Draw("same");
3411 hGamPhiClone->Draw("same");
3413 sprintf(name,"QA_%s_EfficiencyGenID.eps",fCalorimeter.Data());
3414 c12->Print(name); printf("Plot: %s\n",name);
3418 //Reconstructed distributions
3420 sprintf(cname,"QA_%s_vertex",fCalorimeter.Data());
3421 TCanvas * c13 = new TCanvas(cname, "Particle vertex", 400, 400) ;
3426 fhEMVxyz->SetTitleOffset(1.6,"Y");
3431 fhHaVxyz->SetTitleOffset(1.6,"Y");
3436 TH1F * hEMR = (TH1F*) fhEMR->ProjectionY("hEM",-1,-1);
3437 hEMR->SetLineColor(4);
3442 TH1F * hHaR = (TH1F*) fhHaR->ProjectionY("hHa",-1,-1);
3443 hHaR->SetLineColor(4);
3447 sprintf(name,"QA_%s_ParticleVertex.eps",fCalorimeter.Data());
3448 c13->Print(name); printf("Plot: %s\n",name);
3451 //Track-matching distributions
3453 //Reconstructed distributions, matched with tracks, generated particle dependence
3455 sprintf(cname,"QA_%s_rectrackmatchGenID",fCalorimeter.Data());
3456 TCanvas * c22ch = new TCanvas(cname, "Reconstructed distributions, matched with tracks, for different particle ID", 400, 400) ;
3457 c22ch->Divide(2, 2);
3461 TH1F * hGamECharged = (TH1F*) fhGamECharged->ProjectionX("hGamECharged",-1,-1);
3462 TH1F * hPi0ECharged = (TH1F*) fhPi0ECharged->ProjectionX("hPi0ECharged",-1,-1);
3463 TH1F * hEleECharged = (TH1F*) fhEleECharged->ProjectionX("hEleECharged",-1,-1);
3464 TH1F * hNeHadECharged = (TH1F*) fhNeHadECharged->ProjectionX("hNeHadECharged",-1,-1);
3465 TH1F * hChHadECharged = (TH1F*) fhChHadECharged->ProjectionX("hChHadECharged",-1,-1);
3466 hPi0ECharged->SetLineColor(1);
3467 hGamECharged->SetLineColor(4);
3468 hNeHadECharged->SetLineColor(2);
3469 hChHadECharged->SetLineColor(7);
3470 hEleECharged->SetLineColor(6);
3472 fhECharged->SetLineColor(3);
3473 fhECharged->SetMinimum(0.5);
3475 hPi0ECharged->Draw("same");
3476 hGamECharged->Draw("same");
3477 hNeHadECharged->Draw("same");
3478 hChHadECharged->Draw("same");
3479 hEleECharged->Draw("same");
3480 TLegend pLegend22(0.75,0.45,0.9,0.8);
3481 pLegend22.SetTextSize(0.06);
3482 pLegend22.AddEntry(fhECharged,"all","L");
3483 pLegend22.AddEntry(hPi0ECharged,"#pi^{0}","L");
3484 pLegend22.AddEntry(hGamECharged,"#gamma","L");
3485 pLegend22.AddEntry(hEleECharged,"e^{#pm}","L");
3486 pLegend22.AddEntry(hChHadECharged,"h^{#pm}","L");
3487 pLegend22.AddEntry(hNeHadECharged,"h^{0}","L");
3488 pLegend22.SetFillColor(10);
3489 pLegend22.SetBorderSize(1);
3494 TH1F * hGamPtCharged = (TH1F*) fhGamPtCharged->ProjectionX("hGamPtCharged",-1,-1);
3495 TH1F * hPi0PtCharged = (TH1F*) fhPi0PtCharged->ProjectionX("hPi0PtCharged",-1,-1);
3496 TH1F * hElePtCharged = (TH1F*) fhElePtCharged->ProjectionX("hElePtCharged",-1,-1);
3497 TH1F * hNeHadPtCharged = (TH1F*) fhNeHadPtCharged->ProjectionX("hNeHadPtCharged",-1,-1);
3498 TH1F * hChHadPtCharged = (TH1F*) fhChHadPtCharged->ProjectionX("hChHadPtCharged",-1,-1);
3499 hPi0PtCharged->SetLineColor(1);
3500 hGamPtCharged->SetLineColor(4);
3501 hNeHadPtCharged->SetLineColor(2);
3502 hChHadPtCharged->SetLineColor(7);
3503 hElePtCharged->SetLineColor(6);
3505 fhPtCharged->SetLineColor(3);
3506 fhPtCharged->SetMinimum(0.5);
3507 fhPtCharged->Draw();
3508 hPi0PtCharged->Draw("same");
3509 hGamPtCharged->Draw("same");
3510 hNeHadPtCharged->Draw("same");
3511 hChHadPtCharged->Draw("same");
3512 hElePtCharged->Draw("same");
3516 TH1F * hGamEtaCharged = (TH1F*) fhGamEtaCharged->ProjectionX("hGamEtaCharged",-1,-1);
3517 TH1F * hPi0EtaCharged = (TH1F*) fhPi0EtaCharged->ProjectionX("hPi0EtaCharged",-1,-1);
3518 TH1F * hEleEtaCharged = (TH1F*) fhEleEtaCharged->ProjectionX("hEleEtaCharged",-1,-1);
3519 TH1F * hNeHadEtaCharged = (TH1F*) fhNeHadEtaCharged->ProjectionX("hNeHadEtaCharged",-1,-1);
3520 TH1F * hChHadEtaCharged = (TH1F*) fhChHadEtaCharged->ProjectionX("hChHadEtaCharged",-1,-1);
3521 hPi0EtaCharged->SetLineColor(1);
3522 hGamEtaCharged->SetLineColor(4);
3523 hNeHadEtaCharged->SetLineColor(2);
3524 hChHadEtaCharged->SetLineColor(7);
3525 hEleEtaCharged->SetLineColor(6);
3527 fhEtaCharged->SetLineColor(3);
3528 fhEtaCharged->SetMinimum(0.5);
3529 fhEtaCharged->Draw();
3530 hPi0EtaCharged->Draw("same");
3531 hGamEtaCharged->Draw("same");
3532 hNeHadEtaCharged->Draw("same");
3533 hChHadEtaCharged->Draw("same");
3534 hEleEtaCharged->Draw("same");
3538 TH1F * hGamPhiCharged = (TH1F*) fhGamPhiCharged->ProjectionX("hGamPhiCharged",-1,-1);
3539 TH1F * hPi0PhiCharged = (TH1F*) fhPi0PhiCharged->ProjectionX("hPi0PhiCharged",-1,-1);
3540 TH1F * hElePhiCharged = (TH1F*) fhElePhiCharged->ProjectionX("hElePhiCharged",-1,-1);
3541 TH1F * hNeHadPhiCharged = (TH1F*) fhNeHadPhiCharged->ProjectionX("hNeHadPhiCharged",-1,-1);
3542 TH1F * hChHadPhiCharged = (TH1F*) fhChHadPhiCharged->ProjectionX("hChHadPhiCharged",-1,-1);
3543 hPi0PhiCharged->SetLineColor(1);
3544 hGamPhiCharged->SetLineColor(4);
3545 hNeHadPhiCharged->SetLineColor(2);
3546 hChHadPhiCharged->SetLineColor(7);
3547 hElePhiCharged->SetLineColor(6);
3549 fhPhiCharged->SetLineColor(3);
3550 fhPhiCharged->SetMinimum(0.5);
3551 fhPhiCharged->Draw();
3552 hPi0PhiCharged->Draw("same");
3553 hGamPhiCharged->Draw("same");
3554 hNeHadPhiCharged->Draw("same");
3555 hChHadPhiCharged->Draw("same");
3556 hElePhiCharged->Draw("same");
3559 sprintf(name,"QA_%s_ReconstructedDistributions_TrackMatchedGenID.eps",fCalorimeter.Data());
3560 c22ch->Print(name); printf("Plot: %s\n",name);
3562 TH1F * hGamEChargedClone = (TH1F*) hGamECharged->Clone("GamEChargedClone");
3563 TH1F * hGamPtChargedClone = (TH1F*) hGamPtCharged->Clone("GamPtChargedClone");
3564 TH1F * hGamEtaChargedClone = (TH1F*) hGamEtaCharged->Clone("GamEtaChargedClone");
3565 TH1F * hGamPhiChargedClone = (TH1F*) hGamPhiCharged->Clone("GamPhiChargedClone");
3567 TH1F * hPi0EChargedClone = (TH1F*) hPi0ECharged->Clone("Pi0EChargedClone");
3568 TH1F * hPi0PtChargedClone = (TH1F*) hPi0PtCharged->Clone("Pi0PtChargedClone");
3569 TH1F * hPi0EtaChargedClone = (TH1F*) hPi0EtaCharged->Clone("Pi0EtaChargedClone");
3570 TH1F * hPi0PhiChargedClone = (TH1F*) hPi0PhiCharged->Clone("Pi0PhiChargedClone");
3572 TH1F * hEleEChargedClone = (TH1F*) hEleECharged->Clone("EleEChargedClone");
3573 TH1F * hElePtChargedClone = (TH1F*) hElePtCharged->Clone("ElePtChargedClone");
3574 TH1F * hEleEtaChargedClone = (TH1F*) hEleEtaCharged->Clone("EleEtaChargedClone");
3575 TH1F * hElePhiChargedClone = (TH1F*) hElePhiCharged->Clone("ElePhiChargedClone");
3577 TH1F * hNeHadEChargedClone = (TH1F*) hNeHadECharged->Clone("NeHadEChargedClone");
3578 TH1F * hNeHadPtChargedClone = (TH1F*) hNeHadPtCharged->Clone("NeHadPtChargedClone");
3579 TH1F * hNeHadEtaChargedClone = (TH1F*) hNeHadEtaCharged->Clone("NeHadEtaChargedClone");
3580 TH1F * hNeHadPhiChargedClone = (TH1F*) hNeHadPhiCharged->Clone("NeHadPhiChargedClone");
3582 TH1F * hChHadEChargedClone = (TH1F*) hChHadECharged->Clone("ChHadEChargedClone");
3583 TH1F * hChHadPtChargedClone = (TH1F*) hChHadPtCharged->Clone("ChHadPtChargedClone");
3584 TH1F * hChHadEtaChargedClone = (TH1F*) hChHadEtaCharged->Clone("ChHadEtaChargedClone");
3585 TH1F * hChHadPhiChargedClone = (TH1F*) hChHadPhiCharged->Clone("ChHadPhiChargedClone");
3587 //Ratio: reconstructed track matched/ all reconstructed
3589 sprintf(cname,"QA_%s_rectrackmatchratGenID",fCalorimeter.Data());
3590 TCanvas * c3ch = new TCanvas(cname, "Ratio: reconstructed track matched/ all reconstructed, for different particle ID", 400, 400) ;
3594 hEChargedClone->SetMaximum(1.2);
3595 hEChargedClone->SetMinimum(0.001);
3596 hEChargedClone->SetLineColor(3);
3597 hEChargedClone->SetYTitle("track matched / all");
3598 hPi0EChargedClone->Divide(hPi0E);
3599 hGamEChargedClone->Divide(hGamE);
3600 hEleEChargedClone->Divide(hEleE);
3601 hNeHadEChargedClone->Divide(hNeHadE);
3602 hChHadEChargedClone->Divide(hChHadE);
3603 hEChargedClone->Draw();
3604 hPi0EChargedClone->Draw("same");
3605 hGamEChargedClone->Draw("same");
3606 hEleEChargedClone->Draw("same");
3607 hNeHadEChargedClone->Draw("same");
3608 hChHadEChargedClone->Draw("same");
3610 TLegend pLegend3ch(0.75,0.45,0.9,0.8);
3611 pLegend3ch.SetTextSize(0.06);
3612 pLegend3ch.AddEntry(hEChargedClone,"all","L");
3613 pLegend3ch.AddEntry(hPi0EChargedClone,"#pi^{0}","L");
3614 pLegend3ch.AddEntry(hGamEChargedClone,"#gamma","L");
3615 pLegend3ch.AddEntry(hEleEChargedClone,"e^{#pm}","L");
3616 pLegend3ch.AddEntry(hChHadEChargedClone,"h^{#pm}","L");
3617 pLegend3ch.AddEntry(hNeHadEChargedClone,"h^{0}","L");
3618 pLegend3ch.SetFillColor(10);
3619 pLegend3ch.SetBorderSize(1);
3623 hPtChargedClone->SetMaximum(1.2);
3624 hPtChargedClone->SetMinimum(0.001);
3625 hPtChargedClone->SetLineColor(3);
3626 hPtChargedClone->SetYTitle("track matched / all");
3627 hPi0PtChargedClone->Divide(hPi0Pt);
3628 hGamPtChargedClone->Divide(hGamPt);
3629 hElePtChargedClone->Divide(hElePt);
3630 hNeHadPtChargedClone->Divide(hNeHadPt);
3631 hChHadPtChargedClone->Divide(hChHadPt);
3632 hPtChargedClone->Draw();
3633 hPi0PtChargedClone->Draw("same");
3634 hGamPtChargedClone->Draw("same");
3635 hElePtChargedClone->Draw("same");
3636 hNeHadPtChargedClone->Draw("same");
3637 hChHadPtChargedClone->Draw("same");
3640 hEtaChargedClone->SetMaximum(1.2);
3641 hEtaChargedClone->SetMinimum(0.001);
3642 hEtaChargedClone->SetLineColor(3);
3643 hEtaChargedClone->SetYTitle("track matched / all");
3644 hPi0EtaChargedClone->Divide(hPi0Eta);
3645 hGamEtaChargedClone->Divide(hGamEta);
3646 hEleEtaChargedClone->Divide(hEleEta);
3647 hNeHadEtaChargedClone->Divide(hNeHadEta);
3648 hChHadEtaChargedClone->Divide(hChHadEta);
3649 hEtaChargedClone->Draw();
3650 hPi0EtaChargedClone->Draw("same");
3651 hGamEtaChargedClone->Draw("same");
3652 hEleEtaChargedClone->Draw("same");
3653 hNeHadEtaChargedClone->Draw("same");
3654 hChHadEtaChargedClone->Draw("same");
3657 hPhiChargedClone->SetMaximum(1.2);
3658 hPhiChargedClone->SetMinimum(0.001);
3659 hPhiChargedClone->SetLineColor(3);
3660 hPhiChargedClone->SetYTitle("track matched / all");
3661 hPi0PhiChargedClone->Divide(hPi0Phi);
3662 hGamPhiChargedClone->Divide(hGamPhi);
3663 hElePhiChargedClone->Divide(hElePhi);
3664 hNeHadPhiChargedClone->Divide(hNeHadPhi);
3665 hChHadPhiChargedClone->Divide(hChHadPhi);
3666 hPhiChargedClone->Draw();
3667 hPi0PhiChargedClone->Draw("same");
3668 hGamPhiChargedClone->Draw("same");
3669 hElePhiChargedClone->Draw("same");
3670 hNeHadPhiChargedClone->Draw("same");
3671 hChHadPhiChargedClone->Draw("same");
3673 sprintf(name,"QA_%s_RatioReconstructedMatchedDistributionsGenID.eps",fCalorimeter.Data());
3674 c3ch->Print(name); printf("Plot: %s\n",name);
3677 //Track-matching distributions
3679 sprintf(cname,"QA_%s_trkmatch",fCalorimeter.Data());
3680 TCanvas *cme = new TCanvas(cname,"Track-matching distributions", 400, 400);
3683 TLegend pLegendpE0(0.6,0.55,0.9,0.8);
3684 pLegendpE0.SetTextSize(0.04);
3685 pLegendpE0.AddEntry(fh1pOverE,"all","L");
3686 pLegendpE0.AddEntry(fh1pOverER02,"dR < 0.02","L");
3687 pLegendpE0.SetFillColor(10);
3688 pLegendpE0.SetBorderSize(1);
3689 //pLegendpE0.Draw();
3692 if(fh1pOverE->GetEntries() > 0) gPad->SetLogy();
3693 fh1pOverE->SetTitle("Track matches p/E");
3695 fh1pOverER02->SetLineColor(4);
3696 fh1pOverER02->Draw("same");
3700 if(fh1dR->GetEntries() > 0) gPad->SetLogy();
3704 fh2MatchdEdx->Draw();
3709 sprintf(name,"QA_%s_TrackMatchingEleDist.eps",fCalorimeter.Data());
3710 cme->Print(name); printf("Plot: %s\n",name);
3713 sprintf(cname,"QA_%s_trkmatchMCEle",fCalorimeter.Data());
3714 TCanvas *cmemc = new TCanvas(cname,"Track-matching distributions from MC electrons", 600, 200);
3719 fhMCEle1pOverE->Draw();
3720 fhMCEle1pOverER02->SetLineColor(4);
3721 fhMCEle1pOverE->SetLineColor(1);
3722 fhMCEle1pOverER02->Draw("same");
3730 fhMCEle2MatchdEdx->Draw();
3732 sprintf(name,"QA_%s_TrackMatchingDistMCEle.eps",fCalorimeter.Data());
3733 cmemc->Print(name); printf("Plot: %s\n",name);
3736 sprintf(cname,"QA_%s_trkmatchMCChHad",fCalorimeter.Data());
3737 TCanvas *cmemchad = new TCanvas(cname,"Track-matching distributions from MC charged hadrons", 600, 200);
3738 cmemchad->Divide(3,1);
3742 fhMCChHad1pOverE->Draw();
3743 fhMCChHad1pOverER02->SetLineColor(4);
3744 fhMCChHad1pOverE->SetLineColor(1);
3745 fhMCChHad1pOverER02->Draw("same");
3750 fhMCChHad1dR->Draw();
3753 fhMCChHad2MatchdEdx->Draw();
3755 sprintf(name,"QA_%s_TrackMatchingDistMCChHad.eps",fCalorimeter.Data());
3756 cmemchad->Print(name); printf("Plot: %s\n",name);
3758 sprintf(cname,"QA_%s_trkmatchMCNeutral",fCalorimeter.Data());
3759 TCanvas *cmemcn = new TCanvas(cname,"Track-matching distributions from MC neutrals", 600, 200);
3760 cmemcn->Divide(3,1);
3764 fhMCNeutral1pOverE->Draw();
3765 fhMCNeutral1pOverE->SetLineColor(1);
3766 fhMCNeutral1pOverER02->SetLineColor(4);
3767 fhMCNeutral1pOverER02->Draw("same");
3772 fhMCNeutral1dR->Draw();
3775 fhMCNeutral2MatchdEdx->Draw();
3777 sprintf(name,"QA_%s_TrackMatchingDistMCNeutral.eps",fCalorimeter.Data());
3778 cmemcn->Print(name); printf("Plot: %s\n",name);
3780 sprintf(cname,"QA_%s_trkmatchpE",fCalorimeter.Data());
3781 TCanvas *cmpoe = new TCanvas(cname,"Track-matching distributions, p/E", 400, 200);
3786 fh1pOverE->SetLineColor(1);
3787 fhMCEle1pOverE->SetLineColor(4);
3788 fhMCChHad1pOverE->SetLineColor(2);
3789 fhMCNeutral1pOverE->SetLineColor(7);
3790 fh1pOverER02->SetMinimum(0.5);
3792 fhMCEle1pOverE->Draw("same");
3793 fhMCChHad1pOverE->Draw("same");
3794 fhMCNeutral1pOverE->Draw("same");
3795 TLegend pLegendpE(0.65,0.55,0.9,0.8);
3796 pLegendpE.SetTextSize(0.06);
3797 pLegendpE.AddEntry(fh1pOverE,"all","L");
3798 pLegendpE.AddEntry(fhMCEle1pOverE,"e^{#pm}","L");
3799 pLegendpE.AddEntry(fhMCChHad1pOverE,"h^{#pm}","L");
3800 pLegendpE.AddEntry(fhMCNeutral1pOverE,"neutrals","L");
3801 pLegendpE.SetFillColor(10);
3802 pLegendpE.SetBorderSize(1);
3807 fh1pOverER02->SetTitle("Track matches p/E, dR<0.2");
3808 fh1pOverER02->SetLineColor(1);
3809 fhMCEle1pOverER02->SetLineColor(4);
3810 fhMCChHad1pOverER02->SetLineColor(2);
3811 fhMCNeutral1pOverER02->SetLineColor(7);
3812 fh1pOverER02->SetMaximum(fh1pOverE->GetMaximum());
3813 fh1pOverER02->SetMinimum(0.5);
3814 fh1pOverER02->Draw();
3815 fhMCEle1pOverER02->Draw("same");
3816 fhMCChHad1pOverER02->Draw("same");
3817 fhMCNeutral1pOverER02->Draw("same");
3819 // TLegend pLegendpE2(0.65,0.55,0.9,0.8);
3820 // pLegendpE2.SetTextSize(0.06);
3821 // pLegendpE2.SetHeader("dR < 0.02");
3822 // pLegendpE2.SetFillColor(10);
3823 // pLegendpE2.SetBorderSize(1);
3824 // pLegendpE2.Draw();
3826 sprintf(name,"QA_%s_TrackMatchingPOverE.eps",fCalorimeter.Data());
3827 cmpoe->Print(name); printf("Plot: %s\n",name);
3831 sprintf(line, ".!tar -zcf QA_%s_%s.tar.gz *%s*.eps", fCalorimeter.Data(), GetName(),fCalorimeter.Data()) ;
3832 gROOT->ProcessLine(line);
3833 sprintf(line, ".!rm -fR *.eps");
3834 gROOT->ProcessLine(line);
3836 printf("AliAnaCalorimeterQA::Terminate() - !! All the eps files are in QA_%s_%s.tar.gz !!!\n", fCalorimeter.Data(), GetName());