]>
Commit | Line | Data |
---|---|---|
cf6522d1 | 1 | //_________________________________________________________________________ |
2 | // Utility Class for transverse energy studies | |
3 | // Base class for ESD & MC analysis | |
4 | // - reconstruction and MonteCarlo output | |
5 | // implementation file | |
6 | // | |
7 | //*-- Authors: Oystein Djuvsland (Bergen), David Silvermyr (ORNL) | |
8 | //_________________________________________________________________________ | |
9 | ||
2fbf38ac | 10 | #include "AliAnalysisEt.h" |
11 | #include "TMath.h" | |
12 | #include "TList.h" | |
13 | #include "TH1F.h" | |
14 | #include "TH2F.h" | |
ef647350 | 15 | #include "TH1I.h" |
ce546038 | 16 | #include "TTree.h" |
2fbf38ac | 17 | #include <iostream> |
18 | #include "AliAnalysisEtCuts.h" | |
951efd81 | 19 | #include "AliESDtrackCuts.h" |
f9a4ed81 | 20 | #include "AliESDCaloCluster.h" |
641e1e0c | 21 | #include "AliVEvent.h" |
cf6522d1 | 22 | #include "Rtypes.h" |
0f97be4c | 23 | #include "TString.h" |
d0c22dcc | 24 | #include "AliCentrality.h" |
ef647350 | 25 | #include "AliAnalysisEtSelector.h" |
b2c10007 | 26 | #include "AliAnalysisEtTrackMatchCorrections.h" |
27 | #include "AliAnalysisEtRecEffCorrection.h" | |
28 | #include "TFile.h" | |
29 | #include "TVector3.h" | |
9a365626 | 30 | #include "AliPIDResponse.h" |
31 | #include "AliTPCPIDResponse.h" | |
32 | #include "AliInputEventHandler.h" | |
33 | #include "AliAnalysisManager.h" | |
641e1e0c | 34 | |
35 | using namespace std; | |
2fbf38ac | 36 | ClassImp(AliAnalysisEt); |
37 | ||
0651f6b4 | 38 | /* Auxiliary Histogram variables */ |
39 | Int_t AliAnalysisEt::fgnumOfEtaBins = 16; | |
40 | Float_t AliAnalysisEt::fgEtaAxis[17]={-0.78, -0.7, -0.58, -0.46, -0.34, -0.22, -0.12, -0.06, -0.0, 0.06, 0.12, 0.22, 0.34, 0.46, 0.58, 0.7, 0.78}; | |
41 | ||
1423b942 | 42 | Int_t AliAnalysisEt::fgNumOfPtBins = 111; |
43 | Float_t AliAnalysisEt::fgPtAxis[117]= | |
44 | {0.0,0.01,0.02,0.03,0.04, 0.05, 0.06,0.07,0.08,0.09, 0.10,0.11, .12,0.13, .14,0.15, .16,0.17, .18,0.19, | |
45 | 0.2, .22, .24, .26, .28, 0.30, 0.32, .34, .36, .38, 0.40, .42, .44, .46, .48, | |
46 | 0.5, .52, .54, .56, .58, 0.60, 0.62, .64, .66, .68, 0.70, .72, .74, .76, .78, | |
47 | .80, .82, .84, .86, .88, 0.90, 0.92, .94, .96, .98, 1.00,1.05, 1.1,1.15, 1.2, | |
48 | 1.25, 1.3,1.35,1.40,1.45, 1.50, 1.55, 1.6,1.65, 1.7, 1.75, 1.8,1.85, 1.9,1.95, | |
49 | 2.0, 2.2, 2.4, 2.6, 2.8, 3.00, 3.20, 3.4, 3.6, 3.8, 4.00, 4.2, 4.4, 4.6, 4.8, | |
50 | 5.0, 5.5, 6.0, 6.5, 7.0, 7.50, 8.00, 8.5, 9.0, 9.5, 10.0,12.0,14.0,16.0,18.0, | |
51 | 20.0,25.0,30.0,35.0,40.0, 45.0, 50.0}; | |
52 | ||
0651f6b4 | 53 | Int_t AliAnalysisEt::fgNumOfEBins = 78; |
54 | Float_t AliAnalysisEt::fgEAxis[79]={0., 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, | |
55 | 1.,1.5,2.,2.5,3.,3.5,4.,4.5,5.,5.5,6.,6.5,7.,7.5,8.,8.5,9.,9.5,10.,11., | |
56 | 12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.,25.,26.,27.,28.,29.,30.,31., | |
57 | 32.,33.,34.,35.,36.,37.,38.,39.,40.,41.,42.,43.,44.,45.,46.,47.,48.,49.,50.}; | |
58 | ||
1423b942 | 59 | Int_t AliAnalysisEt::fgNumOfRBins = 47; |
60 | Float_t AliAnalysisEt::fgRAxis[48]={-2.,-1.,0.,0.0005,0.001,0.0015,0.002,0.0025,0.003,0.0035,0.004,0.0045,0.005,0.0055,0.006,0.0065,0.007,0.0075,0.008,0.0085,0.009,0.0095,0.01, | |
61 | 0.011,0.012,0.013,0.014,0.015,0.016,0.017,0.018,0.019,0.020,0.022,0.024,0.026,0.028,0.03,0.032,0.034,0.036,0.038,0.04,0.042,0.044,0.046,0.048,0.05}; | |
62 | ||
2fbf38ac | 63 | |
7d2d1773 | 64 | AliAnalysisEt::AliAnalysisEt() : AliAnalysisEtCommon() |
b2c10007 | 65 | ,fTmCorrections(0) |
66 | ,fReCorrections(0) | |
f61cec2f | 67 | ,fEventSummaryTree(0) |
68 | ,fAcceptedTree(0) | |
69 | ,fDepositTree(0) | |
7d2d1773 | 70 | ,fTotEt(0) |
d9f145e7 | 71 | ,fTotEtAcc(0) |
7d2d1773 | 72 | ,fTotNeutralEt(0) |
d9f145e7 | 73 | ,fTotNeutralEtAcc(0) |
7d2d1773 | 74 | ,fTotChargedEt(0) |
d9f145e7 | 75 | ,fTotChargedEtAcc(0) |
7d2d1773 | 76 | ,fMultiplicity(0) |
77 | ,fChargedMultiplicity(0) | |
78 | ,fNeutralMultiplicity(0) | |
7d2d1773 | 79 | ,fProtonEt(0) |
f61cec2f | 80 | ,fAntiProtonEt(0) |
7d2d1773 | 81 | ,fNeutronEt(0) |
82 | ,fAntiNeutronEt(0) | |
f61cec2f | 83 | ,fPi0Et(0) |
84 | ,fPiPlusEt(0) | |
85 | ,fPiMinusEt(0) | |
86 | ,fKPlusEt(0) | |
87 | ,fKMinusEt(0) | |
88 | ,fK0sEt(0) | |
89 | ,fK0lEt(0) | |
90 | ,fMuMinusEt(0) | |
91 | ,fMuPlusEt(0) | |
92 | ,fEMinusEt(0) | |
93 | ,fEPlusEt(0) | |
7d2d1773 | 94 | ,fGammaEt(0) |
f61cec2f | 95 | ,fProtonRemovedEt(0) |
96 | ,fAntiProtonRemovedEt(0) | |
97 | ,fNeutronRemovedEt(0) | |
98 | ,fAntiNeutronRemovedEt(0) | |
99 | ,fPi0RemovedEt(0) | |
100 | ,fPiPlusRemovedEt(0) | |
101 | ,fPiMinusRemovedEt(0) | |
102 | ,fKPlusRemovedEt(0) | |
103 | ,fKMinusRemovedEt(0) | |
104 | ,fK0sRemovedEt(0) | |
105 | ,fK0lRemovedEt(0) | |
106 | ,fMuMinusRemovedEt(0) | |
107 | ,fMuPlusRemovedEt(0) | |
108 | ,fEMinusRemovedEt(0) | |
109 | ,fEPlusRemovedEt(0) | |
110 | ,fGammaRemovedEt(0) | |
111 | ,fProtonMult(0) | |
112 | ,fAntiProtonMult(0) | |
113 | ,fNeutronMult(0) | |
114 | ,fAntiNeutronMult(0) | |
115 | ,fPi0Mult(0) | |
116 | ,fPiPlusMult(0) | |
117 | ,fPiMinusMult(0) | |
118 | ,fKPlusMult(0) | |
119 | ,fKMinusMult(0) | |
120 | ,fK0sMult(0) | |
121 | ,fK0lMult(0) | |
122 | ,fMuMinusMult(0) | |
123 | ,fMuPlusMult(0) | |
124 | ,fEMinusMult(0) | |
125 | ,fEPlusMult(0) | |
126 | ,fGammaMult(0) | |
127 | ,fProtonRemovedMult(0) | |
128 | ,fAntiProtonRemovedMult(0) | |
129 | ,fNeutronRemovedMult(0) | |
130 | ,fAntiNeutronRemovedMult(0) | |
131 | ,fPi0RemovedMult(0) | |
132 | ,fPiPlusRemovedMult(0) | |
133 | ,fPiMinusRemovedMult(0) | |
134 | ,fKPlusRemovedMult(0) | |
135 | ,fKMinusRemovedMult(0) | |
136 | ,fK0sRemovedMult(0) | |
137 | ,fK0lRemovedMult(0) | |
138 | ,fMuMinusRemovedMult(0) | |
139 | ,fMuPlusRemovedMult(0) | |
140 | ,fEMinusRemovedMult(0) | |
141 | ,fEPlusRemovedMult(0) | |
142 | ,fGammaRemovedMult(0) | |
7d2d1773 | 143 | ,fEnergyDeposited(0) |
f61cec2f | 144 | ,fMomentumTPC(0) |
7d2d1773 | 145 | ,fCharge(0) |
146 | ,fParticlePid(0) | |
147 | ,fPidProb(0) | |
148 | ,fTrackPassedCut(kFALSE) | |
f9a4ed81 | 149 | ,fCentClass(0) |
7d2d1773 | 150 | ,fDetectorRadius(0) |
7d2d1773 | 151 | ,fSingleCellEnergyCut(0) |
ef647350 | 152 | ,fChargedEnergyRemoved(0) |
153 | ,fNeutralEnergyRemoved(0) | |
154 | ,fGammaEnergyAdded(0) | |
7d2d1773 | 155 | ,fHistEt(0) |
7d2d1773 | 156 | ,fHistNeutralMult(0) |
157 | ,fHistPhivsPtPos(0) | |
158 | ,fHistPhivsPtNeg(0) | |
5501aa9c | 159 | ,fCentrality(0) |
f61cec2f | 160 | ,fMakeSparse(kFALSE) |
ef647350 | 161 | ,fCutFlow(0) |
162 | ,fSelector(0) | |
9a365626 | 163 | ,fPIDResponse(0) |
02d47689 | 164 | ,fsub(1.0) |
6280e578 | 165 | ,fsubmeanhade(1.0) |
f61cec2f | 166 | |
0651f6b4 | 167 | {} |
2fbf38ac | 168 | |
169 | AliAnalysisEt::~AliAnalysisEt() | |
464aa50c | 170 | {//Destructor |
4503e29d | 171 | delete fTmCorrections; |
172 | delete fReCorrections; | |
f61cec2f | 173 | if(fDepositTree){ |
174 | fDepositTree->Clear(); | |
175 | delete fDepositTree; // optional TTree | |
951efd81 | 176 | } |
f61cec2f | 177 | if(fEventSummaryTree) |
178 | { | |
179 | fEventSummaryTree->Clear(); | |
180 | delete fEventSummaryTree; | |
951efd81 | 181 | } |
311c6540 | 182 | if(fAcceptedTree) |
183 | { | |
184 | fAcceptedTree->Clear(); | |
185 | delete fAcceptedTree; | |
186 | } | |
7d2d1773 | 187 | delete fHistEt; //Et spectrum |
7d2d1773 | 188 | delete fHistNeutralMult; //Neutral multiplicity |
189 | delete fHistPhivsPtPos; //phi vs pT plot for positive tracks | |
311c6540 | 190 | delete fHistPhivsPtNeg; //phi vs pT Moplot for negative tracks |
d0c22dcc | 191 | //delete fCentrality;//this code does not actually own AliCentrality so we don't have to worry about deleting it... we just borrow it... |
311c6540 | 192 | delete fCutFlow; |
193 | delete fSelector; | |
9a365626 | 194 | delete fPIDResponse; |
2fbf38ac | 195 | } |
196 | ||
197 | void AliAnalysisEt::FillOutputList(TList *list) | |
cf6522d1 | 198 | { // histograms to be added to output |
2fbf38ac | 199 | list->Add(fHistEt); |
2fbf38ac | 200 | list->Add(fHistNeutralMult); |
201 | ||
202 | list->Add(fHistPhivsPtPos); | |
203 | list->Add(fHistPhivsPtNeg); | |
204 | ||
ce546038 | 205 | if (fCuts) { |
206 | if (fCuts->GetHistMakeTree()) { | |
f61cec2f | 207 | //list->Add(fTree); |
208 | list->Add(fEventSummaryTree); | |
ce546038 | 209 | } |
f9a4ed81 | 210 | if (fCuts->GetHistMakeTreeDeposit()) { |
f61cec2f | 211 | list->Add(fDepositTree); |
f9a4ed81 | 212 | } |
ce546038 | 213 | } |
f9a4ed81 | 214 | |
ef647350 | 215 | list->Add(fCutFlow); |
ce546038 | 216 | |
9a365626 | 217 | AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager(); |
18875e70 | 218 | if (!man) { |
219 | AliFatal("Analysis manager needed"); | |
220 | return; | |
221 | } | |
222 | ||
9a365626 | 223 | AliInputEventHandler *inputHandler=dynamic_cast<AliInputEventHandler*>(man->GetInputEventHandler()); |
18875e70 | 224 | if (!inputHandler) { |
225 | AliFatal("Input handler needed"); | |
226 | return; | |
227 | } | |
228 | ||
9a365626 | 229 | //pid response object |
230 | fPIDResponse=inputHandler->GetPIDResponse(); | |
231 | if (!fPIDResponse) AliError("PIDResponse object was not created"); | |
232 | ||
2fbf38ac | 233 | } |
234 | ||
235 | void AliAnalysisEt::Init() | |
0065531a | 236 | {// clear variables, set up cuts and PDG info |
7d2d1773 | 237 | AliAnalysisEtCommon::Init(); |
b2c10007 | 238 | if(ReadCorrections("calocorrections.root") != 0) |
239 | { | |
240 | // Shouldn't do this, why oh why are exceptions not allowed? | |
241 | exit(-1); | |
242 | } | |
0065531a | 243 | ResetEventValues(); |
9a365626 | 244 | |
2fbf38ac | 245 | } |
246 | ||
247 | void AliAnalysisEt::CreateHistograms() | |
cf6522d1 | 248 | { // create histograms.. |
13b0d3c1 | 249 | // histogram binning for E_T, p_T and Multiplicity: defaults for p+p |
f9a4ed81 | 250 | Int_t nbinsEt = 10000; |
251 | Double_t minEt = 0.0; | |
252 | Double_t maxEt = 1000; | |
13b0d3c1 | 253 | Int_t nbinsPt = 200; |
254 | Double_t minPt = 0; | |
255 | Double_t maxPt = 20; | |
256 | Int_t nbinsMult = 200; | |
257 | Double_t minMult = -0.5; // offset -0.5 to have integer bins centered around 0 | |
258 | Double_t maxMult = nbinsMult + minMult; // 1 bin per integer value | |
2fbf38ac | 259 | |
ce546038 | 260 | // see if we should change histogram limits etc, and possibly create a tree |
261 | if (fCuts) { | |
bf4eaf10 | 262 | if (fCuts->GetHistMakeTree()) { |
8ea99ab0 | 263 | CreateTrees(); |
bf4eaf10 | 264 | } |
0fa8c632 | 265 | |
266 | nbinsMult = fCuts->GetHistNbinsMult(); | |
267 | minMult = fCuts->GetHistMinMult(); | |
268 | maxMult = fCuts->GetHistMaxMult(); | |
269 | ||
270 | nbinsEt = fCuts->GetHistNbinsTotEt(); | |
271 | minEt = fCuts->GetHistMinTotEt(); | |
272 | maxEt = fCuts->GetHistMaxTotEt(); | |
273 | ||
274 | nbinsPt = fCuts->GetHistNbinsParticlePt(); | |
275 | minPt = fCuts->GetHistMinParticlePt(); | |
276 | maxPt = fCuts->GetHistMaxParticlePt(); | |
ce546038 | 277 | } |
278 | ||
2fbf38ac | 279 | TString histname = "fHistEt" + fHistogramNameSuffix; |
13b0d3c1 | 280 | fHistEt = new TH1F(histname.Data(), "Total E_{T} Distribution", nbinsEt, minEt, maxEt); |
2fbf38ac | 281 | fHistEt->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})"); |
282 | fHistEt->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)"); | |
283 | ||
2fbf38ac | 284 | histname = "fHistNeutralMult" + fHistogramNameSuffix; |
13b0d3c1 | 285 | fHistNeutralMult = new TH1F(histname.Data(), "Neutral Multiplicity", nbinsMult, minMult, maxMult); |
2fbf38ac | 286 | fHistNeutralMult->GetXaxis()->SetTitle("N"); |
287 | fHistNeutralMult->GetYaxis()->SetTitle("Multiplicity"); | |
288 | ||
289 | histname = "fHistPhivsPtPos" + fHistogramNameSuffix; | |
13b0d3c1 | 290 | fHistPhivsPtPos = new TH2F(histname.Data(), "Phi vs pT of positively charged tracks hitting the calorimeter", 200, 0, 2*TMath::Pi(), nbinsPt, minPt, maxPt); |
2fbf38ac | 291 | |
292 | histname = "fHistPhivsPtNeg" + fHistogramNameSuffix; | |
13b0d3c1 | 293 | fHistPhivsPtNeg = new TH2F(histname.Data(), "Phi vs pT of negatively charged tracks hitting the calorimeter", 200, 0, 2*TMath::Pi(), nbinsPt, minPt, maxPt); |
2fbf38ac | 294 | |
ef647350 | 295 | histname = "fCutFlow" + fHistogramNameSuffix; |
296 | fCutFlow = new TH1I(histname, histname, 20, -0.5, 19.5); | |
0651f6b4 | 297 | } |
2fbf38ac | 298 | |
0651f6b4 | 299 | TH2F* AliAnalysisEt::CreateEtaEHisto2D(TString name, TString title, TString ztitle) |
300 | { //creates a 2-d histogram in eta and E and adds it to the list of histograms to be saved | |
1423b942 | 301 | TString histoname = name + fHistogramNameSuffix; |
302 | ||
303 | TH2F *histo = new TH2F(histoname.Data(),title.Data(),fgNumOfEBins, fgEAxis, fgnumOfEtaBins, fgEtaAxis); | |
304 | histo->SetYTitle("#eta"); | |
305 | histo->SetXTitle("E (GeV)"); | |
306 | histo->SetZTitle(ztitle.Data()); | |
307 | histo->Sumw2(); | |
308 | ||
309 | return histo; | |
310 | } | |
311 | ||
312 | ||
313 | TH2F* AliAnalysisEt::CreateEtaPtHisto2D(TString name, TString title, TString ztitle) | |
314 | { //creates a 2-d histogram in eta and phi and adds it to the list of histograms to be saved | |
315 | TString histoname = name + fHistogramNameSuffix; | |
316 | ||
317 | TH2F *histo = new TH2F(histoname.Data(),title.Data(),fgNumOfPtBins, fgPtAxis, fgnumOfEtaBins, fgEtaAxis); | |
318 | histo->SetYTitle("#eta"); | |
319 | histo->SetXTitle("p_{T}"); | |
320 | histo->SetZTitle(ztitle.Data()); | |
321 | histo->Sumw2(); | |
0651f6b4 | 322 | |
1423b942 | 323 | return histo; |
324 | } | |
325 | ||
326 | TH2F* AliAnalysisEt::CreateEtaEtHisto2D(TString name, TString title, TString ztitle) | |
327 | { //creates a 2-d histogram in eta and phi and adds it to the list of histograms to be saved | |
328 | TString histoname = name + fHistogramNameSuffix; | |
0651f6b4 | 329 | |
1423b942 | 330 | TH2F *histo = new TH2F(histoname.Data(),title.Data(),fgNumOfEBins, fgEAxis, fgnumOfEtaBins, fgEtaAxis); |
0651f6b4 | 331 | histo->SetYTitle("#eta"); |
1423b942 | 332 | histo->SetXTitle("E_{T}"); |
333 | histo->SetZTitle(ztitle.Data()); | |
334 | histo->Sumw2(); | |
335 | ||
336 | return histo; | |
337 | } | |
338 | ||
339 | TH2F* AliAnalysisEt::CreateResEHisto2D(TString name, TString title, TString ztitle) | |
340 | { //creates a 2-d histogram in eta and E and adds it to the list of histograms to be saved | |
341 | TString histoname = name + fHistogramNameSuffix; | |
342 | ||
343 | TH2F *histo = new TH2F(histoname.Data(),title.Data(),fgNumOfEBins, fgEAxis, fgNumOfRBins, fgRAxis); | |
344 | histo->SetYTitle("R"); | |
0651f6b4 | 345 | histo->SetXTitle("E (GeV)"); |
1423b942 | 346 | histo->SetZTitle(ztitle.Data()); |
347 | histo->Sumw2(); | |
348 | ||
349 | return histo; | |
350 | } | |
351 | ||
352 | ||
353 | TH2F* AliAnalysisEt::CreateResPtHisto2D(TString name, TString title, TString ztitle) | |
354 | { //creates a 2-d histogram in eta and phi and adds it to the list of histograms to be saved | |
355 | TString histoname = name + fHistogramNameSuffix; | |
356 | ||
357 | TH2F *histo = new TH2F(histoname.Data(),title.Data(),fgNumOfPtBins, fgPtAxis, fgNumOfRBins, fgRAxis); | |
358 | histo->SetYTitle("R"); | |
359 | histo->SetXTitle("p_{T}"); | |
360 | histo->SetZTitle(ztitle.Data()); | |
361 | histo->Sumw2(); | |
362 | ||
363 | return histo; | |
364 | } | |
365 | ||
01b73fb0 | 366 | THnSparseF* AliAnalysisEt::CreateClusterHistoSparse(TString name, TString title) |
1423b942 | 367 | { //creates a 2D sparse histogram |
368 | TString histoname = name + fHistogramNameSuffix; | |
369 | ||
370 | Int_t nBins[4] = {200,200,240,20}; | |
371 | Double_t min[4] = {0.,-1.,70.,0.5}; | |
372 | Double_t max[4] = {50.,1.,190,20.5}; | |
373 | ||
01b73fb0 | 374 | THnSparseF *histo = new THnSparseF(histoname.Data(),title.Data(),4,nBins,min, max); |
1423b942 | 375 | histo->GetAxis(0)->SetTitle("E"); |
376 | histo->GetAxis(1)->SetTitle("#eta_{cluster}"); | |
377 | histo->GetAxis(2)->SetTitle("#phi_{cluster}"); | |
378 | histo->GetAxis(3)->SetTitle("n_{cells}"); | |
379 | histo->Sumw2(); | |
380 | ||
381 | return histo; | |
382 | } | |
383 | ||
01b73fb0 | 384 | THnSparseF* AliAnalysisEt::CreateNeutralPartHistoSparse(TString name, TString title) |
1423b942 | 385 | { //creates a sparse neutral particle histogram |
386 | TString histoname = name + fHistogramNameSuffix; | |
387 | ||
388 | Int_t nBins[6] = {20,200,200,200,240,20}; | |
389 | Double_t min[6] = {-1.,0.,0.,-1.,70.,0.5}; | |
390 | Double_t max[6] = {1.,50.,50.,1.,190,20.5}; | |
391 | ||
01b73fb0 | 392 | THnSparseF *histo = new THnSparseF(histoname.Data(),title.Data(),6,nBins,min, max); |
1423b942 | 393 | histo->GetAxis(0)->SetTitle("#eta"); |
394 | histo->GetAxis(1)->SetTitle("p_{T}"); | |
395 | histo->GetAxis(2)->SetTitle("E"); | |
396 | histo->GetAxis(3)->SetTitle("#eta_{cluster}"); | |
397 | histo->GetAxis(4)->SetTitle("#phi_{cluster}"); | |
398 | histo->GetAxis(5)->SetTitle("n_{cells}"); | |
399 | histo->Sumw2(); | |
400 | ||
401 | return histo; | |
402 | } | |
403 | ||
01b73fb0 | 404 | THnSparseF* AliAnalysisEt::CreateChargedPartHistoSparse(TString name, TString title) |
1423b942 | 405 | { //creates a sparse charged particle histogram |
406 | TString histoname = name + fHistogramNameSuffix; | |
407 | ||
408 | Int_t nBins[7] = {20,200,200,200,240,20,100}; | |
409 | Double_t min[7] = {-1.,0.,0.,-1.,70.,0.5,0.}; | |
410 | Double_t max[7] = {1.,50.,50.,1.,190,20.5,0.1}; | |
411 | ||
01b73fb0 | 412 | THnSparseF *histo = new THnSparseF(histoname.Data(),title.Data(),7,nBins,min, max); |
1423b942 | 413 | histo->GetAxis(0)->SetTitle("#eta"); |
414 | histo->GetAxis(1)->SetTitle("p_{T}"); | |
415 | histo->GetAxis(2)->SetTitle("E"); | |
416 | histo->GetAxis(3)->SetTitle("#eta_{cluster}"); | |
417 | histo->GetAxis(4)->SetTitle("#phi_{cluster}"); | |
418 | histo->GetAxis(5)->SetTitle("n_{cells}"); | |
419 | histo->GetAxis(6)->SetTitle("R_{match}"); | |
0651f6b4 | 420 | histo->Sumw2(); |
0651f6b4 | 421 | |
422 | return histo; | |
2fbf38ac | 423 | } |
424 | ||
0651f6b4 | 425 | |
8ea99ab0 | 426 | void AliAnalysisEt::CreateTrees() |
ce546038 | 427 | { // create tree.. |
f61cec2f | 428 | TString treename = "fEventSummaryTree" + fHistogramNameSuffix; |
8ea99ab0 | 429 | if(fCuts->GetHistMakeTree()) |
430 | { | |
431 | ||
f61cec2f | 432 | fEventSummaryTree = new TTree(treename, treename); |
433 | fEventSummaryTree->Branch("fTotEt",&fTotEt,"fTotEt/D"); | |
d9f145e7 | 434 | fEventSummaryTree->Branch("fTotEtAcc",&fTotEtAcc,"fTotEtAcc/D"); |
f61cec2f | 435 | fEventSummaryTree->Branch("fTotNeutralEt",&fTotNeutralEt,"fTotNeutralEt/D"); |
d9f145e7 | 436 | fEventSummaryTree->Branch("fTotNeutralEtAcc",&fTotNeutralEtAcc,"fTotNeutralEtAcc/D"); |
f61cec2f | 437 | fEventSummaryTree->Branch("fTotChargedEt",&fTotChargedEt,"fTotChargedEt/D"); |
d9f145e7 | 438 | fEventSummaryTree->Branch("fTotChargedEtAcc",&fTotChargedEtAcc,"fTotChargedEtAcc/D"); |
f61cec2f | 439 | fEventSummaryTree->Branch("fMultiplicity",&fMultiplicity,"fMultiplicity/I"); |
440 | fEventSummaryTree->Branch("fChargedMultiplicity",&fChargedMultiplicity,"fChargedMultiplicity/I"); | |
441 | fEventSummaryTree->Branch("fNeutralMultiplicity",&fNeutralMultiplicity,"fNeutralMultiplicity/I"); | |
442 | fEventSummaryTree->Branch("fCentClass",&fCentClass,"fCentClass/I"); | |
443 | fEventSummaryTree->Branch("fChargedEnergyRemoved", &fChargedEnergyRemoved, "fChargedEnergyRemoved/D"); | |
444 | fEventSummaryTree->Branch("fNeutralEnergyRemoved", &fNeutralEnergyRemoved, "fNeutralEnergyRemoved/D"); | |
445 | fEventSummaryTree->Branch("fGammaEnergyAdded", &fGammaEnergyAdded, "fGammaEnergyAdded/D"); | |
446 | ||
447 | ||
448 | fEventSummaryTree->Branch("fProtonEt",&fProtonEt,"fProtonEt/D"); | |
449 | fEventSummaryTree->Branch("fAntiProtonEt",&fAntiProtonEt,"fAntiProtonEt/D"); | |
450 | ||
451 | fEventSummaryTree->Branch("fNeutronEt",&fNeutronEt,"fNeutronEt/D"); | |
452 | fEventSummaryTree->Branch("fAntiNeutronEt",&fAntiNeutronEt,"fAntiNeutronEt/D"); | |
453 | ||
454 | fEventSummaryTree->Branch("fPi0Et",&fPi0Et,"fPi0Et/D"); | |
455 | fEventSummaryTree->Branch("fPiPlusEt",&fPiPlusEt,"fPiPlusEt/D"); | |
456 | fEventSummaryTree->Branch("fPiMinusEt",&fPiMinusEt,"fPiMinusEt/D"); | |
457 | ||
458 | fEventSummaryTree->Branch("fKPlusEt",&fKPlusEt,"fKPlusEt/D"); | |
459 | fEventSummaryTree->Branch("fKMinusEt",&fKMinusEt,"fKMinusEt/D"); | |
460 | fEventSummaryTree->Branch("fK0sEt",&fK0sEt,"fK0sEt/D"); | |
461 | fEventSummaryTree->Branch("fK0lEt",&fK0lEt,"fK0lEt/D"); | |
462 | ||
463 | fEventSummaryTree->Branch("fMuMinusEt",&fMuMinusEt,"fMuMinusEt/D"); | |
464 | fEventSummaryTree->Branch("fMuPlusEt",&fMuPlusEt,"fMuPlusEt/D"); | |
465 | ||
466 | fEventSummaryTree->Branch("fEMinusEt",&fEMinusEt,"fEMinusEt/D"); | |
467 | fEventSummaryTree->Branch("fEPlusEt",&fEPlusEt,"fEPlusEt/D"); | |
468 | ||
469 | fEventSummaryTree->Branch("fGammaEt", &fGammaEt, "fGammaEt/D"); | |
470 | ||
471 | fEventSummaryTree->Branch("fProtonRemovedEt",&fProtonRemovedEt,"fProtonRemovedEt/D"); | |
472 | fEventSummaryTree->Branch("fAntiProtonRemovedEt",&fAntiProtonRemovedEt,"fAntiProtonRemovedEt/D"); | |
473 | ||
474 | fEventSummaryTree->Branch("fNeutronRemovedEt",&fNeutronRemovedEt,"fNeutronRemovedEt/D"); | |
475 | fEventSummaryTree->Branch("fAntiNeutronRemovedEt",&fAntiNeutronRemovedEt,"fAntiNeutronRemovedEt/D"); | |
476 | ||
477 | fEventSummaryTree->Branch("fPi0RemovedEt",&fPi0RemovedEt,"fPi0RemovedEt/D"); | |
478 | fEventSummaryTree->Branch("fPiPlusRemovedEt",&fPiPlusRemovedEt,"fPiPlusRemovedEt/D"); | |
479 | fEventSummaryTree->Branch("fPiMinusRemovedEt",&fPiMinusRemovedEt,"fPiMinusRemovedEt/D"); | |
480 | ||
481 | fEventSummaryTree->Branch("fKPlusRemovedEt",&fKPlusRemovedEt,"fKPlusRemovedEt/D"); | |
482 | fEventSummaryTree->Branch("fKMinusRemovedEt",&fKMinusEt,"fKMinusRemovedEt/D"); | |
483 | fEventSummaryTree->Branch("fK0sRemovedEt",&fK0sEt,"fK0sRemovedEt/D"); | |
484 | fEventSummaryTree->Branch("fK0lRemovedEt",&fK0lRemovedEt,"fK0lRemovedEt/D"); | |
485 | ||
486 | fEventSummaryTree->Branch("fMuMinusRemovedEt",&fMuMinusRemovedEt,"fMuMinusRemovedEt/D"); | |
487 | fEventSummaryTree->Branch("fMuPlusRemovedEt",&fMuPlusRemovedEt,"fMuPlusRemovedEt/D"); | |
488 | ||
489 | fEventSummaryTree->Branch("fEMinusRemovedEt",&fEMinusRemovedEt,"fEMinusRemovedEt/D"); | |
490 | fEventSummaryTree->Branch("fEPlusRemovedEt",&fEPlusRemovedEt,"fEPlusRemovedEt/D"); | |
491 | ||
492 | fEventSummaryTree->Branch("fGammaRemovedEt", &fGammaRemovedEt, "fGammaEtRemoved/D"); | |
493 | ||
494 | fEventSummaryTree->Branch("fProtonMult",&fProtonMult,"fProtonMult/D"); | |
495 | fEventSummaryTree->Branch("fAntiProtonMult",&fAntiProtonMult,"fAntiProtonMult/D"); | |
496 | ||
497 | fEventSummaryTree->Branch("fNeutronMult",&fNeutronMult,"fNeutronMult/D"); | |
498 | fEventSummaryTree->Branch("fAntiNeutronMult",&fAntiNeutronMult,"fAntiNeutronMult/D"); | |
499 | ||
500 | fEventSummaryTree->Branch("fPi0Mult",&fPi0Mult,"fPi0Mult/D"); | |
501 | fEventSummaryTree->Branch("fPiPlusMult",&fPiPlusMult,"fPiPlusMult/D"); | |
502 | fEventSummaryTree->Branch("fPiMinusMult",&fPiMinusMult,"fPiMinusMult/D"); | |
503 | ||
504 | fEventSummaryTree->Branch("fKPlusMult",&fKPlusMult,"fKPlusMult/D"); | |
505 | fEventSummaryTree->Branch("fKMinusMult",&fKMinusMult,"fKMinusMult/D"); | |
506 | fEventSummaryTree->Branch("fK0sMult",&fK0sMult,"fK0sMult/D"); | |
507 | fEventSummaryTree->Branch("fK0lMult",&fK0lMult,"fK0lMult/D"); | |
508 | ||
509 | fEventSummaryTree->Branch("fMuMinusMult",&fMuMinusMult,"fMuMinusMult/D"); | |
510 | fEventSummaryTree->Branch("fMuPlusMult",&fMuPlusMult,"fMuPlusMult/D"); | |
511 | ||
512 | fEventSummaryTree->Branch("fEMinusMult",&fEMinusMult,"fEMinusMult/D"); | |
513 | fEventSummaryTree->Branch("fEPlusMult",&fEPlusMult,"fEPlusMult/D"); | |
514 | ||
515 | fEventSummaryTree->Branch("fGammaMult", &fGammaMult, "fGammaMult/D"); | |
516 | ||
517 | fEventSummaryTree->Branch("fProtonRemovedMult",&fProtonRemovedMult,"fProtonRemovedMult/D"); | |
518 | fEventSummaryTree->Branch("fAntiProtonRemovedMult",&fAntiProtonRemovedMult,"fAntiProtonRemovedMult/D"); | |
519 | ||
520 | fEventSummaryTree->Branch("fNeutronRemovedMult",&fNeutronRemovedMult,"fNeutronRemovedMult/D"); | |
521 | fEventSummaryTree->Branch("fAntiNeutronRemovedMult",&fAntiNeutronRemovedMult,"fAntiNeutronRemovedMult/D"); | |
522 | ||
523 | fEventSummaryTree->Branch("fPi0RemovedMult",&fPi0RemovedMult,"fPi0RemovedMult/D"); | |
524 | fEventSummaryTree->Branch("fPiPlusRemovedMult",&fPiPlusRemovedMult,"fPiPlusRemovedMult/D"); | |
525 | fEventSummaryTree->Branch("fPiMinusRemovedMult",&fPiMinusRemovedMult,"fPiMinusRemovedMult/D"); | |
526 | ||
527 | fEventSummaryTree->Branch("fKPlusRemovedMult",&fKPlusRemovedMult,"fKPlusRemovedMult/D"); | |
528 | fEventSummaryTree->Branch("fKMinusRemovedMult",&fKMinusMult,"fKMinusRemovedMult/D"); | |
529 | fEventSummaryTree->Branch("fK0sRemovedMult",&fK0sMult,"fK0sRemovedMult/D"); | |
530 | fEventSummaryTree->Branch("fK0lRemovedMult",&fK0lRemovedMult,"fK0lRemovedMult/D"); | |
531 | ||
532 | fEventSummaryTree->Branch("fMuMinusRemovedMult",&fMuMinusRemovedMult,"fMuMinusRemovedMult/D"); | |
533 | fEventSummaryTree->Branch("fMuPlusRemovedMult",&fMuPlusRemovedMult,"fMuPlusRemovedMult/D"); | |
534 | ||
535 | fEventSummaryTree->Branch("fEMinusRemovedMult",&fEMinusRemovedMult,"fEMinusRemovedMult/D"); | |
536 | fEventSummaryTree->Branch("fEPlusRemovedMult",&fEPlusRemovedMult,"fEPlusRemovedMult/D"); | |
537 | ||
538 | fEventSummaryTree->Branch("fGammaRemovedMult", &fGammaRemovedMult, "fGammaMultRemoved/D"); | |
539 | ||
540 | ||
f9a4ed81 | 541 | |
8ea99ab0 | 542 | } |
543 | ||
544 | if(fCuts->GetHistMakeTreeDeposit()) | |
545 | { | |
546 | treename = "fTreeDeposit" + fHistogramNameSuffix; | |
f61cec2f | 547 | fDepositTree = new TTree(treename, treename); |
548 | ||
549 | fDepositTree->Branch("fEnergyDeposited", &fEnergyDeposited, "fEnergyDeposited/F"); | |
550 | fDepositTree->Branch("fMomentumTPC", &fMomentumTPC, "fMomentumTPC/F"); | |
551 | fDepositTree->Branch("fCharge", &fCharge, "fCharge/S"); | |
552 | fDepositTree->Branch("fParticlePid", &fParticlePid, "fParticlePid/S"); | |
553 | fDepositTree->Branch("fPidProb", &fPidProb, "fPidProb/F"); | |
554 | fDepositTree->Branch("fTrackPassedCut", &fTrackPassedCut, "fTrackPassedCut/B"); | |
8ea99ab0 | 555 | } |
7b873813 | 556 | |
ce546038 | 557 | return; |
558 | } | |
2fbf38ac | 559 | void AliAnalysisEt::FillHistograms() |
cf6522d1 | 560 | { // fill histograms.. |
2fbf38ac | 561 | fHistEt->Fill(fTotEt); |
2fbf38ac | 562 | |
2fbf38ac | 563 | fHistNeutralMult->Fill(fNeutralMultiplicity); |
564 | ||
ce546038 | 565 | if (fCuts) { |
566 | if (fCuts->GetHistMakeTree()) { | |
f61cec2f | 567 | fEventSummaryTree->Fill(); |
ce546038 | 568 | } |
569 | } | |
f61cec2f | 570 | if(fCuts) |
571 | { | |
572 | if(fCuts->GetHistMakeTreeDeposit()) | |
573 | { | |
574 | fDepositTree->Fill(); | |
575 | } | |
576 | } | |
577 | ||
2fbf38ac | 578 | } |
0065531a | 579 | |
641e1e0c | 580 | Int_t AliAnalysisEt::AnalyseEvent(AliVEvent *event) |
0065531a | 581 | { //this line is basically here to eliminate a compiler warning that event is not used. Making it a virtual function did not work with the plugin. |
7d2d1773 | 582 | AliAnalysisEtCommon::AnalyseEvent(event); |
f61cec2f | 583 | //fSelector->SetEvent(event); |
0065531a | 584 | ResetEventValues(); |
641e1e0c | 585 | return 0; |
586 | } | |
2fbf38ac | 587 | |
588 | void AliAnalysisEt::ResetEventValues() | |
cf6522d1 | 589 | { // clear |
7d2d1773 | 590 | AliAnalysisEtCommon::ResetEventValues(); |
0065531a | 591 | fTotEt = 0; |
d9f145e7 | 592 | fTotEtAcc = 0; |
0065531a | 593 | fTotNeutralEt = 0; |
d9f145e7 | 594 | fTotChargedEt = 0; |
595 | fTotNeutralEtAcc = 0; | |
596 | fTotChargedEtAcc = 0; | |
0065531a | 597 | fMultiplicity = 0; |
598 | fChargedMultiplicity = 0; | |
599 | fNeutralMultiplicity = 0; | |
f61cec2f | 600 | |
87efb15c | 601 | fProtonEt = 0; |
f61cec2f | 602 | fAntiProtonEt = 0; |
603 | ||
7b873813 | 604 | fNeutronEt = 0; |
605 | fAntiNeutronEt = 0; | |
f61cec2f | 606 | |
607 | fPi0Et = 0; | |
608 | fPiPlusEt = 0; | |
609 | fPiMinusEt = 0; | |
610 | ||
611 | fKPlusEt = 0; | |
612 | fKMinusEt = 0; | |
613 | fK0sEt = 0; | |
614 | fK0lEt = 0; | |
615 | ||
616 | fMuMinusEt = 0; | |
617 | fMuPlusEt = 0; | |
618 | ||
619 | fEMinusEt = 0; | |
620 | fEPlusEt = 0; | |
621 | ||
7b873813 | 622 | fGammaEt = 0; |
f61cec2f | 623 | |
624 | fProtonRemovedEt = 0; | |
625 | fAntiProtonRemovedEt = 0; | |
626 | ||
627 | fNeutronRemovedEt = 0; | |
628 | fAntiNeutronRemovedEt = 0; | |
629 | ||
630 | fPi0RemovedEt = 0; | |
631 | fPiPlusRemovedEt = 0; | |
632 | fPiMinusRemovedEt = 0; | |
633 | ||
634 | fKPlusRemovedEt = 0; | |
635 | fKMinusRemovedEt = 0; | |
636 | fK0sRemovedEt = 0; | |
637 | fK0lRemovedEt = 0; | |
638 | ||
639 | fMuMinusRemovedEt = 0; | |
640 | fMuPlusRemovedEt = 0; | |
641 | ||
642 | fEMinusRemovedEt = 0; | |
643 | fEPlusRemovedEt = 0; | |
644 | ||
645 | fGammaRemovedEt = 0; | |
646 | ||
647 | ||
648 | fProtonMult = 0; | |
649 | fAntiProtonMult = 0; | |
650 | ||
651 | fNeutronMult = 0; | |
652 | fAntiNeutronMult = 0; | |
653 | ||
654 | fPi0Mult = 0; | |
655 | fPiPlusMult = 0; | |
656 | fPiMinusMult = 0; | |
657 | ||
658 | fKPlusMult = 0; | |
659 | fKMinusMult = 0; | |
660 | fK0sMult = 0; | |
661 | fK0lMult = 0; | |
662 | ||
663 | fMuMinusMult = 0; | |
664 | fMuPlusMult = 0; | |
665 | ||
666 | fEMinusMult = 0; | |
667 | fEPlusMult = 0; | |
668 | ||
669 | fGammaMult = 0; | |
670 | ||
671 | fProtonRemovedMult = 0; | |
672 | fAntiProtonRemovedMult = 0; | |
673 | ||
674 | fNeutronRemovedMult = 0; | |
675 | fAntiNeutronRemovedMult = 0; | |
676 | ||
677 | fPi0RemovedMult = 0; | |
678 | fPiPlusRemovedMult = 0; | |
679 | fPiMinusRemovedMult = 0; | |
680 | ||
681 | fKPlusRemovedMult = 0; | |
682 | fKMinusRemovedMult = 0; | |
683 | fK0sRemovedMult = 0; | |
684 | fK0lRemovedMult = 0; | |
685 | ||
686 | fMuMinusRemovedMult = 0; | |
687 | fMuPlusRemovedMult = 0; | |
688 | ||
689 | fEMinusRemovedMult = 0; | |
690 | fEPlusRemovedMult = 0; | |
691 | ||
692 | fGammaRemovedMult = 0; | |
693 | ||
0065531a | 694 | return; |
2fbf38ac | 695 | } |
99a6613d | 696 | |
b2c10007 | 697 | Int_t AliAnalysisEt::ReadCorrections(TString filename) |
698 | { | |
699 | TFile *f = TFile::Open(filename, "READ"); | |
700 | if(f) | |
ef647350 | 701 | { |
b2c10007 | 702 | TString det = "Phos"; |
703 | if(fHistogramNameSuffix.Contains("Emcal")) | |
704 | { | |
705 | det = "Emcal"; | |
706 | } | |
2aab9269 | 707 | cout<<"Histo name suffix "<<fHistogramNameSuffix<<endl; |
b2c10007 | 708 | TString name = "TmCorrections" + det; |
709 | std::cout << name << std::endl; | |
710 | fTmCorrections = dynamic_cast<AliAnalysisEtTrackMatchCorrections*>(f->Get(name)); | |
711 | if(!fTmCorrections) | |
712 | { | |
4503e29d | 713 | cout<<"No corrections with name "<<name<<endl; |
b2c10007 | 714 | Printf("Could not load TM corrections"); |
715 | return -1; | |
716 | } | |
717 | name = "ReCorrections" + det; | |
718 | fReCorrections = dynamic_cast<AliAnalysisEtRecEffCorrection*>(f->Get(name)); | |
719 | if(!fReCorrections) | |
720 | { | |
721 | Printf("Could not load rec eff corrections"); | |
722 | return -1; | |
723 | } | |
724 | return 0; | |
ef647350 | 725 | } |
b2c10007 | 726 | return -1; |
727 | } | |
728 | ||
31c813d5 | 729 | Double_t AliAnalysisEt::CorrectForReconstructionEfficiency(const AliESDCaloCluster& cluster, Int_t cent) |
b2c10007 | 730 | { |
731 | Float_t pos[3]; | |
732 | cluster.GetPosition(pos); | |
733 | TVector3 cp(pos); | |
31c813d5 | 734 | Double_t corrEnergy = fReCorrections->CorrectedEnergy(cluster.E(), cent); |
f9a4ed81 | 735 | |
cfe23ff0 | 736 | //std::cout << "Original energy: " << cluster.E() << ", corrected energy: " << corrEnergy << std::endl; |
b2c10007 | 737 | return TMath::Sin(cp.Theta())*corrEnergy; |
ef647350 | 738 | } |
739 | ||
02d47689 | 740 | |
741 | Double_t AliAnalysisEt::CorrectForReconstructionEfficiency(const AliESDCaloCluster& cluster, Float_t eReco, Int_t cent) | |
742 | { | |
743 | Float_t pos[3]; | |
744 | cluster.GetPosition(pos); | |
745 | TVector3 cp(pos); | |
746 | Double_t corrEnergy = fReCorrections->CorrectedEnergy(eReco, cent); | |
747 | ||
748 | //std::cout << "Original energy: " << cluster.E() << ", corrected energy: " << corrEnergy << std::endl; | |
749 | return TMath::Sin(cp.Theta())*corrEnergy; | |
750 | } | |
751 |