29 #include <Riostream.h>
31 #include <TDatabasePDG.h>
35 #include "AliVEvent.h"
36 #include "AliVVertex.h"
37 #include "AliVTrack.h"
38 #include "AliVertexerTracks.h"
39 #include "AliKFVertex.h"
40 #include "AliESDEvent.h"
41 #include "AliESDVertex.h"
42 #include "AliExternalTrackParam.h"
43 #include "AliNeutralTrackParam.h"
44 #include "AliESDtrack.h"
45 #include "AliESDtrackCuts.h"
46 #include "AliAODEvent.h"
47 #include "AliPIDResponse.h"
48 #include "AliAODRecoDecay.h"
62 #include "AliAnalysisFilter.h"
64 #include "AliMixedEvent.h"
67 #include "AliCodeTimer.h"
81 fSecVtxWithKF(kFALSE),
82 fRecoPrimVtxSkippingTrks(kFALSE),
83 fRmTrksFromPrimVtx(kFALSE),
92 fLikeSign3prong(kFALSE),
95 fUseKaonPIDfor3Prong(kFALSE),
98 fUseKaonPIDforDs(kFALSE),
101 fUseTPCPIDOnlyIfNoTOF(kFALSE),
102 fMaxMomForTPCPid(1.),
104 fnSigmaTPCPionLow(5.),
105 fnSigmaTPCPionHi(5.),
106 fnSigmaTOFPionLow(5.),
107 fnSigmaTOFPionHi(5.),
108 fnSigmaTPCKaonLow(5.),
109 fnSigmaTPCKaonHi(5.),
110 fnSigmaTOFKaonLow(5.),
111 fnSigmaTOFKaonHi(5.),
112 fnSigmaTPCProtonLow(5.),
113 fnSigmaTPCProtonHi(5.),
114 fnSigmaTOFProtonLow(5.),
115 fnSigmaTOFProtonHi(5.),
116 fMaxCentPercentileForTightCuts(-9999),
118 fTrackFilter2prongCentral(0x0),
119 fTrackFilter3prongCentral(0x0),
120 fTrackFilterSoftPi(0x0),
123 fCutsDplustoKpipi(0x0),
127 fCutsD0toKpipipi(0x0),
128 fCutsDStartoKpipi(0x0),
130 fFindVertexForDstar(kTRUE),
131 fFindVertexForCascades(kTRUE),
132 fV0TypeForCascadeVertex(0),
133 fMassCutBeforeVertexing(kFALSE),
137 fOKInvMassD0(kFALSE),
138 fOKInvMassJpsi(kFALSE),
139 fOKInvMassDplus(kFALSE),
140 fOKInvMassDs(kFALSE),
141 fOKInvMassLc(kFALSE),
142 fOKInvMassDstar(kFALSE),
143 fOKInvMassD0to4p(kFALSE),
144 fOKInvMassLctoV0(kFALSE),
147 fMakeReducedRHF(kFALSE),
157 Double_t d02[2]={0.,0.};
158 Double_t d03[3]={0.,0.,0.};
159 Double_t d04[4]={0.,0.,0.,0.};
160 fMassCalc2 =
new AliAODRecoDecay(0x0,2,0,d02);
161 fMassCalc3 =
new AliAODRecoDecay(0x0,3,1,d03);
162 fMassCalc4 =
new AliAODRecoDecay(0x0,4,0,d04);
168 fInputAOD(source.fInputAOD),
169 fAODMapSize(source.fAODMapSize),
170 fAODMap(source.fAODMap),
171 fVertexerTracks(source.fVertexerTracks),
173 fSecVtxWithKF(source.fSecVtxWithKF),
174 fRecoPrimVtxSkippingTrks(source.fRecoPrimVtxSkippingTrks),
175 fRmTrksFromPrimVtx(source.fRmTrksFromPrimVtx),
177 fD0toKpi(source.fD0toKpi),
178 fJPSItoEle(source.fJPSItoEle),
179 f3Prong(source.f3Prong),
180 f4Prong(source.f4Prong),
181 fDstar(source.fDstar),
182 fCascades(source.fCascades),
183 fLikeSign(source.fLikeSign),
184 fLikeSign3prong(source.fLikeSign3prong),
185 fMixEvent(source.fMixEvent),
186 fPidResponse(source.fPidResponse),
187 fUseKaonPIDfor3Prong(source.fUseKaonPIDfor3Prong),
188 fUsePIDforLc(source.fUsePIDforLc),
189 fUsePIDforLc2V0(source.fUsePIDforLc2V0),
190 fUseKaonPIDforDs(source.fUseKaonPIDforDs),
191 fUseTPCPID(source.fUseTPCPID),
192 fUseTOFPID(source.fUseTOFPID),
193 fUseTPCPIDOnlyIfNoTOF(source.fUseTPCPIDOnlyIfNoTOF),
194 fMaxMomForTPCPid(source.fMaxMomForTPCPid),
195 fUsePidTag(source.fUsePidTag),
196 fnSigmaTPCPionLow(source.fnSigmaTPCPionLow),
197 fnSigmaTPCPionHi(source.fnSigmaTPCPionHi),
198 fnSigmaTOFPionLow(source.fnSigmaTOFPionLow),
199 fnSigmaTOFPionHi(source.fnSigmaTOFPionHi),
200 fnSigmaTPCKaonLow(source.fnSigmaTPCKaonLow),
201 fnSigmaTPCKaonHi(source.fnSigmaTPCKaonHi),
202 fnSigmaTOFKaonLow(source.fnSigmaTOFKaonLow),
203 fnSigmaTOFKaonHi(source.fnSigmaTOFKaonHi),
204 fnSigmaTPCProtonLow(source.fnSigmaTPCProtonLow),
205 fnSigmaTPCProtonHi(source.fnSigmaTPCProtonHi),
206 fnSigmaTOFProtonLow(source.fnSigmaTOFProtonLow),
207 fnSigmaTOFProtonHi(source.fnSigmaTOFProtonHi),
208 fMaxCentPercentileForTightCuts(source.fMaxCentPercentileForTightCuts),
209 fTrackFilter(source.fTrackFilter),
210 fTrackFilter2prongCentral(source.fTrackFilter2prongCentral),
211 fTrackFilter3prongCentral(source.fTrackFilter3prongCentral),
212 fTrackFilterSoftPi(source.fTrackFilterSoftPi),
213 fCutsD0toKpi(source.fCutsD0toKpi),
214 fCutsJpsitoee(source.fCutsJpsitoee),
215 fCutsDplustoKpipi(source.fCutsDplustoKpipi),
216 fCutsDstoKKpi(source.fCutsDstoKKpi),
217 fCutsLctopKpi(source.fCutsLctopKpi),
218 fCutsLctoV0(source.fCutsLctoV0),
219 fCutsD0toKpipipi(source.fCutsD0toKpipipi),
220 fCutsDStartoKpipi(source.fCutsDStartoKpipi),
221 fListOfCuts(source.fListOfCuts),
222 fFindVertexForDstar(source.fFindVertexForDstar),
223 fFindVertexForCascades(source.fFindVertexForCascades),
224 fV0TypeForCascadeVertex(source.fV0TypeForCascadeVertex),
225 fMassCutBeforeVertexing(source.fMassCutBeforeVertexing),
226 fMassCalc2(source.fMassCalc2),
227 fMassCalc3(source.fMassCalc3),
228 fMassCalc4(source.fMassCalc4),
229 fOKInvMassD0(source.fOKInvMassD0),
230 fOKInvMassJpsi(source.fOKInvMassJpsi),
231 fOKInvMassDplus(source.fOKInvMassDplus),
232 fOKInvMassDs(source.fOKInvMassDs),
233 fOKInvMassLc(source.fOKInvMassLc),
234 fOKInvMassDstar(source.fOKInvMassDstar),
235 fOKInvMassD0to4p(source.fOKInvMassD0to4p),
236 fOKInvMassLctoV0(source.fOKInvMassLctoV0),
239 fMakeReducedRHF(kFALSE),
240 fMassDzero(source.fMassDzero),
241 fMassDplus(source.fMassDplus),
242 fMassDs(source.fMassDs),
243 fMassLambdaC(source.fMassLambdaC),
244 fMassDstar(source.fMassDstar),
245 fMassJpsi(source.fMassJpsi)
257 if(&source ==
this)
return *
this;
363 TList *
list =
new TList();
365 list->SetName(
"ListOfCuts");
369 list->Add(cutsD0toKpi);
373 list->Add(cutsJpsitoee);
377 list->Add(cutsDplustoKpipi);
381 list->Add(cutsDstoKKpi);
385 list->Add(cutsLctopKpi);
389 list->Add(cutsLctoV0);
393 list->Add(cutsD0toKpipipi);
397 list->Add(cutsDStartoKpipi);
402 if (bCutsOk == kFALSE) {AliFatal(
"AliAnalysisVertexingHF::FillListOfCuts vertexing and the analysis task cuts are not consistent!");}
411 TClonesArray *aodVerticesHFTClArr,
412 TClonesArray *aodD0toKpiTClArr,
413 TClonesArray *aodJPSItoEleTClArr,
414 TClonesArray *aodCharm3ProngTClArr,
415 TClonesArray *aodCharm4ProngTClArr,
416 TClonesArray *aodDstarTClArr,
417 TClonesArray *aodCascadesTClArr,
418 TClonesArray *aodLikeSign2ProngTClArr,
419 TClonesArray *aodLikeSign3ProngTClArr)
427 TString evtype =
event->IsA()->GetName();
428 fInputAOD = ((evtype==
"AliAODEvent") ? kTRUE : kFALSE);
432 AliDebug(2,
"Creating HF candidates from AOD");
434 AliDebug(2,
"Creating HF candidates from ESD");
437 if(!aodVerticesHFTClArr) {
438 printf(
"ERROR: no aodVerticesHFTClArr");
442 printf(
"ERROR: no aodD0toKpiTClArr");
446 printf(
"ERROR: no aodJPSItoEleTClArr");
449 if(
f3Prong && !aodCharm3ProngTClArr) {
450 printf(
"ERROR: no aodCharm3ProngTClArr");
453 if(
f4Prong && !aodCharm4ProngTClArr) {
454 printf(
"ERROR: no aodCharm4ProngTClArr");
457 if(
fDstar && !aodDstarTClArr) {
458 printf(
"ERROR: no aodDstarTClArr");
462 printf(
"ERROR: no aodCascadesTClArr ");
465 if(
fLikeSign && !aodLikeSign2ProngTClArr) {
466 printf(
"ERROR: no aodLikeSign2ProngTClArr");
470 printf(
"ERROR: no aodLikeSign3ProngTClArr");
475 Int_t iVerticesHF=0,iD0toKpi=0,iJPSItoEle=0,i3Prong=0,i4Prong=0,iDstar=0,iCascades=0,iLikeSign2Prong=0,iLikeSign3Prong=0;
476 aodVerticesHFTClArr->Delete();
477 iVerticesHF = aodVerticesHFTClArr->GetEntriesFast();
478 TClonesArray &verticesHFRef = *aodVerticesHFTClArr;
480 aodD0toKpiTClArr->Delete();
481 iD0toKpi = aodD0toKpiTClArr->GetEntriesFast();
484 aodJPSItoEleTClArr->Delete();
485 iJPSItoEle = aodJPSItoEleTClArr->GetEntriesFast();
488 aodCharm3ProngTClArr->Delete();
489 i3Prong = aodCharm3ProngTClArr->GetEntriesFast();
492 aodCharm4ProngTClArr->Delete();
493 i4Prong = aodCharm4ProngTClArr->GetEntriesFast();
496 aodDstarTClArr->Delete();
497 iDstar = aodDstarTClArr->GetEntriesFast();
500 aodCascadesTClArr->Delete();
501 iCascades = aodCascadesTClArr->GetEntriesFast();
504 aodLikeSign2ProngTClArr->Delete();
505 iLikeSign2Prong = aodLikeSign2ProngTClArr->GetEntriesFast();
508 aodLikeSign3ProngTClArr->Delete();
509 iLikeSign3Prong = aodLikeSign3ProngTClArr->GetEntriesFast();
512 TClonesArray &aodD0toKpiRef = *aodD0toKpiTClArr;
513 TClonesArray &aodJPSItoEleRef = *aodJPSItoEleTClArr;
514 TClonesArray &aodCharm3ProngRef = *aodCharm3ProngTClArr;
515 TClonesArray &aodCharm4ProngRef = *aodCharm4ProngTClArr;
516 TClonesArray &aodDstarRef = *aodDstarTClArr;
517 TClonesArray &aodCascadesRef = *aodCascadesTClArr;
518 TClonesArray &aodLikeSign2ProngRef = *aodLikeSign2ProngTClArr;
519 TClonesArray &aodLikeSign3ProngRef = *aodLikeSign3ProngTClArr;
527 Int_t iTrkP1,iTrkP2,iTrkN1,iTrkN2,iTrkSoftPi,trkEntries,iv0,nv0;
528 Double_t xdummy,ydummy,dcap1n1,dcap1n2,dcap2n1,dcap1p2,dcan1n2,dcap2n2,dcaV0,dcaCasc;
529 Bool_t okD0=kFALSE,okJPSI=kFALSE,ok3Prong=kFALSE,ok4Prong=kFALSE;
530 Bool_t okDstar=kFALSE,okD0fromDstar=kFALSE;
531 Bool_t okCascades=kFALSE;
532 AliESDtrack *postrack1 = 0;
533 AliESDtrack *postrack2 = 0;
534 AliESDtrack *negtrack1 = 0;
535 AliESDtrack *negtrack2 = 0;
536 AliESDtrack *trackPi = 0;
537 Double_t mompos1[3],mompos2[3],momneg1[3],momneg2[3];
548 AliDebug(2,Form(
" dca cut set to %f cm",dcaMax));
552 fBzkG = (Double_t)event->GetMagneticField();
560 trkEntries = (Int_t)event->GetNumberOfTracks();
561 AliDebug(1,Form(
" Number of tracks: %d",trkEntries));
564 nv0 = (Int_t)event->GetNumberOfV0s();
565 AliDebug(1,Form(
" Number of V0s: %d",nv0));
567 if( trkEntries<2 && (trkEntries<1 || nv0<1) ) {
568 AliDebug(1,Form(
" Not enough tracks: %d",trkEntries));
585 TObjArray seleTrksArray(trkEntries);
586 TObjArray tracksAtVertex(trkEntries);
587 UChar_t *seleFlags =
new UChar_t[trkEntries];
589 Int_t *evtNumber =
new Int_t[trkEntries];
592 AliDebug(1,Form(
" Selected tracks: %d",nSeleTrks));
596 TObjArray *twoTrackArray1 =
new TObjArray(2);
597 TObjArray *twoTrackArray2 =
new TObjArray(2);
598 TObjArray *twoTrackArrayV0 =
new TObjArray(2);
599 TObjArray *twoTrackArrayCasc =
new TObjArray(2);
600 TObjArray *threeTrackArray =
new TObjArray(3);
601 TObjArray *fourTrackArray =
new TObjArray(4);
604 Bool_t isLikeSign2Prong=kFALSE,isLikeSign3Prong=kFALSE;
611 Bool_t massCutOK=kTRUE;
614 for(iTrkP1=0; iTrkP1<nSeleTrks; iTrkP1++) {
620 postrack1 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkP1);
621 if(!TESTBIT(seleFlags[iTrkP1],
kBitDispl))
continue;
622 postrack1->GetPxPyPz(mompos1);
628 for(iv0=0; iv0<nv0; iv0++){
636 v0 = ((AliAODEvent*)event)->GetV0(iv0);
638 esdV0 = ((AliESDEvent*)event)->GetV0(iv0);
640 if ( (!v0 || !v0->IsA()->InheritsFrom(
"AliAODv0") ) &&
641 (!esdV0 || !esdV0->IsA()->InheritsFrom(
"AliESDv0") ) )
continue;
652 AliExternalTrackParam * posV0track;
653 AliExternalTrackParam * negV0track;
656 AliAODTrack *posVV0track = (AliAODTrack*)(v0->GetDaughter(0));
657 AliAODTrack *negVV0track = (AliAODTrack*)(v0->GetDaughter(1));
658 if( !posVV0track || !negVV0track )
continue;
663 if (posVV0track->GetID() == postrack1->GetID() ||
664 negVV0track->GetID() == postrack1->GetID())
continue;
666 if ( posVV0track->Charge() == negVV0track->Charge() )
continue;
668 if(!(posVV0track->GetStatus() & AliESDtrack::kTPCrefit) ||
669 !(negVV0track->GetStatus() & AliESDtrack::kTPCrefit))
continue;
671 Double_t xyz[3], pxpypz[3], cv[21]; Short_t sign;
672 posVV0track->PxPyPz(pxpypz); posVV0track->XvYvZv(xyz);
673 posVV0track->GetCovarianceXYZPxPyPz(cv); sign=posVV0track->Charge();
674 posV0track =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
675 negVV0track->PxPyPz(pxpypz); negVV0track->XvYvZv(xyz);
676 negVV0track->GetCovarianceXYZPxPyPz(cv); sign=negVV0track->Charge();
677 negV0track =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
679 AliESDtrack *posVV0track = (AliESDtrack*)(event->GetTrack( esdV0->GetPindex() ));
680 AliESDtrack *negVV0track = (AliESDtrack*)(event->GetTrack( esdV0->GetNindex() ));
681 if( !posVV0track || !negVV0track )
continue;
686 if (posVV0track->GetID() == postrack1->GetID() ||
687 negVV0track->GetID() == postrack1->GetID())
continue;
689 if ( posVV0track->Charge() == negVV0track->Charge() )
continue;
691 if(!(posVV0track->GetStatus() & AliESDtrack::kTPCrefit) ||
692 !(negVV0track->GetStatus() & AliESDtrack::kTPCrefit))
continue;
694 if (posVV0track->GetKinkIndex(0)>0 || negVV0track->GetKinkIndex(0)>0)
continue;
696 posV0track =
new AliExternalTrackParam(*posVV0track);
697 negV0track =
new AliExternalTrackParam(*negVV0track);
702 if( !posV0track || !negV0track ){
703 AliDebug(1,Form(
" Couldn't get the V0 daughters"));
708 twoTrackArrayV0->AddAt(posV0track,0);
709 twoTrackArrayV0->AddAt(negV0track,1);
712 dcaV0 = v0->DcaV0Daughters();
715 AliNeutralTrackParam *trackV0=NULL;
717 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
718 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
720 Double_t xyz[3], pxpypz[3];
722 esdV0->PxPyPz(pxpypz);
723 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
724 trackV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
729 twoTrackArrayCasc->AddAt(postrack1,0);
730 twoTrackArrayCasc->AddAt(trackV0,1);
732 AliAODVertex *vertexCasc = 0;
735 dcaCasc = postrack1->GetDCA(trackV0,
fBzkG,xdummy,ydummy);
740 Double_t pos[3],cov[6],chi2perNDF;
742 fV1->GetCovMatrix(cov);
743 chi2perNDF =
fV1->GetChi2toNDF();
744 vertexCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
748 delete posV0track; posV0track=NULL;
749 delete negV0track; negV0track=NULL;
750 delete trackV0; trackV0=NULL;
752 twoTrackArrayV0->Clear();
753 twoTrackArrayCasc->Clear();
758 ioCascade =
MakeCascade(twoTrackArrayCasc,event,vertexCasc,v0,dcaCasc,okCascades);
759 if(okCascades && ioCascade) {
764 UShort_t
id[2]={(UShort_t)postrack1->GetID(),(UShort_t)iv0};
768 AliAODVertex *vCasc =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexCasc);
769 rc->SetSecondaryVtx(vCasc);
770 vCasc->SetParent(rc);
772 AddRefs(vCasc,rc,event,twoTrackArrayCasc);
773 vCasc->AddDaughter(v0);
780 delete posV0track; posV0track=NULL;
781 delete negV0track; negV0track=NULL;
782 delete trackV0; trackV0=NULL;
783 twoTrackArrayV0->Clear();
784 twoTrackArrayCasc->Clear();
785 if(ioCascade) {
delete ioCascade; ioCascade=NULL; }
786 if(vertexCasc) {
delete vertexCasc; vertexCasc=NULL; }
794 AliDebug(1,Form(
" Not enough tracks: %d",trkEntries));
798 if(postrack1->Charge()<0 && !
fLikeSign)
continue;
801 for(iTrkN1=0; iTrkN1<nSeleTrks; iTrkN1++) {
806 if(iTrkN1==iTrkP1)
continue;
809 negtrack1 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN1);
811 if(negtrack1->Charge()>0 && !
fLikeSign)
continue;
813 if(!TESTBIT(seleFlags[iTrkN1],
kBitDispl))
continue;
816 if(evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
819 if(postrack1->Charge()==negtrack1->Charge()) {
820 isLikeSign2Prong=kTRUE;
822 if(iTrkN1<iTrkP1)
continue;
824 isLikeSign2Prong=kFALSE;
825 if(postrack1->Charge()<0 || negtrack1->Charge()>0)
continue;
827 if(evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
837 negtrack1->GetPxPyPz(momneg1);
840 dcap1n1 = postrack1->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
841 if(dcap1n1>dcaMax) { negtrack1=0;
continue; }
844 twoTrackArray1->AddAt(postrack1,0);
845 twoTrackArray1->AddAt(negtrack1,1);
848 twoTrackArray1->Clear();
855 io2Prong =
Make2Prong(twoTrackArray1,event,vertexp1n1,dcap1n1,okD0,okJPSI,okD0fromDstar);
857 if((
fD0toKpi && okD0) || (
fJPSItoEle && okJPSI) || (isLikeSign2Prong && (okD0 || okJPSI))) {
859 AliAODVertex *v2Prong =0x0;
860 if(!
fMakeReducedRHF)v2Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexp1n1);
861 if(!isLikeSign2Prong) {
870 rd->SetSecondaryVtx(v2Prong);
871 v2Prong->SetParent(rd);
872 AddRefs(v2Prong,rd,event,twoTrackArray1);
881 if(!okD0) v2Prong->SetParent(rd);
882 AddRefs(v2Prong,rd,event,twoTrackArray1);
893 rd->SetSecondaryVtx(v2Prong);
894 v2Prong->SetParent(rd);
895 AddRefs(v2Prong,rd,event,twoTrackArray1);
900 if(
fDstar && okD0fromDstar && !isLikeSign2Prong) {
905 vertexp1n1->AddDaughter(postrack1);
906 vertexp1n1->AddDaughter(negtrack1);
908 io2Prong->SetSecondaryVtx(vertexp1n1);
911 AliNeutralTrackParam *trackD0 =
new AliNeutralTrackParam(io2Prong);
914 for(iTrkSoftPi=0; iTrkSoftPi<nSeleTrks; iTrkSoftPi++) {
916 if(iTrkSoftPi==iTrkP1 || iTrkSoftPi==iTrkN1)
continue;
918 if(!TESTBIT(seleFlags[iTrkSoftPi],
kBitSoftPi))
continue;
921 if(evtNumber[iTrkP1]==evtNumber[iTrkSoftPi] ||
922 evtNumber[iTrkN1]==evtNumber[iTrkSoftPi] ||
923 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
928 trackD0->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
929 if(trackD0->GetSigmaY2()<0. || trackD0->GetSigmaZ2()<0.)
continue;
932 trackPi = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkSoftPi);
935 twoTrackArrayCasc->AddAt(trackPi,0);
936 twoTrackArrayCasc->AddAt(trackD0,1);
938 twoTrackArrayCasc->Clear();
943 AliAODVertex *vertexCasc = 0;
947 dcaCasc = trackPi->GetDCA(trackD0,
fBzkG,xdummy,ydummy);
952 Double_t pos[3],cov[6],chi2perNDF;
954 fV1->GetCovMatrix(cov);
955 chi2perNDF =
fV1->GetChi2toNDF();
956 vertexCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
960 twoTrackArrayCasc->Clear();
965 ioCascade =
MakeCascade(twoTrackArrayCasc,event,vertexCasc,io2Prong,dcaCasc,okDstar);
974 AliAODVertex *v2Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*vertexp1n1);
975 rd->SetSecondaryVtx(v2Prong);
976 v2Prong->SetParent(rd);
977 AddRefs(v2Prong,rd,event,twoTrackArray1);
985 AliAODVertex *vCasc = 0x0;
988 UShort_t idCasc[2]={(UShort_t)trackPi->GetID(),(UShort_t)(iD0toKpi-1)};
993 AliAODVertex *vCasc =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexCasc);
994 rc->SetSecondaryVtx(vCasc);
995 vCasc->SetParent(rc);
997 AddRefs(vCasc,rc,event,twoTrackArrayCasc);
998 vCasc->AddDaughter(rd);
1001 twoTrackArrayCasc->Clear();
1003 if(ioCascade) {
delete ioCascade; ioCascade=NULL;}
1004 delete vertexCasc; vertexCasc=NULL;
1007 if(trackD0) {
delete trackD0; trackD0=NULL;}
1010 if(io2Prong) {
delete io2Prong; io2Prong=NULL;}
1013 twoTrackArray1->Clear();
1015 (isLikeSign2Prong && !
f3Prong) ) {
1023 for(iTrkP2=iTrkP1+1; iTrkP2<nSeleTrks; iTrkP2++) {
1025 if(iTrkP2==iTrkP1 || iTrkP2==iTrkN1)
continue;
1030 postrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkP2);
1032 if(postrack2->Charge()<0)
continue;
1034 if(!TESTBIT(seleFlags[iTrkP2],
kBitDispl))
continue;
1037 if(!TESTBIT(seleFlags[iTrkP2],
kBit3Prong))
continue;
1038 if(!TESTBIT(seleFlags[iTrkP1],
kBit3Prong))
continue;
1039 if(!TESTBIT(seleFlags[iTrkN1],
kBit3Prong))
continue;
1042 if(evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1043 evtNumber[iTrkN1]==evtNumber[iTrkP2] ||
1044 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1047 if(isLikeSign2Prong) {
1049 if(postrack1->Charge()>0) {
1050 isLikeSign3Prong=kTRUE;
1055 isLikeSign3Prong=kFALSE;
1057 if(evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1058 evtNumber[iTrkN1]==evtNumber[iTrkP2] ||
1059 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1066 Bool_t okForLcTopKpi=kTRUE;
1067 Int_t pidLcStatus=3;
1071 okForLcTopKpi=kFALSE;
1075 okForLcTopKpi=kFALSE;
1079 okForLcTopKpi=kTRUE;
1084 okForLcTopKpi=kTRUE;
1089 Bool_t okForDsToKKpi=kTRUE;
1092 !TESTBIT(seleFlags[iTrkP2],
kBitKaonCompat) ) okForDsToKKpi=kFALSE;
1104 dcap2n1 = postrack2->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1105 if(dcap2n1>dcaMax) { postrack2=0;
continue; }
1106 dcap1p2 = postrack2->GetDCA(postrack1,
fBzkG,xdummy,ydummy);
1107 if(dcap1p2>dcaMax) { postrack2=0;
continue; }
1112 if(postrack2->Charge()>0) {
1113 threeTrackArray->AddAt(postrack1,0);
1114 threeTrackArray->AddAt(negtrack1,1);
1115 threeTrackArray->AddAt(postrack2,2);
1117 threeTrackArray->AddAt(negtrack1,0);
1118 threeTrackArray->AddAt(postrack1,1);
1119 threeTrackArray->AddAt(postrack2,2);
1122 postrack2->GetPxPyPz(mompos2);
1123 Double_t pxDau[3]={mompos1[0],momneg1[0],mompos2[0]};
1124 Double_t pyDau[3]={mompos1[1],momneg1[1],mompos2[1]};
1125 Double_t pzDau[3]={mompos1[2],momneg1[2],mompos2[2]};
1132 threeTrackArray->Clear();
1140 twoTrackArray2->AddAt(postrack2,0);
1141 twoTrackArray2->AddAt(negtrack1,1);
1144 twoTrackArray2->Clear();
1153 io3Prong =
Make3Prong(threeTrackArray,event,secVert3PrAOD,dispersion,vertexp1n1,vertexp2n1,dcap1n1,dcap2n1,dcap1p2,okForLcTopKpi,okForDsToKKpi,ok3Prong);
1155 AliAODVertex *v3Prong=0x0;
1156 if(!
fMakeReducedRHF)v3Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1157 if(!isLikeSign3Prong) {
1167 v3Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1168 rd->SetSecondaryVtx(v3Prong);
1169 v3Prong->SetParent(rd);
1170 AddRefs(v3Prong,rd,event,threeTrackArray);
1183 rd->SetSecondaryVtx(v3Prong);
1184 v3Prong->SetParent(rd);
1185 AddRefs(v3Prong,rd,event,threeTrackArray);
1191 if(io3Prong) {
delete io3Prong; io3Prong=NULL;}
1192 if(secVert3PrAOD) {
delete secVert3PrAOD; secVert3PrAOD=NULL;}
1198 && !isLikeSign2Prong && !isLikeSign3Prong
1200 && dcap1n1 < fCutsD0toKpipipi->GetDCACut()
1201 && dcap2n1 < fCutsD0toKpipipi->GetDCACut()) {
1211 threeTrackArray->AddAt(postrack1,0);
1212 threeTrackArray->AddAt(negtrack1,1);
1213 threeTrackArray->AddAt(postrack2,2);
1217 for(iTrkN2=iTrkN1+1; iTrkN2<nSeleTrks; iTrkN2++) {
1219 if(iTrkN2==iTrkP1 || iTrkN2==iTrkP2 || iTrkN2==iTrkN1)
continue;
1224 negtrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN2);
1226 if(negtrack2->Charge()>0)
continue;
1228 if(!TESTBIT(seleFlags[iTrkN2],
kBitDispl))
continue;
1230 if(evtNumber[iTrkP1]==evtNumber[iTrkN2] ||
1231 evtNumber[iTrkN1]==evtNumber[iTrkN2] ||
1232 evtNumber[iTrkP2]==evtNumber[iTrkN2] ||
1233 evtNumber[iTrkP1]==evtNumber[iTrkN1] ||
1234 evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1235 evtNumber[iTrkN1]==evtNumber[iTrkP2])
continue;
1248 dcap1n2 = postrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1250 dcap2n2 = postrack2->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1254 fourTrackArray->AddAt(postrack1,0);
1255 fourTrackArray->AddAt(negtrack1,1);
1256 fourTrackArray->AddAt(postrack2,2);
1257 fourTrackArray->AddAt(negtrack2,3);
1265 fourTrackArray->Clear();
1272 io4Prong =
Make4Prong(fourTrackArray,event,secVert4PrAOD,vertexp1n1,vertexp1n1p2,dcap1n1,dcap1n2,dcap2n1,dcap2n2,ok4Prong);
1279 AliAODVertex *v4Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*secVert4PrAOD);
1280 rd->SetSecondaryVtx(v4Prong);
1281 v4Prong->SetParent(rd);
1282 AddRefs(v4Prong,rd,event,fourTrackArray);
1286 if(io4Prong) {
delete io4Prong; io4Prong=NULL;}
1287 if(secVert4PrAOD) {
delete secVert4PrAOD; secVert4PrAOD=NULL;}
1288 fourTrackArray->Clear();
1293 threeTrackArray->Clear();
1294 delete vertexp1n1p2;
1303 twoTrackArray2->Clear();
1306 for(iTrkN2=iTrkN1+1; iTrkN2<nSeleTrks; iTrkN2++) {
1308 if(iTrkN2==iTrkP1 || iTrkN2==iTrkP2 || iTrkN2==iTrkN1)
continue;
1313 negtrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN2);
1315 if(negtrack2->Charge()>0)
continue;
1317 if(!TESTBIT(seleFlags[iTrkN2],
kBitDispl))
continue;
1320 if(!TESTBIT(seleFlags[iTrkN2],
kBit3Prong))
continue;
1321 if(!TESTBIT(seleFlags[iTrkP1],
kBit3Prong))
continue;
1322 if(!TESTBIT(seleFlags[iTrkN1],
kBit3Prong))
continue;
1325 if(evtNumber[iTrkP1]==evtNumber[iTrkN2] ||
1326 evtNumber[iTrkN1]==evtNumber[iTrkN2] ||
1327 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1330 if(isLikeSign2Prong) {
1332 if(postrack1->Charge()<0) {
1333 isLikeSign3Prong=kTRUE;
1338 isLikeSign3Prong=kFALSE;
1344 Bool_t okForLcTopKpi=kTRUE;
1345 Int_t pidLcStatus=3;
1349 okForLcTopKpi=kFALSE;
1353 okForLcTopKpi=kFALSE;
1357 okForLcTopKpi=kTRUE;
1362 okForLcTopKpi=kTRUE;
1367 Bool_t okForDsToKKpi=kTRUE;
1370 !TESTBIT(seleFlags[iTrkN2],
kBitKaonCompat) ) okForDsToKKpi=kFALSE;
1382 dcap1n2 = postrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1383 if(dcap1n2>dcaMax) { negtrack2=0;
continue; }
1384 dcan1n2 = negtrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1385 if(dcan1n2>dcaMax) { negtrack2=0;
continue; }
1387 threeTrackArray->AddAt(negtrack1,0);
1388 threeTrackArray->AddAt(postrack1,1);
1389 threeTrackArray->AddAt(negtrack2,2);
1394 negtrack2->GetPxPyPz(momneg2);
1395 Double_t pxDau[3]={momneg1[0],mompos1[0],momneg2[0]};
1396 Double_t pyDau[3]={momneg1[1],mompos1[1],momneg2[1]};
1397 Double_t pzDau[3]={momneg1[2],mompos1[2],momneg2[2]};
1402 threeTrackArray->Clear();
1408 twoTrackArray2->AddAt(postrack1,0);
1409 twoTrackArray2->AddAt(negtrack2,1);
1413 twoTrackArray2->Clear();
1420 io3Prong =
Make3Prong(threeTrackArray,event,secVert3PrAOD,dispersion,vertexp1n1,vertexp1n2,dcap1n1,dcap1n2,dcan1n2,okForLcTopKpi,okForDsToKKpi,ok3Prong);
1422 AliAODVertex *v3Prong = 0x0;
1423 if(!
fMakeReducedRHF) v3Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1424 if(!isLikeSign3Prong) {
1433 rd->SetSecondaryVtx(v3Prong);
1434 v3Prong->SetParent(rd);
1435 AddRefs(v3Prong,rd,event,threeTrackArray);
1447 rd->SetSecondaryVtx(v3Prong);
1448 v3Prong->SetParent(rd);
1449 AddRefs(v3Prong,rd,event,threeTrackArray);
1455 if(io3Prong) {
delete io3Prong; io3Prong=NULL;}
1456 if(secVert3PrAOD) {
delete secVert3PrAOD; secVert3PrAOD=NULL;}
1458 threeTrackArray->Clear();
1464 twoTrackArray2->Clear();
1477 AliDebug(1,Form(
" D0->Kpi in event = %d;",
1478 (Int_t)aodD0toKpiTClArr->GetEntriesFast()));
1481 AliDebug(1,Form(
" JPSI->ee in event = %d;",
1482 (Int_t)aodJPSItoEleTClArr->GetEntriesFast()));
1485 AliDebug(1,Form(
" Charm->3Prong in event = %d;",
1486 (Int_t)aodCharm3ProngTClArr->GetEntriesFast()));
1489 AliDebug(1,Form(
" Charm->4Prong in event = %d;\n",
1490 (Int_t)aodCharm4ProngTClArr->GetEntriesFast()));
1493 AliDebug(1,Form(
" D*->D0pi in event = %d;\n",
1494 (Int_t)aodDstarTClArr->GetEntriesFast()));
1497 AliDebug(1,Form(
" cascades -> v0 + track in event = %d;\n",
1498 (Int_t)aodCascadesTClArr->GetEntriesFast()));
1501 AliDebug(1,Form(
" Like-sign 2Prong in event = %d;\n",
1502 (Int_t)aodLikeSign2ProngTClArr->GetEntriesFast()));
1505 AliDebug(1,Form(
" Like-sign 3Prong in event = %d;\n",
1506 (Int_t)aodLikeSign3ProngTClArr->GetEntriesFast()));
1510 twoTrackArray1->Delete();
delete twoTrackArray1;
1511 twoTrackArray2->Delete();
delete twoTrackArray2;
1512 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1513 twoTrackArrayV0->Delete();
delete twoTrackArrayV0;
1514 threeTrackArray->Clear();
1515 threeTrackArray->Delete();
delete threeTrackArray;
1516 fourTrackArray->Delete();
delete fourTrackArray;
1517 delete [] seleFlags; seleFlags=NULL;
1518 if(evtNumber) {
delete [] evtNumber; evtNumber=NULL;}
1519 tracksAtVertex.Delete();
1522 seleTrksArray.Delete();
1533 const AliVEvent *event,
1534 const TObjArray *trkArray)
const
1558 const AliVEvent *event,
1559 const TObjArray *trkArray)
const
1564 Int_t nDg = v->GetNDaughters();
1566 if(nDg) dg = v->GetDaughter(0);
1570 Int_t nTrks = trkArray->GetEntriesFast();
1572 AliExternalTrackParam *track = 0;
1573 AliAODTrack *aodTrack = 0;
1576 for(Int_t i=0; i<nTrks; i++) {
1577 track = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
1578 id = (Int_t)track->GetID();
1581 aodTrack =
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[
id]));
1582 if(!aodTrack) AliFatal(
"Not a standard AOD");
1583 v->AddDaughter(aodTrack);
1597 TClonesArray *inputArray=(TClonesArray*)aod->GetList()->FindObject(
"VerticesHF");
1598 if(!inputArray)
return;
1600 AliAODTrack *track = 0;
1601 AliAODVertex *vertex = 0;
1603 Bool_t needtofix=kFALSE;
1604 for(Int_t iv=0; iv<inputArray->GetEntriesFast(); iv++) {
1605 vertex = (AliAODVertex*)inputArray->UncheckedAt(iv);
1606 for(Int_t
id=0;
id<vertex->GetNDaughters();
id++) {
1607 track = (AliAODTrack*)vertex->GetDaughter(
id);
1608 if(!track->GetStatus()) needtofix=kTRUE;
1610 if(needtofix)
break;
1613 if(!needtofix)
return;
1616 printf(
"Fixing references\n");
1622 for(Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
1623 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
1624 if(!track) AliFatal(
"Not a standard AOD");
1627 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
1630 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
1633 Double_t covtest[21];
1634 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
1637 Int_t ind = (Int_t)track->GetID();
1638 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
1642 Int_t ids[4]={-1,-1,-1,-1};
1643 for(Int_t iv=0; iv<inputArray->GetEntriesFast(); iv++) {
1644 Bool_t cascade=kFALSE;
1645 vertex = (AliAODVertex*)inputArray->UncheckedAt(iv);
1647 Int_t nDgs = vertex->GetNDaughters();
1648 for(
id=0;
id<nDgs;
id++) {
1649 track = (AliAODTrack*)vertex->GetDaughter(
id);
1650 if(track->Charge()==0) {cascade=kTRUE;
continue;}
1651 ids[id]=(Int_t)track->GetID();
1652 vertex->RemoveDaughter(track);
1654 if(cascade)
continue;
1655 for(
id=0;
id<nDgs;
id++) {
1656 if (ids[
id]>-1 && ids[
id] < fAODMapSize) {
1657 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(
fAODMap[ids[
id]]));
1658 if(!track) AliFatal(
"Not a standard AOD");
1659 vertex->AddDaughter(track);
1675 TObjArray *threeTrackArray =
new TObjArray(3);
1678 if(!track1)
return kFALSE;
1680 if(!track2)
return kFALSE;
1681 AliESDtrack *postrack1 = 0;
1682 AliESDtrack *negtrack1 = 0;
1683 postrack1 =
new AliESDtrack(track1);
1684 negtrack1 =
new AliESDtrack(track2);
1687 Double_t xdummy, ydummy;
1688 fBzkG = (Double_t)event->GetMagneticField();
1689 Double_t dca12 = postrack1->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1691 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1694 vprimary->GetXYZ(pos);
1695 vprimary->GetCovarianceMatrix(cov);
1696 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1697 fV1->GetCovMatrix(cov);
1701 if(!track3)
return kFALSE;
1702 AliESDtrack *esdt3 =
new AliESDtrack(track3);
1706 threeTrackArray->AddAt(postrack1,0);
1707 threeTrackArray->AddAt(negtrack1,1);
1708 threeTrackArray->AddAt(esdt3,2);
1709 dca2 = esdt3->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1710 dca3 = esdt3->GetDCA(postrack1,
fBzkG,xdummy,ydummy);
1711 Double_t dispersion;
1714 if (!secVert3PrAOD) {
1715 threeTrackArray->Clear();
1716 threeTrackArray->Delete();
delete threeTrackArray;
1718 delete postrack1; postrack1=NULL;
1719 delete negtrack1; negtrack1=NULL;
1720 delete esdt3; esdt3=NULL;
1726 rd=
Make3Prong(threeTrackArray, event, secVert3PrAOD,dispersion, vtxRec, vertexp2n1, dca12, dca2, dca3, rd);
1729 threeTrackArray->Clear();
1730 threeTrackArray->Delete();
delete threeTrackArray;
1732 delete postrack1; postrack1=NULL;
1733 delete negtrack1; negtrack1=NULL;
1734 delete esdt3; esdt3=NULL;
1745 Double_t dispersion;
1746 TObjArray *twoTrackArray1 =
new TObjArray(2);
1749 if(!track1)
return kFALSE;
1751 if(!track2)
return kFALSE;
1753 AliESDtrack *esdt1 = 0;
1754 AliESDtrack *esdt2 = 0;
1755 esdt1 =
new AliESDtrack(track1);
1756 esdt2 =
new AliESDtrack(track2);
1758 twoTrackArray1->AddAt(esdt1,0);
1759 twoTrackArray1->AddAt(esdt2,1);
1761 Double_t xdummy, ydummy;
1762 fBzkG = (Double_t)event->GetMagneticField();
1763 Double_t dca12 = esdt1->GetDCA(esdt2,
fBzkG,xdummy,ydummy);
1764 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1767 vprimary->GetXYZ(pos);
1768 vprimary->GetCovarianceMatrix(cov);
1769 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1770 fV1->GetCovMatrix(cov);
1776 twoTrackArray1->Clear();
1777 twoTrackArray1->Delete();
delete twoTrackArray1;
1779 delete esdt1; esdt1=NULL;
1780 delete esdt2; esdt2=NULL;
1783 Bool_t okJPSI=kFALSE;
1784 Bool_t okD0FromDstar=kFALSE;
1785 Bool_t refill =kTRUE;
1786 rd=
Make2Prong(twoTrackArray1, event, vtxRec, dca12, okD0, okJPSI, okD0FromDstar,refill,rd);
1790 twoTrackArray1->Clear();
1791 twoTrackArray1->Delete();
delete twoTrackArray1;
1792 delete esdt1; esdt1=NULL;
1793 delete esdt2; esdt2=NULL;
1802 TObjArray *twoTrackArrayCasc =
new TObjArray(2);
1804 AliAODTrack *trackB =(AliAODTrack*)event->GetTrack(
fAODMap[rCasc->
GetProngID(0)]);
1805 if(!trackB)
return kFALSE;
1807 AliNeutralTrackParam *trackV0=NULL;
1812 TClonesArray *inputArrayD0=(TClonesArray*)event->GetList()->FindObject(
"D0toKpi");
1813 if(!inputArrayD0)
return kFALSE;
1815 if(!trackD0)
return kFALSE;
1818 trackV0 =
new AliNeutralTrackParam(trackD0);
1821 v0 = ((AliAODEvent*)event)->GetV0(rCasc->
GetProngID(1));
1822 if(!v0)
return kFALSE;
1824 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
1825 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
1828 AliESDtrack *esdB =
new AliESDtrack(trackB);
1830 twoTrackArrayCasc->AddAt(esdB,0);
1831 twoTrackArrayCasc->AddAt(trackV0,1);
1833 fBzkG = (Double_t)event->GetMagneticField();
1834 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1838 vprimary->GetXYZ(pos);
1839 vprimary->GetCovarianceMatrix(cov);
1840 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1841 fV1->GetCovMatrix(cov);
1844 AliAODVertex *vtxCasc = 0x0;
1845 Double_t chi2perNDF =
fV1->GetChi2toNDF();
1846 vtxCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
1848 twoTrackArrayCasc->Clear();
1849 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1851 delete esdB; esdB=NULL;
1852 delete vtxCasc;vtxCasc=NULL;
1853 delete trackB; trackB=NULL;
1854 delete trackV0; trackV0=NULL;
1860 vtxCasc->SetParent(rCasc);
1861 rCasc->SetSecondaryVtx(vtxCasc);
1863 if(DStar)vtxCasc->AddDaughter(trackD0);
1864 else vtxCasc->AddDaughter(v0);
1867 Bool_t refill =kTRUE;
1868 Bool_t dummy1, dummy2, dummy3;
1870 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
1872 esdB->PropagateToDCA(vtxCasc,
fBzkG,kVeryBig);
1873 trackV0->PropagateToDCA(vtxCasc,
fBzkG,kVeryBig);
1874 Double_t momentum[3];
1875 esdB->GetPxPyPz(momentum);
1876 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
1877 trackV0->GetPxPyPz(momentum);
1878 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
1880 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArrayCasc,event);
1883 delete vtxCasc; vtxCasc=NULL;
1884 twoTrackArrayCasc->Clear();
1885 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1886 delete esdB; esdB=NULL;
1887 delete trackV0; trackV0=NULL;
1891 Double_t d0z0[2],covd0z0[3];
1892 esdB->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1894 d0err[0] = TMath::Sqrt(covd0z0[0]);
1895 trackV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1897 d0err[1] = TMath::Sqrt(covd0z0[0]);
1898 rCasc->SetPxPyPzProngs(2,px,py,pz);
1900 rCasc->Setd0Prongs(2,d0);
1902 rCasc->SetCharge(esdB->Charge());
1904 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
1905 if(esdB->GetStatus()&AliESDtrack::kESDpid) esdB->GetESDpid(esdpid0);
1906 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
1907 Double_t esdpid[10];
1908 for(Int_t i=0;i<5;i++) {
1909 esdpid[i] = esdpid0[i];
1910 esdpid[5+i] = esdpid1[i];
1912 rCasc->SetPID(2,esdpid);
1917 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
1918 twoTrackArrayCasc->Clear();
1919 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1920 delete esdB; esdB=NULL;
1921 delete trackV0; trackV0=NULL;
1927 TObjArray *twoTrackArray,AliVEvent *event,
1928 AliAODVertex *secVert,
1939 Bool_t dummy1,dummy2,dummy3;
1945 dummy1,dummy2,dummy3);
1946 if(!theCascade)
return 0x0;
1949 AliESDtrack *trackPi = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
1950 theCascade->SetCharge(trackPi->Charge());
1956 Int_t idSoftPi=(Int_t)trackPi->GetID();
1958 AliAODTrack* trackPiAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idSoftPi]));
1959 if(!trackPiAOD) AliFatal(
"Not a standard AOD");
1960 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPiAOD);
1963 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPi);
1965 tmpCascade->GetSecondaryVtx()->AddDaughter(rd2Prong);
1967 AliAODVertex *primVertexAOD=0;
1979 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
1981 delete tmpCascade; tmpCascade=NULL;
1985 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
1995 TObjArray *twoTrackArray,AliVEvent *event,
1996 AliAODVertex *secVert,
2007 Bool_t dummy1,dummy2,dummy3;
2013 dummy1,dummy2,dummy3);
2014 if(!theCascade)
return 0x0;
2017 AliESDtrack *trackBachelor = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2018 theCascade->SetCharge(trackBachelor->Charge());
2025 Int_t idBachelor=(Int_t)trackBachelor->GetID();
2026 if (idBachelor > -1 && idBachelor <
fAODMapSize) {
2027 AliAODTrack* trackBachelorAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idBachelor]));
2028 if(!trackBachelorAOD) AliFatal(
"Not a standard AOD");
2029 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelorAOD);
2032 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelor);
2034 tmpCascade->GetSecondaryVtx()->AddDaughter(v0);
2036 AliAODVertex *primVertexAOD=0;
2040 if(!primVertexAOD) primVertexAOD = (AliAODVertex*)event->GetPrimaryVertex();
2052 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
2054 delete tmpCascade; tmpCascade=NULL;
2055 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2063 TObjArray *twoTrackArray,AliVEvent *event,
2064 AliAODVertex *secVert,Double_t dca,
2065 Bool_t &okD0,Bool_t &okJPSI,
2072 okD0=kFALSE; okJPSI=kFALSE; okD0fromDstar=kFALSE;
2074 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
2075 AliESDtrack *postrack = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2076 AliESDtrack *negtrack = (AliESDtrack*)twoTrackArray->UncheckedAt(1);
2079 postrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2080 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2082 Double_t momentum[3];
2083 postrack->GetPxPyPz(momentum);
2084 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2085 negtrack->GetPxPyPz(momentum);
2086 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2090 Bool_t okMassCut=kFALSE;
2101 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArray,event);
2102 if(!primVertexAOD)
return 0x0;
2104 Double_t d0z0[2],covd0z0[3];
2105 postrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2107 d0err[0] = TMath::Sqrt(covd0z0[0]);
2108 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2110 d0err[1] = TMath::Sqrt(covd0z0[0]);
2116 UShort_t
id[2]={(UShort_t)postrack->GetID(),(UShort_t)negtrack->GetID()};
2118 if(postrack->Charge()!=0 && negtrack->Charge()!=0) {
2142 the2Prong->SetSecondaryVtx(secVert);
2143 secVert->SetParent(the2Prong);
2146 the2Prong->SetPxPyPzProngs(2,px,py,pz);
2147 the2Prong->SetDCA(dca);
2148 the2Prong->Setd0Prongs(2,d0);
2150 the2Prong->SetCharge(0);
2152 delete primVertexAOD; primVertexAOD=NULL;
2160 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2161 if(postrack->GetStatus()&AliESDtrack::kESDpid) postrack->GetESDpid(esdpid0);
2162 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2163 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2164 Double_t esdpid[10];
2165 for(Int_t i=0;i<5;i++) {
2166 esdpid[i] = esdpid0[i];
2167 esdpid[5+i] = esdpid1[i];
2169 the2Prong->SetPID(2,esdpid);
2174 TObjArray *threeTrackArray,AliVEvent *event,
2175 AliAODVertex *secVert,Double_t dispersion,
2176 const AliAODVertex *vertexp1n1,
const AliAODVertex *vertexp2n1,
2177 Double_t dcap1n1,Double_t dcap2n1,Double_t dcap1p2,
2178 Bool_t useForLc, Bool_t useForDs, Bool_t &ok3Prong)
2186 if(!secVert || !vertexp1n1 || !vertexp2n1)
return 0x0;
2188 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2189 Double_t momentum[3];
2192 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2193 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2194 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2196 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2197 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2198 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2199 postrack1->GetPxPyPz(momentum);
2200 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2201 negtrack->GetPxPyPz(momentum);
2202 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2203 postrack2->GetPxPyPz(momentum);
2204 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2207 Bool_t okMassCut=kFALSE;
2216 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2217 if(!primVertexAOD)
return 0x0;
2219 Double_t d0z0[2],covd0z0[3];
2220 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2222 d0err[0] = TMath::Sqrt(covd0z0[0]);
2223 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2225 d0err[1] = TMath::Sqrt(covd0z0[0]);
2226 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2228 d0err[2] = TMath::Sqrt(covd0z0[0]);
2232 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2233 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2234 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]));
2235 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]));
2236 Short_t
charge=(Short_t)(postrack1->Charge()+postrack2->Charge()+negtrack->Charge());
2237 AliAODRecoDecayHF3Prong *the3Prong =
new AliAODRecoDecayHF3Prong(secVert,px,py,pz,d0,d0err,dca,dispersion,dist12,dist23,charge);
2239 UShort_t
id[3]={(UShort_t)postrack1->GetID(),(UShort_t)negtrack->GetID(),(UShort_t)postrack2->GetID()};
2242 delete primVertexAOD; primVertexAOD=NULL;
2275 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2276 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2277 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2278 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2279 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2280 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2282 Double_t esdpid[15];
2283 for(Int_t i=0;i<5;i++) {
2284 esdpid[i] = esdpid0[i];
2285 esdpid[5+i] = esdpid1[i];
2286 esdpid[10+i] = esdpid2[i];
2288 the3Prong->SetPID(3,esdpid);
2294 TObjArray *threeTrackArray,AliVEvent *event,
2295 AliAODVertex *secVert,Double_t dispersion,
2296 Double32_t dist12, Double32_t dist23,
2297 Double_t dcap1n1,Double_t dcap2n1,Double_t dcap1p2,
2309 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2310 Double_t momentum[3];
2313 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2314 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2315 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2317 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2318 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2319 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2320 postrack1->GetPxPyPz(momentum);
2321 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2322 negtrack->GetPxPyPz(momentum);
2323 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2324 postrack2->GetPxPyPz(momentum);
2325 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2327 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2328 if(!primVertexAOD)
return 0x0;
2329 Double_t d0z0[2],covd0z0[3];
2330 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2332 d0err[0] = TMath::Sqrt(covd0z0[0]);
2333 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2335 d0err[1] = TMath::Sqrt(covd0z0[0]);
2336 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2338 d0err[2] = TMath::Sqrt(covd0z0[0]);
2340 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2341 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2342 Short_t
charge=(Short_t)(postrack1->Charge()+postrack2->Charge()+negtrack->Charge());
2344 rd->SetSecondaryVtx(secVert);
2345 secVert->SetParent(rd);
2348 rd->SetPxPyPzProngs(3,px,py,pz);
2350 rd->Setd0Prongs(3,d0);
2352 rd->SetCharge(charge);
2355 delete primVertexAOD; primVertexAOD=NULL;
2362 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2363 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2364 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2365 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2366 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2367 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2369 Double_t esdpid[15];
2370 for(Int_t i=0;i<5;i++) {
2371 esdpid[i] = esdpid0[i];
2372 esdpid[5+i] = esdpid1[i];
2373 esdpid[10+i] = esdpid2[i];
2375 rd->SetPID(3,esdpid);
2380 TObjArray *fourTrackArray,AliVEvent *event,
2381 AliAODVertex *secVert,
2382 const AliAODVertex *vertexp1n1,
2383 const AliAODVertex *vertexp1n1p2,
2384 Double_t dcap1n1,Double_t dcap1n2,
2385 Double_t dcap2n1,Double_t dcap2n2,
2394 if(!secVert || !vertexp1n1 || !vertexp1n1p2)
return 0x0;
2396 Double_t px[4],py[4],pz[4],d0[4],d0err[4];
2398 AliESDtrack *postrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(0);
2399 AliESDtrack *negtrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(1);
2400 AliESDtrack *postrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(2);
2401 AliESDtrack *negtrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(3);
2403 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2404 negtrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2405 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2406 negtrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2408 Double_t momentum[3];
2409 postrack1->GetPxPyPz(momentum);
2410 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2411 negtrack1->GetPxPyPz(momentum);
2412 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2413 postrack2->GetPxPyPz(momentum);
2414 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2415 negtrack2->GetPxPyPz(momentum);
2416 px[3] = momentum[0]; py[3] = momentum[1]; pz[3] = momentum[2];
2419 Bool_t okMassCut=kFALSE;
2431 AliAODVertex *primVertexAOD =
PrimaryVertex(fourTrackArray,event);
2432 if(!primVertexAOD)
return 0x0;
2434 Double_t d0z0[2],covd0z0[3];
2435 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2437 d0err[0] = TMath::Sqrt(covd0z0[0]);
2438 negtrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2440 d0err[1] = TMath::Sqrt(covd0z0[0]);
2441 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2443 d0err[2] = TMath::Sqrt(covd0z0[0]);
2444 negtrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2446 d0err[3] = TMath::Sqrt(covd0z0[0]);
2450 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2451 Double_t dca[6]={dcap1n1,0.,dcap1n2,dcap2n1,0.,dcap2n2};
2452 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]));
2453 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]));
2454 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]));
2456 AliAODRecoDecayHF4Prong *the4Prong =
new AliAODRecoDecayHF4Prong(secVert,px,py,pz,d0,d0err,dca,dist12,dist3,dist4,charge);
2458 UShort_t
id[4]={(UShort_t)postrack1->GetID(),(UShort_t)negtrack1->GetID(),(UShort_t)postrack2->GetID(),(UShort_t)negtrack2->GetID()};
2461 delete primVertexAOD; primVertexAOD=NULL;
2472 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2473 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2474 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2475 if(negtrack1->GetStatus()&AliESDtrack::kESDpid) negtrack1->GetESDpid(esdpid1);
2476 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2477 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2478 Double_t esdpid3[5]={0.,0.,0.,0.,0.};
2479 if(negtrack2->GetStatus()&AliESDtrack::kESDpid) negtrack2->GetESDpid(esdpid3);
2481 Double_t esdpid[20];
2482 for(Int_t i=0;i<5;i++) {
2483 esdpid[i] = esdpid0[i];
2484 esdpid[5+i] = esdpid1[i];
2485 esdpid[10+i] = esdpid2[i];
2486 esdpid[15+i] = esdpid3[i];
2488 the4Prong->SetPID(4,esdpid);
2499 AliAODTrack *track=0;
2501 for(Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
2502 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
2503 if(!track) AliFatal(
"Not a standard AOD");
2505 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
2508 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
2511 Double_t covtest[21];
2512 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
2515 Int_t ind = (Int_t)track->GetID();
2516 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
2522 AliVEvent *event)
const
2527 AliESDVertex *vertexESD = 0;
2528 AliAODVertex *vertexAOD = 0;
2534 vertexESD =
new AliESDVertex(*
fV1);
2539 Int_t nTrks = trkArray->GetEntriesFast();
2540 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
2545 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraint")) {
2546 Float_t diamondcovxy[3];
2547 event->GetDiamondCovXY(diamondcovxy);
2548 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
2549 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
2550 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
2551 vertexer->SetVtxStart(diamond);
2552 delete diamond; diamond=NULL;
2553 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraintOnlyFitter"))
2554 vertexer->SetOnlyFitter();
2556 Int_t skipped[1000];
2557 Int_t nTrksToSkip=0,id;
2558 AliExternalTrackParam *t = 0;
2559 for(Int_t i=0; i<nTrks; i++) {
2560 t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
2561 id = (Int_t)t->GetID();
2563 skipped[nTrksToSkip++] = id;
2568 Double_t covtest[21];
2569 for(Int_t j=0; j<
event->GetNumberOfTracks(); j++) {
2570 AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
2571 if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
2572 id = (Int_t)vtrack->GetID();
2574 skipped[nTrksToSkip++] = id;
2578 for(Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
2580 vertexer->SetSkipTracks(nTrksToSkip,skipped);
2581 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
2586 TObjArray rmArray(nTrks);
2587 UShort_t *rmId =
new UShort_t[nTrks];
2588 AliESDtrack *esdTrack = 0;
2590 for(Int_t i=0; i<nTrks; i++) {
2591 t = (AliESDtrack*)trkArray->UncheckedAt(i);
2592 esdTrack =
new AliESDtrack(*t);
2593 rmArray.AddLast(esdTrack);
2594 if(esdTrack->GetID()>=0) {
2595 rmId[i]=(UShort_t)esdTrack->GetID();
2600 Float_t diamondxy[2]={
static_cast<Float_t
>(
event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
2601 vertexESD = vertexer->RemoveTracksFromVertex(
fV1,&rmArray,rmId,diamondxy);
2602 delete [] rmId; rmId=NULL;
2607 if(!vertexESD)
return vertexAOD;
2608 if(vertexESD->GetNContributors()<=0) {
2610 delete vertexESD; vertexESD=NULL;
2614 delete vertexer; vertexer=NULL;
2619 Double_t pos[3],cov[6],chi2perNDF;
2620 vertexESD->GetXYZ(pos);
2621 vertexESD->GetCovMatrix(cov);
2622 chi2perNDF = vertexESD->GetChi2toNDF();
2623 delete vertexESD; vertexESD=NULL;
2625 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF);
2636 printf(
"Secondary vertex with Kalman filter package (AliKFParticle)\n");
2638 printf(
"Secondary vertex with AliVertexerTracks\n");
2643 printf(
"Reconstruct D0->Kpi candidates with cuts:\n");
2647 printf(
"Reconstruct D*->D0pi candidates with cuts:\n");
2649 printf(
" Reconstruct a secondary vertex for the D*\n");
2651 printf(
" Assume the D* comes from the primary vertex\n");
2656 printf(
"Reconstruct J/psi from B candidates with cuts:\n");
2660 printf(
"Reconstruct 3 prong candidates.\n");
2661 printf(
" D+->Kpipi cuts:\n");
2663 printf(
" Ds->KKpi cuts:\n");
2665 printf(
" Lc->pKpi cuts:\n");
2669 printf(
"Reconstruct 4 prong candidates.\n");
2670 printf(
" D0->Kpipipi cuts:\n");
2674 printf(
"Reconstruct cascades candidates formed with v0s.\n");
2675 printf(
" Lc -> k0s P & Lc -> L Pi cuts:\n");
2683 Double_t &dispersion,Bool_t useTRefArray)
const
2688 AliESDVertex *vertexESD = 0;
2689 AliAODVertex *vertexAOD = 0;
2694 vertexESD = (AliESDVertex*)
fVertexerTracks->VertexForSelectedESDTracks(trkArray);
2696 if(!vertexESD)
return vertexAOD;
2698 if(vertexESD->GetNContributors()!=trkArray->GetEntriesFast()) {
2700 delete vertexESD; vertexESD=NULL;
2704 Double_t vertRadius2=vertexESD->GetX()*vertexESD->GetX()+vertexESD->GetY()*vertexESD->GetY();
2707 delete vertexESD; vertexESD=NULL;
2713 AliKFParticle::SetField(
fBzkG);
2715 AliKFVertex vertexKF;
2717 Int_t nTrks = trkArray->GetEntriesFast();
2718 for(Int_t i=0; i<nTrks; i++) {
2719 AliESDtrack *esdTrack = (AliESDtrack*)trkArray->At(i);
2720 AliKFParticle daughterKF(*esdTrack,211);
2721 vertexKF.AddDaughter(daughterKF);
2723 vertexESD =
new AliESDVertex(vertexKF.Parameters(),
2724 vertexKF.CovarianceMatrix(),
2726 vertexKF.GetNContributors());
2731 Double_t pos[3],cov[6],chi2perNDF;
2732 vertexESD->GetXYZ(pos);
2733 vertexESD->GetCovMatrix(cov);
2734 chi2perNDF = vertexESD->GetChi2toNDF();
2735 dispersion = vertexESD->GetDispersion();
2736 delete vertexESD; vertexESD=NULL;
2738 Int_t nprongs= (useTRefArray ? 0 : trkArray->GetEntriesFast());
2739 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
2748 Int_t retval=kFALSE;
2749 Double_t momentum[3];
2750 Double_t px[3],py[3],pz[3];
2751 for(Int_t iTrack=0; iTrack<3; iTrack++){
2752 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2753 track->GetPxPyPz(momentum);
2754 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2766 Int_t retval=kFALSE;
2767 Double_t momentum[3];
2768 Double_t px[4],py[4],pz[4];
2770 for(Int_t iTrack=0; iTrack<4; iTrack++){
2771 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2772 track->GetPxPyPz(momentum);
2773 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2785 Int_t retval=kFALSE;
2786 Double_t momentum[3];
2787 Double_t px[2],py[2],pz[2];
2789 for(Int_t iTrack=0; iTrack<2; iTrack++){
2790 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2791 track->GetPxPyPz(momentum);
2792 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2807 Double_t minv2,mrange;
2808 Double_t lolim,hilim;
2810 Bool_t retval=kFALSE;
2812 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
2817 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
2822 pdg2[0]=211; pdg2[1]=321;
2824 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2828 pdg2[0]=321; pdg2[1]=211;
2830 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2846 Double_t minv2,mrange;
2847 Double_t lolim,hilim;
2849 Bool_t retval=kFALSE;
2851 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
2856 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
2862 pdg2[0]=11; pdg2[1]=11;
2864 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2881 Double_t minv2,mrange;
2882 Double_t lolim,hilim;
2884 Bool_t retval=kFALSE;
2887 fMassCalc3->SetPxPyPzProngs(nprongs,px,py,pz);
2895 if(
fMassCalc3->Pt2() < minPt*minPt)
return retval;
2900 pdg3[0]=211; pdg3[1]=321; pdg3[2]=211;
2902 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2910 pdg3[0]=321; pdg3[1]=321; pdg3[2]=211;
2912 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2916 pdg3[0]=211; pdg3[1]=321; pdg3[2]=321;
2918 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2927 pdg3[0]=2212; pdg3[1]=321; pdg3[2]=211;
2929 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2935 pdg3[0]=211; pdg3[1]=321; pdg3[2]=2212;
2937 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2955 Double_t minv2,mrange;
2956 Double_t lolim,hilim;
2958 Bool_t retval=kFALSE;
2960 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
2965 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
2967 pdg2[0]=211; pdg2[1]=421;
2972 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2989 Double_t minv2,mrange;
2990 Double_t lolim,hilim;
2992 Bool_t retval=kFALSE;
2995 fMassCalc4->SetPxPyPzProngs(nprongs,px,py,pz);
3000 if(
fMassCalc4->Pt2() < minPt*minPt)
return retval;
3006 pdg4[0]=321; pdg4[1]=211; pdg4[2]=211; pdg4[3]=211;
3008 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3013 pdg4[0]=211; pdg4[1]=321; pdg4[2]=211; pdg4[3]=211;
3015 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3020 pdg4[0]=211; pdg4[1]=211; pdg4[2]=321; pdg4[3]=211;
3022 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3027 pdg4[0]=211; pdg4[1]=211; pdg4[2]=211; pdg4[3]=321;
3029 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3045 Double_t minv2,mrange;
3046 Double_t lolim,hilim;
3048 Bool_t retval=kFALSE;
3050 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3056 pdg2[0]=2212;pdg2[1]=310;
3058 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3062 pdg2[0]=211;pdg2[1]=3122;
3064 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3074 TObjArray &seleTrksArray,
3075 TObjArray &tracksAtVertex,
3077 UChar_t *seleFlags,Int_t *evtNumber)
3086 const AliVVertex *vprimary =
event->GetPrimaryVertex();
3092 UShort_t *indices = 0;
3093 Double_t pos[3],cov[6];
3094 const Int_t entries =
event->GetNumberOfTracks();
3095 AliCentrality* cent;
3098 fV1 =
new AliESDVertex(*((AliESDVertex*)vprimary));
3099 cent=((AliESDEvent*)event)->GetCentrality();
3101 vprimary->GetXYZ(pos);
3102 vprimary->GetCovarianceMatrix(cov);
3103 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
3104 if(entries<=0)
return;
3105 indices =
new UShort_t[entries];
3106 memset(indices,0,
sizeof(UShort_t)*entries);
3110 cent=((AliAODEvent*)event)->GetCentrality();
3112 Float_t centperc=cent->GetCentralityPercentile(
"V0M");
3114 Bool_t okDisplaced=kFALSE,okSoftPi=kFALSE,okFor3Prong=kFALSE;
3118 for(Int_t i=0; i<entries; i++) {
3120 track = (AliVTrack*)event->GetTrack(i);
3123 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
3126 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
3130 if(track->GetID()<0)
continue;
3133 Double_t covtest[21];
3134 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
3138 AliAODTrack *aodt = (AliAODTrack*)track;
3139 if(aodt->GetUsedForPrimVtxFit()) {
3140 indices[nindices]=aodt->GetID(); nindices++;
3142 Int_t ind = (Int_t)aodt->GetID();
3146 AliESDtrack *esdt = 0;
3149 esdt = (AliESDtrack*)track;
3151 esdt =
new AliESDtrack(track);
3155 okDisplaced=kFALSE; okSoftPi=kFALSE; okFor3Prong=kFALSE;
3157 evtNumber[i]=((AliMixedEvent*)event)->EventIndex(i);
3158 const AliVVertex* eventVtx=((AliMixedEvent*)event)->GetEventVertex(i);
3159 Double_t vtxPos[3],primPos[3],primCov[6],trasl[3];
3160 eventVtx->GetXYZ(vtxPos);
3161 vprimary->GetXYZ(primPos);
3162 eventVtx->GetCovarianceMatrix(primCov);
3163 for(Int_t ind=0;ind<3;ind++){
3164 trasl[ind]=vtxPos[ind]-primPos[ind];
3167 Bool_t isTransl=esdt->Translate(trasl,primCov);
3175 if(
SingleTrkCuts(esdt,centperc,okDisplaced,okSoftPi,okFor3Prong) && nSeleTrks<trkEntries) {
3176 esdt->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
3177 seleTrksArray.AddLast(esdt);
3178 tracksAtVertex.AddLast(
new AliExternalTrackParam(*esdt));
3179 seleFlags[nSeleTrks]=0;
3180 if(okDisplaced) SETBIT(seleFlags[nSeleTrks],
kBitDispl);
3181 if(okFor3Prong) SETBIT(seleFlags[nSeleTrks],
kBit3Prong);
3182 if(okSoftPi) SETBIT(seleFlags[nSeleTrks],
kBitSoftPi);
3188 Bool_t useTPC=kTRUE;
3190 Double_t nsigmatofPi=
fPidResponse->NumberOfSigmasTOF(esdt,AliPID::kPion);
3191 if(nsigmatofPi>-990. && (nsigmatofPi<-fnSigmaTOFPionLow || nsigmatofPi>
fnSigmaTOFPionHi)){
3194 Double_t nsigmatofK=
fPidResponse->NumberOfSigmasTOF(esdt,AliPID::kKaon);
3195 if(nsigmatofK>-990. && (nsigmatofK<-fnSigmaTOFKaonLow || nsigmatofK>
fnSigmaTOFKaonHi)){
3198 Double_t nsigmatofP=
fPidResponse->NumberOfSigmasTOF(esdt,AliPID::kProton);
3199 if(nsigmatofP>-990. && (nsigmatofP<-fnSigmaTOFProtonLow || nsigmatofP>
fnSigmaTOFProtonHi)){
3205 Double_t nsigmatpcPi=
fPidResponse->NumberOfSigmasTPC(esdt,AliPID::kPion);
3206 if(nsigmatpcPi>-990. && (nsigmatpcPi<-fnSigmaTPCPionLow || nsigmatpcPi>
fnSigmaTPCPionHi)){
3209 Double_t nsigmatpcK=
fPidResponse->NumberOfSigmasTPC(esdt,AliPID::kKaon);
3210 if(nsigmatpcK>-990. && (nsigmatpcK<-fnSigmaTPCKaonLow || nsigmatpcK>
fnSigmaTPCKaonHi)){
3213 Double_t nsigmatpcP=
fPidResponse->NumberOfSigmasTPC(esdt,AliPID::kProton);
3214 if(nsigmatpcP>-990. && (nsigmatpcP<-fnSigmaTPCProtonLow || nsigmatpcP>
fnSigmaTPCProtonHi)){
3230 vprimary->GetXYZ(pos);
3231 vprimary->GetCovarianceMatrix(cov);
3232 Double_t chi2toNDF = vprimary->GetChi2perNDF();
3233 Int_t ncontr=nindices;
3234 if(!strcmp(vprimary->GetTitle(),
"VertexerTracksWithContraint")) ncontr += 1;
3235 Double_t chi2=chi2toNDF*(2.*(Double_t)ncontr-3.);
3236 fV1 =
new AliESDVertex(pos,cov,chi2,ncontr,vprimary->GetName());
3237 fV1->SetTitle(vprimary->GetTitle());
3238 fV1->SetIndices(nindices,indices);
3240 if(indices) {
delete [] indices; indices=NULL; }
3261 Float_t centralityperc,
3262 Bool_t &okDisplaced,
3264 Bool_t &okFor3Prong)
const
3271 trk->RelateToVertex(
fV1,
fBzkG,kVeryBig);
3287 if(selectInfo) okDisplaced=kTRUE;
3301 if(selectInfo) okFor3Prong=kTRUE;
3308 if(selectInfo) okSoftPi=kTRUE;
3310 if(okDisplaced || okSoftPi || okFor3Prong)
return kTRUE;
3325 Double_t vertex[3]; esdV0->GetXYZ(vertex[0],vertex[1],vertex[2]);
3326 AliAODVertex *vertexV0 =
new AliAODVertex(vertex,esdV0->GetChi2V0(),AliAODVertex::kV0,2);
3329 Double_t xyz[3], pxpypz[3];
3331 esdV0->PxPyPz(pxpypz);
3332 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
3333 AliNeutralTrackParam *trackesdV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
3338 Double_t d0z0[2],covd0z0[3];
3340 trackesdV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3341 Double_t dcaV0ToPrimVertex = TMath::Sqrt(covd0z0[0]);
3343 Double_t dcaV0DaughterToPrimVertex[2];
3344 AliExternalTrackParam *posV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(0);
3345 AliExternalTrackParam *negV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(1);
3346 if( !posV0track || !negV0track) {
3347 if(trackesdV0) {
delete trackesdV0; trackesdV0=NULL;}
3349 delete primVertexAOD;
3352 posV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3355 dcaV0DaughterToPrimVertex[0] = TMath::Sqrt(covd0z0[0]);
3356 negV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3359 dcaV0DaughterToPrimVertex[1] = TMath::Sqrt(covd0z0[0]);
3360 Double_t dcaV0Daughters = esdV0->GetDcaV0Daughters();
3361 Double_t pmom[3],nmom[3];
3362 esdV0->GetNPxPyPz(nmom[0],nmom[1],nmom[2]);
3363 esdV0->GetPPxPyPz(pmom[0],pmom[1],pmom[2]);
3365 AliAODv0 *aodV0 =
new AliAODv0(vertexV0,dcaV0Daughters,dcaV0ToPrimVertex,pmom,nmom,dcaV0DaughterToPrimVertex);
3366 aodV0->SetOnFlyStatus(esdV0->GetOnFlyStatus());
3369 delete primVertexAOD;
3378 const Double_t *par=extpar->GetParameter();
3379 const Double_t *cov=extpar->GetCovariance();
3380 Double_t alpha=extpar->GetAlpha();
3381 Double_t x=extpar->GetX();
3382 esdt->Set(x,alpha,par,cov);
3389 fMassDzero=TDatabasePDG::Instance()->GetParticle(421)->Mass();
3390 fMassDplus=TDatabasePDG::Instance()->GetParticle(411)->Mass();
3391 fMassDs=TDatabasePDG::Instance()->GetParticle(431)->Mass();
3392 fMassLambdaC=TDatabasePDG::Instance()->GetParticle(4122)->Mass();
3393 fMassDstar=TDatabasePDG::Instance()->GetParticle(413)->Mass();
3394 fMassJpsi=TDatabasePDG::Instance()->GetParticle(443)->Mass();
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
AliAODRecoDecay * fMassCalc4
for 3 prong
Bool_t fUsePidTag
upper momentum limit to apply TPC PID
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
void SetSelectionBit(Int_t i)
selection map
Bool_t CheckCutsConsistency()
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 Int_t IsSelected(TObject *obj, Int_t selectionLevel)
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 FillRecoCand(AliVEvent *event, AliAODRecoDecayHF3Prong *rd3)
Bool_t fUseTPCPIDOnlyIfNoTOF
switch use/not use TOF PID
AliRDHFCutsD0toKpi * fCutsD0toKpi
Track Filter for D* soft pion.
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,.
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
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
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)
Bool_t SingleTrkCuts(AliESDtrack *trk, Float_t centralityperc, Bool_t &okDisplaced, Bool_t &okSoftPi, Bool_t &ok3prong) const
void SetUsePID(Bool_t flag=kTRUE)
Bool_t fDstar
D0->Kpipipi.
virtual void PrintAll() const
Float_t GetDCACut(Int_t iPtBin=0) const
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.
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
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)
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.