28 #include <TClonesArray.h>
33 #include <TDatabasePDG.h>
35 #include "AliAnalysisManager.h"
37 #include "AliAODHandler.h"
38 #include "AliAODEvent.h"
39 #include "AliAODVertex.h"
40 #include "AliAODTrack.h"
43 #include "AliAnalysisTaskSE.h"
78 fUseStrangeness(kFALSE),
83 fUseQuarkTagInKine(kTRUE),
93 for(Int_t i=0;i<3;i++){
128 for(Int_t i=0;i<kMaxPtBins+1;i++){
136 AliAnalysisTaskSE(name),
148 fPhiEtaCandSigReg(0),
152 fLowmasslimit(1.765),
156 fRDCutsAnalysis(dpluscutsana),
158 fFillNtuple(fillNtuple),
160 fUseStrangeness(kFALSE),
165 fUseQuarkTagInKine(kTRUE),
167 fLowerImpPar(-1000.),
168 fHigherImpPar(1000.),
178 for(Int_t i=0;i<3;i++){
212 for(Int_t i=0;i<kMaxPtBins+1;i++){
219 DefineOutput(1,TList::Class());
222 DefineOutput(2,TList::Class());
224 DefineOutput(3,AliNormalizationCounter::Class());
228 DefineOutput(4,TNtuple::Class());
266 for(Int_t i=0;i<3;i++){
270 for(Int_t i=0;i<5;i++){
316 Int_t missingbins=4-nbins%4;
317 nbins=nbins+missingbins;
320 printf(
"AliAnalysisTaskSEDplus::SetBinWidth: W-bin width of %f will produce histograms not rebinnable by 4. New width set to %f\n",w,width);
323 if(fDebug>1) printf(
"AliAnalysisTaskSEDplus::SetBinWidth: width set to %f\n",width);
337 if(fDebug>1)printf(
"started LS\n");
344 Int_t nPosTrks=0,nNegTrks=0;
345 Int_t nOStriplets = arrayOppositeSign->GetEntriesFast();
348 Int_t nLikeSign = arrayLikeSign->GetEntriesFast();
352 for(Int_t iLikeSign = 0; iLikeSign < nLikeSign; iLikeSign++) {
355 Bool_t unsetvtx=kFALSE;
360 Double_t ptCand = d->Pt();
362 if(iPtBin<0)
continue;
363 Int_t sign= d->GetCharge();
376 histLSPlus->Fill(invMass);
379 histLSMinus->Fill(invMass);
385 Double_t sumD02=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
386 Double_t dca=d->GetDCA();
389 for(Int_t i=0;i<3;i++){
390 if(d->PtProng(i)>
ptmax)ptmax=d->PtProng(i);
407 if(nLikeSign!=0)wei2 = (Float_t)nOStriplets/(Float_t)nLikeSign;
409 if(nDplusLS!=0)wei3 = (Float_t)nDplusOS/(Float_t)(nDplusLS+nDminusLS);
410 Float_t weiplus=1.,weiminus=1.;
411 Float_t wei4plus=1.,wei4minus=1.;
413 if(nPosTrks>2)weiplus=3.*(Float_t)nNegTrks/((Float_t)nPosTrks-2.);
414 if(nDplusLS>2)wei4plus=3.*(Float_t)nDminusLS/((Float_t)nDplusLS-2.);
415 if(nNegTrks>2)weiminus=3.*(Float_t)nPosTrks/((Float_t)nNegTrks-2.);
416 if(nDminusLS>2)wei4minus=3.*(Float_t)nDplusLS/((Float_t)nDminusLS-2.);
427 delete histLSPlus;histLSPlus=0;
428 delete histLSMinus;histLSMinus=0;
430 if(fDebug>1) printf(
"LS analysis terminated\n");
438 if(fDebug > 1) printf(
"AnalysisTaskSEDplus::Init() \n");
444 analysis->SetName(
"AnalysisCuts");
457 if(fDebug > 1) printf(
"AnalysisTaskSEDplus::UserCreateOutputObjects() \n");
462 fOutput->SetName(
"OutputHistos");
464 fHistNEvents =
new TH1F(
"fHistNEvents",
"number of events ",13,-0.5,12.5);
466 fHistNEvents->GetXaxis()->SetBinLabel(2,
"nEvents accepted");
467 fHistNEvents->GetXaxis()->SetBinLabel(3,
"Rejected due to trigger");
468 fHistNEvents->GetXaxis()->SetBinLabel(4,
"Rejected pileup events");
469 fHistNEvents->GetXaxis()->SetBinLabel(5,
"Rejected due to centrality");
470 fHistNEvents->GetXaxis()->SetBinLabel(6,
"Rejected due to vtxz");
471 fHistNEvents->GetXaxis()->SetBinLabel(7,
"Rejected due to Physics Sel");
472 fHistNEvents->GetXaxis()->SetBinLabel(8,
"Total no. of candidate");
473 fHistNEvents->GetXaxis()->SetBinLabel(9,
"no. of cand wo bitmask");
474 fHistNEvents->GetXaxis()->SetBinLabel(10,
"D+ after topological cuts");
475 fHistNEvents->GetXaxis()->SetBinLabel(11,
"D+ after Topological+PID cuts");
476 fHistNEvents->GetXaxis()->SetBinLabel(12,
"D+ not on-the-fly reco");
486 fHistCentrality[0]=
new TH2F(
"hCentrMult",
"centrality",100,0.5,30000.5,40,0.,100.);
487 fHistCentrality[1]=
new TH2F(
"hCentrMult(selectedCent)",
"centrality(selectedCent)",100,0.5,30000.5,40,0.,100.);
488 fHistCentrality[2]=
new TH2F(
"hCentrMult(OutofCent)",
"centrality(OutofCent)",100,0.5,30000.5,40,0.,100.);
489 for(Int_t i=0;i<3;i++){
497 hisname.Form(
"hMassNoPidPt%d",i);
500 hisname.Form(
"hCosPAllPt%d",i);
501 fCosPHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.5,1.);
503 hisname.Form(
"hDLenAllPt%d",i);
504 fDLenHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,0.5);
506 hisname.Form(
"hSumd02AllPt%d",i);
507 fSumd02Hist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,1.);
509 hisname.Form(
"hSigVertAllPt%d",i);
510 fSigVertHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
512 hisname.Form(
"hPtMaxAllPt%d",i);
513 fPtMaxHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.5,5.);
515 hisname.Form(
"hPtKPt%d",i);
516 fPtKHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
518 hisname.Form(
"hPtpi1Pt%d",i);
519 fPtpi1Hist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
521 hisname.Form(
"hPtpi2Pt%d",i);
522 fPtpi2Hist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
524 hisname.Form(
"hDCAAllPt%d",i);
525 fDCAHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
528 hisname.Form(
"hDLxyPt%d",i);
529 fDLxy[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,10.);
530 fDLxy[index]->Sumw2();
531 hisname.Form(
"hCosxyPt%d",i);
532 fCosxy[index]=
new TH1F(hisname.Data(),hisname.Data(),100,-1,1.);
535 hisname.Form(
"hMassPt%dTC",i);
538 hisname.Form(
"hMassPt%dTCPlus",i);
541 hisname.Form(
"hMassPt%dTCMinus",i);
548 hisname.Form(
"hSigNoPidPt%d",i);
551 hisname.Form(
"hCosPSigPt%d",i);
552 fCosPHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.5,1.);
554 hisname.Form(
"hDLenSigPt%d",i);
555 fDLenHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,0.5);
557 hisname.Form(
"hSumd02SigPt%d",i);
558 fSumd02Hist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,1.);
560 hisname.Form(
"hSigVertSigPt%d",i);
561 fSigVertHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
563 hisname.Form(
"hPtMaxSigPt%d",i);
564 fPtMaxHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.5,5.);
566 hisname.Form(
"hPtKSigPt%d",i);
567 fPtKHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
569 hisname.Form(
"hPtpi1SigPt%d",i);
570 fPtpi1Hist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
572 hisname.Form(
"hPtpi2SigPt%d",i);
573 fPtpi2Hist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
576 hisname.Form(
"hDCASigPt%d",i);
577 fDCAHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
580 hisname.Form(
"hDLxySigPt%d",i);
581 fDLxy[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,10.);
582 fDLxy[index]->Sumw2();
583 hisname.Form(
"hCosxySigPt%d",i);
584 fCosxy[index]=
new TH1F(hisname.Data(),hisname.Data(),100,-1,1.);
586 hisname.Form(
"hSigPt%dTC",i);
589 hisname.Form(
"hSigPt%dTCPlus",i);
592 hisname.Form(
"hSigPt%dTCMinus",i);
598 hisname.Form(
"hBkgNoPidPt%d",i);
601 hisname.Form(
"hCosPBkgPt%d",i);
602 fCosPHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.5,1.);
604 hisname.Form(
"hDLenBkgPt%d",i);
605 fDLenHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,0.5);
607 hisname.Form(
"hSumd02BkgPt%d",i);
608 fSumd02Hist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,1.);
610 hisname.Form(
"hSigVertBkgPt%d",i);
611 fSigVertHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
613 hisname.Form(
"hPtMaxBkgPt%d",i);
614 fPtMaxHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.5,5.);
616 hisname.Form(
"hPtKBkgPt%d",i);
617 fPtKHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
619 hisname.Form(
"hPtpi1BkgPt%d",i);
620 fPtpi1Hist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
622 hisname.Form(
"hPtpi2BkgPt%d",i);
623 fPtpi2Hist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
625 hisname.Form(
"hDCABkgPt%d",i);
626 fDCAHist[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
629 hisname.Form(
"hDLxyBkgPt%d",i);
630 fDLxy[index]=
new TH1F(hisname.Data(),hisname.Data(),100,0.,10.);
631 fDLxy[index]->Sumw2();
632 hisname.Form(
"hCosxyBkgPt%d",i);
633 fCosxy[index]=
new TH1F(hisname.Data(),hisname.Data(),100,-1,1.);
637 hisname.Form(
"hBkgPt%dTC",i);
640 hisname.Form(
"hBkgPt%dTCPlus",i);
643 hisname.Form(
"hBkgPt%dTCMinus",i);
670 fCorreld0Kd0pi[0]=
new TH2F(
"hCorreld0Kd0piAll",
"",100,-0.02,0.02,100,-0.02,0.02);
671 fCorreld0Kd0pi[1]=
new TH2F(
"hCorreld0Kd0piSig",
"",100,-0.02,0.02,100,-0.02,0.02);
672 fCorreld0Kd0pi[2]=
new TH2F(
"hCorreld0Kd0piBkg",
"",100,-0.02,0.02,100,-0.02,0.02);
674 for(Int_t i=0; i<3; i++){
683 fYVsPtNoPid=
new TH3F(
"hYVsPtNoPid",
"YvsPt (no PID)",40,0.,20.,80,-2.,2.,nbins,
fLowmasslimit,
fUpmasslimit);
684 fYVsPt=
new TH3F(
"hYVsPt",
"YvsPt",40,0.,20.,80,-2.,2.,nbins,
fLowmasslimit,
fUpmasslimit);
685 fYVsPtSigNoPid=
new TH2F(
"hYVsPtSigNoPid",
"YvsPt (MC, only sig., no PID)",40,0.,20.,80,-2.,2.);
686 fYVsPtSig=
new TH2F(
"hYVsPtSig",
"YvsPt (MC, only Sig)",40,0.,20.,80,-2.,2.);
687 fPhiEtaCand=
new TH2F(
"hPhiEtaCand",
"phi vs. eta candidates",20,-1.,1.,50,0.,2*TMath::Pi());
688 fPhiEtaCandSigReg=
new TH2F(
"hPhiEtaCandSigReg",
"phi vs. eta candidates",20,-1.,1.,50,0.,2*TMath::Pi());
693 fSPDMult =
new TH1F(
"hSPDMult",
"Tracklets multiplicity; Tracklets ; Entries",200,0.,maxmult);
706 TString normName=
"NormalizationCounter";
707 AliAnalysisDataContainer *cont = GetOutputSlot(3)->GetContainer();
708 if(cont)normName=(TString)cont->GetName();
720 fNtupleDplus =
new TNtuple(
"fNtupleDplus",
"D +",
"pdg:Px:Py:Pz:Pt:charge:piddau0:piddau1:piddau2:Ptpi:PtK:Ptpi2:mompi:momK:mompi2:cosp:cospxy:DecLen:NormDecLen:DecLenXY:NormDecLenXY:InvMass:sigvert:d0Pi:d0K:d0Pi2:maxdca:ntracks:centr:RunNumber:BadDau");
728 fNtupleDplus =
new TNtuple(
"fNtupleDplus",
"D +",
"pdg:Pt:InvMass:d0:origin");
741 AliAODEvent *aod =
dynamic_cast<AliAODEvent*
> (InputEvent());
743 TClonesArray *array3Prong = 0;
744 TClonesArray *arrayLikeSign =0;
745 if(!aod && AODEvent() && IsStandardAOD()) {
748 aod =
dynamic_cast<AliAODEvent*
> (AODEvent());
751 AliAODHandler* aodHandler = (AliAODHandler*)
752 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
753 if(aodHandler->GetExtensions()) {
754 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(
"AliAOD.VertexingHF.root");
755 AliAODEvent *aodFromExt = ext->GetAOD();
756 array3Prong=(TClonesArray*)aodFromExt->GetList()->FindObject(
"Charm3Prong");
757 arrayLikeSign=(TClonesArray*)aodFromExt->GetList()->FindObject(
"LikeSign3Prong");
760 array3Prong=(TClonesArray*)aod->GetList()->FindObject(
"Charm3Prong");
761 arrayLikeSign=(TClonesArray*)aod->GetList()->FindObject(
"LikeSign3Prong");
764 if(!aod || !array3Prong) {
765 printf(
"AliAnalysisTaskSEDplus::UserExec: Charm3Prong branch not found!\n");
768 if(!arrayLikeSign &&
fDoLS) {
769 printf(
"AliAnalysisTaskSEDplus::UserExec: LikeSign3Prong branch not found!\n");
775 if(!aod->GetPrimaryVertex()||TMath::Abs(aod->GetMagneticField())<0.001)
return;
781 Int_t runNumber=aod->GetRunNumber();
785 Float_t ntracks=aod->GetNumberOfTracks();
795 TClonesArray *arrayMC=0;
796 AliAODMCHeader *mcHeader=0;
799 arrayMC = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
801 printf(
"AliAnalysisTaskSEDplus::UserExec: MC particles branch not found!\n");
806 mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
808 printf(
"AliAnalysisTaskSEDplus::UserExec: MC header branch not found!\n");
813 if(aod->GetTriggerMask()==0 &&
814 (runNumber>=195344 && runNumber<=195677)){
836 AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
842 Int_t n3Prong = array3Prong->GetEntriesFast();
847 Int_t pdgDgDplustoKpipi[3]={321,211,211};
854 for (Int_t i3Prong = 0; i3Prong < n3Prong; i3Prong++) {
863 Int_t nSelectednopid=0,nSelected=0;
864 for (Int_t i3Prong = 0; i3Prong < n3Prong; i3Prong++) {
881 Double_t etaD=d->Eta();
882 Double_t phiD=d->Phi();
888 Bool_t unsetvtx=kFALSE;
894 Double_t ptCand = d->Pt();
897 Bool_t recVtx=kFALSE;
898 AliAODVertex *origownvtx=0x0;
906 Bool_t isPrimary=kFALSE;
907 Bool_t isFeeddown=kFALSE;
909 Float_t trueImpParXY=0.;
912 labDp = d->MatchToMC(411,arrayMC,3,pdgDgDplustoKpipi);
914 AliAODMCParticle *partDp = (AliAODMCParticle*)arrayMC->At(labDp);
916 pdgCode=TMath::Abs(partDp->GetPdgCode());
934 Double_t rapid=d->
YDplus();
936 if(passTopolAndPIDCuts) {
937 fYVsPt->Fill(ptCand,rapid,invMass);
942 if(passTopolAndPIDCuts)
fYVsPtSig->Fill(ptCand,rapid, invMass);
948 Double_t minPtDau=999.,
ptmax=0,maxdca=0,sigvert=0,sumD02=0;
949 Double_t dlen=0,cosp=0,dlenxy=0,cospxy=0, ndlenxy=0, dd0max=0;
953 sumD02=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
955 for(Int_t idau=0;idau<3;idau++)
if(d->GetDCA(idau)>maxdca) maxdca=d->GetDCA(idau);
961 for(Int_t i=0; i<3; i++) {
963 if(d->PtProng(i)<minPtDau) minPtDau=d->PtProng(i);
964 Double_t diffIP, errdiffIP;
966 Double_t normdd0= diffIP/errdiffIP;
967 if(i==0) dd0max=normdd0;
968 else if(TMath::Abs(normdd0)>TMath::Abs(dd0max)) dd0max=normdd0;
971 Double_t impparXY=d->
ImpParXY()*10000.;
974 if(passTopolAndPIDCuts) resSel=2;
977 Double_t arrayForSparse[
kVarForSparse]={invMass,ptCand,impparXY,resSel,minPtDau,sigvert,cosp,cospxy,dlen,dlenxy,ndlenxy,dd0max};
979 Double_t arrayForSparseFD[
kVarForSparseFD]={invMass,ptCand,impparXY,resSel,minPtDau,sigvert,cosp,cospxy,dlen,dlenxy,ndlenxy,dd0max,ptB};
980 Double_t arrayForSparseTrue[
kVarForSparseFD]={invMass,ptCand,trueImpParXY,resSel,minPtDau,sigvert,cosp,cospxy,dlen,dlenxy,ndlenxy,dd0max,ptB};
981 Double_t flagOrigin = 0;
992 if(passTopolAndPIDCuts){
1007 fPtKHist[index]->Fill(d->PtProng(1));
1011 fDLxy[index]->Fill(ndlenxy);
1012 fCosxy[index]->Fill(cospxy);
1013 fCorreld0Kd0pi[0]->Fill(d->Getd0Prong(0)*d->Getd0Prong(1),d->Getd0Prong(2)*d->Getd0Prong(1));
1023 if(isFeeddown) tmp[0]+=5000.;
1028 tmp[5]=d->GetCharge();
1033 tmp[9]=d->PtProng(0);
1034 tmp[10]=d->PtProng(1);
1035 tmp[11]=d->PtProng(2);
1036 tmp[12]=d->PProng(0);
1037 tmp[13]=d->PProng(1);
1038 tmp[14]=d->PProng(2);
1047 tmp[23]=d->Getd0Prong(0);
1048 tmp[24]=d->Getd0Prong(1);
1049 tmp[25]=d->Getd0Prong(2);
1062 if(isFeeddown) tmp[0]+=5000.;
1068 if(isPrimary&&labDp>=0)flagOrigin=1;
1069 if(isFeeddown&&labDp>=0)flagOrigin=2;
1070 if(!(labDp>=0))flagOrigin=3;
1085 else if(isFeeddown){
1095 if(passTopolAndPIDCuts){
1098 Float_t factor[3]={1.,1.,1.};
1102 fDLxy[index]->Fill(ndlenxy);
1103 fCosxy[index]->Fill(cospxy);
1104 Float_t sumd02s=d->Getd0Prong(0)*d->Getd0Prong(0)*factor[0]*factor[0]+d->Getd0Prong(1)*d->Getd0Prong(1)*factor[1]*factor[1]+d->Getd0Prong(2)*d->Getd0Prong(2)*factor[2]*factor[2];
1108 fPtKHist[index]->Fill(d->PtProng(1),fact);
1111 fDCAHist[index]->Fill(maxdca,fact);
1112 fCorreld0Kd0pi[1]->Fill(d->Getd0Prong(0)*d->Getd0Prong(1),d->Getd0Prong(2)*d->Getd0Prong(1));
1130 if(
fDoLS && arrayLikeSign)
LSAnalysis(array3Prong,arrayLikeSign,aod,vtx1,nOS);
1151 hisname.Form(
"hLSPt%d",i);
1155 hisname.Form(
"hCosPAllPt%dLS",i);
1158 hisname.Form(
"hDLenAllPt%dLS",i);
1161 hisname.Form(
"hSumd02AllPt%dLS",i);
1164 hisname.Form(
"hSigVertAllPt%dLS",i);
1167 hisname.Form(
"hPtMaxAllPt%dLS",i);
1170 hisname.Form(
"hDCAAllPt%dLS",i);
1171 fDCAHistLS[index]=
new TH1F(hisname.Data(),hisname.Data(),
nbins,0.,0.1);
1177 hisname.Form(
"hLSPt%dnw",i);
1181 hisname.Form(
"hCosPSigPt%dLS",i);
1184 hisname.Form(
"hDLenSigPt%dLS",i);
1187 hisname.Form(
"hSumd02SigPt%dLS",i);
1190 hisname.Form(
"hSigVertSigPt%dLS",i);
1193 hisname.Form(
"hPtMaxSigPt%dLS",i);
1196 hisname.Form(
"hDCASigPt%dLS",i);
1197 fDCAHistLS[index]=
new TH1F(hisname.Data(),hisname.Data(),
nbins,0.,0.1);
1203 hisname.Form(
"hLSPt%dLCntrip",i);
1207 hisname.Form(
"hCosPBkgPt%dLS",i);
1210 hisname.Form(
"hDLenBkgPt%dLS",i);
1213 hisname.Form(
"hSumd02BkgPt%dLS",i);
1216 hisname.Form(
"hSigVertBkgPt%dLS",i);
1219 hisname.Form(
"hPtMaxBkgPt%dLS",i);
1222 hisname.Form(
"hDCABkgPt%dLS",i);
1223 fDCAHistLS[index]=
new TH1F(hisname.Data(),hisname.Data(),
nbins,0.,0.1);
1227 hisname.Form(
"hLSPt%dLCntripsinglecut",i);
1232 hisname.Form(
"hLSPt%dspc",i);
1263 Int_t nptmindaubins=10;
1264 Double_t minptmindau=0.2;
1265 Double_t maxptmindau=1.2;
1267 Int_t nsigvertbins=25;
1268 Double_t minsigvert=0.010;
1269 Double_t maxsigvert=0.035;
1272 Double_t minsel=0.5;
1273 Double_t maxsel=2.5;
1275 Int_t ncospbins=100;
1276 Double_t mincosp=0.90;
1277 Double_t maxcosp=1.;
1279 Int_t ncospxybins=30;
1280 Double_t mincospxy=0.97;
1281 Double_t maxcospxy=1.;
1284 Double_t mindecl=0.;
1285 Double_t maxdecl=0.7;
1287 Int_t ndeclxybins=70;
1288 Double_t mindeclxy=0.;
1289 Double_t maxdeclxy=0.7;
1291 Int_t nnormdlbins=30;
1292 Double_t minnormdl=0.;
1293 Double_t maxnormdl=30.;
1295 Int_t nd0d0expbins=40;
1296 Double_t mind0d0=-10.;
1297 Double_t maxd0d0=10.;
1301 TString axTit[
kVarForSparse]={
"M_{K#pi#pi} (GeV/c^{2})",
"p_{T} (GeV/c)",
"Imp Par (#mum)",
"passTopolPID",
"min. daughter p_{T} (GeV/c)",
1302 "sigmaVertex",
"cos(#theta_{P})",
"cos(#theta_{P}^{xy})",
"decL (cm)",
"decL XY (cm)",
"Norm decL XY",
"Norm max d0-d0exp"};
1304 Int_t
nbins[
kVarForSparse]={nmassbins,
nptbins,
fNImpParBins,nselbins,nptmindaubins,nsigvertbins,ncospbins,ncospxybins,ndeclbins,ndeclxybins,nnormdlbins,nd0d0expbins};
1305 Double_t xmin[
kVarForSparse]={
fLowmasslimit,
ptmin,
fLowerImpPar,minsel,minptmindau,minsigvert,mincosp,mincospxy,mindecl,mindeclxy,minnormdl,mind0d0};
1306 Double_t xmax[
kVarForSparse]={
fUpmasslimit,
ptmax,
fHigherImpPar,maxsel,maxptmindau,maxsigvert,maxcosp,maxcospxy,maxdecl,maxdeclxy,maxnormdl,maxd0d0};
1309 Int_t nbinsFD[
kVarForSparseFD]={nmassbins,
nptbins,
fNImpParBins,nselbins,nptmindaubins,nsigvertbins,ncospbins,ncospxybins,ndeclbins,ndeclbins,nnormdlbins,nd0d0expbins,84};
1310 Double_t xminFD[
kVarForSparseFD]={
fLowmasslimit,
ptmin,
fLowerImpPar,minsel,minptmindau,minsigvert,mincosp,mincospxy,mindecl,mindeclxy,minnormdl,mind0d0,-2};
1311 Double_t xmaxFD[
kVarForSparseFD]={
fUpmasslimit,
ptmax,
fHigherImpPar,maxsel,maxptmindau,maxsigvert,maxcosp,maxcospxy,maxdecl,maxdeclxy,maxnormdl,maxd0d0,40};
1316 "Mass vs. pt vs.imppar - All",
1319 "Mass vs. pt vs.imppar - promptD",
1322 "Mass vs. pt vs.imppar - DfromB",
1325 "Mass vs. pt vs.true imppar -DfromB",
1328 "Mass vs. pt vs.imppar - backgr.",
1332 for(Int_t i=0; i<5; i++){
1343 const Int_t nVarPrompt = 2;
1344 const Int_t nVarFD = 3;
1346 Int_t nbinsPrompt[nVarPrompt]={200,100};
1347 Int_t nbinsFD[nVarFD]={200,100,200};
1349 Double_t xminPrompt[nVarPrompt] = {0.,-1.};
1350 Double_t xmaxPrompt[nVarPrompt] = {40.,1.};
1352 Double_t xminFD[nVarFD] = {0.,-1.,0.};
1353 Double_t xmaxFD[nVarFD] = {40.,1.,40.};
1356 fMCAccPrompt =
new THnSparseF(
"hMCAccPrompt",
"kStepMCAcceptance pt vs. y - promptD",nVarPrompt,nbinsPrompt,xminPrompt,xmaxPrompt);
1361 fMCAccBFeed =
new THnSparseF(
"hMCAccBFeed",
"kStepMCAcceptance pt vs. y vs. ptB - DfromB",nVarFD,nbinsFD,xminFD,xmaxFD);
1362 fMCAccBFeed->GetAxis(0)->SetTitle(
"p_{T} (GeV/c)");
1364 fMCAccBFeed->GetAxis(2)->SetTitle(
"p_{T}^{B} (GeV/c)");
1374 const Int_t nProng = 3;
1376 Double_t zMCVertex = mcHeader->GetVtxZ();
1378 for(Int_t iPart=0; iPart<arrayMC->GetEntriesFast(); iPart++){
1379 AliAODMCParticle* mcPart =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(iPart));
1380 if (TMath::Abs(mcPart->GetPdgCode()) == 411){
1385 Bool_t isGoodDecay=kFALSE;
1386 Int_t labDau[4]={-1,-1,-1,-1};
1387 Bool_t isInAcc = kFALSE;
1388 Bool_t isFidAcc = kFALSE;
1391 if(deca > 0) isGoodDecay=kTRUE;
1398 isInAcc=
CheckAcc(arrayMC,nProng,labDau);
1404 Double_t arrayMCprompt[2] = {mcPart->Pt(),mcPart->Y()};
1411 Double_t arrayMCFD[3] = {mcPart->Pt(),mcPart->Y(),ptB};
1426 if(fDebug > 1) printf(
"AnalysisTaskSEDplus: Terminate() \n");
1428 fOutput =
dynamic_cast<TList*
> (GetOutputData(1));
1430 printf(
"ERROR: fOutput not available\n");
1436 printf(
"Number of analyzed events = %d\n",(Int_t)
fHistNEvents->GetBinContent(2));
1438 printf(
"ERROR: fHistNEvents not available\n");
1448 Double_t vtxTrue[3];
1449 mcHeader->GetVertex(vtxTrue);
1451 partDp->XvYvZv(origD);
1452 Short_t
charge=partDp->Charge();
1453 Double_t pXdauTrue[3],pYdauTrue[3],pZdauTrue[3];
1454 for(Int_t iDau=0; iDau<3; iDau++){
1460 Int_t nDau=partDp->GetNDaughters();
1461 Int_t labelFirstDau = partDp->GetDaughter(0);
1463 for(Int_t iDau=0; iDau<3; iDau++){
1464 Int_t ind = labelFirstDau+iDau;
1465 AliAODMCParticle* part =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(ind));
1467 AliError(
"Daughter particle not found in MC array");
1470 pXdauTrue[iDau]=part->Px();
1471 pYdauTrue[iDau]=part->Py();
1472 pZdauTrue[iDau]=part->Pz();
1476 for(Int_t iDau=0; iDau<2; iDau++){
1477 Int_t ind = labelFirstDau+iDau;
1478 AliAODMCParticle* part =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(ind));
1480 AliError(
"Daughter particle not found in MC array");
1483 Int_t pdgCode=TMath::Abs(part->GetPdgCode());
1484 if(pdgCode==211 || pdgCode==321){
1485 pXdauTrue[theDau]=part->Px();
1486 pYdauTrue[theDau]=part->Py();
1487 pZdauTrue[theDau]=part->Pz();
1490 Int_t nDauRes=part->GetNDaughters();
1492 Int_t labelFirstDauRes = part->GetDaughter(0);
1493 for(Int_t iDauRes=0; iDauRes<2; iDauRes++){
1494 Int_t indDR = labelFirstDauRes+iDauRes;
1495 AliAODMCParticle* partDR =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(indDR));
1497 AliError(
"Daughter particle not found in MC array");
1501 Int_t pdgCodeDR=TMath::Abs(partDR->GetPdgCode());
1502 if(pdgCodeDR==211 || pdgCodeDR==321){
1503 pXdauTrue[theDau]=partDR->Px();
1504 pYdauTrue[theDau]=partDR->Py();
1505 pZdauTrue[theDau]=partDR->Pz();
1513 AliError(
"Wrong number of decay prongs");
1518 Double_t d0dummy[3]={0.,0.,0.};
1519 AliAODRecoDecayHF aodDplusMC(vtxTrue,origD,3,charge,pXdauTrue,pYdauTrue,pZdauTrue,d0dummy);
1527 for(Int_t iprong=0;iprong<3;iprong++){
1529 AliAODTrack *trad = (AliAODTrack*)d->GetDaughter(iprong);
1530 Int_t labd= trad->GetLabel();
1532 AliAODMCParticle *dau = (AliAODMCParticle*)arrayMC->At(labd);
1534 Int_t labm = dau->GetMother();
1536 AliAODMCParticle *mot = (AliAODMCParticle*)arrayMC->At(labm);
1538 if(TMath::Abs(mot->GetPdgCode())==310 || TMath::Abs(mot->GetPdgCode())==130 || TMath::Abs(mot->GetPdgCode())==321){
1539 if(d->PtProng(iprong)<=1)factor[iprong]=1./.7;
1540 else factor[iprong]=1./.6;
1543 if(TMath::Abs(mot->GetPdgCode())==3122) {
1544 factor[iprong]=1./0.25;
1554 for(Int_t k=0;k<3;k++)fact=fact*factor[k];
1562 for (Int_t iProng = 0; iProng<nProng; iProng++){
1563 AliAODMCParticle* mcPartDaughter=
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(labDau[iProng]));
1564 if(!mcPartDaughter)
return kFALSE;
1565 Double_t eta = mcPartDaughter->Eta();
1566 Double_t pt = mcPartDaughter->Pt();
1567 if (TMath::Abs(eta) > 0.9 || pt < 0.1)
return kFALSE;
TH1F * fCosxy[3 *kMaxPtBins]
!hist. for Cosxy (topol+PID)
THnSparseF * fMCAccPrompt
!histo for StepMCAcc for Dplus prompt (pt,y,ptB)
TH2F * fPhiEtaCand
! hist. with eta/phi distribution of candidates
Double_t NormalizedDecayLengthXY() const
Double_t NormalizedDecayLength() const
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Bool_t fUseStrangeness
flag for access to MC
TH1F * fSigVertHist[3 *kMaxPtBins]
!hist. for sigVert (topol+PID)
static Int_t CheckDplusDecay(AliStack *stack, Int_t label, Int_t *arrayDauLab)
AliRDHFCutsDplustoKpipi * fRDCutsAnalysis
list of cuts
virtual void UserCreateOutputObjects()
Implementation of interface methods.
void StoreCandidates(AliVEvent *, Int_t nCand=0, Bool_t flagFilter=kTRUE)
THnSparseF * fHistMassPtImpPar[5]
! histograms for impact parameter and cut variation study
TH2F * fYVsPtSigNoPid
! hist. of Y vs. Pt (MC, only sig, w/o PID)
void Getd0MeasMinusExpProng(Int_t ip, Double_t magf, Double_t &d0diff, Double_t &errd0diff) const
TH1F * fPtpi1Hist[3 *kMaxPtBins]
!hist. for PtPi1 (topol+PID)
Int_t GetIsSelectedCuts() const
Int_t IsEventSelectedInCentrality(AliVEvent *event)
Bool_t HasSelectionBit(Int_t i) const
TH3F * fYVsPt
! hist. of Y vs. Pt vs. Mass (topol+PID cuts)
virtual void Terminate(Option_t *option)
TH1F * fDLxy[3 *kMaxPtBins]
!hist. for DLxy (topol+PID)
void UnsetOwnPrimaryVtx()
Int_t fEtaSelection
flag to do LS analysis
Float_t fLowerImpPar
nunber of bins in impact parameter histos
TH2F * fHistCentrality[3]
!hist. for cent distr (all,sel ev, )
TH1F * fPtMaxHistLS[3 *kMaxPtBins]
!hist. for LS cuts variable 5 (topol+PID)
Double_t ImpParXY() const
TH1F * fSPDMult
! hist. of spd mult
virtual ~AliAnalysisTaskSEDplus()
Bool_t fReadMC
flag for filling ntuple 0 no NTuple 1 big Ntuple 2 small NTuple
Int_t GetLSHistoIndex(Int_t iPtBin) const
Int_t GetSignalHistoIndex(Int_t iPtBin) const
UInt_t GetPIDTrackTPCTOFBitMap(AliAODTrack *track) const
Int_t GetWhyRejection() const
Double_t CosPointingAngleXY() const
TH1F * fMassHistNoPid[3 *kMaxPtBins]
!hist. for inv mass (w/o PID)
TList * fListCuts
width of one bin in output histos
Bool_t FillRecoCand(AliVEvent *event, AliAODRecoDecayHF3Prong *rd3)
TList * fOutput
! list send on output slot 0
virtual Bool_t IsInFiducialAcceptance(Double_t pt, Double_t y) const
Bool_t fCutsDistr
flag to use bitmask
static Int_t CheckOrigin(TClonesArray *arrayMC, AliAODMCParticle *mcPart, Bool_t searchUpToQuark=kTRUE)
Double_t GetMaxVtxZ() const
void LSAnalysis(TClonesArray *arrayOppositeSign, TClonesArray *arrayLikeSign, AliAODEvent *aod, AliAODVertex *vtx1, Int_t nDplusOS)
void SetBinWidth(Float_t w)
Int_t GetBackgroundHistoIndex(Int_t iPtBin) const
TH1F * fCosPHist[3 *kMaxPtBins]
!hist. for PointingAngle (topol+PID)
Bool_t HasBadDaughters() const
TH2F * fYVsPtSig
! hist. of Y vs. Pt (MC, only sig, topol+PID cuts)
Float_t fHigherImpPar
lower limit in impact parameter (um)
Class for cuts on AOD reconstructed D+->Kpipi.
TH1F * fMassHistLS[5 *kMaxPtBins]
!hist. for LS inv mass (topol+PID)
void CreateImpactParameterHistos()
static Int_t GetNumberOfTrackletsInEtaRange(AliAODEvent *ev, Double_t mineta, Double_t maxeta)
Int_t fFillNtuple
limits for the Pt bins
TH1F * fSumd02Hist[3 *kMaxPtBins]
!hist. for sum d02 (topol+PID)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
void FillMCAcceptanceHistos(TClonesArray *arrayMC, AliAODMCHeader *mcHeader)
TH1F * fMassHistPlus[3 *kMaxPtBins]
!hist. for D+ inv mass (topol+PID cuts)
TH2F * fPtVsMass
! hist. of pt vs. mass (topol+PID cuts)
AliAODVertex * GetOwnPrimaryVtx() const
Double_t GetSigmaVert(const AliAODEvent *aod=0x0)
Int_t fDoLS
higher limit in impact parameter (um)
TH1F * fPtpi2Hist[3 *kMaxPtBins]
!hist. for PtPi2 (topol+PID)
TH2F * fPhiEtaCandSigReg
! hist. eta/phi of candidates in D+ mass region
Float_t GetCentrality(AliAODEvent *aodEvent)
Double_t InvMassDplus() const
Float_t GetTrueImpactParameter(const AliAODMCHeader *mcHeader, TClonesArray *arrayMC, const AliAODMCParticle *partDp) const
Int_t fNImpParBins
flag for quark/hadron level identification of prompt and feeddown
TH1F * fDLenHistLS[3 *kMaxPtBins]
!hist. for LS cuts variable 2 (topol+PID)
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)
TH3F * fYVsPtNoPid
! hist. of Y vs. Pt vs. Mass(w/o PID)
Int_t GetHistoIndex(Int_t iPtBin) const
THnSparseF * fMCAccBFeed
!histo for StepMCAcc for Dplus FD (pt,y,ptB)
TH1F * fMassHist[3 *kMaxPtBins]
!hist. for inv mass (topol+PID cuts)
void SetOwnPrimaryVtx(const AliAODVertex *vtx)
TH2F * fPtVsMassNoPid
! hist. of pt vs. mass (w/o PID)
Double_t DecayLengthXY() const
static Double_t GetBeautyMotherPt(TClonesArray *arrayMC, AliAODMCParticle *mcPart)
Bool_t CheckAcc(TClonesArray *arrayMC, Int_t nProng, Int_t *labDau)
Bool_t GetIsPrimaryWithoutDaughters() const
TH1F * fSumd02HistLS[3 *kMaxPtBins]
!hist. for LS cuts variable 3 (topol+PID)
Bool_t IsEventSelected(AliVEvent *event)
void StoreEvent(AliVEvent *, AliRDHFCuts *, Bool_t mc=kFALSE, Int_t multiplicity=-9999, Double_t spherocity=-99.)
TH1F * fHistNEvents
!hist. for No. of events
TH1F * fCosPHistLS[3 *kMaxPtBins]
!hist. for LS cuts variable 1 (topol+PID)
TH1F * fPtKHist[3 *kMaxPtBins]
!hist. for PtK (topol+PID)
Float_t fBinWidth
Number of Pt Bins.
void SetMassLimits(Float_t range)
void CleanOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod, AliAODVertex *origownvtx) const
Int_t fSystem
eta region to accept D+ 0=all, -1 = negative, 1 = positive
TH2F * fCorreld0Kd0pi[3]
!hist. for d0k*d0pi vs. d0k*d0pi (topol+PID)
virtual void UserExec(Option_t *option)
TH1F * fDLenHist[3 *kMaxPtBins]
!hist. for Dec Length (topol+PID)
Bool_t fDoImpPar
flag to activate cuts distr histos
AliNormalizationCounter * fCounter
Cuts for Analysis.
TH1F * fSigVertHistLS[3 *kMaxPtBins]
!hist. for LS cuts variable 4 (topol+PID)
Bool_t fUseBit
flag to enhance strangeness in MC to fit to data
Double_t fArrayBinLimits[kMaxPtBins+1]
void CreateLikeSignHistos()
Double_t CosPointingAngle() const
Float_t GetStrangenessWeights(const AliAODRecoDecayHF3Prong *d, TClonesArray *arrayMC, Float_t factor[3]) const
TH1F * fDCAHist[3 *kMaxPtBins]
!hist. for DCA (topol+PID)
Float_t fLowmasslimit
upper inv mass limit for histos
TH1F * fMassHistMinus[3 *kMaxPtBins]
!hist. for D- inv mass (topol+PID cuts)
Int_t GetUseCentrality() const
Bool_t RecalcOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod) const
Int_t PtBin(Double_t pt) const
Double_t DecayLength() const
TNtuple * fNtupleDplus
! output ntuple
Bool_t fStepMCAcc
flag to activate impact paramter histos
Int_t fNPtBins
lower inv mass limit for histos
Bool_t fUseQuarkTagInKine
flag to activate histos for StepMCAcc
TH1F * fDCAHistLS[3 *kMaxPtBins]
!hist. for LS cuts variable 6 (topol+PID)
void CreateMCAcceptanceHistos()
TH1F * fPtMaxHist[3 *kMaxPtBins]
!hist. for Pt Max (topol+PID)