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"
63 #include "AliAnalysisFilter.h"
65 #include "AliMixedEvent.h"
68 #include "AliCodeTimer.h"
69 #include "AliMultSelection.h"
83 fSecVtxWithKF(kFALSE),
84 fRecoPrimVtxSkippingTrks(kFALSE),
85 fRmTrksFromPrimVtx(kFALSE),
94 fLikeSign3prong(kFALSE),
97 fUseKaonPIDfor3Prong(kFALSE),
100 fUseKaonPIDforDs(kFALSE),
103 fUseTPCPIDOnlyIfNoTOF(kFALSE),
104 fMaxMomForTPCPid(1.),
106 fnSigmaTPCPionLow(5.),
107 fnSigmaTPCPionHi(5.),
108 fnSigmaTOFPionLow(5.),
109 fnSigmaTOFPionHi(5.),
110 fnSigmaTPCKaonLow(5.),
111 fnSigmaTPCKaonHi(5.),
112 fnSigmaTOFKaonLow(5.),
113 fnSigmaTOFKaonHi(5.),
114 fnSigmaTPCProtonLow(5.),
115 fnSigmaTPCProtonHi(5.),
116 fnSigmaTOFProtonLow(5.),
117 fnSigmaTOFProtonHi(5.),
118 fMaxCentPercentileForTightCuts(-9999),
120 fTrackFilter2prongCentral(0x0),
121 fTrackFilter3prongCentral(0x0),
122 fTrackFilterSoftPi(0x0),
123 fTrackFilterBachelor(0x0),
126 fCutsDplustoKpipi(0x0),
130 fCutsD0toKpipipi(0x0),
131 fCutsDStartoKpipi(0x0),
133 fFindVertexForDstar(kTRUE),
134 fFindVertexForCascades(kTRUE),
135 fV0TypeForCascadeVertex(0),
136 fMassCutBeforeVertexing(kFALSE),
140 fOKInvMassD0(kFALSE),
141 fOKInvMassJpsi(kFALSE),
142 fOKInvMassDplus(kFALSE),
143 fOKInvMassDs(kFALSE),
144 fOKInvMassLc(kFALSE),
145 fOKInvMassDstar(kFALSE),
146 fOKInvMassD0to4p(kFALSE),
147 fOKInvMassLctoV0(kFALSE),
150 fMakeReducedRHF(kFALSE),
163 fMassCalc2 =
new AliAODRecoDecay(0x0,2,0,d02);
164 fMassCalc3 =
new AliAODRecoDecay(0x0,3,1,d03);
165 fMassCalc4 =
new AliAODRecoDecay(0x0,4,0,d04);
171 fInputAOD(source.fInputAOD),
172 fAODMapSize(source.fAODMapSize),
173 fAODMap(source.fAODMap),
174 fVertexerTracks(source.fVertexerTracks),
176 fSecVtxWithKF(source.fSecVtxWithKF),
177 fRecoPrimVtxSkippingTrks(source.fRecoPrimVtxSkippingTrks),
178 fRmTrksFromPrimVtx(source.fRmTrksFromPrimVtx),
180 fD0toKpi(source.fD0toKpi),
181 fJPSItoEle(source.fJPSItoEle),
182 f3Prong(source.f3Prong),
183 f4Prong(source.f4Prong),
184 fDstar(source.fDstar),
185 fCascades(source.fCascades),
186 fLikeSign(source.fLikeSign),
187 fLikeSign3prong(source.fLikeSign3prong),
188 fMixEvent(source.fMixEvent),
189 fPidResponse(source.fPidResponse),
190 fUseKaonPIDfor3Prong(source.fUseKaonPIDfor3Prong),
191 fUsePIDforLc(source.fUsePIDforLc),
192 fUsePIDforLc2V0(source.fUsePIDforLc2V0),
193 fUseKaonPIDforDs(source.fUseKaonPIDforDs),
194 fUseTPCPID(source.fUseTPCPID),
195 fUseTOFPID(source.fUseTOFPID),
196 fUseTPCPIDOnlyIfNoTOF(source.fUseTPCPIDOnlyIfNoTOF),
197 fMaxMomForTPCPid(source.fMaxMomForTPCPid),
198 fUsePidTag(source.fUsePidTag),
199 fnSigmaTPCPionLow(source.fnSigmaTPCPionLow),
200 fnSigmaTPCPionHi(source.fnSigmaTPCPionHi),
201 fnSigmaTOFPionLow(source.fnSigmaTOFPionLow),
202 fnSigmaTOFPionHi(source.fnSigmaTOFPionHi),
203 fnSigmaTPCKaonLow(source.fnSigmaTPCKaonLow),
204 fnSigmaTPCKaonHi(source.fnSigmaTPCKaonHi),
205 fnSigmaTOFKaonLow(source.fnSigmaTOFKaonLow),
206 fnSigmaTOFKaonHi(source.fnSigmaTOFKaonHi),
207 fnSigmaTPCProtonLow(source.fnSigmaTPCProtonLow),
208 fnSigmaTPCProtonHi(source.fnSigmaTPCProtonHi),
209 fnSigmaTOFProtonLow(source.fnSigmaTOFProtonLow),
210 fnSigmaTOFProtonHi(source.fnSigmaTOFProtonHi),
211 fMaxCentPercentileForTightCuts(source.fMaxCentPercentileForTightCuts),
212 fTrackFilter(source.fTrackFilter),
213 fTrackFilter2prongCentral(source.fTrackFilter2prongCentral),
214 fTrackFilter3prongCentral(source.fTrackFilter3prongCentral),
215 fTrackFilterSoftPi(source.fTrackFilterSoftPi),
216 fTrackFilterBachelor(source.fTrackFilterBachelor),
217 fCutsD0toKpi(source.fCutsD0toKpi),
218 fCutsJpsitoee(source.fCutsJpsitoee),
219 fCutsDplustoKpipi(source.fCutsDplustoKpipi),
220 fCutsDstoKKpi(source.fCutsDstoKKpi),
221 fCutsLctopKpi(source.fCutsLctopKpi),
222 fCutsLctoV0(source.fCutsLctoV0),
223 fCutsD0toKpipipi(source.fCutsD0toKpipipi),
224 fCutsDStartoKpipi(source.fCutsDStartoKpipi),
225 fListOfCuts(source.fListOfCuts),
226 fFindVertexForDstar(source.fFindVertexForDstar),
227 fFindVertexForCascades(source.fFindVertexForCascades),
228 fV0TypeForCascadeVertex(source.fV0TypeForCascadeVertex),
229 fMassCutBeforeVertexing(source.fMassCutBeforeVertexing),
230 fMassCalc2(source.fMassCalc2),
231 fMassCalc3(source.fMassCalc3),
232 fMassCalc4(source.fMassCalc4),
233 fOKInvMassD0(source.fOKInvMassD0),
234 fOKInvMassJpsi(source.fOKInvMassJpsi),
235 fOKInvMassDplus(source.fOKInvMassDplus),
236 fOKInvMassDs(source.fOKInvMassDs),
237 fOKInvMassLc(source.fOKInvMassLc),
238 fOKInvMassDstar(source.fOKInvMassDstar),
239 fOKInvMassD0to4p(source.fOKInvMassD0to4p),
240 fOKInvMassLctoV0(source.fOKInvMassLctoV0),
243 fMakeReducedRHF(kFALSE),
244 fMassDzero(source.fMassDzero),
245 fMassDplus(source.fMassDplus),
246 fMassDs(source.fMassDs),
247 fMassLambdaC(source.fMassLambdaC),
248 fMassDstar(source.fMassDstar),
249 fMassJpsi(source.fMassJpsi)
261 if(&source ==
this)
return *
this;
371 list->SetName(
"ListOfCuts");
375 list->Add(cutsD0toKpi);
379 list->Add(cutsJpsitoee);
383 list->Add(cutsDplustoKpipi);
387 list->Add(cutsDstoKKpi);
391 list->Add(cutsLctopKpi);
395 list->Add(cutsLctoV0);
399 list->Add(cutsD0toKpipipi);
403 list->Add(cutsDStartoKpipi);
408 if (bCutsOk == kFALSE) {AliFatal(
"AliAnalysisVertexingHF::FillListOfCuts vertexing and the analysis task cuts are not consistent!");}
417 TClonesArray *aodVerticesHFTClArr,
418 TClonesArray *aodD0toKpiTClArr,
419 TClonesArray *aodJPSItoEleTClArr,
420 TClonesArray *aodCharm3ProngTClArr,
421 TClonesArray *aodCharm4ProngTClArr,
422 TClonesArray *aodDstarTClArr,
423 TClonesArray *aodCascadesTClArr,
424 TClonesArray *aodLikeSign2ProngTClArr,
425 TClonesArray *aodLikeSign3ProngTClArr)
433 TString evtype =
event->IsA()->GetName();
434 fInputAOD = ((evtype==
"AliAODEvent") ? kTRUE : kFALSE);
438 AliDebug(2,
"Creating HF candidates from AOD");
440 AliDebug(2,
"Creating HF candidates from ESD");
443 if(!aodVerticesHFTClArr) {
444 printf(
"ERROR: no aodVerticesHFTClArr");
448 printf(
"ERROR: no aodD0toKpiTClArr");
452 printf(
"ERROR: no aodJPSItoEleTClArr");
455 if(
f3Prong && !aodCharm3ProngTClArr) {
456 printf(
"ERROR: no aodCharm3ProngTClArr");
459 if(
f4Prong && !aodCharm4ProngTClArr) {
460 printf(
"ERROR: no aodCharm4ProngTClArr");
463 if(
fDstar && !aodDstarTClArr) {
464 printf(
"ERROR: no aodDstarTClArr");
468 printf(
"ERROR: no aodCascadesTClArr ");
471 if(
fLikeSign && !aodLikeSign2ProngTClArr) {
472 printf(
"ERROR: no aodLikeSign2ProngTClArr");
476 printf(
"ERROR: no aodLikeSign3ProngTClArr");
481 Int_t iVerticesHF=0,iD0toKpi=0,iJPSItoEle=0,i3Prong=0,i4Prong=0,iDstar=0,iCascades=0,iLikeSign2Prong=0,iLikeSign3Prong=0;
482 aodVerticesHFTClArr->Delete();
483 iVerticesHF = aodVerticesHFTClArr->GetEntriesFast();
484 TClonesArray &verticesHFRef = *aodVerticesHFTClArr;
486 aodD0toKpiTClArr->Delete();
487 iD0toKpi = aodD0toKpiTClArr->GetEntriesFast();
490 aodJPSItoEleTClArr->Delete();
491 iJPSItoEle = aodJPSItoEleTClArr->GetEntriesFast();
494 aodCharm3ProngTClArr->Delete();
495 i3Prong = aodCharm3ProngTClArr->GetEntriesFast();
498 aodCharm4ProngTClArr->Delete();
499 i4Prong = aodCharm4ProngTClArr->GetEntriesFast();
502 aodDstarTClArr->Delete();
503 iDstar = aodDstarTClArr->GetEntriesFast();
506 aodCascadesTClArr->Delete();
507 iCascades = aodCascadesTClArr->GetEntriesFast();
510 aodLikeSign2ProngTClArr->Delete();
511 iLikeSign2Prong = aodLikeSign2ProngTClArr->GetEntriesFast();
514 aodLikeSign3ProngTClArr->Delete();
515 iLikeSign3Prong = aodLikeSign3ProngTClArr->GetEntriesFast();
518 TClonesArray &aodD0toKpiRef = *aodD0toKpiTClArr;
519 TClonesArray &aodJPSItoEleRef = *aodJPSItoEleTClArr;
520 TClonesArray &aodCharm3ProngRef = *aodCharm3ProngTClArr;
521 TClonesArray &aodCharm4ProngRef = *aodCharm4ProngTClArr;
522 TClonesArray &aodDstarRef = *aodDstarTClArr;
523 TClonesArray &aodCascadesRef = *aodCascadesTClArr;
524 TClonesArray &aodLikeSign2ProngRef = *aodLikeSign2ProngTClArr;
525 TClonesArray &aodLikeSign3ProngRef = *aodLikeSign3ProngTClArr;
533 Int_t iTrkP1,iTrkP2,iTrkN1,iTrkN2,iTrkSoftPi,trkEntries,iv0,nv0;
534 Double_t xdummy,ydummy,dcap1n1,dcap1n2,dcap2n1,dcap1p2,dcan1n2,dcap2n2,dcaV0,dcaCasc;
535 Bool_t okD0=kFALSE,okJPSI=kFALSE,ok3Prong=kFALSE,ok4Prong=kFALSE;
536 Bool_t okDstar=kFALSE,okD0fromDstar=kFALSE;
538 AliESDtrack *postrack1 = 0;
539 AliESDtrack *postrack2 = 0;
540 AliESDtrack *negtrack1 = 0;
541 AliESDtrack *negtrack2 = 0;
542 AliESDtrack *trackPi = 0;
543 Double_t mompos1[3],mompos2[3],momneg1[3],momneg2[3];
554 AliDebug(2,Form(
" dca cut set to %f cm",dcaMax));
566 trkEntries = (
Int_t)event->GetNumberOfTracks();
567 AliDebug(1,Form(
" Number of tracks: %d",trkEntries));
570 nv0 = (
Int_t)event->GetNumberOfV0s();
571 AliDebug(1,Form(
" Number of V0s: %d",nv0));
573 if( trkEntries<2 && (trkEntries<1 || nv0<1) ) {
574 AliDebug(1,Form(
" Not enough tracks: %d",trkEntries));
593 UChar_t *seleFlags =
new UChar_t[trkEntries];
598 AliDebug(1,Form(
" Selected tracks: %d",nSeleTrks));
610 Bool_t isLikeSign2Prong=kFALSE,isLikeSign3Prong=kFALSE;
620 for(iTrkP1=0; iTrkP1<nSeleTrks; iTrkP1++) {
626 postrack1 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkP1);
627 postrack1->GetPxPyPz(mompos1);
633 for(iv0=0; iv0<nv0; iv0++){
636 if ( !TESTBIT(seleFlags[iTrkP1],
kBitBachelor) )
continue;
645 if ( (!v0 || !v0->IsA()->InheritsFrom(
"AliAODv0") ) &&
646 (!esdV0 || !esdV0->IsA()->InheritsFrom(
"AliESDv0") ) )
continue;
657 AliExternalTrackParam * posV0track;
658 AliExternalTrackParam * negV0track;
661 AliAODTrack *posVV0track = (AliAODTrack*)(v0->GetDaughter(0));
662 AliAODTrack *negVV0track = (AliAODTrack*)(v0->GetDaughter(1));
663 if( !posVV0track || !negVV0track )
continue;
668 if (posVV0track->GetID() == postrack1->GetID() ||
669 negVV0track->GetID() == postrack1->GetID())
continue;
671 if ( posVV0track->Charge() == negVV0track->Charge() )
continue;
673 if(!(posVV0track->GetStatus() & AliESDtrack::kTPCrefit) ||
674 !(negVV0track->GetStatus() & AliESDtrack::kTPCrefit))
continue;
677 posVV0track->PxPyPz(pxpypz); posVV0track->XvYvZv(xyz);
678 posVV0track->GetCovarianceXYZPxPyPz(cv); sign=posVV0track->Charge();
679 posV0track =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
680 negVV0track->PxPyPz(pxpypz); negVV0track->XvYvZv(xyz);
681 negVV0track->GetCovarianceXYZPxPyPz(cv); sign=negVV0track->Charge();
682 negV0track =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
684 AliESDtrack *posVV0track = (AliESDtrack*)(event->GetTrack( esdV0->GetPindex() ));
685 AliESDtrack *negVV0track = (AliESDtrack*)(event->GetTrack( esdV0->GetNindex() ));
686 if( !posVV0track || !negVV0track )
continue;
691 if (posVV0track->GetID() == postrack1->GetID() ||
692 negVV0track->GetID() == postrack1->GetID())
continue;
694 if ( posVV0track->Charge() == negVV0track->Charge() )
continue;
696 if(!(posVV0track->GetStatus() & AliESDtrack::kTPCrefit) ||
697 !(negVV0track->GetStatus() & AliESDtrack::kTPCrefit))
continue;
699 if (posVV0track->GetKinkIndex(0)>0 || negVV0track->GetKinkIndex(0)>0)
continue;
701 posV0track =
new AliExternalTrackParam(*posVV0track);
702 negV0track =
new AliExternalTrackParam(*negVV0track);
707 if( !posV0track || !negV0track ){
708 AliDebug(1,Form(
" Couldn't get the V0 daughters"));
713 twoTrackArrayV0->AddAt(posV0track,0);
714 twoTrackArrayV0->AddAt(negV0track,1);
717 dcaV0 = v0->DcaV0Daughters();
720 AliNeutralTrackParam *trackV0=NULL;
722 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
723 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
727 esdV0->PxPyPz(pxpypz);
728 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
729 trackV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
734 twoTrackArrayCasc->AddAt(postrack1,0);
735 twoTrackArrayCasc->AddAt(trackV0,1);
737 AliAODVertex *vertexCasc = 0;
740 dcaCasc = postrack1->GetDCA(trackV0,
fBzkG,xdummy,ydummy);
747 fV1->GetCovMatrix(cov);
748 chi2perNDF =
fV1->GetChi2toNDF();
749 vertexCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
753 delete posV0track; posV0track=NULL;
754 delete negV0track; negV0track=NULL;
755 delete trackV0; trackV0=NULL;
757 twoTrackArrayV0->Clear();
758 twoTrackArrayCasc->Clear();
763 ioCascade =
MakeCascade(twoTrackArrayCasc,event,vertexCasc,v0,dcaCasc,okCascades);
764 if(okCascades && ioCascade) {
773 AliAODVertex *vCasc =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexCasc);
774 rc->SetSecondaryVtx(vCasc);
775 vCasc->SetParent(rc);
777 AddRefs(vCasc,rc,event,twoTrackArrayCasc);
778 vCasc->AddDaughter(v0);
785 delete posV0track; posV0track=NULL;
786 delete negV0track; negV0track=NULL;
787 delete trackV0; trackV0=NULL;
788 twoTrackArrayV0->Clear();
789 twoTrackArrayCasc->Clear();
790 if(ioCascade) {
delete ioCascade; ioCascade=NULL; }
791 if(vertexCasc) {
delete vertexCasc; vertexCasc=NULL; }
802 AliDebug(1,Form(
" Not enough tracks: %d",trkEntries));
806 if(!TESTBIT(seleFlags[iTrkP1],
kBitDispl))
continue;
807 if(postrack1->Charge()<0 && !
fLikeSign)
continue;
810 for(iTrkN1=0; iTrkN1<nSeleTrks; iTrkN1++) {
815 if(iTrkN1==iTrkP1)
continue;
818 negtrack1 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN1);
820 if(negtrack1->Charge()>0 && !
fLikeSign)
continue;
822 if(!TESTBIT(seleFlags[iTrkN1],
kBitDispl))
continue;
825 if(evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
828 if(postrack1->Charge()==negtrack1->Charge()) {
829 isLikeSign2Prong=kTRUE;
831 if(iTrkN1<iTrkP1)
continue;
833 isLikeSign2Prong=kFALSE;
834 if(postrack1->Charge()<0 || negtrack1->Charge()>0)
continue;
836 if(evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
846 negtrack1->GetPxPyPz(momneg1);
849 dcap1n1 = postrack1->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
850 if(dcap1n1>dcaMax) { negtrack1=0;
continue; }
853 twoTrackArray1->AddAt(postrack1,0);
854 twoTrackArray1->AddAt(negtrack1,1);
857 twoTrackArray1->Clear();
864 io2Prong =
Make2Prong(twoTrackArray1,event,vertexp1n1,dcap1n1,okD0,okJPSI,okD0fromDstar);
866 if((
fD0toKpi && okD0) || (
fJPSItoEle && okJPSI) || (isLikeSign2Prong && (okD0 || okJPSI))) {
868 AliAODVertex *v2Prong =0x0;
869 if(!
fMakeReducedRHF)v2Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexp1n1);
870 if(!isLikeSign2Prong) {
879 rd->SetSecondaryVtx(v2Prong);
880 v2Prong->SetParent(rd);
881 AddRefs(v2Prong,rd,event,twoTrackArray1);
890 if(!okD0) v2Prong->SetParent(rd);
891 AddRefs(v2Prong,rd,event,twoTrackArray1);
902 rd->SetSecondaryVtx(v2Prong);
903 v2Prong->SetParent(rd);
904 AddRefs(v2Prong,rd,event,twoTrackArray1);
909 if(
fDstar && okD0fromDstar && !isLikeSign2Prong) {
914 vertexp1n1->AddDaughter(postrack1);
915 vertexp1n1->AddDaughter(negtrack1);
917 io2Prong->SetSecondaryVtx(vertexp1n1);
920 AliNeutralTrackParam *trackD0 =
new AliNeutralTrackParam(io2Prong);
923 for(iTrkSoftPi=0; iTrkSoftPi<nSeleTrks; iTrkSoftPi++) {
925 if(iTrkSoftPi==iTrkP1 || iTrkSoftPi==iTrkN1)
continue;
927 if(!TESTBIT(seleFlags[iTrkSoftPi],
kBitSoftPi))
continue;
930 if(evtNumber[iTrkP1]==evtNumber[iTrkSoftPi] ||
931 evtNumber[iTrkN1]==evtNumber[iTrkSoftPi] ||
932 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
937 trackD0->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
938 if(trackD0->GetSigmaY2()<0. || trackD0->GetSigmaZ2()<0.)
continue;
941 trackPi = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkSoftPi);
944 twoTrackArrayCasc->AddAt(trackPi,0);
945 twoTrackArrayCasc->AddAt(trackD0,1);
947 twoTrackArrayCasc->Clear();
952 AliAODVertex *vertexCasc = 0;
956 dcaCasc = trackPi->GetDCA(trackD0,
fBzkG,xdummy,ydummy);
963 fV1->GetCovMatrix(cov);
964 chi2perNDF =
fV1->GetChi2toNDF();
965 vertexCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
969 twoTrackArrayCasc->Clear();
974 ioCascade =
MakeCascade(twoTrackArrayCasc,event,vertexCasc,io2Prong,dcaCasc,okDstar);
983 AliAODVertex *v2Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*vertexp1n1);
984 rd->SetSecondaryVtx(v2Prong);
985 v2Prong->SetParent(rd);
986 AddRefs(v2Prong,rd,event,twoTrackArray1);
994 AliAODVertex *vCasc = 0x0;
1002 AliAODVertex *vCasc =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexCasc);
1003 rc->SetSecondaryVtx(vCasc);
1004 vCasc->SetParent(rc);
1006 AddRefs(vCasc,rc,event,twoTrackArrayCasc);
1007 vCasc->AddDaughter(rd);
1010 twoTrackArrayCasc->Clear();
1012 if(ioCascade) {
delete ioCascade; ioCascade=NULL;}
1013 delete vertexCasc; vertexCasc=NULL;
1016 if(trackD0) {
delete trackD0; trackD0=NULL;}
1019 if(io2Prong) {
delete io2Prong; io2Prong=NULL;}
1022 twoTrackArray1->Clear();
1024 (isLikeSign2Prong && !
f3Prong) ) {
1032 for(iTrkP2=iTrkP1+1; iTrkP2<nSeleTrks; iTrkP2++) {
1034 if(iTrkP2==iTrkP1 || iTrkP2==iTrkN1)
continue;
1039 postrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkP2);
1041 if(postrack2->Charge()<0)
continue;
1043 if(!TESTBIT(seleFlags[iTrkP2],
kBitDispl))
continue;
1046 if(!TESTBIT(seleFlags[iTrkP2],
kBit3Prong))
continue;
1047 if(!TESTBIT(seleFlags[iTrkP1],
kBit3Prong))
continue;
1048 if(!TESTBIT(seleFlags[iTrkN1],
kBit3Prong))
continue;
1051 if(evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1052 evtNumber[iTrkN1]==evtNumber[iTrkP2] ||
1053 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1056 if(isLikeSign2Prong) {
1058 if(postrack1->Charge()>0) {
1059 isLikeSign3Prong=kTRUE;
1064 isLikeSign3Prong=kFALSE;
1066 if(evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1067 evtNumber[iTrkN1]==evtNumber[iTrkP2] ||
1068 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1075 Bool_t okForLcTopKpi=kTRUE;
1076 Int_t pidLcStatus=3;
1080 okForLcTopKpi=kFALSE;
1084 okForLcTopKpi=kFALSE;
1088 okForLcTopKpi=kTRUE;
1093 okForLcTopKpi=kTRUE;
1098 Bool_t okForDsToKKpi=kTRUE;
1101 !TESTBIT(seleFlags[iTrkP2],
kBitKaonCompat) ) okForDsToKKpi=kFALSE;
1113 dcap2n1 = postrack2->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1114 if(dcap2n1>dcaMax) { postrack2=0;
continue; }
1115 dcap1p2 = postrack2->GetDCA(postrack1,
fBzkG,xdummy,ydummy);
1116 if(dcap1p2>dcaMax) { postrack2=0;
continue; }
1121 if(postrack2->Charge()>0) {
1122 threeTrackArray->AddAt(postrack1,0);
1123 threeTrackArray->AddAt(negtrack1,1);
1124 threeTrackArray->AddAt(postrack2,2);
1126 threeTrackArray->AddAt(negtrack1,0);
1127 threeTrackArray->AddAt(postrack1,1);
1128 threeTrackArray->AddAt(postrack2,2);
1131 postrack2->GetPxPyPz(mompos2);
1132 Double_t pxDau[3]={mompos1[0],momneg1[0],mompos2[0]};
1133 Double_t pyDau[3]={mompos1[1],momneg1[1],mompos2[1]};
1134 Double_t pzDau[3]={mompos1[2],momneg1[2],mompos2[2]};
1141 threeTrackArray->Clear();
1149 twoTrackArray2->AddAt(postrack2,0);
1150 twoTrackArray2->AddAt(negtrack1,1);
1153 twoTrackArray2->Clear();
1162 io3Prong =
Make3Prong(threeTrackArray,event,secVert3PrAOD,dispersion,vertexp1n1,vertexp2n1,dcap1n1,dcap2n1,dcap1p2,okForLcTopKpi,okForDsToKKpi,ok3Prong);
1164 AliAODVertex *v3Prong=0x0;
1165 if(!
fMakeReducedRHF)v3Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1166 if(!isLikeSign3Prong) {
1176 v3Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1177 rd->SetSecondaryVtx(v3Prong);
1178 v3Prong->SetParent(rd);
1179 AddRefs(v3Prong,rd,event,threeTrackArray);
1192 rd->SetSecondaryVtx(v3Prong);
1193 v3Prong->SetParent(rd);
1194 AddRefs(v3Prong,rd,event,threeTrackArray);
1200 if(io3Prong) {
delete io3Prong; io3Prong=NULL;}
1201 if(secVert3PrAOD) {
delete secVert3PrAOD; secVert3PrAOD=NULL;}
1207 && !isLikeSign2Prong && !isLikeSign3Prong
1209 && dcap1n1 < fCutsD0toKpipipi->GetDCACut()
1210 && dcap2n1 < fCutsD0toKpipipi->GetDCACut()) {
1220 threeTrackArray->AddAt(postrack1,0);
1221 threeTrackArray->AddAt(negtrack1,1);
1222 threeTrackArray->AddAt(postrack2,2);
1226 for(iTrkN2=iTrkN1+1; iTrkN2<nSeleTrks; iTrkN2++) {
1228 if(iTrkN2==iTrkP1 || iTrkN2==iTrkP2 || iTrkN2==iTrkN1)
continue;
1233 negtrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN2);
1235 if(negtrack2->Charge()>0)
continue;
1237 if(!TESTBIT(seleFlags[iTrkN2],
kBitDispl))
continue;
1239 if(evtNumber[iTrkP1]==evtNumber[iTrkN2] ||
1240 evtNumber[iTrkN1]==evtNumber[iTrkN2] ||
1241 evtNumber[iTrkP2]==evtNumber[iTrkN2] ||
1242 evtNumber[iTrkP1]==evtNumber[iTrkN1] ||
1243 evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1244 evtNumber[iTrkN1]==evtNumber[iTrkP2])
continue;
1257 dcap1n2 = postrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1259 dcap2n2 = postrack2->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1263 fourTrackArray->AddAt(postrack1,0);
1264 fourTrackArray->AddAt(negtrack1,1);
1265 fourTrackArray->AddAt(postrack2,2);
1266 fourTrackArray->AddAt(negtrack2,3);
1274 fourTrackArray->Clear();
1281 io4Prong =
Make4Prong(fourTrackArray,event,secVert4PrAOD,vertexp1n1,vertexp1n1p2,dcap1n1,dcap1n2,dcap2n1,dcap2n2,ok4Prong);
1288 AliAODVertex *v4Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*secVert4PrAOD);
1289 rd->SetSecondaryVtx(v4Prong);
1290 v4Prong->SetParent(rd);
1291 AddRefs(v4Prong,rd,event,fourTrackArray);
1295 if(io4Prong) {
delete io4Prong; io4Prong=NULL;}
1296 if(secVert4PrAOD) {
delete secVert4PrAOD; secVert4PrAOD=NULL;}
1297 fourTrackArray->Clear();
1302 threeTrackArray->Clear();
1303 delete vertexp1n1p2;
1312 twoTrackArray2->Clear();
1315 for(iTrkN2=iTrkN1+1; iTrkN2<nSeleTrks; iTrkN2++) {
1317 if(iTrkN2==iTrkP1 || iTrkN2==iTrkP2 || iTrkN2==iTrkN1)
continue;
1322 negtrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN2);
1324 if(negtrack2->Charge()>0)
continue;
1326 if(!TESTBIT(seleFlags[iTrkN2],
kBitDispl))
continue;
1329 if(!TESTBIT(seleFlags[iTrkN2],
kBit3Prong))
continue;
1330 if(!TESTBIT(seleFlags[iTrkP1],
kBit3Prong))
continue;
1331 if(!TESTBIT(seleFlags[iTrkN1],
kBit3Prong))
continue;
1334 if(evtNumber[iTrkP1]==evtNumber[iTrkN2] ||
1335 evtNumber[iTrkN1]==evtNumber[iTrkN2] ||
1336 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1339 if(isLikeSign2Prong) {
1341 if(postrack1->Charge()<0) {
1342 isLikeSign3Prong=kTRUE;
1347 isLikeSign3Prong=kFALSE;
1353 Bool_t okForLcTopKpi=kTRUE;
1354 Int_t pidLcStatus=3;
1358 okForLcTopKpi=kFALSE;
1362 okForLcTopKpi=kFALSE;
1366 okForLcTopKpi=kTRUE;
1371 okForLcTopKpi=kTRUE;
1376 Bool_t okForDsToKKpi=kTRUE;
1379 !TESTBIT(seleFlags[iTrkN2],
kBitKaonCompat) ) okForDsToKKpi=kFALSE;
1391 dcap1n2 = postrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1392 if(dcap1n2>dcaMax) { negtrack2=0;
continue; }
1393 dcan1n2 = negtrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1394 if(dcan1n2>dcaMax) { negtrack2=0;
continue; }
1396 threeTrackArray->AddAt(negtrack1,0);
1397 threeTrackArray->AddAt(postrack1,1);
1398 threeTrackArray->AddAt(negtrack2,2);
1403 negtrack2->GetPxPyPz(momneg2);
1404 Double_t pxDau[3]={momneg1[0],mompos1[0],momneg2[0]};
1405 Double_t pyDau[3]={momneg1[1],mompos1[1],momneg2[1]};
1406 Double_t pzDau[3]={momneg1[2],mompos1[2],momneg2[2]};
1411 threeTrackArray->Clear();
1417 twoTrackArray2->AddAt(postrack1,0);
1418 twoTrackArray2->AddAt(negtrack2,1);
1422 twoTrackArray2->Clear();
1429 io3Prong =
Make3Prong(threeTrackArray,event,secVert3PrAOD,dispersion,vertexp1n1,vertexp1n2,dcap1n1,dcap1n2,dcan1n2,okForLcTopKpi,okForDsToKKpi,ok3Prong);
1431 AliAODVertex *v3Prong = 0x0;
1432 if(!
fMakeReducedRHF) v3Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1433 if(!isLikeSign3Prong) {
1442 rd->SetSecondaryVtx(v3Prong);
1443 v3Prong->SetParent(rd);
1444 AddRefs(v3Prong,rd,event,threeTrackArray);
1456 rd->SetSecondaryVtx(v3Prong);
1457 v3Prong->SetParent(rd);
1458 AddRefs(v3Prong,rd,event,threeTrackArray);
1464 if(io3Prong) {
delete io3Prong; io3Prong=NULL;}
1465 if(secVert3PrAOD) {
delete secVert3PrAOD; secVert3PrAOD=NULL;}
1467 threeTrackArray->Clear();
1473 twoTrackArray2->Clear();
1486 AliDebug(1,Form(
" D0->Kpi in event = %d;",
1487 (
Int_t)aodD0toKpiTClArr->GetEntriesFast()));
1490 AliDebug(1,Form(
" JPSI->ee in event = %d;",
1491 (
Int_t)aodJPSItoEleTClArr->GetEntriesFast()));
1494 AliDebug(1,Form(
" Charm->3Prong in event = %d;",
1495 (
Int_t)aodCharm3ProngTClArr->GetEntriesFast()));
1498 AliDebug(1,Form(
" Charm->4Prong in event = %d;\n",
1499 (
Int_t)aodCharm4ProngTClArr->GetEntriesFast()));
1502 AliDebug(1,Form(
" D*->D0pi in event = %d;\n",
1503 (
Int_t)aodDstarTClArr->GetEntriesFast()));
1506 AliDebug(1,Form(
" cascades -> v0 + track in event = %d;\n",
1507 (
Int_t)aodCascadesTClArr->GetEntriesFast()));
1510 AliDebug(1,Form(
" Like-sign 2Prong in event = %d;\n",
1511 (
Int_t)aodLikeSign2ProngTClArr->GetEntriesFast()));
1514 AliDebug(1,Form(
" Like-sign 3Prong in event = %d;\n",
1515 (
Int_t)aodLikeSign3ProngTClArr->GetEntriesFast()));
1519 twoTrackArray1->Delete();
delete twoTrackArray1;
1520 twoTrackArray2->Delete();
delete twoTrackArray2;
1521 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1522 twoTrackArrayV0->Delete();
delete twoTrackArrayV0;
1523 threeTrackArray->Clear();
1524 threeTrackArray->Delete();
delete threeTrackArray;
1525 fourTrackArray->Delete();
delete fourTrackArray;
1526 delete [] seleFlags; seleFlags=NULL;
1527 if(evtNumber) {
delete [] evtNumber; evtNumber=NULL;}
1528 tracksAtVertex.Delete();
1531 seleTrksArray.Delete();
1542 const AliVEvent *event,
1567 const AliVEvent *event,
1573 Int_t nDg = v->GetNDaughters();
1575 if(nDg) dg = v->GetDaughter(0);
1579 Int_t nTrks = trkArray->GetEntriesFast();
1581 AliExternalTrackParam *track = 0;
1582 AliAODTrack *aodTrack = 0;
1585 for(
Int_t i=0; i<nTrks; i++) {
1586 track = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
1587 id = (
Int_t)track->GetID();
1590 aodTrack =
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[
id]));
1591 if(!aodTrack) AliFatal(
"Not a standard AOD");
1592 v->AddDaughter(aodTrack);
1606 TClonesArray *inputArray=(TClonesArray*)aod->GetList()->FindObject(
"VerticesHF");
1607 if(!inputArray)
return;
1609 AliAODTrack *track = 0;
1610 AliAODVertex *vertex = 0;
1613 for(
Int_t iv=0; iv<inputArray->GetEntriesFast(); iv++) {
1614 vertex = (AliAODVertex*)inputArray->UncheckedAt(iv);
1615 for(
Int_t id=0;
id<vertex->GetNDaughters();
id++) {
1616 track = (AliAODTrack*)vertex->GetDaughter(
id);
1617 if(!track->GetStatus()) needtofix=kTRUE;
1619 if(needtofix)
break;
1622 if(!needtofix)
return;
1625 printf(
"Fixing references\n");
1631 for(
Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
1632 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
1633 if(!track) AliFatal(
"Not a standard AOD");
1636 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
1639 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
1643 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
1647 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
1651 Int_t ids[4]={-1,-1,-1,-1};
1652 for(
Int_t iv=0; iv<inputArray->GetEntriesFast(); iv++) {
1654 vertex = (AliAODVertex*)inputArray->UncheckedAt(iv);
1656 Int_t nDgs = vertex->GetNDaughters();
1657 for(
id=0;
id<nDgs;
id++) {
1658 track = (AliAODTrack*)vertex->GetDaughter(
id);
1659 if(track->Charge()==0) {cascade=kTRUE;
continue;}
1660 ids[id]=(
Int_t)track->GetID();
1661 vertex->RemoveDaughter(track);
1663 if(cascade)
continue;
1664 for(
id=0;
id<nDgs;
id++) {
1665 if (ids[
id]>-1 && ids[
id] < fAODMapSize) {
1666 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(
fAODMap[ids[
id]]));
1667 if(!track) AliFatal(
"Not a standard AOD");
1668 vertex->AddDaughter(track);
1687 if(!track1)
return kFALSE;
1689 if(!track2)
return kFALSE;
1690 AliESDtrack *postrack1 = 0;
1691 AliESDtrack *negtrack1 = 0;
1692 postrack1 =
new AliESDtrack(track1);
1693 negtrack1 =
new AliESDtrack(track2);
1698 Double_t dca12 = postrack1->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1700 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1703 vprimary->GetXYZ(pos);
1704 vprimary->GetCovarianceMatrix(cov);
1705 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1706 fV1->GetCovMatrix(cov);
1710 if(!track3)
return kFALSE;
1711 AliESDtrack *esdt3 =
new AliESDtrack(track3);
1715 threeTrackArray->AddAt(postrack1,0);
1716 threeTrackArray->AddAt(negtrack1,1);
1717 threeTrackArray->AddAt(esdt3,2);
1718 dca2 = esdt3->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1719 dca3 = esdt3->GetDCA(postrack1,
fBzkG,xdummy,ydummy);
1723 if (!secVert3PrAOD) {
1724 threeTrackArray->Clear();
1725 threeTrackArray->Delete();
delete threeTrackArray;
1727 delete postrack1; postrack1=NULL;
1728 delete negtrack1; negtrack1=NULL;
1729 delete esdt3; esdt3=NULL;
1735 rd=
Make3Prong(threeTrackArray, event, secVert3PrAOD,dispersion, vtxRec, vertexp2n1, dca12, dca2, dca3, rd);
1738 threeTrackArray->Clear();
1739 threeTrackArray->Delete();
delete threeTrackArray;
1741 delete postrack1; postrack1=NULL;
1742 delete negtrack1; negtrack1=NULL;
1743 delete esdt3; esdt3=NULL;
1758 if(!track1)
return kFALSE;
1760 if(!track2)
return kFALSE;
1762 AliESDtrack *esdt1 = 0;
1763 AliESDtrack *esdt2 = 0;
1764 esdt1 =
new AliESDtrack(track1);
1765 esdt2 =
new AliESDtrack(track2);
1767 twoTrackArray1->AddAt(esdt1,0);
1768 twoTrackArray1->AddAt(esdt2,1);
1773 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1776 vprimary->GetXYZ(pos);
1777 vprimary->GetCovarianceMatrix(cov);
1778 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1779 fV1->GetCovMatrix(cov);
1785 twoTrackArray1->Clear();
1786 twoTrackArray1->Delete();
delete twoTrackArray1;
1788 delete esdt1; esdt1=NULL;
1789 delete esdt2; esdt2=NULL;
1793 Bool_t okD0FromDstar=kFALSE;
1795 rd=
Make2Prong(twoTrackArray1, event, vtxRec, dca12, okD0, okJPSI, okD0FromDstar,refill,rd);
1799 twoTrackArray1->Clear();
1800 twoTrackArray1->Delete();
delete twoTrackArray1;
1801 delete esdt1; esdt1=NULL;
1802 delete esdt2; esdt2=NULL;
1813 AliAODTrack *trackB =(AliAODTrack*)event->GetTrack(
fAODMap[rCasc->
GetProngID(0)]);
1814 if(!trackB)
return kFALSE;
1816 AliNeutralTrackParam *trackV0=NULL;
1821 TClonesArray *inputArrayD0=(TClonesArray*)event->GetList()->FindObject(
"D0toKpi");
1822 if(!inputArrayD0)
return kFALSE;
1824 if(!trackD0)
return kFALSE;
1827 trackV0 =
new AliNeutralTrackParam(trackD0);
1831 if(!v0)
return kFALSE;
1833 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
1834 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
1837 AliESDtrack *esdB =
new AliESDtrack(trackB);
1839 twoTrackArrayCasc->AddAt(esdB,0);
1840 twoTrackArrayCasc->AddAt(trackV0,1);
1843 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1847 vprimary->GetXYZ(pos);
1848 vprimary->GetCovarianceMatrix(cov);
1849 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1850 fV1->GetCovMatrix(cov);
1853 AliAODVertex *vtxCasc = 0x0;
1855 vtxCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
1857 twoTrackArrayCasc->Clear();
1858 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1860 delete esdB; esdB=NULL;
1861 delete vtxCasc;vtxCasc=NULL;
1862 delete trackB; trackB=NULL;
1863 delete trackV0; trackV0=NULL;
1869 vtxCasc->SetParent(rCasc);
1870 rCasc->SetSecondaryVtx(vtxCasc);
1872 if(DStar)vtxCasc->AddDaughter(trackD0);
1873 else vtxCasc->AddDaughter(v0);
1877 Bool_t dummy1, dummy2, dummy3;
1879 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
1881 esdB->PropagateToDCA(vtxCasc,
fBzkG,kVeryBig);
1882 trackV0->PropagateToDCA(vtxCasc,
fBzkG,kVeryBig);
1884 esdB->GetPxPyPz(momentum);
1885 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
1886 trackV0->GetPxPyPz(momentum);
1887 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
1889 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArrayCasc,event);
1892 delete vtxCasc; vtxCasc=NULL;
1893 twoTrackArrayCasc->Clear();
1894 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1895 delete esdB; esdB=NULL;
1896 delete trackV0; trackV0=NULL;
1901 esdB->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1903 d0err[0] = TMath::Sqrt(covd0z0[0]);
1904 trackV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1906 d0err[1] = TMath::Sqrt(covd0z0[0]);
1907 rCasc->SetPxPyPzProngs(2,px,py,pz);
1909 rCasc->Setd0Prongs(2,d0);
1911 rCasc->SetCharge(esdB->Charge());
1913 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
1914 if(esdB->GetStatus()&AliESDtrack::kESDpid) esdB->GetESDpid(esdpid0);
1915 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
1917 for(
Int_t i=0;i<5;i++) {
1918 esdpid[i] = esdpid0[i];
1919 esdpid[5+i] = esdpid1[i];
1921 rCasc->SetPID(2,esdpid);
1926 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
1927 twoTrackArrayCasc->Clear();
1928 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1929 delete esdB; esdB=NULL;
1930 delete trackV0; trackV0=NULL;
1936 TObjArray *twoTrackArray,AliVEvent *event,
1937 AliAODVertex *secVert,
1945 UInt_t ntref=TProcessID::GetObjectCount();
1947 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
1952 Bool_t dummy1,dummy2,dummy3;
1958 dummy1,dummy2,dummy3);
1959 if(!theCascade)
return 0x0;
1962 AliESDtrack *trackPi = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
1963 theCascade->SetCharge(trackPi->Charge());
1971 AliAODTrack* trackPiAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idSoftPi]));
1972 if(!trackPiAOD) AliFatal(
"Not a standard AOD");
1973 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPiAOD);
1976 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPi);
1978 tmpCascade->GetSecondaryVtx()->AddDaughter(rd2Prong);
1980 AliAODVertex *primVertexAOD=0;
1992 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
1994 delete tmpCascade; tmpCascade=NULL;
1998 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2008 TObjArray *twoTrackArray,AliVEvent *event,
2009 AliAODVertex *secVert,
2017 UInt_t ntref=TProcessID::GetObjectCount();
2019 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2024 AliESDtrack *postrack = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2025 AliESDtrack *negtrack = (AliESDtrack*)twoTrackArray->UncheckedAt(1);
2027 postrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2028 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2030 postrack->GetPxPyPz(momentum);
2031 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2032 negtrack->GetPxPyPz(momentum);
2033 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2039 if(!presel)
return 0x0;
2043 Bool_t dummy1,dummy2,dummy3;
2049 dummy1,dummy2,dummy3);
2050 if(!theCascade)
return 0x0;
2053 AliESDtrack *trackBachelor = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2054 theCascade->SetCharge(trackBachelor->Charge());
2061 Int_t idBachelor=(
Int_t)trackBachelor->GetID();
2062 if (idBachelor > -1 && idBachelor <
fAODMapSize) {
2063 AliAODTrack* trackBachelorAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idBachelor]));
2064 if(!trackBachelorAOD) AliFatal(
"Not a standard AOD");
2065 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelorAOD);
2068 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelor);
2070 tmpCascade->GetSecondaryVtx()->AddDaughter(v0);
2072 AliAODVertex *primVertexAOD=0;
2076 if(!primVertexAOD) primVertexAOD = (AliAODVertex*)event->GetPrimaryVertex();
2088 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
2090 delete tmpCascade; tmpCascade=NULL;
2091 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2099 TObjArray *twoTrackArray,AliVEvent *event,
2100 AliAODVertex *secVert,
Double_t dca,
2108 okD0=kFALSE; okJPSI=kFALSE; okD0fromDstar=kFALSE;
2110 UInt_t ntref=TProcessID::GetObjectCount();
2112 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2115 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
2116 AliESDtrack *postrack = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2117 AliESDtrack *negtrack = (AliESDtrack*)twoTrackArray->UncheckedAt(1);
2120 postrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2121 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2124 postrack->GetPxPyPz(momentum);
2125 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2126 negtrack->GetPxPyPz(momentum);
2127 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2142 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArray,event);
2143 if(!primVertexAOD)
return 0x0;
2146 postrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2148 d0err[0] = TMath::Sqrt(covd0z0[0]);
2149 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2151 d0err[1] = TMath::Sqrt(covd0z0[0]);
2159 if(postrack->Charge()!=0 && negtrack->Charge()!=0) {
2183 the2Prong->SetSecondaryVtx(secVert);
2184 secVert->SetParent(the2Prong);
2187 the2Prong->SetPxPyPzProngs(2,px,py,pz);
2188 the2Prong->SetDCA(dca);
2189 the2Prong->Setd0Prongs(2,d0);
2191 the2Prong->SetCharge(0);
2193 delete primVertexAOD; primVertexAOD=NULL;
2201 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2202 if(postrack->GetStatus()&AliESDtrack::kESDpid) postrack->GetESDpid(esdpid0);
2203 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2204 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2206 for(
Int_t i=0;i<5;i++) {
2207 esdpid[i] = esdpid0[i];
2208 esdpid[5+i] = esdpid1[i];
2210 the2Prong->SetPID(2,esdpid);
2215 TObjArray *threeTrackArray,AliVEvent *event,
2216 AliAODVertex *secVert,
Double_t dispersion,
2217 const AliAODVertex *vertexp1n1,
const AliAODVertex *vertexp2n1,
2227 UInt_t ntref=TProcessID::GetObjectCount();
2229 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2233 if(!secVert || !vertexp1n1 || !vertexp2n1)
return 0x0;
2235 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2239 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2240 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2241 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2243 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2244 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2245 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2246 postrack1->GetPxPyPz(momentum);
2247 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2248 negtrack->GetPxPyPz(momentum);
2249 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2250 postrack2->GetPxPyPz(momentum);
2251 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2263 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2264 if(!primVertexAOD)
return 0x0;
2267 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2269 d0err[0] = TMath::Sqrt(covd0z0[0]);
2270 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2272 d0err[1] = TMath::Sqrt(covd0z0[0]);
2273 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2275 d0err[2] = TMath::Sqrt(covd0z0[0]);
2279 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2280 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2281 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]));
2282 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]));
2287 AliAODRecoDecayHF3Prong *the3Prong =
new AliAODRecoDecayHF3Prong(0x0,px,py,pz,d0,d0err,dca,dispersion,dist12,dist23,charge);
2290 AliAODVertex* ownsecv=secVert->CloneWithoutRefs();
2291 the3Prong->SetOwnSecondaryVtx(ownsecv);
2295 delete primVertexAOD; primVertexAOD=NULL;
2331 the3Prong->SetSecondaryVtx(secVert);
2336 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2337 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2338 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2339 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2340 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2341 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2344 for(
Int_t i=0;i<5;i++) {
2345 esdpid[i] = esdpid0[i];
2346 esdpid[5+i] = esdpid1[i];
2347 esdpid[10+i] = esdpid2[i];
2349 the3Prong->SetPID(3,esdpid);
2355 TObjArray *threeTrackArray,AliVEvent *event,
2356 AliAODVertex *secVert,
Double_t dispersion,
2357 Double32_t dist12, Double32_t dist23,
2370 UInt_t ntref=TProcessID::GetObjectCount();
2372 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2375 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2379 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2380 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2381 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2383 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2384 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2385 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2386 postrack1->GetPxPyPz(momentum);
2387 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2388 negtrack->GetPxPyPz(momentum);
2389 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2390 postrack2->GetPxPyPz(momentum);
2391 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2393 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2394 if(!primVertexAOD)
return 0x0;
2396 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2398 d0err[0] = TMath::Sqrt(covd0z0[0]);
2399 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2401 d0err[1] = TMath::Sqrt(covd0z0[0]);
2402 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2404 d0err[2] = TMath::Sqrt(covd0z0[0]);
2406 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2407 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2410 rd->SetSecondaryVtx(secVert);
2411 secVert->SetParent(rd);
2414 rd->SetPxPyPzProngs(3,px,py,pz);
2416 rd->Setd0Prongs(3,d0);
2418 rd->SetCharge(charge);
2421 delete primVertexAOD; primVertexAOD=NULL;
2428 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2429 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2430 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2431 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2432 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2433 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2436 for(
Int_t i=0;i<5;i++) {
2437 esdpid[i] = esdpid0[i];
2438 esdpid[5+i] = esdpid1[i];
2439 esdpid[10+i] = esdpid2[i];
2441 rd->SetPID(3,esdpid);
2446 TObjArray *fourTrackArray,AliVEvent *event,
2447 AliAODVertex *secVert,
2448 const AliAODVertex *vertexp1n1,
2449 const AliAODVertex *vertexp1n1p2,
2459 UInt_t ntref=TProcessID::GetObjectCount();
2461 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2465 if(!secVert || !vertexp1n1 || !vertexp1n1p2)
return 0x0;
2467 Double_t px[4],py[4],pz[4],d0[4],d0err[4];
2469 AliESDtrack *postrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(0);
2470 AliESDtrack *negtrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(1);
2471 AliESDtrack *postrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(2);
2472 AliESDtrack *negtrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(3);
2474 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2475 negtrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2476 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2477 negtrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2480 postrack1->GetPxPyPz(momentum);
2481 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2482 negtrack1->GetPxPyPz(momentum);
2483 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2484 postrack2->GetPxPyPz(momentum);
2485 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2486 negtrack2->GetPxPyPz(momentum);
2487 px[3] = momentum[0]; py[3] = momentum[1]; pz[3] = momentum[2];
2502 AliAODVertex *primVertexAOD =
PrimaryVertex(fourTrackArray,event);
2503 if(!primVertexAOD)
return 0x0;
2506 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2508 d0err[0] = TMath::Sqrt(covd0z0[0]);
2509 negtrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2511 d0err[1] = TMath::Sqrt(covd0z0[0]);
2512 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2514 d0err[2] = TMath::Sqrt(covd0z0[0]);
2515 negtrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2517 d0err[3] = TMath::Sqrt(covd0z0[0]);
2521 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2522 Double_t dca[6]={dcap1n1,0.,dcap1n2,dcap2n1,0.,dcap2n2};
2523 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]));
2524 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]));
2525 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]));
2527 AliAODRecoDecayHF4Prong *the4Prong =
new AliAODRecoDecayHF4Prong(secVert,px,py,pz,d0,d0err,dca,dist12,dist3,dist4,charge);
2532 delete primVertexAOD; primVertexAOD=NULL;
2543 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2544 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2545 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2546 if(negtrack1->GetStatus()&AliESDtrack::kESDpid) negtrack1->GetESDpid(esdpid1);
2547 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2548 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2549 Double_t esdpid3[5]={0.,0.,0.,0.,0.};
2550 if(negtrack2->GetStatus()&AliESDtrack::kESDpid) negtrack2->GetESDpid(esdpid3);
2553 for(
Int_t i=0;i<5;i++) {
2554 esdpid[i] = esdpid0[i];
2555 esdpid[5+i] = esdpid1[i];
2556 esdpid[10+i] = esdpid2[i];
2557 esdpid[15+i] = esdpid3[i];
2559 the4Prong->SetPID(4,esdpid);
2570 AliAODTrack *track=0;
2572 for(
Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
2573 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
2574 if(!track) AliFatal(
"Not a standard AOD");
2576 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
2579 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
2583 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
2587 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
2593 AliVEvent *event)
const
2598 AliESDVertex *vertexESD = 0;
2599 AliAODVertex *vertexAOD = 0;
2605 vertexESD =
new AliESDVertex(*
fV1);
2610 Int_t nTrks = trkArray->GetEntriesFast();
2611 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
2616 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraint")) {
2618 event->GetDiamondCovXY(diamondcovxy);
2619 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
2620 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
2621 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
2622 vertexer->SetVtxStart(diamond);
2623 delete diamond; diamond=NULL;
2624 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraintOnlyFitter"))
2625 vertexer->SetOnlyFitter();
2627 Int_t skipped[1000];
2628 Int_t nTrksToSkip=0,id;
2629 AliExternalTrackParam *t = 0;
2630 for(
Int_t i=0; i<nTrks; i++) {
2631 t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
2632 id = (
Int_t)t->GetID();
2634 skipped[nTrksToSkip++] = id;
2640 for(
Int_t j=0; j<
event->GetNumberOfTracks(); j++) {
2641 AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
2642 if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
2643 id = (
Int_t)vtrack->GetID();
2645 skipped[nTrksToSkip++] = id;
2649 for(
Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
2651 vertexer->SetSkipTracks(nTrksToSkip,skipped);
2652 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
2659 AliESDtrack *esdTrack = 0;
2661 for(
Int_t i=0; i<nTrks; i++) {
2662 t = (AliESDtrack*)trkArray->UncheckedAt(i);
2663 esdTrack =
new AliESDtrack(*t);
2664 rmArray.AddLast(esdTrack);
2665 if(esdTrack->GetID()>=0) {
2666 rmId[i]=(
UShort_t)esdTrack->GetID();
2671 Float_t diamondxy[2]={
static_cast<Float_t>(
event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
2672 vertexESD = vertexer->RemoveTracksFromVertex(
fV1,&rmArray,rmId,diamondxy);
2673 delete [] rmId; rmId=NULL;
2678 if(!vertexESD)
return vertexAOD;
2679 if(vertexESD->GetNContributors()<=0) {
2681 delete vertexESD; vertexESD=NULL;
2685 delete vertexer; vertexer=NULL;
2691 vertexESD->GetXYZ(pos);
2692 vertexESD->GetCovMatrix(cov);
2693 chi2perNDF = vertexESD->GetChi2toNDF();
2694 delete vertexESD; vertexESD=NULL;
2696 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF);
2707 printf(
"Secondary vertex with Kalman filter package (AliKFParticle)\n");
2709 printf(
"Secondary vertex with AliVertexerTracks\n");
2714 printf(
"Reconstruct D0->Kpi candidates with cuts:\n");
2718 printf(
"Reconstruct D*->D0pi candidates with cuts:\n");
2720 printf(
" Reconstruct a secondary vertex for the D*\n");
2722 printf(
" Assume the D* comes from the primary vertex\n");
2727 printf(
"Reconstruct J/psi from B candidates with cuts:\n");
2731 printf(
"Reconstruct 3 prong candidates.\n");
2732 printf(
" D+->Kpipi cuts:\n");
2734 printf(
" Ds->KKpi cuts:\n");
2736 printf(
" Lc->pKpi cuts:\n");
2740 printf(
"Reconstruct 4 prong candidates.\n");
2741 printf(
" D0->Kpipipi cuts:\n");
2745 printf(
"Reconstruct cascades candidates formed with v0s.\n");
2746 printf(
" Lc -> k0s P & Lc -> L Pi cuts:\n");
2759 AliESDVertex *vertexESD = 0;
2760 AliAODVertex *vertexAOD = 0;
2765 vertexESD = (AliESDVertex*)
fVertexerTracks->VertexForSelectedESDTracks(trkArray);
2767 if(!vertexESD)
return vertexAOD;
2769 if(vertexESD->GetNContributors()!=trkArray->GetEntriesFast()) {
2771 delete vertexESD; vertexESD=NULL;
2775 Double_t vertRadius2=vertexESD->GetX()*vertexESD->GetX()+vertexESD->GetY()*vertexESD->GetY();
2778 delete vertexESD; vertexESD=NULL;
2784 AliKFParticle::SetField(
fBzkG);
2786 AliKFVertex vertexKF;
2788 Int_t nTrks = trkArray->GetEntriesFast();
2789 for(
Int_t i=0; i<nTrks; i++) {
2790 AliESDtrack *esdTrack = (AliESDtrack*)trkArray->At(i);
2791 AliKFParticle daughterKF(*esdTrack,211);
2792 vertexKF.AddDaughter(daughterKF);
2794 vertexESD =
new AliESDVertex(vertexKF.Parameters(),
2795 vertexKF.CovarianceMatrix(),
2797 vertexKF.GetNContributors());
2803 vertexESD->GetXYZ(pos);
2804 vertexESD->GetCovMatrix(cov);
2805 chi2perNDF = vertexESD->GetChi2toNDF();
2806 dispersion = vertexESD->GetDispersion();
2807 delete vertexESD; vertexESD=NULL;
2809 Int_t nprongs= (useTRefArray ? 0 : trkArray->GetEntriesFast());
2810 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
2819 Int_t retval=kFALSE;
2822 for(
Int_t iTrack=0; iTrack<3; iTrack++){
2823 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2824 track->GetPxPyPz(momentum);
2825 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2837 Int_t retval=kFALSE;
2841 for(
Int_t iTrack=0; iTrack<4; iTrack++){
2842 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2843 track->GetPxPyPz(momentum);
2844 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2856 Int_t retval=kFALSE;
2860 for(
Int_t iTrack=0; iTrack<2; iTrack++){
2861 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2862 track->GetPxPyPz(momentum);
2863 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2883 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
2888 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
2893 pdg2[0]=211; pdg2[1]=321;
2895 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2899 pdg2[0]=321; pdg2[1]=211;
2901 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2922 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
2927 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
2933 pdg2[0]=11; pdg2[1]=11;
2935 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2958 fMassCalc3->SetPxPyPzProngs(nprongs,px,py,pz);
2966 if(
fMassCalc3->Pt2() < minPt*minPt)
return retval;
2971 pdg3[0]=211; pdg3[1]=321; pdg3[2]=211;
2973 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2981 pdg3[0]=321; pdg3[1]=321; pdg3[2]=211;
2983 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2987 pdg3[0]=211; pdg3[1]=321; pdg3[2]=321;
2989 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2998 pdg3[0]=2212; pdg3[1]=321; pdg3[2]=211;
3000 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3006 pdg3[0]=211; pdg3[1]=321; pdg3[2]=2212;
3008 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3031 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3036 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3038 pdg2[0]=211; pdg2[1]=421;
3043 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3066 fMassCalc4->SetPxPyPzProngs(nprongs,px,py,pz);
3071 if(
fMassCalc4->Pt2() < minPt*minPt)
return retval;
3077 pdg4[0]=321; pdg4[1]=211; pdg4[2]=211; pdg4[3]=211;
3079 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3084 pdg4[0]=211; pdg4[1]=321; pdg4[2]=211; pdg4[3]=211;
3086 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3091 pdg4[0]=211; pdg4[1]=211; pdg4[2]=321; pdg4[3]=211;
3093 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3098 pdg4[0]=211; pdg4[1]=211; pdg4[2]=211; pdg4[3]=321;
3100 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3121 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3124 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3129 pdg2[0]=2212;pdg2[1]=310;
3131 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3135 pdg2[0]=211;pdg2[1]=3122;
3137 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3150 UChar_t *seleFlags,
Int_t *evtNumber)
3159 const AliVVertex *vprimary =
event->GetPrimaryVertex();
3167 const Int_t entries =
event->GetNumberOfTracks();
3168 AliCentrality* cent;
3171 fV1 =
new AliESDVertex(*((AliESDVertex*)vprimary));
3174 vprimary->GetXYZ(pos);
3175 vprimary->GetCovarianceMatrix(cov);
3176 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
3177 if(entries<=0)
return;
3179 memset(indices,0,
sizeof(
UShort_t)*entries);
3186 if(event->GetRunNumber()<244824){
3187 centperc=cent->GetCentralityPercentile(
"V0M");
3189 AliMultSelection *multSelection = (AliMultSelection * ) event->FindListObject(
"MultSelection");
3191 centperc=multSelection->GetMultiplicityPercentile(
"V0M");
3192 Int_t qual = multSelection->GetEvSelCode();
3193 if(qual == 199 ) centperc=0.1;
3196 Bool_t okDisplaced=kFALSE,okSoftPi=kFALSE,okFor3Prong=kFALSE,okBachelor=kFALSE;
3200 for(
Int_t i=0; i<entries; i++) {
3202 track = (AliVTrack*)event->GetTrack(i);
3205 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
3208 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
3212 if(track->GetID()<0)
continue;
3216 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
3220 AliAODTrack *aodt = (AliAODTrack*)track;
3221 if(aodt->GetUsedForPrimVtxFit()) {
3222 indices[nindices]=aodt->GetID(); nindices++;
3228 AliESDtrack *esdt = 0;
3231 esdt = (AliESDtrack*)track;
3233 esdt =
new AliESDtrack(track);
3237 okDisplaced=kFALSE; okSoftPi=kFALSE; okFor3Prong=kFALSE; okBachelor=kFALSE;
3239 evtNumber[i]=((AliMixedEvent*)event)->EventIndex(i);
3240 const AliVVertex* eventVtx=((AliMixedEvent*)event)->GetEventVertex(i);
3241 Double_t vtxPos[3],primPos[3],primCov[6],trasl[3];
3242 eventVtx->GetXYZ(vtxPos);
3243 vprimary->GetXYZ(primPos);
3244 eventVtx->GetCovarianceMatrix(primCov);
3245 for(
Int_t ind=0;ind<3;ind++){
3246 trasl[ind]=vtxPos[ind]-primPos[ind];
3249 Bool_t isTransl=esdt->Translate(trasl,primCov);
3257 if(
SingleTrkCuts(esdt,centperc,okDisplaced,okSoftPi,okFor3Prong,okBachelor) && nSeleTrks<trkEntries) {
3258 esdt->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
3259 seleTrksArray.AddLast(esdt);
3260 tracksAtVertex.AddLast(
new AliExternalTrackParam(*esdt));
3261 seleFlags[nSeleTrks]=0;
3262 if(okDisplaced) SETBIT(seleFlags[nSeleTrks],
kBitDispl);
3263 if(okFor3Prong) SETBIT(seleFlags[nSeleTrks],
kBit3Prong);
3264 if(okSoftPi) SETBIT(seleFlags[nSeleTrks],
kBitSoftPi);
3265 if(okBachelor) SETBIT(seleFlags[nSeleTrks],
kBitBachelor);
3273 if(nsigmatofPi>-990. && (nsigmatofPi<-fnSigmaTOFPionLow || nsigmatofPi>
fnSigmaTOFPionHi)){
3277 if(nsigmatofK>-990. && (nsigmatofK<-fnSigmaTOFKaonLow || nsigmatofK>
fnSigmaTOFKaonHi)){
3281 if(nsigmatofP>-990. && (nsigmatofP<-fnSigmaTOFProtonLow || nsigmatofP>
fnSigmaTOFProtonHi)){
3288 if(nsigmatpcPi>-990. && (nsigmatpcPi<-fnSigmaTPCPionLow || nsigmatpcPi>
fnSigmaTPCPionHi)){
3292 if(nsigmatpcK>-990. && (nsigmatpcK<-fnSigmaTPCKaonLow || nsigmatpcK>
fnSigmaTPCKaonHi)){
3296 if(nsigmatpcP>-990. && (nsigmatpcP<-fnSigmaTPCProtonLow || nsigmatpcP>
fnSigmaTPCProtonHi)){
3312 vprimary->GetXYZ(pos);
3313 vprimary->GetCovarianceMatrix(cov);
3314 Double_t chi2toNDF = vprimary->GetChi2perNDF();
3315 Int_t ncontr=nindices;
3316 if(!strcmp(vprimary->GetTitle(),
"VertexerTracksWithContraint")) ncontr += 1;
3318 fV1 =
new AliESDVertex(pos,cov,chi2,ncontr,vprimary->GetName());
3319 fV1->SetTitle(vprimary->GetTitle());
3320 fV1->SetIndices(nindices,indices);
3322 if(indices) {
delete [] indices; indices=NULL; }
3347 Bool_t &okBachelor)
const
3354 trk->RelateToVertex(
fV1,
fBzkG,kVeryBig);
3370 if(selectInfo) okDisplaced=kTRUE;
3384 if(selectInfo) okFor3Prong=kTRUE;
3391 if(selectInfo) okSoftPi=kTRUE;
3399 if(okDisplaced) selectInfo=1;
3402 if(selectInfo) okBachelor=kTRUE;
3404 if(okDisplaced || okSoftPi || okFor3Prong || okBachelor)
return kTRUE;
3419 Double_t vertex[3]; esdV0->GetXYZ(vertex[0],vertex[1],vertex[2]);
3420 AliAODVertex *vertexV0 =
new AliAODVertex(vertex,esdV0->GetChi2V0(),AliAODVertex::kV0,2);
3425 esdV0->PxPyPz(pxpypz);
3426 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
3427 AliNeutralTrackParam *trackesdV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
3434 trackesdV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3435 Double_t dcaV0ToPrimVertex = TMath::Sqrt(covd0z0[0]);
3437 Double_t dcaV0DaughterToPrimVertex[2];
3438 AliExternalTrackParam *posV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(0);
3439 AliExternalTrackParam *negV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(1);
3440 if( !posV0track || !negV0track) {
3441 if(trackesdV0) {
delete trackesdV0; trackesdV0=NULL;}
3443 delete primVertexAOD;
3446 posV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3449 dcaV0DaughterToPrimVertex[0] = TMath::Sqrt(covd0z0[0]);
3450 negV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3453 dcaV0DaughterToPrimVertex[1] = TMath::Sqrt(covd0z0[0]);
3454 Double_t dcaV0Daughters = esdV0->GetDcaV0Daughters();
3456 esdV0->GetNPxPyPz(nmom[0],nmom[1],nmom[2]);
3457 esdV0->GetPPxPyPz(pmom[0],pmom[1],pmom[2]);
3459 AliAODv0 *aodV0 =
new AliAODv0(vertexV0,dcaV0Daughters,dcaV0ToPrimVertex,pmom,nmom,dcaV0DaughterToPrimVertex);
3460 aodV0->SetOnFlyStatus(esdV0->GetOnFlyStatus());
3463 delete primVertexAOD;
3472 const Double_t *par=extpar->GetParameter();
3473 const Double_t *cov=extpar->GetCovariance();
3476 esdt->Set(x,alpha,par,cov);
3483 fMassDzero=TDatabasePDG::Instance()->GetParticle(421)->Mass();
3484 fMassDplus=TDatabasePDG::Instance()->GetParticle(411)->Mass();
3485 fMassDs=TDatabasePDG::Instance()->GetParticle(431)->Mass();
3486 fMassLambdaC=TDatabasePDG::Instance()->GetParticle(4122)->Mass();
3487 fMassDstar=TDatabasePDG::Instance()->GetParticle(413)->Mass();
3488 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
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)
AliRDHFCutsDstoKKpi * fCutsDstoKKpi
D+->Kpipi cuts.
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()
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
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.
Bool_t FillRecoCasc(AliVEvent *event, AliAODRecoCascadeHF *rc, Bool_t isDStar)
AliRDHFCutsDplustoKpipi * fCutsDplustoKpipi
J/psi->ee cuts.
AliRDHFCutsD0toKpipipi * fCutsD0toKpipipi
Lc –> v0 + bachelor cuts.
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
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.
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)
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)
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
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)
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
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.
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.