29 #include <Riostream.h> 31 #include <TDatabasePDG.h> 34 #include <TProcessID.h> 36 #include "AliVEvent.h" 37 #include "AliVVertex.h" 38 #include "AliVTrack.h" 39 #include "AliVertexerTracks.h" 40 #include "AliKFVertex.h" 41 #include "AliESDEvent.h" 42 #include "AliESDVertex.h" 43 #include "AliExternalTrackParam.h" 44 #include "AliNeutralTrackParam.h" 45 #include "AliESDtrack.h" 46 #include "AliESDtrackCuts.h" 47 #include "AliAODEvent.h" 48 #include "AliPIDResponse.h" 49 #include "AliAODRecoDecay.h" 65 #include "AliAnalysisFilter.h" 67 #include "AliMixedEvent.h" 70 #include "AliCodeTimer.h" 71 #include "AliMultSelection.h" 85 fSecVtxWithKF(kFALSE),
86 fRecoPrimVtxSkippingTrks(kFALSE),
87 fRmTrksFromPrimVtx(kFALSE),
96 fLikeSign3prong(kFALSE),
99 fUseKaonPIDfor3Prong(kFALSE),
102 fUseKaonPIDforDs(kFALSE),
105 fUseTPCPIDOnlyIfNoTOF(kFALSE),
106 fMaxMomForTPCPid(1.),
108 fnSigmaTPCPionLow(5.),
109 fnSigmaTPCPionHi(5.),
110 fnSigmaTOFPionLow(5.),
111 fnSigmaTOFPionHi(5.),
112 fnSigmaTPCKaonLow(5.),
113 fnSigmaTPCKaonHi(5.),
114 fnSigmaTOFKaonLow(5.),
115 fnSigmaTOFKaonHi(5.),
116 fnSigmaTPCProtonLow(5.),
117 fnSigmaTPCProtonHi(5.),
118 fnSigmaTOFProtonLow(5.),
119 fnSigmaTOFProtonHi(5.),
120 fMaxCentPercentileForTightCuts(-9999),
122 fTrackFilter2prongCentral(0x0),
123 fTrackFilter3prongCentral(0x0),
124 fTrackFilterSoftPi(0x0),
125 fTrackFilterBachelor(0x0),
128 fCutsDplustoK0spi(0x0),
129 fCutsDplustoKpipi(0x0),
134 fCutsD0toKpipipi(0x0),
135 fCutsDStartoKpipi(0x0),
137 fFindVertexForDstar(kTRUE),
138 fFindVertexForCascades(kTRUE),
139 fV0TypeForCascadeVertex(0),
140 fMassCutBeforeVertexing(kFALSE),
144 fOKInvMassD0(kFALSE),
145 fOKInvMassJpsi(kFALSE),
146 fOKInvMassDplus(kFALSE),
147 fOKInvMassDs(kFALSE),
148 fOKInvMassLc(kFALSE),
149 fOKInvMassDstar(kFALSE),
150 fOKInvMassD0to4p(kFALSE),
151 fOKInvMassLctoV0(kFALSE),
154 fMakeReducedRHF(kFALSE),
167 fMassCalc2 =
new AliAODRecoDecay(0x0,2,0,d02);
168 fMassCalc3 =
new AliAODRecoDecay(0x0,3,1,d03);
169 fMassCalc4 =
new AliAODRecoDecay(0x0,4,0,d04);
267 if(&source ==
this)
return *
this;
381 list->SetName(
"ListOfCuts");
385 list->Add(cutsD0toKpi);
389 list->Add(cutsJpsitoee);
393 list->Add(cutsDplustoK0spi);
397 list->Add(cutsDplustoKpipi);
401 list->Add(cutsDstoK0sK);
405 list->Add(cutsDstoKKpi);
409 list->Add(cutsLctopKpi);
413 list->Add(cutsLctoV0);
417 list->Add(cutsD0toKpipipi);
421 list->Add(cutsDStartoKpipi);
426 if (bCutsOk == kFALSE) {AliFatal(
"AliAnalysisVertexingHF::FillListOfCuts vertexing and the analysis task cuts are not consistent!");}
435 TClonesArray *aodVerticesHFTClArr,
436 TClonesArray *aodD0toKpiTClArr,
437 TClonesArray *aodJPSItoEleTClArr,
438 TClonesArray *aodCharm3ProngTClArr,
439 TClonesArray *aodCharm4ProngTClArr,
440 TClonesArray *aodDstarTClArr,
441 TClonesArray *aodCascadesTClArr,
442 TClonesArray *aodLikeSign2ProngTClArr,
443 TClonesArray *aodLikeSign3ProngTClArr)
451 TString evtype =
event->IsA()->GetName();
452 fInputAOD = ((evtype==
"AliAODEvent") ? kTRUE : kFALSE);
456 AliDebug(2,
"Creating HF candidates from AOD");
458 AliDebug(2,
"Creating HF candidates from ESD");
461 if(!aodVerticesHFTClArr) {
462 printf(
"ERROR: no aodVerticesHFTClArr");
466 printf(
"ERROR: no aodD0toKpiTClArr");
470 printf(
"ERROR: no aodJPSItoEleTClArr");
473 if(
f3Prong && !aodCharm3ProngTClArr) {
474 printf(
"ERROR: no aodCharm3ProngTClArr");
477 if(
f4Prong && !aodCharm4ProngTClArr) {
478 printf(
"ERROR: no aodCharm4ProngTClArr");
481 if(
fDstar && !aodDstarTClArr) {
482 printf(
"ERROR: no aodDstarTClArr");
486 printf(
"ERROR: no aodCascadesTClArr ");
489 if(
fLikeSign && !aodLikeSign2ProngTClArr) {
490 printf(
"ERROR: no aodLikeSign2ProngTClArr");
494 printf(
"ERROR: no aodLikeSign3ProngTClArr");
499 Int_t iVerticesHF=0,iD0toKpi=0,iJPSItoEle=0,i3Prong=0,i4Prong=0,iDstar=0,iCascades=0,iLikeSign2Prong=0,iLikeSign3Prong=0;
500 aodVerticesHFTClArr->Delete();
501 iVerticesHF = aodVerticesHFTClArr->GetEntriesFast();
502 TClonesArray &verticesHFRef = *aodVerticesHFTClArr;
504 aodD0toKpiTClArr->Delete();
505 iD0toKpi = aodD0toKpiTClArr->GetEntriesFast();
508 aodJPSItoEleTClArr->Delete();
509 iJPSItoEle = aodJPSItoEleTClArr->GetEntriesFast();
512 aodCharm3ProngTClArr->Delete();
513 i3Prong = aodCharm3ProngTClArr->GetEntriesFast();
516 aodCharm4ProngTClArr->Delete();
517 i4Prong = aodCharm4ProngTClArr->GetEntriesFast();
520 aodDstarTClArr->Delete();
521 iDstar = aodDstarTClArr->GetEntriesFast();
524 aodCascadesTClArr->Delete();
525 iCascades = aodCascadesTClArr->GetEntriesFast();
528 aodLikeSign2ProngTClArr->Delete();
529 iLikeSign2Prong = aodLikeSign2ProngTClArr->GetEntriesFast();
532 aodLikeSign3ProngTClArr->Delete();
533 iLikeSign3Prong = aodLikeSign3ProngTClArr->GetEntriesFast();
536 TClonesArray &aodD0toKpiRef = *aodD0toKpiTClArr;
537 TClonesArray &aodJPSItoEleRef = *aodJPSItoEleTClArr;
538 TClonesArray &aodCharm3ProngRef = *aodCharm3ProngTClArr;
539 TClonesArray &aodCharm4ProngRef = *aodCharm4ProngTClArr;
540 TClonesArray &aodDstarRef = *aodDstarTClArr;
541 TClonesArray &aodCascadesRef = *aodCascadesTClArr;
542 TClonesArray &aodLikeSign2ProngRef = *aodLikeSign2ProngTClArr;
543 TClonesArray &aodLikeSign3ProngRef = *aodLikeSign3ProngTClArr;
551 Int_t iTrkP1,iTrkP2,iTrkN1,iTrkN2,iTrkSoftPi,trkEntries,iv0,nv0;
552 Double_t xdummy,ydummy,dcap1n1,dcap1n2,dcap2n1,dcap1p2,dcan1n2,dcap2n2,dcaV0,dcaCasc;
553 Bool_t okD0=kFALSE,okJPSI=kFALSE,ok3Prong=kFALSE,ok4Prong=kFALSE;
554 Bool_t okDstar=kFALSE,okD0fromDstar=kFALSE;
556 AliESDtrack *postrack1 = 0;
557 AliESDtrack *postrack2 = 0;
558 AliESDtrack *negtrack1 = 0;
559 AliESDtrack *negtrack2 = 0;
560 AliESDtrack *trackPi = 0;
561 Double_t mompos1[3],mompos2[3],momneg1[3],momneg2[3];
572 AliDebug(2,Form(
" dca cut set to %f cm",dcaMax));
584 trkEntries = (
Int_t)event->GetNumberOfTracks();
585 AliDebug(1,Form(
" Number of tracks: %d",trkEntries));
588 nv0 = (
Int_t)event->GetNumberOfV0s();
589 AliDebug(1,Form(
" Number of V0s: %d",nv0));
591 if( trkEntries<2 && (trkEntries<1 || nv0<1) ) {
592 AliDebug(1,Form(
" Not enough tracks: %d",trkEntries));
613 UChar_t *seleFlags =
new UChar_t[trkEntries];
618 AliDebug(1,Form(
" Selected tracks: %d",nSeleTrks));
630 Bool_t isLikeSign2Prong=kFALSE,isLikeSign3Prong=kFALSE;
640 for(iTrkP1=0; iTrkP1<nSeleTrks; iTrkP1++) {
646 postrack1 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkP1);
647 postrack1->GetPxPyPz(mompos1);
653 for(iv0=0; iv0<nv0; iv0++){
656 if ( !TESTBIT(seleFlags[iTrkP1],
kBitBachelor) )
continue;
666 if ( (!v0 || !v0->IsA()->InheritsFrom(
"AliAODv0") ) &&
667 (!esdV0 || !esdV0->IsA()->InheritsFrom(
"AliESDv0") ) )
continue;
678 AliExternalTrackParam * posV0track;
679 AliExternalTrackParam * negV0track;
682 AliAODTrack *posVV0track = (AliAODTrack*)(v0->GetDaughter(0));
683 AliAODTrack *negVV0track = (AliAODTrack*)(v0->GetDaughter(1));
684 if( !posVV0track || !negVV0track )
continue;
689 if (posVV0track->GetID() == postrack1->GetID() ||
690 negVV0track->GetID() == postrack1->GetID())
continue;
692 if ( posVV0track->Charge() == negVV0track->Charge() )
continue;
694 if(!(posVV0track->GetStatus() & AliESDtrack::kTPCrefit) ||
695 !(negVV0track->GetStatus() & AliESDtrack::kTPCrefit))
continue;
698 posVV0track->PxPyPz(pxpypz); posVV0track->XvYvZv(xyz);
699 posVV0track->GetCovarianceXYZPxPyPz(cv); sign=posVV0track->Charge();
700 posV0track =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
701 negVV0track->PxPyPz(pxpypz); negVV0track->XvYvZv(xyz);
702 negVV0track->GetCovarianceXYZPxPyPz(cv); sign=negVV0track->Charge();
703 negV0track =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
705 AliESDtrack *posVV0track = (AliESDtrack*)(event->GetTrack( esdV0->GetPindex() ));
706 AliESDtrack *negVV0track = (AliESDtrack*)(event->GetTrack( esdV0->GetNindex() ));
707 if( !posVV0track || !negVV0track )
continue;
712 if (posVV0track->GetID() == postrack1->GetID() ||
713 negVV0track->GetID() == postrack1->GetID())
continue;
715 if ( posVV0track->Charge() == negVV0track->Charge() )
continue;
717 if(!(posVV0track->GetStatus() & AliESDtrack::kTPCrefit) ||
718 !(negVV0track->GetStatus() & AliESDtrack::kTPCrefit))
continue;
720 if (posVV0track->GetKinkIndex(0)>0 || negVV0track->GetKinkIndex(0)>0)
continue;
722 posV0track =
new AliExternalTrackParam(*posVV0track);
723 negV0track =
new AliExternalTrackParam(*negVV0track);
728 if( !posV0track || !negV0track ){
729 AliDebug(1,Form(
" Couldn't get the V0 daughters"));
734 twoTrackArrayV0->AddAt(posV0track,0);
735 twoTrackArrayV0->AddAt(negV0track,1);
738 dcaV0 = v0->DcaV0Daughters();
741 AliNeutralTrackParam *trackV0=NULL;
743 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
744 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
748 esdV0->PxPyPz(pxpypz);
749 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
750 trackV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
755 twoTrackArrayCasc->AddAt(postrack1,0);
756 twoTrackArrayCasc->AddAt(trackV0,1);
758 AliAODVertex *vertexCasc = 0;
761 dcaCasc = postrack1->GetDCA(trackV0,
fBzkG,xdummy,ydummy);
768 fV1->GetCovMatrix(cov);
769 chi2perNDF =
fV1->GetChi2toNDF();
770 vertexCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
774 delete posV0track; posV0track=NULL;
775 delete negV0track; negV0track=NULL;
776 delete trackV0; trackV0=NULL;
778 twoTrackArrayV0->Clear();
779 twoTrackArrayCasc->Clear();
784 ioCascade =
MakeCascade(twoTrackArrayCasc,event,vertexCasc,v0,dcaCasc,okCascades);
785 if(okCascades && ioCascade) {
794 AliAODVertex *vCasc =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexCasc);
795 rc->SetSecondaryVtx(vCasc);
796 vCasc->SetParent(rc);
798 AddRefs(vCasc,rc,event,twoTrackArrayCasc);
799 vCasc->AddDaughter(v0);
806 delete posV0track; posV0track=NULL;
807 delete negV0track; negV0track=NULL;
808 delete trackV0; trackV0=NULL;
809 twoTrackArrayV0->Clear();
810 twoTrackArrayCasc->Clear();
811 if(ioCascade) {
delete ioCascade; ioCascade=NULL; }
812 if(vertexCasc) {
delete vertexCasc; vertexCasc=NULL; }
823 AliDebug(1,Form(
" Not enough tracks: %d",trkEntries));
827 if(!TESTBIT(seleFlags[iTrkP1],
kBitDispl))
continue;
828 if(postrack1->Charge()<0 && !
fLikeSign)
continue;
831 for(iTrkN1=0; iTrkN1<nSeleTrks; iTrkN1++) {
836 if(iTrkN1==iTrkP1)
continue;
839 negtrack1 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN1);
841 if(negtrack1->Charge()>0 && !
fLikeSign)
continue;
843 if(!TESTBIT(seleFlags[iTrkN1],
kBitDispl))
continue;
846 if(evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
849 if(postrack1->Charge()==negtrack1->Charge()) {
850 isLikeSign2Prong=kTRUE;
852 if(iTrkN1<iTrkP1)
continue;
854 isLikeSign2Prong=kFALSE;
855 if(postrack1->Charge()<0 || negtrack1->Charge()>0)
continue;
857 if(evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
867 negtrack1->GetPxPyPz(momneg1);
870 dcap1n1 = postrack1->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
871 if(dcap1n1>dcaMax) { negtrack1=0;
continue; }
874 twoTrackArray1->AddAt(postrack1,0);
875 twoTrackArray1->AddAt(negtrack1,1);
878 twoTrackArray1->Clear();
885 io2Prong =
Make2Prong(twoTrackArray1,event,vertexp1n1,dcap1n1,okD0,okJPSI,okD0fromDstar);
887 if((
fD0toKpi && okD0) || (
fJPSItoEle && okJPSI) || (isLikeSign2Prong && (okD0 || okJPSI))) {
889 AliAODVertex *v2Prong =0x0;
890 if(!
fMakeReducedRHF)v2Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexp1n1);
891 if(!isLikeSign2Prong) {
900 rd->SetSecondaryVtx(v2Prong);
901 v2Prong->SetParent(rd);
902 AddRefs(v2Prong,rd,event,twoTrackArray1);
911 if(!okD0) v2Prong->SetParent(rd);
912 AddRefs(v2Prong,rd,event,twoTrackArray1);
923 rd->SetSecondaryVtx(v2Prong);
924 v2Prong->SetParent(rd);
925 AddRefs(v2Prong,rd,event,twoTrackArray1);
930 if(
fDstar && okD0fromDstar && !isLikeSign2Prong) {
935 vertexp1n1->AddDaughter(postrack1);
936 vertexp1n1->AddDaughter(negtrack1);
938 io2Prong->SetSecondaryVtx(vertexp1n1);
941 AliNeutralTrackParam *trackD0 =
new AliNeutralTrackParam(io2Prong);
944 for(iTrkSoftPi=0; iTrkSoftPi<nSeleTrks; iTrkSoftPi++) {
946 if(iTrkSoftPi==iTrkP1 || iTrkSoftPi==iTrkN1)
continue;
948 if(!TESTBIT(seleFlags[iTrkSoftPi],
kBitSoftPi))
continue;
951 if(evtNumber[iTrkP1]==evtNumber[iTrkSoftPi] ||
952 evtNumber[iTrkN1]==evtNumber[iTrkSoftPi] ||
953 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
958 trackD0->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
959 if(trackD0->GetSigmaY2()<0. || trackD0->GetSigmaZ2()<0.)
continue;
962 trackPi = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkSoftPi);
965 twoTrackArrayCasc->AddAt(trackPi,0);
966 twoTrackArrayCasc->AddAt(trackD0,1);
968 twoTrackArrayCasc->Clear();
973 AliAODVertex *vertexCasc = 0;
977 dcaCasc = trackPi->GetDCA(trackD0,
fBzkG,xdummy,ydummy);
984 fV1->GetCovMatrix(cov);
985 chi2perNDF =
fV1->GetChi2toNDF();
986 vertexCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
990 twoTrackArrayCasc->Clear();
995 ioCascade =
MakeCascade(twoTrackArrayCasc,event,vertexCasc,io2Prong,dcaCasc,okDstar);
1004 AliAODVertex *v2Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*vertexp1n1);
1005 rd->SetSecondaryVtx(v2Prong);
1006 v2Prong->SetParent(rd);
1007 AddRefs(v2Prong,rd,event,twoTrackArray1);
1015 AliAODVertex *vCasc = 0x0;
1023 AliAODVertex *vCasc =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexCasc);
1024 rc->SetSecondaryVtx(vCasc);
1025 vCasc->SetParent(rc);
1027 AddRefs(vCasc,rc,event,twoTrackArrayCasc);
1028 vCasc->AddDaughter(rd);
1031 twoTrackArrayCasc->Clear();
1033 if(ioCascade) {
delete ioCascade; ioCascade=NULL;}
1034 delete vertexCasc; vertexCasc=NULL;
1037 if(trackD0) {
delete trackD0; trackD0=NULL;}
1040 if(io2Prong) {
delete io2Prong; io2Prong=NULL;}
1043 twoTrackArray1->Clear();
1045 (isLikeSign2Prong && !
f3Prong) ) {
1053 for(iTrkP2=iTrkP1+1; iTrkP2<nSeleTrks; iTrkP2++) {
1055 if(iTrkP2==iTrkP1 || iTrkP2==iTrkN1)
continue;
1060 postrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkP2);
1062 if(postrack2->Charge()<0)
continue;
1064 if(!TESTBIT(seleFlags[iTrkP2],
kBitDispl))
continue;
1067 if(!TESTBIT(seleFlags[iTrkP2],
kBit3Prong))
continue;
1068 if(!TESTBIT(seleFlags[iTrkP1],
kBit3Prong))
continue;
1069 if(!TESTBIT(seleFlags[iTrkN1],
kBit3Prong))
continue;
1072 if(evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1073 evtNumber[iTrkN1]==evtNumber[iTrkP2] ||
1074 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1077 if(isLikeSign2Prong) {
1079 if(postrack1->Charge()>0) {
1080 isLikeSign3Prong=kTRUE;
1085 isLikeSign3Prong=kFALSE;
1087 if(evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1088 evtNumber[iTrkN1]==evtNumber[iTrkP2] ||
1089 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1096 Bool_t okForLcTopKpi=kTRUE;
1097 Int_t pidLcStatus=3;
1101 okForLcTopKpi=kFALSE;
1105 okForLcTopKpi=kFALSE;
1109 okForLcTopKpi=kTRUE;
1114 okForLcTopKpi=kTRUE;
1119 Bool_t okForDsToKKpi=kTRUE;
1122 !TESTBIT(seleFlags[iTrkP2],
kBitKaonCompat) ) okForDsToKKpi=kFALSE;
1134 dcap2n1 = postrack2->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1135 if(dcap2n1>dcaMax) { postrack2=0;
continue; }
1136 dcap1p2 = postrack2->GetDCA(postrack1,
fBzkG,xdummy,ydummy);
1137 if(dcap1p2>dcaMax) { postrack2=0;
continue; }
1142 if(postrack2->Charge()>0) {
1143 threeTrackArray->AddAt(postrack1,0);
1144 threeTrackArray->AddAt(negtrack1,1);
1145 threeTrackArray->AddAt(postrack2,2);
1147 threeTrackArray->AddAt(negtrack1,0);
1148 threeTrackArray->AddAt(postrack1,1);
1149 threeTrackArray->AddAt(postrack2,2);
1152 postrack2->GetPxPyPz(mompos2);
1153 Double_t pxDau[3]={mompos1[0],momneg1[0],mompos2[0]};
1154 Double_t pyDau[3]={mompos1[1],momneg1[1],mompos2[1]};
1155 Double_t pzDau[3]={mompos1[2],momneg1[2],mompos2[2]};
1162 threeTrackArray->Clear();
1170 twoTrackArray2->AddAt(postrack2,0);
1171 twoTrackArray2->AddAt(negtrack1,1);
1174 twoTrackArray2->Clear();
1183 io3Prong =
Make3Prong(threeTrackArray,event,secVert3PrAOD,dispersion,vertexp1n1,vertexp2n1,dcap1n1,dcap2n1,dcap1p2,okForLcTopKpi,okForDsToKKpi,ok3Prong);
1185 AliAODVertex *v3Prong=0x0;
1186 if(!
fMakeReducedRHF)v3Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1187 if(!isLikeSign3Prong) {
1197 v3Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1198 rd->SetSecondaryVtx(v3Prong);
1199 v3Prong->SetParent(rd);
1200 AddRefs(v3Prong,rd,event,threeTrackArray);
1213 rd->SetSecondaryVtx(v3Prong);
1214 v3Prong->SetParent(rd);
1215 AddRefs(v3Prong,rd,event,threeTrackArray);
1221 if(io3Prong) {
delete io3Prong; io3Prong=NULL;}
1222 if(secVert3PrAOD) {
delete secVert3PrAOD; secVert3PrAOD=NULL;}
1228 && !isLikeSign2Prong && !isLikeSign3Prong
1230 && dcap1n1 < fCutsD0toKpipipi->GetDCACut()
1231 && dcap2n1 < fCutsD0toKpipipi->GetDCACut()) {
1241 threeTrackArray->AddAt(postrack1,0);
1242 threeTrackArray->AddAt(negtrack1,1);
1243 threeTrackArray->AddAt(postrack2,2);
1247 for(iTrkN2=iTrkN1+1; iTrkN2<nSeleTrks; iTrkN2++) {
1249 if(iTrkN2==iTrkP1 || iTrkN2==iTrkP2 || iTrkN2==iTrkN1)
continue;
1254 negtrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN2);
1256 if(negtrack2->Charge()>0)
continue;
1258 if(!TESTBIT(seleFlags[iTrkN2],
kBitDispl))
continue;
1260 if(evtNumber[iTrkP1]==evtNumber[iTrkN2] ||
1261 evtNumber[iTrkN1]==evtNumber[iTrkN2] ||
1262 evtNumber[iTrkP2]==evtNumber[iTrkN2] ||
1263 evtNumber[iTrkP1]==evtNumber[iTrkN1] ||
1264 evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1265 evtNumber[iTrkN1]==evtNumber[iTrkP2])
continue;
1278 dcap1n2 = postrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1280 dcap2n2 = postrack2->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1284 fourTrackArray->AddAt(postrack1,0);
1285 fourTrackArray->AddAt(negtrack1,1);
1286 fourTrackArray->AddAt(postrack2,2);
1287 fourTrackArray->AddAt(negtrack2,3);
1295 fourTrackArray->Clear();
1302 io4Prong =
Make4Prong(fourTrackArray,event,secVert4PrAOD,vertexp1n1,vertexp1n1p2,dcap1n1,dcap1n2,dcap2n1,dcap2n2,ok4Prong);
1309 AliAODVertex *v4Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*secVert4PrAOD);
1310 rd->SetSecondaryVtx(v4Prong);
1311 v4Prong->SetParent(rd);
1312 AddRefs(v4Prong,rd,event,fourTrackArray);
1316 if(io4Prong) {
delete io4Prong; io4Prong=NULL;}
1317 if(secVert4PrAOD) {
delete secVert4PrAOD; secVert4PrAOD=NULL;}
1318 fourTrackArray->Clear();
1323 threeTrackArray->Clear();
1324 delete vertexp1n1p2;
1333 twoTrackArray2->Clear();
1336 for(iTrkN2=iTrkN1+1; iTrkN2<nSeleTrks; iTrkN2++) {
1338 if(iTrkN2==iTrkP1 || iTrkN2==iTrkP2 || iTrkN2==iTrkN1)
continue;
1343 negtrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN2);
1345 if(negtrack2->Charge()>0)
continue;
1347 if(!TESTBIT(seleFlags[iTrkN2],
kBitDispl))
continue;
1350 if(!TESTBIT(seleFlags[iTrkN2],
kBit3Prong))
continue;
1351 if(!TESTBIT(seleFlags[iTrkP1],
kBit3Prong))
continue;
1352 if(!TESTBIT(seleFlags[iTrkN1],
kBit3Prong))
continue;
1355 if(evtNumber[iTrkP1]==evtNumber[iTrkN2] ||
1356 evtNumber[iTrkN1]==evtNumber[iTrkN2] ||
1357 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1360 if(isLikeSign2Prong) {
1362 if(postrack1->Charge()<0) {
1363 isLikeSign3Prong=kTRUE;
1368 isLikeSign3Prong=kFALSE;
1374 Bool_t okForLcTopKpi=kTRUE;
1375 Int_t pidLcStatus=3;
1379 okForLcTopKpi=kFALSE;
1383 okForLcTopKpi=kFALSE;
1387 okForLcTopKpi=kTRUE;
1392 okForLcTopKpi=kTRUE;
1397 Bool_t okForDsToKKpi=kTRUE;
1400 !TESTBIT(seleFlags[iTrkN2],
kBitKaonCompat) ) okForDsToKKpi=kFALSE;
1412 dcap1n2 = postrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1413 if(dcap1n2>dcaMax) { negtrack2=0;
continue; }
1414 dcan1n2 = negtrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1415 if(dcan1n2>dcaMax) { negtrack2=0;
continue; }
1417 threeTrackArray->AddAt(negtrack1,0);
1418 threeTrackArray->AddAt(postrack1,1);
1419 threeTrackArray->AddAt(negtrack2,2);
1424 negtrack2->GetPxPyPz(momneg2);
1425 Double_t pxDau[3]={momneg1[0],mompos1[0],momneg2[0]};
1426 Double_t pyDau[3]={momneg1[1],mompos1[1],momneg2[1]};
1427 Double_t pzDau[3]={momneg1[2],mompos1[2],momneg2[2]};
1432 threeTrackArray->Clear();
1438 twoTrackArray2->AddAt(postrack1,0);
1439 twoTrackArray2->AddAt(negtrack2,1);
1443 twoTrackArray2->Clear();
1450 io3Prong =
Make3Prong(threeTrackArray,event,secVert3PrAOD,dispersion,vertexp1n1,vertexp1n2,dcap1n1,dcap1n2,dcan1n2,okForLcTopKpi,okForDsToKKpi,ok3Prong);
1452 AliAODVertex *v3Prong = 0x0;
1453 if(!
fMakeReducedRHF) v3Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1454 if(!isLikeSign3Prong) {
1463 rd->SetSecondaryVtx(v3Prong);
1464 v3Prong->SetParent(rd);
1465 AddRefs(v3Prong,rd,event,threeTrackArray);
1477 rd->SetSecondaryVtx(v3Prong);
1478 v3Prong->SetParent(rd);
1479 AddRefs(v3Prong,rd,event,threeTrackArray);
1485 if(io3Prong) {
delete io3Prong; io3Prong=NULL;}
1486 if(secVert3PrAOD) {
delete secVert3PrAOD; secVert3PrAOD=NULL;}
1488 threeTrackArray->Clear();
1494 twoTrackArray2->Clear();
1507 AliDebug(1,Form(
" D0->Kpi in event = %d;",
1508 (
Int_t)aodD0toKpiTClArr->GetEntriesFast()));
1511 AliDebug(1,Form(
" JPSI->ee in event = %d;",
1512 (
Int_t)aodJPSItoEleTClArr->GetEntriesFast()));
1515 AliDebug(1,Form(
" Charm->3Prong in event = %d;",
1516 (
Int_t)aodCharm3ProngTClArr->GetEntriesFast()));
1519 AliDebug(1,Form(
" Charm->4Prong in event = %d;\n",
1520 (
Int_t)aodCharm4ProngTClArr->GetEntriesFast()));
1523 AliDebug(1,Form(
" D*->D0pi in event = %d;\n",
1524 (
Int_t)aodDstarTClArr->GetEntriesFast()));
1527 AliDebug(1,Form(
" cascades -> v0 + track in event = %d;\n",
1528 (
Int_t)aodCascadesTClArr->GetEntriesFast()));
1531 AliDebug(1,Form(
" Like-sign 2Prong in event = %d;\n",
1532 (
Int_t)aodLikeSign2ProngTClArr->GetEntriesFast()));
1535 AliDebug(1,Form(
" Like-sign 3Prong in event = %d;\n",
1536 (
Int_t)aodLikeSign3ProngTClArr->GetEntriesFast()));
1540 twoTrackArray1->Delete();
delete twoTrackArray1;
1541 twoTrackArray2->Delete();
delete twoTrackArray2;
1542 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1543 twoTrackArrayV0->Delete();
delete twoTrackArrayV0;
1544 threeTrackArray->Clear();
1545 threeTrackArray->Delete();
delete threeTrackArray;
1546 fourTrackArray->Delete();
delete fourTrackArray;
1547 delete [] seleFlags; seleFlags=NULL;
1548 if(evtNumber) {
delete [] evtNumber; evtNumber=NULL;}
1549 tracksAtVertex.Delete();
1552 seleTrksArray.Delete();
1563 const AliVEvent *event,
1588 const AliVEvent *event,
1594 Int_t nDg = v->GetNDaughters();
1596 if(nDg) dg = v->GetDaughter(0);
1600 Int_t nTrks = trkArray->GetEntriesFast();
1602 AliExternalTrackParam *track = 0;
1603 AliAODTrack *aodTrack = 0;
1606 for(
Int_t i=0; i<nTrks; i++) {
1607 track = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
1608 id = (
Int_t)track->GetID();
1611 aodTrack =
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[
id]));
1612 if(!aodTrack) AliFatal(
"Not a standard AOD");
1613 v->AddDaughter(aodTrack);
1627 TClonesArray *inputArray=(TClonesArray*)aod->GetList()->FindObject(
"VerticesHF");
1628 if(!inputArray)
return;
1630 AliAODTrack *track = 0;
1631 AliAODVertex *vertex = 0;
1634 for(
Int_t iv=0; iv<inputArray->GetEntriesFast(); iv++) {
1635 vertex = (AliAODVertex*)inputArray->UncheckedAt(iv);
1636 for(
Int_t id=0;
id<vertex->GetNDaughters();
id++) {
1637 track = (AliAODTrack*)vertex->GetDaughter(
id);
1638 if(!track->GetStatus()) needtofix=kTRUE;
1640 if(needtofix)
break;
1643 if(!needtofix)
return;
1646 printf(
"Fixing references\n");
1652 for(
Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
1653 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
1654 if(!track) AliFatal(
"Not a standard AOD");
1657 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
1660 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
1664 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
1668 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
1672 Int_t ids[4]={-1,-1,-1,-1};
1673 for(
Int_t iv=0; iv<inputArray->GetEntriesFast(); iv++) {
1675 vertex = (AliAODVertex*)inputArray->UncheckedAt(iv);
1677 Int_t nDgs = vertex->GetNDaughters();
1678 for(
id=0;
id<nDgs;
id++) {
1679 track = (AliAODTrack*)vertex->GetDaughter(
id);
1680 if(track->Charge()==0) {cascade=kTRUE;
continue;}
1681 ids[id]=(
Int_t)track->GetID();
1682 vertex->RemoveDaughter(track);
1684 if(cascade)
continue;
1685 for(
id=0;
id<nDgs;
id++) {
1686 if (ids[
id]>-1 && ids[
id] < fAODMapSize) {
1687 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(
fAODMap[ids[
id]]));
1688 if(!track) AliFatal(
"Not a standard AOD");
1689 vertex->AddDaughter(track);
1707 if(!track1)
return kFALSE;
1709 if(!track2)
return kFALSE;
1710 AliESDtrack *postrack1 = 0;
1711 AliESDtrack *negtrack1 = 0;
1712 postrack1 =
new AliESDtrack(track1);
1713 negtrack1 =
new AliESDtrack(track2);
1718 Double_t dca12 = postrack1->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1720 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1723 vprimary->GetXYZ(pos);
1724 vprimary->GetCovarianceMatrix(cov);
1725 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1726 fV1->GetCovMatrix(cov);
1730 if(!track3)
return kFALSE;
1731 AliESDtrack *esdt3 =
new AliESDtrack(track3);
1735 threeTrackArray->AddAt(postrack1,0);
1736 threeTrackArray->AddAt(negtrack1,1);
1737 threeTrackArray->AddAt(esdt3,2);
1738 dca2 = esdt3->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1739 dca3 = esdt3->GetDCA(postrack1,
fBzkG,xdummy,ydummy);
1743 if (!secVert3PrAOD) {
1744 threeTrackArray->Clear();
1745 threeTrackArray->Delete();
delete threeTrackArray;
1747 delete postrack1; postrack1=NULL;
1748 delete negtrack1; negtrack1=NULL;
1749 delete esdt3; esdt3=NULL;
1756 rd=
Make3Prong(threeTrackArray, event, secVert3PrAOD,dispersion, vtxRec, vertexp2n1, dca12, dca2, dca3, rd);
1759 threeTrackArray->Clear();
1760 threeTrackArray->Delete();
delete threeTrackArray;
1762 delete postrack1; postrack1=NULL;
1763 delete negtrack1; negtrack1=NULL;
1764 delete esdt3; esdt3=NULL;
1779 if(!track1)
return kFALSE;
1781 if(!track2)
return kFALSE;
1783 AliESDtrack *esdt1 = 0;
1784 AliESDtrack *esdt2 = 0;
1785 esdt1 =
new AliESDtrack(track1);
1786 esdt2 =
new AliESDtrack(track2);
1788 twoTrackArray1->AddAt(esdt1,0);
1789 twoTrackArray1->AddAt(esdt2,1);
1794 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1797 vprimary->GetXYZ(pos);
1798 vprimary->GetCovarianceMatrix(cov);
1799 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1800 fV1->GetCovMatrix(cov);
1806 twoTrackArray1->Clear();
1807 twoTrackArray1->Delete();
delete twoTrackArray1;
1809 delete esdt1; esdt1=NULL;
1810 delete esdt2; esdt2=NULL;
1814 Bool_t okD0FromDstar=kFALSE;
1817 rd=
Make2Prong(twoTrackArray1, event, vtxRec, dca12, okD0, okJPSI, okD0FromDstar,refill,rd);
1821 twoTrackArray1->Clear();
1822 twoTrackArray1->Delete();
delete twoTrackArray1;
1823 delete esdt1; esdt1=NULL;
1824 delete esdt2; esdt2=NULL;
1835 AliAODTrack *trackB =(AliAODTrack*)event->GetTrack(
fAODMap[rCasc->
GetProngID(0)]);
1836 if(!trackB)
return kFALSE;
1838 AliNeutralTrackParam *trackV0=NULL;
1844 TClonesArray *inputArrayD0=(TClonesArray*)event->GetList()->FindObject(
"D0toKpi");
1845 if(!inputArrayD0)
return kFALSE;
1847 if(!trackD0)
return kFALSE;
1850 trackV0 =
new AliNeutralTrackParam(trackD0);
1854 if(!v0)
return kFALSE;
1856 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
1857 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
1860 AliESDtrack *esdB =
new AliESDtrack(trackB);
1862 twoTrackArrayCasc->AddAt(esdB,0);
1863 twoTrackArrayCasc->AddAt(trackV0,1);
1866 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1870 vprimary->GetXYZ(pos);
1871 vprimary->GetCovarianceMatrix(cov);
1872 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1873 fV1->GetCovMatrix(cov);
1876 AliAODVertex *vtxCasc = 0x0;
1879 Double_t dispersion, xdummy, ydummy;
1880 dca = esdB->GetDCA(trackV0,
fBzkG,xdummy,ydummy);
1884 vtxCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
1887 twoTrackArrayCasc->Clear();
1888 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1890 delete esdB; esdB=NULL;
1891 delete vtxCasc;vtxCasc=NULL;
1893 delete trackV0; trackV0=NULL;
1899 vtxCasc->SetParent(rCasc);
1900 rCasc->SetSecondaryVtx(vtxCasc);
1902 if(DStar)vtxCasc->AddDaughter(trackD0);
1903 else vtxCasc->AddDaughter(v0);
1908 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
1910 esdB->PropagateToDCA(vtxCasc,
fBzkG,kVeryBig);
1911 trackV0->PropagateToDCA(vtxCasc,
fBzkG,kVeryBig);
1913 esdB->GetPxPyPz(momentum);
1914 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
1915 trackV0->GetPxPyPz(momentum);
1916 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
1918 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArrayCasc,event);
1921 delete vtxCasc; vtxCasc=NULL;
1922 twoTrackArrayCasc->Clear();
1923 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1924 delete esdB; esdB=NULL;
1925 delete trackV0; trackV0=NULL;
1930 esdB->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1932 d0err[0] = TMath::Sqrt(covd0z0[0]);
1933 trackV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1935 d0err[1] = TMath::Sqrt(covd0z0[0]);
1936 rCasc->SetPxPyPzProngs(2,px,py,pz);
1938 rCasc->Setd0Prongs(2,d0);
1941 rCasc->SetCharge(esdB->Charge());
1943 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
1944 if(esdB->GetStatus()&AliESDtrack::kESDpid) esdB->GetESDpid(esdpid0);
1945 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
1947 for(
Int_t i=0;i<5;i++) {
1948 esdpid[i] = esdpid0[i];
1949 esdpid[5+i] = esdpid1[i];
1951 rCasc->SetPID(2,esdpid);
1956 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
1957 twoTrackArrayCasc->Clear();
1958 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1959 delete esdB; esdB=NULL;
1960 delete trackV0; trackV0=NULL;
1978 AliAODTrack *trackB =
dynamic_cast<AliAODTrack*
> (rc->
GetBachelor());
1979 if (!trackB)
return kFALSE;
1981 AliAODv0 *v0 =
dynamic_cast<AliAODv0*
> (rc->
Getv0());
1982 if (!v0)
return kFALSE;
1986 AliESDtrack *esdB =
new AliESDtrack(trackB);
1987 if (!esdB)
return kFALSE;
1989 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
1990 if (!trackVV0)
return kFALSE;
1992 AliNeutralTrackParam *trackV0 =
new AliNeutralTrackParam(trackVV0);
1993 if (!trackV0)
return kFALSE;
1996 twoTrackArrayCasc->AddAt(esdB, 0);
1997 twoTrackArrayCasc->AddAt(trackV0, 1);
2000 Double_t dispersion, xdummy, ydummy, pos[3], cov[6];
2008 const AliVVertex *vprimary =
event->GetPrimaryVertex();
2009 vprimary->GetXYZ(pos);
2010 vprimary->GetCovarianceMatrix(cov);
2011 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
2018 Double_t dca = esdB->GetDCA(trackV0,
fBzkG, xdummy, ydummy);
2022 twoTrackArrayCasc->Clear();
2023 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
2025 delete esdB; esdB=0;
2026 delete vtxCasc; vtxCasc=0;
2027 delete trackV0; trackV0=0;
2034 vtxCasc->SetParent(rc);
2035 rc->SetSecondaryVtx(vtxCasc);
2037 vtxCasc->AddDaughter(v0);
2042 Double_t momentum[3], px[2], py[2], pz[2], d0[2], d0err[2], d0z0[2], covd0z0[3];
2043 esdB->PropagateToDCA(vtxCasc,
fBzkG, kVeryBig);
2044 trackV0->PropagateToDCA(vtxCasc,
fBzkG, kVeryBig);
2045 esdB->GetPxPyPz(momentum);
2046 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2047 trackV0->GetPxPyPz(momentum);
2048 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2052 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArrayCasc, event);
2053 if (!primVertexAOD) {
2054 twoTrackArrayCasc->Clear();
2055 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
2057 delete esdB; esdB=0;
2058 delete vtxCasc; vtxCasc=0;
2059 delete trackV0; trackV0=0;
2064 esdB->PropagateToDCA(primVertexAOD,
fBzkG, kVeryBig, d0z0, covd0z0);
2066 d0err[0] = TMath::Sqrt(covd0z0[0]);
2067 trackV0->PropagateToDCA(primVertexAOD,
fBzkG, kVeryBig, d0z0, covd0z0);
2069 d0err[1] = TMath::Sqrt(covd0z0[0]);
2074 Double_t esdpid0[5] = {0., 0., 0., 0., 0.};
2075 Double_t esdpid1[5] = {0., 0., 0., 0., 0.};
2076 if (esdB->GetStatus()&AliESDtrack::kESDpid) esdB->GetESDpid(esdpid0);
2077 for (
Int_t ipid=0; ipid<5; ipid++) {
2078 esdpid[ipid] = esdpid0[ipid];
2079 esdpid[5+ipid] = esdpid1[ipid];
2086 rc->SetPxPyPzProngs(2, px, py, pz);
2087 rc->Setd0Prongs(2, d0);
2089 rc->SetCharge(esdB->Charge());
2090 rc->SetPID(2, esdpid);
2095 twoTrackArrayCasc->Clear();
2096 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
2098 delete primVertexAOD; primVertexAOD=0;
2099 delete esdB; esdB=0;
2100 delete trackV0; trackV0=0;
2108 TObjArray *twoTrackArray,AliVEvent *event,
2109 AliAODVertex *secVert,
2117 UInt_t ntref=TProcessID::GetObjectCount();
2119 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2124 Bool_t dummy1,dummy2,dummy3;
2130 dummy1,dummy2,dummy3);
2131 if(!theCascade)
return 0x0;
2134 AliESDtrack *trackPi = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2135 theCascade->SetCharge(trackPi->Charge());
2143 AliAODTrack* trackPiAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idSoftPi]));
2144 if(!trackPiAOD) AliFatal(
"Not a standard AOD");
2145 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPiAOD);
2148 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPi);
2150 tmpCascade->GetSecondaryVtx()->AddDaughter(rd2Prong);
2152 AliAODVertex *primVertexAOD=0;
2164 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
2166 delete tmpCascade; tmpCascade=NULL;
2170 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2180 TObjArray *twoTrackArray,AliVEvent *event,
2181 AliAODVertex *secVert,
2189 UInt_t ntref=TProcessID::GetObjectCount();
2191 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2196 AliESDtrack *postrack = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2197 AliESDtrack *negtrack = (AliESDtrack*)twoTrackArray->UncheckedAt(1);
2199 postrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2200 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2202 postrack->GetPxPyPz(momentum);
2203 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2204 negtrack->GetPxPyPz(momentum);
2205 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2211 if(!presel)
return 0x0;
2214 okCascades = kFALSE;
2215 Bool_t dummy1,dummy2,dummy3;
2221 dummy1,dummy2,dummy3);
2222 if(!theCascade)
return 0x0;
2225 AliESDtrack *trackBachelor = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2226 theCascade->SetCharge(trackBachelor->Charge());
2233 Int_t idBachelor=(
Int_t)trackBachelor->GetID();
2234 if (idBachelor > -1 && idBachelor <
fAODMapSize) {
2235 AliAODTrack* trackBachelorAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idBachelor]));
2236 if(!trackBachelorAOD) AliFatal(
"Not a standard AOD");
2237 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelorAOD);
2240 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelor);
2242 tmpCascade->GetSecondaryVtx()->AddDaughter(v0);
2244 AliAODVertex *primVertexAOD=0;
2248 if(!primVertexAOD) primVertexAOD = (AliAODVertex*)event->GetPrimaryVertex();
2275 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
2277 delete tmpCascade; tmpCascade=NULL;
2278 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2286 TObjArray *twoTrackArray,AliVEvent *event,
2287 AliAODVertex *secVert,
Double_t dca,
2295 okD0=kFALSE; okJPSI=kFALSE; okD0fromDstar=kFALSE;
2297 UInt_t ntref=TProcessID::GetObjectCount();
2299 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2302 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
2303 AliESDtrack *postrack = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2304 AliESDtrack *negtrack = (AliESDtrack*)twoTrackArray->UncheckedAt(1);
2307 postrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2308 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2311 postrack->GetPxPyPz(momentum);
2312 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2313 negtrack->GetPxPyPz(momentum);
2314 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2329 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArray,event);
2330 if(!primVertexAOD)
return 0x0;
2333 postrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2335 d0err[0] = TMath::Sqrt(covd0z0[0]);
2336 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2338 d0err[1] = TMath::Sqrt(covd0z0[0]);
2346 if(postrack->Charge()!=0 && negtrack->Charge()!=0) {
2370 the2Prong->SetSecondaryVtx(secVert);
2371 secVert->SetParent(the2Prong);
2374 the2Prong->SetPxPyPzProngs(2,px,py,pz);
2375 the2Prong->SetDCA(dca);
2376 the2Prong->Setd0Prongs(2,d0);
2378 the2Prong->SetCharge(0);
2380 delete primVertexAOD; primVertexAOD=NULL;
2388 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2389 if(postrack->GetStatus()&AliESDtrack::kESDpid) postrack->GetESDpid(esdpid0);
2390 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2391 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2393 for(
Int_t i=0;i<5;i++) {
2394 esdpid[i] = esdpid0[i];
2395 esdpid[5+i] = esdpid1[i];
2397 the2Prong->SetPID(2,esdpid);
2402 TObjArray *threeTrackArray,AliVEvent *event,
2403 AliAODVertex *secVert,
Double_t dispersion,
2404 const AliAODVertex *vertexp1n1,
const AliAODVertex *vertexp2n1,
2414 UInt_t ntref=TProcessID::GetObjectCount();
2416 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2420 if(!secVert || !vertexp1n1 || !vertexp2n1)
return 0x0;
2422 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2426 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2427 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2428 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2430 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2431 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2432 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2433 postrack1->GetPxPyPz(momentum);
2434 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2435 negtrack->GetPxPyPz(momentum);
2436 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2437 postrack2->GetPxPyPz(momentum);
2438 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2450 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2451 if(!primVertexAOD)
return 0x0;
2454 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2456 d0err[0] = TMath::Sqrt(covd0z0[0]);
2457 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2459 d0err[1] = TMath::Sqrt(covd0z0[0]);
2460 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2462 d0err[2] = TMath::Sqrt(covd0z0[0]);
2466 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2467 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2468 Double_t dist12=TMath::Sqrt((vertexp1n1->GetX()-pos[0])*(vertexp1n1->GetX()-pos[0])+(vertexp1n1->GetY()-pos[1])*(vertexp1n1->GetY()-pos[1])+(vertexp1n1->GetZ()-pos[2])*(vertexp1n1->GetZ()-pos[2]));
2469 Double_t dist23=TMath::Sqrt((vertexp2n1->GetX()-pos[0])*(vertexp2n1->GetX()-pos[0])+(vertexp2n1->GetY()-pos[1])*(vertexp2n1->GetY()-pos[1])+(vertexp2n1->GetZ()-pos[2])*(vertexp2n1->GetZ()-pos[2]));
2474 AliAODRecoDecayHF3Prong *the3Prong =
new AliAODRecoDecayHF3Prong(0x0,px,py,pz,d0,d0err,dca,dispersion,dist12,dist23,charge);
2477 AliAODVertex* ownsecv=secVert->CloneWithoutRefs();
2478 the3Prong->SetOwnSecondaryVtx(ownsecv);
2482 delete primVertexAOD; primVertexAOD=NULL;
2518 the3Prong->SetSecondaryVtx(secVert);
2523 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2524 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2525 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2526 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2527 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2528 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2531 for(
Int_t i=0;i<5;i++) {
2532 esdpid[i] = esdpid0[i];
2533 esdpid[5+i] = esdpid1[i];
2534 esdpid[10+i] = esdpid2[i];
2536 the3Prong->SetPID(3,esdpid);
2542 TObjArray *threeTrackArray,AliVEvent *event,
2543 AliAODVertex *secVert,
Double_t dispersion,
2544 Double32_t dist12, Double32_t dist23,
2557 UInt_t ntref=TProcessID::GetObjectCount();
2559 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2562 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2566 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2567 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2568 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2570 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2571 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2572 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2573 postrack1->GetPxPyPz(momentum);
2574 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2575 negtrack->GetPxPyPz(momentum);
2576 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2577 postrack2->GetPxPyPz(momentum);
2578 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2580 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2581 if(!primVertexAOD)
return 0x0;
2583 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2585 d0err[0] = TMath::Sqrt(covd0z0[0]);
2586 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2588 d0err[1] = TMath::Sqrt(covd0z0[0]);
2589 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2591 d0err[2] = TMath::Sqrt(covd0z0[0]);
2593 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2594 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2597 rd->SetSecondaryVtx(secVert);
2598 secVert->SetParent(rd);
2601 rd->SetPxPyPzProngs(3,px,py,pz);
2603 rd->Setd0Prongs(3,d0);
2605 rd->SetCharge(charge);
2608 delete primVertexAOD; primVertexAOD=NULL;
2615 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2616 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2617 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2618 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2619 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2620 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2623 for(
Int_t i=0;i<5;i++) {
2624 esdpid[i] = esdpid0[i];
2625 esdpid[5+i] = esdpid1[i];
2626 esdpid[10+i] = esdpid2[i];
2628 rd->SetPID(3,esdpid);
2633 TObjArray *fourTrackArray,AliVEvent *event,
2634 AliAODVertex *secVert,
2635 const AliAODVertex *vertexp1n1,
2636 const AliAODVertex *vertexp1n1p2,
2646 UInt_t ntref=TProcessID::GetObjectCount();
2648 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2652 if(!secVert || !vertexp1n1 || !vertexp1n1p2)
return 0x0;
2654 Double_t px[4],py[4],pz[4],d0[4],d0err[4];
2656 AliESDtrack *postrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(0);
2657 AliESDtrack *negtrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(1);
2658 AliESDtrack *postrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(2);
2659 AliESDtrack *negtrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(3);
2661 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2662 negtrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2663 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2664 negtrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2667 postrack1->GetPxPyPz(momentum);
2668 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2669 negtrack1->GetPxPyPz(momentum);
2670 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2671 postrack2->GetPxPyPz(momentum);
2672 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2673 negtrack2->GetPxPyPz(momentum);
2674 px[3] = momentum[0]; py[3] = momentum[1]; pz[3] = momentum[2];
2689 AliAODVertex *primVertexAOD =
PrimaryVertex(fourTrackArray,event);
2690 if(!primVertexAOD)
return 0x0;
2693 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2695 d0err[0] = TMath::Sqrt(covd0z0[0]);
2696 negtrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2698 d0err[1] = TMath::Sqrt(covd0z0[0]);
2699 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2701 d0err[2] = TMath::Sqrt(covd0z0[0]);
2702 negtrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2704 d0err[3] = TMath::Sqrt(covd0z0[0]);
2708 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2709 Double_t dca[6]={dcap1n1,0.,dcap1n2,dcap2n1,0.,dcap2n2};
2710 Double_t dist12=TMath::Sqrt((vertexp1n1->GetX()-pos[0])*(vertexp1n1->GetX()-pos[0])+(vertexp1n1->GetY()-pos[1])*(vertexp1n1->GetY()-pos[1])+(vertexp1n1->GetZ()-pos[2])*(vertexp1n1->GetZ()-pos[2]));
2711 Double_t dist3=TMath::Sqrt((vertexp1n1p2->GetX()-pos[0])*(vertexp1n1p2->GetX()-pos[0])+(vertexp1n1p2->GetY()-pos[1])*(vertexp1n1p2->GetY()-pos[1])+(vertexp1n1p2->GetZ()-pos[2])*(vertexp1n1p2->GetZ()-pos[2]));
2712 Double_t dist4=TMath::Sqrt((secVert->GetX()-pos[0])*(secVert->GetX()-pos[0])+(secVert->GetY()-pos[1])*(secVert->GetY()-pos[1])+(secVert->GetZ()-pos[2])*(secVert->GetZ()-pos[2]));
2714 AliAODRecoDecayHF4Prong *the4Prong =
new AliAODRecoDecayHF4Prong(secVert,px,py,pz,d0,d0err,dca,dist12,dist3,dist4,charge);
2719 delete primVertexAOD; primVertexAOD=NULL;
2730 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2731 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2732 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2733 if(negtrack1->GetStatus()&AliESDtrack::kESDpid) negtrack1->GetESDpid(esdpid1);
2734 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2735 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2736 Double_t esdpid3[5]={0.,0.,0.,0.,0.};
2737 if(negtrack2->GetStatus()&AliESDtrack::kESDpid) negtrack2->GetESDpid(esdpid3);
2740 for(
Int_t i=0;i<5;i++) {
2741 esdpid[i] = esdpid0[i];
2742 esdpid[5+i] = esdpid1[i];
2743 esdpid[10+i] = esdpid2[i];
2744 esdpid[15+i] = esdpid3[i];
2746 the4Prong->SetPID(4,esdpid);
2757 AliAODTrack *track=0;
2759 for(
Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
2760 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
2761 if(!track) AliFatal(
"Not a standard AOD");
2763 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
2766 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
2770 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
2774 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
2780 AliVEvent *event)
const 2785 AliESDVertex *vertexESD = 0;
2786 AliAODVertex *vertexAOD = 0;
2792 vertexESD =
new AliESDVertex(*
fV1);
2797 Int_t nTrks = trkArray->GetEntriesFast();
2798 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
2803 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraint")) {
2805 event->GetDiamondCovXY(diamondcovxy);
2806 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
2807 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
2808 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
2809 vertexer->SetVtxStart(diamond);
2810 delete diamond; diamond=NULL;
2811 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraintOnlyFitter"))
2812 vertexer->SetOnlyFitter();
2814 Int_t skipped[1000];
2815 Int_t nTrksToSkip=0,id;
2816 AliExternalTrackParam *t = 0;
2817 for(
Int_t i=0; i<nTrks; i++) {
2818 t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
2819 id = (
Int_t)t->GetID();
2821 skipped[nTrksToSkip++] = id;
2827 for(
Int_t j=0; j<
event->GetNumberOfTracks(); j++) {
2828 AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
2829 if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
2830 id = (
Int_t)vtrack->GetID();
2832 skipped[nTrksToSkip++] = id;
2836 for(
Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
2838 vertexer->SetSkipTracks(nTrksToSkip,skipped);
2839 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
2846 AliESDtrack *esdTrack = 0;
2848 for(
Int_t i=0; i<nTrks; i++) {
2849 t = (AliESDtrack*)trkArray->UncheckedAt(i);
2850 esdTrack =
new AliESDtrack(*t);
2851 rmArray.AddLast(esdTrack);
2852 if(esdTrack->GetID()>=0) {
2853 rmId[i]=(
UShort_t)esdTrack->GetID();
2858 Float_t diamondxy[2]={
static_cast<Float_t>(
event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
2859 vertexESD = vertexer->RemoveTracksFromVertex(
fV1,&rmArray,rmId,diamondxy);
2860 delete [] rmId; rmId=NULL;
2865 if(!vertexESD)
return vertexAOD;
2866 if(vertexESD->GetNContributors()<=0) {
2868 delete vertexESD; vertexESD=NULL;
2872 delete vertexer; vertexer=NULL;
2878 vertexESD->GetXYZ(pos);
2879 vertexESD->GetCovMatrix(cov);
2880 chi2perNDF = vertexESD->GetChi2toNDF();
2881 delete vertexESD; vertexESD=NULL;
2883 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF);
2894 printf(
"Secondary vertex with Kalman filter package (AliKFParticle)\n");
2896 printf(
"Secondary vertex with AliVertexerTracks\n");
2901 printf(
"Reconstruct D0->Kpi candidates with cuts:\n");
2905 printf(
"Reconstruct D*->D0pi candidates with cuts:\n");
2907 printf(
" Reconstruct a secondary vertex for the D*\n");
2909 printf(
" Assume the D* comes from the primary vertex\n");
2914 printf(
"Reconstruct J/psi from B candidates with cuts:\n");
2918 printf(
"Reconstruct 3 prong candidates.\n");
2919 printf(
" D+->Kpipi cuts:\n");
2921 printf(
" Ds->KKpi cuts:\n");
2923 printf(
" Lc->pKpi cuts:\n");
2927 printf(
"Reconstruct 4 prong candidates.\n");
2928 printf(
" D0->Kpipipi cuts:\n");
2932 printf(
"Reconstruct cascade candidates formed with v0s.\n");
2933 printf(
" Lc -> k0s P & Lc -> L Pi cuts:\n");
2935 printf(
" D+ -> K0s pi cuts:\n");
2937 printf(
" Ds -> K0s K cuts:\n");
2950 AliESDVertex *vertexESD = 0;
2951 AliAODVertex *vertexAOD = 0;
2956 vertexESD = (AliESDVertex*)
fVertexerTracks->VertexForSelectedESDTracks(trkArray);
2958 if(!vertexESD)
return vertexAOD;
2960 if(vertexESD->GetNContributors()!=trkArray->GetEntriesFast()) {
2962 delete vertexESD; vertexESD=NULL;
2966 Double_t vertRadius2=vertexESD->GetX()*vertexESD->GetX()+vertexESD->GetY()*vertexESD->GetY();
2969 delete vertexESD; vertexESD=NULL;
2975 AliKFParticle::SetField(
fBzkG);
2977 AliKFVertex vertexKF;
2979 Int_t nTrks = trkArray->GetEntriesFast();
2980 for(
Int_t i=0; i<nTrks; i++) {
2981 AliESDtrack *esdTrack = (AliESDtrack*)trkArray->At(i);
2982 AliKFParticle daughterKF(*esdTrack,211);
2983 vertexKF.AddDaughter(daughterKF);
2985 vertexESD =
new AliESDVertex(vertexKF.Parameters(),
2986 vertexKF.CovarianceMatrix(),
2988 vertexKF.GetNContributors());
2994 vertexESD->GetXYZ(pos);
2995 vertexESD->GetCovMatrix(cov);
2996 chi2perNDF = vertexESD->GetChi2toNDF();
2997 dispersion = vertexESD->GetDispersion();
2998 delete vertexESD; vertexESD=NULL;
3000 Int_t nprongs= (useTRefArray ? 0 : trkArray->GetEntriesFast());
3001 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
3010 Int_t retval=kFALSE;
3013 for(
Int_t iTrack=0; iTrack<3; iTrack++){
3014 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
3015 track->GetPxPyPz(momentum);
3016 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
3028 Int_t retval=kFALSE;
3032 for(
Int_t iTrack=0; iTrack<4; iTrack++){
3033 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
3034 track->GetPxPyPz(momentum);
3035 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
3047 Int_t retval=kFALSE;
3051 for(
Int_t iTrack=0; iTrack<2; iTrack++){
3052 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
3053 track->GetPxPyPz(momentum);
3054 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
3074 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3079 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3084 pdg2[0]=211; pdg2[1]=321;
3086 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3090 pdg2[0]=321; pdg2[1]=211;
3092 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3113 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3118 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3124 pdg2[0]=11; pdg2[1]=11;
3126 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3149 fMassCalc3->SetPxPyPzProngs(nprongs,px,py,pz);
3157 if(
fMassCalc3->Pt2() < minPt*minPt)
return retval;
3162 pdg3[0]=211; pdg3[1]=321; pdg3[2]=211;
3164 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3172 pdg3[0]=321; pdg3[1]=321; pdg3[2]=211;
3174 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3178 pdg3[0]=211; pdg3[1]=321; pdg3[2]=321;
3180 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3189 pdg3[0]=2212; pdg3[1]=321; pdg3[2]=211;
3191 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3197 pdg3[0]=211; pdg3[1]=321; pdg3[2]=2212;
3199 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3222 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3227 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3229 pdg2[0]=211; pdg2[1]=421;
3234 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3257 fMassCalc4->SetPxPyPzProngs(nprongs,px,py,pz);
3262 if(
fMassCalc4->Pt2() < minPt*minPt)
return retval;
3268 pdg4[0]=321; pdg4[1]=211; pdg4[2]=211; pdg4[3]=211;
3270 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3275 pdg4[0]=211; pdg4[1]=321; pdg4[2]=211; pdg4[3]=211;
3277 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3282 pdg4[0]=211; pdg4[1]=211; pdg4[2]=321; pdg4[3]=211;
3284 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3289 pdg4[0]=211; pdg4[1]=211; pdg4[2]=211; pdg4[3]=321;
3291 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3312 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3315 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3324 pdg2[0] = 2212; pdg2[1] = 310;
3326 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3330 pdg2[0] = 211; pdg2[1] = 3122;
3332 if ((minv2>lolim*lolim) && (minv2<hilim*hilim)) {
3343 pdg2[0] = 211; pdg2[1] = 310;
3345 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3355 pdg2[0] = 321; pdg2[1] = 310;
3357 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3370 UChar_t *seleFlags,
Int_t *evtNumber)
3379 const AliVVertex *vprimary =
event->GetPrimaryVertex();
3387 const Int_t entries =
event->GetNumberOfTracks();
3388 AliCentrality* cent;
3391 fV1 =
new AliESDVertex(*((AliESDVertex*)vprimary));
3394 vprimary->GetXYZ(pos);
3395 vprimary->GetCovarianceMatrix(cov);
3396 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
3397 if(entries<=0)
return;
3399 memset(indices,0,
sizeof(
UShort_t)*entries);
3406 if(event->GetRunNumber()<244824){
3407 centperc=cent->GetCentralityPercentile(
"V0M");
3409 AliMultSelection *multSelection = (AliMultSelection * ) event->FindListObject(
"MultSelection");
3411 centperc=multSelection->GetMultiplicityPercentile(
"V0M");
3412 Int_t qual = multSelection->GetEvSelCode();
3413 if(qual == 199 ) centperc=0.1;
3416 Bool_t okDisplaced=kFALSE,okSoftPi=kFALSE,okFor3Prong=kFALSE,okBachelor=kFALSE;
3420 for(
Int_t i=0; i<entries; i++) {
3422 track = (AliVTrack*)event->GetTrack(i);
3425 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
3428 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
3432 if(track->GetID()<0)
continue;
3436 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
3440 AliAODTrack *aodt = (AliAODTrack*)track;
3441 if(aodt->GetUsedForPrimVtxFit()) {
3442 indices[nindices]=aodt->GetID(); nindices++;
3448 AliESDtrack *esdt = 0;
3451 esdt = (AliESDtrack*)track;
3453 esdt =
new AliESDtrack(track);
3457 okDisplaced=kFALSE; okSoftPi=kFALSE; okFor3Prong=kFALSE; okBachelor=kFALSE;
3459 evtNumber[i]=((AliMixedEvent*)event)->EventIndex(i);
3460 const AliVVertex* eventVtx=((AliMixedEvent*)event)->GetEventVertex(i);
3461 Double_t vtxPos[3],primPos[3],primCov[6],trasl[3];
3462 eventVtx->GetXYZ(vtxPos);
3463 vprimary->GetXYZ(primPos);
3464 eventVtx->GetCovarianceMatrix(primCov);
3465 for(
Int_t ind=0;ind<3;ind++){
3466 trasl[ind]=vtxPos[ind]-primPos[ind];
3469 Bool_t isTransl=esdt->Translate(trasl,primCov);
3477 if(
SingleTrkCuts(esdt,centperc,okDisplaced,okSoftPi,okFor3Prong,okBachelor) && nSeleTrks<trkEntries) {
3478 esdt->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
3479 seleTrksArray.AddLast(esdt);
3480 tracksAtVertex.AddLast(
new AliExternalTrackParam(*esdt));
3481 seleFlags[nSeleTrks]=0;
3482 if(okDisplaced) SETBIT(seleFlags[nSeleTrks],
kBitDispl);
3483 if(okFor3Prong) SETBIT(seleFlags[nSeleTrks],
kBit3Prong);
3484 if(okSoftPi) SETBIT(seleFlags[nSeleTrks],
kBitSoftPi);
3485 if(okBachelor) SETBIT(seleFlags[nSeleTrks],
kBitBachelor);
3493 if(nsigmatofPi>-990. && (nsigmatofPi<-fnSigmaTOFPionLow || nsigmatofPi>
fnSigmaTOFPionHi)){
3497 if(nsigmatofK>-990. && (nsigmatofK<-fnSigmaTOFKaonLow || nsigmatofK>
fnSigmaTOFKaonHi)){
3501 if(nsigmatofP>-990. && (nsigmatofP<-fnSigmaTOFProtonLow || nsigmatofP>
fnSigmaTOFProtonHi)){
3508 if(nsigmatpcPi>-990. && (nsigmatpcPi<-fnSigmaTPCPionLow || nsigmatpcPi>
fnSigmaTPCPionHi)){
3512 if(nsigmatpcK>-990. && (nsigmatpcK<-fnSigmaTPCKaonLow || nsigmatpcK>
fnSigmaTPCKaonHi)){
3516 if(nsigmatpcP>-990. && (nsigmatpcP<-fnSigmaTPCProtonLow || nsigmatpcP>
fnSigmaTPCProtonHi)){
3532 vprimary->GetXYZ(pos);
3533 vprimary->GetCovarianceMatrix(cov);
3534 Double_t chi2toNDF = vprimary->GetChi2perNDF();
3535 Int_t ncontr=nindices;
3536 if(!strcmp(vprimary->GetTitle(),
"VertexerTracksWithContraint")) ncontr += 1;
3538 fV1 =
new AliESDVertex(pos,cov,chi2,ncontr,vprimary->GetName());
3539 fV1->SetTitle(vprimary->GetTitle());
3540 fV1->SetIndices(nindices,indices);
3542 if(indices) {
delete [] indices; indices=NULL; }
3567 Bool_t &okBachelor)
const 3574 if (!trk->PropagateToDCA(
fV1,
fBzkG,kVeryBig))
return kFALSE;
3576 trk->RelateToVertex(
fV1,
fBzkG,kVeryBig);
3592 if(selectInfo) okDisplaced=kTRUE;
3606 if(selectInfo) okFor3Prong=kTRUE;
3613 if(selectInfo) okSoftPi=kTRUE;
3621 if(okDisplaced) selectInfo=1;
3624 if(selectInfo) okBachelor=kTRUE;
3626 if(okDisplaced || okSoftPi || okFor3Prong || okBachelor)
return kTRUE;
3641 Double_t vertex[3]; esdV0->GetXYZ(vertex[0],vertex[1],vertex[2]);
3642 AliAODVertex *vertexV0 =
new AliAODVertex(vertex,esdV0->GetChi2V0(),AliAODVertex::kV0,2);
3647 esdV0->PxPyPz(pxpypz);
3648 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
3649 AliNeutralTrackParam *trackesdV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
3656 trackesdV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3657 Double_t dcaV0ToPrimVertex = TMath::Sqrt(covd0z0[0]);
3659 Double_t dcaV0DaughterToPrimVertex[2];
3660 AliExternalTrackParam *posV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(0);
3661 AliExternalTrackParam *negV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(1);
3662 if( !posV0track || !negV0track) {
3663 if(trackesdV0) {
delete trackesdV0; trackesdV0=NULL;}
3665 delete primVertexAOD;
3668 posV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3671 dcaV0DaughterToPrimVertex[0] = TMath::Sqrt(covd0z0[0]);
3672 negV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3675 dcaV0DaughterToPrimVertex[1] = TMath::Sqrt(covd0z0[0]);
3676 Double_t dcaV0Daughters = esdV0->GetDcaV0Daughters();
3678 esdV0->GetNPxPyPz(nmom[0],nmom[1],nmom[2]);
3679 esdV0->GetPPxPyPz(pmom[0],pmom[1],pmom[2]);
3681 AliAODv0 *aodV0 =
new AliAODv0(vertexV0,dcaV0Daughters,dcaV0ToPrimVertex,pmom,nmom,dcaV0DaughterToPrimVertex);
3682 aodV0->SetOnFlyStatus(esdV0->GetOnFlyStatus());
3685 delete primVertexAOD;
3694 const Double_t *par=extpar->GetParameter();
3695 const Double_t *cov=extpar->GetCovariance();
3698 esdt->Set(x,alpha,par,cov);
3705 fMassDzero=TDatabasePDG::Instance()->GetParticle(421)->Mass();
3706 fMassDplus=TDatabasePDG::Instance()->GetParticle(411)->Mass();
3707 fMassDs=TDatabasePDG::Instance()->GetParticle(431)->Mass();
3708 fMassLambdaC=TDatabasePDG::Instance()->GetParticle(4122)->Mass();
3709 fMassDstar=TDatabasePDG::Instance()->GetParticle(413)->Mass();
3710 fMassJpsi=TDatabasePDG::Instance()->GetParticle(443)->Mass();
AliAODRecoDecay * fMassCalc4
for 3 prong
Bool_t fUsePidTag
upper momentum limit to apply TPC PID
void SetSelectionBit(Int_t i)
selection map
Bool_t CheckCutsConsistency()
void UnsetOwnSecondaryVtx()
void SetupPID(AliVEvent *event)
AliAnalysisFilter * fTrackFilterSoftPi
Track Filter for displaced vertices in PbPb central events (tighter cuts) for 3 prong (D+...
AliVertexerTracks * fVertexerTracks
Float_t GetMassCut(Int_t iPtBin=0) const
AliPIDResponse * fPidResponse
event mixing
AliRDHFCutsDstoK0sK * fCutsDstoK0sK
D+->Kpipi cuts.
AliAODVertex * ReconstructSecondaryVertex(TObjArray *trkArray, Double_t &dispersion, Bool_t useTRefArray=kTRUE) const
Double_t fnSigmaTOFPionHi
Low cut value on n. of sigmas for pi TOF PID.
Double_t fnSigmaTOFProtonHi
Low cut value on n. of sigmas for p TOF PID.
virtual void PrintAll() const
void UnsetOwnPrimaryVtx()
AliAODVertex * PrimaryVertex(const TObjArray *trkArray=0x0, AliVEvent *event=0x0) const
Double_t GetDist12toPrim() const
AliAnalysisFilter * fTrackFilter3prongCentral
Track Filter for displaced vertices in PbPb central events (tighter cuts) for 2 prong (D0->Kpi) ...
AliAnalysisVertexingHF & operator=(const AliAnalysisVertexingHF &source)
virtual void PrintAll() const
Float_t GetMassCut(Int_t iPtBin=0) const
AliRDHFCutsDstoKKpi * fCutsDstoKKpi
Ds->K0s+K.
Int_t IsD0FromDStarSelected(Double_t pt, TObject *obj, Int_t selectionLevel, AliAODEvent *aod) const
Bool_t fSecVtxWithKF
z componenent of field in kG
AliRDHFCutsLctopKpi * fCutsLctopKpi
Ds->KKpi cuts.
Bool_t fRmTrksFromPrimVtx
Bool_t SelectInvMassAndPt3prong(Double_t *px, Double_t *py, Double_t *pz, Int_t pidLcStatus=3)
Int_t fnTrksTotal
triplet fullfilling Lc inv mass selection
Double_t fnSigmaTOFProtonLow
High cut value on n. of sigmas for p TPC PID.
Bool_t fOKInvMassDplus
pair fullfilling Jpsi inv mass selection
Double_t fnSigmaTPCKaonLow
High cut value on n. of sigmas for pi TOF PID.
Bool_t SingleTrkCuts(AliESDtrack *trk, Float_t centralityperc, Bool_t &okDisplaced, Bool_t &okSoftPi, Bool_t &ok3prong, Bool_t &okBachelor) const
Bool_t FillRecoCand(AliVEvent *event, AliAODRecoDecayHF3Prong *rd3)
Bool_t fUseTPCPIDOnlyIfNoTOF
switch use/not use TOF PID
AliRDHFCutsD0toKpi * fCutsD0toKpi
Track Filter for bachelor.
Bool_t fMixEvent
Like-sign triplets.
virtual void DeleteRecoD()
Float_t GetMassCut(Int_t iPtBin=0) const
Bool_t fUseTOFPID
switch use/not use TPC PID
Bool_t fOKInvMassD0to4p
combination fullfilling D* inv mass selection
Bool_t fOKInvMassLc
triplet fullfilling Ds inv mass selection
Float_t GetMassCut(Int_t iPtBin=0) const
Int_t * fAODMap
map between index and ID for AOD tracks
Double_t fnSigmaTPCPionLow
flag to control usage of PID tagging
Bool_t FillRecoCasc(AliVEvent *event, AliAODRecoCascadeHF *rc, Bool_t isDStar, Bool_t recoSecVtx=kFALSE)
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *)
Bool_t fFindVertexForCascades
reconstruct a secondary vertex or assume it's from the primary vertex
Double_t fnSigmaTPCKaonHi
Low cut value on n. of sigmas for K TPC PID.
AliAODPidHF * GetPidHF() const
Bool_t fUseKaonPIDfor3Prong
PID response.
AliRDHFCutsDplustoK0spi * fCutsDplustoK0spi
J/psi->ee cuts.
AliRDHFCutsDplustoKpipi * fCutsDplustoKpipi
D+->K0s+pi.
AliRDHFCutsD0toKpipipi * fCutsD0toKpipipi
Lc –> v0 + bachelor cuts.
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Bool_t fLikeSign3prong
Like-sign pairs.
Bool_t SelectInvMassAndPtCascade(Double_t *px, Double_t *py, Double_t *pz)
AliAODRecoDecayHF4Prong * Make4Prong(TObjArray *fourTrackArray, AliVEvent *event, AliAODVertex *secVert, const AliAODVertex *vertexp1n1, const AliAODVertex *vertexp1n1p2, Double_t dcap1n1, Double_t dcap1n2, Double_t dcap2n1, Double_t dcap2n2, Bool_t &ok4Prong)
Class for cuts on AOD reconstructed D+->Kpipi.
Float_t GetDCACut(Int_t iPtBin=0) const
Double_t fnSigmaTPCProtonLow
High cut value on n. of sigmas for K TOF PID.
virtual ~AliAnalysisVertexingHF()
void SetParametersAtVertex(AliESDtrack *esdt, const AliExternalTrackParam *extpar) const
Float_t GetMassCut(Int_t iPtBin=0) const
Float_t GetDCACut(Int_t iPtBin=0) const
Double_t fMaxMomForTPCPid
use TPC PID only for tracks that without TOF
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Int_t GetIsFilled() const
Class for cuts on AOD reconstructed Ds->K0S+K.
Float_t GetMassCut(Int_t iPtBin=0) const
Float_t GetMassCut(Int_t iPtBin=0) const
AliAnalysisFilter * fTrackFilter2prongCentral
Track Filter for displaced vertices.
Double_t fnSigmaTOFKaonLow
High cut value on n. of sigmas for K TPC PID.
Bool_t fCascades
D*->D0pi.
Float_t fMaxCentPercentileForTightCuts
High cut value on n. of sigmas for p TOF PID.
AliAODTrack * GetBachelor() const
Bool_t fOKInvMassDstar
triplet fullfilling Lc inv mass selection
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel, AliAODEvent *aod)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Double_t fBzkG
vertexer, to compute secondary vertices
Float_t GetDCACut(Int_t iPtBin=0) const
Bool_t fUsePIDforLc2V0
PID for Lambdac: 0=no, 1=proton, 2=p and pi.
void SetProngIDs(Int_t nIDs, UShort_t *id)
Class for cuts on AOD reconstructed D+->K0S+pi.
virtual void PrintAll() const
UShort_t GetProngID(Int_t ip) const
Float_t GetMassCut(Int_t iPtBin=0) const
Bool_t fUseKaonPIDforDs
PID for Lambdac 2 V0: 0=no, 1=proton,.
Bool_t fUseTPCPID
Kaon PID usage for Ds.
Bool_t fOKInvMassLctoV0
4tracks fullfilling D0 inv mass selection
void SetPrimaryVtxRef(TObject *vtx)
primary vertex
Double_t GetDist23toPrim() const
void SetOwnPrimaryVtx(const AliAODVertex *vtx)
Bool_t fFindVertexForDstar
pointer to list of cuts for output file
Double_t fnSigmaTOFKaonHi
Low cut value on n. of sigmas for K TOF PID.
AliAODRecoDecay * fMassCalc2
to go faster in PbPb
Float_t GetDCACut(Int_t iPtBin=0) const
void FindCandidates(AliVEvent *event, TClonesArray *aodVerticesHFTClArr, TClonesArray *aodD0toKpiTClArr, TClonesArray *aodJPSItoEleTClArr, TClonesArray *aodCharm3ProngTClArr, TClonesArray *aodCharm4ProngTClArr, TClonesArray *aodDstarTClArr, TClonesArray *aodCascadesTClArr, TClonesArray *aodLikeSign2ProngTClArr, TClonesArray *aodLikeSign3ProngTClArr)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
void AddDaughterRefs(AliAODVertex *v, const AliVEvent *event, const TObjArray *trkArray) const
Bool_t PreSelect(TObject *obj, AliAODv0 *v0, AliVTrack *bachelorTrack)
Int_t fUsePIDforLc
Kaon PID usage for 3 prongs.
Bool_t IsEventSelected(AliVEvent *event)
Bool_t fLikeSign
cascades, Lc –> v0+track, D+ –> K0s+Pi, Ds –> K0s+K
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
void SetUsePID(Bool_t flag=kTRUE)
Bool_t fDstar
D0->Kpipipi.
virtual void PrintAll() const
Float_t GetDCACut(Int_t iPtBin=0) const
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
AliRDHFCutsJpsitoee * fCutsJpsitoee
D0->Kpi cuts.
Bool_t SelectInvMassAndPtJpsiee(Double_t *px, Double_t *py, Double_t *pz)
Bool_t fOKInvMassD0
for 4 prong
void Setd0errProngs(Int_t nprongs, Double_t *d0)
Bool_t fOKInvMassJpsi
pair fullfilling D0 inv mass selection
Bool_t SelectInvMassAndPtDstarD0pi(Double_t *px, Double_t *py, Double_t *pz)
Int_t fV0TypeForCascadeVertex
reconstruct a secondary vertex or assume it's from the primary vertex
Bool_t fJPSItoEle
D0->Kpi.
AliAnalysisFilter * fTrackFilterBachelor
Track Filter for D* soft pion.
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Bool_t GetIsUsePID() const
Bool_t fMassCutBeforeVertexing
Select which V0 type we want to use for the cascas.
Int_t fAODMapSize
input from AOD (kTRUE) or ESD (kFALSE)
void FixReferences(AliAODEvent *aod)
void SetSelectionBitForPID(AliRDHFCuts *cuts, AliAODRecoDecayHF *rd, Int_t bit)
AliAODRecoCascadeHF * MakeCascade(TObjArray *twoTrackArray, AliVEvent *event, AliAODVertex *secVert, AliAODRecoDecayHF2Prong *rd2Prong, Double_t dca, Bool_t &okDstar)
void SelectTracksAndCopyVertex(const AliVEvent *event, Int_t trkEntries, TObjArray &seleTrksArray, TObjArray &tracksAtVertex, Int_t &nSeleTrks, UChar_t *seleFlags, Int_t *evtNumber)
void SetSigmaVert(Double_t sigmaVert)
Bool_t fRecoPrimVtxSkippingTrks
if kTRUE use KF vertexer, else AliVertexerTracks
AliAODRecoDecay * fMassCalc3
for 2 prong
TList * fListOfCuts
Dstar->D0pi cuts.
Bool_t RecoSecondaryVertexForCascades(AliVEvent *event, AliAODRecoCascadeHF *rc)
Float_t GetMassCut(Int_t iPtBin=0) const
Double_t fnSigmaTPCProtonHi
Low cut value on n. of sigmas for p TPC PID.
Double_t GetMinPtCandidate() const
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Float_t GetMassCut(Int_t iPtBin=0) const
AliRDHFCutsLctoV0 * fCutsLctoV0
Lc->pKpi cuts.
Float_t GetDCACut(Int_t iPtBin=0) const
void MapAODtracks(AliVEvent *aod)
AliAODRecoDecayHF3Prong * Make3Prong(TObjArray *threeTrackArray, AliVEvent *event, AliAODVertex *secVert, Double_t dispersion, const AliAODVertex *vertexp1n1, const AliAODVertex *vertexp2n1, Double_t dcap1n1, Double_t dcap2n1, Double_t dcap1p2, Bool_t useForLc, Bool_t useForDs, Bool_t &ok3Prong)
AliRDHFCutsDStartoKpipi * fCutsDStartoKpipi
D0->Kpipipi cuts.
AliAnalysisFilter * fTrackFilter
max. centrality percentile for using tight cuts
Float_t GetDCACut(Int_t iPtBin=0) const
Bool_t SelectInvMassAndPtD0Kpi(Double_t *px, Double_t *py, Double_t *pz)
Bool_t GetUsePID(Int_t iPtBin=0) const
AliAODv0 * TransformESDv0toAODv0(AliESDv0 *esdv0, TObjArray *twoTrackArrayV0)
Bool_t SelectInvMassAndPt4prong(Double_t *px, Double_t *py, Double_t *pz)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Double_t fnSigmaTPCPionHi
Low cut value on n. of sigmas for pi TPC PID.
Bool_t fD0toKpi
primary vertex
Bool_t fOKInvMassDs
triplet fullfilling D+ inv mass selection
void SetIsFilled(Int_t filled)
void AddRefs(AliAODVertex *v, AliAODRecoDecayHF *rd, const AliVEvent *event, const TObjArray *trkArray) const
AliAODRecoDecayHF2Prong * Make2Prong(TObjArray *twoTrackArray1, AliVEvent *event, AliAODVertex *secVert, Double_t dcap1n1, Bool_t &okD0, Bool_t &okJPSI, Bool_t &okD0fromDstar, Bool_t refill=kFALSE, AliAODRecoDecayHF2Prong *rd=0x0)
Double_t fnSigmaTOFPionLow
High cut value on n. of sigmas for pi TPC PID.