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),
87 fHistSpheroAxisDeltaPhi(0),
88 fHistSpheroAxisDeltaGenPhi(0),
90 fSparseEvtShapewithNoPid(0),
91 fSparseEvtShapePrompt(0),
92 fSparseEvtShapeFeeddown(0),
93 fSparseEvtShapeRecSphero(0),
98 fMCRecoBothPromptFD(0),
99 fMCAccGenPromptSpheri(0),
100 fMCAccGenFeeddownSpheri(0),
101 fMCRecoPromptSpheri(0),
102 fMCRecoFeeddownSpheri(0),
103 fMCRecoBothPromptFDSpheri(0),
104 fMCAccGenPromptEvSel(0),
105 fMCAccGenFeeddownEvSel(0),
107 fLowmasslimit(1.765),
112 fCounterCandidates(0),
115 fLowerImpPar(-2000.),
116 fHigherImpPar(2000.),
121 fSubtractTrackletsFromDau(kFALSE),
122 fCalculateSphericity(kFALSE),
123 fRecomputeSpherocity(kFALSE),
124 fRemoveD0fromDstar(kFALSE),
128 fUsePtWeight(kFALSE),
132 fMultiplicityEstimator(kNtrk10),
133 fMCPrimariesEstimator(kEta10),
134 fDoVZER0ParamVertexCorr(1),
135 fFillSoSparseChecks(0),
137 fFillTrackHisto(kFALSE),
150 for(
Int_t i=0; i<5; i++) fHistMassPtImpPar[i]=0;
151 for(
Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=0;
164 fHistNtrCorrVsZvtx(0),
165 fHistNtrVsnTrackEvWithCand(0),
169 fHistNtrCorrVsSpheri(0),
171 fHistNtrCorrVsNchMC(0),
172 fHistNtrVsNchMCPrimary(0),
173 fHistNtrCorrVsNchMCPrimary(0),
174 fHistNtrVsNchMCPhysicalPrimary(0),
175 fHistNtrCorrVsNchMCPhysicalPrimary(0),
176 fHistGenPrimaryParticlesInelGt0(0),
177 fHistNchMCVsNchMCPrimaryVsNchMCPhysicalPrimary(0),
178 fHistNtrCorrPSSel(0),
179 fHistNtrCorrEvSel(0),
180 fHistNtrCorrEvWithCand(0),
181 fHistNtrCorrEvWithD(0),
182 fHistnTrackvsEtavsPhi(0),
183 fHistnTrackvsEtavsPhiEvWithCand(0),
184 fHistTrueSovsMeasSo(0),
185 fHistTrueSovsMeasSoEvWithCand(0),
186 fHistSpheroAxisDeltaPhi(0),
187 fHistSpheroAxisDeltaGenPhi(0),
189 fSparseEvtShapewithNoPid(0),
190 fSparseEvtShapePrompt(0),
191 fSparseEvtShapeFeeddown(0),
192 fSparseEvtShapeRecSphero(0),
194 fMCAccGenFeeddown(0),
197 fMCRecoBothPromptFD(0),
198 fMCAccGenPromptSpheri(0),
199 fMCAccGenFeeddownSpheri(0),
200 fMCRecoPromptSpheri(0),
201 fMCRecoFeeddownSpheri(0),
202 fMCRecoBothPromptFDSpheri(0),
203 fMCAccGenPromptEvSel(0),
204 fMCAccGenFeeddownEvSel(0),
206 fLowmasslimit(1.765),
208 fRDCutsAnalysis(cuts),
211 fCounterCandidates(0),
214 fLowerImpPar(-2000.),
215 fHigherImpPar(2000.),
218 fisPPbData(switchPPb),
220 fSubtractTrackletsFromDau(kFALSE),
221 fCalculateSphericity(kFALSE),
222 fRecomputeSpherocity(kFALSE),
223 fRemoveD0fromDstar(kFALSE),
227 fUsePtWeight(kFALSE),
231 fMultiplicityEstimator(kNtrk10),
232 fMCPrimariesEstimator(kEta10),
233 fDoVZER0ParamVertexCorr(1),
234 fFillSoSparseChecks(0),
236 fFillTrackHisto(kFALSE),
263 DefineOutput(1,TList::Class());
265 DefineOutput(2,TList::Class());
267 DefineOutput(3,TList::Class());
269 DefineOutput(4,TList::Class());
271 DefineOutput(5,TList::Class());
289 for(
Int_t i=0; i<4; i++) {
293 for(
Int_t i=0; i<5; i++){
303 if(uplimit>lowlimit){
307 AliError(
"Wrong mass limits: upper value should be larger than lower one");
313 Double_t mass=TDatabasePDG::Instance()->GetParticle(TMath::Abs(pdg))->Mass();
321 printf(
"AnalysisTaskSEDvsMultiplicity_0::Init() \n");
324 if(
fUsePtWeight && !
fReadMC){ AliFatal(
"pT weights can only be used in MC mode");
return; }
328 if(
fisPPbData){ AliFatal(
"Nch weights can only be used with MC and data histogram in pPb");
return; }
339 copycut->SetName(
"AnalysisCutsDplus");
343 copycut->SetName(
"AnalysisCutsDzero");
347 copycut->SetName(
"AnalysisCutsDStar");
359 if (
fisPPbData) {period[0]=
"LHC13b"; period[1]=
"LHC13c"; nProfiles = 2;}
360 else {period[0]=
"LHC10b"; period[1]=
"LHC10c"; period[2]=
"LHC10d"; period[3]=
"LHC10e"; nProfiles = 4;}
362 for(
Int_t i=0; i<nProfiles; i++){
365 hprof->SetName(Form(
"ProfileTrkVsZvtx%s\n",period[i].
Data()));
380 if(fDebug > 1) printf(
"AnalysisTaskSEDvsMultiplicity::UserCreateOutputObjects() \n");
385 fOutput->SetName(
"OutputHistos");
391 Int_t nMultBins = 200;
394 Int_t nMultBinsNtrk = nMultBins;
395 Float_t lastMultBinNtrk = lastMultBin;
396 Int_t nMultBinsV0 = 400;
398 const char *estimatorName=
"tracklets";
401 lastMultBinNtrk = 374.5;
402 nMultBins = nMultBinsNtrk;
403 lastMultBin = lastMultBinNtrk;
406 nMultBins = nMultBinsV0;
407 lastMultBin = lastMultBinV0;
408 estimatorName =
"vzero";
411 fHistNtrCorrPSSel =
new TH1F(
"hNtrCorrPSSel",Form(
"Corrected %s multiplicity for PS selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
412 fHistNtrCorrEvSel =
new TH1F(
"hNtrCorrEvSel",Form(
"Corrected %s multiplicity for selected events; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
413 fHistNtrCorrEvWithCand =
new TH1F(
"hNtrCorrEvWithCand", Form(
"%s multiplicity for events with D candidates; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
414 fHistNtrCorrEvWithD =
new TH1F(
"hNtrCorrEvWithD", Form(
"%s multiplicity for events with D in mass region ; %s ; Entries",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin);
416 fHistNtrVsZvtx =
new TH2F(
"hNtrVsZvtx",Form(
"N%s vs VtxZ; VtxZ;N_{%s};",estimatorName,estimatorName),300,-15,15,nMultBins,firstMultBin,lastMultBin);
417 fHistNtrCorrVsZvtx =
new TH2F(
"hNtrCorrVsZvtx",Form(
"N%s vs VtxZ; VtxZ;N_{%s};",estimatorName,estimatorName),300,-15,15,nMultBins,firstMultBin,lastMultBin);
418 fHistNtrVsnTrackEvWithCand =
new TH2F(
"hNtrVsnTrackEvWithCand",Form(
"N%s vs nTracks; nTracks; N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
424 histoNtrName =
"hNtrVsSphero";
425 histoNtrCorrName =
"hNtrCorrVsSphero";
426 parNameNtr =
"Sphero";
428 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);
429 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);
431 fHistnTrackvsEtavsPhi =
new TH3F(
"hnTrackvsEtavsPhi",
"Eta vs Phi vs nTracks; #eta; #varphi[rad]; nTracks;", 100, -1.5, 1.5, 200, 0., 2*TMath::Pi(),nMultBins,firstMultBin,lastMultBin);
432 fHistnTrackvsEtavsPhiEvWithCand =
new TH3F(
"hnTrackvsEtavsPhiEvWithCand",
"Eta vs Phi vs nTracks; #eta; #varphi[rad]; nTracks;", 100, -1.5, 1.5, 200, 0., 2*TMath::Pi(),nMultBins,firstMultBin,lastMultBin);
434 fHistTrueSovsMeasSo =
new TH3F(
"hTrueSovsMeasSo",
"trueSo vs measSo; S_{o} (true); S_{o} (meas); tracklets;", 100, 0., 1., 100, 0., 1., nMultBins, firstMultBin, lastMultBin);
435 fHistTrueSovsMeasSoEvWithCand =
new TH3F(
"hTrueSovsMeasSoEvWithCand",
"trueSo vs measSo; S_{o} (true); S_{o} (meas); tracklets;", 100, 0., 1., 100, 0., 1., nMultBins, firstMultBin, lastMultBin);
437 fHistSpheroAxisDeltaPhi =
new TH3F(
"hSpheroAxisDeltaPhi",
"Spherocit axis - D-meson direction; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; #Delta#varphi [rad];", 48, 0., 24.,
fNMassBins,
fLowmasslimit,
fUpmasslimit, 200, 0., 2*TMath::Pi());
439 fHistSpheroAxisDeltaGenPhi =
new TH3F(
"hSpheroAxisDeltaGenPhi",
"Spherocit axis - D-meson direction; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; #Delta#varphi (Gen) [rad];", 48, 0., 24.,
fNMassBins,
fLowmasslimit,
fUpmasslimit, 200, 0., 2*TMath::Pi());
445 histoNtrSphriName =
"hNtrVsSpheri";
446 histoNtrCorrSphriName =
"hNtrCorrVsSpheri";
447 parNameNtrSphri =
"Spheri";
450 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);
451 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);
454 fHistNtrVsNchMC =
new TH2F(
"hNtrVsNchMC",Form(
"N%s vs NchMC; Nch;N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
455 fHistNtrCorrVsNchMC =
new TH2F(
"hNtrCorrVsNchMC",Form(
"N%s vs Nch; Nch;N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
457 fHistNtrVsNchMCPrimary =
new TH2F(
"hNtrVsNchMCPrimary",Form(
"N%s vs Nch (Primary); Nch (Primary);N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
458 fHistNtrCorrVsNchMCPrimary =
new TH2F(
"hNtrCorrVsNchMCPrimary",Form(
"N%s vs Nch (Primary); Nch(Primary) ;N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
460 fHistNtrVsNchMCPhysicalPrimary =
new TH2F(
"hNtrVsNchMCPhysicalPrimary",Form(
"N%s vs Nch (Physical Primary); Nch (Physical Primary);N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
461 fHistNtrCorrVsNchMCPhysicalPrimary =
new TH2F(
"hNtrCorrVsMCPhysicalPrimary",Form(
"N%s vs Nch (Physical Primary); Nch (Physical Primary);N_{%s};",estimatorName,estimatorName),nMultBins,firstMultBin,lastMultBin,nMultBins,firstMultBin,lastMultBin);
463 fHistGenPrimaryParticlesInelGt0 =
new TH1F(
"hGenPrimaryParticlesInelGt0",
"Multiplcity of generated charged particles ; Nparticles ; Entries",nMultBins,firstMultBin,lastMultBin);
465 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);
497 fHistNEvents =
new TH1F(
"fHistNEvents",
"number of events ",11,-0.5,10.5);
498 fHistNEvents->GetXaxis()->SetBinLabel(1,
"nEvents total");
499 fHistNEvents->GetXaxis()->SetBinLabel(2,
"nEvents with Z vertex");
500 fHistNEvents->GetXaxis()->SetBinLabel(3,
"nEvents selected");
501 fHistNEvents->GetXaxis()->SetBinLabel(4,
"Rejected due to trigger");
502 fHistNEvents->GetXaxis()->SetBinLabel(5,
"Rejected due to phys sel");
503 fHistNEvents->GetXaxis()->SetBinLabel(6,
"Rejected due to vertex cuts");
504 fHistNEvents->GetXaxis()->SetBinLabel(7,
"Rejected due to pileup");
505 fHistNEvents->GetXaxis()->SetBinLabel(8,
"Total no. of candidate");
506 fHistNEvents->GetXaxis()->SetBinLabel(9,
"no. of cand wo bitmask");
507 fHistNEvents->GetXaxis()->SetBinLabel(10,
"D after cuts (No PID)");
508 fHistNEvents->GetXaxis()->SetBinLabel(11,
"D after cuts + PID)");
522 Int_t nbinsSowithMultUncorr[5]={48,
fNMassBins, 20, nMultBins, nMultBins};
526 Int_t nbinsSoSpheriwithMultUncorr[6]={48,
fNMassBins, 20, nMultBins, nMultBins, 20};
530 TString histoName =
"hSparseEvtShape";
531 TString histoNameNoPid =
"hSparseEvtShapewithNoPid";
532 TString parNameSo =
"Spherocity";
533 TString parNameSpheri =
"Sphericity";
534 TString histoNamePrompt =
"hSparseEvtShapePrompt";
535 TString histoNameFeeddown =
"hSparseEvtShapeFeeddown";
536 TString histoNameRecSphero =
"hSparseEvtShapeRecSphero";
539 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);
540 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);
543 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);
544 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);
548 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);
549 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);
552 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);
558 Int_t nbinsPrompt[4]={48, nMultBins, 20, 100};
559 Int_t nbinsFeeddown[4]={48, nMultBins, 20, 100};
560 Double_t xminPrompt[4] = {0.,firstMultBin, 0., -1.};
561 Double_t xmaxPrompt[4] = {24.,lastMultBin, 1., 1.};
562 Double_t xminFeeddown[4] = {0.,firstMultBin, 0., -1.};
563 Double_t xmaxFeeddown[4] = {24.,lastMultBin, 1., 1.};
565 Int_t nbinsRecSpheroPrompt[5]={48, nMultBins, 20, 100, 20};
566 Int_t nbinsRecSpheroFeeddown[5]={48, nMultBins, 20, 100, 20};
567 Double_t xminRecSpheroPrompt[5] = {0.,firstMultBin, 0., -1., 0.};
568 Double_t xmaxRecSpheroPrompt[5] = {24.,lastMultBin, 1., 1., 1.};
569 Double_t xminRecSpheroFeeddown[5] = {0.,firstMultBin, 0., -1., 0.};
570 Double_t xmaxRecSpheroFeeddown[5] = {24.,lastMultBin, 1., 1., 1.};
574 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);
575 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);
578 fSparseEvtShapePrompt =
new THnSparseD(histoNamePrompt.Data(), Form(
"D candidates:; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; %s; Multipicity;", parNameSo.Data()), 4 , nbinsSo, xminSo, xmaxSo);
579 fSparseEvtShapeFeeddown =
new THnSparseD(histoNameFeeddown.Data(), Form(
"D candidates:; p_{T} [GeV/c]; InvMass [GeV/c^{2}]; %s; Multipicity;", parNameSo.Data()), 4 , nbinsSo, xminSo, xmaxSo);
587 fMCAccGenPrompt =
new THnSparseD(
"hMCAccGenPrompt",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Spherocity; y; RecSpherocity; - promptD",5,nbinsRecSpheroPrompt,xminRecSpheroPrompt,xmaxRecSpheroPrompt);
588 fMCRecoPrompt =
new THnSparseD(
"hMCRecoPrompt",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Spherocity; y; RecSpherocity; - promptD",5,nbinsRecSpheroPrompt,xminRecSpheroPrompt,xmaxRecSpheroPrompt);
591 fMCAccGenPrompt =
new THnSparseD(
"hMCAccGenPrompt",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - promptD",4,nbinsPrompt,xminPrompt,xmaxPrompt);
592 fMCRecoPrompt =
new THnSparseD(
"hMCRecoPrompt",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - promptD",4,nbinsPrompt,xminPrompt,xmaxPrompt);
595 fMCAccGenPromptSpheri =
new THnSparseD(
"hMCAccGenPromptSpheri",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Sphericity; y; - promptD",4,nbinsPrompt,xminPrompt,xmaxPrompt);
596 fMCRecoPromptSpheri =
new THnSparseD(
"hMCRecoPromptSpheri",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Sphericity; y; - promptD",4,nbinsPrompt,xminPrompt,xmaxPrompt);
598 fMCAccGenPromptEvSel =
new THnSparseD(
"hMCAccGenPromptEvSel",
"kStepMCAcceptanceEvSel:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - promptD",4,nbinsPrompt,xminPrompt,xmaxPrompt);
602 fMCAccGenFeeddown =
new THnSparseD(
"hMCAccGenBFeeddown",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Spherocity; y; RecSpherocity; - DfromB",5,nbinsRecSpheroFeeddown,xminRecSpheroFeeddown,xmaxRecSpheroFeeddown);
603 fMCRecoFeeddown =
new THnSparseD(
"hMCRecoFeeddown",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Spherocity; y; RecSpherocity; - DfromB",5,nbinsRecSpheroFeeddown,xminRecSpheroFeeddown,xmaxRecSpheroFeeddown);
606 fMCAccGenFeeddown =
new THnSparseD(
"hMCAccGenBFeeddown",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - DfromB",4,nbinsFeeddown,xminFeeddown,xmaxFeeddown);
607 fMCRecoFeeddown =
new THnSparseD(
"hMCRecoFeeddown",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - DfromB",4,nbinsFeeddown,xminFeeddown,xmaxFeeddown);
610 fMCAccGenFeeddownSpheri =
new THnSparseD(
"hMCAccGenBFeeddownSpheri",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Sphericity; y; - DfromB",4,nbinsFeeddown,xminFeeddown,xmaxFeeddown);
611 fMCRecoFeeddownSpheri =
new THnSparseD(
"hMCRecoFeeddownSpheri",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Sphericity; y; - DfromB",4,nbinsFeeddown,xminFeeddown,xmaxFeeddown);
613 fMCAccGenFeeddownEvSel =
new THnSparseD(
"hMCAccGenBFeeddownEvSel",
"kStepMCAcceptance:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - DfromB",4,nbinsFeeddown,xminFeeddown,xmaxFeeddown);
616 fMCRecoBothPromptFD =
new THnSparseD(
"hMCRecoBothPromptFD",
"kStepRecoPID:; p_{T} [GeV/c]; Multipicity; Spherocity; y; - BothPromptFD",4,nbinsPrompt,xminPrompt,xmaxPrompt);
677 TClonesArray *arrayCand = 0;
683 arrayName=
"Charm3Prong";
684 pdgDau[0]=211; pdgDau[1]=321; pdgDau[2]=211;
689 pdgDau[0]=211; pdgDau[1]=321; pdgDau[2]=0;
694 pdgDau[0]=321; pdgDau[1]=211; pdgDau[2]=0;
699 if(!aod && AODEvent() && IsStandardAOD()) {
705 AliAODHandler* aodHandler = (AliAODHandler*)
706 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
707 if(aodHandler->GetExtensions()) {
708 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(
"AliAOD.VertexingHF.root");
710 arrayCand=(TClonesArray*)aodFromExt->GetList()->FindObject(arrayName.Data());
713 arrayCand=(TClonesArray*)aod->GetList()->FindObject(arrayName.Data());
716 if(!aod || !arrayCand) {
717 printf(
"AliAnalysisTaskSEDvsEventShapes::UserExec: Charm3Prong branch not found!\n");
722 Int_t runnumber = aod->GetRunNumber();
723 if(aod->GetTriggerMask()==0 &&
724 (runnumber>=195344 && runnumber<=195677)){
725 AliDebug(3,
"Event rejected because of null trigger mask");
732 if(!aod->GetPrimaryVertex()||TMath::Abs(aod->GetMagneticField())<0.001)
return;
734 Int_t countTreta1=0, countTreta03=0, countTreta05=0, countTreta16=0;
735 AliAODTracklets* tracklets=aod->GetTracklets();
736 Int_t nTr=tracklets->GetNumberOfTracklets();
737 for(
Int_t iTr=0; iTr<nTr; iTr++){
738 Double_t theta=tracklets->GetTheta(iTr);
739 Double_t eta=-TMath::Log(TMath::Tan(theta/2.));
740 if(eta>-0.3 && eta<0.3) countTreta03++;
741 if(eta>-0.5 && eta<0.5) countTreta05++;
742 if(eta>-1.0 && eta<1.0) countTreta1++;
743 if(eta>-1.6 && eta<1.6) countTreta16++;
746 Int_t vzeroMult=0, vzeroMultA=0, vzeroMultC=0;
747 Int_t vzeroMultEq=0, vzeroMultAEq=0, vzeroMultCEq=0;
748 AliAODVZERO *vzeroAOD = (AliAODVZERO*)aod->GetVZEROData();
750 vzeroMultA =
static_cast<Int_t>(vzeroAOD->GetMTotV0A());
751 vzeroMultC =
static_cast<Int_t>(vzeroAOD->GetMTotV0C());
752 vzeroMult = vzeroMultA + vzeroMultC;
755 vzeroMultEq = vzeroMultAEq + vzeroMultCEq;
758 Int_t countMult = countTreta1;
773 AliVertexingHFUtils::GetSpherocity(aod, spherocity, phiRef,
fetaMin,
fetaMax,
fptMin,
fptMax,
ffiltbit1,
ffiltbit2,
fminMult,
fphiStepSizeDeg);
779 Double_t countTreta1corr=countTreta1;
781 AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
784 Bool_t isDataDrivenZvtxCorr=kTRUE;
786 Int_t vzeroMultACorr=vzeroMultA, vzeroMultCCorr=vzeroMultC, vzeroMultCorr=vzeroMult;
787 Int_t vzeroMultAEqCorr=vzeroMultAEq, vzeroMultCEqCorr=vzeroMultCEq, vzeroMultEqCorr=vzeroMultEq;
789 if(vtx1->GetNContributors()>0){
799 isDataDrivenZvtxCorr=kFALSE;
803 isDataDrivenZvtxCorr=kFALSE;
804 vzeroMultACorr =
static_cast<Int_t>(AliESDUtils::GetCorrV0A(vzeroMultA,zvtx));
805 vzeroMultCCorr =
static_cast<Int_t>(AliESDUtils::GetCorrV0C(vzeroMultC,zvtx));
806 vzeroMultCorr = vzeroMultACorr + vzeroMultCCorr;
807 vzeroMultAEqCorr =
static_cast<Int_t>(AliESDUtils::GetCorrV0A(vzeroMultAEq,zvtx));
808 vzeroMultCEqCorr =
static_cast<Int_t>( AliESDUtils::GetCorrV0C(vzeroMultCEq,zvtx));
809 vzeroMultEqCorr = vzeroMultAEqCorr + vzeroMultCEqCorr;
818 if(isVtxOk && isDataDrivenZvtxCorr){
841 TClonesArray *arrayMC=0;
842 AliAODMCHeader *mcHeader=0;
847 Int_t nChargedMCEta10=0, nChargedMCEta03=0, nChargedMCEta05=0, nChargedMCEta16=0, nChargedMCEtam37tm17=0, nChargedMCEta28t51=0;
848 Int_t nChargedMCPrimaryEta10=0, nChargedMCPrimaryEta03=0, nChargedMCPrimaryEta05=0, nChargedMCPrimaryEta16=0, nChargedMCPrimaryEtam37tm17=0, nChargedMCPrimaryEta28t51=0;
849 Int_t nChargedMCPhysicalPrimaryEta10=0, nChargedMCPhysicalPrimaryEta03=0, nChargedMCPhysicalPrimaryEta05=0, nChargedMCPhysicalPrimaryEta16=0, nChargedMCPhysicalPrimaryEtam37tm17=0, nChargedMCPhysicalPrimaryEta28t51=0;
850 Int_t nChargedMC=0, nChargedMCPrimary=0, nChargedMCPhysicalPrimary=0;
859 arrayMC = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
861 printf(
"AliAnalysisTaskSEDvsEventShapes::UserExec: MC particles branch not found!\n");
865 mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
867 printf(
"AliAnalysisTaskSEDvsEventShapes::UserExec: MC header branch not found!\n");
871 for(
Int_t i=0; i<arrayMC->GetEntriesFast(); i++){
872 AliAODMCParticle *
part=(AliAODMCParticle*)arrayMC->UncheckedAt(i);
875 phiPart = part->Phi();
876 Bool_t isPrim = part->IsPrimary();
877 Bool_t isPhysPrim = part->IsPhysicalPrimary();
879 if(eta>-0.3 && eta< 0.3) {
881 if(isPrim) nChargedMCPrimaryEta03++;
882 if(isPhysPrim) nChargedMCPhysicalPrimaryEta03++;
884 if(eta>-0.5 && eta< 0.5) {
886 if(isPrim) nChargedMCPrimaryEta05++;
887 if(isPhysPrim) nChargedMCPhysicalPrimaryEta05++;
889 if(eta>-1.0 && eta< 1.0) {
891 if(isPrim) nChargedMCPrimaryEta10++;
892 if(isPhysPrim) nChargedMCPhysicalPrimaryEta10++;
894 if(eta>-1.6 && eta< 1.6) {
896 if(isPrim) nChargedMCPrimaryEta16++;
897 if(isPhysPrim) nChargedMCPhysicalPrimaryEta16++;
899 if(eta>-3.7 && eta<-1.7) {
900 nChargedMCEtam37tm17++;
901 if(isPrim) nChargedMCPrimaryEtam37tm17++;
902 if(isPhysPrim) nChargedMCPhysicalPrimaryEtam37tm17++;
904 if(eta> 2.8 && eta< 5.1) {
905 nChargedMCEta28t51++;
906 if(isPrim) nChargedMCPrimaryEta28t51++;
907 if(isPhysPrim) nChargedMCPhysicalPrimaryEta28t51++;
912 nChargedMC=nChargedMCEta10;
913 nChargedMCPrimary=nChargedMCPrimaryEta10;
914 nChargedMCPhysicalPrimary=nChargedMCPhysicalPrimaryEta10;
920 Double_t tmpXweight=nChargedMCPhysicalPrimary;
923 if(tmpXweight<=0) tmpweight = 0.0;
928 tmpweight = pMC>0 ? pMeas/pMC : 0.;
930 nchWeight *= tmpweight;
931 AliDebug(2,Form(
"Using Nch weights, Mult=%f Weight=%f\n",tmpXweight,nchWeight));
934 FillMCGenAccHistos(aod, arrayMC, mcHeader, countCorr, spherocity, sphericity, isEvSel, nchWeight);
956 nChargedMC = nChargedMCEta16 - nChargedMCEta10;
957 nChargedMCPrimary = nChargedMCPrimaryEta16 - nChargedMCPrimaryEta10;
958 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEta16 - nChargedMCPhysicalPrimaryEta10;
960 nChargedMC = nChargedMCEta05;
961 nChargedMCPrimary = nChargedMCPrimaryEta05;
962 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEta05;
964 nChargedMC = nChargedMCEta03;
965 nChargedMCPrimary = nChargedMCPrimaryEta03;
966 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEta03;
968 nChargedMC = nChargedMCEtam37tm17 + nChargedMCEta28t51;
969 nChargedMCPrimary = nChargedMCPrimaryEtam37tm17 + nChargedMCPrimaryEta28t51;
970 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEtam37tm17 + nChargedMCPhysicalPrimaryEta28t51;
972 nChargedMC = nChargedMCEta28t51;
973 nChargedMCPrimary = nChargedMCPrimaryEta28t51;
974 nChargedMCPhysicalPrimary = nChargedMCPhysicalPrimaryEta28t51;
977 if(nChargedMCPhysicalPrimary>0){
993 Int_t nCand = arrayCand->GetEntriesFast();
994 Int_t nSelectedNoPID=0,nSelectedPID=0,nSelectedInMassPeak=0;
995 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
996 Double_t mDplusPDG = TDatabasePDG::Instance()->GetParticle(411)->Mass();
997 Double_t mDstarPDG = TDatabasePDG::Instance()->GetParticle(413)->Mass();
1000 UInt_t pdgDgDStartoD0pi[2]={421,211};
1004 for (
Int_t iCand = 0; iCand < nCand; iCand++) {
1019 if(!isFidAcc)
continue;
1023 if(passTopolCuts==0)
continue;
1042 for(
Int_t iDau=0; iDau<nDau; iDau++){
1043 AliAODTrack *t = NULL;
1044 if(
fPdgMeson==413){ t = (AliAODTrack*)d0fromDstar->GetDaughter(iDau); }
1045 else{ t = (AliAODTrack*)d->GetDaughter(iDau); }
1047 if(t->HasPointOnITSLayer(0) && t->HasPointOnITSLayer(1)){
1048 if(multForCand>0) multForCand-=1;
1059 mass[0]=d->InvMass(nDau,pdgDau);
1061 if(TMath::Abs(mass[0]-mDplusPDG)<0.02) nSelectedInMassPeak++;
1063 UInt_t pdgdaughtersD0[2]={211,321};
1064 UInt_t pdgdaughtersD0bar[2]={321,211};
1065 mass[0]=d->InvMass(2,pdgdaughtersD0);
1066 mass[1]=d->InvMass(2,pdgdaughtersD0bar);
1067 if(TMath::Abs(mass[0]-mD0PDG)<0.02 || TMath::Abs(mass[1]-mD0PDG)<0.02 ) nSelectedInMassPeak++;
1072 if(TMath::Abs(mass[0]-(mDstarPDG-mD0PDG))<0.0015) nSelectedInMassPeak++;
1081 Int_t totTrkToSkip = d->GetNDaughters();
1082 const Int_t nTrkToSkip = totTrkToSkip;
1083 Int_t idToSkip[nTrkToSkip];
1084 for(
Int_t i=0; i<nTrkToSkip; i++) idToSkip[i]=-1;
1086 for(
Int_t iDau=0; iDau<nTrkToSkip; iDau++){
1087 AliAODTrack *t = NULL;
1088 t =
dynamic_cast<AliAODTrack*
>(d->GetDaughter(iDau));
1090 idToSkip[iDau] = t->GetID();
1092 AliVertexingHFUtils::GetSpherocity(aod, recSpherocity, recphiRef,
fetaMin,
fetaMax,
fptMin,
fptMax,
ffiltbit1,
ffiltbit2,
fminMult,
fphiStepSizeDeg, nTrkToSkip, idToSkip);
1101 AliAODMCParticle* mcMoth =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(labD0));
1102 Int_t motherD0 = mcMoth->GetMother();
1103 AliAODMCParticle* mcMothD0 =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(motherD0));
1104 if(!mcMothD0)
continue;
1105 if(TMath::Abs(mcMothD0->GetPdgCode())==413) keep=kFALSE;
1114 for(
Int_t iHyp=0; iHyp<2; iHyp++){
1115 if(mass[iHyp]<0.)
continue;
1117 Double_t arrayForSparse[5]={invMass,ptCand,impparXY,dlen,multForCand};
1128 AliAODMCParticle *partD = (AliAODMCParticle*)arrayMC->At(labD);
1129 Int_t code=partD->GetPdgCode();
1131 if(Origin==5) isPrimary=kFALSE;
1132 if(code<0 && iHyp==0) fillHisto=kFALSE;
1133 if(code>0 && iHyp==1) fillHisto=kFALSE;
1142 Double_t arrayForSparseTrue[5]={invMass,ptCand,trueImpParXY,dlen,multForCand};
1143 if(fillHisto && passAllCuts){
1157 if(iHyp==0 && !(passTopolCuts&1))
continue;
1158 if(iHyp==1 && !(passTopolCuts&2))
continue;
1162 Double_t arrayForSparseSoNoPid[5]={ptCand, invMass, spherocity, multForCand, sphericity};
1165 Double_t arrayForSparseSoNoPid[4]={ptCand, invMass, spherocity, multForCand};
1170 if(iHyp==0 && !(passAllCuts&1))
continue;
1171 if(iHyp==1 && !(passAllCuts&2))
continue;
1174 aveMult+=multForCand;
1179 Double_t arrayForSparseSowithMultUnncorr[6]={ptCand, invMass, spherocity, multForCand, (
Double_t)countTreta1, sphericity};
1182 Double_t arrayForSparseSowithMultUnncorr[5]={ptCand, invMass, spherocity, multForCand, (
Double_t)countTreta1};
1188 Double_t arrayForSparseSo[5]={ptCand, invMass, spherocity, multForCand, sphericity};
1191 Double_t arrayForSparseSo[4]={ptCand, invMass, spherocity, multForCand};
1196 Double_t deltaPhiRef = (phiRef-phiCand);
1197 Double_t deltagenPhiRef = (genphiRef-phiPart);
1199 if(deltaPhiRef<0) deltaPhiRef+=2*TMath::Pi();
1200 if(deltaPhiRef>2*TMath::Pi()) deltaPhiRef-=2*TMath::Pi();
1201 if(deltagenPhiRef<0) deltagenPhiRef+=2*TMath::Pi();
1202 if(deltagenPhiRef>2*TMath::Pi()) deltagenPhiRef-=2*TMath::Pi();
1204 if(phiRef>=0 && phiCand>=0){
1210 Double_t arrayForSparseRecSphero[5]={ptCand, invMass, spherocity, multForCand, recSpherocity};
1216 Double_t arrayForSparseSoPromptFD[5]={ptCand, invMass, spherocity, multForCand, recSpherocity};
1221 Double_t arrayForSparseSoPromptFD[4]={ptCand, invMass, spherocity, multForCand};
1230 AliAODMCParticle *partD = (AliAODMCParticle*)arrayMC->At(labD);
1231 Int_t code=partD->GetPdgCode();
1232 if(code<0 && iHyp==0) keepCase=kFALSE;
1233 if(code>0 && iHyp==1) keepCase=kFALSE;
1235 if(keepCase)
FillMCMassHistos(arrayMC,labD, multForCand, spherocity, sphericity, recSpherocity, nchWeight);
1275 "Mass vs. pt vs.imppar - All",
1278 "Mass vs. pt vs.imppar - promptD",
1281 "Mass vs. pt vs.imppar - DfromB",
1284 "Mass vs. pt vs.true imppar -DfromB",
1287 "Mass vs. pt vs.imppar - backgr.",
1289 for(
Int_t i=0; i<5;i++){
1299 if(fDebug > 1) printf(
"AnalysisTaskSEDvsMultiplicity: Terminate() \n");
1303 printf(
"ERROR: fOutput not available\n");
1309 printf(
"ERROR: fHistNEvents not available\n");
1312 printf(
"Number of Analyzed Events = %d\n",(
Int_t)
fHistNEvents->GetBinContent(3));
1325 Int_t runNo =
event->GetRunNumber();
1329 if (runNo>195343 && runNo<195484) period = 0;
1330 if (runNo>195528 && runNo<195678) period = 1;
1331 if (period < 0 || period > 1)
return 0;
1334 if(runNo>114930 && runNo<117223) period = 0;
1335 if(runNo>119158 && runNo<120830) period = 1;
1336 if(runNo>122373 && runNo<126438) period = 2;
1337 if(runNo>127711 && runNo<130851) period = 3;
1338 if(period<0 || period>3)
return 0;
1363 Double_t func1[4] = {0.322643,2.96275,2.30301,2.5};
1364 Double_t func2[4] = {0.36609,1.94635,1.40463,2.5};
1369 AliDebug(2,Form(
"pt = %f, FONLL = %f, Pythia = %f, ratio = %f",pt,dndpt_func1,dndpt_func2,dndpt_func1/dndpt_func2));
1370 return dndpt_func1/dndpt_func2;
1380 Double_t denom = TMath::Power((pt/par[1]), par[3] );
1381 Double_t dNdpt = par[0]*pt/TMath::Power(1.+denom, par[2]);
1396 Double_t nchbins[82]={0.50,1.50,2.50,3.50,4.50,5.50,6.50,7.50,8.50,9.50,
1397 10.50,11.50,12.50,13.50,14.50,15.50,16.50,17.50,18.50,19.50,
1398 20.50,21.50,22.50,23.50,24.50,25.50,26.50,27.50,28.50,29.50,
1399 30.50,31.50,32.50,33.50,34.50,35.50,36.50,37.50,38.50,39.50,
1400 40.50,41.50,42.50,43.50,44.50,45.50,46.50,47.50,48.50,49.50,
1401 50.50,51.50,52.50,53.50,54.50,55.50,56.50,57.50,58.50,59.50,
1402 60.50,62.50,64.50,66.50,68.50,70.50,72.50,74.50,76.50,78.50,
1403 80.50,82.50,84.50,86.50,88.50,90.50,92.50,94.50,96.50,98.50,
1405 Double_t pch[81]={0.062011,0.072943,0.070771,0.067245,0.062834,0.057383,0.051499,0.04591,0.041109,0.036954,
1406 0.03359,0.030729,0.028539,0.026575,0.024653,0.0229,0.021325,0.019768,0.018561,0.017187,
1407 0.01604,0.014836,0.013726,0.012576,0.011481,0.010393,0.009502,0.008776,0.008024,0.007452,
1408 0.006851,0.006428,0.00594,0.005515,0.005102,0.00469,0.004162,0.003811,0.003389,0.003071,
1409 0.002708,0.002422,0.002184,0.001968,0.00186,0.00165,0.001577,0.001387,0.001254,0.001118,
1410 0.001037,0.000942,0.000823,0.000736,0.000654,0.000579,0.000512,0.00049,0.00045,0.000355,
1411 0.000296,0.000265,0.000193,0.00016,0.000126,0.0000851, 0.0000676,0.0000537,0.0000426, 0.0000338,
1412 0.0000268,0.0000213,0.0000166,0.0000133,0.0000106,0.00000837,0.00000662, 0.00000524,0.00000414, 0.00000327,
1417 for(
Int_t i=0; i<81; i++){
1428 Int_t nTracks=aod->GetNumberOfTracks();
1435 for(
Int_t it=0; it<nTracks; it++) {
1436 AliAODTrack *tr=
dynamic_cast<AliAODTrack*
>(aod->GetTrack(it));
1441 if(eta<fetaMin || eta>
fetaMax)
continue;
1442 if(pt<fptMin || pt>
fptMax)
continue;
1445 if( !(fb1 || fb2) )
continue;
1447 Int_t status=tr->GetStatus();
1448 if(!(status & AliAODTrack::kTPCrefit))
continue;
1450 etaArr[nSelTracks]=eta;
1451 phiArr[nSelTracks]=phi;
1456 if(nSelTracks<
fminMult)
return kFALSE;
1460 for(
Int_t iselt=0; iselt<nSelTracks; iselt++) {
1463 if(nSelectedEvwithCand>0){
1478 AliAODMCParticle *partD = (AliAODMCParticle*)arrayMC->At(labD);
1494 Double_t arrayMCRecoRecSpheroPrompt[5] = {pt, countMult, spherocity, rapid, recSpherocity};
1495 Double_t arrayMCRecoPrompt[4] = {pt, countMult, spherocity, rapid};
1499 Double_t arrayMCRecoPromptSpheri[4] = {pt, countMult, sphericity, rapid};
1506 Double_t arrayMCRecoRecSpheroFeeddown[5] = {pt, countMult, spherocity, rapid, recSpherocity};
1507 Double_t arrayMCRecoFeeddown[4] = {pt, countMult, spherocity, rapid};
1511 Double_t arrayMCRecoFeeddownSpheri[4] = {pt, countMult, sphericity, rapid};
1516 Double_t arrayMCReco[4] = {pt, countMult, spherocity, rapid};
1519 Double_t arrayMCRecoSpheri[4] = {pt, countMult, sphericity, rapid};
1532 Int_t totPart = arrayMC->GetEntriesFast();
1533 Int_t totTracks = aod->GetNumberOfTracks();
1537 const Int_t nPart = totPart;
1538 Int_t trkToSkip[nPart];
1539 for(
Int_t i=0; i<nPart; i++) trkToSkip[i]=-1;
1542 for(
Int_t it=0; it<totTracks; it++){
1543 AliAODTrack *t=
dynamic_cast<AliAODTrack*
>(aod->GetTrack(it));
1545 if(!(t->TestFilterMask(BIT(4))))
continue;
1548 Int_t lab=TMath::Abs(t->GetLabel());
1549 Int_t id=t->GetID();
1552 if(pt<0.3)
continue;
1553 AliAODMCParticle* genDup =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(lab));
1556 Double_t rver = TMath::Sqrt(xver*xver + yver*yver);
1557 if(rver>3)
continue;
1558 trkToSkip[lab] = id;
1568 Int_t nTrkToSkip = nProng;
1569 Int_t idToSkip[nTrkToSkip];
1570 for(
Int_t i=0; i<nTrkToSkip; i++) idToSkip[i]=-1;
1572 Double_t zMCVertex = mcHeader->GetVtxZ();
1574 for(
Int_t iPart=0; iPart<totPart; iPart++){
1575 AliAODMCParticle* mcGenPart =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(iPart));
1577 if (TMath::Abs(mcGenPart->GetPdgCode()) ==
fPdgMeson){
1581 Bool_t isGoodDecay=kFALSE;
1582 Int_t labDau[4]={-1,-1,-1,-1};
1584 Bool_t isFidAcc = kFALSE;
1588 if(mcGenPart->GetNDaughters()!=2)
continue;
1589 if(deca==1) isGoodDecay=kTRUE;
1592 if(deca>0) isGoodDecay=kTRUE;
1595 if(deca==1) isGoodDecay=kTRUE;
1598 if(deca==1) isGoodDecay=kTRUE;
1606 for(
Int_t iDau=0; iDau<nTrkToSkip; iDau++){
1607 Int_t indexDau = TMath::Abs(mcGenPart->GetDaughter(iDau));
1608 idToSkip[iDau] = trkToSkip[indexDau];
1610 AliVertexingHFUtils::GetSpherocity(aod, recSpherocity, recphiRef,
fetaMin,
fetaMax,
fptMin,
fptMax,
ffiltbit1,
ffiltbit2,
fminMult,
fphiStepSizeDeg, nTrkToSkip, idToSkip);
1615 Int_t mother = mcGenPart->GetMother();
1616 AliAODMCParticle* mcMoth =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(mother));
1617 if(!mcMoth)
continue;
1618 if(TMath::Abs(mcMoth->GetPdgCode())==413)
continue;
1637 Double_t arrayMCGenRecSpheroPrompt[5] = {pt, countMult, spherocity, rapid, recSpherocity};
1638 Double_t arrayMCGenPrompt[4] = {pt, countMult, spherocity, rapid};
1643 Double_t arrayMCGenPromptSpheri[4] = {pt, countMult, sphericity, rapid};
1650 Double_t arrayMCGenRecSpheroFeeddown[5] = {pt, countMult, spherocity, rapid, recSpherocity};
1651 Double_t arrayMCGenFeeddown[4] = {pt, countMult, spherocity, rapid};
1656 Double_t arrayMCGenFeeddownSpheri[4] = {pt, countMult, sphericity, rapid};
1671 for (
Int_t iProng = 0; iProng<nProng; iProng++){
1672 AliAODMCParticle* mcPartDaughter=
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(labDau[iProng]));
1673 if(!mcPartDaughter)
return kFALSE;
1674 Double_t eta = mcPartDaughter->Eta();
1675 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 void GetSpherocity(AliAODEvent *aod, Double_t &spherocity, Double_t &phiRef, 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.
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)
TH3F * fHistSpheroAxisDeltaPhi
! hist. of Invariant mass, pt vs. deltaPhi of spherocity axis w.r.t. D-meson direction ...
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
TString part
use mixed event to constrain combinatorial background
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)
static void GetGeneratedSpherocity(TClonesArray *arrayMC, Double_t &spherocity, Double_t &phiRef, 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)
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.
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
TH3F * fHistSpheroAxisDeltaGenPhi
! hist. of Invariant mass, pt vs. deltaPhi of generated spherocity axis w.r.t. D-meson direction ...
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
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