1 /**************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 //*************************************************************************
19 // Class AliAnalysisTaskSEDvsMultiplicity
20 // AliAnalysisTaskSE for the D meson vs. multiplcity analysis
21 // Authors: Renu Bala, Zaida Conesa del Valle, Francesco Prino
22 /////////////////////////////////////////////////////////////
24 #include <TClonesArray.h>
28 #include <TDatabasePDG.h>
32 #include <THnSparse.h>
34 #include "AliAnalysisManager.h"
35 #include "AliRDHFCuts.h"
36 #include "AliRDHFCutsDplustoKpipi.h"
37 #include "AliRDHFCutsDStartoKpipi.h"
38 #include "AliRDHFCutsD0toKpi.h"
39 #include "AliAODHandler.h"
40 #include "AliAODEvent.h"
41 #include "AliAODVertex.h"
42 #include "AliAODTrack.h"
43 #include "AliAODRecoDecayHF.h"
44 #include "AliAODRecoCascadeHF.h"
45 #include "AliAnalysisVertexingHF.h"
46 #include "AliAnalysisTaskSE.h"
47 #include "AliAnalysisTaskSEDvsMultiplicity.h"
48 #include "AliNormalizationCounter.h"
49 #include "AliVertexingHFUtils.h"
50 #include "AliAODVZERO.h"
51 #include "AliESDUtils.h"
52 ClassImp(AliAnalysisTaskSEDvsMultiplicity)
55 //________________________________________________________________________
56 AliAnalysisTaskSEDvsMultiplicity::AliAnalysisTaskSEDvsMultiplicity():
63 fHistNtrEta16vsNtrEta1EvSel(0),
64 fHistNtrEta05vsNtrEta1EvSel(0),
65 fHistNtrEta03vsNtrEta1EvSel(0),
66 fHistNtrEtaV0AvsNtrEta1EvSel(0),
67 fHistNtrEtaV0MvsNtrEta1EvSel(0),
68 fHistNtrEtaV0AvsV0AEqEvSel(0),
69 fHistNtrEtaV0MvsV0MEqEvSel(0),
70 fHistNtrCorrEta1vsNtrRawEta1EvSel(0),
71 fHistMultCorrvsMultRawEvSel(0),
72 fHistNtrEta16vsNtrEta1EvWithCand(0),
73 fHistNtrEta05vsNtrEta1EvWithCand(0),
74 fHistNtrEta03vsNtrEta1EvWithCand(0),
75 fHistNtrEtaV0AvsNtrEta1EvWithCand(0),
76 fHistNtrEtaV0MvsNtrEta1EvWithCand(0),
77 fHistNtrEtaV0AvsV0AEqEvWithCand(0),
78 fHistNtrEtaV0MvsV0MEqEvWithCand(0),
79 fHistNtrCorrEta1vsNtrRawEta1EvWithCand(0),
80 fHistMultCorrvsMultRawEvWithCand(0),
81 fHistNtrEta16vsNtrEta1EvWithD(0),
82 fHistNtrEta05vsNtrEta1EvWithD(0),
83 fHistNtrEta03vsNtrEta1EvWithD(0),
84 fHistNtrEtaV0AvsNtrEta1EvWithD(0),
85 fHistNtrEtaV0MvsNtrEta1EvWithD(0),
86 fHistNtrEtaV0AvsV0AEqEvWithD(0),
87 fHistNtrEtaV0MvsV0MEqEvWithD(0),
88 fHistNtrCorrEta1vsNtrRawEta1EvWithD(0),
89 fHistMultCorrvsMultRawEvWithD(0),
91 fHistNtrCorrVsZvtx(0),
93 fHistNtrCorrVsNchMC(0),
94 fHistNtrVsNchMCPrimary(0),
95 fHistNtrCorrVsNchMCPrimary(0),
96 fHistNtrVsNchMCPhysicalPrimary(0),
97 fHistNtrCorrVsNchMCPhysicalPrimary(0),
98 fHistGenPrimaryParticlesInelGt0(0),
99 fHistNchMCVsNchMCPrimaryVsNchMCPhysicalPrimary(0),
100 fHistNtrUnCorrPSSel(0),
101 fHistNtrUnCorrPSTrigSel(0),
102 fHistNtrUnCorrPSTrigPileUpSel(0),
103 fHistNtrUnCorrPSTrigPileUpVtxSel(0),
104 fHistNtrUnCorrPSTrigPileUpVtxContSel(0),
105 fHistNtrUnCorrPSTrigPileUpVtxRangeSel(0),
106 fHistNtrUnCorrPSTrigPileUpVtxRangeCentrSel(0),
107 fHistNtrUnCorrEvSel(0),
108 fHistNtrUnCorrEvWithCand(0),
109 fHistNtrUnCorrEvWithD(0),
110 fHistNtrCorrPSSel(0),
111 fHistNtrCorrEvSel(0),
112 fHistNtrCorrEvWithCand(0),
113 fHistNtrCorrEvWithD(0),
115 fPtVsMassVsMultNoPid(0),
116 fPtVsMassVsMultUncorr(0),
117 fPtVsMassVsMultPart(0),
118 fPtVsMassVsMultAntiPart(0),
119 fPtVsMassVsMultMC(0),
121 fLowmasslimit(1.765),
128 fLowerImpPar(-2000.),
129 fHigherImpPar(2000.),
134 fSubtractTrackletsFromDau(kFALSE),
135 fKeepCorrPlots(kFALSE),
136 fUseNchWeight(kFALSE),
141 fMultiplicityEstimator(kNtrk10),
142 fMCPrimariesEstimator(kEta10),
143 fDoVZER0ParamVertexCorr(0)
145 // Default constructor
146 for(Int_t i=0; i<5; i++) fHistMassPtImpPar[i]=0;
147 for(Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=0;
150 //________________________________________________________________________
151 AliAnalysisTaskSEDvsMultiplicity::AliAnalysisTaskSEDvsMultiplicity(const char *name, Int_t pdgMeson,AliRDHFCuts *cuts, Bool_t switchPPb):
152 AliAnalysisTaskSE(name),
158 fHistNtrEta16vsNtrEta1EvSel(0),
159 fHistNtrEta05vsNtrEta1EvSel(0),
160 fHistNtrEta03vsNtrEta1EvSel(0),
161 fHistNtrEtaV0AvsNtrEta1EvSel(0),
162 fHistNtrEtaV0MvsNtrEta1EvSel(0),
163 fHistNtrEtaV0AvsV0AEqEvSel(0),
164 fHistNtrEtaV0MvsV0MEqEvSel(0),
165 fHistNtrCorrEta1vsNtrRawEta1EvSel(0),
166 fHistMultCorrvsMultRawEvSel(0),
167 fHistNtrEta16vsNtrEta1EvWithCand(0),
168 fHistNtrEta05vsNtrEta1EvWithCand(0),
169 fHistNtrEta03vsNtrEta1EvWithCand(0),
170 fHistNtrEtaV0AvsNtrEta1EvWithCand(0),
171 fHistNtrEtaV0MvsNtrEta1EvWithCand(0),
172 fHistNtrEtaV0AvsV0AEqEvWithCand(0),
173 fHistNtrEtaV0MvsV0MEqEvWithCand(0),
174 fHistNtrCorrEta1vsNtrRawEta1EvWithCand(0),
175 fHistMultCorrvsMultRawEvWithCand(0),
176 fHistNtrEta16vsNtrEta1EvWithD(0),
177 fHistNtrEta05vsNtrEta1EvWithD(0),
178 fHistNtrEta03vsNtrEta1EvWithD(0),
179 fHistNtrEtaV0AvsNtrEta1EvWithD(0),
180 fHistNtrEtaV0MvsNtrEta1EvWithD(0),
181 fHistNtrEtaV0AvsV0AEqEvWithD(0),
182 fHistNtrEtaV0MvsV0MEqEvWithD(0),
183 fHistNtrCorrEta1vsNtrRawEta1EvWithD(0),
184 fHistMultCorrvsMultRawEvWithD(0),
186 fHistNtrCorrVsZvtx(0),
188 fHistNtrCorrVsNchMC(0),
189 fHistNtrVsNchMCPrimary(0),
190 fHistNtrCorrVsNchMCPrimary(0),
191 fHistNtrVsNchMCPhysicalPrimary(0),
192 fHistNtrCorrVsNchMCPhysicalPrimary(0),
193 fHistGenPrimaryParticlesInelGt0(0),
194 fHistNchMCVsNchMCPrimaryVsNchMCPhysicalPrimary(0),
195 fHistNtrUnCorrPSSel(0),
196 fHistNtrUnCorrPSTrigSel(0),
197 fHistNtrUnCorrPSTrigPileUpSel(0),
198 fHistNtrUnCorrPSTrigPileUpVtxSel(0),
199 fHistNtrUnCorrPSTrigPileUpVtxContSel(0),
200 fHistNtrUnCorrPSTrigPileUpVtxRangeSel(0),
201 fHistNtrUnCorrPSTrigPileUpVtxRangeCentrSel(0),
202 fHistNtrUnCorrEvSel(0),
203 fHistNtrUnCorrEvWithCand(0),
204 fHistNtrUnCorrEvWithD(0),
205 fHistNtrCorrPSSel(0),
206 fHistNtrCorrEvSel(0),
207 fHistNtrCorrEvWithCand(0),
208 fHistNtrCorrEvWithD(0),
210 fPtVsMassVsMultNoPid(0),
211 fPtVsMassVsMultUncorr(0),
212 fPtVsMassVsMultPart(0),
213 fPtVsMassVsMultAntiPart(0),
214 fPtVsMassVsMultMC(0),
216 fLowmasslimit(1.765),
218 fRDCutsAnalysis(cuts),
223 fLowerImpPar(-2000.),
224 fHigherImpPar(2000.),
227 fisPPbData(switchPPb),
229 fSubtractTrackletsFromDau(kFALSE),
230 fKeepCorrPlots(kFALSE),
231 fUseNchWeight(kFALSE),
236 fMultiplicityEstimator(kNtrk10),
237 fMCPrimariesEstimator(kEta10),
238 fDoVZER0ParamVertexCorr(0)
241 // Standard constructor
244 for(Int_t i=0; i<5; i++) fHistMassPtImpPar[i]=0;
245 for(Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=0;
248 SetMassLimits(0.12,0.2);
251 SetMassLimits(fPdgMeson,0.1);
253 // Default constructor
254 // Otput slot #1 writes into a TList container
255 DefineOutput(1,TList::Class()); //My private output
256 // Output slot #2 writes cut to private output
257 DefineOutput(2,TList::Class());
258 // Output slot #3 writes cut to private output
259 DefineOutput(3,TList::Class());
260 // Output slot #4 writes cut to private output
261 DefineOutput(4,TList::Class());
263 //________________________________________________________________________
264 AliAnalysisTaskSEDvsMultiplicity::~AliAnalysisTaskSEDvsMultiplicity()
272 delete fListProfiles;
273 delete fRDCutsAnalysis;
276 for(Int_t i=0; i<4; i++) {
277 if (fMultEstimatorAvg[i]) delete fMultEstimatorAvg[i];
280 for(Int_t i=0; i<5; i++){
281 delete fHistMassPtImpPar[i];
283 if(fHistoMCNch) delete fHistoMCNch;
284 if(fHistoMeasNch) delete fHistoMeasNch;
287 //_________________________________________________________________
288 void AliAnalysisTaskSEDvsMultiplicity::SetMassLimits(Double_t lowlimit, Double_t uplimit){
289 // set invariant mass limits
290 if(uplimit>lowlimit){
291 fLowmasslimit = lowlimit;
292 fUpmasslimit = uplimit;
294 AliError("Wrong mass limits: upper value should be larger than lower one");
297 //_________________________________________________________________
298 void AliAnalysisTaskSEDvsMultiplicity::SetMassLimits(Int_t pdg, Double_t range){
299 // set invariant mass limits
300 Double_t mass=TDatabasePDG::Instance()->GetParticle(TMath::Abs(pdg))->Mass();
301 SetMassLimits(mass-range,mass+range);
303 //________________________________________________________________________
304 void AliAnalysisTaskSEDvsMultiplicity::Init(){
308 printf("AnalysisTaskSEDvsMultiplicity::Init() \n");
310 if(fUseNchWeight && !fReadMC){ AliFatal("Nch weights can only be used in MC mode"); return; }
311 if(fUseNchWeight && !fHistoMCNch){ AliFatal("Nch weights can only be used without histogram"); return; }
313 fListCuts=new TList();
314 fListCuts->SetOwner();
315 fListCuts->SetName("CutsList");
319 AliRDHFCutsDplustoKpipi* copycut=new AliRDHFCutsDplustoKpipi(*(static_cast<AliRDHFCutsDplustoKpipi*>(fRDCutsAnalysis)));
320 copycut->SetName("AnalysisCutsDplus");
321 fListCuts->Add(copycut);
322 }else if(fPdgMeson==421){
323 AliRDHFCutsD0toKpi* copycut=new AliRDHFCutsD0toKpi(*(static_cast<AliRDHFCutsD0toKpi*>(fRDCutsAnalysis)));
324 copycut->SetName("AnalysisCutsDzero");
325 fListCuts->Add(copycut);
326 }else if(fPdgMeson==413){
327 AliRDHFCutsDStartoKpipi* copycut=new AliRDHFCutsDStartoKpipi(*(static_cast<AliRDHFCutsDStartoKpipi*>(fRDCutsAnalysis)));
328 copycut->SetName("AnalysisCutsDStar");
329 fListCuts->Add(copycut);
331 PostData(2,fListCuts);
333 fListProfiles = new TList();
334 fListProfiles->SetOwner();
337 if (fisPPbData) {period[0]="LHC13b"; period[1]="LHC13c"; nProfiles = 2;}
338 else {period[0]="LHC10b"; period[1]="LHC10c"; period[2]="LHC10d"; period[3]="LHC10e"; nProfiles = 4;}
340 for(Int_t i=0; i<nProfiles; i++){
341 if(fMultEstimatorAvg[i]){
342 TProfile* hprof=new TProfile(*fMultEstimatorAvg[i]);
343 hprof->SetName(Form("ProfileTrkVsZvtx%s\n",period[i].Data()));
344 fListProfiles->Add(hprof);
347 PostData(4,fListProfiles);
352 //________________________________________________________________________
353 void AliAnalysisTaskSEDvsMultiplicity::UserCreateOutputObjects()
355 // Create the output container
357 if(fDebug > 1) printf("AnalysisTaskSEDvsMultiplicity::UserCreateOutputObjects() \n");
359 // Several histograms are more conveniently managed in a TList
360 fOutput = new TList();
362 fOutput->SetName("OutputHistos");
364 Int_t nMultBins = 200;
365 Float_t firstMultBin = -0.5;
366 Float_t lastMultBin = 199.5;
367 Int_t nMultBinsNtrk = nMultBins;
368 Float_t lastMultBinNtrk = lastMultBin;
369 Int_t nMultBinsV0 = 400;
370 Float_t lastMultBinV0 = 799.5;
371 const char *estimatorName="tracklets";
374 lastMultBinNtrk = 374.5;
375 nMultBins = nMultBinsNtrk;
376 lastMultBin = lastMultBinNtrk;
378 if(fMultiplicityEstimator==kVZERO || fMultiplicityEstimator==kVZEROA || fMultiplicityEstimator==kVZEROEq || fMultiplicityEstimator==kVZEROAEq) {
379 nMultBins = nMultBinsV0;
380 lastMultBin = lastMultBinV0;
381 estimatorName = "vzero";
384 fHistNtrUnCorrPSSel = new TH1F("hNtrUnCorrPSSel",Form("Uncorrected %s multiplicity for PS selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
385 fHistNtrUnCorrPSTrigSel = new TH1F("hNtrUnCorrPSTrigSel",Form("Uncorrected %s multiplicity for PS + trigger name selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
386 fHistNtrUnCorrPSTrigPileUpSel = new TH1F("hNtrUnCorrPSTrigPileUpSel",Form("Uncorrected %s multiplicity for PS + trigger name + pileup selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
387 fHistNtrUnCorrPSTrigPileUpVtxSel = new TH1F("hNtrUnCorrPSTrigPileUpVtxSel",Form("Uncorrected %s multiplicity for PS + trigger name + pileup + with-vertex selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
388 fHistNtrUnCorrPSTrigPileUpVtxContSel = new TH1F("hNtrUnCorrPSTrigPileUpVtxContSel",Form("Uncorrected %s multiplicity for PS + trigger name + pileup + with-vertex-contrib selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
389 fHistNtrUnCorrPSTrigPileUpVtxRangeSel = new TH1F("hNtrUnCorrPSTrigPileUpVtxRangeSel",Form("Uncorrected %s multiplicity for PS + trigger name + pileup + with-vertex-contrib-range selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
390 fHistNtrUnCorrPSTrigPileUpVtxRangeCentrSel = new TH1F("hNtrUnCorrPSTrigPileUpVtxRangeCentrSel",Form("Uncorrected %s multiplicity for PS + trigger name + pileup + with-vertex-contrib-range + centrality selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
391 fHistNtrUnCorrEvSel = new TH1F("hNtrUnCorrEvSel",Form("Uncorrected %s multiplicity for selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
392 fHistNtrUnCorrEvWithCand = new TH1F("hNtrUnCorrEvWithCand",Form("Uncorrected %s multiplicity for events with D candidates; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);// Total multiplicity
393 fHistNtrUnCorrEvWithD = new TH1F("hNtrUnCorrEvWithD",Form("Uncorrected %s multiplicity for events with D in mass region ; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin); //
394 fHistNtrCorrPSSel = new TH1F("hNtrCorrPSSel",Form("Corrected %s multiplicity for PS selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
395 fHistNtrCorrEvSel = new TH1F("hNtrCorrEvSel",Form("Corrected %s multiplicity for selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
396 fHistNtrCorrEvWithCand = new TH1F("hNtrCorrEvWithCand", Form("%s multiplicity for events with D candidates; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);// Total multiplicity
397 fHistNtrCorrEvWithD = new TH1F("hNtrCorrEvWithD", Form("%s multiplicity for events with D in mass region ; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin); //
400 fHistNtrEta16vsNtrEta1EvSel = new TH2F("hNtrEta16vsNtrEta1EvSel","Uncorrected Eta1.6 vs Eta1.0 (events selected); Ntracklets #eta<1.0; Ntracklets #eta<1.6",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsNtrk,firstMultBin,lastMultBinNtrk); //eta 1.6 vs eta 1.0 histogram
401 fHistNtrEta05vsNtrEta1EvSel = new TH2F("hNtrEta05vsNtrEta1EvSel","Uncorrected Eta0.5 vs Eta1.0 (events selected); Ntracklets #eta<1.0; Ntracklets #eta<0.5",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsNtrk,firstMultBin,lastMultBinNtrk); //eta 0.5 vs eta 1.0 histogram
402 fHistNtrEta03vsNtrEta1EvSel = new TH2F("hNtrEta03vsNtrEta1EvSel","Uncorrected Eta0.3 vs Eta1.0 (events selected); Ntracklets #eta<1.0; Ntracklets #eta<0.3",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsNtrk,firstMultBin,lastMultBinNtrk); //eta 0.3 vs eta 1.0 histogram
403 fHistNtrEtaV0AvsNtrEta1EvSel = new TH2F("hNtrEtaV0AvsNtrEta1EvSel","Uncorrected Eta-V0A vs Eta1.0 (events selected); Ntracklets #eta<1.0; Multiplicity V0A",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsV0,firstMultBin,lastMultBinV0); //eta V0A vs eta 1.0 histogram
404 fHistNtrEtaV0MvsNtrEta1EvSel = new TH2F("hNtrEtaV0MvsNtrEta1EvSel","Uncorrected Eta-V0M vs Eta1.0 (events selected); Ntracklets #eta<1.0; Multiplicity V0A+V0C",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsV0,firstMultBin,lastMultBinV0); //eta V0M vs eta 1.0 histogram
405 fHistNtrEtaV0AvsV0AEqEvSel = new TH2F("hNtrEtaV0AvsV0AEqEvSel","Corrected V0A vs corrected V0A-Equalized (events selected); Vzero-A; Vzero-A Equalized",nMultBinsV0,firstMultBin,lastMultBinV0,nMultBinsV0,firstMultBin,lastMultBinV0); // comparison V0A - V0Aeq
406 fHistNtrEtaV0MvsV0MEqEvSel = new TH2F("hNtrEtaV0MvsV0MEqEvSel","Corrected V0M vs corrected V0M-Equalized (events selected); Vzero-M; Vzero-M Equalized",nMultBinsV0,firstMultBin,lastMultBinV0,nMultBinsV0,firstMultBin,lastMultBinV0); // comparison V0M - V0Meq
407 fHistNtrCorrEta1vsNtrRawEta1EvSel = new TH2F("hNtrCorrEta1vsNtrRawEta1EvSel","Corrected Eta1 vs Eta1.0 (events selected); Ntracklets #eta<1.0 corrected; Ntracklets #eta<1",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsNtrk,firstMultBin,lastMultBinNtrk); //eta 1.6 vs eta 1.0 histogram
408 fHistMultCorrvsMultRawEvSel = new TH2F("hMultCorrvsMultRawEvSel",Form("Corrected multiplicity vs uncorrected multiplicity (events selected); %s corrected; %s",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin); // corrected vs uncorrected multiplicity
410 fHistNtrEta16vsNtrEta1EvWithCand = new TH2F("hNtrEta16vsNtrEta1EvWithCand","Uncorrected Eta1.6 vs Eta1.0 (events selected with a D candidate); Ntracklets #eta<1.0; Ntracklets #eta<1.6",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsNtrk,firstMultBin,lastMultBinNtrk); //eta 1.6 vs eta 1.0 histogram
411 fHistNtrEta05vsNtrEta1EvWithCand = new TH2F("hNtrEta05vsNtrEta1EvWithCand","Uncorrected Eta0.5 vs Eta1.0 (events selected with a D candidate); Ntracklets #eta<1.0; Ntracklets #eta<0.5",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsNtrk,firstMultBin,lastMultBinNtrk); //eta 0.5 vs eta 1.0 histogram
412 fHistNtrEta03vsNtrEta1EvWithCand = new TH2F("hNtrEta03vsNtrEta1EvWithCand","Uncorrected Eta0.3 vs Eta1.0 (events selected with a D candidate); Ntracklets #eta<1.0; Ntracklets #eta<0.3",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsNtrk,firstMultBin,lastMultBinNtrk); //eta 0.3 vs eta 1.0 histogram
413 fHistNtrEtaV0AvsNtrEta1EvWithCand = new TH2F("hNtrEtaV0AvsNtrEta1EvWithCand","Uncorrected Eta-V0A vs Eta1.0 (events selected with a D candidate); Ntracklets #eta<1.0; Multiplicity V0A",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsV0,firstMultBin,lastMultBinV0); //eta V0A vs eta 1.0 histogram
414 fHistNtrEtaV0MvsNtrEta1EvWithCand = new TH2F("hNtrEtaV0MvsNtrEta1EvWithCand","Uncorrected Eta-V0M vs Eta1.0 (events selected with a D candidate); Ntracklets #eta<1.0; Multiplicity V0A+V0C",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsV0,firstMultBin,lastMultBinV0); //eta V0M vs eta 1.0 histogram
415 fHistNtrEtaV0AvsV0AEqEvWithCand = new TH2F("hNtrEtaV0AvsV0AEqEvWithCand","Corrected V0A vs corrected V0A-Equalized (events selected with a D candidate); Vzero-A; Vzero-A Equalized",nMultBinsV0,firstMultBin,lastMultBinV0,nMultBinsV0,firstMultBin,lastMultBinV0); // comparison V0A - V0Aeq
416 fHistNtrEtaV0MvsV0MEqEvWithCand = new TH2F("hNtrEtaV0MvsV0MEqEvWithCand","Corrected V0M vs corrected V0M-Equalized (events selected with a D candidate); Vzero-M; Vzero-M Equalized",nMultBinsV0,firstMultBin,lastMultBinV0,nMultBinsV0,firstMultBin,lastMultBinV0); // comparison V0M - V0Meq
417 fHistNtrCorrEta1vsNtrRawEta1EvWithCand = new TH2F("hNtrCorrEta1vsNtrRawEta1EvWithCand","Corrected Eta1 vs Eta1.0 (events selected with a D candidate); Ntracklets #eta<1.0 corrected; Ntracklets #eta<1",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsNtrk,firstMultBin,lastMultBinNtrk); //eta 1.6 vs eta 1.0 histogram
418 fHistMultCorrvsMultRawEvWithCand = new TH2F("hMultCorrvsMultRawEvWithCand",Form("Corrected multiplicity vs uncorrected multiplicity (events selected) with a D candidate; %s corrected; %s",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin); // corrected vs uncorrected multiplicity
421 fHistNtrEta16vsNtrEta1EvWithD = new TH2F("hNtrEta16vsNtrEta1EvWithD","Uncorrected Eta1.6 vs Eta1.0 (events selected with D in mass range); Ntracklets #eta<1.0; Ntracklets #eta<1.6",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsNtrk,firstMultBin,lastMultBinNtrk); //eta 1.6 vs eta 1.0 histogram
422 fHistNtrEta05vsNtrEta1EvWithD = new TH2F("hNtrEta05vsNtrEta1EvWithD","Uncorrected Eta0.5 vs Eta1.0 (events selected with D in mass range); Ntracklets #eta<1.0; Ntracklets #eta<0.5",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsNtrk,firstMultBin,lastMultBinNtrk); //eta 0.5 vs eta 1.0 histogram
423 fHistNtrEta03vsNtrEta1EvWithD = new TH2F("hNtrEta03vsNtrEta1EvWithD","Uncorrected Eta0.3 vs Eta1.0 (events selected with D in mass range); Ntracklets #eta<1.0; Ntracklets #eta<0.3",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsNtrk,firstMultBin,lastMultBinNtrk); //eta 0.3 vs eta 1.0 histogram
424 fHistNtrEtaV0AvsNtrEta1EvWithD = new TH2F("hNtrEtaV0AvsNtrEta1EvWithD","Uncorrected Eta-V0A vs Eta1.0 (events selected with D in mass range); Ntracklets #eta<1.0; Multiplicity V0A",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsV0,firstMultBin,lastMultBinV0); //eta V0A vs eta 1.0 histogram
425 fHistNtrEtaV0MvsNtrEta1EvWithD = new TH2F("hNtrEtaV0MvsNtrEta1EvWithD","Uncorrected Eta-V0M vs Eta1.0 (events selected with D in mass range); Ntracklets #eta<1.0; Multiplicity V0A+V0C",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsV0,firstMultBin,lastMultBinV0); //eta V0M vs eta 1.0 histogram
426 fHistNtrEtaV0AvsV0AEqEvWithD = new TH2F("hNtrEtaV0AvsV0AEqEvWithD","Corrected V0A vs corrected V0A-Equalized (events selected with D in mass range); Vzero-A; Vzero-A Equalized",nMultBinsV0,firstMultBin,lastMultBinV0,nMultBinsV0,firstMultBin,lastMultBinV0); // comparison V0A - V0Aeq
427 fHistNtrEtaV0MvsV0MEqEvWithD = new TH2F("hNtrEtaV0MvsV0MEqEvWithD","Corrected V0M vs corrected V0M-Equalized (events selected with D in mass range); Vzero-M; Vzero-M Equalized",nMultBinsV0,firstMultBin,lastMultBinV0,nMultBinsV0,firstMultBin,lastMultBinV0); // comparison V0M - V0Meq
428 fHistNtrCorrEta1vsNtrRawEta1EvWithD = new TH2F("hNtrCorrEta1vsNtrRawEta1EvWithD","Corrected Eta1 vs Eta1.0 (events selected with D in mass range); Ntracklets #eta<1.0 corrected; Ntracklets #eta<1",nMultBinsNtrk,firstMultBin,lastMultBinNtrk,nMultBinsNtrk,firstMultBin,lastMultBinNtrk); //eta 1.6 vs eta 1.0 histogram
429 fHistMultCorrvsMultRawEvWithD = new TH2F("hMultCorrvsMultRawEvWithD",Form("Corrected multiplicity vs uncorrected multiplicity (events selected with D in mass range); %s corrected; %s",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin); // corrected vs uncorrected multiplicity
432 fHistNtrVsZvtx = new TH2F("hNtrVsZvtx",Form("N%s vs VtxZ; VtxZ;N_{%s};",estimatorName,estimatorName),300,-15,15,nMultBins,firstMultBin,lastMultBin); //
433 fHistNtrCorrVsZvtx = new TH2F("hNtrCorrVsZvtx",Form("N%s vs VtxZ; VtxZ;N_{%s};",estimatorName,estimatorName),300,-15,15,nMultBins,firstMultBin,lastMultBin); //
435 fHistNtrVsNchMC = new TH2F("hNtrVsNchMC",Form("N%s vs NchMC; Nch;N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin); //
436 fHistNtrCorrVsNchMC = new TH2F("hNtrCorrVsNchMC",Form("N%s vs Nch; Nch;N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin); //
438 fHistNtrVsNchMCPrimary = new TH2F("hNtrVsNchMCPrimary",Form("N%s vs Nch (Primary); Nch (Primary);N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin); //
439 fHistNtrCorrVsNchMCPrimary = new TH2F("hNtrCorrVsNchMCPrimary",Form("N%s vs Nch (Primary); Nch(Primary) ;N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin); //
441 fHistNtrVsNchMCPhysicalPrimary = new TH2F("hNtrVsNchMCPhysicalPrimary",Form("N%s vs Nch (Physical Primary); Nch (Physical Primary);N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin); //
442 fHistNtrCorrVsNchMCPhysicalPrimary = new TH2F("hNtrCorrVsMCPhysicalPrimary",Form("N%s vs Nch (Physical Primary); Nch (Physical Primary);N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin); //
444 fHistGenPrimaryParticlesInelGt0 = new TH1F("hGenPrimaryParticlesInelGt0","Multiplcity of generated charged particles ; Nparticles ; Entries",nMultBins,firstMultBin,lastMultBin);
446 fHistNchMCVsNchMCPrimaryVsNchMCPhysicalPrimary = new TH3F("fHistNchMCVsNchMCPrimaryVsNchMCPhysicalPrimary", "MC: Nch (Physical Primary) vs Nch (Primary) vs Nch (Generated); Nch (Generated); Nch (Primary); Nch (Physical Primary)",nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
448 fHistNtrUnCorrPSSel->Sumw2();
449 fHistNtrUnCorrPSTrigSel->Sumw2();
450 fHistNtrUnCorrPSTrigPileUpSel->Sumw2();
451 fHistNtrUnCorrPSTrigPileUpVtxSel->Sumw2();
452 fHistNtrUnCorrPSTrigPileUpVtxContSel->Sumw2();
453 fHistNtrUnCorrPSTrigPileUpVtxRangeSel->Sumw2();
454 fHistNtrUnCorrPSTrigPileUpVtxRangeCentrSel->Sumw2();
455 fHistNtrUnCorrEvSel->Sumw2();
456 fHistNtrUnCorrEvWithCand->Sumw2();
457 fHistNtrUnCorrEvWithD->Sumw2();
458 fHistNtrCorrPSSel->Sumw2();
459 fHistNtrCorrEvSel->Sumw2();
460 fHistNtrCorrEvWithCand->Sumw2();
461 fHistNtrCorrEvWithD->Sumw2();
462 fHistGenPrimaryParticlesInelGt0->Sumw2();
463 fOutput->Add(fHistNtrUnCorrPSSel);
464 fOutput->Add(fHistNtrUnCorrPSTrigSel);
465 fOutput->Add(fHistNtrUnCorrPSTrigPileUpSel);
466 fOutput->Add(fHistNtrUnCorrPSTrigPileUpVtxSel);
467 fOutput->Add(fHistNtrUnCorrPSTrigPileUpVtxContSel);
468 fOutput->Add(fHistNtrUnCorrPSTrigPileUpVtxRangeSel);
469 fOutput->Add(fHistNtrUnCorrPSTrigPileUpVtxRangeCentrSel);
470 fOutput->Add(fHistNtrUnCorrEvSel);
471 fOutput->Add(fHistNtrUnCorrEvWithCand);
472 fOutput->Add(fHistNtrUnCorrEvWithD);
473 fOutput->Add(fHistNtrCorrPSSel);
474 fOutput->Add(fHistNtrCorrEvSel);
475 fOutput->Add(fHistNtrCorrEvWithCand);
476 fOutput->Add(fHistNtrCorrEvWithD);
478 fOutput->Add(fHistNtrEta16vsNtrEta1EvSel);
479 fOutput->Add(fHistNtrEta05vsNtrEta1EvSel);
480 fOutput->Add(fHistNtrEta03vsNtrEta1EvSel);
481 fOutput->Add(fHistNtrEtaV0AvsNtrEta1EvSel);
482 fOutput->Add(fHistNtrEtaV0MvsNtrEta1EvSel);
483 fOutput->Add(fHistNtrEtaV0AvsV0AEqEvSel);
484 fOutput->Add(fHistNtrEtaV0MvsV0MEqEvSel);
485 fOutput->Add(fHistNtrCorrEta1vsNtrRawEta1EvSel);
486 fOutput->Add(fHistMultCorrvsMultRawEvSel);
487 fOutput->Add(fHistNtrEta16vsNtrEta1EvWithCand);
488 fOutput->Add(fHistNtrEta05vsNtrEta1EvWithCand);
489 fOutput->Add(fHistNtrEta03vsNtrEta1EvWithCand);
490 fOutput->Add(fHistNtrEtaV0AvsNtrEta1EvWithCand);
491 fOutput->Add(fHistNtrEtaV0MvsNtrEta1EvWithCand);
492 fOutput->Add(fHistNtrEtaV0AvsV0AEqEvWithCand);
493 fOutput->Add(fHistNtrEtaV0MvsV0MEqEvWithCand);
494 fOutput->Add(fHistNtrCorrEta1vsNtrRawEta1EvWithCand);
495 fOutput->Add(fHistMultCorrvsMultRawEvWithCand);
496 fOutput->Add(fHistNtrEta16vsNtrEta1EvWithD);
497 fOutput->Add(fHistNtrEta05vsNtrEta1EvWithD);
498 fOutput->Add(fHistNtrEta03vsNtrEta1EvWithD);
499 fOutput->Add(fHistNtrEtaV0AvsNtrEta1EvWithD);
500 fOutput->Add(fHistNtrEtaV0MvsNtrEta1EvWithD);
501 fOutput->Add(fHistNtrEtaV0AvsV0AEqEvWithD);
502 fOutput->Add(fHistNtrEtaV0MvsV0MEqEvWithD);
503 fOutput->Add(fHistNtrCorrEta1vsNtrRawEta1EvWithD);
504 fOutput->Add(fHistMultCorrvsMultRawEvWithD);
506 fOutput->Add(fHistNtrVsZvtx);
507 fOutput->Add(fHistNtrCorrVsZvtx);
509 fOutput->Add(fHistNtrVsNchMC);
510 fOutput->Add(fHistNtrCorrVsNchMC);
511 fOutput->Add(fHistNtrVsNchMCPrimary);
512 fOutput->Add(fHistNtrCorrVsNchMCPrimary);
513 fOutput->Add(fHistNtrVsNchMCPhysicalPrimary);
514 fOutput->Add(fHistNtrCorrVsNchMCPhysicalPrimary);
515 fOutput->Add(fHistGenPrimaryParticlesInelGt0);
516 fOutput->Add(fHistNchMCVsNchMCPrimaryVsNchMCPhysicalPrimary);
519 fHistNEvents = new TH1F("fHistNEvents", "number of events ",11,-0.5,10.5);
520 fHistNEvents->GetXaxis()->SetBinLabel(1,"nEvents total");
521 fHistNEvents->GetXaxis()->SetBinLabel(2,"nEvents with Z vertex");
522 fHistNEvents->GetXaxis()->SetBinLabel(3,"nEvents selected");
523 fHistNEvents->GetXaxis()->SetBinLabel(4,"Rejected due to trigger");
524 fHistNEvents->GetXaxis()->SetBinLabel(5,"Rejected due to phys sel");
525 fHistNEvents->GetXaxis()->SetBinLabel(6,"Rejected due to vertex cuts");
526 fHistNEvents->GetXaxis()->SetBinLabel(7,"Rejected due to pileup");
527 fHistNEvents->GetXaxis()->SetBinLabel(8,"Total no. of candidate");
528 fHistNEvents->GetXaxis()->SetBinLabel(9,"no. of cand wo bitmask");
529 fHistNEvents->GetXaxis()->SetBinLabel(10,"D after cuts (No PID)");
530 fHistNEvents->GetXaxis()->SetBinLabel(11,"D after cuts + PID)");
531 fHistNEvents->GetXaxis()->SetNdivisions(1,kFALSE);
532 fHistNEvents->Sumw2();
533 fHistNEvents->SetMinimum(0);
534 fOutput->Add(fHistNEvents);
536 fPtVsMassVsMult=new TH3F("hPtVsMassvsMult", "D candidates: p_{t} vs mass vs tracklets multiplicity; Tracklets; Mass M [GeV/c^{2}]; p_{t} [GeV/c]",nMultBins,firstMultBin,lastMultBin,fNMassBins,fLowmasslimit,fUpmasslimit,48,0.,24.);
538 fPtVsMassVsMultNoPid=new TH3F("hPtVsMassvsMultNoPid", "D candidates: p_{t} vs mass vs tracklets multiplicity; Tracklets; Mass M [GeV/c^{2}]; p_{t} [GeV/c]",nMultBins,firstMultBin,lastMultBin,fNMassBins,fLowmasslimit,fUpmasslimit,48,0.,24.);
540 fPtVsMassVsMultUncorr=new TH3F("hPtVsMassvsMultUncorr", "D candidates: p_{t} vs mass vs tracklets multiplicity; Tracklets; Mass M [GeV/c^{2}]; p_{t} [GeV/c]",nMultBins,firstMultBin,lastMultBin,fNMassBins,fLowmasslimit,fUpmasslimit,48,0.,24.);
542 fPtVsMassVsMultPart=new TH3F("hPtVsMassvsMultPart", "D candidates: p_{t} vs mass vs tracklets multiplicity; Tracklets; Mass M [GeV/c^{2}]; p_{t} [GeV/c]",nMultBins,firstMultBin,lastMultBin,fNMassBins,fLowmasslimit,fUpmasslimit,48,0.,24.);
544 fPtVsMassVsMultAntiPart=new TH3F("hPtVsMassvsMultAntiPart", "D candidates: p_{t} vs mass vs tracklets multiplicity; Tracklets; Mass M [GeV/c^{2}]; p_{t} [GeV/c]",nMultBins,firstMultBin,lastMultBin,fNMassBins,fLowmasslimit,fUpmasslimit,48,0.,24.);
546 fPtVsMassVsMultMC=new TH3F("hPtVsMassvsMultMC", "D true candidates: p_{t} vs mass vs tracklets multiplicity; Tracklets; Mass M [GeV/c^{2}]; p_{t} [GeV/c]",nMultBins,firstMultBin,lastMultBin,fNMassBins,fLowmasslimit,fUpmasslimit,48,0.,24.);
548 fOutput->Add(fPtVsMassVsMult);
549 fOutput->Add(fPtVsMassVsMultUncorr);
550 fOutput->Add(fPtVsMassVsMultNoPid);
551 fOutput->Add(fPtVsMassVsMultPart);
552 fOutput->Add(fPtVsMassVsMultAntiPart);
553 fOutput->Add(fPtVsMassVsMultMC);
555 if(fDoImpPar) CreateImpactParameterHistos();
557 fCounter = new AliNormalizationCounter("NormCounterCorrMult");
558 fCounter->SetStudyMultiplicity(kTRUE,1.);
561 fCounterU = new AliNormalizationCounter("NormCounterUnCorrMult");
562 fCounterU->SetStudyMultiplicity(kTRUE,1.);
565 fOutputCounters = new TList();
566 fOutputCounters->SetOwner();
567 fOutputCounters->SetName("OutputCounters");
568 fOutputCounters->Add(fCounter);
569 fOutputCounters->Add(fCounterU);
572 PostData(2,fListCuts);
573 PostData(3,fOutputCounters);
574 PostData(4,fListProfiles);
576 if(fUseNchWeight) CreateMeasuredNchHisto();
583 //________________________________________________________________________
584 void AliAnalysisTaskSEDvsMultiplicity::UserExec(Option_t */*option*/)
586 // Execute analysis for current event:
587 // heavy flavor candidates association to MC truth
589 AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
591 // AliAODTracklets* tracklets = aod->GetTracklets();
592 //Int_t ntracklets = tracklets->GetNumberOfTracklets();
595 TClonesArray *arrayCand = 0;
596 TString arrayName="";
601 arrayName="Charm3Prong";
602 pdgDau[0]=211; pdgDau[1]=321; pdgDau[2]=211;
604 selbit=AliRDHFCuts::kDplusCuts;
605 }else if(fPdgMeson==421){
607 pdgDau[0]=211; pdgDau[1]=321; pdgDau[2]=0;
609 selbit=AliRDHFCuts::kD0toKpiCuts;
610 }else if(fPdgMeson==413){
612 pdgDau[0]=321; pdgDau[1]=211; pdgDau[2]=0; // Quoting here D0 daughters (D* ones on another variable later)
614 selbit=AliRDHFCuts::kDstarCuts;
617 if(!aod && AODEvent() && IsStandardAOD()) {
618 // In case there is an AOD handler writing a standard AOD, use the AOD
619 // event in memory rather than the input (ESD) event.
620 aod = dynamic_cast<AliAODEvent*> (AODEvent());
621 // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
622 // have to taken from the AOD event hold by the AliAODExtension
623 AliAODHandler* aodHandler = (AliAODHandler*)
624 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
625 if(aodHandler->GetExtensions()) {
626 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
627 AliAODEvent *aodFromExt = ext->GetAOD();
628 arrayCand=(TClonesArray*)aodFromExt->GetList()->FindObject(arrayName.Data());
631 arrayCand=(TClonesArray*)aod->GetList()->FindObject(arrayName.Data());
634 if(!aod || !arrayCand) {
635 printf("AliAnalysisTaskSEDvsMultiplicity::UserExec: Charm3Prong branch not found!\n");
639 if(fisPPbData && fReadMC){
640 Int_t runnumber = aod->GetRunNumber();
641 if(aod->GetTriggerMask()==0 &&
642 (runnumber>=195344 && runnumber<=195677)){
643 AliDebug(3,"Event rejected because of null trigger mask");
649 // fix for temporary bug in ESDfilter
650 // the AODs with null vertex pointer didn't pass the PhysSel
651 if(!aod->GetPrimaryVertex()||TMath::Abs(aod->GetMagneticField())<0.001) return;
653 // Int_t countTreta1=AliVertexingHFUtils::GetNumberOfTrackletsInEtaRange(aod,-1.,1.);
654 // Int_t countTreta03=AliVertexingHFUtils::GetNumberOfTrackletsInEtaRange(aod,-0.3,0.3);
655 // Int_t countTreta05=AliVertexingHFUtils::GetNumberOfTrackletsInEtaRange(aod,-0.5,0.5);
656 // Int_t countTreta16=AliVertexingHFUtils::GetNumberOfTrackletsInEtaRange(aod,-1.6,1.6);
657 Int_t countTreta1=0, countTreta03=0, countTreta05=0, countTreta16=0;
658 AliAODTracklets* tracklets=aod->GetTracklets();
659 Int_t nTr=tracklets->GetNumberOfTracklets();
660 for(Int_t iTr=0; iTr<nTr; iTr++){
661 Double_t theta=tracklets->GetTheta(iTr);
662 Double_t eta=-TMath::Log(TMath::Tan(theta/2.));
663 if(eta>-0.3 && eta<0.3) countTreta03++;
664 if(eta>-0.5 && eta<0.5) countTreta05++;
665 if(eta>-1.0 && eta<1.0) countTreta1++;
666 if(eta>-1.6 && eta<1.6) countTreta16++;
670 Int_t vzeroMult=0, vzeroMultA=0, vzeroMultC=0;
671 Int_t vzeroMultEq=0, vzeroMultAEq=0, vzeroMultCEq=0;
672 AliAODVZERO *vzeroAOD = (AliAODVZERO*)aod->GetVZEROData();
674 vzeroMultA = static_cast<Int_t>(vzeroAOD->GetMTotV0A());
675 vzeroMultC = static_cast<Int_t>(vzeroAOD->GetMTotV0C());
676 vzeroMult = vzeroMultA + vzeroMultC;
677 vzeroMultAEq = static_cast<Int_t>(AliVertexingHFUtils::GetVZEROAEqualizedMultiplicity(aod));
678 vzeroMultCEq = static_cast<Int_t>(AliVertexingHFUtils::GetVZEROCEqualizedMultiplicity(aod));
679 vzeroMultEq = vzeroMultAEq + vzeroMultCEq;
682 Int_t countMult = countTreta1;
683 if(fMultiplicityEstimator==kNtrk03) { countMult = countTreta03; }
684 else if(fMultiplicityEstimator==kNtrk05) { countMult = countTreta05; }
685 else if(fMultiplicityEstimator==kNtrk10to16) { countMult = countTreta16 - countTreta1; }
686 else if(fMultiplicityEstimator==kVZERO) { countMult = vzeroMult; }
687 else if(fMultiplicityEstimator==kVZEROA) { countMult = vzeroMultA; }
688 else if(fMultiplicityEstimator==kVZEROEq) { countMult = vzeroMultEq; }
689 else if(fMultiplicityEstimator==kVZEROAEq) { countMult = vzeroMultAEq; }
692 fCounterU->StoreEvent(aod,fRDCutsAnalysis,fReadMC,countMult);
693 fHistNEvents->Fill(0); // count event
695 Double_t countTreta1corr=countTreta1;
696 Double_t countCorr=countMult;
697 AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
698 // In case of VZERO multiplicity, consider the zvtx correction flag
699 // fDoVZER0ParamVertexCorr: 0= none, 1= usual d2h, 2=AliESDUtils
700 Bool_t isDataDrivenZvtxCorr=kTRUE;
701 Bool_t isVtxOk=kFALSE;
702 Int_t vzeroMultACorr=vzeroMultA, vzeroMultCCorr=vzeroMultC, vzeroMultCorr=vzeroMult;
703 Int_t vzeroMultAEqCorr=vzeroMultAEq, vzeroMultCEqCorr=vzeroMultCEq, vzeroMultEqCorr=vzeroMultEq;
705 if(vtx1->GetNContributors()>0){
706 fHistNEvents->Fill(1);
711 if( (fMultiplicityEstimator==kVZERO) || (fMultiplicityEstimator==kVZEROA) ||
712 (fMultiplicityEstimator==kVZEROEq) || (fMultiplicityEstimator==kVZEROAEq) ){
713 if(fDoVZER0ParamVertexCorr==0){
715 isDataDrivenZvtxCorr=kFALSE;
716 } else if (fDoVZER0ParamVertexCorr==2){
717 // use AliESDUtils correction
718 Float_t zvtx = vtx1->GetZ();
719 isDataDrivenZvtxCorr=kFALSE;
720 vzeroMultACorr = static_cast<Int_t>(AliESDUtils::GetCorrV0A(vzeroMultA,zvtx));
721 vzeroMultCCorr = static_cast<Int_t>(AliESDUtils::GetCorrV0C(vzeroMultC,zvtx));
722 vzeroMultCorr = vzeroMultACorr + vzeroMultCCorr;
723 vzeroMultAEqCorr = static_cast<Int_t>(AliESDUtils::GetCorrV0A(vzeroMultAEq,zvtx));
724 vzeroMultCEqCorr =static_cast<Int_t>( AliESDUtils::GetCorrV0C(vzeroMultCEq,zvtx));
725 vzeroMultEqCorr = vzeroMultAEqCorr + vzeroMultCEqCorr;
726 if(fMultiplicityEstimator==kVZERO) { countCorr = vzeroMultCorr; }
727 else if(fMultiplicityEstimator==kVZEROA) { countCorr = vzeroMultACorr; }
728 else if(fMultiplicityEstimator==kVZEROEq) { countCorr = vzeroMultEqCorr; }
729 else if(fMultiplicityEstimator==kVZEROAEq) { countCorr = vzeroMultAEqCorr; }
733 // Data driven multiplicity z-vertex correction
734 if(isVtxOk && isDataDrivenZvtxCorr){
735 TProfile* estimatorAvg = GetEstimatorHistogram(aod);
737 countTreta1corr=static_cast<Int_t>(AliVertexingHFUtils::GetCorrectedNtracklets(estimatorAvg,countTreta1,vtx1->GetZ(),fRefMult));
738 // vzeroMultACorr=static_cast<Int_t>(AliVertexingHFUtils::GetCorrectedNtracklets(estimatorAvg,vzeroMultA,vtx1->GetZ(),fRefMult));
739 // vzeroMultCorr= vzeroMultACorr + static_cast<Int_t>(AliVertexingHFUtils::GetCorrectedNtracklets(estimatorAvg,vzeroMultC,vtx1->GetZ(),fRefMult));
740 // vzeroMultAEqCorr=static_cast<Int_t>(AliVertexingHFUtils::GetCorrectedNtracklets(estimatorAvg,vzeroMultAEq,vtx1->GetZ(),fRefMult));
741 // vzeroMultEqCorr= vzeroMultAEqCorr + static_cast<Int_t>(AliVertexingHFUtils::GetCorrectedNtracklets(estimatorAvg,vzeroMultCEq,vtx1->GetZ(),fRefMult));
742 countCorr=static_cast<Int_t>(AliVertexingHFUtils::GetCorrectedNtracklets(estimatorAvg,countMult,vtx1->GetZ(),fRefMult));
747 Bool_t isEvSel=fRDCutsAnalysis->IsEventSelected(aod);
749 if(fRDCutsAnalysis->GetWhyRejection()==5) fHistNEvents->Fill(3);
750 if(fRDCutsAnalysis->GetWhyRejection()==7) fHistNEvents->Fill(4);
751 if(fRDCutsAnalysis->GetWhyRejection()==6) fHistNEvents->Fill(5);
752 if(fRDCutsAnalysis->GetWhyRejection()==1) fHistNEvents->Fill(6);
754 Bool_t isEvPSRejected = fRDCutsAnalysis->IsEventRejectedDuePhysicsSelection();
755 Bool_t isEvTrigNameRejected = fRDCutsAnalysis->IsEventRejectedDueToTrigger();
756 Bool_t isEvPileUpRejected = fRDCutsAnalysis->IsEventRejectedDueToPileup();
757 Bool_t isEvNoVtxRejected = fRDCutsAnalysis->IsEventRejectedDueToNotRecoVertex();
758 Bool_t isEvVtxContribRejected = fRDCutsAnalysis->IsEventRejectedDueToVertexContributors();
759 Bool_t isEvVtxRangeRejected= fRDCutsAnalysis->IsEventRejectedDueToZVertexOutsideFiducialRegion();
760 Bool_t isEvCentralityRejected = fRDCutsAnalysis->IsEventRejectedDueToCentrality();
762 fHistNtrUnCorrPSSel->Fill(countMult);
763 fHistNtrCorrPSSel->Fill(countCorr);
764 if(!isEvTrigNameRejected){
765 fHistNtrUnCorrPSTrigSel->Fill(countMult);
766 if(!isEvPileUpRejected){
767 fHistNtrUnCorrPSTrigPileUpSel->Fill(countMult);
768 if(!isEvNoVtxRejected){
769 fHistNtrUnCorrPSTrigPileUpVtxSel->Fill(countMult);
770 if(!isEvVtxContribRejected){
771 fHistNtrUnCorrPSTrigPileUpVtxContSel->Fill(countMult);
772 if(!isEvVtxRangeRejected){
773 fHistNtrUnCorrPSTrigPileUpVtxRangeSel->Fill(countMult);
774 if(!isEvCentralityRejected){
775 fHistNtrUnCorrPSTrigPileUpVtxRangeCentrSel->Fill(countMult);
786 fHistNtrEta16vsNtrEta1EvSel->Fill(countTreta1,countTreta16);
787 fHistNtrEta05vsNtrEta1EvSel->Fill(countTreta1,countTreta05);
788 fHistNtrEta03vsNtrEta1EvSel->Fill(countTreta1,countTreta03);
789 fHistNtrEtaV0AvsNtrEta1EvSel->Fill(countTreta1,vzeroMultA);
790 fHistNtrEtaV0MvsNtrEta1EvSel->Fill(countTreta1,vzeroMult);
791 fHistNtrEtaV0AvsV0AEqEvSel->Fill(vzeroMultA,vzeroMultAEq);
792 fHistNtrEtaV0MvsV0MEqEvSel->Fill(vzeroMult,vzeroMultEq);
793 fHistNtrCorrEta1vsNtrRawEta1EvSel->Fill(countTreta1,countTreta1corr);
794 fHistMultCorrvsMultRawEvSel->Fill(countMult,countCorr);
797 fHistNtrVsZvtx->Fill(vtx1->GetZ(),countMult);
798 fHistNtrCorrVsZvtx->Fill(vtx1->GetZ(),countCorr);
801 TClonesArray *arrayMC=0;
802 AliAODMCHeader *mcHeader=0;
804 Double_t nchWeight=1.0;
809 arrayMC = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
811 printf("AliAnalysisTaskSEDvsMultiplicity::UserExec: MC particles branch not found!\n");
815 mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
817 printf("AliAnalysisTaskSEDvsMultiplicity::UserExec: MC header branch not found!\n");
822 // Int_t nChargedMC=AliVertexingHFUtils::GetGeneratedMultiplicityInEtaRange(arrayMC,-1.0,1.0);
823 // Int_t nChargedMCPrimary=AliVertexingHFUtils::GetGeneratedPrimariesInEtaRange(arrayMC,-1.0,1.0);
824 // Int_t nChargedMCPhysicalPrimary=AliVertexingHFUtils::GetGeneratedPhysicalPrimariesInEtaRange(arrayMC,-1.0,1.0);
826 Int_t nChargedMCEta10=0, nChargedMCEta03=0, nChargedMCEta05=0, nChargedMCEta16=0, nChargedMCEtam37tm17=0, nChargedMCEta28t51=0;
827 Int_t nChargedMCPrimaryEta10=0, nChargedMCPrimaryEta03=0, nChargedMCPrimaryEta05=0, nChargedMCPrimaryEta16=0, nChargedMCPrimaryEtam37tm17=0, nChargedMCPrimaryEta28t51=0;
828 Int_t nChargedMCPhysicalPrimaryEta10=0, nChargedMCPhysicalPrimaryEta03=0, nChargedMCPhysicalPrimaryEta05=0, nChargedMCPhysicalPrimaryEta16=0, nChargedMCPhysicalPrimaryEtam37tm17=0, nChargedMCPhysicalPrimaryEta28t51=0;
829 for(Int_t i=0; i<arrayMC->GetEntriesFast(); i++){
830 AliAODMCParticle *part=(AliAODMCParticle*)arrayMC->UncheckedAt(i);
831 Int_t charge = part->Charge();
832 Double_t eta = part->Eta();
833 Bool_t isPrim = part->IsPrimary();
834 Bool_t isPhysPrim = part->IsPhysicalPrimary();
836 if(eta>-0.3 && eta< 0.3) {
838 if(isPrim) nChargedMCPrimaryEta03++;
839 if(isPhysPrim) nChargedMCPhysicalPrimaryEta03++;
841 if(eta>-0.5 && eta< 0.5) {
843 if(isPrim) nChargedMCPrimaryEta05++;
844 if(isPhysPrim) nChargedMCPhysicalPrimaryEta05++;
846 if(eta>-1.0 && eta< 1.0) {
848 if(isPrim) nChargedMCPrimaryEta10++;
849 if(isPhysPrim) nChargedMCPhysicalPrimaryEta10++;
851 if(eta>-1.6 && eta< 1.6) {
853 if(isPrim) nChargedMCPrimaryEta16++;
854 if(isPhysPrim) nChargedMCPhysicalPrimaryEta16++;
856 if(eta>-3.7 && eta<-1.7) {
857 nChargedMCEtam37tm17++;
858 if(isPrim) nChargedMCPrimaryEtam37tm17++;
859 if(isPhysPrim) nChargedMCPhysicalPrimaryEtam37tm17++;
861 if(eta> 2.8 && eta< 5.1) {
862 nChargedMCEta28t51++;
863 if(isPrim) nChargedMCPrimaryEta28t51++;
864 if(isPhysPrim) nChargedMCPhysicalPrimaryEta28t51++;
868 Int_t nChargedMC=nChargedMCEta10;
869 Int_t nChargedMCPrimary=nChargedMCPrimaryEta10;
870 Int_t nChargedMCPhysicalPrimary=nChargedMCPhysicalPrimaryEta10;
873 // Compute the Nch weights (reference is Ntracklets within |eta|<1.0)
875 Double_t tmpweight = 1.0;
876 if(nChargedMCPhysicalPrimary<=0) tmpweight = 0.0;
878 Double_t pMeas = fHistoMeasNch->GetBinContent(fHistoMeasNch->FindBin(nChargedMCPhysicalPrimary));
879 // printf(" pMeas=%2.2f and histo MCNch %s \n",pMeas,fHistoMCNch);
880 Double_t pMC = fHistoMCNch->GetBinContent(fHistoMCNch->FindBin(nChargedMCPhysicalPrimary));
881 tmpweight = pMC>0 ? pMeas/pMC : 0.;
883 nchWeight *= tmpweight;
884 AliDebug(2,Form("Using Nch weights, Mult=%d Weight=%f\n",nChargedMCPhysicalPrimary,nchWeight));
887 // Now recompute the variables in case another MC estimator is considered
888 // Int_t nChargedMCEta10 = nChargedMC;
889 // Int_t nChargedMCEta16 = AliVertexingHFUtils::GetGeneratedMultiplicityInEtaRange(arrayMC,-1.6,1.6);
890 // Int_t nChargedMCEta05 = AliVertexingHFUtils::GetGeneratedMultiplicityInEtaRange(arrayMC,-0.5,0.5);
891 // Int_t nChargedMCEta03 = AliVertexingHFUtils::GetGeneratedMultiplicityInEtaRange(arrayMC,-0.3,0.3);
892 // Int_t nChargedMCEtam37tm17 = AliVertexingHFUtils::GetGeneratedMultiplicityInEtaRange(arrayMC,-3.7,-1.7);
893 // Int_t nChargedMCEta28t51 = AliVertexingHFUtils::GetGeneratedMultiplicityInEtaRange(arrayMC,2.8,5.1);
894 // Int_t nChargedMCPrimaryEta10 = nChargedMCPrimary;
895 // Int_t nChargedMCPrimaryEta16 = AliVertexingHFUtils::GetGeneratedPrimariesInEtaRange(arrayMC,-1.6,1.6);
896 // Int_t nChargedMCPrimaryEta05 = AliVertexingHFUtils::GetGeneratedPrimariesInEtaRange(arrayMC,-0.5,0.5);
897 // Int_t nChargedMCPrimaryEta03 = AliVertexingHFUtils::GetGeneratedPrimariesInEtaRange(arrayMC,-0.3,0.3);
898 // Int_t nChargedMCPrimaryEtam37tm17 = AliVertexingHFUtils::GetGeneratedPrimariesInEtaRange(arrayMC,-3.7,-1.7);
899 // Int_t nChargedMCPrimaryEta28t51 = AliVertexingHFUtils::GetGeneratedPrimariesInEtaRange(arrayMC,2.8,5.1);
900 // Int_t nChargedMCPhysicalPrimaryEta10 = nChargedMCPhysicalPrimary;
901 // Int_t nChargedMCPhysicalPrimaryEta16 = AliVertexingHFUtils::GetGeneratedPhysicalPrimariesInEtaRange(arrayMC,-1.6,1.6);
902 // Int_t nChargedMCPhysicalPrimaryEta05 = AliVertexingHFUtils::GetGeneratedPhysicalPrimariesInEtaRange(arrayMC,-0.5,0.5);
903 // Int_t nChargedMCPhysicalPrimaryEta03 = AliVertexingHFUtils::GetGeneratedPhysicalPrimariesInEtaRange(arrayMC,-0.3,0.3);
904 // Int_t nChargedMCPhysicalPrimaryEtam37tm17 = AliVertexingHFUtils::GetGeneratedPhysicalPrimariesInEtaRange(arrayMC,-3.7,-1.7);
905 // Int_t nChargedMCPhysicalPrimaryEta28t51 = AliVertexingHFUtils::GetGeneratedPhysicalPrimariesInEtaRange(arrayMC,2.8,5.1);
906 if(fMCPrimariesEstimator==kEta10to16){
907 nChargedMC = nChargedMCEta16 - nChargedMCEta10;
908 nChargedMCPrimary = nChargedMCPrimaryEta16 - nChargedMCPrimaryEta10;
909 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEta16 - nChargedMCPhysicalPrimaryEta10;
910 } else if(fMCPrimariesEstimator==kEta05){
911 nChargedMC = nChargedMCEta05;
912 nChargedMCPrimary = nChargedMCPrimaryEta05;
913 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEta05;
914 } else if(fMCPrimariesEstimator==kEta03){
915 nChargedMC = nChargedMCEta03;
916 nChargedMCPrimary = nChargedMCPrimaryEta03;
917 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEta03;
918 } else if(fMCPrimariesEstimator==kEtaVZERO){
919 nChargedMC = nChargedMCEtam37tm17 + nChargedMCEta28t51;
920 nChargedMCPrimary = nChargedMCPrimaryEtam37tm17 + nChargedMCPrimaryEta28t51;
921 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEtam37tm17 + nChargedMCPhysicalPrimaryEta28t51;
922 } else if(fMCPrimariesEstimator==kEtaVZEROA){
923 nChargedMC = nChargedMCEta28t51;
924 nChargedMCPrimary = nChargedMCPrimaryEta28t51;
925 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEta28t51;
928 // Here fill the MC correlation plots
929 if(nChargedMCPhysicalPrimary>0){ // INEL>0 for |eta|<1
930 fHistGenPrimaryParticlesInelGt0->Fill(nChargedMCPhysicalPrimary,nchWeight);
933 fHistNtrVsNchMC->Fill(nChargedMC,countMult,nchWeight);
934 fHistNtrCorrVsNchMC->Fill(nChargedMC,countCorr,nchWeight);
936 fHistNtrVsNchMCPrimary->Fill(nChargedMCPrimary,countMult,nchWeight);
937 fHistNtrCorrVsNchMCPrimary->Fill(nChargedMCPrimary,countCorr,nchWeight);
939 fHistNtrVsNchMCPhysicalPrimary->Fill(nChargedMCPhysicalPrimary,countMult,nchWeight);
940 fHistNtrCorrVsNchMCPhysicalPrimary->Fill(nChargedMCPhysicalPrimary,countCorr,nchWeight);
942 fHistNchMCVsNchMCPrimaryVsNchMCPhysicalPrimary->Fill(nChargedMC,nChargedMCPrimary,nChargedMCPhysicalPrimary,nchWeight);
945 Int_t nCand = arrayCand->GetEntriesFast();
946 Int_t nSelectedNoPID=0,nSelectedPID=0,nSelectedInMassPeak=0;
947 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
948 Double_t mDplusPDG = TDatabasePDG::Instance()->GetParticle(411)->Mass();
949 Double_t mDstarPDG = TDatabasePDG::Instance()->GetParticle(413)->Mass();
951 // pdg of daughters needed for D* too
952 UInt_t pdgDgDStartoD0pi[2]={421,211};
955 Double_t nSelCand=0.;
956 for (Int_t iCand = 0; iCand < nCand; iCand++) {
957 AliAODRecoDecayHF *d = (AliAODRecoDecayHF*)arrayCand->UncheckedAt(iCand);
958 AliAODRecoCascadeHF *dCascade = NULL;
959 if(fPdgMeson==413) dCascade = (AliAODRecoCascadeHF*)d;
961 fHistNEvents->Fill(7);
962 if(fUseBit && !d->HasSelectionBit(selbit)){
963 fHistNEvents->Fill(8);
967 Double_t ptCand = d->Pt();
968 Double_t rapid=d->Y(fPdgMeson);
969 Bool_t isFidAcc=fRDCutsAnalysis->IsInFiducialAcceptance(ptCand,rapid);
970 if(!isFidAcc) continue;
975 labD = dCascade->MatchToMC(fPdgMeson,421,(Int_t*)pdgDgDStartoD0pi,(Int_t*)pdgDau,arrayMC);
977 labD = d->MatchToMC(fPdgMeson,arrayMC,nDau,(Int_t*)pdgDau);
979 FillMCMassHistos(arrayMC,labD, countMult,nchWeight);
982 Int_t passAllCuts=fRDCutsAnalysis->IsSelected(d,AliRDHFCuts::kAll,aod);
983 Int_t passTopolCuts=fRDCutsAnalysis->GetIsSelectedCuts();
984 if(passTopolCuts==0) continue;
986 fHistNEvents->Fill(9);
989 fHistNEvents->Fill(10);
991 Double_t multForCand = countCorr;
993 if(fSubtractTrackletsFromDau){
994 // For the D* case, subtract only the D0 daughter tracks <=== FIXME !!
995 AliAODRecoDecayHF2Prong* d0fromDstar = NULL;
996 if(fPdgMeson==413) d0fromDstar = (AliAODRecoDecayHF2Prong*)dCascade->Get2Prong();
998 for(Int_t iDau=0; iDau<nDau; iDau++){
999 AliAODTrack *t = NULL;
1000 if(fPdgMeson==413){ t = (AliAODTrack*)d0fromDstar->GetDaughter(iDau); }
1001 else{ t = (AliAODTrack*)d->GetDaughter(iDau); }
1003 if(t->HasPointOnITSLayer(0) && t->HasPointOnITSLayer(1)){
1004 if(multForCand>0) multForCand-=1;
1008 Bool_t isPrimary=kTRUE;
1009 Double_t trueImpParXY=9999.;
1010 Double_t impparXY=d->ImpParXY()*10000.;
1011 Double_t dlen=0.1; //FIXME
1014 mass[0]=d->InvMass(nDau,pdgDau);
1016 if(TMath::Abs(mass[0]-mDplusPDG)<0.02) nSelectedInMassPeak++; //20 MeV for now... FIXME
1017 }else if(fPdgMeson==421){
1018 UInt_t pdgdaughtersD0[2]={211,321};//pi,K
1019 UInt_t pdgdaughtersD0bar[2]={321,211};//K,pi
1020 mass[0]=d->InvMass(2,pdgdaughtersD0);
1021 mass[1]=d->InvMass(2,pdgdaughtersD0bar);
1022 if(TMath::Abs(mass[0]-mD0PDG)<0.02 || TMath::Abs(mass[1]-mD0PDG)<0.02 ) nSelectedInMassPeak++; //20 MeV for now... FIXME
1023 }else if(fPdgMeson==413){
1025 mass[0]=dCascade->DeltaInvMass();
1027 if(TMath::Abs(mass[0]-(mDstarPDG-mD0PDG))<0.0015) nSelectedInMassPeak++; //1 MeV for now... FIXME
1029 for(Int_t iHyp=0; iHyp<2; iHyp++){
1030 if(mass[iHyp]<0.) continue; // for D+ and D* we have 1 mass hypothesis
1031 Double_t invMass=mass[iHyp];
1032 Double_t arrayForSparse[5]={invMass,ptCand,impparXY,dlen,multForCand};
1037 labD = dCascade->MatchToMC(fPdgMeson,421,(Int_t*)pdgDgDStartoD0pi,(Int_t*)pdgDau,arrayMC);
1039 labD = d->MatchToMC(fPdgMeson,arrayMC,nDau,(Int_t*)pdgDau);
1042 Bool_t fillHisto=fDoImpPar;
1044 AliAODMCParticle *partD = (AliAODMCParticle*)arrayMC->At(labD);
1045 Int_t code=partD->GetPdgCode();
1046 if(CheckOrigin(arrayMC,partD)==5) isPrimary=kFALSE;
1047 if(code<0 && iHyp==0) fillHisto=kFALSE;
1048 if(code>0 && iHyp==1) fillHisto=kFALSE;
1051 trueImpParXY=AliVertexingHFUtils::GetTrueImpactParameterDplus(mcHeader,arrayMC,partD)*10000.;
1052 }else if(fPdgMeson==421){
1053 trueImpParXY=AliVertexingHFUtils::GetTrueImpactParameterDzero(mcHeader,arrayMC,partD)*10000.;
1054 }else if(fPdgMeson==413){
1055 trueImpParXY=0.; /// FIXME
1057 Double_t arrayForSparseTrue[5]={invMass,ptCand,trueImpParXY,dlen,multForCand};
1058 if(fillHisto && passAllCuts){
1059 fHistMassPtImpPar[2]->Fill(arrayForSparse);
1060 fHistMassPtImpPar[3]->Fill(arrayForSparseTrue);
1063 if(fillHisto && passAllCuts) fHistMassPtImpPar[1]->Fill(arrayForSparse);
1066 if(fillHisto && passAllCuts)fHistMassPtImpPar[4]->Fill(arrayForSparse);
1069 if(TMath::Abs(labD)==fPdgMeson && fMCOption==2) continue;
1070 if(TMath::Abs(labD)!=fPdgMeson && fMCOption==1) continue;
1075 if(iHyp==0 && !(passTopolCuts&1)) continue; // candidate not passing as D0
1076 if(iHyp==1 && !(passTopolCuts&2)) continue; // candidate not passing as D0bar
1079 fPtVsMassVsMultNoPid->Fill(multForCand,invMass,ptCand);
1082 if(iHyp==0 && !(passAllCuts&1)) continue; // candidate not passing as D0
1083 if(iHyp==1 && !(passAllCuts&2)) continue; // candidate not passing as D0bar
1086 aveMult+=multForCand;
1088 fPtVsMassVsMult->Fill(multForCand,invMass,ptCand,nchWeight);
1089 fPtVsMassVsMultUncorr->Fill(countTreta1,invMass,ptCand,nchWeight);
1090 // Add separation between part antipart
1092 if(d->GetCharge()>0) fPtVsMassVsMultPart->Fill(multForCand,invMass,ptCand,nchWeight);
1093 else fPtVsMassVsMultAntiPart->Fill(multForCand,invMass,ptCand,nchWeight);
1094 }else if(fPdgMeson==421){
1095 if(passAllCuts&1) fPtVsMassVsMultPart->Fill(multForCand,invMass,ptCand,nchWeight);
1096 if(passAllCuts&2) fPtVsMassVsMultAntiPart->Fill(multForCand,invMass,ptCand,nchWeight);
1097 }else if(fPdgMeson==413){
1098 if(d->GetCharge()>0) fPtVsMassVsMultPart->Fill(multForCand,invMass,ptCand,nchWeight);
1099 else fPtVsMassVsMultAntiPart->Fill(multForCand,invMass,ptCand,nchWeight);
1103 fHistMassPtImpPar[0]->Fill(arrayForSparse);
1110 if(fSubtractTrackletsFromDau && nSelCand>0){
1112 fCounter->StoreEvent(aod,fRDCutsAnalysis,fReadMC,(Int_t)(aveMult+0.5001));
1114 fCounter->StoreEvent(aod,fRDCutsAnalysis,fReadMC,(Int_t)countCorr);
1118 fCounter->StoreCandidates(aod,nSelectedNoPID,kTRUE);
1119 fCounter->StoreCandidates(aod,nSelectedPID,kFALSE);
1120 fHistNtrUnCorrEvSel->Fill(countMult,nchWeight);
1121 fHistNtrCorrEvSel->Fill(countCorr,nchWeight);
1122 if(nSelectedPID>0) {
1123 fHistNtrUnCorrEvWithCand->Fill(countMult,nchWeight);
1124 fHistNtrCorrEvWithCand->Fill(countCorr,nchWeight);
1126 fHistNtrEta16vsNtrEta1EvWithCand->Fill(countTreta1,countTreta16);
1127 fHistNtrEta05vsNtrEta1EvWithCand->Fill(countTreta1,countTreta05);
1128 fHistNtrEta03vsNtrEta1EvWithCand->Fill(countTreta1,countTreta03);
1129 fHistNtrEtaV0AvsNtrEta1EvWithCand->Fill(countTreta1,vzeroMultA);
1130 fHistNtrEtaV0MvsNtrEta1EvWithCand->Fill(countTreta1,vzeroMult);
1131 fHistNtrEtaV0AvsV0AEqEvWithCand->Fill(vzeroMultA,vzeroMultAEq);
1132 fHistNtrEtaV0MvsV0MEqEvWithCand->Fill(vzeroMult,vzeroMultEq);
1133 fHistNtrCorrEta1vsNtrRawEta1EvWithCand->Fill(countTreta1,countTreta1corr);
1134 fHistMultCorrvsMultRawEvWithCand->Fill(countMult,countCorr);
1137 if(nSelectedInMassPeak>0) {
1138 fHistNtrUnCorrEvWithD->Fill(countMult,nchWeight);
1139 fHistNtrCorrEvWithD->Fill(countCorr,nchWeight);
1141 fHistNtrEta16vsNtrEta1EvWithD->Fill(countTreta1,countTreta16);
1142 fHistNtrEta05vsNtrEta1EvWithD->Fill(countTreta1,countTreta05);
1143 fHistNtrEta03vsNtrEta1EvWithD->Fill(countTreta1,countTreta03);
1144 fHistNtrEtaV0AvsNtrEta1EvWithD->Fill(countTreta1,vzeroMultA);
1145 fHistNtrEtaV0MvsNtrEta1EvWithD->Fill(countTreta1,vzeroMult);
1146 fHistNtrEtaV0AvsV0AEqEvWithD->Fill(vzeroMultA,vzeroMultAEq);
1147 fHistNtrEtaV0MvsV0MEqEvWithD->Fill(vzeroMult,vzeroMultEq);
1148 fHistNtrCorrEta1vsNtrRawEta1EvWithD->Fill(countTreta1,countTreta1corr);
1149 fHistMultCorrvsMultRawEvWithD->Fill(countMult,countCorr);
1153 PostData(1,fOutput);
1154 PostData(2,fListCuts);
1155 PostData(3,fOutputCounters);
1160 //________________________________________________________________________
1161 void AliAnalysisTaskSEDvsMultiplicity::CreateImpactParameterHistos(){
1162 // Histos for impact paramter study
1163 // mass . pt , impact parameter , decay length , multiplicity
1165 Int_t nbins[5]={fNMassBins,200,fNImpParBins,50,100};
1166 Double_t xmin[5]={fLowmasslimit,0.,fLowerImpPar,0.,0.};
1167 Double_t xmax[5]={fUpmasslimit,20.,fHigherImpPar,1.,100.};
1169 fHistMassPtImpPar[0]=new THnSparseF("hMassPtImpParAll",
1170 "Mass vs. pt vs.imppar - All",
1172 fHistMassPtImpPar[1]=new THnSparseF("hMassPtImpParPrompt",
1173 "Mass vs. pt vs.imppar - promptD",
1175 fHistMassPtImpPar[2]=new THnSparseF("hMassPtImpParBfeed",
1176 "Mass vs. pt vs.imppar - DfromB",
1178 fHistMassPtImpPar[3]=new THnSparseF("hMassPtImpParTrueBfeed",
1179 "Mass vs. pt vs.true imppar -DfromB",
1181 fHistMassPtImpPar[4]=new THnSparseF("hMassPtImpParBkg",
1182 "Mass vs. pt vs.imppar - backgr.",
1184 for(Int_t i=0; i<5;i++){
1185 fOutput->Add(fHistMassPtImpPar[i]);
1189 //________________________________________________________________________
1190 void AliAnalysisTaskSEDvsMultiplicity::Terminate(Option_t */*option*/)
1192 // Terminate analysis
1194 if(fDebug > 1) printf("AnalysisTaskSEDvsMultiplicity: Terminate() \n");
1196 fOutput = dynamic_cast<TList*> (GetOutputData(1));
1198 printf("ERROR: fOutput not available\n");
1202 fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEvents"));
1204 printf("ERROR: fHistNEvents not available\n");
1207 printf("Number of Analyzed Events = %d\n",(Int_t)fHistNEvents->GetBinContent(3));
1211 //_________________________________________________________________________________________________
1212 Int_t AliAnalysisTaskSEDvsMultiplicity::CheckOrigin(TClonesArray* arrayMC, AliAODMCParticle *mcPartCandidate) const {
1214 // checking whether the mother of the particles come from a charm or a bottom quark
1217 Int_t pdgGranma = 0;
1219 mother = mcPartCandidate->GetMother();
1221 Int_t abspdgGranma =0;
1222 Bool_t isFromB=kFALSE;
1223 // Bool_t isQuarkFound=kFALSE;
1226 AliAODMCParticle* mcGranma = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mother));
1228 pdgGranma = mcGranma->GetPdgCode();
1229 abspdgGranma = TMath::Abs(pdgGranma);
1230 if ((abspdgGranma > 500 && abspdgGranma < 600) || (abspdgGranma > 5000 && abspdgGranma < 6000)){
1233 // if(abspdgGranma==4 || abspdgGranma==5) isQuarkFound=kTRUE;
1234 mother = mcGranma->GetMother();
1236 AliError("Failed casting the mother particle!");
1241 if(isFromB) return 5;
1247 //____________________________________________________________________________
1248 TProfile* AliAnalysisTaskSEDvsMultiplicity::GetEstimatorHistogram(const AliVEvent* event){
1249 // Get Estimator Histogram from period event->GetRunNumber();
1251 // If you select SPD tracklets in |eta|<1 you should use type == 1
1254 Int_t runNo = event->GetRunNumber();
1255 Int_t period = -1; // pp: 0-LHC10b, 1-LHC10c, 2-LHC10d, 3-LHC10e
1256 // pPb: 0-LHC13b, 1-LHC13c
1258 if (runNo>195343 && runNo<195484) period = 0;
1259 if (runNo>195528 && runNo<195678) period = 1;
1260 if (period < 0 || period > 1) return 0;
1263 if(runNo>114930 && runNo<117223) period = 0;
1264 if(runNo>119158 && runNo<120830) period = 1;
1265 if(runNo>122373 && runNo<126438) period = 2;
1266 if(runNo>127711 && runNo<130841) period = 3;
1267 if(period<0 || period>3) return 0;
1271 return fMultEstimatorAvg[period];
1274 //__________________________________________________________________________________________________
1275 void AliAnalysisTaskSEDvsMultiplicity::CreateMeasuredNchHisto(){
1276 // creates historgam with measured multiplcity distribution in pp 7 TeV collisions (from Eur. Phys. J. C (2010) 68: 345–354)
1278 // for Nch > 70 the points were obtainedwith a double NBD distribution
1279 // TF1 *fit1 = new TF1("fit1","[0]*(TMath::Gamma(x+[1])/(TMath::Gamma(x+1)*TMath::Gamma([1])))*(TMath::Power(([2]/[1]),x))*(TMath::Power((1+([2]/[1])),-x-[1]))"); fit1->SetParameter(0,1.);// normalization constant
1280 // fit1->SetParameter(1,1.63); // k parameter
1281 // fit1->SetParameter(2,12.8); // mean multiplicity
1282 Double_t nchbins[82]={0.50,1.50,2.50,3.50,4.50,5.50,6.50,7.50,8.50,9.50,
1283 10.50,11.50,12.50,13.50,14.50,15.50,16.50,17.50,18.50,19.50,
1284 20.50,21.50,22.50,23.50,24.50,25.50,26.50,27.50,28.50,29.50,
1285 30.50,31.50,32.50,33.50,34.50,35.50,36.50,37.50,38.50,39.50,
1286 40.50,41.50,42.50,43.50,44.50,45.50,46.50,47.50,48.50,49.50,
1287 50.50,51.50,52.50,53.50,54.50,55.50,56.50,57.50,58.50,59.50,
1288 60.50,62.50,64.50,66.50,68.50,70.50,72.50,74.50,76.50,78.50,
1289 80.50,82.50,84.50,86.50,88.50,90.50,92.50,94.50,96.50,98.50,
1291 Double_t pch[81]={0.062011,0.072943,0.070771,0.067245,0.062834,0.057383,0.051499,0.04591,0.041109,0.036954,
1292 0.03359,0.030729,0.028539,0.026575,0.024653,0.0229,0.021325,0.019768,0.018561,0.017187,
1293 0.01604,0.014836,0.013726,0.012576,0.011481,0.010393,0.009502,0.008776,0.008024,0.007452,
1294 0.006851,0.006428,0.00594,0.005515,0.005102,0.00469,0.004162,0.003811,0.003389,0.003071,
1295 0.002708,0.002422,0.002184,0.001968,0.00186,0.00165,0.001577,0.001387,0.001254,0.001118,
1296 0.001037,0.000942,0.000823,0.000736,0.000654,0.000579,0.000512,0.00049,0.00045,0.000355,
1297 0.000296,0.000265,0.000193,0.00016,0.000126,0.0000851, 0.0000676,0.0000537,0.0000426, 0.0000338,
1298 0.0000268,0.0000213,0.0000166,0.0000133,0.0000106,0.00000837,0.00000662, 0.00000524,0.00000414, 0.00000327,
1301 if(fHistoMeasNch) delete fHistoMeasNch;
1302 fHistoMeasNch=new TH1F("hMeaseNch","",81,nchbins);
1303 for(Int_t i=0; i<81; i++){
1304 fHistoMeasNch->SetBinContent(i+1,pch[i]);
1305 fHistoMeasNch->SetBinError(i+1,0.);
1309 //__________________________________________________________________________________________________
1310 void AliAnalysisTaskSEDvsMultiplicity::FillMCMassHistos(TClonesArray *arrayMC, Int_t labD, Int_t countMult,Double_t nchWeight)
1313 // Function to fill the true MC signal
1317 AliAODMCParticle *partD = (AliAODMCParticle*)arrayMC->At(labD);
1318 Double_t mass = partD->M();
1319 Double_t pt = partD->Pt();
1320 fPtVsMassVsMultMC->Fill(countMult,mass,pt,nchWeight);