24 #include <TClonesArray.h>
29 #include <TDatabasePDG.h>
33 #include <THnSparse.h>
35 #include "AliAnalysisManager.h"
40 #include "AliAODHandler.h"
41 #include "AliAODEvent.h"
42 #include "AliAODVertex.h"
43 #include "AliAODTrack.h"
47 #include "AliAnalysisTaskSE.h"
51 #include "AliAODVZERO.h"
52 #include "AliESDUtils.h"
65 fHistNtrCorrVsZvtx(0),
66 fHistNtrVsnTrackEvWithCand(0),
70 fHistNtrCorrVsSpheri(0),
72 fHistNtrCorrVsNchMC(0),
73 fHistNtrVsNchMCPrimary(0),
74 fHistNtrCorrVsNchMCPrimary(0),
75 fHistNtrVsNchMCPhysicalPrimary(0),
76 fHistNtrCorrVsNchMCPhysicalPrimary(0),
77 fHistGenPrimaryParticlesInelGt0(0),
78 fHistNchMCVsNchMCPrimaryVsNchMCPhysicalPrimary(0),
81 fHistNtrCorrEvWithCand(0),
82 fHistNtrCorrEvWithD(0),
83 fHistnTrackvsEtavsPhi(0),
84 fHistnTrackvsEtavsPhiEvWithCand(0),
85 fHistTrueSovsMeasSo(0),
86 fHistTrueSovsMeasSoEvWithCand(0),
88 fSparseEvtShapewithNoPid(0),
89 fSparseEvtShapePrompt(0),
90 fSparseEvtShapeFeeddown(0),
91 fSparseEvtShapeRecSphero(0),
96 fMCRecoBothPromptFD(0),
97 fMCAccGenPromptSpheri(0),
98 fMCAccGenFeeddownSpheri(0),
99 fMCRecoPromptSpheri(0),
100 fMCRecoFeeddownSpheri(0),
101 fMCRecoBothPromptFDSpheri(0),
102 fMCAccGenPromptEvSel(0),
103 fMCAccGenFeeddownEvSel(0),
105 fLowmasslimit(1.765),
110 fCounterCandidates(0),
113 fLowerImpPar(-2000.),
114 fHigherImpPar(2000.),
119 fSubtractTrackletsFromDau(kFALSE),
120 fCalculateSphericity(kFALSE),
121 fRecomputeSpherocity(kFALSE),
122 fRemoveD0fromDstar(kFALSE),
126 fUsePtWeight(kFALSE),
130 fMultiplicityEstimator(kNtrk10),
131 fMCPrimariesEstimator(kEta10),
132 fDoVZER0ParamVertexCorr(1),
133 fFillSoSparseChecks(0),
135 fFillTrackHisto(kFALSE),
148 for(
Int_t i=0; i<5; i++) fHistMassPtImpPar[i]=0;
149 for(
Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=0;
162 fHistNtrCorrVsZvtx(0),
163 fHistNtrVsnTrackEvWithCand(0),
167 fHistNtrCorrVsSpheri(0),
169 fHistNtrCorrVsNchMC(0),
170 fHistNtrVsNchMCPrimary(0),
171 fHistNtrCorrVsNchMCPrimary(0),
172 fHistNtrVsNchMCPhysicalPrimary(0),
173 fHistNtrCorrVsNchMCPhysicalPrimary(0),
174 fHistGenPrimaryParticlesInelGt0(0),
175 fHistNchMCVsNchMCPrimaryVsNchMCPhysicalPrimary(0),
176 fHistNtrCorrPSSel(0),
177 fHistNtrCorrEvSel(0),
178 fHistNtrCorrEvWithCand(0),
179 fHistNtrCorrEvWithD(0),
180 fHistnTrackvsEtavsPhi(0),
181 fHistnTrackvsEtavsPhiEvWithCand(0),
182 fHistTrueSovsMeasSo(0),
183 fHistTrueSovsMeasSoEvWithCand(0),
185 fSparseEvtShapewithNoPid(0),
186 fSparseEvtShapePrompt(0),
187 fSparseEvtShapeFeeddown(0),
188 fSparseEvtShapeRecSphero(0),
190 fMCAccGenFeeddown(0),
193 fMCRecoBothPromptFD(0),
194 fMCAccGenPromptSpheri(0),
195 fMCAccGenFeeddownSpheri(0),
196 fMCRecoPromptSpheri(0),
197 fMCRecoFeeddownSpheri(0),
198 fMCRecoBothPromptFDSpheri(0),
199 fMCAccGenPromptEvSel(0),
200 fMCAccGenFeeddownEvSel(0),
202 fLowmasslimit(1.765),
204 fRDCutsAnalysis(cuts),
207 fCounterCandidates(0),
210 fLowerImpPar(-2000.),
211 fHigherImpPar(2000.),
214 fisPPbData(switchPPb),
216 fSubtractTrackletsFromDau(kFALSE),
217 fCalculateSphericity(kFALSE),
218 fRecomputeSpherocity(kFALSE),
219 fRemoveD0fromDstar(kFALSE),
223 fUsePtWeight(kFALSE),
227 fMultiplicityEstimator(kNtrk10),
228 fMCPrimariesEstimator(kEta10),
229 fDoVZER0ParamVertexCorr(1),
230 fFillSoSparseChecks(0),
232 fFillTrackHisto(kFALSE),
259 DefineOutput(1,TList::Class());
261 DefineOutput(2,TList::Class());
263 DefineOutput(3,TList::Class());
265 DefineOutput(4,TList::Class());
267 DefineOutput(5,TList::Class());
285 for(
Int_t i=0; i<4; i++) {
289 for(
Int_t i=0; i<5; i++){
299 if(uplimit>lowlimit){
303 AliError(
"Wrong mass limits: upper value should be larger than lower one");
309 Double_t mass=TDatabasePDG::Instance()->GetParticle(TMath::Abs(pdg))->Mass();
317 printf(
"AnalysisTaskSEDvsMultiplicity_0::Init() \n");
320 if(
fUsePtWeight && !
fReadMC){ AliFatal(
"pT weights can only be used in MC mode");
return; }
324 if(
fisPPbData){ AliFatal(
"Nch weights can only be used with MC and data histogram in pPb");
return; }
335 copycut->SetName(
"AnalysisCutsDplus");
339 copycut->SetName(
"AnalysisCutsDzero");
343 copycut->SetName(
"AnalysisCutsDStar");
355 if (
fisPPbData) {period[0]=
"LHC13b"; period[1]=
"LHC13c"; nProfiles = 2;}
356 else {period[0]=
"LHC10b"; period[1]=
"LHC10c"; period[2]=
"LHC10d"; period[3]=
"LHC10e"; nProfiles = 4;}
358 for(
Int_t i=0; i<nProfiles; i++){
361 hprof->SetName(Form(
"ProfileTrkVsZvtx%s\n",period[i].
Data()));
376 if(fDebug > 1) printf(
"AnalysisTaskSEDvsMultiplicity::UserCreateOutputObjects() \n");
381 fOutput->SetName(
"OutputHistos");
387 Int_t nMultBins = 200;
390 Int_t nMultBinsNtrk = nMultBins;
391 Float_t lastMultBinNtrk = lastMultBin;
392 Int_t nMultBinsV0 = 400;
394 const char *estimatorName=
"tracklets";
397 lastMultBinNtrk = 374.5;
398 nMultBins = nMultBinsNtrk;
399 lastMultBin = lastMultBinNtrk;
402 nMultBins = nMultBinsV0;
403 lastMultBin = lastMultBinV0;
404 estimatorName =
"vzero";
407 fHistNtrCorrPSSel =
new TH1F(
"hNtrCorrPSSel",Form(
"Corrected %s multiplicity for PS selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
408 fHistNtrCorrEvSel =
new TH1F(
"hNtrCorrEvSel",Form(
"Corrected %s multiplicity for selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
409 fHistNtrCorrEvWithCand =
new TH1F(
"hNtrCorrEvWithCand", Form(
"%s multiplicity for events with D candidates; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
410 fHistNtrCorrEvWithD =
new TH1F(
"hNtrCorrEvWithD", Form(
"%s multiplicity for events with D in mass region ; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
412 fHistNtrVsZvtx =
new TH2F(
"hNtrVsZvtx",Form(
"N%s vs VtxZ; VtxZ;N_{%s};",estimatorName,estimatorName),300,-15,15,nMultBins,firstMultBin,lastMultBin);
413 fHistNtrCorrVsZvtx =
new TH2F(
"hNtrCorrVsZvtx",Form(
"N%s vs VtxZ; VtxZ;N_{%s};",estimatorName,estimatorName),300,-15,15,nMultBins,firstMultBin,lastMultBin);
414 fHistNtrVsnTrackEvWithCand =
new TH2F(
"hNtrVsnTrackEvWithCand",Form(
"N%s vs nTracks; nTracks; N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
420 histoNtrName =
"hNtrVsSphero";
421 histoNtrCorrName =
"hNtrCorrVsSphero";
422 parNameNtr =
"Sphero";
424 fHistNtrVsSo =
new TH2F(histoNtrName.Data(),Form(
"N_{%s} vs %s; %s; N_{%s};",estimatorName,parNameNtr.Data(),parNameNtr.Data(),estimatorName), 20, 0., 1., nMultBins,firstMultBin,lastMultBin);
425 fHistNtrCorrVsSo =
new TH2F(histoNtrCorrName.Data(),Form(
"N_{%s} vs %s; %s; N_{%s};",estimatorName,parNameNtr.Data(),parNameNtr.Data(),estimatorName), 20, 0., 1., nMultBins, firstMultBin,lastMultBin);
427 fHistnTrackvsEtavsPhi =
new TH3F(
"hnTrackvsEtavsPhi",
"Eta vs Phi vs nTracks; #eta; #phi[rad]; nTracks;", 100, -1.5, 1.5, 100, 0., 6.28,nMultBins,firstMultBin,lastMultBin);
428 fHistnTrackvsEtavsPhiEvWithCand =
new TH3F(
"hnTrackvsEtavsPhiEvWithCand",
"Eta vs Phi vs nTracks; #eta; #phi[rad]; nTracks;", 100, -1.5, 1.5, 100, 0., 6.28,nMultBins,firstMultBin,lastMultBin);
430 fHistTrueSovsMeasSo =
new TH3F(
"hTrueSovsMeasSo",
"trueSo vs measSo; S_{o} (true); S_{o} (meas); tracklets;", 100, 0., 1., 100, 0., 1., nMultBins, firstMultBin, lastMultBin);
431 fHistTrueSovsMeasSoEvWithCand =
new TH3F(
"hTrueSovsMeasSoEvWithCand",
"trueSo vs measSo; S_{o} (true); S_{o} (meas); tracklets;", 100, 0., 1., 100, 0., 1., nMultBins, firstMultBin, lastMultBin);
437 histoNtrSphriName =
"hNtrVsSpheri";
438 histoNtrCorrSphriName =
"hNtrCorrVsSpheri";
439 parNameNtrSphri =
"Spheri";
442 fHistNtrVsSpheri =
new TH2F(histoNtrSphriName.Data(),Form(
"N_{%s} vs %s; %s; N_{%s};",estimatorName,parNameNtrSphri.Data(),parNameNtrSphri.Data(),estimatorName), 20, 0., 1., nMultBins,firstMultBin,lastMultBin);
443 fHistNtrCorrVsSpheri =
new TH2F(histoNtrCorrSphriName.Data(),Form(
"N_{%s} vs %s; %s; N_{%s};",estimatorName,parNameNtrSphri.Data(),parNameNtrSphri.Data(),estimatorName), 20, 0., 1., nMultBins, firstMultBin,lastMultBin);
446 fHistNtrVsNchMC =
new TH2F(
"hNtrVsNchMC",Form(
"N%s vs NchMC; Nch;N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
447 fHistNtrCorrVsNchMC =
new TH2F(
"hNtrCorrVsNchMC",Form(
"N%s vs Nch; Nch;N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
449 fHistNtrVsNchMCPrimary =
new TH2F(
"hNtrVsNchMCPrimary",Form(
"N%s vs Nch (Primary); Nch (Primary);N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
450 fHistNtrCorrVsNchMCPrimary =
new TH2F(
"hNtrCorrVsNchMCPrimary",Form(
"N%s vs Nch (Primary); Nch(Primary) ;N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
452 fHistNtrVsNchMCPhysicalPrimary =
new TH2F(
"hNtrVsNchMCPhysicalPrimary",Form(
"N%s vs Nch (Physical Primary); Nch (Physical Primary);N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
453 fHistNtrCorrVsNchMCPhysicalPrimary =
new TH2F(
"hNtrCorrVsMCPhysicalPrimary",Form(
"N%s vs Nch (Physical Primary); Nch (Physical Primary);N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
455 fHistGenPrimaryParticlesInelGt0 =
new TH1F(
"hGenPrimaryParticlesInelGt0",
"Multiplcity of generated charged particles ; Nparticles ; Entries",nMultBins,firstMultBin,lastMultBin);
457 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);
487 fHistNEvents =
new TH1F(
"fHistNEvents",
"number of events ",11,-0.5,10.5);
488 fHistNEvents->GetXaxis()->SetBinLabel(1,
"nEvents total");
489 fHistNEvents->GetXaxis()->SetBinLabel(2,
"nEvents with Z vertex");
490 fHistNEvents->GetXaxis()->SetBinLabel(3,
"nEvents selected");
491 fHistNEvents->GetXaxis()->SetBinLabel(4,
"Rejected due to trigger");
492 fHistNEvents->GetXaxis()->SetBinLabel(5,
"Rejected due to phys sel");
493 fHistNEvents->GetXaxis()->SetBinLabel(6,
"Rejected due to vertex cuts");
494 fHistNEvents->GetXaxis()->SetBinLabel(7,
"Rejected due to pileup");
495 fHistNEvents->GetXaxis()->SetBinLabel(8,
"Total no. of candidate");
496 fHistNEvents->GetXaxis()->SetBinLabel(9,
"no. of cand wo bitmask");
497 fHistNEvents->GetXaxis()->SetBinLabel(10,
"D after cuts (No PID)");
498 fHistNEvents->GetXaxis()->SetBinLabel(11,
"D after cuts + PID)");
512 Int_t nbinsSowithMultUncorr[5]={48,
fNMassBins, 20, nMultBins, nMultBins};
516 Int_t nbinsSoSpheriwithMultUncorr[6]={48,
fNMassBins, 20, nMultBins, nMultBins, 20};
520 TString histoName =
"hSparseEvtShape";
521 TString histoNameNoPid =
"hSparseEvtShapewithNoPid";
522 TString parNameSo =
"Spherocity";
523 TString parNameSpheri =
"Sphericity";
524 TString histoNamePrompt =
"hSparseEvtShapePrompt";
525 TString histoNameFeeddown =
"hSparseEvtShapeFeeddown";
526 TString histoNameRecSphero =
"hSparseEvtShapeRecSphero";
529 if(
fCalculateSphericity)
fSparseEvtShape =
new THnSparseD(histoName.Data(), Form(
"D candidates:; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; %s; Multipicity; MultipicityUncorr; %s;", parNameSo.Data(), parNameSpheri.Data()), 6 , nbinsSoSpheriwithMultUncorr, xminSoSpheriwithMultUncorr, xmaxSoSpheriwithMultUncorr);
530 else fSparseEvtShape =
new THnSparseD(histoName.Data(), Form(
"D candidates:; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; %s; Multipicity; MultipicityUncorr;", parNameSo.Data()), 5 , nbinsSowithMultUncorr, xminSowithMultUncorr, xmaxSowithMultUncorr);
533 if(
fCalculateSphericity)
fSparseEvtShape =
new THnSparseD(histoName.Data(), Form(
"D candidates:; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; %s; Multipicity; %s;", parNameSo.Data(), parNameSpheri.Data()), 5 , nbinsSoSpheri, xminSoSpheri, xmaxSoSpheri);
534 else fSparseEvtShape =
new THnSparseD(histoName.Data(), Form(
"D candidates:; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; %s; Multipicity;", parNameSo.Data()), 4 , nbinsSo, xminSo, xmaxSo);
538 if(
fCalculateSphericity)
fSparseEvtShapewithNoPid =
new THnSparseD(histoNameNoPid.Data(), Form(
"D candidates with NoPID:; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; %s; Multipicity; %s;", parNameSo.Data(), parNameSpheri.Data()), 5 , nbinsSoSpheri, xminSoSpheri, xmaxSoSpheri);
539 else fSparseEvtShapewithNoPid =
new THnSparseD(histoNameNoPid.Data(), Form(
"D candidates with NoPID:; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; %s; Multipicity;", parNameSo.Data()), 4 , nbinsSo, xminSo, xmaxSo);
542 if(
fRecomputeSpherocity)
fSparseEvtShapeRecSphero =
new THnSparseD(histoNameRecSphero.Data(), Form(
"D candidates:; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; %s; Multipicity; RecSpherocity;", parNameSo.Data()), 5 , nbinsSoSpheri, xminSoSpheri, xmaxSoSpheri);
548 Int_t nbinsPrompt[4]={48, nMultBins, 20, 100};
549 Int_t nbinsFeeddown[4]={48, nMultBins, 20, 100};
550 Double_t xminPrompt[4] = {0.,firstMultBin, 0., -1.};
551 Double_t xmaxPrompt[4] = {24.,lastMultBin, 1., 1.};
552 Double_t xminFeeddown[4] = {0.,firstMultBin, 0., -1.};
553 Double_t xmaxFeeddown[4] = {24.,lastMultBin, 1., 1.};
555 Int_t nbinsRecSpheroPrompt[5]={48, nMultBins, 20, 100, 20};
556 Int_t nbinsRecSpheroFeeddown[5]={48, nMultBins, 20, 100, 20};
557 Double_t xminRecSpheroPrompt[5] = {0.,firstMultBin, 0., -1., 0.};
558 Double_t xmaxRecSpheroPrompt[5] = {24.,lastMultBin, 1., 1., 1.};
559 Double_t xminRecSpheroFeeddown[5] = {0.,firstMultBin, 0., -1., 0.};
560 Double_t xmaxRecSpheroFeeddown[5] = {24.,lastMultBin, 1., 1., 1.};
564 fSparseEvtShapePrompt =
new THnSparseD(histoNamePrompt.Data(), Form(
"D candidates:; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; %s; Multipicity; RecSpherocity;", parNameSo.Data()), 5 , nbinsSoSpheri, xminSoSpheri, xmaxSoSpheri);
565 fSparseEvtShapeFeeddown =
new THnSparseD(histoNameFeeddown.Data(), Form(
"D candidates:; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; %s; Multipicity; RecSpherocity;", parNameSo.Data()), 5 , nbinsSoSpheri, xminSoSpheri, xmaxSoSpheri);
568 fSparseEvtShapePrompt =
new THnSparseD(histoNamePrompt.Data(), Form(
"D candidates:; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; %s; Multipicity;", parNameSo.Data()), 4 , nbinsSo, xminSo, xmaxSo);
569 fSparseEvtShapeFeeddown =
new THnSparseD(histoNameFeeddown.Data(), Form(
"D candidates:; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; %s; Multipicity;", parNameSo.Data()), 4 , nbinsSo, xminSo, xmaxSo);
577 fMCAccGenPrompt =
new THnSparseD(
"hMCAccGenPrompt",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Spherocity; y; RecSpherocity; - promptD",5,nbinsRecSpheroPrompt,xminRecSpheroPrompt,xmaxRecSpheroPrompt);
578 fMCRecoPrompt =
new THnSparseD(
"hMCRecoPrompt",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Spherocity; y; RecSpherocity; - promptD",5,nbinsRecSpheroPrompt,xminRecSpheroPrompt,xmaxRecSpheroPrompt);
581 fMCAccGenPrompt =
new THnSparseD(
"hMCAccGenPrompt",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - promptD",4,nbinsPrompt,xminPrompt,xmaxPrompt);
582 fMCRecoPrompt =
new THnSparseD(
"hMCRecoPrompt",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - promptD",4,nbinsPrompt,xminPrompt,xmaxPrompt);
585 fMCAccGenPromptSpheri =
new THnSparseD(
"hMCAccGenPromptSpheri",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Sphericity; y; - promptD",4,nbinsPrompt,xminPrompt,xmaxPrompt);
586 fMCRecoPromptSpheri =
new THnSparseD(
"hMCRecoPromptSpheri",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Sphericity; y; - promptD",4,nbinsPrompt,xminPrompt,xmaxPrompt);
588 fMCAccGenPromptEvSel =
new THnSparseD(
"hMCAccGenPromptEvSel",
"kStepMCAcceptanceEvSel:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - promptD",4,nbinsPrompt,xminPrompt,xmaxPrompt);
592 fMCAccGenFeeddown =
new THnSparseD(
"hMCAccGenBFeeddown",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Spherocity; y; RecSpherocity; - DfromB",5,nbinsRecSpheroFeeddown,xminRecSpheroFeeddown,xmaxRecSpheroFeeddown);
593 fMCRecoFeeddown =
new THnSparseD(
"hMCRecoFeeddown",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Spherocity; y; RecSpherocity; - DfromB",5,nbinsRecSpheroFeeddown,xminRecSpheroFeeddown,xmaxRecSpheroFeeddown);
596 fMCAccGenFeeddown =
new THnSparseD(
"hMCAccGenBFeeddown",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - DfromB",4,nbinsFeeddown,xminFeeddown,xmaxFeeddown);
597 fMCRecoFeeddown =
new THnSparseD(
"hMCRecoFeeddown",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - DfromB",4,nbinsFeeddown,xminFeeddown,xmaxFeeddown);
600 fMCAccGenFeeddownSpheri =
new THnSparseD(
"hMCAccGenBFeeddownSpheri",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Sphericity; y; - DfromB",4,nbinsFeeddown,xminFeeddown,xmaxFeeddown);
601 fMCRecoFeeddownSpheri =
new THnSparseD(
"hMCRecoFeeddownSpheri",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Sphericity; y; - DfromB",4,nbinsFeeddown,xminFeeddown,xmaxFeeddown);
603 fMCAccGenFeeddownEvSel =
new THnSparseD(
"hMCAccGenBFeeddownEvSel",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - DfromB",4,nbinsFeeddown,xminFeeddown,xmaxFeeddown);
606 fMCRecoBothPromptFD =
new THnSparseD(
"hMCRecoBothPromptFD",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - BothPromptFD",4,nbinsPrompt,xminPrompt,xmaxPrompt);
667 TClonesArray *arrayCand = 0;
673 arrayName=
"Charm3Prong";
674 pdgDau[0]=211; pdgDau[1]=321; pdgDau[2]=211;
679 pdgDau[0]=211; pdgDau[1]=321; pdgDau[2]=0;
684 pdgDau[0]=321; pdgDau[1]=211; pdgDau[2]=0;
689 if(!aod && AODEvent() && IsStandardAOD()) {
695 AliAODHandler* aodHandler = (AliAODHandler*)
696 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
697 if(aodHandler->GetExtensions()) {
698 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(
"AliAOD.VertexingHF.root");
700 arrayCand=(TClonesArray*)aodFromExt->GetList()->FindObject(arrayName.Data());
703 arrayCand=(TClonesArray*)aod->GetList()->FindObject(arrayName.Data());
706 if(!aod || !arrayCand) {
707 printf(
"AliAnalysisTaskSEDvsEventShapes::UserExec: Charm3Prong branch not found!\n");
712 Int_t runnumber = aod->GetRunNumber();
713 if(aod->GetTriggerMask()==0 &&
714 (runnumber>=195344 && runnumber<=195677)){
715 AliDebug(3,
"Event rejected because of null trigger mask");
722 if(!aod->GetPrimaryVertex()||TMath::Abs(aod->GetMagneticField())<0.001)
return;
724 Int_t countTreta1=0, countTreta03=0, countTreta05=0, countTreta16=0;
725 AliAODTracklets* tracklets=aod->GetTracklets();
726 Int_t nTr=tracklets->GetNumberOfTracklets();
727 for(
Int_t iTr=0; iTr<nTr; iTr++){
728 Double_t theta=tracklets->GetTheta(iTr);
729 Double_t eta=-TMath::Log(TMath::Tan(theta/2.));
730 if(eta>-0.3 && eta<0.3) countTreta03++;
731 if(eta>-0.5 && eta<0.5) countTreta05++;
732 if(eta>-1.0 && eta<1.0) countTreta1++;
733 if(eta>-1.6 && eta<1.6) countTreta16++;
736 Int_t vzeroMult=0, vzeroMultA=0, vzeroMultC=0;
737 Int_t vzeroMultEq=0, vzeroMultAEq=0, vzeroMultCEq=0;
738 AliAODVZERO *vzeroAOD = (AliAODVZERO*)aod->GetVZEROData();
740 vzeroMultA =
static_cast<Int_t>(vzeroAOD->GetMTotV0A());
741 vzeroMultC =
static_cast<Int_t>(vzeroAOD->GetMTotV0C());
742 vzeroMult = vzeroMultA + vzeroMultC;
745 vzeroMultEq = vzeroMultAEq + vzeroMultCEq;
748 Int_t countMult = countTreta1;
768 Double_t countTreta1corr=countTreta1;
770 AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
773 Bool_t isDataDrivenZvtxCorr=kTRUE;
775 Int_t vzeroMultACorr=vzeroMultA, vzeroMultCCorr=vzeroMultC, vzeroMultCorr=vzeroMult;
776 Int_t vzeroMultAEqCorr=vzeroMultAEq, vzeroMultCEqCorr=vzeroMultCEq, vzeroMultEqCorr=vzeroMultEq;
778 if(vtx1->GetNContributors()>0){
788 isDataDrivenZvtxCorr=kFALSE;
792 isDataDrivenZvtxCorr=kFALSE;
793 vzeroMultACorr =
static_cast<Int_t>(AliESDUtils::GetCorrV0A(vzeroMultA,zvtx));
794 vzeroMultCCorr =
static_cast<Int_t>(AliESDUtils::GetCorrV0C(vzeroMultC,zvtx));
795 vzeroMultCorr = vzeroMultACorr + vzeroMultCCorr;
796 vzeroMultAEqCorr =
static_cast<Int_t>(AliESDUtils::GetCorrV0A(vzeroMultAEq,zvtx));
797 vzeroMultCEqCorr =
static_cast<Int_t>( AliESDUtils::GetCorrV0C(vzeroMultCEq,zvtx));
798 vzeroMultEqCorr = vzeroMultAEqCorr + vzeroMultCEqCorr;
807 if(isVtxOk && isDataDrivenZvtxCorr){
830 TClonesArray *arrayMC=0;
831 AliAODMCHeader *mcHeader=0;
836 Int_t nChargedMCEta10=0, nChargedMCEta03=0, nChargedMCEta05=0, nChargedMCEta16=0, nChargedMCEtam37tm17=0, nChargedMCEta28t51=0;
837 Int_t nChargedMCPrimaryEta10=0, nChargedMCPrimaryEta03=0, nChargedMCPrimaryEta05=0, nChargedMCPrimaryEta16=0, nChargedMCPrimaryEtam37tm17=0, nChargedMCPrimaryEta28t51=0;
838 Int_t nChargedMCPhysicalPrimaryEta10=0, nChargedMCPhysicalPrimaryEta03=0, nChargedMCPhysicalPrimaryEta05=0, nChargedMCPhysicalPrimaryEta16=0, nChargedMCPhysicalPrimaryEtam37tm17=0, nChargedMCPhysicalPrimaryEta28t51=0;
839 Int_t nChargedMC=0, nChargedMCPrimary=0, nChargedMCPhysicalPrimary=0;
845 arrayMC = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
847 printf(
"AliAnalysisTaskSEDvsEventShapes::UserExec: MC particles branch not found!\n");
851 mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
853 printf(
"AliAnalysisTaskSEDvsEventShapes::UserExec: MC header branch not found!\n");
857 for(
Int_t i=0; i<arrayMC->GetEntriesFast(); i++){
858 AliAODMCParticle *part=(AliAODMCParticle*)arrayMC->UncheckedAt(i);
861 Bool_t isPrim = part->IsPrimary();
862 Bool_t isPhysPrim = part->IsPhysicalPrimary();
864 if(eta>-0.3 && eta< 0.3) {
866 if(isPrim) nChargedMCPrimaryEta03++;
867 if(isPhysPrim) nChargedMCPhysicalPrimaryEta03++;
869 if(eta>-0.5 && eta< 0.5) {
871 if(isPrim) nChargedMCPrimaryEta05++;
872 if(isPhysPrim) nChargedMCPhysicalPrimaryEta05++;
874 if(eta>-1.0 && eta< 1.0) {
876 if(isPrim) nChargedMCPrimaryEta10++;
877 if(isPhysPrim) nChargedMCPhysicalPrimaryEta10++;
879 if(eta>-1.6 && eta< 1.6) {
881 if(isPrim) nChargedMCPrimaryEta16++;
882 if(isPhysPrim) nChargedMCPhysicalPrimaryEta16++;
884 if(eta>-3.7 && eta<-1.7) {
885 nChargedMCEtam37tm17++;
886 if(isPrim) nChargedMCPrimaryEtam37tm17++;
887 if(isPhysPrim) nChargedMCPhysicalPrimaryEtam37tm17++;
889 if(eta> 2.8 && eta< 5.1) {
890 nChargedMCEta28t51++;
891 if(isPrim) nChargedMCPrimaryEta28t51++;
892 if(isPhysPrim) nChargedMCPhysicalPrimaryEta28t51++;
897 nChargedMC=nChargedMCEta10;
898 nChargedMCPrimary=nChargedMCPrimaryEta10;
899 nChargedMCPhysicalPrimary=nChargedMCPhysicalPrimaryEta10;
905 Double_t tmpXweight=nChargedMCPhysicalPrimary;
908 if(tmpXweight<=0) tmpweight = 0.0;
913 tmpweight = pMC>0 ? pMeas/pMC : 0.;
915 nchWeight *= tmpweight;
916 AliDebug(2,Form(
"Using Nch weights, Mult=%f Weight=%f\n",tmpXweight,nchWeight));
919 FillMCGenAccHistos(aod, arrayMC, mcHeader, countCorr, spherocity, sphericity, isEvSel, nchWeight);
941 nChargedMC = nChargedMCEta16 - nChargedMCEta10;
942 nChargedMCPrimary = nChargedMCPrimaryEta16 - nChargedMCPrimaryEta10;
943 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEta16 - nChargedMCPhysicalPrimaryEta10;
945 nChargedMC = nChargedMCEta05;
946 nChargedMCPrimary = nChargedMCPrimaryEta05;
947 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEta05;
949 nChargedMC = nChargedMCEta03;
950 nChargedMCPrimary = nChargedMCPrimaryEta03;
951 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEta03;
953 nChargedMC = nChargedMCEtam37tm17 + nChargedMCEta28t51;
954 nChargedMCPrimary = nChargedMCPrimaryEtam37tm17 + nChargedMCPrimaryEta28t51;
955 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEtam37tm17 + nChargedMCPhysicalPrimaryEta28t51;
957 nChargedMC = nChargedMCEta28t51;
958 nChargedMCPrimary = nChargedMCPrimaryEta28t51;
959 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEta28t51;
962 if(nChargedMCPhysicalPrimary>0){
978 Int_t nCand = arrayCand->GetEntriesFast();
979 Int_t nSelectedNoPID=0,nSelectedPID=0,nSelectedInMassPeak=0;
980 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
981 Double_t mDplusPDG = TDatabasePDG::Instance()->GetParticle(411)->Mass();
982 Double_t mDstarPDG = TDatabasePDG::Instance()->GetParticle(413)->Mass();
985 UInt_t pdgDgDStartoD0pi[2]={421,211};
989 for (
Int_t iCand = 0; iCand < nCand; iCand++) {
1003 if(!isFidAcc)
continue;
1007 if(passTopolCuts==0)
continue;
1026 for(
Int_t iDau=0; iDau<nDau; iDau++){
1027 AliAODTrack *t = NULL;
1028 if(
fPdgMeson==413){ t = (AliAODTrack*)d0fromDstar->GetDaughter(iDau); }
1029 else{ t = (AliAODTrack*)d->GetDaughter(iDau); }
1031 if(t->HasPointOnITSLayer(0) && t->HasPointOnITSLayer(1)){
1032 if(multForCand>0) multForCand-=1;
1043 mass[0]=d->InvMass(nDau,pdgDau);
1045 if(TMath::Abs(mass[0]-mDplusPDG)<0.02) nSelectedInMassPeak++;
1047 UInt_t pdgdaughtersD0[2]={211,321};
1048 UInt_t pdgdaughtersD0bar[2]={321,211};
1049 mass[0]=d->InvMass(2,pdgdaughtersD0);
1050 mass[1]=d->InvMass(2,pdgdaughtersD0bar);
1051 if(TMath::Abs(mass[0]-mD0PDG)<0.02 || TMath::Abs(mass[1]-mD0PDG)<0.02 ) nSelectedInMassPeak++;
1056 if(TMath::Abs(mass[0]-(mDstarPDG-mD0PDG))<0.0015) nSelectedInMassPeak++;
1064 Int_t totTrkToSkip = d->GetNDaughters();
1065 const Int_t nTrkToSkip = totTrkToSkip;
1066 Int_t idToSkip[nTrkToSkip];
1067 for(
Int_t i=0; i<nTrkToSkip; i++) idToSkip[i]=-1;
1069 for(
Int_t iDau=0; iDau<nTrkToSkip; iDau++){
1070 AliAODTrack *t = NULL;
1071 t =
dynamic_cast<AliAODTrack*
>(d->GetDaughter(iDau));
1073 idToSkip[iDau] = t->GetID();
1075 recSpherocity=
AliVertexingHFUtils::GetSpherocity(aod,
fetaMin,
fetaMax,
fptMin,
fptMax,
ffiltbit1,
ffiltbit2,
fminMult,
fphiStepSizeDeg, nTrkToSkip, idToSkip);
1084 AliAODMCParticle* mcMoth =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(labD0));
1085 Int_t motherD0 = mcMoth->GetMother();
1086 AliAODMCParticle* mcMothD0 =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(motherD0));
1087 if(!mcMothD0)
continue;
1088 if(TMath::Abs(mcMothD0->GetPdgCode())==413) keep=kFALSE;
1097 for(
Int_t iHyp=0; iHyp<2; iHyp++){
1098 if(mass[iHyp]<0.)
continue;
1100 Double_t arrayForSparse[5]={invMass,ptCand,impparXY,dlen,multForCand};
1111 AliAODMCParticle *partD = (AliAODMCParticle*)arrayMC->At(labD);
1112 Int_t code=partD->GetPdgCode();
1114 if(Origin==5) isPrimary=kFALSE;
1115 if(code<0 && iHyp==0) fillHisto=kFALSE;
1116 if(code>0 && iHyp==1) fillHisto=kFALSE;
1125 Double_t arrayForSparseTrue[5]={invMass,ptCand,trueImpParXY,dlen,multForCand};
1126 if(fillHisto && passAllCuts){
1140 if(iHyp==0 && !(passTopolCuts&1))
continue;
1141 if(iHyp==1 && !(passTopolCuts&2))
continue;
1145 Double_t arrayForSparseSoNoPid[5]={ptCand, invMass, spherocity, multForCand, sphericity};
1148 Double_t arrayForSparseSoNoPid[4]={ptCand, invMass, spherocity, multForCand};
1153 if(iHyp==0 && !(passAllCuts&1))
continue;
1154 if(iHyp==1 && !(passAllCuts&2))
continue;
1157 aveMult+=multForCand;
1162 Double_t arrayForSparseSowithMultUnncorr[6]={ptCand, invMass, spherocity, multForCand, (
Double_t)countTreta1, sphericity};
1165 Double_t arrayForSparseSowithMultUnncorr[5]={ptCand, invMass, spherocity, multForCand, (
Double_t)countTreta1};
1171 Double_t arrayForSparseSo[5]={ptCand, invMass, spherocity, multForCand, sphericity};
1174 Double_t arrayForSparseSo[4]={ptCand, invMass, spherocity, multForCand};
1180 Double_t arrayForSparseRecSphero[5]={ptCand, invMass, spherocity, multForCand, recSpherocity};
1186 Double_t arrayForSparseSoPromptFD[5]={ptCand, invMass, spherocity, multForCand, recSpherocity};
1191 Double_t arrayForSparseSoPromptFD[4]={ptCand, invMass, spherocity, multForCand};
1200 AliAODMCParticle *partD = (AliAODMCParticle*)arrayMC->At(labD);
1201 Int_t code=partD->GetPdgCode();
1202 if(code<0 && iHyp==0) keepCase=kFALSE;
1203 if(code>0 && iHyp==1) keepCase=kFALSE;
1205 if(keepCase)
FillMCMassHistos(arrayMC,labD, multForCand, spherocity, sphericity, recSpherocity, nchWeight);
1245 "Mass vs. pt vs.imppar - All",
1248 "Mass vs. pt vs.imppar - promptD",
1251 "Mass vs. pt vs.imppar - DfromB",
1254 "Mass vs. pt vs.true imppar -DfromB",
1257 "Mass vs. pt vs.imppar - backgr.",
1259 for(
Int_t i=0; i<5;i++){
1269 if(fDebug > 1) printf(
"AnalysisTaskSEDvsMultiplicity: Terminate() \n");
1273 printf(
"ERROR: fOutput not available\n");
1279 printf(
"ERROR: fHistNEvents not available\n");
1282 printf(
"Number of Analyzed Events = %d\n",(
Int_t)
fHistNEvents->GetBinContent(3));
1295 Int_t runNo =
event->GetRunNumber();
1299 if (runNo>195343 && runNo<195484) period = 0;
1300 if (runNo>195528 && runNo<195678) period = 1;
1301 if (period < 0 || period > 1)
return 0;
1304 if(runNo>114930 && runNo<117223) period = 0;
1305 if(runNo>119158 && runNo<120830) period = 1;
1306 if(runNo>122373 && runNo<126438) period = 2;
1307 if(runNo>127711 && runNo<130851) period = 3;
1308 if(period<0 || period>3)
return 0;
1333 Double_t func1[4] = {0.322643,2.96275,2.30301,2.5};
1334 Double_t func2[4] = {0.36609,1.94635,1.40463,2.5};
1339 AliDebug(2,Form(
"pt = %f, FONLL = %f, Pythia = %f, ratio = %f",pt,dndpt_func1,dndpt_func2,dndpt_func1/dndpt_func2));
1340 return dndpt_func1/dndpt_func2;
1350 Double_t denom = TMath::Power((pt/par[1]), par[3] );
1351 Double_t dNdpt = par[0]*pt/TMath::Power(1.+denom, par[2]);
1366 Double_t nchbins[82]={0.50,1.50,2.50,3.50,4.50,5.50,6.50,7.50,8.50,9.50,
1367 10.50,11.50,12.50,13.50,14.50,15.50,16.50,17.50,18.50,19.50,
1368 20.50,21.50,22.50,23.50,24.50,25.50,26.50,27.50,28.50,29.50,
1369 30.50,31.50,32.50,33.50,34.50,35.50,36.50,37.50,38.50,39.50,
1370 40.50,41.50,42.50,43.50,44.50,45.50,46.50,47.50,48.50,49.50,
1371 50.50,51.50,52.50,53.50,54.50,55.50,56.50,57.50,58.50,59.50,
1372 60.50,62.50,64.50,66.50,68.50,70.50,72.50,74.50,76.50,78.50,
1373 80.50,82.50,84.50,86.50,88.50,90.50,92.50,94.50,96.50,98.50,
1375 Double_t pch[81]={0.062011,0.072943,0.070771,0.067245,0.062834,0.057383,0.051499,0.04591,0.041109,0.036954,
1376 0.03359,0.030729,0.028539,0.026575,0.024653,0.0229,0.021325,0.019768,0.018561,0.017187,
1377 0.01604,0.014836,0.013726,0.012576,0.011481,0.010393,0.009502,0.008776,0.008024,0.007452,
1378 0.006851,0.006428,0.00594,0.005515,0.005102,0.00469,0.004162,0.003811,0.003389,0.003071,
1379 0.002708,0.002422,0.002184,0.001968,0.00186,0.00165,0.001577,0.001387,0.001254,0.001118,
1380 0.001037,0.000942,0.000823,0.000736,0.000654,0.000579,0.000512,0.00049,0.00045,0.000355,
1381 0.000296,0.000265,0.000193,0.00016,0.000126,0.0000851, 0.0000676,0.0000537,0.0000426, 0.0000338,
1382 0.0000268,0.0000213,0.0000166,0.0000133,0.0000106,0.00000837,0.00000662, 0.00000524,0.00000414, 0.00000327,
1387 for(
Int_t i=0; i<81; i++){
1398 Int_t nTracks=aod->GetNumberOfTracks();
1405 for(
Int_t it=0; it<nTracks; it++) {
1406 AliAODTrack *tr=
dynamic_cast<AliAODTrack*
>(aod->GetTrack(it));
1411 if(eta<fetaMin || eta>
fetaMax)
continue;
1412 if(pt<fptMin || pt>
fptMax)
continue;
1415 if( !(fb1 || fb2) )
continue;
1417 Int_t status=tr->GetStatus();
1418 if(!(status & AliAODTrack::kTPCrefit))
continue;
1420 etaArr[nSelTracks]=eta;
1421 phiArr[nSelTracks]=phi;
1426 if(nSelTracks<
fminMult)
return kFALSE;
1430 for(
Int_t iselt=0; iselt<nSelTracks; iselt++) {
1433 if(nSelectedEvwithCand>0){
1448 AliAODMCParticle *partD = (AliAODMCParticle*)arrayMC->At(labD);
1464 Double_t arrayMCRecoRecSpheroPrompt[5] = {pt, countMult, spherocity, rapid, recSpherocity};
1465 Double_t arrayMCRecoPrompt[4] = {pt, countMult, spherocity, rapid};
1469 Double_t arrayMCRecoPromptSpheri[4] = {pt, countMult, sphericity, rapid};
1476 Double_t arrayMCRecoRecSpheroFeeddown[5] = {pt, countMult, spherocity, rapid, recSpherocity};
1477 Double_t arrayMCRecoFeeddown[4] = {pt, countMult, spherocity, rapid};
1481 Double_t arrayMCRecoFeeddownSpheri[4] = {pt, countMult, sphericity, rapid};
1486 Double_t arrayMCReco[4] = {pt, countMult, spherocity, rapid};
1489 Double_t arrayMCRecoSpheri[4] = {pt, countMult, sphericity, rapid};
1502 Int_t totPart = arrayMC->GetEntriesFast();
1503 Int_t totTracks = aod->GetNumberOfTracks();
1506 const Int_t nPart = totPart;
1507 Int_t trkToSkip[nPart];
1508 for(
Int_t i=0; i<nPart; i++) trkToSkip[i]=-1;
1511 for(
Int_t it=0; it<totTracks; it++){
1512 AliAODTrack *t=
dynamic_cast<AliAODTrack*
>(aod->GetTrack(it));
1514 if(!(t->TestFilterMask(BIT(4))))
continue;
1517 Int_t lab=TMath::Abs(t->GetLabel());
1518 Int_t id=t->GetID();
1521 if(pt<0.3)
continue;
1522 AliAODMCParticle* genDup =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(lab));
1525 Double_t rver = TMath::Sqrt(xver*xver + yver*yver);
1526 if(rver>3)
continue;
1527 trkToSkip[lab] = id;
1537 Int_t nTrkToSkip = nProng;
1538 Int_t idToSkip[nTrkToSkip];
1539 for(
Int_t i=0; i<nTrkToSkip; i++) idToSkip[i]=-1;
1541 Double_t zMCVertex = mcHeader->GetVtxZ();
1543 for(
Int_t iPart=0; iPart<totPart; iPart++){
1544 AliAODMCParticle* mcGenPart =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(iPart));
1546 if (TMath::Abs(mcGenPart->GetPdgCode()) ==
fPdgMeson){
1550 Bool_t isGoodDecay=kFALSE;
1551 Int_t labDau[4]={-1,-1,-1,-1};
1553 Bool_t isFidAcc = kFALSE;
1557 if(mcGenPart->GetNDaughters()!=2)
continue;
1558 if(deca==1) isGoodDecay=kTRUE;
1561 if(deca>0) isGoodDecay=kTRUE;
1564 if(deca==1) isGoodDecay=kTRUE;
1567 if(deca==1) isGoodDecay=kTRUE;
1575 for(
Int_t iDau=0; iDau<nTrkToSkip; iDau++){
1576 Int_t indexDau = TMath::Abs(mcGenPart->GetDaughter(iDau));
1577 idToSkip[iDau] = trkToSkip[indexDau];
1579 recSpherocity=
AliVertexingHFUtils::GetSpherocity(aod,
fetaMin,
fetaMax,
fptMin,
fptMax,
ffiltbit1,
ffiltbit2,
fminMult,
fphiStepSizeDeg, nTrkToSkip, idToSkip);
1584 Int_t mother = mcGenPart->GetMother();
1585 AliAODMCParticle* mcMoth =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(mother));
1586 if(!mcMoth)
continue;
1587 if(TMath::Abs(mcMoth->GetPdgCode())==413)
continue;
1606 Double_t arrayMCGenRecSpheroPrompt[5] = {pt, countMult, spherocity, rapid, recSpherocity};
1607 Double_t arrayMCGenPrompt[4] = {pt, countMult, spherocity, rapid};
1612 Double_t arrayMCGenPromptSpheri[4] = {pt, countMult, sphericity, rapid};
1619 Double_t arrayMCGenRecSpheroFeeddown[5] = {pt, countMult, spherocity, rapid, recSpherocity};
1620 Double_t arrayMCGenFeeddown[4] = {pt, countMult, spherocity, rapid};
1625 Double_t arrayMCGenFeeddownSpheri[4] = {pt, countMult, sphericity, rapid};
1640 for (
Int_t iProng = 0; iProng<nProng; iProng++){
1641 AliAODMCParticle* mcPartDaughter=
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(labDau[iProng]));
1642 if(!mcPartDaughter)
return kFALSE;
1643 Double_t eta = mcPartDaughter->Eta();
1644 Double_t pt = mcPartDaughter->Pt();
Double_t fetaMin
pt limits for acceptance step
Bool_t CheckGenAcc(TClonesArray *arrayMC, Int_t nProng, Int_t *labDau)
static Int_t CheckD0Decay(AliMCEvent *mcEvent, Int_t label, Int_t *arrayDauLab)
TH2F * fHistNtrCorrVsSo
hist of ntracklets vs So
THnSparseD * fMCRecoPromptSpheri
histo for StepMCGenAcc for D meson feeddown for Sphericity
Bool_t fCalculateSphericity
void StoreCandidates(AliVEvent *, Int_t nCand=0, Bool_t flagFilter=kTRUE)
Double_t DeltaInvMass() const
static Int_t CheckDplusDecay(AliMCEvent *mcEvent, Int_t label, Int_t *arrayDauLab)
Int_t fMultiplicityEstimator
TH2F * fHistNtrCorrVsSpheri
hist of ntracklets vs Spheri
AliNormalizationCounter * fCounterCandidates
Counter for normalization, uncorrected multiplicity.
Int_t GetIsSelectedCuts() const
Bool_t fSubtractTrackletsFromDau
Bool_t HasSelectionBit(Int_t i) const
Int_t MatchToMC(Int_t pdgabs, Int_t pdgabs2prong, Int_t *pdgDg, Int_t *pdgDg2prong, TClonesArray *mcArray, Bool_t isV0=kFALSE) const
static Int_t CheckDsDecay(AliMCEvent *mcEvent, Int_t label, Int_t *arrayDauLab)
THnSparseD * fMCAccGenFeeddown
histo for StepMCGenAcc for D meson prompt
Double_t ImpParXY() const
TH3F * fHistnTrackvsEtavsPhi
hist. of ntracklets for evnts with a candidate in D mass peak
THnSparseD * fMCRecoFeeddown
histo for StepMCReco for D meson feeddown
THnSparseD * fSparseEvtShapeFeeddown
THnSparse histograms for Prompt D0 vs. Spherocity.
Int_t fFillSoSparseChecks
TH2F * fHistNtrVsNchMCPhysicalPrimary
! hist of ntracklets vs Nch (Physical Primary)
TH2F * fHistNtrCorrVsNchMCPhysicalPrimary
! hist of ntracklets vs Nch (Physical Primary)
Int_t fMCPrimariesEstimator
Int_t GetWhyRejection() const
virtual void UserCreateOutputObjects()
THnSparseD * fMCAccGenFeeddownEvSel
histo for StepMCGenAcc for D meson prompt with Vertex selection (IsEvSel = kTRUE) ...
TH2F * fHistNtrVsNchMC
hist of ntracklets vs Spheri
virtual void UserExec(Option_t *option)
static Int_t CheckOrigin(TClonesArray *arrayMC, AliAODMCParticle *mcPart, Bool_t searchUpToQuark=kTRUE)
Functions to check the decay tree.
Double_t GetMaxVtxZ() const
Bool_t fRemoveD0fromDstar
Bool_t fRecomputeSpherocity
TH2F * fHistNtrCorrVsZvtx
hist of ntracklets vs Zvertex
THnSparseF * fHistMassPtImpPar[5]
histo for StepMCGenAcc for D meson feeddown with Vertex selection (IsEvSel = kTRUE) ...
TH2F * fHistNtrVsZvtx
hist. for No. of events
THnSparseD * fSparseEvtShape
Bool_t fDoImpPar
Counter for normalization, corrected multiplicity for candidates.
TList * fListProfiles
list send on output slot 3
THnSparseD * fMCRecoPrompt
histo for StepMCGenAcc for D meson feeddown
static Double_t GetVZEROCEqualizedMultiplicity(AliAODEvent *ev)
THnSparseD * fSparseEvtShapewithNoPid
THnSparse histograms for Spherocity.
virtual ~AliAnalysisTaskSEDvsEventShapes()
Class for cuts on AOD reconstructed D+->Kpipi.
TH2F * fHistNtrVsnTrackEvWithCand
hist of ntracklets vs Zvertex
void SetStudyMultiplicity(Bool_t flag, Float_t etaRange)
void FillMCGenAccHistos(AliAODEvent *aod, TClonesArray *arrayMC, AliAODMCHeader *mcHeader, Double_t countMult, Double_t spherocity, Double_t sphericity, Bool_t isEvSel, Double_t nchWeight)
TH2F * fHistNtrCorrVsNchMC
! hist of ntracklets vs Nch (Generated)
THnSparseD * fMCRecoFeeddownSpheri
histo for StepMCReco for D meson feeddown for Sphericity
AliAnalysisTaskSEDvsEventShapes()
Int_t fDoVZER0ParamVertexCorr
THnSparseD * fMCRecoBothPromptFDSpheri
histo for StepMCReco for D meson feeddown for Sphericity
TH3F * fHistTrueSovsMeasSo
! hist. of number of tracks passing track selection for spherocity calculation vs eta vs...
TH2F * fHistNtrVsNchMCPrimary
! hist of ntracklets vs Nch (Primary)
TH3F * fHistNchMCVsNchMCPrimaryVsNchMCPhysicalPrimary
! hist of Nch (generated) vs Nch (Primary) vs Nch (Physical Primary)
Bool_t fFillTrackHisto
flag for quark/hadron level identification of prompt and feeddown
AliNormalizationCounter * fCounterU
Counter for normalization, corrected multiplicity.
static Double_t GetGeneratedSpherocity(TClonesArray *arrayMC, Double_t etaMin=-0.8, Double_t etaMax=0.8, Double_t ptMin=0.15, Double_t ptMax=10., Int_t minMult=3, Double_t phiStepSizeDeg=0.1)
AliRDHFCuts * fRDCutsAnalysis
void SetStudySpherocity(Bool_t flag, Double_t nsteps=100.)
THnSparseD * fSparseEvtShapePrompt
THnSparse histograms for D0 vs. Spherocity.
TH3F * fHistTrueSovsMeasSoEvWithCand
! hist. of number of tracks passing track selection for spherocity calculation vs eta vs...
TH1F * fHistNtrCorrEvSel
hist. of ntracklets for physics selection only selected events
void SetMassLimits(Double_t lowlimit, Double_t uplimit)
void CreateImpactParameterHistos()
static Int_t CheckDstarDecay(AliMCEvent *mcEvent, Int_t label, Int_t *arrayDauLab)
TProfile * fMultEstimatorAvg[4]
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
TH1F * fHistNtrCorrEvWithD
hist. of ntracklets for evnts with a candidate
Bool_t IsEventRejectedDuePhysicsSelection() const
TProfile * GetEstimatorHistogram(const AliVEvent *event)
TH1F * fHistNtrCorrEvWithCand
hist. of ntracklets for selected events
Bool_t FillTrackControlHisto(AliAODEvent *aod, Int_t nSelTrkCorr, Double_t spherocity, Double_t genspherocity, Int_t nSelectedEvwithCand)
THnSparseD * fMCAccGenFeeddownSpheri
histo for StepMCGenAcc for D meson prompt for Sphericity
ClassImp(AliAnalysisTaskSEDvsEventShapes) AliAnalysisTaskSEDvsEventShapes
static Double_t GetCorrectedNtracklets(TProfile *estimatorAvg, Double_t uncorrectedNacc, Double_t vtxZ, Double_t refMult)
THnSparseD * fMCRecoBothPromptFD
histo for StepMCReco for D meson feeddown
Bool_t IsEventSelected(AliVEvent *event)
THnSparseD * fMCAccGenPromptSpheri
histo for StepMCReco for D meson Both Prompt Feeddown
void StoreEvent(AliVEvent *, AliRDHFCuts *, Bool_t mc=kFALSE, Int_t multiplicity=-9999, Double_t spherocity=-99.)
Double_t fUpmasslimit
histograms for impact paramter studies
Double_t dNdptFit(Float_t pt, Double_t *par)
Double_t GetPtWeight(Float_t pt)
THnSparseD * fMCAccGenPromptEvSel
histo for StepMCReco for D meson Both Prompt Feeddown for Sphericity
void FillMCMassHistos(TClonesArray *arrayMC, Int_t labD, Double_t countMult, Double_t spherocity, Double_t sphericity, Double_t recSpherocity, Double_t nchWeight)
TH3F * fHistnTrackvsEtavsPhiEvWithCand
! hist. of number of tracks passing track selection for spherocity calculation vs eta vs...
Double_t fPtAccCut
eta limits for acceptance step
Bool_t IsSelected(TObject *obj)
TList * fListCuts
list send on output slot 1
THnSparseD * fSparseEvtShapeRecSphero
THnSparse histograms for feeddown D0 vs. Spherocity.
TH1F * fHistGenPrimaryParticlesInelGt0
!hist. of geenrated multiplcity
static Double_t GetVZEROAEqualizedMultiplicity(AliAODEvent *ev)
Utilities for V0 multiplicity checks.
static Double_t GetTrueImpactParameterDzero(AliAODMCHeader *mcHeader, TClonesArray *arrayMC, AliAODMCParticle *partDp)
Functions for computing true impact parameter of D meson.
AliNormalizationCounter * fCounterC
void CreateMeasuredNchHisto()
TH2F * fHistNtrCorrVsNchMCPrimary
! hist of ntracklets vs Nch (Primary)
AliAODRecoDecayHF2Prong * Get2Prong() const
THnSparseD * fMCAccGenPrompt
THnSparse histograms for Both Prompt and feeddown D0 vs. Spherocity.
static Double_t GetTrueImpactParameterDplus(AliAODMCHeader *mcHeader, TClonesArray *arrayMC, AliAODMCParticle *partDp)
Double_t fEtaAccCut
flag for filling track control histograms
virtual Bool_t IsInFiducialAcceptance(Double_t, Double_t) const
virtual void Terminate(Option_t *option)
static Double_t GetSphericity(AliAODEvent *aod, Double_t etaMin=-0.8, Double_t etaMax=0.8, Double_t ptMin=0.15, Double_t ptMax=10., Int_t filtbit1=256, Int_t filtbit2=512, Int_t minMult=3)
TH2F * fHistNtrVsSpheri
hist of ntracklets vs So
TH1F * fHistNEvents
list send on output slot 5
static Double_t GetSpherocity(AliAODEvent *aod, Double_t etaMin=-0.8, Double_t etaMax=0.8, Double_t ptMin=0.15, Double_t ptMax=10., Int_t filtbit1=256, Int_t filtbit2=512, Int_t minMult=3, Double_t phiStepSizeDeg=0.1, Int_t nTrksToSkip=0, Int_t *idToSkip=0x0)
Functions for event shape variables.