]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/totEt/AliAnalysisEt.cxx
Implementing multiplicity dependent efficiency corrections
[u/mrichter/AliRoot.git] / PWGLF / totEt / AliAnalysisEt.cxx
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
10 #include "AliAnalysisEt.h"
11 #include "TMath.h"
12 #include "TList.h"
13 #include "TH1F.h"
14 #include "TH2F.h"
15 #include "TH1I.h" 
16 #include "TTree.h"
17 #include <iostream>
18 #include "AliAnalysisEtCuts.h"
19 #include "AliESDtrackCuts.h"
20 #include "AliESDCaloCluster.h"
21 #include "AliVEvent.h"
22 #include "Rtypes.h"
23 #include "TString.h"
24 #include "AliCentrality.h"
25 #include "AliAnalysisEtSelector.h"
26 #include "AliAnalysisEtTrackMatchCorrections.h"
27 #include "AliAnalysisEtRecEffCorrection.h"
28 #include "TFile.h"
29 #include "TVector3.h"
30
31 using namespace std;
32 ClassImp(AliAnalysisEt);
33
34 /* Auxiliary Histogram variables */
35 Int_t AliAnalysisEt::fgnumOfEtaBins = 16;
36 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};
37
38 Int_t AliAnalysisEt::fgNumOfPtBins = 111;
39 Float_t AliAnalysisEt::fgPtAxis[117]=
40    {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,
41         0.2, .22, .24, .26, .28, 0.30, 0.32, .34, .36, .38, 0.40, .42, .44, .46, .48,
42         0.5, .52, .54, .56, .58, 0.60, 0.62, .64, .66, .68, 0.70, .72, .74, .76, .78,
43         .80, .82, .84, .86, .88, 0.90, 0.92, .94, .96, .98, 1.00,1.05, 1.1,1.15, 1.2,
44         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,
45         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,
46         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,
47         20.0,25.0,30.0,35.0,40.0, 45.0, 50.0}; 
48
49 Int_t AliAnalysisEt::fgNumOfEBins = 78;
50 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,
51                                                                         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.,
52                                                                         12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.,25.,26.,27.,28.,29.,30.,31.,
53                                                                         32.,33.,34.,35.,36.,37.,38.,39.,40.,41.,42.,43.,44.,45.,46.,47.,48.,49.,50.};
54
55 Int_t AliAnalysisEt::fgNumOfRBins = 47;
56 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,
57                                                                         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};
58
59
60 AliAnalysisEt::AliAnalysisEt() : AliAnalysisEtCommon()
61                                ,fTmCorrections(0)
62                                ,fReCorrections(0)
63                                ,fEventSummaryTree(0)
64                                ,fAcceptedTree(0)
65                                ,fDepositTree(0)
66                                ,fTotEt(0)
67                                ,fTotEtAcc(0)
68                                ,fTotNeutralEt(0)
69                                ,fTotNeutralEtAcc(0)
70                                ,fTotChargedEt(0)
71                                ,fTotChargedEtAcc(0)
72                                ,fMultiplicity(0)
73                                ,fChargedMultiplicity(0)
74                                ,fNeutralMultiplicity(0)
75                                ,fProtonEt(0)
76                                ,fAntiProtonEt(0)
77                                ,fNeutronEt(0)
78                                ,fAntiNeutronEt(0)
79                                ,fPi0Et(0)
80                                ,fPiPlusEt(0)
81                                ,fPiMinusEt(0)
82                                ,fKPlusEt(0)
83                                ,fKMinusEt(0)
84                                ,fK0sEt(0)
85                                ,fK0lEt(0)
86                                ,fMuMinusEt(0)
87                                ,fMuPlusEt(0)
88                                ,fEMinusEt(0)
89                                ,fEPlusEt(0)
90                                ,fGammaEt(0)
91                                ,fProtonRemovedEt(0)
92                                ,fAntiProtonRemovedEt(0)
93                                ,fNeutronRemovedEt(0)
94                                ,fAntiNeutronRemovedEt(0)
95                                ,fPi0RemovedEt(0)
96                                ,fPiPlusRemovedEt(0)
97                                ,fPiMinusRemovedEt(0)
98                                ,fKPlusRemovedEt(0)
99                                ,fKMinusRemovedEt(0)
100                                ,fK0sRemovedEt(0)
101                                ,fK0lRemovedEt(0)
102                                ,fMuMinusRemovedEt(0)
103                                ,fMuPlusRemovedEt(0)
104                                ,fEMinusRemovedEt(0)
105                                ,fEPlusRemovedEt(0)
106                                ,fGammaRemovedEt(0)
107                                ,fProtonMult(0)
108                                ,fAntiProtonMult(0)
109                                ,fNeutronMult(0)
110                                ,fAntiNeutronMult(0)
111                                ,fPi0Mult(0)
112                                ,fPiPlusMult(0)
113                                ,fPiMinusMult(0)
114                                ,fKPlusMult(0)
115                                ,fKMinusMult(0)
116                                ,fK0sMult(0)
117                                ,fK0lMult(0)
118                                ,fMuMinusMult(0)
119                                ,fMuPlusMult(0)
120                                ,fEMinusMult(0)
121                                ,fEPlusMult(0)
122                                ,fGammaMult(0)
123                                ,fProtonRemovedMult(0)
124                                ,fAntiProtonRemovedMult(0)
125                                ,fNeutronRemovedMult(0)
126                                ,fAntiNeutronRemovedMult(0)
127                                ,fPi0RemovedMult(0)
128                                ,fPiPlusRemovedMult(0)
129                                ,fPiMinusRemovedMult(0)
130                                ,fKPlusRemovedMult(0)
131                                ,fKMinusRemovedMult(0)
132                                ,fK0sRemovedMult(0)
133                                ,fK0lRemovedMult(0)
134                                ,fMuMinusRemovedMult(0)
135                                ,fMuPlusRemovedMult(0)
136                                ,fEMinusRemovedMult(0)
137                                ,fEPlusRemovedMult(0)
138                                ,fGammaRemovedMult(0)
139                                ,fEnergyDeposited(0)
140                                ,fMomentumTPC(0)
141                                ,fCharge(0)
142                                ,fParticlePid(0)
143                                ,fPidProb(0)
144                                ,fTrackPassedCut(kFALSE)
145                                ,fCentClass(0)
146                                ,fDetectorRadius(0)
147                                ,fSingleCellEnergyCut(0)
148                                ,fChargedEnergyRemoved(0)
149                                ,fNeutralEnergyRemoved(0)
150                                ,fGammaEnergyAdded(0)
151                                ,fHistEt(0)
152                                ,fHistNeutralMult(0)
153                                ,fHistPhivsPtPos(0)
154                                ,fHistPhivsPtNeg(0)
155                                ,fCentrality(0)
156                                ,fMakeSparse(kFALSE)
157                                ,fCutFlow(0)
158                                ,fSelector(0)
159                
160 {}
161
162 AliAnalysisEt::~AliAnalysisEt()
163 {//Destructor
164   delete fTmCorrections;
165   delete fReCorrections;
166   if(fDepositTree){
167     fDepositTree->Clear();
168     delete fDepositTree; // optional TTree
169   }
170   if(fEventSummaryTree)
171   {
172     fEventSummaryTree->Clear();
173     delete fEventSummaryTree;
174   }
175   if(fAcceptedTree)
176   {
177     fAcceptedTree->Clear();
178     delete fAcceptedTree;
179   }
180   delete fHistEt; //Et spectrum
181   delete fHistNeutralMult; //Neutral multiplicity
182   delete fHistPhivsPtPos; //phi vs pT plot for positive tracks
183   delete fHistPhivsPtNeg; //phi vs pT Moplot for negative tracks
184   //delete fCentrality;//this code does not actually own AliCentrality so we don't have to worry about deleting it...  we just borrow it...
185   delete fCutFlow;
186   delete fSelector;
187 }
188
189 void AliAnalysisEt::FillOutputList(TList *list)
190 { // histograms to be added to output
191     list->Add(fHistEt);
192     list->Add(fHistNeutralMult);
193
194     list->Add(fHistPhivsPtPos);
195     list->Add(fHistPhivsPtNeg);
196
197     if (fCuts) {
198       if (fCuts->GetHistMakeTree()) {
199         //list->Add(fTree);
200         list->Add(fEventSummaryTree);
201       }
202       if (fCuts->GetHistMakeTreeDeposit()) {
203         list->Add(fDepositTree);
204       }
205     }
206     
207     list->Add(fCutFlow);
208
209 }
210
211 void AliAnalysisEt::Init()
212 {// clear variables, set up cuts and PDG info
213   AliAnalysisEtCommon::Init();
214   if(ReadCorrections("calocorrections.root") != 0)
215   {
216     // Shouldn't do this, why oh why are exceptions not allowed?
217     exit(-1);
218   }
219   ResetEventValues();
220 }
221
222 void AliAnalysisEt::CreateHistograms()
223 { // create histograms..
224   // histogram binning for E_T, p_T and Multiplicity: defaults for p+p
225   Int_t nbinsEt = 10000;
226   Double_t minEt = 0.0;
227   Double_t maxEt = 1000;
228   Int_t nbinsPt = 200;
229   Double_t minPt = 0;
230   Double_t maxPt = 20;
231   Int_t nbinsMult = 200;
232   Double_t minMult = -0.5; // offset -0.5 to have integer bins centered around 0
233   Double_t maxMult = nbinsMult + minMult; // 1 bin per integer value
234
235   // see if we should change histogram limits etc, and possibly create a tree
236   if (fCuts) {
237     if (fCuts->GetHistMakeTree()) {
238       CreateTrees();
239     }
240
241     nbinsMult = fCuts->GetHistNbinsMult();
242     minMult = fCuts->GetHistMinMult();
243     maxMult = fCuts->GetHistMaxMult();
244
245     nbinsEt = fCuts->GetHistNbinsTotEt();
246     minEt = fCuts->GetHistMinTotEt();
247     maxEt = fCuts->GetHistMaxTotEt();
248
249     nbinsPt = fCuts->GetHistNbinsParticlePt();
250     minPt = fCuts->GetHistMinParticlePt();
251     maxPt = fCuts->GetHistMaxParticlePt();
252   }
253
254     TString histname = "fHistEt" + fHistogramNameSuffix;
255     fHistEt = new TH1F(histname.Data(), "Total E_{T} Distribution", nbinsEt, minEt, maxEt);
256     fHistEt->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
257     fHistEt->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)");
258
259     histname = "fHistNeutralMult" + fHistogramNameSuffix;
260     fHistNeutralMult = new TH1F(histname.Data(), "Neutral Multiplicity", nbinsMult, minMult, maxMult);
261     fHistNeutralMult->GetXaxis()->SetTitle("N");
262     fHistNeutralMult->GetYaxis()->SetTitle("Multiplicity");
263
264     histname = "fHistPhivsPtPos" + fHistogramNameSuffix;
265     fHistPhivsPtPos = new TH2F(histname.Data(), "Phi vs pT of positively charged tracks hitting the calorimeter",       200, 0, 2*TMath::Pi(), nbinsPt, minPt, maxPt);
266
267     histname = "fHistPhivsPtNeg" + fHistogramNameSuffix;
268     fHistPhivsPtNeg = new TH2F(histname.Data(), "Phi vs pT of negatively charged tracks hitting the calorimeter",       200, 0, 2*TMath::Pi(), nbinsPt, minPt, maxPt);
269
270     histname = "fCutFlow" + fHistogramNameSuffix;
271     fCutFlow = new TH1I(histname, histname, 20, -0.5, 19.5);
272 }
273
274 TH2F* AliAnalysisEt::CreateEtaEHisto2D(TString name, TString title, TString ztitle)
275 {     //creates a 2-d histogram in eta and E and adds it to the list of histograms to be saved
276         TString histoname   = name + fHistogramNameSuffix;
277         
278         TH2F *histo = new TH2F(histoname.Data(),title.Data(),fgNumOfEBins, fgEAxis, fgnumOfEtaBins, fgEtaAxis);
279         histo->SetYTitle("#eta");
280         histo->SetXTitle("E (GeV)");
281         histo->SetZTitle(ztitle.Data());
282         histo->Sumw2();
283         
284         return histo; 
285 }
286
287
288 TH2F* AliAnalysisEt::CreateEtaPtHisto2D(TString name, TString title, TString ztitle)
289 {     //creates a 2-d histogram in eta and phi and adds it to the list of histograms to be saved
290         TString histoname   = name + fHistogramNameSuffix;
291         
292         TH2F *histo = new TH2F(histoname.Data(),title.Data(),fgNumOfPtBins, fgPtAxis, fgnumOfEtaBins, fgEtaAxis);
293         histo->SetYTitle("#eta");
294         histo->SetXTitle("p_{T}");
295         histo->SetZTitle(ztitle.Data());
296         histo->Sumw2();
297         
298         return histo; 
299 }
300
301 TH2F* AliAnalysisEt::CreateEtaEtHisto2D(TString name, TString title, TString ztitle)
302 {     //creates a 2-d histogram in eta and phi and adds it to the list of histograms to be saved
303         TString histoname   = name + fHistogramNameSuffix;
304         
305         TH2F *histo = new TH2F(histoname.Data(),title.Data(),fgNumOfEBins, fgEAxis, fgnumOfEtaBins, fgEtaAxis);
306         histo->SetYTitle("#eta");
307         histo->SetXTitle("E_{T}");
308         histo->SetZTitle(ztitle.Data());
309         histo->Sumw2();
310         
311         return histo; 
312 }
313
314 TH2F* AliAnalysisEt::CreateResEHisto2D(TString name, TString title, TString ztitle)
315 {     //creates a 2-d histogram in eta and E and adds it to the list of histograms to be saved
316         TString histoname   = name + fHistogramNameSuffix;
317         
318         TH2F *histo = new TH2F(histoname.Data(),title.Data(),fgNumOfEBins, fgEAxis, fgNumOfRBins, fgRAxis);
319         histo->SetYTitle("R");
320         histo->SetXTitle("E (GeV)");
321         histo->SetZTitle(ztitle.Data());
322         histo->Sumw2();
323         
324         return histo; 
325 }
326
327
328 TH2F* AliAnalysisEt::CreateResPtHisto2D(TString name, TString title, TString ztitle)
329 {     //creates a 2-d histogram in eta and phi and adds it to the list of histograms to be saved
330         TString histoname   = name + fHistogramNameSuffix;
331         
332         TH2F *histo = new TH2F(histoname.Data(),title.Data(),fgNumOfPtBins, fgPtAxis, fgNumOfRBins, fgRAxis);
333         histo->SetYTitle("R");
334         histo->SetXTitle("p_{T}");
335         histo->SetZTitle(ztitle.Data());
336         histo->Sumw2();
337         
338         return histo; 
339 }
340
341 THnSparseF* AliAnalysisEt::CreateClusterHistoSparse(TString name, TString title)
342 {     //creates a 2D sparse histogram
343         TString histoname   = name + fHistogramNameSuffix;
344         
345         Int_t nBins[4] = {200,200,240,20};
346         Double_t min[4] = {0.,-1.,70.,0.5};
347         Double_t max[4] = {50.,1.,190,20.5};
348         
349         THnSparseF *histo = new THnSparseF(histoname.Data(),title.Data(),4,nBins,min, max);
350     histo->GetAxis(0)->SetTitle("E");
351     histo->GetAxis(1)->SetTitle("#eta_{cluster}");
352     histo->GetAxis(2)->SetTitle("#phi_{cluster}");
353     histo->GetAxis(3)->SetTitle("n_{cells}");
354         histo->Sumw2();
355         
356         return histo; 
357 }
358
359 THnSparseF* AliAnalysisEt::CreateNeutralPartHistoSparse(TString name, TString title)
360 {     //creates a sparse neutral particle histogram
361         TString histoname   = name + fHistogramNameSuffix;
362         
363         Int_t nBins[6] = {20,200,200,200,240,20};
364         Double_t min[6] = {-1.,0.,0.,-1.,70.,0.5};
365         Double_t max[6] = {1.,50.,50.,1.,190,20.5};
366         
367         THnSparseF *histo = new THnSparseF(histoname.Data(),title.Data(),6,nBins,min, max);
368     histo->GetAxis(0)->SetTitle("#eta");
369     histo->GetAxis(1)->SetTitle("p_{T}");
370     histo->GetAxis(2)->SetTitle("E");
371     histo->GetAxis(3)->SetTitle("#eta_{cluster}");
372     histo->GetAxis(4)->SetTitle("#phi_{cluster}");
373     histo->GetAxis(5)->SetTitle("n_{cells}");
374         histo->Sumw2();
375         
376         return histo; 
377 }
378
379 THnSparseF* AliAnalysisEt::CreateChargedPartHistoSparse(TString name, TString title)
380 {     //creates a sparse charged particle histogram
381         TString histoname   = name + fHistogramNameSuffix;
382         
383         Int_t nBins[7] = {20,200,200,200,240,20,100};
384         Double_t min[7] = {-1.,0.,0.,-1.,70.,0.5,0.};
385         Double_t max[7] = {1.,50.,50.,1.,190,20.5,0.1};
386         
387         THnSparseF *histo = new THnSparseF(histoname.Data(),title.Data(),7,nBins,min, max);
388     histo->GetAxis(0)->SetTitle("#eta");
389     histo->GetAxis(1)->SetTitle("p_{T}");
390     histo->GetAxis(2)->SetTitle("E");
391     histo->GetAxis(3)->SetTitle("#eta_{cluster}");
392     histo->GetAxis(4)->SetTitle("#phi_{cluster}");
393     histo->GetAxis(5)->SetTitle("n_{cells}");
394     histo->GetAxis(6)->SetTitle("R_{match}");
395         histo->Sumw2();
396         
397         return histo; 
398 }
399
400
401 void AliAnalysisEt::CreateTrees()
402 { // create tree..
403   TString treename = "fEventSummaryTree" + fHistogramNameSuffix;
404   if(fCuts->GetHistMakeTree())
405   {
406   
407     fEventSummaryTree = new TTree(treename, treename);
408     fEventSummaryTree->Branch("fTotEt",&fTotEt,"fTotEt/D");
409     fEventSummaryTree->Branch("fTotEtAcc",&fTotEtAcc,"fTotEtAcc/D");
410     fEventSummaryTree->Branch("fTotNeutralEt",&fTotNeutralEt,"fTotNeutralEt/D");
411     fEventSummaryTree->Branch("fTotNeutralEtAcc",&fTotNeutralEtAcc,"fTotNeutralEtAcc/D");
412     fEventSummaryTree->Branch("fTotChargedEt",&fTotChargedEt,"fTotChargedEt/D");
413     fEventSummaryTree->Branch("fTotChargedEtAcc",&fTotChargedEtAcc,"fTotChargedEtAcc/D");
414     fEventSummaryTree->Branch("fMultiplicity",&fMultiplicity,"fMultiplicity/I");
415     fEventSummaryTree->Branch("fChargedMultiplicity",&fChargedMultiplicity,"fChargedMultiplicity/I");
416     fEventSummaryTree->Branch("fNeutralMultiplicity",&fNeutralMultiplicity,"fNeutralMultiplicity/I");
417     fEventSummaryTree->Branch("fCentClass",&fCentClass,"fCentClass/I");
418     fEventSummaryTree->Branch("fChargedEnergyRemoved", &fChargedEnergyRemoved, "fChargedEnergyRemoved/D");
419     fEventSummaryTree->Branch("fNeutralEnergyRemoved", &fNeutralEnergyRemoved, "fNeutralEnergyRemoved/D");
420     fEventSummaryTree->Branch("fGammaEnergyAdded", &fGammaEnergyAdded, "fGammaEnergyAdded/D");
421     
422
423     fEventSummaryTree->Branch("fProtonEt",&fProtonEt,"fProtonEt/D");
424     fEventSummaryTree->Branch("fAntiProtonEt",&fAntiProtonEt,"fAntiProtonEt/D");
425
426     fEventSummaryTree->Branch("fNeutronEt",&fNeutronEt,"fNeutronEt/D");
427     fEventSummaryTree->Branch("fAntiNeutronEt",&fAntiNeutronEt,"fAntiNeutronEt/D");
428
429     fEventSummaryTree->Branch("fPi0Et",&fPi0Et,"fPi0Et/D");
430     fEventSummaryTree->Branch("fPiPlusEt",&fPiPlusEt,"fPiPlusEt/D");
431     fEventSummaryTree->Branch("fPiMinusEt",&fPiMinusEt,"fPiMinusEt/D");
432
433     fEventSummaryTree->Branch("fKPlusEt",&fKPlusEt,"fKPlusEt/D");
434     fEventSummaryTree->Branch("fKMinusEt",&fKMinusEt,"fKMinusEt/D");
435     fEventSummaryTree->Branch("fK0sEt",&fK0sEt,"fK0sEt/D");
436     fEventSummaryTree->Branch("fK0lEt",&fK0lEt,"fK0lEt/D");
437
438     fEventSummaryTree->Branch("fMuMinusEt",&fMuMinusEt,"fMuMinusEt/D");
439     fEventSummaryTree->Branch("fMuPlusEt",&fMuPlusEt,"fMuPlusEt/D");
440     
441     fEventSummaryTree->Branch("fEMinusEt",&fEMinusEt,"fEMinusEt/D");
442     fEventSummaryTree->Branch("fEPlusEt",&fEPlusEt,"fEPlusEt/D");
443     
444     fEventSummaryTree->Branch("fGammaEt", &fGammaEt, "fGammaEt/D");
445     
446     fEventSummaryTree->Branch("fProtonRemovedEt",&fProtonRemovedEt,"fProtonRemovedEt/D");
447     fEventSummaryTree->Branch("fAntiProtonRemovedEt",&fAntiProtonRemovedEt,"fAntiProtonRemovedEt/D");
448
449     fEventSummaryTree->Branch("fNeutronRemovedEt",&fNeutronRemovedEt,"fNeutronRemovedEt/D");
450     fEventSummaryTree->Branch("fAntiNeutronRemovedEt",&fAntiNeutronRemovedEt,"fAntiNeutronRemovedEt/D");
451
452     fEventSummaryTree->Branch("fPi0RemovedEt",&fPi0RemovedEt,"fPi0RemovedEt/D");
453     fEventSummaryTree->Branch("fPiPlusRemovedEt",&fPiPlusRemovedEt,"fPiPlusRemovedEt/D");
454     fEventSummaryTree->Branch("fPiMinusRemovedEt",&fPiMinusRemovedEt,"fPiMinusRemovedEt/D");
455
456     fEventSummaryTree->Branch("fKPlusRemovedEt",&fKPlusRemovedEt,"fKPlusRemovedEt/D");
457     fEventSummaryTree->Branch("fKMinusRemovedEt",&fKMinusEt,"fKMinusRemovedEt/D");
458     fEventSummaryTree->Branch("fK0sRemovedEt",&fK0sEt,"fK0sRemovedEt/D");
459     fEventSummaryTree->Branch("fK0lRemovedEt",&fK0lRemovedEt,"fK0lRemovedEt/D");
460
461     fEventSummaryTree->Branch("fMuMinusRemovedEt",&fMuMinusRemovedEt,"fMuMinusRemovedEt/D");
462     fEventSummaryTree->Branch("fMuPlusRemovedEt",&fMuPlusRemovedEt,"fMuPlusRemovedEt/D");
463     
464     fEventSummaryTree->Branch("fEMinusRemovedEt",&fEMinusRemovedEt,"fEMinusRemovedEt/D");
465     fEventSummaryTree->Branch("fEPlusRemovedEt",&fEPlusRemovedEt,"fEPlusRemovedEt/D");
466     
467     fEventSummaryTree->Branch("fGammaRemovedEt", &fGammaRemovedEt, "fGammaEtRemoved/D");
468
469     fEventSummaryTree->Branch("fProtonMult",&fProtonMult,"fProtonMult/D");
470     fEventSummaryTree->Branch("fAntiProtonMult",&fAntiProtonMult,"fAntiProtonMult/D");
471
472     fEventSummaryTree->Branch("fNeutronMult",&fNeutronMult,"fNeutronMult/D");
473     fEventSummaryTree->Branch("fAntiNeutronMult",&fAntiNeutronMult,"fAntiNeutronMult/D");
474
475     fEventSummaryTree->Branch("fPi0Mult",&fPi0Mult,"fPi0Mult/D");
476     fEventSummaryTree->Branch("fPiPlusMult",&fPiPlusMult,"fPiPlusMult/D");
477     fEventSummaryTree->Branch("fPiMinusMult",&fPiMinusMult,"fPiMinusMult/D");
478
479     fEventSummaryTree->Branch("fKPlusMult",&fKPlusMult,"fKPlusMult/D");
480     fEventSummaryTree->Branch("fKMinusMult",&fKMinusMult,"fKMinusMult/D");
481     fEventSummaryTree->Branch("fK0sMult",&fK0sMult,"fK0sMult/D");
482     fEventSummaryTree->Branch("fK0lMult",&fK0lMult,"fK0lMult/D");
483
484     fEventSummaryTree->Branch("fMuMinusMult",&fMuMinusMult,"fMuMinusMult/D");
485     fEventSummaryTree->Branch("fMuPlusMult",&fMuPlusMult,"fMuPlusMult/D");
486     
487     fEventSummaryTree->Branch("fEMinusMult",&fEMinusMult,"fEMinusMult/D");
488     fEventSummaryTree->Branch("fEPlusMult",&fEPlusMult,"fEPlusMult/D");
489     
490     fEventSummaryTree->Branch("fGammaMult", &fGammaMult, "fGammaMult/D");
491     
492     fEventSummaryTree->Branch("fProtonRemovedMult",&fProtonRemovedMult,"fProtonRemovedMult/D");
493     fEventSummaryTree->Branch("fAntiProtonRemovedMult",&fAntiProtonRemovedMult,"fAntiProtonRemovedMult/D");
494
495     fEventSummaryTree->Branch("fNeutronRemovedMult",&fNeutronRemovedMult,"fNeutronRemovedMult/D");
496     fEventSummaryTree->Branch("fAntiNeutronRemovedMult",&fAntiNeutronRemovedMult,"fAntiNeutronRemovedMult/D");
497
498     fEventSummaryTree->Branch("fPi0RemovedMult",&fPi0RemovedMult,"fPi0RemovedMult/D");
499     fEventSummaryTree->Branch("fPiPlusRemovedMult",&fPiPlusRemovedMult,"fPiPlusRemovedMult/D");
500     fEventSummaryTree->Branch("fPiMinusRemovedMult",&fPiMinusRemovedMult,"fPiMinusRemovedMult/D");
501
502     fEventSummaryTree->Branch("fKPlusRemovedMult",&fKPlusRemovedMult,"fKPlusRemovedMult/D");
503     fEventSummaryTree->Branch("fKMinusRemovedMult",&fKMinusMult,"fKMinusRemovedMult/D");
504     fEventSummaryTree->Branch("fK0sRemovedMult",&fK0sMult,"fK0sRemovedMult/D");
505     fEventSummaryTree->Branch("fK0lRemovedMult",&fK0lRemovedMult,"fK0lRemovedMult/D");
506
507     fEventSummaryTree->Branch("fMuMinusRemovedMult",&fMuMinusRemovedMult,"fMuMinusRemovedMult/D");
508     fEventSummaryTree->Branch("fMuPlusRemovedMult",&fMuPlusRemovedMult,"fMuPlusRemovedMult/D");
509     
510     fEventSummaryTree->Branch("fEMinusRemovedMult",&fEMinusRemovedMult,"fEMinusRemovedMult/D");
511     fEventSummaryTree->Branch("fEPlusRemovedMult",&fEPlusRemovedMult,"fEPlusRemovedMult/D");
512     
513     fEventSummaryTree->Branch("fGammaRemovedMult", &fGammaRemovedMult, "fGammaMultRemoved/D");
514
515     
516     
517   }
518   
519   if(fCuts->GetHistMakeTreeDeposit())
520   {
521     treename = "fTreeDeposit" + fHistogramNameSuffix;
522     fDepositTree = new TTree(treename, treename);
523   
524     fDepositTree->Branch("fEnergyDeposited", &fEnergyDeposited, "fEnergyDeposited/F");
525     fDepositTree->Branch("fMomentumTPC", &fMomentumTPC, "fMomentumTPC/F");
526     fDepositTree->Branch("fCharge", &fCharge, "fCharge/S");
527     fDepositTree->Branch("fParticlePid", &fParticlePid, "fParticlePid/S");
528     fDepositTree->Branch("fPidProb", &fPidProb, "fPidProb/F");
529     fDepositTree->Branch("fTrackPassedCut", &fTrackPassedCut, "fTrackPassedCut/B");
530   }
531
532   return;
533 }
534 void AliAnalysisEt::FillHistograms()
535 { // fill histograms..
536     fHistEt->Fill(fTotEt);
537
538     fHistNeutralMult->Fill(fNeutralMultiplicity);
539
540     if (fCuts) {
541       if (fCuts->GetHistMakeTree()) {
542         fEventSummaryTree->Fill();
543       }
544     }
545     if(fCuts)
546     {
547       if(fCuts->GetHistMakeTreeDeposit())
548       {
549         fDepositTree->Fill();
550       }
551     }
552       
553 }
554
555 Int_t AliAnalysisEt::AnalyseEvent(AliVEvent *event)
556 { //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.
557   AliAnalysisEtCommon::AnalyseEvent(event);
558   //fSelector->SetEvent(event);
559   ResetEventValues();
560   return 0;
561 }
562
563 void AliAnalysisEt::ResetEventValues()
564 { // clear
565   AliAnalysisEtCommon::ResetEventValues();
566   fTotEt = 0;
567   fTotEtAcc = 0;
568   fTotNeutralEt = 0;
569   fTotChargedEt = 0;
570   fTotNeutralEtAcc = 0;
571   fTotChargedEtAcc  = 0;
572   fMultiplicity = 0;
573   fChargedMultiplicity = 0;
574   fNeutralMultiplicity = 0;
575   
576   fProtonEt = 0;
577   fAntiProtonEt = 0;
578   
579   fNeutronEt = 0;
580   fAntiNeutronEt = 0;
581   
582   fPi0Et = 0;
583   fPiPlusEt = 0;
584   fPiMinusEt = 0;
585   
586   fKPlusEt = 0;
587   fKMinusEt = 0;
588   fK0sEt = 0;
589   fK0lEt = 0;
590   
591   fMuMinusEt = 0;
592   fMuPlusEt = 0;
593   
594   fEMinusEt = 0;
595   fEPlusEt = 0;
596   
597   fGammaEt = 0;
598   
599   fProtonRemovedEt = 0;
600   fAntiProtonRemovedEt = 0;
601   
602   fNeutronRemovedEt = 0;
603   fAntiNeutronRemovedEt = 0;
604   
605   fPi0RemovedEt = 0;
606   fPiPlusRemovedEt = 0;
607   fPiMinusRemovedEt = 0;
608   
609   fKPlusRemovedEt = 0;
610   fKMinusRemovedEt = 0;
611   fK0sRemovedEt = 0;
612   fK0lRemovedEt = 0;
613   
614   fMuMinusRemovedEt = 0;
615   fMuPlusRemovedEt = 0;
616   
617   fEMinusRemovedEt = 0;
618   fEPlusRemovedEt = 0;
619   
620   fGammaRemovedEt = 0;
621   
622   
623   fProtonMult = 0;
624   fAntiProtonMult = 0;
625   
626   fNeutronMult = 0;
627   fAntiNeutronMult = 0;
628   
629   fPi0Mult = 0;
630   fPiPlusMult = 0;
631   fPiMinusMult = 0;
632   
633   fKPlusMult = 0;
634   fKMinusMult = 0;
635   fK0sMult = 0;
636   fK0lMult = 0;
637   
638   fMuMinusMult = 0;
639   fMuPlusMult = 0;
640   
641   fEMinusMult = 0;
642   fEPlusMult = 0;
643   
644   fGammaMult = 0;
645   
646   fProtonRemovedMult = 0;
647   fAntiProtonRemovedMult = 0;
648   
649   fNeutronRemovedMult = 0;
650   fAntiNeutronRemovedMult = 0;
651   
652   fPi0RemovedMult = 0;
653   fPiPlusRemovedMult = 0;
654   fPiMinusRemovedMult = 0;
655   
656   fKPlusRemovedMult = 0;
657   fKMinusRemovedMult = 0;
658   fK0sRemovedMult = 0;
659   fK0lRemovedMult = 0;
660   
661   fMuMinusRemovedMult = 0;
662   fMuPlusRemovedMult = 0;
663   
664   fEMinusRemovedMult = 0;
665   fEPlusRemovedMult = 0;
666   
667   fGammaRemovedMult = 0;
668   
669   return;
670 }
671
672 Int_t AliAnalysisEt::ReadCorrections(TString filename)
673 {
674   TFile *f = TFile::Open(filename, "READ");
675   if(f)
676   {
677     TString det = "Phos";
678     if(fHistogramNameSuffix.Contains("Emcal"))
679     {
680       det = "Emcal";
681     }
682     cout<<"Histo name suffix "<<fHistogramNameSuffix<<endl;
683     TString name = "TmCorrections" + det;
684     std::cout << name << std::endl;
685     fTmCorrections = dynamic_cast<AliAnalysisEtTrackMatchCorrections*>(f->Get(name));
686     if(!fTmCorrections)
687     {
688       cout<<"No corrections with name "<<name<<endl;
689       Printf("Could not load TM corrections");
690       return -1;
691     }
692     name = "ReCorrections" + det;
693     fReCorrections = dynamic_cast<AliAnalysisEtRecEffCorrection*>(f->Get(name));
694     if(!fReCorrections)
695     {
696       Printf("Could not load rec eff corrections");
697       return -1;
698     }
699     return 0;
700   }
701  return -1; 
702 }
703
704 Double_t AliAnalysisEt::CorrectForReconstructionEfficiency(const AliESDCaloCluster& cluster, int mult)
705 {
706   Float_t pos[3];
707   cluster.GetPosition(pos);
708   TVector3 cp(pos);
709   Double_t corrEnergy = fReCorrections->CorrectedEnergy(cluster.E(), mult);
710   
711   //std::cout << "Original energy: " << cluster.E() << ", corrected energy: " << corrEnergy << std::endl;
712   return TMath::Sin(cp.Theta())*corrEnergy;
713 }
714