3 // High multiplicity pp trigger analysis task.
7 #include <TClonesArray.h>
12 #include <TLorentzVector.h>
15 #include "AliEmcalTriggerPatchInfo.h"
16 #include "AliParticleContainer.h"
17 #include "AliVVZERO.h"
19 #include "AliAnalysisTaskEmcalHighMultTrigger.h"
21 ClassImp(AliAnalysisTaskEmcalHighMultTrigger)
23 //________________________________________________________________________
24 AliAnalysisTaskEmcalHighMultTrigger::AliAnalysisTaskEmcalHighMultTrigger() :
25 AliAnalysisTaskEmcalJet("AliAnalysisTaskEmcalHighMultTrigger", kTRUE),
34 fHistEnergyMedianExLP(0),
36 fHistEnergySumExLP(0),
40 fHistTracksTracklets(0),
41 fHistTracksV0MultSum(0)
43 // Default constructor.
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;
55 SetMakeGeneralHistograms(kTRUE);
58 //________________________________________________________________________
59 AliAnalysisTaskEmcalHighMultTrigger::AliAnalysisTaskEmcalHighMultTrigger(const char *name) :
60 AliAnalysisTaskEmcalJet(name, kTRUE),
69 fHistEnergyMedianExLP(0),
71 fHistEnergySumExLP(0),
75 fHistTracksTracklets(0),
76 fHistTracksV0MultSum(0)
78 // Standard constructor.
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;
90 SetMakeGeneralHistograms(kTRUE);
93 //________________________________________________________________________
94 AliAnalysisTaskEmcalHighMultTrigger::~AliAnalysisTaskEmcalHighMultTrigger()
99 //________________________________________________________________________
100 void AliAnalysisTaskEmcalHighMultTrigger::UserCreateOutputObjects()
102 // Create user output.
104 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
110 TString histName = "";
111 TString histTitle = "";
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);
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);
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);
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);
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);
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);
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);
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);
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]);
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]);
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]);
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]);
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]);
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]);
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);
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);
199 PostData(1, fOutput); // Post data for ALL output slots > 0 here.
202 //________________________________________________________________________
203 Bool_t AliAnalysisTaskEmcalHighMultTrigger::FillHistograms()
207 fHistEnergyMedian->Fill(fMedianEnergy);
208 fHistEnergyMedianExLP->Fill(fMedianEnergyExLP);
209 fHistEnergySum->Fill(fSumEnergy);
210 fHistEnergySumExLP->Fill(fSumEnergyExLP);
213 //Multiplicity estimators
215 if (GetParticleContainer(0)) nTracks = GetParticleContainer(0)->GetNAcceptedParticles();
216 Int_t nTracklets = InputEvent()->GetMultiplicity()->GetNumberOfTracklets();
218 AliVVZERO* vV0 = InputEvent()->GetVZEROData();
219 Float_t multV0A=vV0->GetMTotV0A();
220 Float_t multV0C=vV0->GetMTotV0C();
222 fHistTracks->Fill(nTracks);
223 fHistTracklets->Fill(nTracklets);
224 fHistV0MultSum->Fill(multV0A+multV0C);
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]);
234 fHistEnergySumAvgEst[i]->Fill(fSumEnergy/((Double_t)fNAccPatches),multEst[i]);
236 fHistEnergySumAvgExLPEst[i]->Fill(fSumEnergyExLP/((Double_t)fNAccPatches-1.),multEst[i]);
239 fHistTracksTracklets->Fill(multEst[0],multEst[1]);
240 fHistTracksV0MultSum->Fill(multEst[0],multEst[2]);
245 //________________________________________________________________________
246 void AliAnalysisTaskEmcalHighMultTrigger::ExecOnce() {
248 AliAnalysisTaskEmcalJet::ExecOnce();
252 //________________________________________________________________________
253 Bool_t AliAnalysisTaskEmcalHighMultTrigger::Run()
255 // Run analysis code here, if needed. It will be executed before FillHistograms().
257 if(!fTriggerPatchInfo) {
258 AliDebug(11,Form("Couldn't find patch info object %s",fCaloTriggerPatchInfoName.Data()));
262 Int_t nPatch = fTriggerPatchInfo->GetEntriesFast();
265 Double_t ptarr[999] = {0};
266 Int_t indexes[999] = {0};
268 for(Int_t i = 0; i<nPatch; i++) {
269 AliEmcalTriggerPatchInfo *patch = dynamic_cast<AliEmcalTriggerPatchInfo*>(fTriggerPatchInfo->At(i));
271 if(patch->GetPatchE()>0.) {
272 ptarr[iacc] = patch->GetPatchE();
275 fHistPatchEtaPhi->Fill(patch->GetEtaMin(),patch->GetPhiMin());
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];
287 ptarrSortExLP[i] = ptarr[indexes[i]];
288 // indexesSortExLP[i] = indexes[i];
292 //Calculate sum energy
295 for(Int_t i = 0; i<iacc; i++) {
296 fSumEnergy+= ptarr[indexes[i]];
298 fSumEnergyExLP+= ptarr[indexes[i]];
301 //calculate median of all and excluding leading patch(es)
302 fMedianEnergy = TMath::Median(iacc,ptarrSort);
303 fMedianEnergyExLP = TMath::Median(iacc-fNExLP,ptarrSortExLP);
306 return kTRUE; // If return kFALSE FillHistogram() will NOT be executed.
309 //________________________________________________________________________
310 void AliAnalysisTaskEmcalHighMultTrigger::Terminate(Option_t *)
312 // Called once at the end of the analysis.