1 #include "AliAnalysisTaskSE.h" 2 #include "AliAnalysisManager.h" 3 #include "AliAnalysisDataContainer.h" 4 #include "AliESDEvent.h" 5 #include "AliESDtrackCuts.h" 6 #include "AliCentrality.h" 7 #include "AliMCEventHandler.h" 8 #include "AliMCEvent.h" 10 #include "AliGenCocktailEventHeader.h" 11 #include "AliGenHijingEventHeader.h" 12 #include "AliGenEventHeader.h" 13 #include "AliCollisionGeometry.h" 14 #include "AliGenerator.h" 16 #include "AliMultiplicity.h" 17 #include <TParticle.h> 25 #include "AliESDInputHandlerRP.h" 64 fHistoPhysPrimPiKPi09(0),
65 fHistoPhysPrimPiKPi09vsb(0),
69 fHistoTrackletsEta1(0),
84 fHistOriginFeeddown(0),
91 fHistEtaPhiPtGenEle(0),
92 fHistEtaPhiPtGenPi(0),
94 fHistEtaPhiPtGenPro(0),
95 fHistEtaPhiPtRecEle(0),
96 fHistEtaPhiPtRecPi(0),
98 fHistEtaPhiPtRecPro(0),
100 fHistPhiRecVsPhiGen(0),
101 fHistEtaRecVsEtaGen(0),
104 fSearchUpToQuark(kFALSE),
110 for(
Int_t i=0; i<5; i++){
118 for(
Int_t i=0; i<2; i++){
125 DefineInput(0, TChain::Class());
126 DefineOutput(1, TList::Class());
133 if (AliAnalysisManager::GetAnalysisManager()->IsProofMode())
return;
148 fOutput->SetName(
"OutputHistos");
150 fHistoNEvents =
new TH1F(
"hNEvents",
"Number of processed events",3,-0.5,2.5);
164 fHistoTracks =
new TH1F(
"hTracks",
"",100,-0.5,maxMult*2-0.5);
205 fHistoNbVsNc =
new TH2F(
"hnbvsnc",
"",nBinscb,-0.5,maxncn,nBinscb,-0.5,maxncn);
245 for(
Int_t ih=0; ih<5; ih++){
268 for(
Int_t ih=0; ih<2; ih++){
324 fHistLcDecayChan->GetXaxis()->SetBinLabel(9,
"#pi#Lambda#rightarrowp#pi#pi");
333 Double_t binseta[11]={-1.0,-0.8,-0.6,-0.4,-0.2,0.,0.2,0.4,0.6,0.8,1.0};
334 const Int_t nBinsPhi=40;
336 for(
Int_t ib=0; ib<=nBinsPhi; ib++) binsphi[ib]=ib*TMath::Pi()/20.;
337 const Int_t nBinsPt=24;
338 Double_t binspt[nBinsPt+1]={0.,0.10,0.15,0.2,0.25,
363 fHistPtRecVsPtGen=
new TH2F(
"hPtRecVsPtGen",
" ; particle p_{T} (GeV/c); track p_{T} (GeV/c)",100,0.,10.,100,0.,10.);
365 fHistPhiRecVsPhiGen=
new TH2F(
"hPhiRecVsPhiGen",
" ; particle #varphi ; track #varphi",100,0.,2.*TMath::Pi(),100,0.,2.*TMath::Pi());
367 fHistEtaRecVsEtaGen=
new TH2F(
"hEtaRecVsEtaGen",
" ; particle #eta ; track #eta",100,0.,2.*TMath::Pi(),100,0.,2.*TMath::Pi());
370 fHistPtRecGood=
new TH1F(
"hPtRecGood",
" ; track p_{T} (GeV/c)",100,0.,10.);
372 fHistPtRecFake=
new TH1F(
"hPtRecFake",
" ; track p_{T} (GeV/c)",100,0.,10.);
387 printf(
"AliAnalysisTaskSDDRP::Exec(): bad ESD\n");
395 if(esd->GetRunNumber()<=139517) year=2010;
396 if(year==2010)
fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE);
397 else fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
401 fESDtrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
402 AliESDtrackCuts::kAny);
405 Int_t nTracks=esd->GetNumberOfTracks();
408 for(
Int_t it=0; it<nTracks; it++){
409 AliESDtrack* tr=esd->GetTrack(it);
410 UInt_t status=tr->GetStatus();
411 if(!(status&AliESDtrack::kITSrefit))
continue;
412 if(!(status&AliESDtrack::kTPCin))
continue;
417 const AliMultiplicity* mult=esd->GetMultiplicity();
418 Int_t nTracklets=mult->GetNumberOfTracklets();
420 for(
Int_t it=0; it<nTracklets; it++){
421 Double_t eta=TMath::Abs(mult->GetEta(it));
422 if(eta<1) nTracklets1++;
427 const AliESDVertex *spdv=esd->GetVertex();
428 if(spdv && spdv->IsFromVertexer3D()){
433 if(spdv && spdv->IsFromVertexerZ()){
438 const AliESDVertex *trkv=esd->GetPrimaryVertex();
439 if(trkv && trkv->GetNContributors()>1){
445 AliMCEvent* mcEvent = 0x0;
448 AliMCEventHandler* eventHandler =
dynamic_cast<AliMCEventHandler*
> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
450 Printf(
"ERROR: Could not retrieve MC event handler");
453 mcEvent = eventHandler->MCEvent();
455 Printf(
"ERROR: Could not retrieve MC event");
458 const AliVVertex* mcVert=mcEvent->GetPrimaryVertex();
460 Printf(
"ERROR: generated vertex not available");
463 if(TMath::Abs(mcVert->GetZ())>10)
return;
467 TString genname=mcEvent->GenEventHeader()->ClassName();
473 if(genname.Contains(
"CocktailEventHeader")){
474 AliGenCocktailEventHeader *cockhead=(AliGenCocktailEventHeader*)mcEvent->GenEventHeader();
475 lgen=cockhead->GetHeaders();
476 for(
Int_t ig=0; ig<lgen->GetEntries(); ig++){
477 AliGenerator* gen=(AliGenerator*)lgen->At(ig);
479 if(title.Contains(
"bchadr")){
482 }
else if(title.Contains(
"chadr")) {
485 }
else if(title.Contains(
"bele")){
488 }
else if(title.Contains(
"cele")){
491 }
else if(title.Contains(
"pythiaHF")){
493 }
else if(title.Contains(
"hijing") || title.Contains(
"Hijing")){
494 AliGenHijingEventHeader* hijh=(AliGenHijingEventHeader*)lgen->At(ig);
495 imppar=hijh->ImpactParameter();
498 nColl=lgen->GetEntries();
501 }
else if(genname.Contains(
"HijingEventHeader")){
502 AliGenHijingEventHeader* hijh=(AliGenHijingEventHeader*)mcEvent->GenEventHeader();
503 imppar=hijh->ImpactParameter();
505 TString genTitle=mcEvent->GenEventHeader()->GetTitle();
506 if(genTitle.Contains(
"bchadr")) typeHF=1;
507 else if(genTitle.Contains(
"chadr")) typeHF=0;
508 else if(genTitle.Contains(
"bele")) typeHF=3;
509 else if(genTitle.Contains(
"cele")) typeHF=2;
512 Int_t nParticles=mcEvent->GetNumberOfTracks();
518 for (
Int_t i=0;i<nParticles;i++){
519 TParticle* part = (TParticle*)mcEvent->Particle(i);
520 Int_t absPdg=TMath::Abs(part->GetPdgCode());
524 if(mcEvent->IsPhysicalPrimary(i)){
532 if(TMath::Abs(eta)<0.5){
536 if(TMath::Abs(eta)<0.9){
538 if(absPdg==211 || absPdg==321 || absPdg==2212){
544 if (part->Energy() != TMath::Abs(part->Pz())){
545 rapid=0.5*TMath::Log((part->Energy()+part->Pz())/(part->Energy()-part->Pz()));
556 else if(absPdg==411){
561 if(iTypeKKpi>0) iType=3;
565 else if(absPdg==413){
570 else if(absPdg==431){
573 if(iType==1 || iType==2) iPart=3;
575 else if(absPdg==4122){
580 if(iTypeV0==1) iType=5;
581 if(iTypeV0==2) iType=6;
584 if(iType>=0) iPart=4;
606 if(iSpecies<0)
continue;
619 Double_t distx=part->Vx()-mcVert->GetX();
620 Double_t disty=part->Vy()-mcVert->GetY();
621 Double_t distz=part->Vz()-mcVert->GetZ();
622 Double_t distToVert=TMath::Sqrt(distx*distx+disty*disty+distz*distz);
634 if(iPart<0)
continue;
635 if(iType<0)
continue;
637 if(iPart==0 && iType>0 && iType<=2){
639 }
else if(iPart==1 && iType>0 && iType<=3){
641 }
else if(iPart==3 && iType>0 && iType<=2){
645 if(iFromB==4 && iPart>=0 && iPart<5)
fHistYPtPrompt[iPart]->Fill(part->Pt(),rapid);
646 else if(iFromB==5 && iPart>=0 && iPart<5)
fHistYPtFeeddown[iPart]->Fill(part->Pt(),rapid);
649 for(
Int_t i=0; i<nTracks; i++){
650 AliESDtrack* track=esd->GetTrack(i);
654 Int_t label=TMath::Abs(track->GetLabel());
656 if(mcEvent->IsPhysicalPrimary(label)){
657 TParticle* part = (TParticle*)mcEvent->Particle(label);
658 Int_t absPdg=TMath::Abs(part->GetPdgCode());
661 else if(absPdg==321)
fHistEtaPhiPtRecK->Fill(part->Eta(),part->Phi(),part->Pt());
685 printf(
"ERROR: fOutput not available\n");
TH3F * fHistEtaPhiPtRecK
! histo of generated kaons
static Int_t CheckD0Decay(AliMCEvent *mcEvent, Int_t label, Int_t *arrayDauLab)
AliESDtrackCuts * fESDtrackCuts
0=pp, 1=PbPb, 2=pPb
TH1F * fHistPtRecGood
! pt distribution of "good" tracks
TH1F * fHistBSpecies
! histo of B hadron species
TH1F * fHistoSPDZVtxY
! histo with distr. of y coord. of SPDZ vertex
TH2F * fHistYPtPrompt[5]
! histo of y vs. pt from prompt D0, D+, D*, Ds, Lc
Int_t fSystem
c/b separation using quarks
TH3F * fHistEtaPhiPtGenEle
! histo of generated electrons
static Int_t CheckDplusDecay(AliMCEvent *mcEvent, Int_t label, Int_t *arrayDauLab)
TH1F * fHistoSPDZVtxX
! histo with distr. of x coord. of SPDZ vertex
TH2F * fHistYPtDplusbyDecChannel[3]
! histo of y vs. pt for D+->Kpipi and D+->K0*pi
TH1F * fHistMotherID
! histo of mother ID
TH3F * fHistEtaPhiPtGenK
! histo of generated kaons
TH2F * fHistBYPtAllDecay[5]
! histo of y vs. pt from prompt B0, B+, B*, Bs, Lb
TH1F * fHistOriginFeeddown
! histo of D production point (feeddown)
static Int_t CheckDsDecay(AliMCEvent *mcEvent, Int_t label, Int_t *arrayDauLab)
static Int_t CheckLcpKpiDecay(AliMCEvent *mcEvent, Int_t label, Int_t *arrayDauLab)
virtual ~AliAnalysisTaskCheckHFMCProd()
TH1F * fHistoPhysPrimPiKPi09
! histo of n. of primary pi, K, p
TH2F * fHistEtaRecVsEtaGen
! correlation between rec and gen pt
TH1F * fHistoTracklets
! histo with number of SPD tracklets
virtual void UserCreateOutputObjects()
static Int_t CheckOrigin(TClonesArray *arrayMC, AliAODMCParticle *mcPart, Bool_t searchUpToQuark=kTRUE)
Functions to check the decay tree.
virtual void UserExec(Option_t *option)
TH2F * fHistYPtDsbyDecChannel[2]
! histo of y vs. pt for Ds->phipi and Ds->K0*K
TH1F * fHistoSPD3DVtxX
! histo with distr. of x coord. of SPD3D vertex
TH2F * fHistoNbVsNc
! histo of n. b quarks vs. n c. quarks
TH1F * fHistoTRKVtxX
! histo with distr. of x coord. of TRK vertex
TH2F * fHistNcollHFtype
! histo of number of injected events vs. type
TH2F * fHistYPtFeeddown[5]
! histo of y vs. pt from feeddown D0, D+, D*, Ds, Lc
static Int_t CheckLcV0bachelorDecay(AliMCEvent *mcEvent, Int_t label, Int_t *arrayDauLab)
TH3F * fHistEtaPhiPtRecPro
! histo of generated protons
TH1F * fHistoSelTracks
! histo with number of TPC+ITS refit ESD tracks
TH1F * fHistoPhysPrim
! histo of n. of physical primaries in |eta|<0.5
TH1F * fHistoNEvents
! histo with N of events
TH3F * fHistEtaPhiPtGenPi
! histo of generated pions
TH3F * fHistEtaPhiPtGenPro
! histo of generated protons
TH1F * fHistPtRecFake
! pt distribution of fake tracks
static Int_t CheckDplusKKpiDecay(AliMCEvent *mcEvent, Int_t label, Int_t *arrayDauLab)
TH1F * fHistOriginPrompt
! histo of D production point (prompt)
TH2F * fHistYPtPromptAllDecay[5]
! histo of y vs. pt from prompt D0, D+, D*, Ds, Lc, no selection on decay channel ...
TH2F * fHistoNcharmed
! histo of D mesons vs. dN/dy
TH2F * fHistoPhysPrimPiKPi09vsb
! histo of n. of primary pi, K, p vs. b
TH2F * fHistPhiRecVsPhiGen
! correlation between rec and gen pt
TH1F * fHistoTRKVtxZ
! histo with distr. of z coord. of TRK vertex
TH1F * fHistDSpecies
! histo of D hadron species
AliAnalysisTaskCheckHFMCProd()
static Int_t CheckDstarDecay(AliMCEvent *mcEvent, Int_t label, Int_t *arrayDauLab)
TH2F * fHistYPtAllDecay[5]
! histo of y vs. pt from prompt D0, D+, D*, Ds, Lc, no selection on decay channel ...
TH1F * fHistoEtaPhysPrim
! histo of eta distribution of physical primaries
TH1F * fHistoSPD3DVtxY
! histo with distr. of y coord. of SPD3D vertex
TH1F * fHistoTrackletsEta1
! histo with number of SPD tracklets in |eta|<1
TH2F * fHistYPtD0byDecChannel[2]
! histo of y vs. pt for D0->Kpi and D0->Kpipipi
TH1F * fHistoTracks
! histo with number of ESD tracks
TH1F * fHistoPtPhysPrim
! histo of pt distribution of phys primaries
TH1F * fHistoSPDZVtxZ
! histo with distr. of z coord. of SPDZ vertex
TH1F * fHistoTRKVtxY
! histo with distr. of y coord. of TRK vertex
TH3F * fHistEtaPhiPtRecEle
! histo of generated electrons
TH2F * fHistYPtFeeddownAllDecay[5]
! histo of y vs. pt from prompt D0, D+, D*, Ds, Lc, no selection on decay channel ...
TList * fOutput
! list of output histos
TH1F * fHistLcDecayChan
! histo of Lc decay modes
TH2F * fHistNinjectedvsb
! histo of number of injected events vs. b
TH1F * fHistoSPD3DVtxZ
! histo with distr. of z coord. of SPD3D vertex
TH3F * fHistEtaPhiPtRecPi
! histo of generated pions
TH2F * fHistPtRecVsPtGen
! correlation between rec and gen pt
Bool_t fReadMC
track selection
virtual void Terminate(Option_t *option)