]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalHighMultTrigger.cxx
classes for trigger studies
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskEmcalHighMultTrigger.cxx
1 // $Id$
2 //
3 // High multiplicity pp trigger analysis task.
4 //
5 // Author: M. Verweij
6
7 #include <TClonesArray.h>
8 #include <TH1F.h>
9 #include <TH2F.h>
10 #include <TH3F.h>
11 #include <TList.h>
12 #include <TLorentzVector.h>
13
14 #include "AliLog.h"
15 #include "AliEmcalTriggerPatchInfo.h"
16 #include "AliParticleContainer.h"
17 #include "AliVVZERO.h"
18
19 #include "AliAnalysisTaskEmcalHighMultTrigger.h"
20
21 ClassImp(AliAnalysisTaskEmcalHighMultTrigger)
22
23 //________________________________________________________________________
24 AliAnalysisTaskEmcalHighMultTrigger::AliAnalysisTaskEmcalHighMultTrigger() : 
25   AliAnalysisTaskEmcalJet("AliAnalysisTaskEmcalHighMultTrigger", kTRUE),
26   fNExLP(1),
27   fNAccPatches(-1),
28   fMedianEnergy(0),
29   fMedianEnergyExLP(0),
30   fSumEnergy(0),
31   fSumEnergyExLP(0),
32   fHistPatchEtaPhi(0),
33   fHistEnergyMedian(0),
34   fHistEnergyMedianExLP(0),
35   fHistEnergySum(0),
36   fHistEnergySumExLP(0),
37   fHistTracks(0),
38   fHistTracklets(0),
39   fHistV0MultSum(0),
40   fHistTracksTracklets(0),
41   fHistTracksV0MultSum(0)
42 {
43   // Default constructor.
44
45   const Int_t nMultEst = 3;
46   for(Int_t i = 0; i<nMultEst; i++) {
47     fHistEnergyMedianEst[i] = 0;
48     fHistEnergyMedianExLPEst[i] = 0;
49     fHistEnergySumEst[i] = 0;
50     fHistEnergySumExLPEst[i] = 0;
51     fHistEnergySumAvgEst[i] = 0;
52     fHistEnergySumAvgExLPEst[i] = 0;
53   }
54
55   SetMakeGeneralHistograms(kTRUE);
56 }
57
58 //________________________________________________________________________
59 AliAnalysisTaskEmcalHighMultTrigger::AliAnalysisTaskEmcalHighMultTrigger(const char *name) : 
60   AliAnalysisTaskEmcalJet(name, kTRUE),
61   fNExLP(1),
62   fNAccPatches(-1),
63   fMedianEnergy(0),
64   fMedianEnergyExLP(0),
65   fSumEnergy(0),
66   fSumEnergyExLP(0),
67   fHistPatchEtaPhi(0),
68   fHistEnergyMedian(0),
69   fHistEnergyMedianExLP(0),
70   fHistEnergySum(0),
71   fHistEnergySumExLP(0),
72   fHistTracks(0),
73   fHistTracklets(0),
74   fHistV0MultSum(0),
75   fHistTracksTracklets(0),
76   fHistTracksV0MultSum(0)
77 {
78   // Standard constructor.
79
80   const Int_t nMultEst = 3;
81   for(Int_t i = 0; i<nMultEst; i++) {
82     fHistEnergyMedianEst[i] = 0;
83     fHistEnergyMedianExLPEst[i] = 0;
84     fHistEnergySumEst[i] = 0;
85     fHistEnergySumExLPEst[i] = 0;
86     fHistEnergySumAvgEst[i] = 0;
87     fHistEnergySumAvgExLPEst[i] = 0;
88   }
89
90   SetMakeGeneralHistograms(kTRUE);
91 }
92
93 //________________________________________________________________________
94 AliAnalysisTaskEmcalHighMultTrigger::~AliAnalysisTaskEmcalHighMultTrigger()
95 {
96   // Destructor.
97 }
98
99 //________________________________________________________________________
100 void AliAnalysisTaskEmcalHighMultTrigger::UserCreateOutputObjects()
101 {
102   // Create user output.
103
104   AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
105
106   Int_t nE = 500;
107   Double_t minE = 0.;
108   Double_t maxE = 50.;
109
110   TString histName = "";
111   TString histTitle = "";
112
113   histName = Form("fHistPatchEtaPhi");
114   histTitle = Form("%s;#eta;#phi",histName.Data());
115   fHistPatchEtaPhi = new TH2F(histName.Data(),histTitle.Data(),100,-1.,1.,18*8,0.,TMath::TwoPi());
116   fOutput->Add(fHistPatchEtaPhi);
117
118   histName = Form("fHistEnergyMedian");
119   histTitle = Form("%s;med[#it{E}]",histName.Data());
120   fHistEnergyMedian = new TH1F(histName.Data(),histTitle.Data(),nE,minE,maxE/4.);
121   fOutput->Add(fHistEnergyMedian);
122
123   histName = Form("fHistEnergyMedianExLP");
124   histTitle = Form("%s;med[#it{E}]",histName.Data());
125   fHistEnergyMedianExLP = new TH1F(histName.Data(),histTitle.Data(),nE,minE,maxE/4.);
126   fOutput->Add(fHistEnergyMedianExLP);
127
128   histName = Form("fHistEnergySum");
129   histTitle = Form("%s;#sum[#it{E}]",histName.Data());
130   fHistEnergySum = new TH1F(histName.Data(),histTitle.Data(),nE,minE,maxE);
131   fOutput->Add(fHistEnergySum);
132
133   histName = Form("fHistEnergySumExLP");
134   histTitle = Form("%s;#sum[#it{E}]",histName.Data());
135   fHistEnergySumExLP = new TH1F(histName.Data(),histTitle.Data(),nE,minE,maxE);
136   fOutput->Add(fHistEnergySumExLP);
137
138   histName = Form("fHistTracks");
139   histTitle = Form("%s;#it{N}_{tracks}",histName.Data());
140   fHistTracks = new TH1F(histName.Data(),histTitle.Data(),300,0.,300.);
141   fOutput->Add(fHistTracks);
142
143   histName = Form("fHistTracklets");
144   histTitle = Form("%s;#it{N}_{tracklets}",histName.Data());
145   fHistTracklets = new TH1F(histName.Data(),histTitle.Data(),300,0.,300.);
146   fOutput->Add(fHistTracklets);
147
148   histName = Form("fHistV0MultSum");
149   histTitle = Form("%s;mult[V0A+V0C]",histName.Data());
150   fHistV0MultSum = new TH1F(histName.Data(),histTitle.Data(),500,0.,500.);
151   fOutput->Add(fHistV0MultSum);
152
153   const Int_t nMultEst = 3;
154   Int_t nBinsMultEst[nMultEst] = {300,300,500};
155   Double_t multEstMax[nMultEst] = {300.,300.,500.};
156   TString strMultEst[nMultEst] = {"Tracks","Tracklets","V0MultSum"};
157   for(Int_t i = 0; i<nMultEst; i++) {
158     histName = Form("fHistEnergyMedianEst%s",strMultEst[i].Data());
159     histTitle = Form("%s;med[#it{E}];%s",histName.Data(),strMultEst[i].Data());
160     fHistEnergyMedianEst[i] = new TH2F(histName.Data(),histTitle.Data(),nE,minE,maxE/4.,nBinsMultEst[i],0.,multEstMax[i]);
161     fOutput->Add(fHistEnergyMedianEst[i]);
162
163     histName = Form("fHistEnergyMedianExLPEst%s",strMultEst[i].Data());
164     histTitle = Form("%s;med[#it{E}];%s",histName.Data(),strMultEst[i].Data());
165     fHistEnergyMedianExLPEst[i] = new TH2F(histName.Data(),histTitle.Data(),nE,minE,maxE/4.,nBinsMultEst[i],0.,multEstMax[i]);
166     fOutput->Add(fHistEnergyMedianExLPEst[i]);
167
168     histName = Form("fHistEnergySumEst%s",strMultEst[i].Data());
169     histTitle = Form("%s;#sum[#it{E}];%s",histName.Data(),strMultEst[i].Data());
170     fHistEnergySumEst[i] = new TH2F(histName.Data(),histTitle.Data(),nE,minE,maxE,nBinsMultEst[i],0.,multEstMax[i]);
171     fOutput->Add(fHistEnergySumEst[i]);
172
173     histName = Form("fHistEnergySumExLPEst%s",strMultEst[i].Data());
174     histTitle = Form("%s;#sum[#it{E}];%s",histName.Data(),strMultEst[i].Data());
175     fHistEnergySumExLPEst[i] = new TH2F(histName.Data(),histTitle.Data(),nE,minE,maxE,nBinsMultEst[i],0.,multEstMax[i]);
176     fOutput->Add(fHistEnergySumExLPEst[i]);
177
178     histName = Form("fHistEnergySumAvgEst%s",strMultEst[i].Data());
179     histTitle = Form("%s;#sum[#it{E}];%s",histName.Data(),strMultEst[i].Data());
180     fHistEnergySumAvgEst[i] = new TH2F(histName.Data(),histTitle.Data(),nE,minE,maxE/4.,nBinsMultEst[i],0.,multEstMax[i]);
181     fOutput->Add(fHistEnergySumAvgEst[i]);
182
183     histName = Form("fHistEnergySumAvgExLPEst%s",strMultEst[i].Data());
184     histTitle = Form("%s;#sum[#it{E}];%s",histName.Data(),strMultEst[i].Data());
185     fHistEnergySumAvgExLPEst[i] = new TH2F(histName.Data(),histTitle.Data(),nE,minE,maxE/4.,nBinsMultEst[i],0.,multEstMax[i]);
186     fOutput->Add(fHistEnergySumAvgExLPEst[i]);
187   }
188
189   histName = Form("fHistTracksTracklets");
190   histTitle = Form("%s;%s;%s",histName.Data(),strMultEst[0].Data(),strMultEst[1].Data());
191   fHistTracksTracklets = new TH2F(histName.Data(),histTitle.Data(),nBinsMultEst[0],0.,multEstMax[0],nBinsMultEst[1],0.,multEstMax[1]);
192   fOutput->Add(fHistTracksTracklets);
193
194   histName = Form("fHistTracksV0MultSum");
195   histTitle = Form("%s;%s;%s",histName.Data(),strMultEst[0].Data(),strMultEst[2].Data());
196   fHistTracksV0MultSum = new TH2F(histName.Data(),histTitle.Data(),nBinsMultEst[0],0.,multEstMax[0],nBinsMultEst[2],0.,multEstMax[2]);
197   fOutput->Add(fHistTracksV0MultSum);
198
199   PostData(1, fOutput); // Post data for ALL output slots > 0 here.
200 }
201
202 //________________________________________________________________________
203 Bool_t AliAnalysisTaskEmcalHighMultTrigger::FillHistograms()
204 {
205   // Fill histograms.
206
207   fHistEnergyMedian->Fill(fMedianEnergy);
208   fHistEnergyMedianExLP->Fill(fMedianEnergyExLP);
209   fHistEnergySum->Fill(fSumEnergy);
210   fHistEnergySumExLP->Fill(fSumEnergyExLP);
211
212
213   //Multiplicity estimators
214   Int_t nTracks   = -1;
215   if (GetParticleContainer(0)) nTracks = GetParticleContainer(0)->GetNAcceptedParticles();
216   Int_t nTracklets = InputEvent()->GetMultiplicity()->GetNumberOfTracklets();
217
218   AliVVZERO* vV0 = InputEvent()->GetVZEROData();
219   Float_t multV0A=vV0->GetMTotV0A();
220   Float_t multV0C=vV0->GetMTotV0C();
221
222   fHistTracks->Fill(nTracks);
223   fHistTracklets->Fill(nTracklets);
224   fHistV0MultSum->Fill(multV0A+multV0C);
225
226   const Int_t nMultEst = 3;
227   Float_t multEst[nMultEst] = {(Float_t)(nTracks),(Float_t)(nTracklets),(Float_t)(multV0A+multV0C)};
228   for(Int_t i = 0; i<nMultEst; i++) {
229     fHistEnergyMedianEst[i]->Fill(fMedianEnergy,multEst[i]);
230     fHistEnergyMedianExLPEst[i]->Fill(fMedianEnergyExLP,multEst[i]);
231     fHistEnergySumEst[i]->Fill(fSumEnergy,multEst[i]);
232     fHistEnergySumExLPEst[i]->Fill(fSumEnergyExLP,multEst[i]);
233     if(fNAccPatches>0)
234       fHistEnergySumAvgEst[i]->Fill(fSumEnergy/((Double_t)fNAccPatches),multEst[i]);
235     if(fNAccPatches>1)
236       fHistEnergySumAvgExLPEst[i]->Fill(fSumEnergyExLP/((Double_t)fNAccPatches-1.),multEst[i]);
237   }
238
239   fHistTracksTracklets->Fill(multEst[0],multEst[1]);
240   fHistTracksV0MultSum->Fill(multEst[0],multEst[2]);
241
242   return kTRUE;
243 }
244
245 //________________________________________________________________________
246 void AliAnalysisTaskEmcalHighMultTrigger::ExecOnce() {
247
248   AliAnalysisTaskEmcalJet::ExecOnce();
249
250 }
251
252 //________________________________________________________________________
253 Bool_t AliAnalysisTaskEmcalHighMultTrigger::Run()
254 {
255   // Run analysis code here, if needed. It will be executed before FillHistograms().
256
257   if(!fTriggerPatchInfo) {
258     AliDebug(11,Form("Couldn't find patch info object %s",fCaloTriggerPatchInfoName.Data()));
259     return kFALSE;
260   }
261
262   Int_t nPatch = fTriggerPatchInfo->GetEntriesFast();
263
264   //sort patches
265   Double_t ptarr[999] = {0};
266   Int_t indexes[999] = {0};
267   Int_t iacc = 0;
268   for(Int_t i = 0; i<nPatch; i++) {
269     AliEmcalTriggerPatchInfo *patch = dynamic_cast<AliEmcalTriggerPatchInfo*>(fTriggerPatchInfo->At(i));
270     if(!patch) continue;
271     if(patch->GetPatchE()>0.) {
272       ptarr[iacc] = patch->GetPatchE();
273       iacc++;
274     }
275     fHistPatchEtaPhi->Fill(patch->GetEtaMin(),patch->GetPhiMin());
276   }
277   
278   TMath::Sort(nPatch,ptarr,indexes);
279   Double_t ptarrSort[999];
280   // Double_t indexesSort[999];
281   Double_t ptarrSortExLP[999];
282   //  Double_t indexesSortExLP[999];
283   for(Int_t i = 0; i<iacc; i++) {
284     ptarrSort[i] = ptarr[indexes[i]];
285     //  indexesSort[i] = indexes[i];
286     if(i>=fNExLP) {
287       ptarrSortExLP[i] = ptarr[indexes[i]];
288       //  indexesSortExLP[i] = indexes[i];
289     }
290   }
291
292   //Calculate sum energy 
293   fSumEnergy = 0.;
294   fSumEnergyExLP = 0.;
295   for(Int_t i = 0; i<iacc; i++) {
296     fSumEnergy+= ptarr[indexes[i]];
297     if(i>=fNExLP)
298       fSumEnergyExLP+= ptarr[indexes[i]];
299   }
300
301   //calculate median of all and excluding leading patch(es)
302   fMedianEnergy = TMath::Median(iacc,ptarrSort);
303   fMedianEnergyExLP = TMath::Median(iacc-fNExLP,ptarrSortExLP);
304   fNAccPatches = iacc;
305
306    return kTRUE;  // If return kFALSE FillHistogram() will NOT be executed.
307 }
308
309 //________________________________________________________________________
310 void AliAnalysisTaskEmcalHighMultTrigger::Terminate(Option_t *) 
311 {
312   // Called once at the end of the analysis.
313 }
314