]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/PartCorrDep/AliAnaCalorimeterQA.cxx
Update and move to new raw reader (Sylwester)
[u/mrichter/AliRoot.git] / PWG4 / PartCorrDep / AliAnaCalorimeterQA.cxx
CommitLineData
9725fd2a 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
15/* $Id: $ */
16
17//_________________________________________________________________________
18// Class to check results from simulations or reconstructed real data.
19// Fill few histograms and do some checking plots
20//
21//-- Author: Gustavo Conesa (INFN-LNF)
22//_________________________________________________________________________
23
24
25// --- ROOT system ---
21d9bc2a 26//#include "Riostream.h"
591cc579 27#include "TObjArray.h"
9725fd2a 28#include "TParticle.h"
c180f65d 29#include "TDatabasePDG.h"
9725fd2a 30#include "TCanvas.h"
31#include "TPad.h"
32#include "TROOT.h"
33//#include "TH3F.h"
34#include "TH2F.h"
35#include "TLegend.h"
36
37//---- AliRoot system ----
38#include "AliAnaCalorimeterQA.h"
39#include "AliCaloTrackReader.h"
40#include "AliStack.h"
41#include "AliAODCaloCells.h"
902aa95c 42#include "AliESDCaloCells.h"
9725fd2a 43#include "AliAODCaloCluster.h"
44#include "AliFidutialCut.h"
45#include "AliESDtrack.h"
902aa95c 46#include "AliAODTrack.h"
9725fd2a 47#include "AliESDCaloCluster.h"
48#include "AliESDEvent.h"
902aa95c 49#include "AliAODEvent.h"
50#include "AliVEventHandler.h"
51#include "AliAnalysisManager.h"
52#include "AliAODMCParticle.h"
53#include "AliMCAnalysisUtils.h"
9725fd2a 54
55ClassImp(AliAnaCalorimeterQA)
56
57//____________________________________________________________________________
58 AliAnaCalorimeterQA::AliAnaCalorimeterQA() :
21d9bc2a 59 AliAnaPartCorrBaseClass(), fCalorimeter(""), fStyleMacro(""), fMakePlots(kFALSE),
60 fhE(0),fhPt(0),fhPhi(0),fhEta(0), fhEtaPhi(0),
9725fd2a 61 fhECharged(0),fhPtCharged(0),fhPhiCharged(0),fhEtaCharged(0), fhEtaPhiCharged(0),
62 fhEChargedNoOut(0),fhPtChargedNoOut(0),fhPhiChargedNoOut(0),fhEtaChargedNoOut(0), fhEtaPhiChargedNoOut(0),
63 fhDeltaE(0), fhDeltaPt(0),fhDeltaPhi(0),fhDeltaEta(0), fhRatioE(0), fhRatioPt(0),fhRatioPhi(0),fhRatioEta(0),
64 fh2E(0),fh2Pt(0),fh2Phi(0),fh2Eta(0), fhIM(0), fhAsym(0), fhNCellsPerCluster(0), fhNClusters(0), fhNCells(0), fhAmplitude(0),
65 fhGenGamPt(0),fhGenGamEta(0),fhGenGamPhi(0),fhGenPi0Pt(0),fhGenPi0Eta(0),fhGenPi0Phi(0),
66 fhGenEtaPt(0),fhGenEtaEta(0),fhGenEtaPhi(0),fhGenOmegaPt(0),fhGenOmegaEta(0),fhGenOmegaPhi(0),
67 fhGenElePt(0),fhGenEleEta(0),fhGenElePhi(0), fhEMVxyz(0), fhEMR(0), fhHaVxyz(0), fhHaR(0),
68 fhGamE(0),fhGamPt(0),fhGamPhi(0),fhGamEta(0),
69 fhGamDeltaE(0), fhGamDeltaPt(0),fhGamDeltaPhi(0),fhGamDeltaEta(0), fhGamRatioE(0), fhGamRatioPt(0),fhGamRatioPhi(0),fhGamRatioEta(0),
9725fd2a 70 fhEleE(0),fhElePt(0),fhElePhi(0),fhEleEta(0),
71 fhPi0E(0),fhPi0Pt(0),fhPi0Phi(0),fhPi0Eta(0), fhNeHadE(0),fhNeHadPt(0),fhNeHadPhi(0),fhNeHadEta(0),
72 fhChHadE(0),fhChHadPt(0),fhChHadPhi(0),fhChHadEta(0),
06e5656a 73 fhGamECharged(0),fhGamPtCharged(0),fhGamPhiCharged(0),fhGamEtaCharged(0),
74 fhEleECharged(0),fhElePtCharged(0),fhElePhiCharged(0),fhEleEtaCharged(0),
75 fhPi0ECharged(0),fhPi0PtCharged(0),fhPi0PhiCharged(0),fhPi0EtaCharged(0),
76 fhNeHadECharged(0),fhNeHadPtCharged(0),fhNeHadPhiCharged(0),fhNeHadEtaCharged(0),
77 fhChHadECharged(0),fhChHadPtCharged(0),fhChHadPhiCharged(0),fhChHadEtaCharged(0),
9725fd2a 78 fhGenGamAccE(0),fhGenGamAccPt(0),fhGenGamAccEta(0),fhGenGamAccPhi(0),
79 fhGenPi0AccE(0),fhGenPi0AccPt(0),fhGenPi0AccEta(0),fhGenPi0AccPhi(0),
06e5656a 80 fh1pOverE(0),fh1dR(0),fh2EledEdx(0), fh2MatchdEdx(0),fhMCEle1pOverE(0),fhMCEle1dR(0),fhMCEle2MatchdEdx(0),
81 fhMCChHad1pOverE(0),fhMCChHad1dR(0),fhMCChHad2MatchdEdx(0),fhMCNeutral1pOverE(0),fhMCNeutral1dR(0),fhMCNeutral2MatchdEdx(0),
82 fh1pOverER02(0), fhMCEle1pOverER02(0), fhMCChHad1pOverER02(0), fhMCNeutral1pOverER02(0)
9725fd2a 83{
84 //Default Ctor
85
86 //Initialize parameters
87 InitParameters();
88}
89
90//____________________________________________________________________________
91AliAnaCalorimeterQA::AliAnaCalorimeterQA(const AliAnaCalorimeterQA & qa) :
21d9bc2a 92 AliAnaPartCorrBaseClass(qa), fCalorimeter(qa.fCalorimeter), fStyleMacro(qa.fStyleMacro), fMakePlots(qa.fMakePlots),
9725fd2a 93 fhE(qa.fhE),fhPt(qa.fhPt), fhPhi(qa.fhPhi), fhEta(qa.fhEta),
94 fhEtaPhi(qa.fhEtaPhi), fhECharged(qa.fhECharged),fhPtCharged(qa.fhPtCharged),fhPhiCharged(qa.fhPhiCharged),
95 fhEtaCharged(qa.fhEtaCharged), fhEtaPhiCharged(qa.fhEtaPhiCharged),
96 fhEChargedNoOut(qa.fhEChargedNoOut),fhPtChargedNoOut(qa.fhPtChargedNoOut),fhPhiChargedNoOut(qa.fhPhiChargedNoOut),
97 fhEtaChargedNoOut(qa.fhEtaChargedNoOut), fhEtaPhiChargedNoOut(qa.fhEtaPhiChargedNoOut),
98 fhDeltaE(qa.fhDeltaE), fhDeltaPt(qa.fhDeltaPt), fhDeltaPhi(qa.fhDeltaPhi), fhDeltaEta(qa.fhDeltaEta),
99 fhRatioE(qa.fhRatioE), fhRatioPt(qa.fhRatioPt), fhRatioPhi(qa.fhRatioPhi), fhRatioEta(qa.fhRatioEta),
100 fh2E(qa.fh2E), fh2Pt(qa.fh2Pt), fh2Phi(qa.fh2Phi),fh2Eta(qa.fh2Eta),
101 fhIM(qa.fhIM), fhAsym(qa.fhAsym), fhNCellsPerCluster(qa.fhNCellsPerCluster), fhNClusters(qa.fhNClusters),
102 fhNCells(qa.fhNCells), fhAmplitude(qa.fhAmplitude),
103 fhGenGamPt(qa.fhGenGamPt), fhGenGamEta(qa.fhGenGamEta), fhGenGamPhi(qa.fhGenGamPhi),
104 fhGenPi0Pt(qa.fhGenPi0Pt), fhGenPi0Eta(qa.fhGenPi0Eta), fhGenPi0Phi(qa.fhGenPi0Phi),
105 fhGenEtaPt(qa.fhGenEtaPt), fhGenEtaEta(qa.fhGenEtaEta), fhGenEtaPhi(qa.fhGenEtaPhi),
106 fhGenOmegaPt(qa.fhGenOmegaPt), fhGenOmegaEta(qa.fhGenOmegaEta), fhGenOmegaPhi(qa.fhGenOmegaPhi),
107 fhGenElePt(qa.fhGenElePt), fhGenEleEta(qa.fhGenEleEta), fhGenElePhi(qa.fhGenElePhi),
108 fhEMVxyz(qa.fhEMVxyz), fhEMR(qa.fhEMR), fhHaVxyz(qa.fhHaVxyz), fhHaR(qa.fhHaR),
109 fhGamE(qa.fhGamE),fhGamPt(qa.fhGamPt),fhGamPhi(qa.fhGamPhi),fhGamEta(qa.fhGamEta),
110 fhGamDeltaE(qa.fhGamDeltaE), fhGamDeltaPt(qa.fhGamDeltaPt), fhGamDeltaPhi(qa.fhGamDeltaPhi), fhGamDeltaEta(qa.fhGamDeltaEta),
111 fhGamRatioE(qa.fhGamRatioE), fhGamRatioPt(qa.fhGamRatioPt), fhGamRatioPhi(qa.fhGamRatioPhi), fhGamRatioEta(qa.fhGamRatioEta),
9725fd2a 112 fhEleE(qa.fhEleE),fhElePt(qa.fhElePt),fhElePhi(qa.fhElePhi),fhEleEta(qa.fhEleEta),
113 fhPi0E(qa.fhPi0E),fhPi0Pt(qa.fhPi0Pt),fhPi0Phi(qa.fhPi0Phi),fhPi0Eta(qa.fhPi0Eta),
114 fhNeHadE(qa.fhNeHadE),fhNeHadPt(qa.fhNeHadPt),fhNeHadPhi(qa.fhNeHadPhi),fhNeHadEta(qa.fhNeHadEta),
115 fhChHadE(qa.fhChHadE),fhChHadPt(qa.fhChHadPt),fhChHadPhi(qa.fhChHadPhi),fhChHadEta(qa.fhChHadEta),
06e5656a 116 fhGamECharged(qa.fhGamECharged),fhGamPtCharged(qa.fhGamPtCharged),fhGamPhiCharged(qa.fhGamPhiCharged),fhGamEtaCharged(qa.fhGamEtaCharged),
117 fhEleECharged(qa.fhEleECharged),fhElePtCharged(qa.fhElePtCharged),fhElePhiCharged(qa.fhElePhiCharged),fhEleEtaCharged(qa.fhEleEtaCharged),
118 fhPi0ECharged(qa.fhPi0ECharged),fhPi0PtCharged(qa.fhPi0PtCharged),fhPi0PhiCharged(qa.fhPi0PhiCharged),fhPi0EtaCharged(qa.fhPi0EtaCharged),
119 fhNeHadECharged(qa.fhNeHadECharged),fhNeHadPtCharged(qa.fhNeHadPtCharged),fhNeHadPhiCharged(qa.fhNeHadPhiCharged),fhNeHadEtaCharged(qa.fhNeHadEtaCharged),
120 fhChHadECharged(qa.fhChHadECharged),fhChHadPtCharged(qa.fhChHadPtCharged),fhChHadPhiCharged(qa.fhChHadPhiCharged),fhChHadEtaCharged(qa.fhChHadEtaCharged),
9725fd2a 121 fhGenGamAccE(qa.fhGenGamAccE),fhGenGamAccPt(qa.fhGenGamAccPt),fhGenGamAccEta(qa.fhGenGamAccEta),fhGenGamAccPhi(qa.fhGenGamAccPhi),
122 fhGenPi0AccE(qa.fhGenPi0AccE),fhGenPi0AccPt(qa.fhGenPi0AccPt),fhGenPi0AccEta(qa.fhGenPi0AccEta),fhGenPi0AccPhi(qa.fhGenPi0AccPhi),
06e5656a 123 fh1pOverE(qa.fh1pOverE),fh1dR(qa.fh1dR),fh2EledEdx(qa.fh2EledEdx), fh2MatchdEdx(qa.fh2MatchdEdx),
124 fhMCEle1pOverE(qa.fhMCEle1pOverE),fhMCEle1dR(qa.fhMCEle1dR), fhMCEle2MatchdEdx(qa.fhMCEle2MatchdEdx),
125 fhMCChHad1pOverE(qa.fhMCChHad1pOverE),fhMCChHad1dR(qa.fhMCChHad1dR), fhMCChHad2MatchdEdx(qa.fhMCChHad2MatchdEdx),
126 fhMCNeutral1pOverE(qa.fhMCNeutral1pOverE),fhMCNeutral1dR(qa.fhMCNeutral1dR), fhMCNeutral2MatchdEdx(qa.fhMCNeutral2MatchdEdx),
127 fh1pOverER02(qa.fh1pOverER02), fhMCEle1pOverER02(qa.fhMCEle1pOverER02),fhMCChHad1pOverER02(qa.fhMCChHad1pOverER02), fhMCNeutral1pOverER02(qa.fhMCNeutral1pOverER02)
9725fd2a 128{
129 // cpy ctor
130
131}
132
133//_________________________________________________________________________
134AliAnaCalorimeterQA & AliAnaCalorimeterQA::operator = (const AliAnaCalorimeterQA & qa)
135{
136 // assignment operator
137
138 if(this == &qa)return *this;
139 ((AliAnaPartCorrBaseClass *)this)->operator=(qa);
140
902aa95c 141 fCalorimeter = qa.fCalorimeter;
142 fStyleMacro = qa.fStyleMacro;
143 fMakePlots = qa.fMakePlots;
144
9725fd2a 145 fhE = qa.fhE;
146 fhPt = qa.fhPt;
147 fhPhi = qa.fhPhi;
148 fhEta = qa.fhEta;
149 fhEtaPhi = qa.fhEtaPhi;
150
151 fhECharged = qa.fhECharged;
152 fhPtCharged = qa.fhPtCharged;
153 fhPhiCharged = qa.fhPhiCharged;
154 fhEtaCharged = qa.fhEtaCharged;
155 fhEtaPhiCharged = qa.fhEtaPhiCharged;
156
157 fhEChargedNoOut = qa.fhEChargedNoOut;
158 fhPtChargedNoOut = qa.fhPtChargedNoOut;
159 fhPhiChargedNoOut = qa.fhPhiChargedNoOut;
160 fhEtaChargedNoOut = qa.fhEtaChargedNoOut;
161 fhEtaPhiChargedNoOut = qa.fhEtaPhiChargedNoOut;
162
163 fhIM = qa.fhIM;
164 fhAsym = qa.fhAsym;
165
166 fhNCellsPerCluster = qa.fhNCellsPerCluster;
167 fhNClusters = qa.fhNClusters;
168
169 fhDeltaE = qa.fhDeltaE;
170 fhDeltaPt = qa.fhDeltaPt;
171 fhDeltaPhi = qa.fhDeltaPhi;
172 fhDeltaEta = qa.fhDeltaEta;
173
174 fhRatioE = qa.fhRatioE;
175 fhRatioPt = qa.fhRatioPt;
176 fhRatioPhi = qa.fhRatioPhi;
177 fhRatioEta = qa.fhRatioEta;
178
179
180 fh2E = qa.fh2E;
181 fh2Pt = qa.fh2Pt;
182 fh2Phi = qa.fh2Phi;
183 fh2Eta = qa.fh2Eta;
184
185 fhNCells = qa.fhNCells;
186 fhAmplitude = qa.fhAmplitude;
187
188 fhGenGamPt = qa.fhGenGamPt ; fhGenGamEta = qa.fhGenGamEta ; fhGenGamPhi = qa.fhGenGamPhi ;
189 fhGenPi0Pt = qa.fhGenPi0Pt ; fhGenPi0Eta = qa.fhGenPi0Eta ; fhGenPi0Phi = qa.fhGenPi0Phi ;
190 fhGenEtaPt = qa.fhGenEtaPt ; fhGenEtaEta = qa.fhGenEtaEta ; fhGenEtaPhi = qa.fhGenEtaPhi ;
191 fhGenOmegaPt = qa.fhGenOmegaPt ; fhGenOmegaEta = qa.fhGenOmegaEta ; fhGenOmegaPhi = qa.fhGenOmegaPhi ;
192 fhGenElePt = qa.fhGenElePt ; fhGenEleEta = qa.fhGenEleEta ; fhGenElePhi = qa.fhGenElePhi ;
193
194 fhEMVxyz = qa.fhEMVxyz ; fhEMR = qa.fhEMR ; fhHaVxyz = qa.fhHaVxyz ; fhHaR = qa.fhHaR ;
195 fhGamE = qa.fhGamE ;fhGamPt = qa.fhGamPt ;fhGamPhi = qa.fhGamPhi ;fhGamEta = qa.fhGamEta ;
196 fhGamDeltaE = qa.fhDeltaE; fhGamDeltaPt = qa.fhDeltaPt; fhGamDeltaPhi = qa.fhDeltaPhi; fhGamDeltaEta = qa.fhDeltaEta;
197
198 fhGamRatioE = qa.fhGamRatioE; fhGamRatioPt = qa.fhGamRatioPt; fhGamRatioPhi = qa.fhGamRatioPhi; fhGamRatioEta = qa.fhGamRatioEta;
9725fd2a 199
200 fhEleE = qa.fhEleE ;fhElePt = qa.fhElePt ;fhElePhi = qa.fhElePhi ;fhEleEta = qa.fhEleEta ;
201 fhPi0E = qa.fhPi0E ;fhPi0Pt = qa.fhPi0Pt ;fhPi0Phi = qa.fhPi0Phi ;fhPi0Eta = qa.fhPi0Eta ;
202 fhNeHadE = qa.fhNeHadE ;fhNeHadPt = qa.fhNeHadPt ;fhNeHadPhi = qa.fhNeHadPhi ;fhNeHadEta = qa.fhNeHadEta ;
203 fhChHadE = qa.fhChHadE ;fhChHadPt = qa.fhChHadPt ;fhChHadPhi = qa.fhChHadPhi ;fhChHadEta = qa.fhChHadEta ;
204 fhGenGamAccE = qa.fhGenGamAccE ; fhGenPi0AccE = qa.fhGenPi0AccE ;
205 fhGenGamAccPt = qa.fhGenGamAccPt ;fhGenGamAccEta = qa.fhGenGamAccEta ;fhGenGamAccPhi = qa.fhGenGamAccPhi ;
206 fhGenPi0AccPt = qa.fhGenPi0AccPt ;fhGenPi0AccEta = qa.fhGenPi0AccEta; fhGenPi0AccPhi = qa.fhGenPi0AccPhi ;
207
06e5656a 208 fhGamECharged = qa.fhGamECharged; fhGamPtCharged = qa.fhGamPtCharged; fhGamPhiCharged = qa.fhGamPhiCharged; fhGamEtaCharged = qa.fhGamEtaCharged;
209 fhEleECharged = qa.fhEleECharged; fhElePtCharged = qa.fhElePtCharged; fhElePhiCharged = qa.fhElePhiCharged; fhEleEtaCharged = qa.fhEleEtaCharged;
210 fhPi0ECharged = qa.fhPi0ECharged; fhPi0PtCharged = qa.fhPi0PtCharged; fhPi0PhiCharged = qa.fhPi0PhiCharged; fhPi0EtaCharged = qa.fhPi0EtaCharged;
211 fhNeHadECharged = qa.fhNeHadECharged; fhNeHadPtCharged = qa.fhNeHadPtCharged; fhNeHadPhiCharged = qa.fhNeHadPhiCharged; fhNeHadEtaCharged = qa.fhNeHadEtaCharged;
212 fhChHadECharged = qa.fhChHadECharged; fhChHadPtCharged = qa.fhChHadPtCharged; fhChHadPhiCharged = qa.fhChHadPhiCharged; fhChHadEtaCharged = qa.fhChHadEtaCharged;
213
214 fh1pOverE = qa.fh1pOverE;
215 fh1dR = qa.fh1dR;
9725fd2a 216 fh2MatchdEdx = qa.fh2MatchdEdx;
06e5656a 217 fh2EledEdx = qa.fh2EledEdx;
218
219 fhMCEle1pOverE = qa.fhMCEle1pOverE;
220 fhMCEle1dR = qa.fhMCEle1dR;
221 fhMCEle2MatchdEdx = qa.fhMCEle2MatchdEdx ;
222
223 fhMCChHad1pOverE = qa.fhMCChHad1pOverE; fhMCChHad1dR = qa.fhMCChHad1dR; fhMCChHad2MatchdEdx = qa.fhMCChHad2MatchdEdx;
224 fhMCNeutral1pOverE = qa.fhMCNeutral1pOverE; fhMCNeutral1dR = qa.fhMCNeutral1dR; fhMCNeutral2MatchdEdx = qa.fhMCNeutral2MatchdEdx;
225 fh1pOverER02 = qa.fh1pOverER02; fhMCEle1pOverER02 = qa.fhMCEle1pOverER02; fhMCChHad1pOverER02 = qa.fhMCChHad1pOverER02;
226 fhMCNeutral1pOverER02 = qa.fhMCNeutral1pOverER02;
9725fd2a 227
228 return *this;
229
230}
231
232//________________________________________________________________________
233TList * AliAnaCalorimeterQA::GetCreateOutputObjects()
234{
235 // Create histograms to be saved in output file and
236 // store them in fOutputContainer
237
238 TList * outputContainer = new TList() ;
4865e325 239 outputContainer->SetName("QAHistos") ;
9725fd2a 240
241 Int_t nptbins = GetHistoNPtBins();
242 Int_t nphibins = GetHistoNPhiBins();
243 Int_t netabins = GetHistoNEtaBins();
244 Float_t ptmax = GetHistoPtMax();
245 Float_t phimax = GetHistoPhiMax();
246 Float_t etamax = GetHistoEtaMax();
247 Float_t ptmin = GetHistoPtMin();
248 Float_t phimin = GetHistoPhiMin();
249 Float_t etamin = GetHistoEtaMin();
250
251 fhE = new TH1F ("hE","E reconstructed", nptbins,ptmin,ptmax);
252 fhE->SetXTitle("E (GeV)");
253 outputContainer->Add(fhE);
254
255 fhPt = new TH1F ("hPt","p_{T} reconstructed", nptbins,ptmin,ptmax);
256 fhPt->SetXTitle("p_{T} (GeV/c)");
257 outputContainer->Add(fhPt);
258
259 fhPhi = new TH1F ("hPhi","#phi reconstructed",nphibins,phimin,phimax);
260 fhPhi->SetXTitle("#phi (rad)");
261 outputContainer->Add(fhPhi);
262
263 fhEta = new TH1F ("hEta","#eta reconstructed",netabins,etamin,etamax);
264 fhEta->SetXTitle("#eta ");
265 outputContainer->Add(fhEta);
266
267 fhEtaPhi = new TH2F ("hEtaPhi","#eta vs #phi, reconstructed",netabins,etamin,etamax,nphibins,phimin,phimax);
268 fhEtaPhi->SetXTitle("#eta ");
269 fhEtaPhi->SetYTitle("#phi ");
270 outputContainer->Add(fhEtaPhi);
271
272 fhECharged = new TH1F ("hECharged","E reconstructed, matched with track", nptbins,ptmin,ptmax);
273 fhECharged->SetXTitle("E (GeV)");
274 outputContainer->Add(fhECharged);
275
276 fhPtCharged = new TH1F ("hPtCharged","p_{T} reconstructed, matched with track", nptbins,ptmin,ptmax);
277 fhPtCharged->SetXTitle("p_{T} (GeV/c)");
278 outputContainer->Add(fhPtCharged);
279
280 fhPhiCharged = new TH1F ("hPhiCharged","#phi reconstructed, matched with track",nphibins,phimin,phimax);
281 fhPhiCharged->SetXTitle("#phi (rad)");
282 outputContainer->Add(fhPhiCharged);
283
284 fhEtaCharged = new TH1F ("hEtaCharged","#eta reconstructed, matched with track",netabins,etamin,etamax);
285 fhEtaCharged->SetXTitle("#eta ");
286 outputContainer->Add(fhEtaCharged);
287
288 fhEtaPhiCharged = new TH2F ("hEtaPhiCharged","#eta vs #phi, reconstructed , matched with track",netabins,etamin,etamax,nphibins,phimin,phimax);
289 fhEtaPhiCharged->SetXTitle("#eta ");
290 fhEtaPhiCharged->SetYTitle("#phi ");
291 outputContainer->Add(fhEtaPhiCharged);
292
293
294 fhEChargedNoOut = new TH1F ("hEChargedNoOut","E reconstructed, matched with track, no output track params", nptbins,ptmin,ptmax);
295 fhEChargedNoOut->SetXTitle("E (GeV)");
296 outputContainer->Add(fhEChargedNoOut);
297
298 fhPtChargedNoOut = new TH1F ("hPtChargedNoOut","p_{T} reconstructed, matched with track, no output track params", nptbins,ptmin,ptmax);
299 fhPtChargedNoOut->SetXTitle("p_{T} (GeV/c)");
300 outputContainer->Add(fhPtChargedNoOut);
301
302 fhPhiChargedNoOut = new TH1F ("hPhiChargedNoOut","#phi reconstructed, matched with track, no output track params",nphibins,phimin,phimax);
303 fhPhiChargedNoOut->SetXTitle("#phi (rad)");
304 outputContainer->Add(fhPhiChargedNoOut);
305
306 fhEtaChargedNoOut = new TH1F ("hEtaChargedNoOut","#eta reconstructed, matched with track, no output track params",netabins,etamin,etamax);
307 fhEtaChargedNoOut->SetXTitle("#eta ");
308 outputContainer->Add(fhEtaChargedNoOut);
309
310 fhEtaPhiChargedNoOut = new TH2F ("hEtaPhiChargedNoOut","#eta vs #phi, reconstructed , matched with track, no output track params",netabins,etamin,etamax,nphibins,phimin,phimax);
311 fhEtaPhiChargedNoOut->SetXTitle("#eta ");
312 fhEtaPhiChargedNoOut->SetYTitle("#phi ");
313 outputContainer->Add(fhEtaPhiChargedNoOut);
314
315 fhIM = new TH2F ("hIM","Cluster pairs Invariant mass vs reconstructed pair energy",nptbins,ptmin,ptmax,200,0,1);
316 fhIM->SetXTitle("E_{cluster pairs} (GeV) ");
317 fhIM->SetYTitle("M_{cluster pairs} (GeV/c^{2})");
318 outputContainer->Add(fhIM);
319
320 fhAsym = new TH2F ("hAssym","Cluster pairs Asymmetry vs reconstructed pair energy",nptbins,ptmin,ptmax,100,0,1);
321 fhAsym->SetXTitle("E_{cluster pairs} (GeV) ");
322 fhAsym->SetYTitle("Asymmetry");
323 outputContainer->Add(fhAsym);
324
325 fhNCellsPerCluster = new TH2F ("hNCellsPerCluster","# cells per cluster vs cluster energy", nptbins,ptmin,ptmax, 100,0,1000);
326 fhNCellsPerCluster->SetXTitle("E (GeV)");
327 fhNCellsPerCluster->SetYTitle("n cells");
328 outputContainer->Add(fhNCellsPerCluster);
329
330 fhNClusters = new TH1F ("hNClusters","# clusters", 300,0,300);
331 fhNClusters->SetXTitle("number of clusters");
332 outputContainer->Add(fhNClusters);
333
334 //Calo cells
335 fhNCells = new TH1F ("hNCells","# cells", 13000,0,13000);
336 fhNCells->SetXTitle("n cells");
337 outputContainer->Add(fhNCells);
338
339 fhAmplitude = new TH1F ("hAmplitude","Amplitude", 100,0,1000);
340 fhAmplitude->SetXTitle("Amplitude ");
341 outputContainer->Add(fhAmplitude);
342
343 if(IsDataMC()){
344
345 fhDeltaE = new TH1F ("hDeltaE","MC - Reco E ", 200,-50,50);
346 fhDeltaE->SetXTitle("#Delta E (GeV)");
347 outputContainer->Add(fhDeltaE);
348
349 fhDeltaPt = new TH1F ("hDeltaPt","MC - Reco p_{T} ", 200,-50,50);
350 fhDeltaPt->SetXTitle("#Delta p_{T} (GeV/c)");
351 outputContainer->Add(fhDeltaPt);
352
353 fhDeltaPhi = new TH1F ("hDeltaPhi","MC - Reco #phi ",100,-2,2);
354 fhDeltaPhi->SetXTitle("#Delta #phi (rad)");
355 outputContainer->Add(fhDeltaPhi);
356
357 fhDeltaEta = new TH1F ("hDeltaEta","MC- Reco #eta",100,-1,1);
358 fhDeltaEta->SetXTitle("#Delta #eta ");
359 outputContainer->Add(fhDeltaEta);
360
361 fhRatioE = new TH1F ("hRatioE","Reco/MC E ", 200,0,2);
362 fhRatioE->SetXTitle("E_{reco}/E_{gen}");
363 outputContainer->Add(fhRatioE);
364
365 fhRatioPt = new TH1F ("hRatioPt","Reco/MC p_{T} ", 200,0,2);
366 fhRatioPt->SetXTitle("p_{T, reco}/p_{T, gen}");
367 outputContainer->Add(fhRatioPt);
368
369 fhRatioPhi = new TH1F ("hRatioPhi","Reco/MC #phi ",200,0,2);
370 fhRatioPhi->SetXTitle("#phi_{reco}/#phi_{gen}");
371 outputContainer->Add(fhRatioPhi);
372
373 fhRatioEta = new TH1F ("hRatioEta","Reco/MC #eta",200,0,2);
374 fhRatioEta->SetXTitle("#eta_{reco}/#eta_{gen} ");
375 outputContainer->Add(fhRatioEta);
376
377 fh2E = new TH2F ("h2E","E distribution, reconstructed vs generated", nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
378 fh2E->SetXTitle("E_{rec} (GeV)");
379 fh2E->SetYTitle("E_{gen} (GeV)");
380 outputContainer->Add(fh2E);
381
382 fh2Pt = new TH2F ("h2Pt","p_T distribution, reconstructed vs generated", nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
383 fh2Pt->SetXTitle("p_{T,rec} (GeV/c)");
384 fh2Pt->SetYTitle("p_{T,gen} (GeV/c)");
385 outputContainer->Add(fh2Pt);
386
387 fh2Phi = new TH2F ("h2Phi","#phi distribution, reconstructed vs generated", nphibins,phimin,phimax, nphibins,phimin,phimax);
388 fh2Phi->SetXTitle("#phi_{rec} (rad)");
389 fh2Phi->SetYTitle("#phi_{gen} (rad)");
390 outputContainer->Add(fh2Phi);
391
392 fh2Eta = new TH2F ("h2Eta","#eta distribution, reconstructed vs generated", netabins,etamin,etamax,netabins,etamin,etamax);
393 fh2Eta->SetXTitle("#eta_{rec} ");
394 fh2Eta->SetYTitle("#eta_{gen} ");
395 outputContainer->Add(fh2Eta);
396
397 //Fill histos depending on origin of cluster
398 fhGamE = new TH2F ("hGamE","E reconstructed vs E generated from #gamma", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
06e5656a 399 fhGamE->SetXTitle("E_{rec} (GeV)");
400 fhGamE->SetXTitle("E_{gen} (GeV)");
9725fd2a 401 outputContainer->Add(fhGamE);
402
403 fhGamPt = new TH2F ("hGamPt","p_{T} reconstructed vs E generated from #gamma", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
06e5656a 404 fhGamPt->SetXTitle("p_{T rec} (GeV/c)");
405 fhGamPt->SetYTitle("p_{T gen} (GeV/c)");
9725fd2a 406 outputContainer->Add(fhGamPt);
407
408 fhGamPhi = new TH2F ("hGamPhi","#phi reconstructed vs E generated from #gamma",nphibins,phimin,phimax,nphibins,phimin,phimax);
06e5656a 409 fhGamPhi->SetXTitle("#phi_{rec} (rad)");
410 fhGamPhi->SetYTitle("#phi_{gen} (rad)");
9725fd2a 411 outputContainer->Add(fhGamPhi);
412
413 fhGamEta = new TH2F ("hGamEta","#eta reconstructed vs E generated from #gamma",netabins,etamin,etamax,netabins,etamin,etamax);
06e5656a 414 fhGamEta->SetXTitle("#eta_{rec} ");
415 fhGamEta->SetYTitle("#eta_{gen} ");
9725fd2a 416 outputContainer->Add(fhGamEta);
417
418 fhGamDeltaE = new TH1F ("hGamDeltaE","#gamma MC - Reco E ", 200,-50,50);
419 fhGamDeltaE->SetXTitle("#Delta E (GeV)");
420 outputContainer->Add(fhGamDeltaE);
421
422 fhGamDeltaPt = new TH1F ("hGamDeltaPt","#gamma MC - Reco p_{T} ", 200,-50,50);
423 fhGamDeltaPt->SetXTitle("#Delta p_{T} (GeV/c)");
424 outputContainer->Add(fhGamDeltaPt);
425
426 fhGamDeltaPhi = new TH1F ("hGamDeltaPhi","#gamma MC - Reco #phi ",100,-2,2);
427 fhGamDeltaPhi->SetXTitle("#Delta #phi (rad)");
428 outputContainer->Add(fhGamDeltaPhi);
429
430 fhGamDeltaEta = new TH1F ("hGamDeltaEta","#gamma MC- Reco #eta",100,-1,1);
431 fhGamDeltaEta->SetXTitle("#Delta #eta ");
432 outputContainer->Add(fhGamDeltaEta);
433
434 fhGamRatioE = new TH1F ("hGamRatioE","#gamma Reco/MC E ", 200,0,2);
435 fhGamRatioE->SetXTitle("E_{reco}/E_{gen}");
436 outputContainer->Add(fhGamRatioE);
437
438 fhGamRatioPt = new TH1F ("hGamRatioPt","#gamma Reco/MC p_{T} ", 200,0,2);
439 fhGamRatioPt->SetXTitle("p_{T, reco}/p_{T, gen}");
440 outputContainer->Add(fhGamRatioPt);
441
442 fhGamRatioPhi = new TH1F ("hGamRatioPhi","#gamma Reco/MC #phi ",200,0,2);
443 fhGamRatioPhi->SetXTitle("#phi_{reco}/#phi_{gen}");
444 outputContainer->Add(fhGamRatioPhi);
445
446 fhGamRatioEta = new TH1F ("hGamRatioEta","#gamma Reco/MC #eta",200,0,2);
447 fhGamRatioEta->SetXTitle("#eta_{reco}/#eta_{gen} ");
448 outputContainer->Add(fhGamRatioEta);
449
06e5656a 450 fhPi0E = new TH2F ("hPi0E","E reconstructed vs E generated from #pi^{0}", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
451 fhPi0E->SetXTitle("E_{rec} (GeV)");
452 fhPi0E->SetYTitle("E_{gen} (GeV)");
9725fd2a 453 outputContainer->Add(fhPi0E);
454
455 fhPi0Pt = new TH2F ("hPi0Pt","p_{T} reconstructed vs E generated from #pi^{0}", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
06e5656a 456 fhPi0Pt->SetXTitle("p_{T rec} (GeV/c)");
457 fhPi0Pt->SetYTitle("p_{T gen} (GeV/c)");
9725fd2a 458 outputContainer->Add(fhPi0Pt);
459
460 fhPi0Phi = new TH2F ("hPi0Phi","#phi reconstructed vs E generated from #pi^{0}",nphibins,phimin,phimax,nphibins,phimin,phimax);
06e5656a 461 fhPi0Phi->SetXTitle("#phi_{rec} (rad)");
462 fhPi0Phi->SetYTitle("#phi_{gen} (rad)");
9725fd2a 463 outputContainer->Add(fhPi0Phi);
464
465 fhPi0Eta = new TH2F ("hPi0Eta","#eta reconstructed vs E generated from #pi^{0}",netabins,etamin,etamax,netabins,etamin,etamax);
06e5656a 466 fhPi0Eta->SetXTitle("#eta_{rec} ");
467 fhPi0Eta->SetYTitle("#eta_{gen} ");
9725fd2a 468 outputContainer->Add(fhPi0Eta);
469
470 fhEleE = new TH2F ("hEleE","E reconstructed vs E generated from e^{#pm}", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
06e5656a 471 fhEleE->SetXTitle("E_{rec} (GeV)");
472 fhEleE->SetXTitle("E_{gen} (GeV)");
9725fd2a 473 outputContainer->Add(fhEleE);
474
475 fhElePt = new TH2F ("hElePt","p_{T} reconstructed vs E generated from e^{#pm}", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
06e5656a 476 fhElePt->SetXTitle("p_{T rec} (GeV/c)");
477 fhElePt->SetYTitle("p_{T gen} (GeV/c)");
9725fd2a 478 outputContainer->Add(fhElePt);
479
06e5656a 480 fhElePhi = new TH2F ("hElePhi","#phi reconstructed vs E generated from e^{#pm}",nphibins,phimin,phimax,nphibins,phimin,phimax);
481 fhElePhi->SetXTitle("#phi_{rec} (rad)");
482 fhElePhi->SetYTitle("#phi_{gen} (rad)");
9725fd2a 483 outputContainer->Add(fhElePhi);
484
485 fhEleEta = new TH2F ("hEleEta","#eta reconstructed vs E generated from e^{#pm}",netabins,etamin,etamax,netabins,etamin,etamax);
06e5656a 486 fhEleEta->SetXTitle("#eta_{rec} ");
487 fhEleEta->SetYTitle("#eta_{gen} ");
9725fd2a 488 outputContainer->Add(fhEleEta);
489
06e5656a 490 fhNeHadE = new TH2F ("hNeHadE","E reconstructed vs E generated from neutral hadron", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
491 fhNeHadE->SetXTitle("E_{rec} (GeV)");
492 fhNeHadE->SetYTitle("E_{gen} (GeV)");
9725fd2a 493 outputContainer->Add(fhNeHadE);
494
495 fhNeHadPt = new TH2F ("hNeHadPt","p_{T} reconstructed vs E generated from neutral hadron", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
06e5656a 496 fhNeHadPt->SetXTitle("p_{T rec} (GeV/c)");
497 fhNeHadPt->SetYTitle("p_{T gen} (GeV/c)");
9725fd2a 498 outputContainer->Add(fhNeHadPt);
499
500 fhNeHadPhi = new TH2F ("hNeHadPhi","#phi reconstructed vs E generated from neutral hadron",nphibins,phimin,phimax,nphibins,phimin,phimax);
06e5656a 501 fhNeHadPhi->SetXTitle("#phi_{rec} (rad)");
502 fhNeHadPhi->SetYTitle("#phi_{gen} (rad)");
9725fd2a 503 outputContainer->Add(fhNeHadPhi);
504
505 fhNeHadEta = new TH2F ("hNeHadEta","#eta reconstructed vs E generated from neutral hadron",netabins,etamin,etamax,netabins,etamin,etamax);
06e5656a 506 fhNeHadEta->SetXTitle("#eta_{rec} ");
507 fhNeHadEta->SetYTitle("#eta_{gen} ");
9725fd2a 508 outputContainer->Add(fhNeHadEta);
509
06e5656a 510 fhChHadE = new TH2F ("hChHadE","E reconstructed vs E generated from charged hadron", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
511 fhChHadE->SetXTitle("E_{rec} (GeV)");
512 fhChHadE->SetYTitle("E_{gen} (GeV)");
9725fd2a 513 outputContainer->Add(fhChHadE);
514
515 fhChHadPt = new TH2F ("hChHadPt","p_{T} reconstructed vs E generated from charged hadron", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
06e5656a 516 fhChHadPt->SetXTitle("p_{T rec} (GeV/c)");
517 fhChHadPt->SetYTitle("p_{T gen} (GeV/c)");
9725fd2a 518 outputContainer->Add(fhChHadPt);
519
520 fhChHadPhi = new TH2F ("hChHadPhi","#phi reconstructed vs E generated from charged hadron",nphibins,phimin,phimax,nphibins,phimin,phimax);
06e5656a 521 fhChHadPhi->SetXTitle("#phi_{rec} (rad)");
522 fhChHadPhi->SetYTitle("#phi_{gen} (rad)");
9725fd2a 523 outputContainer->Add(fhChHadPhi);
524
525 fhChHadEta = new TH2F ("hChHadEta","#eta reconstructed vs E generated from charged hadron",netabins,etamin,etamax,netabins,etamin,etamax);
06e5656a 526 fhChHadEta->SetXTitle("#eta_{rec} ");
527 fhChHadEta->SetYTitle("#eta_{gen} ");
9725fd2a 528 outputContainer->Add(fhChHadEta);
529
06e5656a 530 //Charged clusters
531
532 fhGamECharged = new TH2F ("hGamECharged","E reconstructed vs E generated from #gamma, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
533 fhGamECharged->SetXTitle("E_{rec} (GeV)");
534 fhGamECharged->SetXTitle("E_{gen} (GeV)");
535 outputContainer->Add(fhGamECharged);
536
537 fhGamPtCharged = new TH2F ("hGamPtCharged","p_{T} reconstructed vs E generated from #gamma, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
538 fhGamPtCharged->SetXTitle("p_{T rec} (GeV/c)");
539 fhGamPtCharged->SetYTitle("p_{T gen} (GeV/c)");
540 outputContainer->Add(fhGamPtCharged);
541
542 fhGamPhiCharged = new TH2F ("hGamPhiCharged","#phi reconstructed vs E generated from #gamma, track matched cluster",nphibins,phimin,phimax,nphibins,phimin,phimax);
543 fhGamPhiCharged->SetXTitle("#phi_{rec} (rad)");
544 fhGamPhiCharged->SetYTitle("#phi_{gen} (rad)");
545 outputContainer->Add(fhGamPhiCharged);
546
547 fhGamEtaCharged = new TH2F ("hGamEtaCharged","#eta reconstructed vs E generated from #gamma, track matched cluster",netabins,etamin,etamax,netabins,etamin,etamax);
548 fhGamEtaCharged->SetXTitle("#eta_{rec} ");
549 fhGamEtaCharged->SetYTitle("#eta_{gen} ");
550 outputContainer->Add(fhGamEtaCharged);
551
552 fhPi0ECharged = new TH2F ("hPi0ECharged","E reconstructed vs E generated from #pi^{0}, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
553 fhPi0ECharged->SetXTitle("E_{rec} (GeV)");
554 fhPi0ECharged->SetYTitle("E_{gen} (GeV)");
555 outputContainer->Add(fhPi0ECharged);
556
557 fhPi0PtCharged = new TH2F ("hPi0PtCharged","p_{T} reconstructed vs E generated from #pi^{0}, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
558 fhPi0PtCharged->SetXTitle("p_{T rec} (GeV/c)");
559 fhPi0PtCharged->SetYTitle("p_{T gen} (GeV/c)");
560 outputContainer->Add(fhPi0PtCharged);
561
562 fhPi0PhiCharged = new TH2F ("hPi0PhiCharged","#phi reconstructed vs E generated from #pi^{0}, track matched cluster",nphibins,phimin,phimax,nphibins,phimin,phimax);
563 fhPi0PhiCharged->SetXTitle("#phi_{rec} (rad)");
564 fhPi0PhiCharged->SetYTitle("#phi_{gen} (rad)");
565 outputContainer->Add(fhPi0PhiCharged);
566
567 fhPi0EtaCharged = new TH2F ("hPi0EtaCharged","#eta reconstructed vs E generated from #pi^{0}, track matched cluster",netabins,etamin,etamax,netabins,etamin,etamax);
568 fhPi0EtaCharged->SetXTitle("#eta_{rec} ");
569 fhPi0EtaCharged->SetYTitle("#eta_{gen} ");
570 outputContainer->Add(fhPi0EtaCharged);
571
572 fhEleECharged = new TH2F ("hEleECharged","E reconstructed vs E generated from e^{#pm}, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
573 fhEleECharged->SetXTitle("E_{rec} (GeV)");
574 fhEleECharged->SetXTitle("E_{gen} (GeV)");
575 outputContainer->Add(fhEleECharged);
576
577 fhElePtCharged = new TH2F ("hElePtCharged","p_{T} reconstructed vs E generated from e^{#pm}, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
578 fhElePtCharged->SetXTitle("p_{T rec} (GeV/c)");
579 fhElePtCharged->SetYTitle("p_{T gen} (GeV/c)");
580 outputContainer->Add(fhElePtCharged);
581
582 fhElePhiCharged = new TH2F ("hElePhiCharged","#phi reconstructed vs E generated from e^{#pm}, track matched cluster",nphibins,phimin,phimax,nphibins,phimin,phimax);
583 fhElePhiCharged->SetXTitle("#phi_{rec} (rad)");
584 fhElePhiCharged->SetYTitle("#phi_{gen} (rad)");
585 outputContainer->Add(fhElePhiCharged);
586
587 fhEleEtaCharged = new TH2F ("hEleEtaCharged","#eta reconstructed vs E generated from e^{#pm}, track matched cluster",netabins,etamin,etamax,netabins,etamin,etamax);
588 fhEleEtaCharged->SetXTitle("#eta_{rec} ");
589 fhEleEtaCharged->SetYTitle("#eta_{gen} ");
590 outputContainer->Add(fhEleEtaCharged);
591
592 fhNeHadECharged = new TH2F ("hNeHadECharged","E reconstructed vs E generated from neutral hadron, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
593 fhNeHadECharged->SetXTitle("E_{rec} (GeV)");
594 fhNeHadECharged->SetYTitle("E_{gen} (GeV)");
595 outputContainer->Add(fhNeHadECharged);
596
597 fhNeHadPtCharged = new TH2F ("hNeHadPtCharged","p_{T} reconstructed vs E generated from neutral hadron, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
598 fhNeHadPtCharged->SetXTitle("p_{T rec} (GeV/c)");
599 fhNeHadPtCharged->SetYTitle("p_{T gen} (GeV/c)");
600 outputContainer->Add(fhNeHadPtCharged);
601
602 fhNeHadPhiCharged = new TH2F ("hNeHadPhiCharged","#phi reconstructed vs E generated from neutral hadron, track matched cluster",nphibins,phimin,phimax,nphibins,phimin,phimax);
603 fhNeHadPhiCharged->SetXTitle("#phi_{rec} (rad)");
604 fhNeHadPhiCharged->SetYTitle("#phi_{gen} (rad)");
605 outputContainer->Add(fhNeHadPhiCharged);
606
607 fhNeHadEtaCharged = new TH2F ("hNeHadEtaCharged","#eta reconstructed vs E generated from neutral hadron, track matched cluster",netabins,etamin,etamax,netabins,etamin,etamax);
608 fhNeHadEtaCharged->SetXTitle("#eta_{rec} ");
609 fhNeHadEtaCharged->SetYTitle("#eta_{gen} ");
610 outputContainer->Add(fhNeHadEtaCharged);
611
612 fhChHadECharged = new TH2F ("hChHadECharged","E reconstructed vs E generated from charged hadron, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
613 fhChHadECharged->SetXTitle("E_{rec} (GeV)");
614 fhChHadECharged->SetYTitle("E_{gen} (GeV)");
615 outputContainer->Add(fhChHadECharged);
616
617 fhChHadPtCharged = new TH2F ("hChHadPtCharged","p_{T} reconstructed vs E generated from charged hadron, track matched cluster", nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
618 fhChHadPtCharged->SetXTitle("p_{T rec} (GeV/c)");
619 fhChHadPtCharged->SetYTitle("p_{T gen} (GeV/c)");
620 outputContainer->Add(fhChHadPtCharged);
621
622 fhChHadPhiCharged = new TH2F ("hChHadPhiCharged","#phi reconstructed vs E generated from charged hadron, track matched cluster",nphibins,phimin,phimax,nphibins,phimin,phimax);
623 fhChHadPhiCharged->SetXTitle("#phi (rad)");
624 fhChHadPhiCharged->SetXTitle("#phi_{rec} (rad)");
625 fhChHadPhiCharged->SetYTitle("#phi_{gen} (rad)");
626 outputContainer->Add(fhChHadPhiCharged);
627
628 fhChHadEtaCharged = new TH2F ("hChHadEtaCharged","#eta reconstructed vs E generated from charged hadron, track matched cluster",netabins,etamin,etamax,netabins,etamin,etamax);
629 fhChHadEtaCharged->SetXTitle("#eta_{rec} ");
630 fhChHadEtaCharged->SetYTitle("#eta_{gen} ");
631 outputContainer->Add(fhChHadEtaCharged);
632
9725fd2a 633 //Vertex of generated particles
634
635 fhEMVxyz = new TH2F ("hEMVxyz","Production vertex of reconstructed ElectroMagnetic particles",100,0,500,100,0,500);//,100,0,500);
636 fhEMVxyz->SetXTitle("v_{x}");
637 fhEMVxyz->SetYTitle("v_{y}");
638 //fhEMVxyz->SetZTitle("v_{z}");
639 outputContainer->Add(fhEMVxyz);
640
641 fhHaVxyz = new TH2F ("hHaVxyz","Production vertex of reconstructed hadrons",100,0,500,100,0,500);//,100,0,500);
642 fhHaVxyz->SetXTitle("v_{x}");
643 fhHaVxyz->SetYTitle("v_{y}");
644 //fhHaVxyz->SetZTitle("v_{z}");
645 outputContainer->Add(fhHaVxyz);
646
647 fhEMR = new TH2F ("hEMR","Distance to production vertex of reconstructed ElectroMagnetic particles vs E rec",nptbins,ptmin,ptmax,100,0,500);
648 fhEMR->SetXTitle("E (GeV)");
649 fhEMR->SetYTitle("TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
650 outputContainer->Add(fhEMR);
651
652 fhHaR = new TH2F ("hHaR","Distance to production vertex of reconstructed Hadrons vs E rec",nptbins,ptmin,ptmax,100,0,500);
653 fhHaR->SetXTitle("E (GeV)");
654 fhHaR->SetYTitle("TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
655 outputContainer->Add(fhHaR);
656
06e5656a 657
9725fd2a 658
659 //Pure MC
660 fhGenGamPt = new TH1F("hGenGamPt" ,"p_{T} of generated #gamma",nptbins,ptmin,ptmax);
661 fhGenGamEta = new TH1F("hGenGamEta","Y of generated #gamma",netabins,etamin,etamax);
662 fhGenGamPhi = new TH1F("hGenGamPhi","#phi of generated #gamma",nphibins,phimin,phimax);
663
664 fhGenPi0Pt = new TH1F("hGenPi0Pt" ,"p_{T} of generated #pi^{0}",nptbins,ptmin,ptmax);
665 fhGenPi0Eta = new TH1F("hGenPi0Eta","Y of generated #pi^{0}",netabins,etamin,etamax);
666 fhGenPi0Phi = new TH1F("hGenPi0Phi","#phi of generated #pi^{0}",nphibins,phimin,phimax);
667
668 fhGenEtaPt = new TH1F("hGenEtaPt" ,"p_{T} of generated #eta",nptbins,ptmin,ptmax);
669 fhGenEtaEta = new TH1F("hGenEtaEta","Y of generated #eta",netabins,etamin,etamax);
670 fhGenEtaPhi = new TH1F("hGenEtaPhi","#phi of generated #eta",nphibins,phimin,phimax);
671
672 fhGenOmegaPt = new TH1F("hGenOmegaPt" ,"p_{T} of generated #omega",nptbins,ptmin,ptmax);
673 fhGenOmegaEta = new TH1F("hGenOmegaEta","Y of generated #omega",netabins,etamin,etamax);
674 fhGenOmegaPhi = new TH1F("hGenOmegaPhi","#phi of generated #omega",nphibins,phimin,phimax);
675
676 fhGenElePt = new TH1F("hGenElePt" ,"p_{T} of generated e^{#pm}",nptbins,ptmin,ptmax);
677 fhGenEleEta = new TH1F("hGenEleEta","Y of generated e^{#pm}",netabins,etamin,etamax);
678 fhGenElePhi = new TH1F("hGenElePhi","#phi of generated e^{#pm}",nphibins,phimin,phimax);
679
680 fhGenGamPt->SetXTitle("p_{T} (GeV/c)");
681 fhGenGamEta->SetXTitle("#eta");
682 fhGenGamPhi->SetXTitle("#phi (rad)");
683 outputContainer->Add(fhGenGamPt);
684 outputContainer->Add(fhGenGamEta);
685 outputContainer->Add(fhGenGamPhi);
686
687 fhGenPi0Pt->SetXTitle("p_{T} (GeV/c)");
688 fhGenPi0Eta->SetXTitle("#eta");
689 fhGenPi0Phi->SetXTitle("#phi (rad)");
690 outputContainer->Add(fhGenPi0Pt);
691 outputContainer->Add(fhGenPi0Eta);
692 outputContainer->Add(fhGenPi0Phi);
693
694 fhGenEtaPt->SetXTitle("p_{T} (GeV/c)");
695 fhGenEtaEta->SetXTitle("#eta");
696 fhGenEtaPhi->SetXTitle("#phi (rad)");
697 outputContainer->Add(fhGenEtaPt);
698 outputContainer->Add(fhGenEtaEta);
699 outputContainer->Add(fhGenEtaPhi);
700
701 fhGenOmegaPt->SetXTitle("p_{T} (GeV/c)");
702 fhGenOmegaEta->SetXTitle("#eta");
703 fhGenOmegaPhi->SetXTitle("#phi (rad)");
704 outputContainer->Add(fhGenOmegaPt);
705 outputContainer->Add(fhGenOmegaEta);
706 outputContainer->Add(fhGenOmegaPhi);
707
708 fhGenElePt->SetXTitle("p_{T} (GeV/c)");
709 fhGenEleEta->SetXTitle("#eta");
710 fhGenElePhi->SetXTitle("#phi (rad)");
711 outputContainer->Add(fhGenElePt);
712 outputContainer->Add(fhGenEleEta);
713 outputContainer->Add(fhGenElePhi);
714
715 fhGenGamAccE = new TH1F("hGenGamAccE" ,"E of generated #gamma in calorimeter acceptance",nptbins,ptmin,ptmax);
716 fhGenGamAccPt = new TH1F("hGenGamAccPt" ,"p_{T} of generated #gamma in calorimeter acceptance",nptbins,ptmin,ptmax);
717 fhGenGamAccEta = new TH1F("hGenGamAccEta","Y of generated #gamma in calorimeter acceptance",netabins,etamin,etamax);
718 fhGenGamAccPhi = new TH1F("hGenGamAccPhi","#phi of generated #gamma in calorimeter acceptance",nphibins,phimin,phimax);
719
720 fhGenPi0AccE = new TH1F("hGenPi0AccE" ,"E of generated #pi^{0} in calorimeter acceptance",nptbins,ptmin,ptmax);
721 fhGenPi0AccPt = new TH1F("hGenPi0AccPt" ,"p_{T} of generated #pi^{0} in calorimeter acceptance",nptbins,ptmin,ptmax);
722 fhGenPi0AccEta = new TH1F("hGenPi0AccEta","Y of generated #pi^{0} in calorimeter acceptance",netabins,etamin,etamax);
723 fhGenPi0AccPhi = new TH1F("hGenPi0AccPhi","#phi of generated #pi^{0} in calorimeter acceptance",nphibins,phimin,phimax);
724
725 fhGenGamAccE ->SetXTitle("E (GeV)");
726 fhGenGamAccPt ->SetXTitle("p_{T} (GeV/c)");
727 fhGenGamAccEta->SetXTitle("#eta");
728 fhGenGamAccPhi->SetXTitle("#phi (rad)");
729 outputContainer->Add(fhGenGamAccE);
730 outputContainer->Add(fhGenGamAccPt);
731 outputContainer->Add(fhGenGamAccEta);
732 outputContainer->Add(fhGenGamAccPhi);
733
734 fhGenPi0AccE ->SetXTitle("E (GeV)");
735 fhGenPi0AccPt ->SetXTitle("p_{T} (GeV/c)");
736 fhGenPi0AccEta->SetXTitle("#eta");
737 fhGenPi0AccPhi->SetXTitle("#phi (rad)");
738 outputContainer->Add(fhGenPi0AccE);
739 outputContainer->Add(fhGenPi0AccPt);
740 outputContainer->Add(fhGenPi0AccEta);
741 outputContainer->Add(fhGenPi0AccPhi);
742
743 }
744
745
06e5656a 746 fh1pOverE = new TH1F("h1pOverE","TRACK matches p/E",100,0.,10.);
9725fd2a 747 fh1pOverE->SetXTitle("p/E");
748 outputContainer->Add(fh1pOverE);
749
06e5656a 750 fh1dR = new TH1F("h1dR","TRACK matches dR",300, 0.,TMath::Pi());
9725fd2a 751 fh1dR->SetXTitle("#Delta R (rad)");
752 outputContainer->Add(fh1dR) ;
753
754 fh2MatchdEdx = new TH2F("h2MatchdEdx","dE/dx vs. p for all matches",200,0.,50.,200,0.,400.);
755 fh2MatchdEdx->SetXTitle("p (GeV/c)");
756 fh2MatchdEdx->SetYTitle("<dE/dx>");
757 outputContainer->Add(fh2MatchdEdx);
758
759 fh2EledEdx = new TH2F("h2EledEdx","dE/dx vs. p for electrons",200,0.,50.,200,0.,400.);
760 fh2EledEdx->SetXTitle("p (GeV/c)");
761 fh2EledEdx->SetYTitle("<dE/dx>");
762 outputContainer->Add(fh2EledEdx) ;
763
06e5656a 764 fhMCEle1pOverE = new TH1F("hMCEle1pOverE","TRACK matches p/E, MC electrons",100,0.,10.);
765 fhMCEle1pOverE->SetXTitle("p/E");
766 outputContainer->Add(fhMCEle1pOverE);
767
768 fhMCEle1dR = new TH1F("hMCEle1dR","TRACK matches dR, MC electrons",300, 0.,TMath::Pi());
769 fhMCEle1dR->SetXTitle("#Delta R (rad)");
770 outputContainer->Add(fhMCEle1dR) ;
771
772 fhMCEle2MatchdEdx = new TH2F("hMCEle2MatchdEdx","dE/dx vs. p for all matches, MC electrons",200,0.,50.,200,0.,400.);
773 fhMCEle2MatchdEdx->SetXTitle("p (GeV/c)");
774 fhMCEle2MatchdEdx->SetYTitle("<dE/dx>");
775 outputContainer->Add(fhMCEle2MatchdEdx);
776
777 fhMCChHad1pOverE = new TH1F("hMCChHad1pOverE","TRACK matches p/E, MC charged hadrons",100,0.,10.);
778 fhMCChHad1pOverE->SetXTitle("p/E");
779 outputContainer->Add(fhMCChHad1pOverE);
780
781 fhMCChHad1dR = new TH1F("hMCChHad1dR","TRACK matches dR, MC charged hadrons",300, 0.,TMath::Pi());
782 fhMCChHad1dR->SetXTitle("#Delta R (rad)");
783 outputContainer->Add(fhMCChHad1dR) ;
784
785 fhMCChHad2MatchdEdx = new TH2F("hMCChHad2MatchdEdx","dE/dx vs. p for all matches, MC charged hadrons",200,0.,50.,200,0.,400.);
786 fhMCChHad2MatchdEdx->SetXTitle("p (GeV/c)");
787 fhMCChHad2MatchdEdx->SetYTitle("<dE/dx>");
788 outputContainer->Add(fhMCChHad2MatchdEdx);
789
790 fhMCNeutral1pOverE = new TH1F("hMCNeutral1pOverE","TRACK matches p/E, MC neutrals",100,0.,10.);
791 fhMCNeutral1pOverE->SetXTitle("p/E");
792 outputContainer->Add(fhMCNeutral1pOverE);
793
794 fhMCNeutral1dR = new TH1F("hMCNeutral1dR","TRACK matches dR, MC neutrals",300, 0.,TMath::Pi());
795 fhMCNeutral1dR->SetXTitle("#Delta R (rad)");
796 outputContainer->Add(fhMCNeutral1dR) ;
797
798 fhMCNeutral2MatchdEdx = new TH2F("hMCNeutral2MatchdEdx","dE/dx vs. p for all matches, MC neutrals",200,0.,50.,200,0.,400.);
799 fhMCNeutral2MatchdEdx->SetXTitle("p (GeV/c)");
800 fhMCNeutral2MatchdEdx->SetYTitle("<dE/dx>");
801 outputContainer->Add(fhMCNeutral2MatchdEdx);
802
803 fh1pOverER02 = new TH1F("h1pOverER02","TRACK matches p/E, all",100,0.,10.);
804 fh1pOverER02->SetXTitle("p/E");
805 outputContainer->Add(fh1pOverER02);
806
807 fhMCEle1pOverER02 = new TH1F("hMCEle1pOverER02","TRACK matches p/E, MC electrons",100,0.,10.);
808 fhMCEle1pOverER02->SetXTitle("p/E");
809 outputContainer->Add(fhMCEle1pOverER02);
810
811 fhMCChHad1pOverER02 = new TH1F("hMCChHad1pOverER02","TRACK matches p/E, MC charged hadrons",100,0.,10.);
812 fhMCChHad1pOverER02->SetXTitle("p/E");
813 outputContainer->Add(fhMCChHad1pOverER02);
814
815 fhMCNeutral1pOverER02 = new TH1F("hMCNeutral1pOverER02","TRACK matches p/E, MC neutrals",100,0.,10.);
816 fhMCNeutral1pOverER02->SetXTitle("p/E");
817 outputContainer->Add(fhMCNeutral1pOverER02);
818
9725fd2a 819 return outputContainer;
820}
821
822//__________________________________________________
823void AliAnaCalorimeterQA::Init()
824{
825 //Check if the data or settings are ok
826 if(fCalorimeter != "PHOS" && fCalorimeter !="EMCAL"){
827 printf("AliAnaCalorimeterQA::Init() - Wrong calorimeter name <%s>, END\n", fCalorimeter.Data());
828 abort();
829 }
830
831 if(GetReader()->GetDataType()== AliCaloTrackReader::kMC){
832 printf("AliAnaCalorimeterQA::Init() - Analysis of reconstructed data, MC reader not aplicable\n");
833 abort();
834 }
835
836}
837
838
839//__________________________________________________
840void AliAnaCalorimeterQA::InitParameters()
841{
842 //Initialize the parameters of the analysis.
843 AddToHistogramsName("AnaCaloQA_");
844
845 fCalorimeter = "EMCAL"; //or PHOS
846 fStyleMacro = "" ;
847}
848
849//__________________________________________________________________
850void AliAnaCalorimeterQA::Print(const Option_t * opt) const
851{
852 //Print some relevant parameters set for the analysis
853 if(! opt)
854 return;
855
856 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
857 AliAnaPartCorrBaseClass::Print(" ");
858
859 printf("Select Calorimeter %s \n",fCalorimeter.Data());
860 printf("Plots style macro %s \n",fStyleMacro.Data());
861}
862
863//__________________________________________________________________
864void AliAnaCalorimeterQA::MakeAnalysisFillHistograms()
865{
902aa95c 866 //Fill Calorimeter QA histograms
867
9725fd2a 868 TLorentzVector mom ;
869 TLorentzVector mom2 ;
902aa95c 870 TRefArray * caloClusters = new TRefArray();
871 Int_t nLabel = 0;
872 Int_t *labels=0x0;
873 Int_t nCaloClusters = 0;
874 Int_t nCaloCellsPerCluster = 0;
875 Int_t nTracksMatched = 0;
876 Int_t trackIndex = 0;
877
878 //Play with the MC stack if available
879 //Get the MC arrays and do some checks
880 if(IsDataMC()){
881 if(GetReader()->ReadStack()){
882
883 if(!GetMCStack()) {
884 printf("AliAnaPhoton::MakeAnalysisFillHistograms() - Stack not available, is the MC handler called? STOP\n");
885 abort();
886 }
887 //Fill some pure MC histograms, only primaries.
888 for(Int_t i=0 ; i<GetMCStack()->GetNprimary(); i++){//Only primary particles, for all MC transport put GetNtrack()
889 TParticle *primary = GetMCStack()->Particle(i) ;
890 //printf("i %d, %s: status = %d, primary? %d\n",i, primary->GetName(), primary->GetStatusCode(), primary->IsPrimary());
891 if (primary->GetStatusCode() > 11) continue; //Working for PYTHIA and simple generators, check for HERWIG
892 primary->Momentum(mom);
893 MCHistograms(mom,TMath::Abs(primary->GetPdgCode()));
894 } //primary loop
895 }
896 else if(GetReader()->ReadAODMCParticles()){
897
898 if(!GetReader()->GetAODMCParticles(0)) {
899 printf("AliAnaPhoton::MakeAnalysisFillHistograms() - AODMCParticles not available!\n");
900 abort();
901 }
902 //Fill some pure MC histograms, only primaries.
903 for(Int_t i=0 ; i < (GetReader()->GetAODMCParticles(0))->GetEntriesFast(); i++){
904 AliAODMCParticle *aodprimary = (AliAODMCParticle*) (GetReader()->GetAODMCParticles(0))->At(i) ;
905 //printf("i %d, %s: primary? %d physical primary? %d, flag %d\n",
906 // i,(TDatabasePDG::Instance()->GetParticle(aodprimary->GetPdgCode()))->GetName(),
907 // aodprimary->IsPrimary(), aodprimary->IsPhysicalPrimary(), aodprimary->GetFlag());
908 if (!aodprimary->IsPrimary()) continue; //accept all which is not MC transport generated. Don't know how to avoid partons
909 //aodprimary->Momentum(mom);
910 mom.SetPxPyPzE(aodprimary->Px(),aodprimary->Py(),aodprimary->Pz(),aodprimary->E());
911 MCHistograms(mom,TMath::Abs(aodprimary->GetPdgCode()));
912 } //primary loop
913
914 }
915 }// is data and MC
916
917
918 //Get List with CaloClusters
919
920 if(GetReader()->GetDataType()==AliCaloTrackReader::kESD) {
921 if (fCalorimeter == "EMCAL") ((AliESDEvent*)GetReader()->GetInputEvent())->GetEMCALClusters(caloClusters);//GetAODEMCAL();
922 else if(fCalorimeter == "PHOS") ((AliESDEvent*)GetReader()->GetInputEvent())->GetPHOSClusters (caloClusters);//GetAODPHOS();
923 else {
924 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Wrong calorimeter name <%s>, END\n", fCalorimeter.Data());
925 abort();
926 }
927 }
928 else if(GetReader()->GetDataType()==AliCaloTrackReader::kAOD) {
929 if (fCalorimeter == "EMCAL") ((AliAODEvent*)GetReader()->GetInputEvent())->GetEMCALClusters(caloClusters);//GetAODEMCAL();
930 else if(fCalorimeter == "PHOS") ((AliAODEvent*)GetReader()->GetInputEvent())->GetPHOSClusters (caloClusters);//GetAODPHOS();
931 else {
932 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Wrong calorimeter name <%s>, END\n", fCalorimeter.Data());
933 abort();
4865e325 934 }
935 }
9725fd2a 936
902aa95c 937 if(!caloClusters) {
938 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - No CaloClusters available\n");
9725fd2a 939 abort();
940 }
941
902aa95c 942 nCaloClusters = caloClusters->GetEntriesFast() ;
943 fhNClusters->Fill(nCaloClusters);
944
9725fd2a 945 if(GetDebug() > 0)
902aa95c 946 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - In %s there are %d clusters \n", fCalorimeter.Data(), nCaloClusters);
9725fd2a 947
948 //Get vertex for photon momentum calculation
949 Double_t v[3] ; //vertex ;
950 GetReader()->GetVertex(v);
902aa95c 951 TObject * track = 0x0;
952 //Loop over CaloClusters
953 for(Int_t iclus = 0; iclus < nCaloClusters; iclus++){
954
955 if(GetDebug() > 0) printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - cluster: %d/%d, data %d \n",
956 iclus+1,nCaloClusters,GetReader()->GetDataType());
957
958 if(GetReader()->GetDataType()==AliCaloTrackReader::kESD){
959 AliESDCaloCluster* clus = (AliESDCaloCluster*) (caloClusters->At(iclus));
960 //Get cluster kinematics
961 clus->GetMomentum(mom,v);
962 //MC labels
963 nLabel = clus->GetNLabels();
964 if(clus->GetLabels()) labels = (clus->GetLabels())->GetArray();
965 //Cells per cluster
966 nCaloCellsPerCluster = clus->GetNCells();
967 //matched cluster with tracks
968 nTracksMatched = clus->GetNTracksMatched();
969 trackIndex = clus->GetTrackMatched();
970 if(trackIndex >= 0){
971 track = (AliESDtrack*) ((AliESDEvent*)GetReader()->GetInputEvent())->GetTrack(trackIndex);
972 }
973 else{
974 if(nTracksMatched == 1) nTracksMatched = 0;
975 track = 0;
976 }
977 }
978 else{
979 AliAODCaloCluster* clus = (AliAODCaloCluster*) (caloClusters->At(iclus));
4865e325 980
902aa95c 981 //Get cluster kinematics
982 clus->GetMomentum(mom,v);
983 //MC labels
984 nLabel = clus->GetNLabel();
985 if(clus->GetLabels()) labels = clus->GetLabels();
986 //Cells per cluster
987 nCaloCellsPerCluster = clus->GetNCells();
988 //matched cluster with tracks
989 nTracksMatched = clus->GetNTracksMatched();
990 if(nTracksMatched > 0)
991 track = (AliAODTrack*)clus->GetTrackMatched(0);
992 }
4865e325 993
902aa95c 994 //Fill histograms related to single cluster or track matching
995 ClusterHistograms(mom, nCaloCellsPerCluster, nTracksMatched, track, labels, nLabel);
9725fd2a 996
902aa95c 997 //Invariant mass
998 if (nCaloClusters > 1 ) {
999 for(Int_t jclus = iclus + 1 ; jclus < nCaloClusters-1 ; jclus++) {
1000 if(GetReader()->GetDataType()==AliCaloTrackReader::kESD){
1001 AliESDCaloCluster* clus2 = (AliESDCaloCluster*) (caloClusters->At(jclus));
1002 //Get cluster kinematics
1003 clus2->GetMomentum(mom2,v);
06e5656a 1004 }
902aa95c 1005 if(GetReader()->GetDataType()==AliCaloTrackReader::kAOD){
1006 AliAODCaloCluster* clus2 = (AliAODCaloCluster*) (caloClusters->At(jclus));
1007 //Get cluster kinematics
1008 clus2->GetMomentum(mom2,v);
06e5656a 1009 }
902aa95c 1010
9725fd2a 1011 fhIM ->Fill((mom+mom2).E(),(mom+mom2).M());
902aa95c 1012 fhAsym->Fill((mom+mom2).E(),TMath::Abs((mom.E()-mom2.E())/(mom.E()+mom2.E())));
1013
9725fd2a 1014 }// 2nd cluster loop
902aa95c 1015 }////more than 1 cluster in calorimeter
1016 }//cluster loop
1017
1018 //CaloCells
1019 if(GetReader()->GetDataType()==AliCaloTrackReader::kESD){
1020 AliESDCaloCells * cell = 0x0;
1021 Int_t ncells = 0;
1022 if(fCalorimeter == "PHOS") cell = ((AliESDEvent*)GetReader()->GetInputEvent())->GetPHOSCells();
1023 else cell = ((AliESDEvent*)GetReader()->GetInputEvent())->GetEMCALCells();
1024
1025 if(!cell) {
1026 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - STOP: No CELLS available for analysis");
1027 abort();
1028 }
1029
1030 ncells = cell->GetNumberOfCells() ;
1031 fhNCells->Fill(ncells) ;
1032 if(GetDebug() > 0)
1033 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - In ESD %s cell entries %d\n", fCalorimeter.Data(), ncells);
1034
1035 for (Int_t iCell = 0; iCell < ncells; iCell++) {
1036 if(GetDebug() > 2) printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Cell : amp %f, absId %d \n", cell->GetAmplitude(iCell), cell->GetCellNumber(iCell));
1037 fhAmplitude->Fill(cell->GetAmplitude(iCell));
1038 }
1039
1040 }//ESD
1041 else{//AOD
1042 AliESDCaloCells * cell = 0x0;
1043 Int_t ncells = 0;
9725fd2a 1044
902aa95c 1045 if(fCalorimeter == "PHOS") cell = (AliESDCaloCells *) ((AliAODEvent*)GetReader()->GetInputEvent())->GetPHOSCells();
1046 else cell = (AliESDCaloCells *) ((AliAODEvent*)GetReader()->GetInputEvent())->GetEMCALCells();
9725fd2a 1047
902aa95c 1048 if(!cell) {
1049 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - STOP: No CELLS available for analysis");
1050 abort();
1051 }
1052
1053 ncells = cell->GetNumberOfCells() ;
1054 fhNCells->Fill(ncells) ;
1055 if(GetDebug() > 0)
1056 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - In ESD %s cell entries %d\n", fCalorimeter.Data(), ncells);
9725fd2a 1057
902aa95c 1058 for (Int_t iCell = 0; iCell < ncells; iCell++) {
1059 if(GetDebug() > 2 ) printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Cell : amp %f, absId %d \n", cell->GetAmplitude(iCell), cell->GetCellNumber(iCell));
1060 fhAmplitude->Fill(cell->GetAmplitude(iCell));
1061 }
9725fd2a 1062
902aa95c 1063 }//AOD
9725fd2a 1064
902aa95c 1065 if(GetDebug() > 0)
1066 printf("AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - End \n");
1067}
1068
1069//__________________________________
1070void AliAnaCalorimeterQA::ClusterHistograms(const TLorentzVector mom, const Int_t nCaloCellsPerCluster,
1071 const Int_t nTracksMatched, const TObject * track,
1072 const Int_t * labels, const Int_t nLabels){
1073 //Fill CaloCluster related histograms
9725fd2a 1074
902aa95c 1075 AliAODMCParticle * aodprimary = 0x0;
1076 TParticle * primary = 0x0;
1077 Int_t tag = 0;
1078
1079 Float_t e = mom.E();
1080 Float_t pt = mom.Pt();
1081 Float_t eta = mom.Eta();
1082 Float_t phi = mom.Phi();
1083 if(phi < 0) phi +=TMath::TwoPi();
1084 if(GetDebug() > 0) {
1085 printf("AliAnaCalorimeterQA::ClusterHistograms() - cluster: E %2.3f, pT %2.3f, eta %2.3f, phi %2.3f \n",e,pt,eta,phi*TMath::RadToDeg());
1086 if(IsDataMC()) {
1087 printf("\t Primaries: nlabels %d, labels pointer %p\n",nLabels,labels);
1088 if(!nLabels || !labels) printf("\t Strange, no labels!!!\n");
1089 }
9725fd2a 1090 }
902aa95c 1091
1092 fhE ->Fill(e);
1093 fhPt ->Fill(pt);
1094 fhPhi ->Fill(phi);
1095 fhEta ->Fill(eta);
1096 fhEtaPhi->Fill(eta,phi);
1097 //Cells per cluster
1098 fhNCellsPerCluster->Fill(e, nCaloCellsPerCluster);
1099
1100 //Fill histograms only possible when simulation
1101 if(IsDataMC() && nLabels > 0 && labels){
1102
9725fd2a 1103 //Play with the MC stack if available
902aa95c 1104 Int_t label = labels[0];
1105
1106 if(label < 0) {
1107 if(GetDebug() >= 0) printf("AliAnaCalorimeterQA::ClusterHistograms() *** bad label ***: label %d \n", label);
1108 return;
1109 }
1110
1111 Int_t pdg =-1; Int_t pdg0 =-1;Int_t status = -1; Int_t iMother = -1; Int_t iParent = -1;
1112 Float_t vxMC= 0; Float_t vyMC = 0;
1113 Float_t eMC = 0; Float_t ptMC= 0; Float_t phiMC =0; Float_t etaMC = 0;
1114 Int_t charge = 0;
1115
1116 //Check the origin.
1117 tag = GetMCAnalysisUtils()->CheckOrigin(labels,nLabels, GetReader(),0);
1118
1119 if(GetReader()->ReadStack() && !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCUnknown)){ //it MC stack and known tag
1120
1121 if( label >= GetMCStack()->GetNtrack()) {
1122 if(GetDebug() >= 0) printf("AliAnaCalorimeterQA::ClusterHistograms() *** large label ***: label %d, n tracks %d \n", label, GetMCStack()->GetNtrack());
1123 return ;
1124 }
9725fd2a 1125
902aa95c 1126 primary = GetMCStack()->Particle(label);
1127 iMother = label;
1128 pdg0 = TMath::Abs(primary->GetPdgCode());
1129 pdg = pdg0;
1130 status = primary->GetStatusCode();
1131 vxMC = primary->Vx();
1132 vyMC = primary->Vy();
1133 iParent = primary->GetFirstMother();
1134
1135 if(GetDebug() > 1 ) {
1136 printf("AliAnaCalorimeterQA::ClusterHistograms() - Cluster most contributing mother: \n");
1137 printf("\t Mother label %d, pdg %d, %s, status %d, parent %d \n",iMother, pdg0, primary->GetName(),status, iParent);
1138 }
1139
1140 //Get final particle, no conversion products
1141 if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCConversion)){
1142 //Get the parent
1143 primary = GetMCStack()->Particle(iParent);
1144 pdg = TMath::Abs(primary->GetPdgCode());
1145 if(GetDebug() > 1 ) printf("AliAnaCalorimeterQA::ClusterHistograms() - Converted cluster!. Find before conversion: \n");
1146 while((pdg == 22 || pdg == 11) && status != 1){
1147 iMother = iParent;
1148 primary = GetMCStack()->Particle(iMother);
1149 status = primary->GetStatusCode();
1150 iParent = primary->GetFirstMother();
1151 pdg = TMath::Abs(primary->GetPdgCode());
1152 if(GetDebug() > 1 )printf("\t pdg %d, index %d, %s, status %d \n",pdg, iMother, primary->GetName(),status);
1153 }
1154
1155 if(GetDebug() > 1 ) {
1156 printf("AliAnaCalorimeterQA::ClusterHistograms() - Converted Cluster mother before conversion: \n");
1157 printf("\t Mother label %d, pdg %d, %s, status %d, parent %d \n",iMother, pdg, primary->GetName(), status, iParent);
1158 }
1159
1160 }
1161
1162 //Overlapped pi0 (or eta, there will be very few), get the meson
1163 if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPi0) ||
1164 GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCEta)){
1165 if(GetDebug() > 1 ) printf("AliAnaCalorimeterQA::ClusterHistograms() - Overlapped Meson decay!, Find it: \n");
1166 while(pdg != 111 && pdg != 221){
1167 iMother = iParent;
1168 primary = GetMCStack()->Particle(iMother);
1169 status = primary->GetStatusCode();
1170 iParent = primary->GetFirstMother();
1171 pdg = TMath::Abs(primary->GetPdgCode());
1172 if(GetDebug() > 1 ) printf("\t pdg %d, %s, index %d\n",pdg, primary->GetName(),iMother);
1173 if(iMother==-1) {
1174 printf("AliAnaCalorimeterQA::ClusterHistograms() - Tagged as Overlapped photon but meson not found, why?\n");
1175 //break;
1176 }
1177 }
1178
1179 if(GetDebug() > 2 ) printf("AliAnaCalorimeterQA::ClusterHistograms() - Overlapped %s decay, label %d \n",
1180 primary->GetName(),iMother);
1181 }
1182
1183 eMC = primary->Energy();
1184 ptMC = primary->Pt();
1185 phiMC = primary->Phi();
1186 etaMC = primary->Eta();
1187 pdg = TMath::Abs(primary->GetPdgCode());
1188 charge = (Int_t) TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
1189
1190 }
1191 else if(GetReader()->ReadAODMCParticles() && !GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCUnknown)){//it MC AOD and known tag
1192 //Get the list of MC particles
1193 if(!GetReader()->GetAODMCParticles(0)) {
1194 printf("AliAnaCalorimeterQA::ClusterHistograms() - MCParticles not available!\n");
1195 abort();
1196 }
9725fd2a 1197
902aa95c 1198 aodprimary = (AliAODMCParticle*) (GetReader()->GetAODMCParticles(0))->At(label);
1199 iMother = label;
1200 pdg0 = TMath::Abs(aodprimary->GetPdgCode());
1201 pdg = pdg0;
1202 status = aodprimary->IsPrimary();
1203 vxMC = aodprimary->Xv();
1204 vyMC = aodprimary->Yv();
1205 iParent = aodprimary->GetMother();
1206
1207 if(GetDebug() > 1 ) {
1208 printf("AliAnaCalorimeterQA::ClusterHistograms() - Cluster most contributing mother: \n");
1209 printf("\t Mother label %d, pdg %d, Primary? %d, Physical Primary? %d, parent %d \n",
1210 iMother, pdg0, aodprimary->IsPrimary(), aodprimary->IsPhysicalPrimary(), iParent);
1211 }
9725fd2a 1212
902aa95c 1213 //Get final particle, no conversion products
1214 if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCConversion)){
1215 if(GetDebug() > 1 )
1216 printf("AliAnaCalorimeterQA::ClusterHistograms() - Converted cluster!. Find before conversion: \n");
1217 //Get the parent
1218 aodprimary = (AliAODMCParticle*)(GetReader()->GetAODMCParticles(0))->At(iParent);
1219 pdg = TMath::Abs(aodprimary->GetPdgCode());
1220 while ((pdg == 22 || pdg == 11) && !aodprimary->IsPhysicalPrimary()) {
1221 iMother = iParent;
1222 aodprimary = (AliAODMCParticle*)(GetReader()->GetAODMCParticles(0))->At(iMother);
1223 status = aodprimary->IsPrimary();
1224 iParent = aodprimary->GetMother();
1225 pdg = TMath::Abs(aodprimary->GetPdgCode());
1226 if(GetDebug() > 1 )
1227 printf("\t pdg %d, index %d, Primary? %d, Physical Primary? %d \n",
1228 pdg, iMother, aodprimary->IsPrimary(), aodprimary->IsPhysicalPrimary());
1229 }
1230
1231 if(GetDebug() > 1 ) {
1232 printf("AliAnaCalorimeterQA::ClusterHistograms() - Converted Cluster mother before conversion: \n");
1233 printf("\t Mother label %d, pdg %d, parent %d, Primary? %d, Physical Primary? %d \n",
1234 iMother, pdg, iParent, aodprimary->IsPrimary(), aodprimary->IsPhysicalPrimary());
9725fd2a 1235 }
902aa95c 1236
9725fd2a 1237 }
902aa95c 1238
1239 //Overlapped pi0 (or eta, there will be very few), get the meson
1240 if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPi0) ||
1241 GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCEta)){
1242 if(GetDebug() > 1 ) printf("AliAnaCalorimeterQA::ClusterHistograms() - Overlapped Meson decay!, Find it: PDG %d, mom %d \n",pdg, iMother);
1243 while(pdg != 111 && pdg != 221){
1244
1245 iMother = iParent;
1246 aodprimary = (AliAODMCParticle*)(GetReader()->GetAODMCParticles(0))->At(iMother);
1247 status = aodprimary->IsPrimary();
1248 iParent = aodprimary->GetMother();
1249 pdg = TMath::Abs(aodprimary->GetPdgCode());
1250
1251 if(GetDebug() > 1 ) printf("\t pdg %d, index %d\n",pdg, iMother);
1252
1253 if(iMother==-1) {
1254 printf("AliAnaCalorimeterQA::ClusterHistograms() - Tagged as Overlapped photon but meson not found, why?\n");
1255 //break;
1256 }
1257 }
1258
1259 if(GetDebug() > 2 ) printf("AliAnaCalorimeterQA::ClusterHistograms() - Overlapped %s decay, label %d \n",
1260 aodprimary->GetName(),iMother);
1261 }
1262
1263 status = aodprimary->IsPrimary();
1264 eMC = aodprimary->E();
1265 ptMC = aodprimary->Pt();
1266 phiMC = aodprimary->Phi();
1267 etaMC = aodprimary->Eta();
1268 pdg = TMath::Abs(aodprimary->GetPdgCode());
1269 charge = aodprimary->Charge();
1270
1271 }
1272
1273 //Float_t vz = primary->Vz();
1274 Float_t r = TMath::Sqrt(vxMC*vxMC + vyMC*vyMC);
1275 if((pdg == 22 || TMath::Abs(pdg)==11) && status!=1) {
1276 fhEMVxyz ->Fill(vxMC,vyMC);//,vz);
1277 fhEMR ->Fill(e,r);
1278 }
1279
1280 //printf("reco e %f, pt %f, phi %f, eta %f \n", e, pt, phi, eta);
1281 //printf("prim e %f, pt %f, phi %f, eta %f \n", eMC,ptMC,phiMC ,etaMC );
1282 //printf("vertex: vx %f, vy %f, vz %f, r %f \n", vxMC, vyMC, vz, r);
1283
1284
1285 fh2E ->Fill(e, eMC);
1286 fh2Pt ->Fill(pt, ptMC);
1287 fh2Phi ->Fill(phi, phiMC);
1288 fh2Eta ->Fill(eta, etaMC);
1289 fhDeltaE ->Fill(eMC-e);
1290 fhDeltaPt ->Fill(ptMC-pt);
1291 fhDeltaPhi->Fill(phiMC-phi);
1292 fhDeltaEta->Fill(etaMC-eta);
1293 if(eMC > 0) fhRatioE ->Fill(e/eMC);
1294 if(ptMC > 0) fhRatioPt ->Fill(pt/ptMC);
1295 if(phiMC > 0) fhRatioPhi->Fill(phi/phiMC);
1296 if(etaMC > 0) fhRatioEta->Fill(eta/etaMC);
1297
1298
1299 //Overlapped pi0 (or eta, there will be very few)
1300 if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPi0) ||
1301 GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCEta)){
1302 //cout<<"Fill pi0"<< "E "<< e <<" prim E "<<eMC<<endl;
1303 fhPi0E ->Fill(e,eMC);
1304 fhPi0Pt ->Fill(pt,ptMC);
1305 fhPi0Eta ->Fill(eta,etaMC);
1306 fhPi0Phi ->Fill(phi,phiMC);
1307 if( nTracksMatched > 0){
1308 fhPi0ECharged ->Fill(e,eMC);
1309 fhPi0PtCharged ->Fill(pt,ptMC);
1310 fhPi0PhiCharged ->Fill(phi,phiMC);
1311 fhPi0EtaCharged ->Fill(eta,etaMC);
9725fd2a 1312 }
902aa95c 1313 }//Overlapped pizero decay
1314 else if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCPhoton)){
1315 fhGamE ->Fill(e,eMC);
1316 fhGamPt ->Fill(pt,ptMC);
1317 fhGamEta ->Fill(eta,etaMC);
1318 fhGamPhi ->Fill(phi,phiMC);
1319 fhGamDeltaE ->Fill(eMC-e);
1320 fhGamDeltaPt ->Fill(ptMC-pt);
1321 fhGamDeltaPhi->Fill(phiMC-phi);
1322 fhGamDeltaEta->Fill(etaMC-eta);
1323 if(eMC > 0) fhGamRatioE ->Fill(e/eMC);
1324 if(ptMC > 0) fhGamRatioPt ->Fill(pt/ptMC);
1325 if(phiMC > 0) fhGamRatioPhi->Fill(phi/phiMC);
1326 if(etaMC > 0) fhGamRatioEta->Fill(eta/etaMC);
1327 if( nTracksMatched > 0){
1328 fhGamECharged ->Fill(e,eMC);
1329 fhGamPtCharged ->Fill(pt,ptMC);
1330 fhGamPhiCharged ->Fill(phi,phiMC);
1331 fhGamEtaCharged ->Fill(eta,etaMC);
1332 }
1333 }//photon
1334 else if(GetMCAnalysisUtils()->CheckTagBit(tag, AliMCAnalysisUtils::kMCElectron)){
1335 fhEleE ->Fill(e,eMC);
1336 fhElePt ->Fill(pt,ptMC);
1337 fhEleEta ->Fill(eta,etaMC);
1338 fhElePhi ->Fill(phi,phiMC);
1339 fhEMVxyz ->Fill(vxMC,vyMC);//,vz);
1340 fhEMR ->Fill(e,r);
1341 if( nTracksMatched > 0){
1342 fhEleECharged ->Fill(e,eMC);
1343 fhElePtCharged ->Fill(pt,ptMC);
1344 fhElePhiCharged ->Fill(phi,phiMC);
1345 fhEleEtaCharged ->Fill(eta,etaMC);
1346 }
1347 }
1348 else if(charge == 0){
1349 fhNeHadE ->Fill(e,eMC);
1350 fhNeHadPt ->Fill(pt,ptMC);
1351 fhNeHadEta ->Fill(eta,etaMC);
1352 fhNeHadPhi ->Fill(phi,phiMC);
1353 fhHaVxyz ->Fill(vxMC,vyMC);//,vz);
1354 fhHaR ->Fill(e,r);
1355 if( nTracksMatched > 0){
1356 fhNeHadECharged ->Fill(e,eMC);
1357 fhNeHadPtCharged ->Fill(pt,ptMC);
1358 fhNeHadPhiCharged ->Fill(phi,phiMC);
1359 fhNeHadEtaCharged ->Fill(eta,etaMC);
9725fd2a 1360 }
902aa95c 1361 }
1362 else if(charge!=0){
1363 fhChHadE ->Fill(e,eMC);
1364 fhChHadPt ->Fill(pt,ptMC);
1365 fhChHadEta ->Fill(eta,etaMC);
1366 fhChHadPhi ->Fill(phi,phiMC);
1367 fhHaVxyz ->Fill(vxMC,vyMC);//,vz);
1368 fhHaR ->Fill(e,r);
1369 if( nTracksMatched > 0){
1370 fhChHadECharged ->Fill(e,eMC);
1371 fhChHadPtCharged ->Fill(pt,ptMC);
1372 fhChHadPhiCharged ->Fill(phi,phiMC);
1373 fhChHadEtaCharged ->Fill(eta,etaMC);
9725fd2a 1374 }
902aa95c 1375 }
1376 }//Work with MC
1377
1378
1379 //Match tracks and clusters
1380 //To be Modified in case of AODs
1381
1382 //if(ntracksmatched==1 && trackIndex==-1) ntracksmatched=0;
1383
1384 if( nTracksMatched > 0){
1385 fhECharged ->Fill(e);
1386 fhPtCharged ->Fill(pt);
1387 fhPhiCharged ->Fill(phi);
1388 fhEtaCharged ->Fill(eta);
1389 fhEtaPhiCharged->Fill(eta,phi);
1390
1391 //printf("track index %d ntracks %d\n", esd->GetNumberOfTracks());
1392 if(GetReader()->GetDataType()==AliCaloTrackReader::kESD) {
1393 if (track && ((AliESDtrack*)track)->GetOuterParam() ) {
1394
1395 Double_t tphi = ((AliESDtrack*)track)->GetOuterParam()->Phi();
1396 Double_t teta = ((AliESDtrack*)track)->GetOuterParam()->Eta();
1397 Double_t tmom = ((AliESDtrack*)track)->GetOuterParam()->P();
1398
1399 Double_t tmom2 = ((AliESDtrack*)track)->P();
1400 Double_t tpcSignal = ((AliESDtrack*)track)->GetTPCsignal();
1401
1402 Double_t deta = teta - eta;
1403 Double_t dphi = tphi - phi;
1404 if(dphi > TMath::Pi()) dphi -= 2*TMath::Pi();
1405 if(dphi < -TMath::Pi()) dphi += 2*TMath::Pi();
1406 Double_t dR = sqrt(dphi*dphi + deta*deta);
1407
1408 Double_t pOverE = tmom/e;
1409
1410 fh1pOverE->Fill(pOverE);
1411 if(dR < 0.02) fh1pOverER02->Fill(pOverE);
1412
1413 fh1dR->Fill(dR);
1414 fh2MatchdEdx->Fill(tmom2,tpcSignal);
1415
1416 if(IsDataMC() && primary){
1417 Int_t pdg = primary->GetPdgCode();
1418 Double_t charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
1419
1420 if(TMath::Abs(pdg) == 11){
1421 fhMCEle1pOverE->Fill(pOverE);
1422 fhMCEle1dR->Fill(dR);
1423 fhMCEle2MatchdEdx->Fill(tmom2,tpcSignal);
1424 if(dR < 0.02) fhMCEle1pOverER02->Fill(pOverE);
1425 }
1426 else if(charge!=0){
1427 fhMCChHad1pOverE->Fill(pOverE);
1428 fhMCChHad1dR->Fill(dR);
1429 fhMCChHad2MatchdEdx->Fill(tmom2,tpcSignal);
1430 if(dR < 0.02) fhMCChHad1pOverER02->Fill(pOverE);
1431 }
1432 else if(charge == 0){
1433 fhMCNeutral1pOverE->Fill(pOverE);
1434 fhMCNeutral1dR->Fill(dR);
1435 fhMCNeutral2MatchdEdx->Fill(tmom2,tpcSignal);
1436 if(dR < 0.02) fhMCNeutral1pOverER02->Fill(pOverE);
1437 }
1438 }//DataMC
1439 int nITS = ((AliESDtrack*)track)->GetNcls(0);
1440 int nTPC = ((AliESDtrack*)track)->GetNcls(1);
1441 if(dR < 0.02 && pOverE > 0.5 && pOverE < 1.5
1442 && nCaloCellsPerCluster > 1 && nITS > 3 && nTPC > 20) {
1443 fh2EledEdx->Fill(tmom2,tpcSignal);
1444 }
1445 }//Outer param available
1446 else if(!((AliESDtrack*)track)->GetOuterParam()){
1447 ULong_t status=AliESDtrack::kTPCrefit;
1448 status|=AliESDtrack::kITSrefit;
1449 //printf("track status %d\n", track->GetStatus() );
1450 fhEChargedNoOut ->Fill(e);
1451 fhPtChargedNoOut ->Fill(pt);
1452 fhPhiChargedNoOut ->Fill(phi);
1453 fhEtaChargedNoOut ->Fill(eta);
1454 fhEtaPhiChargedNoOut ->Fill(eta,phi);
1455 if(GetDebug() >= 0 && ((((AliESDtrack*)track)->GetStatus() & status) == status)) printf("ITS+TPC\n");
9725fd2a 1456 }
902aa95c 1457 else {
1458 if(GetDebug() >= 0) printf("AliAnaCalorimeterQA::ClusterHistograms() ERROR: Could not receive track %d\n", ((AliESDtrack*)track)->GetID());
9725fd2a 1459 }
902aa95c 1460 }//do only if input are ESDs
1461 }
9725fd2a 1462
902aa95c 1463}// Clusters
4865e325 1464
902aa95c 1465//______________________________________________________________________________
1466void AliAnaCalorimeterQA::MCHistograms(const TLorentzVector mom, const Int_t pdg){
1467 //Fill pure monte carlo related histograms
4865e325 1468
902aa95c 1469 Float_t eMC = mom.E();
1470 Float_t ptMC = mom.Pt();
1471 Float_t phiMC = mom.Phi();
1472 if(phiMC < 0)
1473 phiMC += TMath::TwoPi();
1474 Float_t etaMC = mom.Eta();
1475
1476 if (TMath::Abs(etaMC) > 1) return;
9725fd2a 1477
902aa95c 1478 Bool_t in = kTRUE;
1479 if(IsFidutialCutOn()) in = GetFidutialCut()->IsInFidutialCut(mom,fCalorimeter) ;
1480
1481 if (pdg==22) {
1482 fhGenGamPt ->Fill(ptMC);
1483 fhGenGamEta->Fill(etaMC);
1484 fhGenGamPhi->Fill(phiMC);
1485 if(in){
1486 fhGenGamAccE ->Fill(eMC);
1487 fhGenGamAccPt ->Fill(ptMC);
1488 fhGenGamAccEta->Fill(etaMC);
1489 fhGenGamAccPhi->Fill(phiMC);
1490 }
1491 }
1492 else if (pdg==111) {
1493 fhGenPi0Pt ->Fill(ptMC);
1494 fhGenPi0Eta->Fill(etaMC);
1495 fhGenPi0Phi->Fill(phiMC);
1496 if(in){
1497 fhGenPi0AccE ->Fill(eMC);
1498 fhGenPi0AccPt ->Fill(ptMC);
1499 fhGenPi0AccEta->Fill(etaMC);
1500 fhGenPi0AccPhi->Fill(phiMC);
1501 }
1502 }
1503 else if (pdg==221) {
1504 fhGenEtaPt ->Fill(ptMC);
1505 fhGenEtaEta->Fill(etaMC);
1506 fhGenEtaPhi->Fill(phiMC);
1507 }
1508 else if (pdg==223) {
1509 fhGenOmegaPt ->Fill(ptMC);
1510 fhGenOmegaEta->Fill(etaMC);
1511 fhGenOmegaPhi->Fill(phiMC);
1512 }
1513 else if (TMath::Abs(pdg)==11) {
1514 fhGenElePt ->Fill(ptMC);
1515 fhGenEleEta->Fill(etaMC);
1516 fhGenElePhi->Fill(phiMC);
1517 }
1518
1519}
1520
9725fd2a 1521//________________________________________________________________________
1522void AliAnaCalorimeterQA::ReadHistograms(TList* outputList)
1523{
1524 // Needed when Terminate is executed in distributed environment
1525 // Refill analysis histograms of this class with corresponding histograms in output list.
1526
1527 // Histograms of this analsys are kept in the same list as other analysis, recover the position of
1528 // the first one and then add the next
1529 Int_t index = outputList->IndexOf(outputList->FindObject(GetAddedHistogramsStringToName()+"hE"));
1530 //printf("Calo: %s, index: %d\n",fCalorimeter.Data(),index);
1531 //Read histograms, must be in the same order as in GetCreateOutputObject.
1532 fhE = (TH1F *) outputList->At(index++);
1533 fhPt = (TH1F *) outputList->At(index++);
1534 fhPhi = (TH1F *) outputList->At(index++);
1535 fhEta = (TH1F *) outputList->At(index++);
1536 fhEtaPhi = (TH2F *) outputList->At(index++);
1537
1538 fhECharged = (TH1F *) outputList->At(index++);
1539 fhPtCharged = (TH1F *) outputList->At(index++);
1540 fhPhiCharged = (TH1F *) outputList->At(index++);
1541 fhEtaCharged = (TH1F *) outputList->At(index++);
1542 fhEtaPhiCharged = (TH2F *) outputList->At(index++);
1543
1544 fhEChargedNoOut = (TH1F *) outputList->At(index++);
1545 fhPtChargedNoOut = (TH1F *) outputList->At(index++);
1546 fhPhiChargedNoOut = (TH1F *) outputList->At(index++);
1547 fhEtaChargedNoOut = (TH1F *) outputList->At(index++);
1548 fhEtaPhiChargedNoOut = (TH2F *) outputList->At(index++);
1549
1550 fhIM = (TH2F *) outputList->At(index++);
1551 fhAsym = (TH2F *) outputList->At(index++);
1552
1553 fhNCellsPerCluster = (TH2F *) outputList->At(index++);
1554 fhNClusters = (TH1F *) outputList->At(index++);
1555 fhNCells = (TH1F *) outputList->At(index++);
1556 fhAmplitude = (TH1F *) outputList->At(index++);
1557
1558 if(IsDataMC()){
1559 fhDeltaE = (TH1F *) outputList->At(index++);
1560 fhDeltaPt = (TH1F *) outputList->At(index++);
1561 fhDeltaPhi = (TH1F *) outputList->At(index++);
1562 fhDeltaEta = (TH1F *) outputList->At(index++);
1563
1564 fhRatioE = (TH1F *) outputList->At(index++);
1565 fhRatioPt = (TH1F *) outputList->At(index++);
1566 fhRatioPhi = (TH1F *) outputList->At(index++);
1567 fhRatioEta = (TH1F *) outputList->At(index++);
1568
1569 fh2E = (TH2F *) outputList->At(index++);
1570 fh2Pt = (TH2F *) outputList->At(index++);
1571 fh2Phi = (TH2F *) outputList->At(index++);
1572 fh2Eta = (TH2F *) outputList->At(index++);
1573
1574 fhGamE = (TH2F *) outputList->At(index++);
1575 fhGamPt = (TH2F *) outputList->At(index++);
1576 fhGamPhi = (TH2F *) outputList->At(index++);
1577 fhGamEta = (TH2F *) outputList->At(index++);
1578
1579 fhGamDeltaE = (TH1F *) outputList->At(index++);
1580 fhGamDeltaPt = (TH1F *) outputList->At(index++);
1581 fhGamDeltaPhi = (TH1F *) outputList->At(index++);
1582 fhGamDeltaEta = (TH1F *) outputList->At(index++);
1583
1584 fhGamRatioE = (TH1F *) outputList->At(index++);
1585 fhGamRatioPt = (TH1F *) outputList->At(index++);
1586 fhGamRatioPhi = (TH1F *) outputList->At(index++);
1587 fhGamRatioEta = (TH1F *) outputList->At(index++);
1588
9725fd2a 1589 fhPi0E = (TH2F *) outputList->At(index++);
1590 fhPi0Pt = (TH2F *) outputList->At(index++);
1591 fhPi0Phi = (TH2F *) outputList->At(index++);
1592 fhPi0Eta = (TH2F *) outputList->At(index++);
1593
1594 fhEleE = (TH2F *) outputList->At(index++);
1595 fhElePt = (TH2F *) outputList->At(index++);
1596 fhElePhi = (TH2F *) outputList->At(index++);
1597 fhEleEta = (TH2F *) outputList->At(index++);
1598
1599 fhNeHadE = (TH2F *) outputList->At(index++);
1600 fhNeHadPt = (TH2F *) outputList->At(index++);
1601 fhNeHadPhi = (TH2F *) outputList->At(index++);
1602 fhNeHadEta = (TH2F *) outputList->At(index++);
1603
1604 fhChHadE = (TH2F *) outputList->At(index++);
1605 fhChHadPt = (TH2F *) outputList->At(index++);
1606 fhChHadPhi = (TH2F *) outputList->At(index++);
1607 fhChHadEta = (TH2F *) outputList->At(index++);
1608
06e5656a 1609 fhGamECharged = (TH2F *) outputList->At(index++);
1610 fhGamPtCharged = (TH2F *) outputList->At(index++);
1611 fhGamPhiCharged = (TH2F *) outputList->At(index++);
1612 fhGamEtaCharged = (TH2F *) outputList->At(index++);
1613
1614 fhPi0ECharged = (TH2F *) outputList->At(index++);
1615 fhPi0PtCharged = (TH2F *) outputList->At(index++);
1616 fhPi0PhiCharged = (TH2F *) outputList->At(index++);
1617 fhPi0EtaCharged = (TH2F *) outputList->At(index++);
1618
1619 fhEleECharged = (TH2F *) outputList->At(index++);
1620 fhElePtCharged = (TH2F *) outputList->At(index++);
1621 fhElePhiCharged = (TH2F *) outputList->At(index++);
1622 fhEleEtaCharged = (TH2F *) outputList->At(index++);
1623
1624 fhNeHadECharged = (TH2F *) outputList->At(index++);
1625 fhNeHadPtCharged = (TH2F *) outputList->At(index++);
1626 fhNeHadPhiCharged = (TH2F *) outputList->At(index++);
1627 fhNeHadEtaCharged = (TH2F *) outputList->At(index++);
1628
1629 fhChHadECharged = (TH2F *) outputList->At(index++);
1630 fhChHadPtCharged = (TH2F *) outputList->At(index++);
1631 fhChHadPhiCharged = (TH2F *) outputList->At(index++);
1632 fhChHadEtaCharged = (TH2F *) outputList->At(index++);
1633
9725fd2a 1634// fhEMVxyz = (TH3F *) outputList->At(index++);
1635// fhHaVxyz = (TH3F *) outputList->At(index++);
1636
1637 fhEMVxyz = (TH2F *) outputList->At(index++);
1638 fhHaVxyz = (TH2F *) outputList->At(index++);
1639 fhEMR = (TH2F *) outputList->At(index++);
1640 fhHaR = (TH2F *) outputList->At(index++);
1641
1642 fhGenGamPt = (TH1F *) outputList->At(index++);
1643 fhGenGamEta = (TH1F *) outputList->At(index++);
1644 fhGenGamPhi = (TH1F *) outputList->At(index++);
1645
1646 fhGenPi0Pt = (TH1F *) outputList->At(index++);
1647 fhGenPi0Eta = (TH1F *) outputList->At(index++);
1648 fhGenPi0Phi = (TH1F *) outputList->At(index++);
1649
1650 fhGenEtaPt = (TH1F *) outputList->At(index++);
1651 fhGenEtaEta = (TH1F *) outputList->At(index++);
1652 fhGenEtaPhi = (TH1F *) outputList->At(index++);
1653
1654 fhGenOmegaPt = (TH1F *) outputList->At(index++);
1655 fhGenOmegaEta = (TH1F *) outputList->At(index++);
1656 fhGenOmegaPhi = (TH1F *) outputList->At(index++);
1657
1658 fhGenElePt = (TH1F *) outputList->At(index++);
1659 fhGenEleEta = (TH1F *) outputList->At(index++);
1660 fhGenElePhi = (TH1F *) outputList->At(index++);
1661
1662 fhGenGamAccE = (TH1F *) outputList->At(index++);
1663 fhGenGamAccPt = (TH1F *) outputList->At(index++);
1664 fhGenGamAccEta = (TH1F *) outputList->At(index++);
1665 fhGenGamAccPhi = (TH1F *) outputList->At(index++);
1666
1667 fhGenPi0AccE = (TH1F *) outputList->At(index++);
1668 fhGenPi0AccPt = (TH1F *) outputList->At(index++);
1669 fhGenPi0AccEta = (TH1F *) outputList->At(index++);
1670 fhGenPi0AccPhi = (TH1F *) outputList->At(index++);
1671
1672 }//Is data MC
1673
1674 fh1pOverE = (TH1F *) outputList->At(index++);
1675 fh1dR = (TH1F *) outputList->At(index++);
1676 fh2MatchdEdx = (TH2F *) outputList->At(index++);
1677 fh2EledEdx = (TH2F *) outputList->At(index++);
1678
06e5656a 1679 if(IsDataMC()){
1680 fhMCEle1pOverE = (TH1F *) outputList->At(index++);
1681 fhMCEle1dR = (TH1F *) outputList->At(index++);
1682 fhMCEle2MatchdEdx = (TH2F *) outputList->At(index++);
1683
1684 fhMCChHad1pOverE = (TH1F *) outputList->At(index++);
1685 fhMCChHad1dR = (TH1F *) outputList->At(index++);
1686 fhMCChHad2MatchdEdx = (TH2F *) outputList->At(index++);
1687
1688 fhMCNeutral1pOverE = (TH1F *) outputList->At(index++);
1689 fhMCNeutral1dR = (TH1F *) outputList->At(index++);
1690 fhMCNeutral2MatchdEdx = (TH2F *) outputList->At(index++);
1691
1692 fh1pOverER02 = (TH1F *) outputList->At(index++);
1693 fhMCEle1pOverER02 = (TH1F *) outputList->At(index++);
1694 fhMCChHad1pOverER02 = (TH1F *) outputList->At(index++);
1695 fhMCNeutral1pOverER02 = (TH1F *) outputList->At(index++);
1696 }
1697 //for(Int_t i = 0; i<index ; i++) cout<<outputList->At(i)->GetName()<<endl;
9725fd2a 1698}
1699
1700//__________________________________________________________________
1701void AliAnaCalorimeterQA::Terminate(TList* outputList)
1702{
902aa95c 1703 //Do plots if requested
1704 char line[1024] ;
1705
1706 //if(fRemoveOutputAOD){
1707 // sprintf(line, ".!rm -fR %s",((AliVEventHandler*)((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()))->GetOutputFileName());
1708 // gROOT->ProcessLine(line);
1709 //}
1710
21d9bc2a 1711 if(!fMakePlots) return;
9725fd2a 1712
1713 //Do some plots to end
1714 if(fStyleMacro!="")gROOT->Macro(fStyleMacro);
1715 //Recover histograms from output histograms list, needed for distributed analysis.
1716 ReadHistograms(outputList);
1717
1718 //printf(" AliAnaCalorimeterQA::Terminate() *** %s Report:", GetName()) ;
1719 //printf(" AliAnaCalorimeterQA::Terminate() pt : %5.3f , RMS : %5.3f \n", fhPt->GetMean(), fhPt->GetRMS() ) ;
1720
1721 char name[128];
1722 char cname[128];
06e5656a 1723
8a587055 1724 //CaloCells
1725 //printf("c9\n");
1726 sprintf(cname,"QA_%s_nclustercellsamp",fCalorimeter.Data());
1727 TCanvas * c9 = new TCanvas(cname, " CaloClusters and CaloCells", 400, 400) ;
1728 c9->Divide(2, 2);
1729
1730 c9->cd(1) ;
1731 if(fhNClusters->GetEntries() > 0) gPad->SetLogy();
1732 gPad->SetLogx();
1733 fhNClusters->SetLineColor(4);
1734 fhNClusters->Draw();
1735
1736 c9->cd(2) ;
1737 if(fhNCells->GetEntries() > 0) gPad->SetLogy();
1738 gPad->SetLogx();
1739 fhNCells->SetLineColor(4);
1740 fhNCells->Draw();
1741
1742 c9->cd(3) ;
1743 if(fhNCellsPerCluster->GetEntries() > 0) gPad->SetLogy();
1744 gPad->SetLogx();
1745 fhNCellsPerCluster->SetLineColor(4);
1746 fhNCellsPerCluster->Draw();
1747
1748 c9->cd(4) ;
1749 if(fhAmplitude->GetEntries() > 0) gPad->SetLogy();
1750 //gPad->SetLogx();
1751 fhAmplitude->SetLineColor(4);
1752 fhAmplitude->Draw();
1753
1754 sprintf(name,"QA_%s_CaloClustersAndCaloCells.eps",fCalorimeter.Data());
1755 c9->Print(name); printf("Plot: %s\n",name);
1756
1757
9725fd2a 1758 //Reconstructed distributions
06e5656a 1759 //printf("c1\n");
9725fd2a 1760 sprintf(cname,"QA_%s_rec",fCalorimeter.Data());
1761 TCanvas * c = new TCanvas(cname, "Reconstructed distributions", 400, 400) ;
1762 c->Divide(2, 2);
1763
1764 c->cd(1) ;
8a587055 1765 if(fhE->GetEntries() > 0) gPad->SetLogy();
9725fd2a 1766 fhE->SetLineColor(4);
1767 fhE->Draw();
1768
1769 c->cd(2) ;
8a587055 1770 if(fhPt->GetEntries() > 0) gPad->SetLogy();
9725fd2a 1771 fhPt->SetLineColor(4);
1772 fhPt->Draw();
1773
1774 c->cd(3) ;
1775 fhPhi->SetLineColor(4);
1776 fhPhi->Draw();
1777
1778 c->cd(4) ;
1779 fhEta->SetLineColor(4);
1780 fhEta->Draw();
1781
1782 sprintf(name,"QA_%s_ReconstructedDistributions.eps",fCalorimeter.Data());
8a587055 1783 c->Print(name); printf("Plot: %s\n",name);
9725fd2a 1784
1785 //Reconstructed distributions, matched with tracks
1786 //printf("c2\n");
1787 sprintf(cname,"QA_%s_rectrackmatch",fCalorimeter.Data());
1788 TCanvas * c2 = new TCanvas(cname, "Reconstructed distributions, matched with tracks", 400, 400) ;
1789 c2->Divide(2, 2);
1790
1791 c2->cd(1) ;
8a587055 1792 if(fhECharged->GetEntries() > 0) gPad->SetLogy();
9725fd2a 1793 fhECharged->SetLineColor(4);
1794 fhECharged->Draw();
1795
1796 c2->cd(2) ;
8a587055 1797 if(fhPtCharged->GetEntries() > 0) gPad->SetLogy();
9725fd2a 1798 fhPtCharged->SetLineColor(4);
1799 fhPtCharged->Draw();
1800
1801 c2->cd(3) ;
1802 fhPhiCharged->SetLineColor(4);
1803 fhPhiCharged->Draw();
1804
1805 c2->cd(4) ;
1806 fhEtaCharged->SetLineColor(4);
1807 fhEtaCharged->Draw();
1808
1809 sprintf(name,"QA_%s_ReconstructedDistributions_TrackMatched.eps",fCalorimeter.Data());
8a587055 1810 c2->Print(name); printf("Plot: %s\n",name);
9725fd2a 1811
1812 TH1F * hEChargedClone = (TH1F*) fhECharged->Clone("EChargedClone");
1813 TH1F * hPtChargedClone = (TH1F*) fhPtCharged->Clone("PtChargedClone");
1814 TH1F * hEtaChargedClone = (TH1F*) fhEtaCharged->Clone("EtaChargedClone");
1815 TH1F * hPhiChargedClone = (TH1F*) fhPhiCharged->Clone("PhiChargedClone");
06e5656a 1816
9725fd2a 1817 TH1F * hEChargedClone2 = (TH1F*) fhECharged->Clone("EChargedClone2");
1818 TH1F * hPtChargedClone2 = (TH1F*) fhPtCharged->Clone("PtChargedClone2");
1819 TH1F * hEtaChargedClone2 = (TH1F*) fhEtaCharged->Clone("EtaChargedClone2");
1820 TH1F * hPhiChargedClone2 = (TH1F*) fhPhiCharged->Clone("PhiChargedClone2");
06e5656a 1821
9725fd2a 1822 //Ratio: reconstructed track matched/ all reconstructed
1823 //printf("c3\n");
1824 sprintf(cname,"QA_%s_rectrackmatchrat",fCalorimeter.Data());
1825 TCanvas * c3 = new TCanvas(cname, "Ratio: reconstructed track matched/ all reconstructed", 400, 400) ;
1826 c3->Divide(2, 2);
1827
1828 c3->cd(1) ;
8a587055 1829 if(hEChargedClone->GetEntries() > 0) gPad->SetLogy();
06e5656a 1830 hEChargedClone->SetTitleOffset(1.6,"Y");
1831 hEChargedClone->SetYTitle("track matched / all ");
1832 hEChargedClone->SetXTitle("E (GeV)");
9725fd2a 1833 hEChargedClone->Divide(fhE);
1834 hEChargedClone->Draw();
1835
1836 c3->cd(2) ;
8a587055 1837 if(hPtChargedClone->GetEntries() > 0) gPad->SetLogy();
06e5656a 1838 hPtChargedClone->SetTitleOffset(1.6,"Y");
1839 hPtChargedClone->SetYTitle("track matched / all ");
1840 hPtChargedClone->SetXTitle("p_{T} (GeV/c)");
9725fd2a 1841 hPtChargedClone->Divide(fhPt);
1842 hPtChargedClone->Draw();
1843
1844 c3->cd(3) ;
8a587055 1845 if(hPhiChargedClone->GetEntries() > 0) gPad->SetLogy();
06e5656a 1846 hPhiChargedClone->SetTitleOffset(1.6,"Y");
1847 hPhiChargedClone->SetYTitle("track matched / all ");
1848 hPhiChargedClone->SetXTitle("#phi (rad)");
9725fd2a 1849 hPhiChargedClone->Divide(fhPhi);
1850 hPhiChargedClone->Draw();
1851
1852 c3->cd(4) ;
8a587055 1853 if(hEtaChargedClone->GetEntries() > 0) gPad->SetLogy();
06e5656a 1854 hEtaChargedClone->SetTitleOffset(1.6,"Y");
1855 hEtaChargedClone->SetYTitle("track matched / all ");
1856 hEtaChargedClone->SetXTitle("#eta");
1857 hEtaChargedClone->Divide(fhEta);
9725fd2a 1858 hEtaChargedClone->Draw();
1859
1860 sprintf(name,"QA_%s_RatioReconstructedMatchedDistributions.eps",fCalorimeter.Data());
8a587055 1861 c3->Print(name); printf("Plot: %s\n",name);
9725fd2a 1862
1863 //Ratio: reconstructed track matched (minus no track param) / all
06e5656a 1864 //printf("c3\n");
9725fd2a 1865 sprintf(cname,"QA_%s_rectrackmatchratout",fCalorimeter.Data());
1866 TCanvas * c333 = new TCanvas(cname, "Ratio: reconstructed track matched (with outer track param)/ all", 400, 400) ;
1867 c333->Divide(2, 2);
06e5656a 1868
9725fd2a 1869 c333->cd(1) ;
1870 hEChargedClone2->Add(fhEChargedNoOut,-1);
1871 hEChargedClone2->SetYTitle("track matched / all");
06e5656a 1872 hEChargedClone2->SetXTitle("E (GeV)");
9725fd2a 1873 hEChargedClone2->Divide(fhE);
1874 hEChargedClone2->Draw();
1875
1876 c333->cd(2) ;
1877 hPtChargedClone2->Add(fhPtChargedNoOut,-1);
1878 hPtChargedClone2->SetYTitle("track matched / all");
06e5656a 1879 hPtChargedClone2->SetXTitle("p_{T} (GeV/c)");
9725fd2a 1880 hPtChargedClone2->Divide(fhPt);
1881 hPtChargedClone2->Draw();
1882
1883 c333->cd(3) ;
1884 hPhiChargedClone2->Add(fhPhiChargedNoOut,-1);
1885 hPhiChargedClone2->SetYTitle("track matched / all");
06e5656a 1886 hPhiChargedClone2->SetXTitle("#phi (rad)");
9725fd2a 1887 hPhiChargedClone2->Divide(fhPhi);
1888 hPhiChargedClone2->Draw();
1889
1890 c333->cd(4) ;
1891 hEtaChargedClone2->Add(fhEtaChargedNoOut,-1);
1892 hEtaChargedClone2->SetYTitle("track matched / all");
06e5656a 1893 hEtaChargedClone2->SetXTitle("#eta");
9725fd2a 1894 hEtaChargedClone2->Divide(fhEta);
1895 hEtaChargedClone2->Draw();
1896
1897 sprintf(name,"QA_%s_RatioReconstructedMatchedDistributionsOuter.eps",fCalorimeter.Data());
8a587055 1898 c333->Print(name); printf("Plot: %s\n",name);
06e5656a 1899
1900 //Reconstructed distributions, matched with tracks but no outer param
9725fd2a 1901 //printf("c2\n");
1902 sprintf(cname,"QA_%s_rectrackmatch_noout",fCalorimeter.Data());
1903 TCanvas * c22 = new TCanvas(cname, "Reconstructed distributions, matched with tracks, no outer track param", 400, 400) ;
1904 c22->Divide(2, 2);
1905
1906 c22->cd(1) ;
8a587055 1907 if(fhEChargedNoOut->GetEntries() > 0) gPad->SetLogy();
9725fd2a 1908 fhEChargedNoOut->SetLineColor(4);
1909 fhEChargedNoOut->Draw();
1910
1911 c22->cd(2) ;
8a587055 1912 if(fhEChargedNoOut->GetEntries() > 0) gPad->SetLogy();
9725fd2a 1913 fhPtChargedNoOut->SetLineColor(4);
1914 fhPtChargedNoOut->Draw();
1915
1916 c22->cd(3) ;
1917 fhPhiChargedNoOut->SetLineColor(4);
1918 fhPhiChargedNoOut->Draw();
1919
1920 c22->cd(4) ;
1921 fhEtaChargedNoOut->SetLineColor(4);
1922 fhEtaChargedNoOut->Draw();
1923
1924 sprintf(name,"QA_%s_ReconstructedDistributions_TrackMatched_NoOutParam.eps",fCalorimeter.Data());
8a587055 1925 c22->Print(name); printf("Plot: %s\n",name);
9725fd2a 1926
1927 //Ratio: reconstructed track matched/ all reconstructed
06e5656a 1928 //printf("c3\n");
1929
1930// TH1F * hEChargedNoOutClone = (TH1F*) fhEChargedNoOut->Clone("EChargedNoOutClone");
1931// TH1F * hPtChargedNoOutClone = (TH1F*) fhPtChargedNoOut->Clone("PtChargedNoOutClone");
1932// TH1F * hEtaChargedNoOutClone = (TH1F*) fhEtaChargedNoOut->Clone("EtaChargedNoOutClone");
1933// TH1F * hPhiChargedNoOutClone = (TH1F*) fhPhiChargedNoOut->Clone("PhiChargedNoOutClone");
1934
1935// sprintf(cname,"QA_%s_rectrackmatchratnoout",fCalorimeter.Data());
1936// TCanvas * c33 = new TCanvas(cname, "Ratio: reconstructed track matched/ all reconstructed", 400, 400) ;
1937// c33->Divide(2, 2);
1938//
1939// c33->cd(1) ;
1940// hEChargedNoOutClone->SetYTitle("track matched no out/ all matched");
1941// hEChargedNoOutClone->SetXTitle("E (GeV)");
1942// hEChargedNoOutClone->Divide(fhECharged);
1943// hEChargedNoOutClone->Draw();
1944//
1945// c33->cd(2) ;
1946// hPtChargedNoOutClone->SetYTitle("track matched no out / all matched");
1947// hPtChargedNoOutClone->SetXTitle("p_{T} (GeV/c)");
1948// hPtChargedNoOutClone->Divide(fhPtCharged);
1949// hPtChargedNoOutClone->Draw();
1950//
1951// c33->cd(3) ;
1952// hPhiChargedNoOutClone->SetYTitle("track matched no out/ all matched");
1953// hPhiChargedNoOutClone->SetXTitle("#phi (rad)");
1954// hPhiChargedNoOutClone->Divide(fhPhiCharged);
1955// hPhiChargedNoOutClone->Draw();
1956//
1957// c33->cd(4) ;
1958// hEtaChargedNoOutClone->SetYTitle("track matched no out/ all matched");
1959// hEtaChargedNoOutClone->SetXTitle("#eta");
1960// hEtaChargedNoOutClone->Divide(fhEtaCharged);
1961// hEtaChargedNoOutClone->Draw();
1962//
1963// sprintf(name,"QA_%s_RatioMatchedDistributionsAllToNoOut.eps",fCalorimeter.Data());
8a587055 1964// c33->Print(name); printf("Plot: %s\n",name);
06e5656a 1965
1966
9725fd2a 1967 //eta vs phi
1968 //printf("c4\n");
1969 sprintf(cname,"QA_%s_etavsphi",fCalorimeter.Data());
06e5656a 1970 // TCanvas * c4 = new TCanvas(cname, "reconstructed #eta vs #phi", 600, 200) ;
1971 // c4->Divide(3, 1);
1972
1973 TCanvas * c4 = new TCanvas(cname, "reconstructed #eta vs #phi", 400, 200) ;
1974 c4->Divide(2, 1);
1975
9725fd2a 1976 c4->cd(1) ;
1977 fhEtaPhi->Draw("cont");
1978
1979 c4->cd(2) ;
1980 fhEtaPhiCharged->Draw("cont");
1981
06e5656a 1982 // c4->cd(3) ;
1983 // fhEtaPhiChargedNoOut->Draw("cont");
1984
9725fd2a 1985 sprintf(name,"QA_%s_ReconstructedEtaVsPhi.eps",fCalorimeter.Data());
8a587055 1986 c4->Print(name); printf("Plot: %s\n",name);
9725fd2a 1987
1988 //Invariant mass
1989 Int_t binmin = -1;
1990 Int_t binmax = -1;
06e5656a 1991
9725fd2a 1992 if(fhIM->GetEntries() > 1){
1993 Int_t nebins = fhIM->GetNbinsX();
1994 Int_t emax = (Int_t) fhIM->GetXaxis()->GetXmax();
1995 Int_t emin = (Int_t) fhIM->GetXaxis()->GetXmin();
1996 if (emin != 0 ) printf("emin != 0 \n");
1997 //printf("IM: nBinsX %d, emin %2.2f, emax %2.2f\n",nebins,emin,emax);
1998
1999 sprintf(cname,"QA_%s_IM",fCalorimeter.Data());
06e5656a 2000 // printf("c5\n");
9725fd2a 2001 TCanvas * c5 = new TCanvas(cname, "Invariant mass", 400, 400) ;
2002 c5->Divide(2, 2);
2003
2004 c5->cd(1) ;
2005 fhIM->SetLineColor(4);
2006 fhIM->Draw();
2007
2008 c5->cd(2) ;
2009 binmin = 0;
2010 binmax = (Int_t) (5-emin)*nebins/emax;
2011 TH1D *pyim5 = fhIM->ProjectionY("pyim5",binmin,binmax);
2012 pyim5->SetTitle("E_{pair} < 5 GeV");
2013 pyim5->SetLineColor(4);
2014 pyim5->Draw();
2015
2016 c5->cd(3) ;
2017 binmin = (Int_t) (5-emin)*nebins/emax;
2018 binmax = (Int_t) (10-emin)*nebins/emax;
2019 TH1D *pyim510 = fhIM->ProjectionY("pyim5_10",binmin,binmax);
2020 pyim510->SetTitle("5 < E_{pair} < 10 GeV");
2021 pyim510->SetLineColor(4);
2022 pyim510->Draw();
2023
2024 c5->cd(4) ;
2025 binmin = (Int_t) (10-emin)*nebins/emax;
2026 binmax = -1;
2027 TH1D *pyim10 = fhIM->ProjectionY("pyim10",binmin,binmax);
2028 pyim10->SetTitle("E_{pair} > 10 GeV");
2029 pyim10->SetLineColor(4);
2030 pyim10->Draw();
2031
2032 sprintf(name,"QA_%s_InvariantMass.eps",fCalorimeter.Data());
8a587055 2033 c5->Print(name); printf("Plot: %s\n",name);
9725fd2a 2034 }
2035
2036 //Asymmetry
2037 if(fhAsym->GetEntries() > 1){
2038 Int_t nebins = fhAsym->GetNbinsX();
2039 Int_t emax = (Int_t) fhAsym->GetXaxis()->GetXmax();
2040 Int_t emin = (Int_t) fhAsym->GetXaxis()->GetXmin();
2041 if (emin != 0 ) printf("emin != 0 \n");
2042 //printf("Asym: nBinsX %d, emin %2.2f, emax %2.2f\n",nebins,emin,emax);
2043
2044 sprintf(cname,"QA_%s_Asym",fCalorimeter.Data());
2045 // printf("c5\n");
2046 TCanvas * c5b = new TCanvas(cname, "Asymmetry", 400, 400) ;
2047 c5b->Divide(2, 2);
2048
2049 c5b->cd(1) ;
06e5656a 2050 fhAsym->SetTitleOffset(1.6,"Y");
9725fd2a 2051 fhAsym->SetLineColor(4);
2052 fhAsym->Draw();
2053
2054 c5b->cd(2) ;
2055 binmin = 0;
2056 binmax = (Int_t) (5-emin)*nebins/emax;
2057 TH1D *pyAsym5 = fhAsym->ProjectionY("pyAsym5",binmin,binmax);
2058 pyAsym5->SetTitle("E_{pair} < 5 GeV");
2059 pyAsym5->SetLineColor(4);
2060 pyAsym5->Draw();
2061
2062 c5b->cd(3) ;
2063 binmin = (Int_t) (5-emin)*nebins/emax;
2064 binmax = (Int_t) (10-emin)*nebins/emax;
2065 TH1D *pyAsym510 = fhAsym->ProjectionY("pyAsym5_10",binmin,binmax);
2066 pyAsym510->SetTitle("5 < E_{pair} < 10 GeV");
2067 pyAsym510->SetLineColor(4);
2068 pyAsym510->Draw();
2069
2070 c5b->cd(4) ;
2071 binmin = (Int_t) (10-emin)*nebins/emax;
2072 binmax = -1;
2073 TH1D *pyAsym10 = fhAsym->ProjectionY("pyAsym10",binmin,binmax);
2074 pyAsym10->SetTitle("E_{pair} > 10 GeV");
2075 pyAsym10->SetLineColor(4);
2076 pyAsym10->Draw();
2077
2078 sprintf(name,"QA_%s_Asymmetry.eps",fCalorimeter.Data());
8a587055 2079 c5b->Print(name); printf("Plot: %s\n",name);
9725fd2a 2080 }
2081
8a587055 2082 if(IsDataMC()){
9725fd2a 2083 //Reconstructed vs MC distributions
2084 //printf("c6\n");
2085 sprintf(cname,"QA_%s_recvsmc",fCalorimeter.Data());
2086 TCanvas * c6 = new TCanvas(cname, "Reconstructed vs MC distributions", 400, 400) ;
2087 c6->Divide(2, 2);
2088
2089 c6->cd(1) ;
06e5656a 2090 fh2E->SetTitleOffset(1.6,"Y");
9725fd2a 2091 fh2E->SetLineColor(4);
2092 fh2E->Draw();
2093
2094 c6->cd(2) ;
06e5656a 2095 fh2Pt->SetTitleOffset(1.6,"Y");
9725fd2a 2096 fh2Pt->SetLineColor(4);
2097 fh2Pt->Draw();
2098
2099 c6->cd(3) ;
06e5656a 2100 fh2Phi->SetTitleOffset(1.6,"Y");
9725fd2a 2101 fh2Phi->SetLineColor(4);
2102 fh2Phi->Draw();
2103
2104 c6->cd(4) ;
06e5656a 2105 fh2Eta->SetTitleOffset(1.6,"Y");
9725fd2a 2106 fh2Eta->SetLineColor(4);
2107 fh2Eta->Draw();
2108
2109 sprintf(name,"QA_%s_ReconstructedVSMCDistributions.eps",fCalorimeter.Data());
8a587055 2110 c6->Print(name); printf("Plot: %s\n",name);
9725fd2a 2111
9725fd2a 2112 //Reconstructed vs MC distributions
2113 //printf("c6\n");
2114 sprintf(cname,"QA_%s_gamrecvsmc",fCalorimeter.Data());
2115 TCanvas * c6Gam = new TCanvas(cname, "Reconstructed vs MC distributions", 400, 400) ;
2116 c6Gam->Divide(2, 2);
2117
2118 c6Gam->cd(1) ;
06e5656a 2119 fhGamE->Draw();
9725fd2a 2120
2121 c6Gam->cd(2) ;
06e5656a 2122 fhGamPt->Draw();
9725fd2a 2123
2124 c6Gam->cd(3) ;
06e5656a 2125 fhGamPhi->Draw();
9725fd2a 2126
2127 c6Gam->cd(4) ;
06e5656a 2128 fhGamEta->Draw();
9725fd2a 2129
2130 sprintf(name,"QA_%s_GammaReconstructedVSMCDistributions.eps",fCalorimeter.Data());
8a587055 2131 c6->Print(name); printf("Plot: %s\n",name);
06e5656a 2132
9725fd2a 2133 //Generated - reconstructed
2134 //printf("c7\n");
2135 sprintf(cname,"QA_%s_diffgenrec",fCalorimeter.Data());
2136 TCanvas * c7 = new TCanvas(cname, "generated - reconstructed", 400, 400) ;
2137 c7->Divide(2, 2);
2138
2139 c7->cd(1) ;
8a587055 2140 if(fhDeltaE->GetEntries() > 0) gPad->SetLogy();
9725fd2a 2141 fhGamDeltaE->SetLineColor(4);
2142 fhDeltaE->Draw();
2143 fhGamDeltaE->Draw("same");
06e5656a 2144
9725fd2a 2145 TLegend pLegendd(0.65,0.55,0.9,0.8);
2146 pLegendd.SetTextSize(0.06);
2147 pLegendd.AddEntry(fhDeltaE,"all","L");
2148 pLegendd.AddEntry(fhGamDeltaE,"from #gamma","L");
2149 pLegendd.SetFillColor(10);
2150 pLegendd.SetBorderSize(1);
2151 pLegendd.Draw();
06e5656a 2152
9725fd2a 2153 c7->cd(2) ;
8a587055 2154 if(fhDeltaPt->GetEntries() > 0) gPad->SetLogy();
9725fd2a 2155 fhGamDeltaPt->SetLineColor(4);
2156 fhDeltaPt->Draw();
06e5656a 2157 fhGamDeltaPt->Draw("same");
2158
9725fd2a 2159 c7->cd(3) ;
2160 fhGamDeltaPhi->SetLineColor(4);
2161 fhDeltaPhi->Draw();
06e5656a 2162 fhGamDeltaPhi->Draw("same");
9725fd2a 2163
2164 c7->cd(4) ;
2165 fhGamDeltaEta->SetLineColor(4);
2166 fhDeltaEta->Draw();
2167 fhGamDeltaEta->Draw("same");
06e5656a 2168
9725fd2a 2169 sprintf(name,"QA_%s_DiffGeneratedReconstructed.eps",fCalorimeter.Data());
8a587055 2170 c7->Print(name); printf("Plot: %s\n",name);
9725fd2a 2171
9725fd2a 2172 // Reconstructed / Generated
2173 //printf("c8\n");
2174 sprintf(cname,"QA_%s_ratiorecgen",fCalorimeter.Data());
2175 TCanvas * c8 = new TCanvas(cname, " reconstructed / generated", 400, 400) ;
2176 c8->Divide(2, 2);
2177
2178 c8->cd(1) ;
8a587055 2179 if(fhRatioE->GetEntries() > 0) gPad->SetLogy();
9725fd2a 2180 fhGamRatioE->SetLineColor(4);
2181 fhRatioE->Draw();
2182 fhGamRatioE->Draw("same");
06e5656a 2183
9725fd2a 2184 TLegend pLegendr(0.65,0.55,0.9,0.8);
2185 pLegendr.SetTextSize(0.06);
2186 pLegendr.AddEntry(fhRatioE,"all","L");
2187 pLegendr.AddEntry(fhGamRatioE,"from #gamma","L");
2188 pLegendr.SetFillColor(10);
2189 pLegendr.SetBorderSize(1);
2190 pLegendr.Draw();
06e5656a 2191
9725fd2a 2192 c8->cd(2) ;
8a587055 2193 if(fhRatioPt->GetEntries() > 0) gPad->SetLogy();
9725fd2a 2194 fhGamRatioPt->SetLineColor(4);
2195 fhRatioPt->Draw();
06e5656a 2196 fhGamRatioPt->Draw("same");
2197
9725fd2a 2198 c8->cd(3) ;
2199 fhGamRatioPhi->SetLineColor(4);
2200 fhRatioPhi->Draw();
06e5656a 2201 fhGamRatioPhi->Draw("same");
2202
9725fd2a 2203 c8->cd(4) ;
2204 fhGamRatioEta->SetLineColor(4);
2205 fhRatioEta->Draw();
06e5656a 2206 fhGamRatioEta->Draw("same");
2207
9725fd2a 2208 sprintf(name,"QA_%s_ReconstructedDivGenerated.eps",fCalorimeter.Data());
8a587055 2209 c8->Print(name); printf("Plot: %s\n",name);
9725fd2a 2210
2211 //MC
2212
2213 //Generated distributions
2214 //printf("c1\n");
2215 sprintf(cname,"QA_%s_gen",fCalorimeter.Data());
2216 TCanvas * c10 = new TCanvas(cname, "Generated distributions", 600, 200) ;
2217 c10->Divide(3, 1);
2218
2219 c10->cd(1) ;
2220 gPad->SetLogy();
2221 TH1F * haxispt = (TH1F*) fhGenPi0Pt->Clone("axispt");
2222 haxispt->SetTitle("Generated Particles p_{T}, |#eta| < 1");
2223 fhGenPi0Pt->SetLineColor(1);
2224 fhGenGamPt->SetLineColor(4);
2225 fhGenEtaPt->SetLineColor(2);
2226 fhGenOmegaPt->SetLineColor(7);
2227 fhGenElePt->SetLineColor(6);
2228
2229 //Select the maximum of the histogram to show all lines.
2230 if(fhGenPi0Pt->GetMaximum() >= fhGenGamPt->GetMaximum() && fhGenPi0Pt->GetMaximum() >= fhGenEtaPt->GetMaximum() &&
2231 fhGenPi0Pt->GetMaximum() >= fhGenOmegaPt->GetMaximum() && fhGenPi0Pt->GetMaximum() >= fhGenElePt->GetMaximum())
2232 haxispt->SetMaximum(fhGenPi0Pt->GetMaximum());
2233 else if(fhGenGamPt->GetMaximum() >= fhGenPi0Pt->GetMaximum() && fhGenGamPt->GetMaximum() >= fhGenEtaPt->GetMaximum() &&
06e5656a 2234 fhGenGamPt->GetMaximum() >= fhGenOmegaPt->GetMaximum() && fhGenGamPt->GetMaximum() >= fhGenElePt->GetMaximum())
9725fd2a 2235 haxispt->SetMaximum(fhGenGamPt->GetMaximum());
2236 else if(fhGenEtaPt->GetMaximum() >= fhGenPi0Pt->GetMaximum() && fhGenEtaPt->GetMaximum() >= fhGenGamPt->GetMaximum() &&
2237 fhGenEtaPt->GetMaximum() >= fhGenOmegaPt->GetMaximum() && fhGenEtaPt->GetMaximum() >= fhGenElePt->GetMaximum())
2238 haxispt->SetMaximum(fhGenEtaPt->GetMaximum());
2239 else if(fhGenOmegaPt->GetMaximum() >= fhGenPi0Pt->GetMaximum() && fhGenOmegaPt->GetMaximum() >= fhGenEtaPt->GetMaximum() &&
2240 fhGenOmegaPt->GetMaximum() >= fhGenGamPt->GetMaximum() && fhGenOmegaPt->GetMaximum() >= fhGenElePt->GetMaximum())
2241 haxispt->SetMaximum(fhGenOmegaPt->GetMaximum());
2242 else if(fhGenElePt->GetMaximum() >= fhGenPi0Pt->GetMaximum() && fhGenElePt->GetMaximum() >= fhGenEtaPt->GetMaximum() &&
2243 fhGenElePt->GetMaximum() >= fhGenOmegaPt->GetMaximum() && fhGenElePt->GetMaximum() >= fhGenGamPt->GetMaximum())
2244 haxispt->SetMaximum(fhGenElePt->GetMaximum());
06e5656a 2245 haxispt->SetMinimum(1);
9725fd2a 2246 haxispt->Draw("axis");
2247 fhGenPi0Pt->Draw("same");
2248 fhGenGamPt->Draw("same");
2249 fhGenEtaPt->Draw("same");
2250 fhGenOmegaPt->Draw("same");
2251 fhGenElePt->Draw("same");
2252
06e5656a 2253 TLegend pLegend(0.85,0.65,0.95,0.93);
9725fd2a 2254 pLegend.SetTextSize(0.06);
06e5656a 2255 pLegend.AddEntry(fhGenPi0Pt," #pi^{0}","L");
2256 pLegend.AddEntry(fhGenGamPt," #gamma","L");
2257 pLegend.AddEntry(fhGenEtaPt," #eta","L");
2258 pLegend.AddEntry(fhGenOmegaPt," #omega","L");
2259 pLegend.AddEntry(fhGenElePt," e^{#pm}","L");
9725fd2a 2260 pLegend.SetFillColor(10);
2261 pLegend.SetBorderSize(1);
2262 pLegend.Draw();
2263
2264 c10->cd(2) ;
2265 gPad->SetLogy();
2266 TH1F * haxiseta = (TH1F*) fhGenPi0Eta->Clone("axiseta");
2267 haxiseta->SetTitle("Generated Particles #eta, |#eta| < 1");
2268 fhGenPi0Eta->SetLineColor(1);
2269 fhGenGamEta->SetLineColor(4);
2270 fhGenEtaEta->SetLineColor(2);
2271 fhGenOmegaEta->SetLineColor(7);
2272 fhGenEleEta->SetLineColor(6);
2273 //Select the maximum of the histogram to show all lines.
2274 if(fhGenPi0Eta->GetMaximum() >= fhGenGamEta->GetMaximum() && fhGenPi0Eta->GetMaximum() >= fhGenEtaEta->GetMaximum() &&
2275 fhGenPi0Eta->GetMaximum() >= fhGenOmegaEta->GetMaximum() && fhGenPi0Eta->GetMaximum() >= fhGenEleEta->GetMaximum())
2276 haxiseta->SetMaximum(fhGenPi0Eta->GetMaximum());
2277 else if(fhGenGamEta->GetMaximum() >= fhGenPi0Eta->GetMaximum() && fhGenGamEta->GetMaximum() >= fhGenEtaEta->GetMaximum() &&
2278 fhGenGamEta->GetMaximum() >= fhGenOmegaEta->GetMaximum() && fhGenGamEta->GetMaximum() >= fhGenEleEta->GetMaximum())
2279 haxiseta->SetMaximum(fhGenGamEta->GetMaximum());
2280 else if(fhGenEtaEta->GetMaximum() >= fhGenPi0Eta->GetMaximum() && fhGenEtaEta->GetMaximum() >= fhGenGamEta->GetMaximum() &&
2281 fhGenEtaEta->GetMaximum() >= fhGenOmegaEta->GetMaximum() && fhGenEtaEta->GetMaximum() >= fhGenEleEta->GetMaximum())
2282 haxiseta->SetMaximum(fhGenEtaEta->GetMaximum());
2283 else if(fhGenOmegaEta->GetMaximum() >= fhGenPi0Eta->GetMaximum() && fhGenOmegaEta->GetMaximum() >= fhGenEtaEta->GetMaximum() &&
2284 fhGenOmegaEta->GetMaximum() >= fhGenGamEta->GetMaximum() && fhGenOmegaEta->GetMaximum() >= fhGenEleEta->GetMaximum())
2285 haxiseta->SetMaximum(fhGenOmegaEta->GetMaximum());
2286 else if(fhGenEleEta->GetMaximum() >= fhGenPi0Eta->GetMaximum() && fhGenEleEta->GetMaximum() >= fhGenEtaEta->GetMaximum() &&
2287 fhGenEleEta->GetMaximum() >= fhGenOmegaEta->GetMaximum() && fhGenEleEta->GetMaximum() >= fhGenGamEta->GetMaximum())
2288 haxiseta->SetMaximum(fhGenEleEta->GetMaximum());
06e5656a 2289 haxiseta->SetMinimum(100);
9725fd2a 2290 haxiseta->Draw("axis");
2291 fhGenPi0Eta->Draw("same");
2292 fhGenGamEta->Draw("same");
2293 fhGenEtaEta->Draw("same");
2294 fhGenOmegaEta->Draw("same");
2295 fhGenEleEta->Draw("same");
2296
2297
2298 c10->cd(3) ;
2299 gPad->SetLogy();
2300 TH1F * haxisphi = (TH1F*) fhGenPi0Phi->Clone("axisphi");
2301 haxisphi->SetTitle("Generated Particles #phi, |#eta| < 1");
2302 fhGenPi0Phi->SetLineColor(1);
2303 fhGenGamPhi->SetLineColor(4);
2304 fhGenEtaPhi->SetLineColor(2);
2305 fhGenOmegaPhi->SetLineColor(7);
2306 fhGenElePhi->SetLineColor(6);
2307 //Select the maximum of the histogram to show all lines.
2308 if(fhGenPi0Phi->GetMaximum() >= fhGenGamPhi->GetMaximum() && fhGenPi0Phi->GetMaximum() >= fhGenEtaPhi->GetMaximum() &&
2309 fhGenPi0Phi->GetMaximum() >= fhGenOmegaPhi->GetMaximum() && fhGenPi0Phi->GetMaximum() >= fhGenElePhi->GetMaximum())
2310 haxisphi->SetMaximum(fhGenPi0Phi->GetMaximum());
2311 else if(fhGenGamPhi->GetMaximum() >= fhGenPi0Phi->GetMaximum() && fhGenGamPhi->GetMaximum() >= fhGenEtaPhi->GetMaximum() &&
2312 fhGenGamPhi->GetMaximum() >= fhGenOmegaPhi->GetMaximum() && fhGenGamPhi->GetMaximum() >= fhGenElePhi->GetMaximum())
2313 haxisphi->SetMaximum(fhGenGamPhi->GetMaximum());
2314 else if(fhGenEtaPhi->GetMaximum() >= fhGenPi0Phi->GetMaximum() && fhGenEtaPhi->GetMaximum() >= fhGenGamPhi->GetMaximum() &&
2315 fhGenEtaPhi->GetMaximum() >= fhGenOmegaPhi->GetMaximum() && fhGenEtaPhi->GetMaximum() >= fhGenElePhi->GetMaximum())
2316 haxisphi->SetMaximum(fhGenEtaPhi->GetMaximum());
2317 else if(fhGenOmegaPhi->GetMaximum() >= fhGenPi0Phi->GetMaximum() && fhGenOmegaPhi->GetMaximum() >= fhGenEtaPhi->GetMaximum() &&
2318 fhGenOmegaPhi->GetMaximum() >= fhGenGamPhi->GetMaximum() && fhGenOmegaPhi->GetMaximum() >= fhGenElePhi->GetMaximum())
2319 haxisphi->SetMaximum(fhGenOmegaPhi->GetMaximum());
2320 else if(fhGenElePhi->GetMaximum() >= fhGenPi0Phi->GetMaximum() && fhGenElePhi->GetMaximum() >= fhGenEtaPhi->GetMaximum() &&
2321 fhGenElePhi->GetMaximum() >= fhGenOmegaPhi->GetMaximum() && fhGenElePhi->GetMaximum() >= fhGenGamPhi->GetMaximum())
2322 haxisphi->SetMaximum(fhGenElePhi->GetMaximum());
06e5656a 2323 haxisphi->SetMinimum(100);
9725fd2a 2324 haxisphi->Draw("axis");
2325 fhGenPi0Phi->Draw("same");
2326 fhGenGamPhi->Draw("same");
2327 fhGenEtaPhi->Draw("same");
2328 fhGenOmegaPhi->Draw("same");
2329 fhGenElePhi->Draw("same");
2330
2331 sprintf(name,"QA_%s_GeneratedDistributions.eps",fCalorimeter.Data());
8a587055 2332 c10->Print(name); printf("Plot: %s\n",name);
9725fd2a 2333
2334
2335 //Reconstructed clusters depending on its original particle.
2336 //printf("c1\n");
2337 sprintf(cname,"QA_%s_recgenid",fCalorimeter.Data());
2338 TCanvas * c11 = new TCanvas(cname, "Reconstructed particles, function of their original particle ID", 400, 400) ;
2339 c11->Divide(2, 2);
2340
2341
2342 c11->cd(1) ;
2343 gPad->SetLogy();
06e5656a 2344 TH1F * hGamE = (TH1F*) fhGamE->ProjectionX("hGamE",-1,-1);
2345 TH1F * hPi0E = (TH1F*) fhPi0E->ProjectionX("hPi0E",-1,-1);
2346 TH1F * hEleE = (TH1F*) fhEleE->ProjectionX("hEleE",-1,-1);
2347 TH1F * hNeHadE = (TH1F*) fhNeHadE->ProjectionX("hNeHadE",-1,-1);
2348 TH1F * hChHadE = (TH1F*) fhChHadE->ProjectionX("hChHadE",-1,-1);
9725fd2a 2349 TH1F * haxisE = (TH1F*) hPi0E->Clone("axisE");
2350 haxisE->SetTitle("Reconstructed particles E, function of their original particle ID");
2351 hPi0E->SetLineColor(1);
2352 hGamE->SetLineColor(4);
2353 hNeHadE->SetLineColor(2);
2354 hChHadE->SetLineColor(7);
2355 hEleE->SetLineColor(6);
2356
2357 //Select the maximum of the histogram to show all lines.
2358 if(hPi0E->GetMaximum() >= hGamE->GetMaximum() && hPi0E->GetMaximum() >= hNeHadE->GetMaximum() &&
2359 hPi0E->GetMaximum() >= hChHadE->GetMaximum() && hPi0E->GetMaximum() >= hEleE->GetMaximum())
2360 haxisE->SetMaximum(hPi0E->GetMaximum());
2361 else if(hGamE->GetMaximum() >= hPi0E->GetMaximum() && hGamE->GetMaximum() >= hNeHadE->GetMaximum() &&
2362 hGamE->GetMaximum() >= hChHadE->GetMaximum() && hGamE->GetMaximum() >= hEleE->GetMaximum())
2363 haxisE->SetMaximum(hGamE->GetMaximum());
2364 else if(hNeHadE->GetMaximum() >= hPi0E->GetMaximum() && hNeHadE->GetMaximum() >= hGamE->GetMaximum() &&
2365 hNeHadE->GetMaximum() >= hChHadE->GetMaximum() && hNeHadE->GetMaximum() >= hEleE->GetMaximum())
2366 haxisE->SetMaximum(hNeHadE->GetMaximum());
2367 else if(hChHadE->GetMaximum() >= hPi0E->GetMaximum() && hChHadE->GetMaximum() >= hNeHadE->GetMaximum() &&
2368 hChHadE->GetMaximum() >= hGamE->GetMaximum() && hChHadE->GetMaximum() >= hEleE->GetMaximum())
2369 haxisE->SetMaximum(hChHadE->GetMaximum());
2370 else if(hEleE->GetMaximum() >= hPi0E->GetMaximum() && hEleE->GetMaximum() >= hNeHadE->GetMaximum() &&
2371 hEleE->GetMaximum() >= hChHadE->GetMaximum() && hEleE->GetMaximum() >= hGamE->GetMaximum())
2372 haxisE->SetMaximum(hEleE->GetMaximum());
06e5656a 2373 haxisE->SetXTitle("E (GeV)");
2374 haxisE->SetMinimum(1);
9725fd2a 2375 haxisE->Draw("axis");
2376 hPi0E->Draw("same");
2377 hGamE->Draw("same");
2378 hNeHadE->Draw("same");
2379 hChHadE->Draw("same");
2380 hEleE->Draw("same");
2381
06e5656a 2382 TLegend pLegend2(0.8,0.65,0.95,0.93);
9725fd2a 2383 pLegend2.SetTextSize(0.06);
06e5656a 2384 pLegend2.AddEntry(hPi0E," #pi^{0}","L");
2385 pLegend2.AddEntry(hGamE," #gamma","L");
2386 pLegend2.AddEntry(hEleE," e^{#pm}","L");
2387 pLegend2.AddEntry(hChHadE," h^{#pm}","L");
2388 pLegend2.AddEntry(hNeHadE," h^{0}","L");
9725fd2a 2389 pLegend2.SetFillColor(10);
2390 pLegend2.SetBorderSize(1);
2391 pLegend2.Draw();
2392
2393
2394 c11->cd(2) ;
2395 gPad->SetLogy();
2396 //printf("%s, %s, %s, %s, %s\n",fhGamPt->GetName(),fhPi0Pt->GetName(),fhElePt->GetName(),fhNeHadPt->GetName(), fhChHadPt->GetName());
06e5656a 2397 TH1F * hGamPt = (TH1F*) fhGamPt->ProjectionX("hGamPt",-1,-1);
2398 TH1F * hPi0Pt = (TH1F*) fhPi0Pt->ProjectionX("hPi0Pt",-1,-1);
2399 TH1F * hElePt = (TH1F*) fhElePt->ProjectionX("hElePt",-1,-1);
2400 TH1F * hNeHadPt = (TH1F*) fhNeHadPt->ProjectionX("hNeHadPt",-1,-1);
2401 TH1F * hChHadPt = (TH1F*) fhChHadPt->ProjectionX("hChHadPt",-1,-1);
9725fd2a 2402 haxispt = (TH1F*) hPi0Pt->Clone("axispt");
2403 haxispt->SetTitle("Reconstructed particles p_{T}, function of their original particle ID");
2404 hPi0Pt->SetLineColor(1);
2405 hGamPt->SetLineColor(4);
2406 hNeHadPt->SetLineColor(2);
2407 hChHadPt->SetLineColor(7);
2408 hElePt->SetLineColor(6);
2409
2410 //Select the maximum of the histogram to show all lines.
2411 if(hPi0Pt->GetMaximum() >= hGamPt->GetMaximum() && hPi0Pt->GetMaximum() >= hNeHadPt->GetMaximum() &&
2412 hPi0Pt->GetMaximum() >= hChHadPt->GetMaximum() && hPi0Pt->GetMaximum() >= hElePt->GetMaximum())
2413 haxispt->SetMaximum(hPi0Pt->GetMaximum());
2414 else if(hGamPt->GetMaximum() >= hPi0Pt->GetMaximum() && hGamPt->GetMaximum() >= hNeHadPt->GetMaximum() &&
2415 hGamPt->GetMaximum() >= hChHadPt->GetMaximum() && hGamPt->GetMaximum() >= hElePt->GetMaximum())
2416 haxispt->SetMaximum(hGamPt->GetMaximum());
2417 else if(hNeHadPt->GetMaximum() >= hPi0Pt->GetMaximum() && hNeHadPt->GetMaximum() >= hGamPt->GetMaximum() &&
2418 hNeHadPt->GetMaximum() >= hChHadPt->GetMaximum() && hNeHadPt->GetMaximum() >= hElePt->GetMaximum())
2419 haxispt->SetMaximum(hNeHadPt->GetMaximum());
2420 else if(hChHadPt->GetMaximum() >= hPi0Pt->GetMaximum() && hChHadPt->GetMaximum() >= hNeHadPt->GetMaximum() &&
2421 hChHadPt->GetMaximum() >= hGamPt->GetMaximum() && hChHadPt->GetMaximum() >= hElePt->GetMaximum())
2422 haxispt->SetMaximum(hChHadPt->GetMaximum());
2423 else if(hElePt->GetMaximum() >= hPi0Pt->GetMaximum() && hElePt->GetMaximum() >= hNeHadPt->GetMaximum() &&
2424 hElePt->GetMaximum() >= hChHadPt->GetMaximum() && hElePt->GetMaximum() >= hGamPt->GetMaximum())
2425 haxispt->SetMaximum(hElePt->GetMaximum());
06e5656a 2426 haxispt->SetXTitle("p_{T} (GeV/c)");
2427 haxispt->SetMinimum(1);
9725fd2a 2428 haxispt->Draw("axis");
2429 hPi0Pt->Draw("same");
2430 hGamPt->Draw("same");
2431 hNeHadPt->Draw("same");
2432 hChHadPt->Draw("same");
06e5656a 2433 hElePt->Draw("same");
9725fd2a 2434
2435
2436 c11->cd(3) ;
2437 gPad->SetLogy();
06e5656a 2438
2439 TH1F * hGamEta = (TH1F*) fhGamEta->ProjectionX("hGamEta",-1,-1);
2440 TH1F * hPi0Eta = (TH1F*) fhPi0Eta->ProjectionX("hPi0Eta",-1,-1);
2441 TH1F * hEleEta = (TH1F*) fhEleEta->ProjectionX("hEleEta",-1,-1);
2442 TH1F * hNeHadEta = (TH1F*) fhNeHadEta->ProjectionX("hNeHadEta",-1,-1);
2443 TH1F * hChHadEta = (TH1F*) fhChHadEta->ProjectionX("hChHadEta",-1,-1);
9725fd2a 2444 haxiseta = (TH1F*) hPi0Eta->Clone("axiseta");
2445 haxiseta->SetTitle("Reconstructed particles #eta, function of their original particle ID");
2446 hPi0Eta->SetLineColor(1);
2447 hGamEta->SetLineColor(4);
2448 hNeHadEta->SetLineColor(2);
2449 hChHadEta->SetLineColor(7);
2450 hEleEta->SetLineColor(6);
2451 //Select the maximum of the histogram to show all lines.
2452 if(hPi0Eta->GetMaximum() >= hGamEta->GetMaximum() && hPi0Eta->GetMaximum() >= hNeHadEta->GetMaximum() &&
2453 hPi0Eta->GetMaximum() >= hChHadEta->GetMaximum() && hPi0Eta->GetMaximum() >= hEleEta->GetMaximum())
2454 haxiseta->SetMaximum(hPi0Eta->GetMaximum());
2455 else if(hGamEta->GetMaximum() >= hPi0Eta->GetMaximum() && hGamEta->GetMaximum() >= hNeHadEta->GetMaximum() &&
2456 hGamEta->GetMaximum() >= hChHadEta->GetMaximum() && hGamEta->GetMaximum() >= hEleEta->GetMaximum())
2457 haxiseta->SetMaximum(hGamEta->GetMaximum());
2458 else if(hNeHadEta->GetMaximum() >= hPi0Eta->GetMaximum() && hNeHadEta->GetMaximum() >= hGamEta->GetMaximum() &&
2459 hNeHadEta->GetMaximum() >= hChHadEta->GetMaximum() && hNeHadEta->GetMaximum() >= hEleEta->GetMaximum())
2460 haxiseta->SetMaximum(hNeHadEta->GetMaximum());
2461 else if(hChHadEta->GetMaximum() >= hPi0Eta->GetMaximum() && hChHadEta->GetMaximum() >= hNeHadEta->GetMaximum() &&
2462 hChHadEta->GetMaximum() >= hGamEta->GetMaximum() && hChHadEta->GetMaximum() >= hEleEta->GetMaximum())
2463 haxiseta->SetMaximum(hChHadEta->GetMaximum());
2464 else if(hEleEta->GetMaximum() >= hPi0Eta->GetMaximum() && hEleEta->GetMaximum() >= hNeHadEta->GetMaximum() &&
2465 hEleEta->GetMaximum() >= hChHadEta->GetMaximum() && hEleEta->GetMaximum() >= hGamEta->GetMaximum())
2466 haxiseta->SetMaximum(hEleEta->GetMaximum());
2467
06e5656a 2468 haxiseta->SetXTitle("#eta");
9725fd2a 2469 haxiseta->Draw("axis");
2470 hPi0Eta->Draw("same");
2471 hGamEta->Draw("same");
2472 hNeHadEta->Draw("same");
2473 hChHadEta->Draw("same");
2474 hEleEta->Draw("same");
2475
2476
2477 c11->cd(4) ;
2478 gPad->SetLogy();
06e5656a 2479 TH1F * hGamPhi = (TH1F*) fhGamPhi->ProjectionX("hGamPhi",-1,-1);
2480 TH1F * hPi0Phi = (TH1F*) fhPi0Phi->ProjectionX("hPi0Phi",-1,-1);
2481 TH1F * hElePhi = (TH1F*) fhElePhi->ProjectionX("hElePhi",-1,-1);
2482 TH1F * hNeHadPhi = (TH1F*) fhNeHadPhi->ProjectionX("hNeHadPhi",-1,-1);
2483 TH1F * hChHadPhi = (TH1F*) fhChHadPhi->ProjectionX("hChHadPhi",-1,-1);
9725fd2a 2484 haxisphi = (TH1F*) hPi0Phi->Clone("axisphi");
2485 haxisphi->SetTitle("Reconstructed particles #phi, function of their original particle ID");
06e5656a 2486
9725fd2a 2487 hPi0Phi->SetLineColor(1);
2488 hGamPhi->SetLineColor(4);
2489 hNeHadPhi->SetLineColor(2);
2490 hChHadPhi->SetLineColor(7);
2491 hElePhi->SetLineColor(6);
2492 //Select the maximum of the histogram to show all lines.
2493 if(hPi0Phi->GetMaximum() >= hGamPhi->GetMaximum() && hPi0Phi->GetMaximum() >= hNeHadPhi->GetMaximum() &&
2494 hPi0Phi->GetMaximum() >= hChHadPhi->GetMaximum() && hPi0Phi->GetMaximum() >= hElePhi->GetMaximum())
2495 haxisphi->SetMaximum(hPi0Phi->GetMaximum());
2496 else if(hGamPhi->GetMaximum() >= hPi0Phi->GetMaximum() && hGamPhi->GetMaximum() >= hNeHadPhi->GetMaximum() &&
2497 hGamPhi->GetMaximum() >= hChHadPhi->GetMaximum() && hGamPhi->GetMaximum() >= hElePhi->GetMaximum())
2498 haxisphi->SetMaximum(hGamPhi->GetMaximum());
2499 else if(hNeHadPhi->GetMaximum() >= hPi0Phi->GetMaximum() && hNeHadPhi->GetMaximum() >= hGamPhi->GetMaximum() &&
2500 hNeHadPhi->GetMaximum() >= hChHadPhi->GetMaximum() && hNeHadPhi->GetMaximum() >= hElePhi->GetMaximum())
2501 haxisphi->SetMaximum(hNeHadPhi->GetMaximum());
2502 else if(hChHadPhi->GetMaximum() >= hPi0Phi->GetMaximum() && hChHadPhi->GetMaximum() >= hNeHadPhi->GetMaximum() &&
2503 hChHadPhi->GetMaximum() >= hGamPhi->GetMaximum() && hChHadPhi->GetMaximum() >= hElePhi->GetMaximum())
2504 haxisphi->SetMaximum(hChHadPhi->GetMaximum());
2505 else if(hElePhi->GetMaximum() >= hPi0Phi->GetMaximum() && hElePhi->GetMaximum() >= hNeHadPhi->GetMaximum() &&
2506 hElePhi->GetMaximum() >= hChHadPhi->GetMaximum() && hElePhi->GetMaximum() >= hGamPhi->GetMaximum())
2507 haxisphi->SetMaximum(hElePhi->GetMaximum());
06e5656a 2508 haxisphi->SetXTitle("#phi (rad)");
9725fd2a 2509 haxisphi->Draw("axis");
2510 hPi0Phi->Draw("same");
2511 hGamPhi->Draw("same");
2512 hNeHadPhi->Draw("same");
2513 hChHadPhi->Draw("same");
2514 hElePhi->Draw("same");
2515
2516 sprintf(name,"QA_%s_RecDistributionsGenID.eps",fCalorimeter.Data());
8a587055 2517 c11->Print(name); printf("Plot: %s\n",name);
9725fd2a 2518
2519
2520 //Ratio reconstructed clusters / generated particles in acceptance, for different particle ID
06e5656a 2521 //printf("c1\n");
9725fd2a 2522
2523 TH1F * hPi0EClone = (TH1F*) hPi0E ->Clone("hPi0EClone");
2524 TH1F * hGamEClone = (TH1F*) hGamE ->Clone("hGamEClone");
2525 TH1F * hPi0PtClone = (TH1F*) hPi0Pt ->Clone("hPi0PtClone");
2526 TH1F * hGamPtClone = (TH1F*) hGamPt ->Clone("hGamPtClone");
2527 TH1F * hPi0EtaClone = (TH1F*) hPi0Eta->Clone("hPi0EtaClone");
2528 TH1F * hGamEtaClone = (TH1F*) hGamEta->Clone("hGamEtaClone");
2529 TH1F * hPi0PhiClone = (TH1F*) hPi0Phi->Clone("hPi0PhiClone");
06e5656a 2530 TH1F * hGamPhiClone = (TH1F*) hGamPhi->Clone("hGamPhiClone");
2531
9725fd2a 2532 sprintf(cname,"QA_%s_recgenidratio",fCalorimeter.Data());
2533 TCanvas * c12 = new TCanvas(cname, "Ratio reconstructed clusters / generated particles in acceptance, for different particle ID", 400, 400) ;
2534 c12->Divide(2, 2);
2535
2536 c12->cd(1) ;
2537 gPad->SetLogy();
2538 haxisE->SetTitle("Ratio reconstructed clusters / generated particles in acceptance, for different particle ID");
2539 hPi0EClone->Divide(fhGenPi0AccE);
2540 hGamEClone->Divide(fhGenGamAccE);
06e5656a 2541 haxisE->SetMaximum(5);
2542 haxisE->SetMinimum(1e-2);
2543 haxisE->SetXTitle("E (GeV)");
9725fd2a 2544 haxisE->SetYTitle("ratio = rec/gen");
2545 haxisE->Draw("axis");
06e5656a 2546 hPi0E->Draw("same");
2547 hGamE->Draw("same");
9725fd2a 2548
06e5656a 2549 TLegend pLegend3(0.75,0.2,0.9,0.4);
9725fd2a 2550 pLegend3.SetTextSize(0.06);
06e5656a 2551 pLegend3.AddEntry(hPi0EClone," #pi^{0}","L");
2552 pLegend3.AddEntry(hGamEClone," #gamma","L");
9725fd2a 2553 pLegend3.SetFillColor(10);
2554 pLegend3.SetBorderSize(1);
2555 pLegend3.Draw();
2556
2557 c12->cd(2) ;
2558 gPad->SetLogy();
2559 haxispt->SetTitle("Ratio reconstructed clusters / generated particles in acceptance, for different particle ID");
2560 hPi0PtClone->Divide(fhGenPi0AccPt);
2561 hGamPtClone->Divide(fhGenGamAccPt);
06e5656a 2562 haxispt->SetMaximum(5);
2563 haxispt->SetMinimum(1e-2);
2564 haxispt->SetXTitle("p_{T} (GeV/c)");
9725fd2a 2565 haxispt->SetYTitle("ratio = rec/gen");
2566 haxispt->Draw("axis");
9725fd2a 2567 hPi0PtClone->Draw("same");
2568 hGamPtClone->Draw("same");
2569
2570 c12->cd(3) ;
2571 gPad->SetLogy();
2572
2573 haxiseta->SetTitle("Ratio reconstructed clusters / generated particles in acceptance, for different particle ID");
2574 hPi0EtaClone->Divide(fhGenPi0AccEta);
2575 hGamEtaClone->Divide(fhGenGamAccEta);
2576 haxiseta->SetMaximum(1.2);
06e5656a 2577 haxiseta->SetMinimum(1e-2);
9725fd2a 2578 haxiseta->SetYTitle("ratio = rec/gen");
06e5656a 2579 haxiseta->SetXTitle("#eta");
9725fd2a 2580 haxiseta->Draw("axis");
9725fd2a 2581 hPi0EtaClone->Draw("same");
2582 hGamEtaClone->Draw("same");
2583
2584
2585 c12->cd(4) ;
2586 gPad->SetLogy();
2587 haxisphi->SetTitle("Ratio reconstructed clusters / generated particles in acceptance, for different particle ID");
2588 hPi0PhiClone->Divide(fhGenPi0AccPhi);
2589 hGamPhiClone->Divide(fhGenGamAccPhi);
06e5656a 2590 haxisphi->SetYTitle("ratio = rec/gen");
2591 haxisphi->SetXTitle("#phi (rad)");
9725fd2a 2592 haxisphi->SetMaximum(1.2);
06e5656a 2593 haxisphi->SetMinimum(1e-2);
9725fd2a 2594 haxisphi->Draw("axis");
9725fd2a 2595 hPi0PhiClone->Draw("same");
2596 hGamPhiClone->Draw("same");
2597
9725fd2a 2598 sprintf(name,"QA_%s_EfficiencyGenID.eps",fCalorimeter.Data());
8a587055 2599 c12->Print(name); printf("Plot: %s\n",name);
2600
9725fd2a 2601
2602
2603 //Reconstructed distributions
2604 //printf("c1\n");
2605 sprintf(cname,"QA_%s_vertex",fCalorimeter.Data());
2606 TCanvas * c13 = new TCanvas(cname, "Particle vertex", 400, 400) ;
2607 c13->Divide(2, 2);
2608
2609 c13->cd(1) ;
2610 //gPad->SetLogy();
06e5656a 2611 fhEMVxyz->SetTitleOffset(1.6,"Y");
2612 fhEMVxyz->Draw();
9725fd2a 2613
2614 c13->cd(2) ;
2615 //gPad->SetLogy();
06e5656a 2616 fhHaVxyz->SetTitleOffset(1.6,"Y");
9725fd2a 2617 fhHaVxyz->Draw();
2618
2619 c13->cd(3) ;
2620 gPad->SetLogy();
2621 TH1F * hEMR = (TH1F*) fhEMR->ProjectionY("hEM",-1,-1);
2622 hEMR->SetLineColor(4);
2623 hEMR->Draw();
2624
2625 c13->cd(4) ;
2626 gPad->SetLogy();
2627 TH1F * hHaR = (TH1F*) fhHaR->ProjectionY("hHa",-1,-1);
2628 hHaR->SetLineColor(4);
2629 hHaR->Draw();
2630
2631
2632 sprintf(name,"QA_%s_ParticleVertex.eps",fCalorimeter.Data());
8a587055 2633 c13->Print(name); printf("Plot: %s\n",name);
9725fd2a 2634
2635
06e5656a 2636 //Track-matching distributions
8a587055 2637
06e5656a 2638 //Reconstructed distributions, matched with tracks, generated particle dependence
2639 //printf("c2\n");
2640 sprintf(cname,"QA_%s_rectrackmatchGenID",fCalorimeter.Data());
2641 TCanvas * c22ch = new TCanvas(cname, "Reconstructed distributions, matched with tracks, for different particle ID", 400, 400) ;
2642 c22ch->Divide(2, 2);
2643
2644 c22ch->cd(1) ;
2645
2646 TH1F * hGamECharged = (TH1F*) fhGamECharged->ProjectionX("hGamECharged",-1,-1);
2647 TH1F * hPi0ECharged = (TH1F*) fhPi0ECharged->ProjectionX("hPi0ECharged",-1,-1);
2648 TH1F * hEleECharged = (TH1F*) fhEleECharged->ProjectionX("hEleECharged",-1,-1);
2649 TH1F * hNeHadECharged = (TH1F*) fhNeHadECharged->ProjectionX("hNeHadECharged",-1,-1);
2650 TH1F * hChHadECharged = (TH1F*) fhChHadECharged->ProjectionX("hChHadECharged",-1,-1);
2651 hPi0ECharged->SetLineColor(1);
2652 hGamECharged->SetLineColor(4);
2653 hNeHadECharged->SetLineColor(2);
2654 hChHadECharged->SetLineColor(7);
2655 hEleECharged->SetLineColor(6);
2656 gPad->SetLogy();
2657 fhECharged->SetLineColor(3);
2658 fhECharged->SetMinimum(0.5);
2659 fhECharged->Draw();
2660 hPi0ECharged->Draw("same");
2661 hGamECharged->Draw("same");
2662 hNeHadECharged->Draw("same");
2663 hChHadECharged->Draw("same");
2664 hEleECharged->Draw("same");
2665 TLegend pLegend22(0.75,0.45,0.9,0.8);
2666 pLegend22.SetTextSize(0.06);
2667 pLegend22.AddEntry(fhECharged,"all","L");
2668 pLegend22.AddEntry(hPi0ECharged,"#pi^{0}","L");
2669 pLegend22.AddEntry(hGamECharged,"#gamma","L");
2670 pLegend22.AddEntry(hEleECharged,"e^{#pm}","L");
2671 pLegend22.AddEntry(hChHadECharged,"h^{#pm}","L");
2672 pLegend22.AddEntry(hNeHadECharged,"h^{0}","L");
2673 pLegend22.SetFillColor(10);
2674 pLegend22.SetBorderSize(1);
2675 pLegend22.Draw();
2676
2677 c22ch->cd(2) ;
2678
2679 TH1F * hGamPtCharged = (TH1F*) fhGamPtCharged->ProjectionX("hGamPtCharged",-1,-1);
2680 TH1F * hPi0PtCharged = (TH1F*) fhPi0PtCharged->ProjectionX("hPi0PtCharged",-1,-1);
2681 TH1F * hElePtCharged = (TH1F*) fhElePtCharged->ProjectionX("hElePtCharged",-1,-1);
2682 TH1F * hNeHadPtCharged = (TH1F*) fhNeHadPtCharged->ProjectionX("hNeHadPtCharged",-1,-1);
2683 TH1F * hChHadPtCharged = (TH1F*) fhChHadPtCharged->ProjectionX("hChHadPtCharged",-1,-1);
2684 hPi0PtCharged->SetLineColor(1);
2685 hGamPtCharged->SetLineColor(4);
2686 hNeHadPtCharged->SetLineColor(2);
2687 hChHadPtCharged->SetLineColor(7);
2688 hElePtCharged->SetLineColor(6);
2689 gPad->SetLogy();
2690 fhPtCharged->SetLineColor(3);
2691 fhPtCharged->SetMinimum(0.5);
2692 fhPtCharged->Draw();
2693 hPi0PtCharged->Draw("same");
2694 hGamPtCharged->Draw("same");
2695 hNeHadPtCharged->Draw("same");
2696 hChHadPtCharged->Draw("same");
2697 hElePtCharged->Draw("same");
2698
2699 c22ch->cd(4) ;
2700
2701 TH1F * hGamEtaCharged = (TH1F*) fhGamEtaCharged->ProjectionX("hGamEtaCharged",-1,-1);
2702 TH1F * hPi0EtaCharged = (TH1F*) fhPi0EtaCharged->ProjectionX("hPi0EtaCharged",-1,-1);
2703 TH1F * hEleEtaCharged = (TH1F*) fhEleEtaCharged->ProjectionX("hEleEtaCharged",-1,-1);
2704 TH1F * hNeHadEtaCharged = (TH1F*) fhNeHadEtaCharged->ProjectionX("hNeHadEtaCharged",-1,-1);
2705 TH1F * hChHadEtaCharged = (TH1F*) fhChHadEtaCharged->ProjectionX("hChHadEtaCharged",-1,-1);
2706 hPi0EtaCharged->SetLineColor(1);
2707 hGamEtaCharged->SetLineColor(4);
2708 hNeHadEtaCharged->SetLineColor(2);
2709 hChHadEtaCharged->SetLineColor(7);
2710 hEleEtaCharged->SetLineColor(6);
2711 gPad->SetLogy();
2712 fhEtaCharged->SetLineColor(3);
2713 fhEtaCharged->SetMinimum(0.5);
2714 fhEtaCharged->Draw();
2715 hPi0EtaCharged->Draw("same");
2716 hGamEtaCharged->Draw("same");
2717 hNeHadEtaCharged->Draw("same");
2718 hChHadEtaCharged->Draw("same");
2719 hEleEtaCharged->Draw("same");
2720
2721 c22ch->cd(3) ;
2722
2723 TH1F * hGamPhiCharged = (TH1F*) fhGamPhiCharged->ProjectionX("hGamPhiCharged",-1,-1);
2724 TH1F * hPi0PhiCharged = (TH1F*) fhPi0PhiCharged->ProjectionX("hPi0PhiCharged",-1,-1);
2725 TH1F * hElePhiCharged = (TH1F*) fhElePhiCharged->ProjectionX("hElePhiCharged",-1,-1);
2726 TH1F * hNeHadPhiCharged = (TH1F*) fhNeHadPhiCharged->ProjectionX("hNeHadPhiCharged",-1,-1);
2727 TH1F * hChHadPhiCharged = (TH1F*) fhChHadPhiCharged->ProjectionX("hChHadPhiCharged",-1,-1);
2728 hPi0PhiCharged->SetLineColor(1);
2729 hGamPhiCharged->SetLineColor(4);
2730 hNeHadPhiCharged->SetLineColor(2);
2731 hChHadPhiCharged->SetLineColor(7);
2732 hElePhiCharged->SetLineColor(6);
2733 gPad->SetLogy();
2734 fhPhiCharged->SetLineColor(3);
2735 fhPhiCharged->SetMinimum(0.5);
2736 fhPhiCharged->Draw();
2737 hPi0PhiCharged->Draw("same");
2738 hGamPhiCharged->Draw("same");
2739 hNeHadPhiCharged->Draw("same");
2740 hChHadPhiCharged->Draw("same");
2741 hElePhiCharged->Draw("same");
2742
2743
2744 sprintf(name,"QA_%s_ReconstructedDistributions_TrackMatchedGenID.eps",fCalorimeter.Data());
8a587055 2745 c22ch->Print(name); printf("Plot: %s\n",name);
06e5656a 2746
2747 TH1F * hGamEChargedClone = (TH1F*) hGamECharged->Clone("GamEChargedClone");
2748 TH1F * hGamPtChargedClone = (TH1F*) hGamPtCharged->Clone("GamPtChargedClone");
2749 TH1F * hGamEtaChargedClone = (TH1F*) hGamEtaCharged->Clone("GamEtaChargedClone");
2750 TH1F * hGamPhiChargedClone = (TH1F*) hGamPhiCharged->Clone("GamPhiChargedClone");
2751
2752 TH1F * hPi0EChargedClone = (TH1F*) hPi0ECharged->Clone("Pi0EChargedClone");
2753 TH1F * hPi0PtChargedClone = (TH1F*) hPi0PtCharged->Clone("Pi0PtChargedClone");
2754 TH1F * hPi0EtaChargedClone = (TH1F*) hPi0EtaCharged->Clone("Pi0EtaChargedClone");
2755 TH1F * hPi0PhiChargedClone = (TH1F*) hPi0PhiCharged->Clone("Pi0PhiChargedClone");
2756
2757 TH1F * hEleEChargedClone = (TH1F*) hEleECharged->Clone("EleEChargedClone");
2758 TH1F * hElePtChargedClone = (TH1F*) hElePtCharged->Clone("ElePtChargedClone");
2759 TH1F * hEleEtaChargedClone = (TH1F*) hEleEtaCharged->Clone("EleEtaChargedClone");
2760 TH1F * hElePhiChargedClone = (TH1F*) hElePhiCharged->Clone("ElePhiChargedClone");
2761
2762 TH1F * hNeHadEChargedClone = (TH1F*) hNeHadECharged->Clone("NeHadEChargedClone");
2763 TH1F * hNeHadPtChargedClone = (TH1F*) hNeHadPtCharged->Clone("NeHadPtChargedClone");
2764 TH1F * hNeHadEtaChargedClone = (TH1F*) hNeHadEtaCharged->Clone("NeHadEtaChargedClone");
2765 TH1F * hNeHadPhiChargedClone = (TH1F*) hNeHadPhiCharged->Clone("NeHadPhiChargedClone");
2766
2767 TH1F * hChHadEChargedClone = (TH1F*) hChHadECharged->Clone("ChHadEChargedClone");
2768 TH1F * hChHadPtChargedClone = (TH1F*) hChHadPtCharged->Clone("ChHadPtChargedClone");
2769 TH1F * hChHadEtaChargedClone = (TH1F*) hChHadEtaCharged->Clone("ChHadEtaChargedClone");
2770 TH1F * hChHadPhiChargedClone = (TH1F*) hChHadPhiCharged->Clone("ChHadPhiChargedClone");
2771
2772 //Ratio: reconstructed track matched/ all reconstructed
2773 //printf("c3\n");
2774 sprintf(cname,"QA_%s_rectrackmatchratGenID",fCalorimeter.Data());
2775 TCanvas * c3ch = new TCanvas(cname, "Ratio: reconstructed track matched/ all reconstructed, for different particle ID", 400, 400) ;
2776 c3ch->Divide(2, 2);
2777
2778 c3ch->cd(1) ;
2779 hEChargedClone->SetMaximum(1.2);
2780 hEChargedClone->SetMinimum(0.001);
2781 hEChargedClone->SetLineColor(3);
2782 hEChargedClone->SetYTitle("track matched / all");
2783 hPi0EChargedClone->Divide(hPi0E);
2784 hGamEChargedClone->Divide(hGamE);
2785 hEleEChargedClone->Divide(hEleE);
2786 hNeHadEChargedClone->Divide(hNeHadE);
2787 hChHadEChargedClone->Divide(hChHadE);
2788 hEChargedClone->Draw();
2789 hPi0EChargedClone->Draw("same");
2790 hGamEChargedClone->Draw("same");
2791 hEleEChargedClone->Draw("same");
2792 hNeHadEChargedClone->Draw("same");
2793 hChHadEChargedClone->Draw("same");
2794
2795 TLegend pLegend3ch(0.75,0.45,0.9,0.8);
2796 pLegend3ch.SetTextSize(0.06);
2797 pLegend3ch.AddEntry(hEChargedClone,"all","L");
2798 pLegend3ch.AddEntry(hPi0EChargedClone,"#pi^{0}","L");
2799 pLegend3ch.AddEntry(hGamEChargedClone,"#gamma","L");
2800 pLegend3ch.AddEntry(hEleEChargedClone,"e^{#pm}","L");
2801 pLegend3ch.AddEntry(hChHadEChargedClone,"h^{#pm}","L");
2802 pLegend3ch.AddEntry(hNeHadEChargedClone,"h^{0}","L");
2803 pLegend3ch.SetFillColor(10);
2804 pLegend3ch.SetBorderSize(1);
2805 pLegend3ch.Draw();
2806
2807 c3ch->cd(2) ;
2808 hPtChargedClone->SetMaximum(1.2);
2809 hPtChargedClone->SetMinimum(0.001);
2810 hPtChargedClone->SetLineColor(3);
2811 hPtChargedClone->SetYTitle("track matched / all");
2812 hPi0PtChargedClone->Divide(hPi0Pt);
2813 hGamPtChargedClone->Divide(hGamPt);
2814 hElePtChargedClone->Divide(hElePt);
2815 hNeHadPtChargedClone->Divide(hNeHadPt);
2816 hChHadPtChargedClone->Divide(hChHadPt);
2817 hPtChargedClone->Draw();
2818 hPi0PtChargedClone->Draw("same");
2819 hGamPtChargedClone->Draw("same");
2820 hElePtChargedClone->Draw("same");
2821 hNeHadPtChargedClone->Draw("same");
2822 hChHadPtChargedClone->Draw("same");
2823
2824 c3ch->cd(4) ;
2825 hEtaChargedClone->SetMaximum(1.2);
2826 hEtaChargedClone->SetMinimum(0.001);
2827 hEtaChargedClone->SetLineColor(3);
2828 hEtaChargedClone->SetYTitle("track matched / all");
2829 hPi0EtaChargedClone->Divide(hPi0Eta);
2830 hGamEtaChargedClone->Divide(hGamEta);
2831 hEleEtaChargedClone->Divide(hEleEta);
2832 hNeHadEtaChargedClone->Divide(hNeHadEta);
2833 hChHadEtaChargedClone->Divide(hChHadEta);
2834 hEtaChargedClone->Draw();
2835 hPi0EtaChargedClone->Draw("same");
2836 hGamEtaChargedClone->Draw("same");
2837 hEleEtaChargedClone->Draw("same");
2838 hNeHadEtaChargedClone->Draw("same");
2839 hChHadEtaChargedClone->Draw("same");
2840
2841 c3ch->cd(3) ;
2842 hPhiChargedClone->SetMaximum(1.2);
2843 hPhiChargedClone->SetMinimum(0.001);
2844 hPhiChargedClone->SetLineColor(3);
2845 hPhiChargedClone->SetYTitle("track matched / all");
2846 hPi0PhiChargedClone->Divide(hPi0Phi);
2847 hGamPhiChargedClone->Divide(hGamPhi);
2848 hElePhiChargedClone->Divide(hElePhi);
2849 hNeHadPhiChargedClone->Divide(hNeHadPhi);
2850 hChHadPhiChargedClone->Divide(hChHadPhi);
2851 hPhiChargedClone->Draw();
2852 hPi0PhiChargedClone->Draw("same");
2853 hGamPhiChargedClone->Draw("same");
2854 hElePhiChargedClone->Draw("same");
2855 hNeHadPhiChargedClone->Draw("same");
2856 hChHadPhiChargedClone->Draw("same");
2857
2858 sprintf(name,"QA_%s_RatioReconstructedMatchedDistributionsGenID.eps",fCalorimeter.Data());
8a587055 2859 c3ch->Print(name); printf("Plot: %s\n",name);
06e5656a 2860
8a587055 2861 }
9725fd2a 2862 //Track-matching distributions
2863 if(!strcmp(GetReader()->GetInputEvent()->GetName(),"AliESDEvent")){
06e5656a 2864
2865
9725fd2a 2866 sprintf(cname,"QA_%s_trkmatch",fCalorimeter.Data());
2867 TCanvas *cme = new TCanvas(cname,"Track-matching distributions", 400, 400);
2868 cme->Divide(2,2);
2869
06e5656a 2870 TLegend pLegendpE0(0.6,0.55,0.9,0.8);
2871 pLegendpE0.SetTextSize(0.04);
2872 pLegendpE0.AddEntry(fh1pOverE,"all","L");
2873 pLegendpE0.AddEntry(fh1pOverER02,"dR < 0.02","L");
2874 pLegendpE0.SetFillColor(10);
2875 pLegendpE0.SetBorderSize(1);
2876 //pLegendpE0.Draw();
2877
9725fd2a 2878 cme->cd(1);
8a587055 2879 if(fh1pOverE->GetEntries() > 0) gPad->SetLogy();
06e5656a 2880 fh1pOverE->SetTitle("Track matches p/E");
9725fd2a 2881 fh1pOverE->Draw();
06e5656a 2882 fh1pOverER02->SetLineColor(4);
2883 fh1pOverER02->Draw("same");
2884 pLegendpE0.Draw();
9725fd2a 2885
2886 cme->cd(2);
8a587055 2887 if(fh1dR->GetEntries() > 0) gPad->SetLogy();
9725fd2a 2888 fh1dR->Draw();
2889
2890 cme->cd(3);
2891 fh2MatchdEdx->Draw();
2892
2893 cme->cd(4);
2894 fh2EledEdx->Draw();
2895
2896 sprintf(name,"QA_%s_TrackMatchingEleDist.eps",fCalorimeter.Data());
8a587055 2897 cme->Print(name); printf("Plot: %s\n",name);
06e5656a 2898
8a587055 2899 if(IsDataMC()){
06e5656a 2900 sprintf(cname,"QA_%s_trkmatchMCEle",fCalorimeter.Data());
2901 TCanvas *cmemc = new TCanvas(cname,"Track-matching distributions from MC electrons", 600, 200);
2902 cmemc->Divide(3,1);
2903
2904 cmemc->cd(1);
2905 gPad->SetLogy();
2906 fhMCEle1pOverE->Draw();
2907 fhMCEle1pOverER02->SetLineColor(4);
2908 fhMCEle1pOverE->SetLineColor(1);
2909 fhMCEle1pOverER02->Draw("same");
2910 pLegendpE0.Draw();
2911
2912 cmemc->cd(2);
2913 gPad->SetLogy();
2914 fhMCEle1dR->Draw();
2915
2916 cmemc->cd(3);
2917 fhMCEle2MatchdEdx->Draw();
2918
2919 sprintf(name,"QA_%s_TrackMatchingDistMCEle.eps",fCalorimeter.Data());
8a587055 2920 cmemc->Print(name); printf("Plot: %s\n",name);
2921
06e5656a 2922
2923 sprintf(cname,"QA_%s_trkmatchMCChHad",fCalorimeter.Data());
2924 TCanvas *cmemchad = new TCanvas(cname,"Track-matching distributions from MC charged hadrons", 600, 200);
2925 cmemchad->Divide(3,1);
2926
2927 cmemchad->cd(1);
2928 gPad->SetLogy();
2929 fhMCChHad1pOverE->Draw();
2930 fhMCChHad1pOverER02->SetLineColor(4);
2931 fhMCChHad1pOverE->SetLineColor(1);
2932 fhMCChHad1pOverER02->Draw("same");
2933 pLegendpE0.Draw();
2934
2935 cmemchad->cd(2);
2936 gPad->SetLogy();
2937 fhMCChHad1dR->Draw();
2938
2939 cmemchad->cd(3);
2940 fhMCChHad2MatchdEdx->Draw();
2941
2942 sprintf(name,"QA_%s_TrackMatchingDistMCChHad.eps",fCalorimeter.Data());
8a587055 2943 cmemchad->Print(name); printf("Plot: %s\n",name);
06e5656a 2944
2945 sprintf(cname,"QA_%s_trkmatchMCNeutral",fCalorimeter.Data());
2946 TCanvas *cmemcn = new TCanvas(cname,"Track-matching distributions from MC neutrals", 600, 200);
2947 cmemcn->Divide(3,1);
2948
2949 cmemcn->cd(1);
2950 gPad->SetLogy();
2951 fhMCNeutral1pOverE->Draw();
2952 fhMCNeutral1pOverE->SetLineColor(1);
2953 fhMCNeutral1pOverER02->SetLineColor(4);
2954 fhMCNeutral1pOverER02->Draw("same");
2955 pLegendpE0.Draw();
2956
2957 cmemcn->cd(2);
2958 gPad->SetLogy();
2959 fhMCNeutral1dR->Draw();
2960
2961 cmemcn->cd(3);
2962 fhMCNeutral2MatchdEdx->Draw();
2963
2964 sprintf(name,"QA_%s_TrackMatchingDistMCNeutral.eps",fCalorimeter.Data());
8a587055 2965 cmemcn->Print(name); printf("Plot: %s\n",name);
06e5656a 2966
2967 sprintf(cname,"QA_%s_trkmatchpE",fCalorimeter.Data());
2968 TCanvas *cmpoe = new TCanvas(cname,"Track-matching distributions, p/E", 400, 200);
2969 cmpoe->Divide(2,1);
2970
2971 cmpoe->cd(1);
2972 gPad->SetLogy();
2973 fh1pOverE->SetLineColor(1);
2974 fhMCEle1pOverE->SetLineColor(4);
2975 fhMCChHad1pOverE->SetLineColor(2);
2976 fhMCNeutral1pOverE->SetLineColor(7);
2977 fh1pOverER02->SetMinimum(0.5);
2978 fh1pOverE->Draw();
2979 fhMCEle1pOverE->Draw("same");
2980 fhMCChHad1pOverE->Draw("same");
2981 fhMCNeutral1pOverE->Draw("same");
2982 TLegend pLegendpE(0.65,0.55,0.9,0.8);
2983 pLegendpE.SetTextSize(0.06);
2984 pLegendpE.AddEntry(fh1pOverE,"all","L");
2985 pLegendpE.AddEntry(fhMCEle1pOverE,"e^{#pm}","L");
2986 pLegendpE.AddEntry(fhMCChHad1pOverE,"h^{#pm}","L");
2987 pLegendpE.AddEntry(fhMCNeutral1pOverE,"neutrals","L");
2988 pLegendpE.SetFillColor(10);
2989 pLegendpE.SetBorderSize(1);
2990 pLegendpE.Draw();
2991
2992 cmpoe->cd(2);
2993 gPad->SetLogy();
2994 fh1pOverER02->SetTitle("Track matches p/E, dR<0.2");
2995 fh1pOverER02->SetLineColor(1);
2996 fhMCEle1pOverER02->SetLineColor(4);
2997 fhMCChHad1pOverER02->SetLineColor(2);
2998 fhMCNeutral1pOverER02->SetLineColor(7);
2999 fh1pOverER02->SetMaximum(fh1pOverE->GetMaximum());
3000 fh1pOverER02->SetMinimum(0.5);
3001 fh1pOverER02->Draw();
3002 fhMCEle1pOverER02->Draw("same");
3003 fhMCChHad1pOverER02->Draw("same");
3004 fhMCNeutral1pOverER02->Draw("same");
3005
3006 // TLegend pLegendpE2(0.65,0.55,0.9,0.8);
3007 // pLegendpE2.SetTextSize(0.06);
3008 // pLegendpE2.SetHeader("dR < 0.02");
3009 // pLegendpE2.SetFillColor(10);
3010 // pLegendpE2.SetBorderSize(1);
3011 // pLegendpE2.Draw();
3012
3013 sprintf(name,"QA_%s_TrackMatchingPOverE.eps",fCalorimeter.Data());
8a587055 3014 cmpoe->Print(name); printf("Plot: %s\n",name);
3015 }
06e5656a 3016
9725fd2a 3017 }
06e5656a 3018
902aa95c 3019
9725fd2a 3020 sprintf(line, ".!tar -zcf QA_%s_%s.tar.gz *%s*.eps", fCalorimeter.Data(), GetName(),fCalorimeter.Data()) ;
3021 gROOT->ProcessLine(line);
3022 sprintf(line, ".!rm -fR *.eps");
3023 gROOT->ProcessLine(line);
3024
3025 printf("AliAnaCalorimeterQA::Terminate() - !! All the eps files are in QA_%s_%s.tar.gz !!!\n", fCalorimeter.Data(), GetName());
3026
3027}