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"
68 #include "AliMultSelection.h"
82 fSecVtxWithKF(kFALSE),
83 fRecoPrimVtxSkippingTrks(kFALSE),
84 fRmTrksFromPrimVtx(kFALSE),
93 fLikeSign3prong(kFALSE),
96 fUseKaonPIDfor3Prong(kFALSE),
99 fUseKaonPIDforDs(kFALSE),
102 fUseTPCPIDOnlyIfNoTOF(kFALSE),
103 fMaxMomForTPCPid(1.),
105 fnSigmaTPCPionLow(5.),
106 fnSigmaTPCPionHi(5.),
107 fnSigmaTOFPionLow(5.),
108 fnSigmaTOFPionHi(5.),
109 fnSigmaTPCKaonLow(5.),
110 fnSigmaTPCKaonHi(5.),
111 fnSigmaTOFKaonLow(5.),
112 fnSigmaTOFKaonHi(5.),
113 fnSigmaTPCProtonLow(5.),
114 fnSigmaTPCProtonHi(5.),
115 fnSigmaTOFProtonLow(5.),
116 fnSigmaTOFProtonHi(5.),
117 fMaxCentPercentileForTightCuts(-9999),
119 fTrackFilter2prongCentral(0x0),
120 fTrackFilter3prongCentral(0x0),
121 fTrackFilterSoftPi(0x0),
124 fCutsDplustoKpipi(0x0),
128 fCutsD0toKpipipi(0x0),
129 fCutsDStartoKpipi(0x0),
131 fFindVertexForDstar(kTRUE),
132 fFindVertexForCascades(kTRUE),
133 fV0TypeForCascadeVertex(0),
134 fMassCutBeforeVertexing(kFALSE),
138 fOKInvMassD0(kFALSE),
139 fOKInvMassJpsi(kFALSE),
140 fOKInvMassDplus(kFALSE),
141 fOKInvMassDs(kFALSE),
142 fOKInvMassLc(kFALSE),
143 fOKInvMassDstar(kFALSE),
144 fOKInvMassD0to4p(kFALSE),
145 fOKInvMassLctoV0(kFALSE),
148 fMakeReducedRHF(kFALSE),
158 Double_t d02[2]={0.,0.};
159 Double_t d03[3]={0.,0.,0.};
160 Double_t d04[4]={0.,0.,0.,0.};
161 fMassCalc2 =
new AliAODRecoDecay(0x0,2,0,d02);
162 fMassCalc3 =
new AliAODRecoDecay(0x0,3,1,d03);
163 fMassCalc4 =
new AliAODRecoDecay(0x0,4,0,d04);
169 fInputAOD(source.fInputAOD),
170 fAODMapSize(source.fAODMapSize),
171 fAODMap(source.fAODMap),
172 fVertexerTracks(source.fVertexerTracks),
174 fSecVtxWithKF(source.fSecVtxWithKF),
175 fRecoPrimVtxSkippingTrks(source.fRecoPrimVtxSkippingTrks),
176 fRmTrksFromPrimVtx(source.fRmTrksFromPrimVtx),
178 fD0toKpi(source.fD0toKpi),
179 fJPSItoEle(source.fJPSItoEle),
180 f3Prong(source.f3Prong),
181 f4Prong(source.f4Prong),
182 fDstar(source.fDstar),
183 fCascades(source.fCascades),
184 fLikeSign(source.fLikeSign),
185 fLikeSign3prong(source.fLikeSign3prong),
186 fMixEvent(source.fMixEvent),
187 fPidResponse(source.fPidResponse),
188 fUseKaonPIDfor3Prong(source.fUseKaonPIDfor3Prong),
189 fUsePIDforLc(source.fUsePIDforLc),
190 fUsePIDforLc2V0(source.fUsePIDforLc2V0),
191 fUseKaonPIDforDs(source.fUseKaonPIDforDs),
192 fUseTPCPID(source.fUseTPCPID),
193 fUseTOFPID(source.fUseTOFPID),
194 fUseTPCPIDOnlyIfNoTOF(source.fUseTPCPIDOnlyIfNoTOF),
195 fMaxMomForTPCPid(source.fMaxMomForTPCPid),
196 fUsePidTag(source.fUsePidTag),
197 fnSigmaTPCPionLow(source.fnSigmaTPCPionLow),
198 fnSigmaTPCPionHi(source.fnSigmaTPCPionHi),
199 fnSigmaTOFPionLow(source.fnSigmaTOFPionLow),
200 fnSigmaTOFPionHi(source.fnSigmaTOFPionHi),
201 fnSigmaTPCKaonLow(source.fnSigmaTPCKaonLow),
202 fnSigmaTPCKaonHi(source.fnSigmaTPCKaonHi),
203 fnSigmaTOFKaonLow(source.fnSigmaTOFKaonLow),
204 fnSigmaTOFKaonHi(source.fnSigmaTOFKaonHi),
205 fnSigmaTPCProtonLow(source.fnSigmaTPCProtonLow),
206 fnSigmaTPCProtonHi(source.fnSigmaTPCProtonHi),
207 fnSigmaTOFProtonLow(source.fnSigmaTOFProtonLow),
208 fnSigmaTOFProtonHi(source.fnSigmaTOFProtonHi),
209 fMaxCentPercentileForTightCuts(source.fMaxCentPercentileForTightCuts),
210 fTrackFilter(source.fTrackFilter),
211 fTrackFilter2prongCentral(source.fTrackFilter2prongCentral),
212 fTrackFilter3prongCentral(source.fTrackFilter3prongCentral),
213 fTrackFilterSoftPi(source.fTrackFilterSoftPi),
214 fCutsD0toKpi(source.fCutsD0toKpi),
215 fCutsJpsitoee(source.fCutsJpsitoee),
216 fCutsDplustoKpipi(source.fCutsDplustoKpipi),
217 fCutsDstoKKpi(source.fCutsDstoKKpi),
218 fCutsLctopKpi(source.fCutsLctopKpi),
219 fCutsLctoV0(source.fCutsLctoV0),
220 fCutsD0toKpipipi(source.fCutsD0toKpipipi),
221 fCutsDStartoKpipi(source.fCutsDStartoKpipi),
222 fListOfCuts(source.fListOfCuts),
223 fFindVertexForDstar(source.fFindVertexForDstar),
224 fFindVertexForCascades(source.fFindVertexForCascades),
225 fV0TypeForCascadeVertex(source.fV0TypeForCascadeVertex),
226 fMassCutBeforeVertexing(source.fMassCutBeforeVertexing),
227 fMassCalc2(source.fMassCalc2),
228 fMassCalc3(source.fMassCalc3),
229 fMassCalc4(source.fMassCalc4),
230 fOKInvMassD0(source.fOKInvMassD0),
231 fOKInvMassJpsi(source.fOKInvMassJpsi),
232 fOKInvMassDplus(source.fOKInvMassDplus),
233 fOKInvMassDs(source.fOKInvMassDs),
234 fOKInvMassLc(source.fOKInvMassLc),
235 fOKInvMassDstar(source.fOKInvMassDstar),
236 fOKInvMassD0to4p(source.fOKInvMassD0to4p),
237 fOKInvMassLctoV0(source.fOKInvMassLctoV0),
240 fMakeReducedRHF(kFALSE),
241 fMassDzero(source.fMassDzero),
242 fMassDplus(source.fMassDplus),
243 fMassDs(source.fMassDs),
244 fMassLambdaC(source.fMassLambdaC),
245 fMassDstar(source.fMassDstar),
246 fMassJpsi(source.fMassJpsi)
258 if(&source ==
this)
return *
this;
364 TList *
list =
new TList();
366 list->SetName(
"ListOfCuts");
370 list->Add(cutsD0toKpi);
374 list->Add(cutsJpsitoee);
378 list->Add(cutsDplustoKpipi);
382 list->Add(cutsDstoKKpi);
386 list->Add(cutsLctopKpi);
390 list->Add(cutsLctoV0);
394 list->Add(cutsD0toKpipipi);
398 list->Add(cutsDStartoKpipi);
403 if (bCutsOk == kFALSE) {AliFatal(
"AliAnalysisVertexingHF::FillListOfCuts vertexing and the analysis task cuts are not consistent!");}
412 TClonesArray *aodVerticesHFTClArr,
413 TClonesArray *aodD0toKpiTClArr,
414 TClonesArray *aodJPSItoEleTClArr,
415 TClonesArray *aodCharm3ProngTClArr,
416 TClonesArray *aodCharm4ProngTClArr,
417 TClonesArray *aodDstarTClArr,
418 TClonesArray *aodCascadesTClArr,
419 TClonesArray *aodLikeSign2ProngTClArr,
420 TClonesArray *aodLikeSign3ProngTClArr)
428 TString evtype =
event->IsA()->GetName();
429 fInputAOD = ((evtype==
"AliAODEvent") ? kTRUE : kFALSE);
433 AliDebug(2,
"Creating HF candidates from AOD");
435 AliDebug(2,
"Creating HF candidates from ESD");
438 if(!aodVerticesHFTClArr) {
439 printf(
"ERROR: no aodVerticesHFTClArr");
443 printf(
"ERROR: no aodD0toKpiTClArr");
447 printf(
"ERROR: no aodJPSItoEleTClArr");
450 if(
f3Prong && !aodCharm3ProngTClArr) {
451 printf(
"ERROR: no aodCharm3ProngTClArr");
454 if(
f4Prong && !aodCharm4ProngTClArr) {
455 printf(
"ERROR: no aodCharm4ProngTClArr");
458 if(
fDstar && !aodDstarTClArr) {
459 printf(
"ERROR: no aodDstarTClArr");
463 printf(
"ERROR: no aodCascadesTClArr ");
466 if(
fLikeSign && !aodLikeSign2ProngTClArr) {
467 printf(
"ERROR: no aodLikeSign2ProngTClArr");
471 printf(
"ERROR: no aodLikeSign3ProngTClArr");
476 Int_t iVerticesHF=0,iD0toKpi=0,iJPSItoEle=0,i3Prong=0,i4Prong=0,iDstar=0,iCascades=0,iLikeSign2Prong=0,iLikeSign3Prong=0;
477 aodVerticesHFTClArr->Delete();
478 iVerticesHF = aodVerticesHFTClArr->GetEntriesFast();
479 TClonesArray &verticesHFRef = *aodVerticesHFTClArr;
481 aodD0toKpiTClArr->Delete();
482 iD0toKpi = aodD0toKpiTClArr->GetEntriesFast();
485 aodJPSItoEleTClArr->Delete();
486 iJPSItoEle = aodJPSItoEleTClArr->GetEntriesFast();
489 aodCharm3ProngTClArr->Delete();
490 i3Prong = aodCharm3ProngTClArr->GetEntriesFast();
493 aodCharm4ProngTClArr->Delete();
494 i4Prong = aodCharm4ProngTClArr->GetEntriesFast();
497 aodDstarTClArr->Delete();
498 iDstar = aodDstarTClArr->GetEntriesFast();
501 aodCascadesTClArr->Delete();
502 iCascades = aodCascadesTClArr->GetEntriesFast();
505 aodLikeSign2ProngTClArr->Delete();
506 iLikeSign2Prong = aodLikeSign2ProngTClArr->GetEntriesFast();
509 aodLikeSign3ProngTClArr->Delete();
510 iLikeSign3Prong = aodLikeSign3ProngTClArr->GetEntriesFast();
513 TClonesArray &aodD0toKpiRef = *aodD0toKpiTClArr;
514 TClonesArray &aodJPSItoEleRef = *aodJPSItoEleTClArr;
515 TClonesArray &aodCharm3ProngRef = *aodCharm3ProngTClArr;
516 TClonesArray &aodCharm4ProngRef = *aodCharm4ProngTClArr;
517 TClonesArray &aodDstarRef = *aodDstarTClArr;
518 TClonesArray &aodCascadesRef = *aodCascadesTClArr;
519 TClonesArray &aodLikeSign2ProngRef = *aodLikeSign2ProngTClArr;
520 TClonesArray &aodLikeSign3ProngRef = *aodLikeSign3ProngTClArr;
528 Int_t iTrkP1,iTrkP2,iTrkN1,iTrkN2,iTrkSoftPi,trkEntries,iv0,nv0;
529 Double_t xdummy,ydummy,dcap1n1,dcap1n2,dcap2n1,dcap1p2,dcan1n2,dcap2n2,dcaV0,dcaCasc;
530 Bool_t okD0=kFALSE,okJPSI=kFALSE,ok3Prong=kFALSE,ok4Prong=kFALSE;
531 Bool_t okDstar=kFALSE,okD0fromDstar=kFALSE;
532 Bool_t okCascades=kFALSE;
533 AliESDtrack *postrack1 = 0;
534 AliESDtrack *postrack2 = 0;
535 AliESDtrack *negtrack1 = 0;
536 AliESDtrack *negtrack2 = 0;
537 AliESDtrack *trackPi = 0;
538 Double_t mompos1[3],mompos2[3],momneg1[3],momneg2[3];
549 AliDebug(2,Form(
" dca cut set to %f cm",dcaMax));
553 fBzkG = (Double_t)event->GetMagneticField();
561 trkEntries = (Int_t)event->GetNumberOfTracks();
562 AliDebug(1,Form(
" Number of tracks: %d",trkEntries));
565 nv0 = (Int_t)event->GetNumberOfV0s();
566 AliDebug(1,Form(
" Number of V0s: %d",nv0));
568 if( trkEntries<2 && (trkEntries<1 || nv0<1) ) {
569 AliDebug(1,Form(
" Not enough tracks: %d",trkEntries));
586 TObjArray seleTrksArray(trkEntries);
587 TObjArray tracksAtVertex(trkEntries);
588 UChar_t *seleFlags =
new UChar_t[trkEntries];
590 Int_t *evtNumber =
new Int_t[trkEntries];
593 AliDebug(1,Form(
" Selected tracks: %d",nSeleTrks));
597 TObjArray *twoTrackArray1 =
new TObjArray(2);
598 TObjArray *twoTrackArray2 =
new TObjArray(2);
599 TObjArray *twoTrackArrayV0 =
new TObjArray(2);
600 TObjArray *twoTrackArrayCasc =
new TObjArray(2);
601 TObjArray *threeTrackArray =
new TObjArray(3);
602 TObjArray *fourTrackArray =
new TObjArray(4);
605 Bool_t isLikeSign2Prong=kFALSE,isLikeSign3Prong=kFALSE;
612 Bool_t massCutOK=kTRUE;
615 for(iTrkP1=0; iTrkP1<nSeleTrks; iTrkP1++) {
621 postrack1 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkP1);
622 if(!TESTBIT(seleFlags[iTrkP1],
kBitDispl))
continue;
623 postrack1->GetPxPyPz(mompos1);
629 for(iv0=0; iv0<nv0; iv0++){
637 v0 = ((AliAODEvent*)event)->GetV0(iv0);
639 esdV0 = ((AliESDEvent*)event)->GetV0(iv0);
641 if ( (!v0 || !v0->IsA()->InheritsFrom(
"AliAODv0") ) &&
642 (!esdV0 || !esdV0->IsA()->InheritsFrom(
"AliESDv0") ) )
continue;
653 AliExternalTrackParam * posV0track;
654 AliExternalTrackParam * negV0track;
657 AliAODTrack *posVV0track = (AliAODTrack*)(v0->GetDaughter(0));
658 AliAODTrack *negVV0track = (AliAODTrack*)(v0->GetDaughter(1));
659 if( !posVV0track || !negVV0track )
continue;
664 if (posVV0track->GetID() == postrack1->GetID() ||
665 negVV0track->GetID() == postrack1->GetID())
continue;
667 if ( posVV0track->Charge() == negVV0track->Charge() )
continue;
669 if(!(posVV0track->GetStatus() & AliESDtrack::kTPCrefit) ||
670 !(negVV0track->GetStatus() & AliESDtrack::kTPCrefit))
continue;
672 Double_t xyz[3], pxpypz[3], cv[21]; Short_t sign;
673 posVV0track->PxPyPz(pxpypz); posVV0track->XvYvZv(xyz);
674 posVV0track->GetCovarianceXYZPxPyPz(cv); sign=posVV0track->Charge();
675 posV0track =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
676 negVV0track->PxPyPz(pxpypz); negVV0track->XvYvZv(xyz);
677 negVV0track->GetCovarianceXYZPxPyPz(cv); sign=negVV0track->Charge();
678 negV0track =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
680 AliESDtrack *posVV0track = (AliESDtrack*)(event->GetTrack( esdV0->GetPindex() ));
681 AliESDtrack *negVV0track = (AliESDtrack*)(event->GetTrack( esdV0->GetNindex() ));
682 if( !posVV0track || !negVV0track )
continue;
687 if (posVV0track->GetID() == postrack1->GetID() ||
688 negVV0track->GetID() == postrack1->GetID())
continue;
690 if ( posVV0track->Charge() == negVV0track->Charge() )
continue;
692 if(!(posVV0track->GetStatus() & AliESDtrack::kTPCrefit) ||
693 !(negVV0track->GetStatus() & AliESDtrack::kTPCrefit))
continue;
695 if (posVV0track->GetKinkIndex(0)>0 || negVV0track->GetKinkIndex(0)>0)
continue;
697 posV0track =
new AliExternalTrackParam(*posVV0track);
698 negV0track =
new AliExternalTrackParam(*negVV0track);
703 if( !posV0track || !negV0track ){
704 AliDebug(1,Form(
" Couldn't get the V0 daughters"));
709 twoTrackArrayV0->AddAt(posV0track,0);
710 twoTrackArrayV0->AddAt(negV0track,1);
713 dcaV0 = v0->DcaV0Daughters();
716 AliNeutralTrackParam *trackV0=NULL;
718 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
719 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
721 Double_t xyz[3], pxpypz[3];
723 esdV0->PxPyPz(pxpypz);
724 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
725 trackV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
730 twoTrackArrayCasc->AddAt(postrack1,0);
731 twoTrackArrayCasc->AddAt(trackV0,1);
733 AliAODVertex *vertexCasc = 0;
736 dcaCasc = postrack1->GetDCA(trackV0,
fBzkG,xdummy,ydummy);
741 Double_t pos[3],cov[6],chi2perNDF;
743 fV1->GetCovMatrix(cov);
744 chi2perNDF =
fV1->GetChi2toNDF();
745 vertexCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
749 delete posV0track; posV0track=NULL;
750 delete negV0track; negV0track=NULL;
751 delete trackV0; trackV0=NULL;
753 twoTrackArrayV0->Clear();
754 twoTrackArrayCasc->Clear();
759 ioCascade =
MakeCascade(twoTrackArrayCasc,event,vertexCasc,v0,dcaCasc,okCascades);
760 if(okCascades && ioCascade) {
765 UShort_t
id[2]={(UShort_t)postrack1->GetID(),(UShort_t)iv0};
769 AliAODVertex *vCasc =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexCasc);
770 rc->SetSecondaryVtx(vCasc);
771 vCasc->SetParent(rc);
773 AddRefs(vCasc,rc,event,twoTrackArrayCasc);
774 vCasc->AddDaughter(v0);
781 delete posV0track; posV0track=NULL;
782 delete negV0track; negV0track=NULL;
783 delete trackV0; trackV0=NULL;
784 twoTrackArrayV0->Clear();
785 twoTrackArrayCasc->Clear();
786 if(ioCascade) {
delete ioCascade; ioCascade=NULL; }
787 if(vertexCasc) {
delete vertexCasc; vertexCasc=NULL; }
795 AliDebug(1,Form(
" Not enough tracks: %d",trkEntries));
799 if(postrack1->Charge()<0 && !
fLikeSign)
continue;
802 for(iTrkN1=0; iTrkN1<nSeleTrks; iTrkN1++) {
807 if(iTrkN1==iTrkP1)
continue;
810 negtrack1 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN1);
812 if(negtrack1->Charge()>0 && !
fLikeSign)
continue;
814 if(!TESTBIT(seleFlags[iTrkN1],
kBitDispl))
continue;
817 if(evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
820 if(postrack1->Charge()==negtrack1->Charge()) {
821 isLikeSign2Prong=kTRUE;
823 if(iTrkN1<iTrkP1)
continue;
825 isLikeSign2Prong=kFALSE;
826 if(postrack1->Charge()<0 || negtrack1->Charge()>0)
continue;
828 if(evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
838 negtrack1->GetPxPyPz(momneg1);
841 dcap1n1 = postrack1->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
842 if(dcap1n1>dcaMax) { negtrack1=0;
continue; }
845 twoTrackArray1->AddAt(postrack1,0);
846 twoTrackArray1->AddAt(negtrack1,1);
849 twoTrackArray1->Clear();
856 io2Prong =
Make2Prong(twoTrackArray1,event,vertexp1n1,dcap1n1,okD0,okJPSI,okD0fromDstar);
858 if((
fD0toKpi && okD0) || (
fJPSItoEle && okJPSI) || (isLikeSign2Prong && (okD0 || okJPSI))) {
860 AliAODVertex *v2Prong =0x0;
861 if(!
fMakeReducedRHF)v2Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexp1n1);
862 if(!isLikeSign2Prong) {
871 rd->SetSecondaryVtx(v2Prong);
872 v2Prong->SetParent(rd);
873 AddRefs(v2Prong,rd,event,twoTrackArray1);
882 if(!okD0) v2Prong->SetParent(rd);
883 AddRefs(v2Prong,rd,event,twoTrackArray1);
894 rd->SetSecondaryVtx(v2Prong);
895 v2Prong->SetParent(rd);
896 AddRefs(v2Prong,rd,event,twoTrackArray1);
901 if(
fDstar && okD0fromDstar && !isLikeSign2Prong) {
906 vertexp1n1->AddDaughter(postrack1);
907 vertexp1n1->AddDaughter(negtrack1);
909 io2Prong->SetSecondaryVtx(vertexp1n1);
912 AliNeutralTrackParam *trackD0 =
new AliNeutralTrackParam(io2Prong);
915 for(iTrkSoftPi=0; iTrkSoftPi<nSeleTrks; iTrkSoftPi++) {
917 if(iTrkSoftPi==iTrkP1 || iTrkSoftPi==iTrkN1)
continue;
919 if(!TESTBIT(seleFlags[iTrkSoftPi],
kBitSoftPi))
continue;
922 if(evtNumber[iTrkP1]==evtNumber[iTrkSoftPi] ||
923 evtNumber[iTrkN1]==evtNumber[iTrkSoftPi] ||
924 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
929 trackD0->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
930 if(trackD0->GetSigmaY2()<0. || trackD0->GetSigmaZ2()<0.)
continue;
933 trackPi = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkSoftPi);
936 twoTrackArrayCasc->AddAt(trackPi,0);
937 twoTrackArrayCasc->AddAt(trackD0,1);
939 twoTrackArrayCasc->Clear();
944 AliAODVertex *vertexCasc = 0;
948 dcaCasc = trackPi->GetDCA(trackD0,
fBzkG,xdummy,ydummy);
953 Double_t pos[3],cov[6],chi2perNDF;
955 fV1->GetCovMatrix(cov);
956 chi2perNDF =
fV1->GetChi2toNDF();
957 vertexCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
961 twoTrackArrayCasc->Clear();
966 ioCascade =
MakeCascade(twoTrackArrayCasc,event,vertexCasc,io2Prong,dcaCasc,okDstar);
975 AliAODVertex *v2Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*vertexp1n1);
976 rd->SetSecondaryVtx(v2Prong);
977 v2Prong->SetParent(rd);
978 AddRefs(v2Prong,rd,event,twoTrackArray1);
986 AliAODVertex *vCasc = 0x0;
989 UShort_t idCasc[2]={(UShort_t)trackPi->GetID(),(UShort_t)(iD0toKpi-1)};
994 AliAODVertex *vCasc =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexCasc);
995 rc->SetSecondaryVtx(vCasc);
996 vCasc->SetParent(rc);
998 AddRefs(vCasc,rc,event,twoTrackArrayCasc);
999 vCasc->AddDaughter(rd);
1002 twoTrackArrayCasc->Clear();
1004 if(ioCascade) {
delete ioCascade; ioCascade=NULL;}
1005 delete vertexCasc; vertexCasc=NULL;
1008 if(trackD0) {
delete trackD0; trackD0=NULL;}
1011 if(io2Prong) {
delete io2Prong; io2Prong=NULL;}
1014 twoTrackArray1->Clear();
1016 (isLikeSign2Prong && !
f3Prong) ) {
1024 for(iTrkP2=iTrkP1+1; iTrkP2<nSeleTrks; iTrkP2++) {
1026 if(iTrkP2==iTrkP1 || iTrkP2==iTrkN1)
continue;
1031 postrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkP2);
1033 if(postrack2->Charge()<0)
continue;
1035 if(!TESTBIT(seleFlags[iTrkP2],
kBitDispl))
continue;
1038 if(!TESTBIT(seleFlags[iTrkP2],
kBit3Prong))
continue;
1039 if(!TESTBIT(seleFlags[iTrkP1],
kBit3Prong))
continue;
1040 if(!TESTBIT(seleFlags[iTrkN1],
kBit3Prong))
continue;
1043 if(evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1044 evtNumber[iTrkN1]==evtNumber[iTrkP2] ||
1045 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1048 if(isLikeSign2Prong) {
1050 if(postrack1->Charge()>0) {
1051 isLikeSign3Prong=kTRUE;
1056 isLikeSign3Prong=kFALSE;
1058 if(evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1059 evtNumber[iTrkN1]==evtNumber[iTrkP2] ||
1060 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1067 Bool_t okForLcTopKpi=kTRUE;
1068 Int_t pidLcStatus=3;
1072 okForLcTopKpi=kFALSE;
1076 okForLcTopKpi=kFALSE;
1080 okForLcTopKpi=kTRUE;
1085 okForLcTopKpi=kTRUE;
1090 Bool_t okForDsToKKpi=kTRUE;
1093 !TESTBIT(seleFlags[iTrkP2],
kBitKaonCompat) ) okForDsToKKpi=kFALSE;
1105 dcap2n1 = postrack2->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1106 if(dcap2n1>dcaMax) { postrack2=0;
continue; }
1107 dcap1p2 = postrack2->GetDCA(postrack1,
fBzkG,xdummy,ydummy);
1108 if(dcap1p2>dcaMax) { postrack2=0;
continue; }
1113 if(postrack2->Charge()>0) {
1114 threeTrackArray->AddAt(postrack1,0);
1115 threeTrackArray->AddAt(negtrack1,1);
1116 threeTrackArray->AddAt(postrack2,2);
1118 threeTrackArray->AddAt(negtrack1,0);
1119 threeTrackArray->AddAt(postrack1,1);
1120 threeTrackArray->AddAt(postrack2,2);
1123 postrack2->GetPxPyPz(mompos2);
1124 Double_t pxDau[3]={mompos1[0],momneg1[0],mompos2[0]};
1125 Double_t pyDau[3]={mompos1[1],momneg1[1],mompos2[1]};
1126 Double_t pzDau[3]={mompos1[2],momneg1[2],mompos2[2]};
1133 threeTrackArray->Clear();
1141 twoTrackArray2->AddAt(postrack2,0);
1142 twoTrackArray2->AddAt(negtrack1,1);
1145 twoTrackArray2->Clear();
1154 io3Prong =
Make3Prong(threeTrackArray,event,secVert3PrAOD,dispersion,vertexp1n1,vertexp2n1,dcap1n1,dcap2n1,dcap1p2,okForLcTopKpi,okForDsToKKpi,ok3Prong);
1156 AliAODVertex *v3Prong=0x0;
1157 if(!
fMakeReducedRHF)v3Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1158 if(!isLikeSign3Prong) {
1168 v3Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1169 rd->SetSecondaryVtx(v3Prong);
1170 v3Prong->SetParent(rd);
1171 AddRefs(v3Prong,rd,event,threeTrackArray);
1184 rd->SetSecondaryVtx(v3Prong);
1185 v3Prong->SetParent(rd);
1186 AddRefs(v3Prong,rd,event,threeTrackArray);
1192 if(io3Prong) {
delete io3Prong; io3Prong=NULL;}
1193 if(secVert3PrAOD) {
delete secVert3PrAOD; secVert3PrAOD=NULL;}
1199 && !isLikeSign2Prong && !isLikeSign3Prong
1201 && dcap1n1 < fCutsD0toKpipipi->GetDCACut()
1202 && dcap2n1 < fCutsD0toKpipipi->GetDCACut()) {
1212 threeTrackArray->AddAt(postrack1,0);
1213 threeTrackArray->AddAt(negtrack1,1);
1214 threeTrackArray->AddAt(postrack2,2);
1218 for(iTrkN2=iTrkN1+1; iTrkN2<nSeleTrks; iTrkN2++) {
1220 if(iTrkN2==iTrkP1 || iTrkN2==iTrkP2 || iTrkN2==iTrkN1)
continue;
1225 negtrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN2);
1227 if(negtrack2->Charge()>0)
continue;
1229 if(!TESTBIT(seleFlags[iTrkN2],
kBitDispl))
continue;
1231 if(evtNumber[iTrkP1]==evtNumber[iTrkN2] ||
1232 evtNumber[iTrkN1]==evtNumber[iTrkN2] ||
1233 evtNumber[iTrkP2]==evtNumber[iTrkN2] ||
1234 evtNumber[iTrkP1]==evtNumber[iTrkN1] ||
1235 evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1236 evtNumber[iTrkN1]==evtNumber[iTrkP2])
continue;
1249 dcap1n2 = postrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1251 dcap2n2 = postrack2->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1255 fourTrackArray->AddAt(postrack1,0);
1256 fourTrackArray->AddAt(negtrack1,1);
1257 fourTrackArray->AddAt(postrack2,2);
1258 fourTrackArray->AddAt(negtrack2,3);
1266 fourTrackArray->Clear();
1273 io4Prong =
Make4Prong(fourTrackArray,event,secVert4PrAOD,vertexp1n1,vertexp1n1p2,dcap1n1,dcap1n2,dcap2n1,dcap2n2,ok4Prong);
1280 AliAODVertex *v4Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*secVert4PrAOD);
1281 rd->SetSecondaryVtx(v4Prong);
1282 v4Prong->SetParent(rd);
1283 AddRefs(v4Prong,rd,event,fourTrackArray);
1287 if(io4Prong) {
delete io4Prong; io4Prong=NULL;}
1288 if(secVert4PrAOD) {
delete secVert4PrAOD; secVert4PrAOD=NULL;}
1289 fourTrackArray->Clear();
1294 threeTrackArray->Clear();
1295 delete vertexp1n1p2;
1304 twoTrackArray2->Clear();
1307 for(iTrkN2=iTrkN1+1; iTrkN2<nSeleTrks; iTrkN2++) {
1309 if(iTrkN2==iTrkP1 || iTrkN2==iTrkP2 || iTrkN2==iTrkN1)
continue;
1314 negtrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN2);
1316 if(negtrack2->Charge()>0)
continue;
1318 if(!TESTBIT(seleFlags[iTrkN2],
kBitDispl))
continue;
1321 if(!TESTBIT(seleFlags[iTrkN2],
kBit3Prong))
continue;
1322 if(!TESTBIT(seleFlags[iTrkP1],
kBit3Prong))
continue;
1323 if(!TESTBIT(seleFlags[iTrkN1],
kBit3Prong))
continue;
1326 if(evtNumber[iTrkP1]==evtNumber[iTrkN2] ||
1327 evtNumber[iTrkN1]==evtNumber[iTrkN2] ||
1328 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1331 if(isLikeSign2Prong) {
1333 if(postrack1->Charge()<0) {
1334 isLikeSign3Prong=kTRUE;
1339 isLikeSign3Prong=kFALSE;
1345 Bool_t okForLcTopKpi=kTRUE;
1346 Int_t pidLcStatus=3;
1350 okForLcTopKpi=kFALSE;
1354 okForLcTopKpi=kFALSE;
1358 okForLcTopKpi=kTRUE;
1363 okForLcTopKpi=kTRUE;
1368 Bool_t okForDsToKKpi=kTRUE;
1371 !TESTBIT(seleFlags[iTrkN2],
kBitKaonCompat) ) okForDsToKKpi=kFALSE;
1383 dcap1n2 = postrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1384 if(dcap1n2>dcaMax) { negtrack2=0;
continue; }
1385 dcan1n2 = negtrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1386 if(dcan1n2>dcaMax) { negtrack2=0;
continue; }
1388 threeTrackArray->AddAt(negtrack1,0);
1389 threeTrackArray->AddAt(postrack1,1);
1390 threeTrackArray->AddAt(negtrack2,2);
1395 negtrack2->GetPxPyPz(momneg2);
1396 Double_t pxDau[3]={momneg1[0],mompos1[0],momneg2[0]};
1397 Double_t pyDau[3]={momneg1[1],mompos1[1],momneg2[1]};
1398 Double_t pzDau[3]={momneg1[2],mompos1[2],momneg2[2]};
1403 threeTrackArray->Clear();
1409 twoTrackArray2->AddAt(postrack1,0);
1410 twoTrackArray2->AddAt(negtrack2,1);
1414 twoTrackArray2->Clear();
1421 io3Prong =
Make3Prong(threeTrackArray,event,secVert3PrAOD,dispersion,vertexp1n1,vertexp1n2,dcap1n1,dcap1n2,dcan1n2,okForLcTopKpi,okForDsToKKpi,ok3Prong);
1423 AliAODVertex *v3Prong = 0x0;
1424 if(!
fMakeReducedRHF) v3Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1425 if(!isLikeSign3Prong) {
1434 rd->SetSecondaryVtx(v3Prong);
1435 v3Prong->SetParent(rd);
1436 AddRefs(v3Prong,rd,event,threeTrackArray);
1448 rd->SetSecondaryVtx(v3Prong);
1449 v3Prong->SetParent(rd);
1450 AddRefs(v3Prong,rd,event,threeTrackArray);
1456 if(io3Prong) {
delete io3Prong; io3Prong=NULL;}
1457 if(secVert3PrAOD) {
delete secVert3PrAOD; secVert3PrAOD=NULL;}
1459 threeTrackArray->Clear();
1465 twoTrackArray2->Clear();
1478 AliDebug(1,Form(
" D0->Kpi in event = %d;",
1479 (Int_t)aodD0toKpiTClArr->GetEntriesFast()));
1482 AliDebug(1,Form(
" JPSI->ee in event = %d;",
1483 (Int_t)aodJPSItoEleTClArr->GetEntriesFast()));
1486 AliDebug(1,Form(
" Charm->3Prong in event = %d;",
1487 (Int_t)aodCharm3ProngTClArr->GetEntriesFast()));
1490 AliDebug(1,Form(
" Charm->4Prong in event = %d;\n",
1491 (Int_t)aodCharm4ProngTClArr->GetEntriesFast()));
1494 AliDebug(1,Form(
" D*->D0pi in event = %d;\n",
1495 (Int_t)aodDstarTClArr->GetEntriesFast()));
1498 AliDebug(1,Form(
" cascades -> v0 + track in event = %d;\n",
1499 (Int_t)aodCascadesTClArr->GetEntriesFast()));
1502 AliDebug(1,Form(
" Like-sign 2Prong in event = %d;\n",
1503 (Int_t)aodLikeSign2ProngTClArr->GetEntriesFast()));
1506 AliDebug(1,Form(
" Like-sign 3Prong in event = %d;\n",
1507 (Int_t)aodLikeSign3ProngTClArr->GetEntriesFast()));
1511 twoTrackArray1->Delete();
delete twoTrackArray1;
1512 twoTrackArray2->Delete();
delete twoTrackArray2;
1513 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1514 twoTrackArrayV0->Delete();
delete twoTrackArrayV0;
1515 threeTrackArray->Clear();
1516 threeTrackArray->Delete();
delete threeTrackArray;
1517 fourTrackArray->Delete();
delete fourTrackArray;
1518 delete [] seleFlags; seleFlags=NULL;
1519 if(evtNumber) {
delete [] evtNumber; evtNumber=NULL;}
1520 tracksAtVertex.Delete();
1523 seleTrksArray.Delete();
1534 const AliVEvent *event,
1535 const TObjArray *trkArray)
const
1559 const AliVEvent *event,
1560 const TObjArray *trkArray)
const
1565 Int_t nDg = v->GetNDaughters();
1567 if(nDg) dg = v->GetDaughter(0);
1571 Int_t nTrks = trkArray->GetEntriesFast();
1573 AliExternalTrackParam *track = 0;
1574 AliAODTrack *aodTrack = 0;
1577 for(Int_t i=0; i<nTrks; i++) {
1578 track = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
1579 id = (Int_t)track->GetID();
1582 aodTrack =
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[
id]));
1583 if(!aodTrack) AliFatal(
"Not a standard AOD");
1584 v->AddDaughter(aodTrack);
1598 TClonesArray *inputArray=(TClonesArray*)aod->GetList()->FindObject(
"VerticesHF");
1599 if(!inputArray)
return;
1601 AliAODTrack *track = 0;
1602 AliAODVertex *vertex = 0;
1604 Bool_t needtofix=kFALSE;
1605 for(Int_t iv=0; iv<inputArray->GetEntriesFast(); iv++) {
1606 vertex = (AliAODVertex*)inputArray->UncheckedAt(iv);
1607 for(Int_t
id=0;
id<vertex->GetNDaughters();
id++) {
1608 track = (AliAODTrack*)vertex->GetDaughter(
id);
1609 if(!track->GetStatus()) needtofix=kTRUE;
1611 if(needtofix)
break;
1614 if(!needtofix)
return;
1617 printf(
"Fixing references\n");
1623 for(Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
1624 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
1625 if(!track) AliFatal(
"Not a standard AOD");
1628 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
1631 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
1634 Double_t covtest[21];
1635 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
1638 Int_t ind = (Int_t)track->GetID();
1639 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
1643 Int_t ids[4]={-1,-1,-1,-1};
1644 for(Int_t iv=0; iv<inputArray->GetEntriesFast(); iv++) {
1645 Bool_t cascade=kFALSE;
1646 vertex = (AliAODVertex*)inputArray->UncheckedAt(iv);
1648 Int_t nDgs = vertex->GetNDaughters();
1649 for(
id=0;
id<nDgs;
id++) {
1650 track = (AliAODTrack*)vertex->GetDaughter(
id);
1651 if(track->Charge()==0) {cascade=kTRUE;
continue;}
1652 ids[id]=(Int_t)track->GetID();
1653 vertex->RemoveDaughter(track);
1655 if(cascade)
continue;
1656 for(
id=0;
id<nDgs;
id++) {
1657 if (ids[
id]>-1 && ids[
id] < fAODMapSize) {
1658 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(
fAODMap[ids[
id]]));
1659 if(!track) AliFatal(
"Not a standard AOD");
1660 vertex->AddDaughter(track);
1676 TObjArray *threeTrackArray =
new TObjArray(3);
1679 if(!track1)
return kFALSE;
1681 if(!track2)
return kFALSE;
1682 AliESDtrack *postrack1 = 0;
1683 AliESDtrack *negtrack1 = 0;
1684 postrack1 =
new AliESDtrack(track1);
1685 negtrack1 =
new AliESDtrack(track2);
1688 Double_t xdummy, ydummy;
1689 fBzkG = (Double_t)event->GetMagneticField();
1690 Double_t dca12 = postrack1->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1692 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1695 vprimary->GetXYZ(pos);
1696 vprimary->GetCovarianceMatrix(cov);
1697 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1698 fV1->GetCovMatrix(cov);
1702 if(!track3)
return kFALSE;
1703 AliESDtrack *esdt3 =
new AliESDtrack(track3);
1707 threeTrackArray->AddAt(postrack1,0);
1708 threeTrackArray->AddAt(negtrack1,1);
1709 threeTrackArray->AddAt(esdt3,2);
1710 dca2 = esdt3->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1711 dca3 = esdt3->GetDCA(postrack1,
fBzkG,xdummy,ydummy);
1712 Double_t dispersion;
1715 if (!secVert3PrAOD) {
1716 threeTrackArray->Clear();
1717 threeTrackArray->Delete();
delete threeTrackArray;
1719 delete postrack1; postrack1=NULL;
1720 delete negtrack1; negtrack1=NULL;
1721 delete esdt3; esdt3=NULL;
1727 rd=
Make3Prong(threeTrackArray, event, secVert3PrAOD,dispersion, vtxRec, vertexp2n1, dca12, dca2, dca3, rd);
1730 threeTrackArray->Clear();
1731 threeTrackArray->Delete();
delete threeTrackArray;
1733 delete postrack1; postrack1=NULL;
1734 delete negtrack1; negtrack1=NULL;
1735 delete esdt3; esdt3=NULL;
1746 Double_t dispersion;
1747 TObjArray *twoTrackArray1 =
new TObjArray(2);
1750 if(!track1)
return kFALSE;
1752 if(!track2)
return kFALSE;
1754 AliESDtrack *esdt1 = 0;
1755 AliESDtrack *esdt2 = 0;
1756 esdt1 =
new AliESDtrack(track1);
1757 esdt2 =
new AliESDtrack(track2);
1759 twoTrackArray1->AddAt(esdt1,0);
1760 twoTrackArray1->AddAt(esdt2,1);
1762 Double_t xdummy, ydummy;
1763 fBzkG = (Double_t)event->GetMagneticField();
1764 Double_t dca12 = esdt1->GetDCA(esdt2,
fBzkG,xdummy,ydummy);
1765 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1768 vprimary->GetXYZ(pos);
1769 vprimary->GetCovarianceMatrix(cov);
1770 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1771 fV1->GetCovMatrix(cov);
1777 twoTrackArray1->Clear();
1778 twoTrackArray1->Delete();
delete twoTrackArray1;
1780 delete esdt1; esdt1=NULL;
1781 delete esdt2; esdt2=NULL;
1784 Bool_t okJPSI=kFALSE;
1785 Bool_t okD0FromDstar=kFALSE;
1786 Bool_t refill =kTRUE;
1787 rd=
Make2Prong(twoTrackArray1, event, vtxRec, dca12, okD0, okJPSI, okD0FromDstar,refill,rd);
1791 twoTrackArray1->Clear();
1792 twoTrackArray1->Delete();
delete twoTrackArray1;
1793 delete esdt1; esdt1=NULL;
1794 delete esdt2; esdt2=NULL;
1803 TObjArray *twoTrackArrayCasc =
new TObjArray(2);
1805 AliAODTrack *trackB =(AliAODTrack*)event->GetTrack(
fAODMap[rCasc->
GetProngID(0)]);
1806 if(!trackB)
return kFALSE;
1808 AliNeutralTrackParam *trackV0=NULL;
1813 TClonesArray *inputArrayD0=(TClonesArray*)event->GetList()->FindObject(
"D0toKpi");
1814 if(!inputArrayD0)
return kFALSE;
1816 if(!trackD0)
return kFALSE;
1819 trackV0 =
new AliNeutralTrackParam(trackD0);
1822 v0 = ((AliAODEvent*)event)->GetV0(rCasc->
GetProngID(1));
1823 if(!v0)
return kFALSE;
1825 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
1826 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
1829 AliESDtrack *esdB =
new AliESDtrack(trackB);
1831 twoTrackArrayCasc->AddAt(esdB,0);
1832 twoTrackArrayCasc->AddAt(trackV0,1);
1834 fBzkG = (Double_t)event->GetMagneticField();
1835 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1839 vprimary->GetXYZ(pos);
1840 vprimary->GetCovarianceMatrix(cov);
1841 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1842 fV1->GetCovMatrix(cov);
1845 AliAODVertex *vtxCasc = 0x0;
1846 Double_t chi2perNDF =
fV1->GetChi2toNDF();
1847 vtxCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
1849 twoTrackArrayCasc->Clear();
1850 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1852 delete esdB; esdB=NULL;
1853 delete vtxCasc;vtxCasc=NULL;
1854 delete trackB; trackB=NULL;
1855 delete trackV0; trackV0=NULL;
1861 vtxCasc->SetParent(rCasc);
1862 rCasc->SetSecondaryVtx(vtxCasc);
1864 if(DStar)vtxCasc->AddDaughter(trackD0);
1865 else vtxCasc->AddDaughter(v0);
1868 Bool_t refill =kTRUE;
1869 Bool_t dummy1, dummy2, dummy3;
1871 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
1873 esdB->PropagateToDCA(vtxCasc,
fBzkG,kVeryBig);
1874 trackV0->PropagateToDCA(vtxCasc,
fBzkG,kVeryBig);
1875 Double_t momentum[3];
1876 esdB->GetPxPyPz(momentum);
1877 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
1878 trackV0->GetPxPyPz(momentum);
1879 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
1881 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArrayCasc,event);
1884 delete vtxCasc; vtxCasc=NULL;
1885 twoTrackArrayCasc->Clear();
1886 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1887 delete esdB; esdB=NULL;
1888 delete trackV0; trackV0=NULL;
1892 Double_t d0z0[2],covd0z0[3];
1893 esdB->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1895 d0err[0] = TMath::Sqrt(covd0z0[0]);
1896 trackV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1898 d0err[1] = TMath::Sqrt(covd0z0[0]);
1899 rCasc->SetPxPyPzProngs(2,px,py,pz);
1901 rCasc->Setd0Prongs(2,d0);
1903 rCasc->SetCharge(esdB->Charge());
1905 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
1906 if(esdB->GetStatus()&AliESDtrack::kESDpid) esdB->GetESDpid(esdpid0);
1907 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
1908 Double_t esdpid[10];
1909 for(Int_t i=0;i<5;i++) {
1910 esdpid[i] = esdpid0[i];
1911 esdpid[5+i] = esdpid1[i];
1913 rCasc->SetPID(2,esdpid);
1918 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
1919 twoTrackArrayCasc->Clear();
1920 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1921 delete esdB; esdB=NULL;
1922 delete trackV0; trackV0=NULL;
1928 TObjArray *twoTrackArray,AliVEvent *event,
1929 AliAODVertex *secVert,
1940 Bool_t dummy1,dummy2,dummy3;
1946 dummy1,dummy2,dummy3);
1947 if(!theCascade)
return 0x0;
1950 AliESDtrack *trackPi = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
1951 theCascade->SetCharge(trackPi->Charge());
1957 Int_t idSoftPi=(Int_t)trackPi->GetID();
1959 AliAODTrack* trackPiAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idSoftPi]));
1960 if(!trackPiAOD) AliFatal(
"Not a standard AOD");
1961 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPiAOD);
1964 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPi);
1966 tmpCascade->GetSecondaryVtx()->AddDaughter(rd2Prong);
1968 AliAODVertex *primVertexAOD=0;
1980 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
1982 delete tmpCascade; tmpCascade=NULL;
1986 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
1996 TObjArray *twoTrackArray,AliVEvent *event,
1997 AliAODVertex *secVert,
2008 Bool_t dummy1,dummy2,dummy3;
2014 dummy1,dummy2,dummy3);
2015 if(!theCascade)
return 0x0;
2018 AliESDtrack *trackBachelor = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2019 theCascade->SetCharge(trackBachelor->Charge());
2026 Int_t idBachelor=(Int_t)trackBachelor->GetID();
2027 if (idBachelor > -1 && idBachelor <
fAODMapSize) {
2028 AliAODTrack* trackBachelorAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idBachelor]));
2029 if(!trackBachelorAOD) AliFatal(
"Not a standard AOD");
2030 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelorAOD);
2033 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelor);
2035 tmpCascade->GetSecondaryVtx()->AddDaughter(v0);
2037 AliAODVertex *primVertexAOD=0;
2041 if(!primVertexAOD) primVertexAOD = (AliAODVertex*)event->GetPrimaryVertex();
2053 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
2055 delete tmpCascade; tmpCascade=NULL;
2056 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2064 TObjArray *twoTrackArray,AliVEvent *event,
2065 AliAODVertex *secVert,Double_t dca,
2066 Bool_t &okD0,Bool_t &okJPSI,
2073 okD0=kFALSE; okJPSI=kFALSE; okD0fromDstar=kFALSE;
2075 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
2076 AliESDtrack *postrack = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2077 AliESDtrack *negtrack = (AliESDtrack*)twoTrackArray->UncheckedAt(1);
2080 postrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2081 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2083 Double_t momentum[3];
2084 postrack->GetPxPyPz(momentum);
2085 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2086 negtrack->GetPxPyPz(momentum);
2087 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2091 Bool_t okMassCut=kFALSE;
2102 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArray,event);
2103 if(!primVertexAOD)
return 0x0;
2105 Double_t d0z0[2],covd0z0[3];
2106 postrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2108 d0err[0] = TMath::Sqrt(covd0z0[0]);
2109 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2111 d0err[1] = TMath::Sqrt(covd0z0[0]);
2117 UShort_t
id[2]={(UShort_t)postrack->GetID(),(UShort_t)negtrack->GetID()};
2119 if(postrack->Charge()!=0 && negtrack->Charge()!=0) {
2143 the2Prong->SetSecondaryVtx(secVert);
2144 secVert->SetParent(the2Prong);
2147 the2Prong->SetPxPyPzProngs(2,px,py,pz);
2148 the2Prong->SetDCA(dca);
2149 the2Prong->Setd0Prongs(2,d0);
2151 the2Prong->SetCharge(0);
2153 delete primVertexAOD; primVertexAOD=NULL;
2161 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2162 if(postrack->GetStatus()&AliESDtrack::kESDpid) postrack->GetESDpid(esdpid0);
2163 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2164 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2165 Double_t esdpid[10];
2166 for(Int_t i=0;i<5;i++) {
2167 esdpid[i] = esdpid0[i];
2168 esdpid[5+i] = esdpid1[i];
2170 the2Prong->SetPID(2,esdpid);
2175 TObjArray *threeTrackArray,AliVEvent *event,
2176 AliAODVertex *secVert,Double_t dispersion,
2177 const AliAODVertex *vertexp1n1,
const AliAODVertex *vertexp2n1,
2178 Double_t dcap1n1,Double_t dcap2n1,Double_t dcap1p2,
2179 Bool_t useForLc, Bool_t useForDs, Bool_t &ok3Prong)
2187 if(!secVert || !vertexp1n1 || !vertexp2n1)
return 0x0;
2189 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2190 Double_t momentum[3];
2193 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2194 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2195 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2197 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2198 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2199 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2200 postrack1->GetPxPyPz(momentum);
2201 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2202 negtrack->GetPxPyPz(momentum);
2203 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2204 postrack2->GetPxPyPz(momentum);
2205 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2208 Bool_t okMassCut=kFALSE;
2217 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2218 if(!primVertexAOD)
return 0x0;
2220 Double_t d0z0[2],covd0z0[3];
2221 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2223 d0err[0] = TMath::Sqrt(covd0z0[0]);
2224 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2226 d0err[1] = TMath::Sqrt(covd0z0[0]);
2227 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2229 d0err[2] = TMath::Sqrt(covd0z0[0]);
2233 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2234 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2235 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]));
2236 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]));
2237 Short_t
charge=(Short_t)(postrack1->Charge()+postrack2->Charge()+negtrack->Charge());
2238 AliAODRecoDecayHF3Prong *the3Prong =
new AliAODRecoDecayHF3Prong(secVert,px,py,pz,d0,d0err,dca,dispersion,dist12,dist23,charge);
2240 UShort_t
id[3]={(UShort_t)postrack1->GetID(),(UShort_t)negtrack->GetID(),(UShort_t)postrack2->GetID()};
2243 delete primVertexAOD; primVertexAOD=NULL;
2276 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2277 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2278 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2279 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2280 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2281 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2283 Double_t esdpid[15];
2284 for(Int_t i=0;i<5;i++) {
2285 esdpid[i] = esdpid0[i];
2286 esdpid[5+i] = esdpid1[i];
2287 esdpid[10+i] = esdpid2[i];
2289 the3Prong->SetPID(3,esdpid);
2295 TObjArray *threeTrackArray,AliVEvent *event,
2296 AliAODVertex *secVert,Double_t dispersion,
2297 Double32_t dist12, Double32_t dist23,
2298 Double_t dcap1n1,Double_t dcap2n1,Double_t dcap1p2,
2310 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2311 Double_t momentum[3];
2314 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2315 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2316 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2318 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2319 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2320 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2321 postrack1->GetPxPyPz(momentum);
2322 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2323 negtrack->GetPxPyPz(momentum);
2324 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2325 postrack2->GetPxPyPz(momentum);
2326 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2328 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2329 if(!primVertexAOD)
return 0x0;
2330 Double_t d0z0[2],covd0z0[3];
2331 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2333 d0err[0] = TMath::Sqrt(covd0z0[0]);
2334 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2336 d0err[1] = TMath::Sqrt(covd0z0[0]);
2337 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2339 d0err[2] = TMath::Sqrt(covd0z0[0]);
2341 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2342 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2343 Short_t
charge=(Short_t)(postrack1->Charge()+postrack2->Charge()+negtrack->Charge());
2345 rd->SetSecondaryVtx(secVert);
2346 secVert->SetParent(rd);
2349 rd->SetPxPyPzProngs(3,px,py,pz);
2351 rd->Setd0Prongs(3,d0);
2353 rd->SetCharge(charge);
2356 delete primVertexAOD; primVertexAOD=NULL;
2363 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2364 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2365 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2366 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2367 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2368 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2370 Double_t esdpid[15];
2371 for(Int_t i=0;i<5;i++) {
2372 esdpid[i] = esdpid0[i];
2373 esdpid[5+i] = esdpid1[i];
2374 esdpid[10+i] = esdpid2[i];
2376 rd->SetPID(3,esdpid);
2381 TObjArray *fourTrackArray,AliVEvent *event,
2382 AliAODVertex *secVert,
2383 const AliAODVertex *vertexp1n1,
2384 const AliAODVertex *vertexp1n1p2,
2385 Double_t dcap1n1,Double_t dcap1n2,
2386 Double_t dcap2n1,Double_t dcap2n2,
2395 if(!secVert || !vertexp1n1 || !vertexp1n1p2)
return 0x0;
2397 Double_t px[4],py[4],pz[4],d0[4],d0err[4];
2399 AliESDtrack *postrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(0);
2400 AliESDtrack *negtrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(1);
2401 AliESDtrack *postrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(2);
2402 AliESDtrack *negtrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(3);
2404 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2405 negtrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2406 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2407 negtrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2409 Double_t momentum[3];
2410 postrack1->GetPxPyPz(momentum);
2411 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2412 negtrack1->GetPxPyPz(momentum);
2413 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2414 postrack2->GetPxPyPz(momentum);
2415 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2416 negtrack2->GetPxPyPz(momentum);
2417 px[3] = momentum[0]; py[3] = momentum[1]; pz[3] = momentum[2];
2420 Bool_t okMassCut=kFALSE;
2432 AliAODVertex *primVertexAOD =
PrimaryVertex(fourTrackArray,event);
2433 if(!primVertexAOD)
return 0x0;
2435 Double_t d0z0[2],covd0z0[3];
2436 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2438 d0err[0] = TMath::Sqrt(covd0z0[0]);
2439 negtrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2441 d0err[1] = TMath::Sqrt(covd0z0[0]);
2442 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2444 d0err[2] = TMath::Sqrt(covd0z0[0]);
2445 negtrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2447 d0err[3] = TMath::Sqrt(covd0z0[0]);
2451 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2452 Double_t dca[6]={dcap1n1,0.,dcap1n2,dcap2n1,0.,dcap2n2};
2453 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]));
2454 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]));
2455 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]));
2457 AliAODRecoDecayHF4Prong *the4Prong =
new AliAODRecoDecayHF4Prong(secVert,px,py,pz,d0,d0err,dca,dist12,dist3,dist4,charge);
2459 UShort_t
id[4]={(UShort_t)postrack1->GetID(),(UShort_t)negtrack1->GetID(),(UShort_t)postrack2->GetID(),(UShort_t)negtrack2->GetID()};
2462 delete primVertexAOD; primVertexAOD=NULL;
2473 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2474 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2475 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2476 if(negtrack1->GetStatus()&AliESDtrack::kESDpid) negtrack1->GetESDpid(esdpid1);
2477 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2478 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2479 Double_t esdpid3[5]={0.,0.,0.,0.,0.};
2480 if(negtrack2->GetStatus()&AliESDtrack::kESDpid) negtrack2->GetESDpid(esdpid3);
2482 Double_t esdpid[20];
2483 for(Int_t i=0;i<5;i++) {
2484 esdpid[i] = esdpid0[i];
2485 esdpid[5+i] = esdpid1[i];
2486 esdpid[10+i] = esdpid2[i];
2487 esdpid[15+i] = esdpid3[i];
2489 the4Prong->SetPID(4,esdpid);
2500 AliAODTrack *track=0;
2502 for(Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
2503 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
2504 if(!track) AliFatal(
"Not a standard AOD");
2506 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
2509 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
2512 Double_t covtest[21];
2513 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
2516 Int_t ind = (Int_t)track->GetID();
2517 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
2523 AliVEvent *event)
const
2528 AliESDVertex *vertexESD = 0;
2529 AliAODVertex *vertexAOD = 0;
2535 vertexESD =
new AliESDVertex(*
fV1);
2540 Int_t nTrks = trkArray->GetEntriesFast();
2541 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
2546 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraint")) {
2547 Float_t diamondcovxy[3];
2548 event->GetDiamondCovXY(diamondcovxy);
2549 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
2550 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
2551 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
2552 vertexer->SetVtxStart(diamond);
2553 delete diamond; diamond=NULL;
2554 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraintOnlyFitter"))
2555 vertexer->SetOnlyFitter();
2557 Int_t skipped[1000];
2558 Int_t nTrksToSkip=0,id;
2559 AliExternalTrackParam *t = 0;
2560 for(Int_t i=0; i<nTrks; i++) {
2561 t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
2562 id = (Int_t)t->GetID();
2564 skipped[nTrksToSkip++] = id;
2569 Double_t covtest[21];
2570 for(Int_t j=0; j<
event->GetNumberOfTracks(); j++) {
2571 AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
2572 if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
2573 id = (Int_t)vtrack->GetID();
2575 skipped[nTrksToSkip++] = id;
2579 for(Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
2581 vertexer->SetSkipTracks(nTrksToSkip,skipped);
2582 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
2587 TObjArray rmArray(nTrks);
2588 UShort_t *rmId =
new UShort_t[nTrks];
2589 AliESDtrack *esdTrack = 0;
2591 for(Int_t i=0; i<nTrks; i++) {
2592 t = (AliESDtrack*)trkArray->UncheckedAt(i);
2593 esdTrack =
new AliESDtrack(*t);
2594 rmArray.AddLast(esdTrack);
2595 if(esdTrack->GetID()>=0) {
2596 rmId[i]=(UShort_t)esdTrack->GetID();
2601 Float_t diamondxy[2]={
static_cast<Float_t
>(
event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
2602 vertexESD = vertexer->RemoveTracksFromVertex(
fV1,&rmArray,rmId,diamondxy);
2603 delete [] rmId; rmId=NULL;
2608 if(!vertexESD)
return vertexAOD;
2609 if(vertexESD->GetNContributors()<=0) {
2611 delete vertexESD; vertexESD=NULL;
2615 delete vertexer; vertexer=NULL;
2620 Double_t pos[3],cov[6],chi2perNDF;
2621 vertexESD->GetXYZ(pos);
2622 vertexESD->GetCovMatrix(cov);
2623 chi2perNDF = vertexESD->GetChi2toNDF();
2624 delete vertexESD; vertexESD=NULL;
2626 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF);
2637 printf(
"Secondary vertex with Kalman filter package (AliKFParticle)\n");
2639 printf(
"Secondary vertex with AliVertexerTracks\n");
2644 printf(
"Reconstruct D0->Kpi candidates with cuts:\n");
2648 printf(
"Reconstruct D*->D0pi candidates with cuts:\n");
2650 printf(
" Reconstruct a secondary vertex for the D*\n");
2652 printf(
" Assume the D* comes from the primary vertex\n");
2657 printf(
"Reconstruct J/psi from B candidates with cuts:\n");
2661 printf(
"Reconstruct 3 prong candidates.\n");
2662 printf(
" D+->Kpipi cuts:\n");
2664 printf(
" Ds->KKpi cuts:\n");
2666 printf(
" Lc->pKpi cuts:\n");
2670 printf(
"Reconstruct 4 prong candidates.\n");
2671 printf(
" D0->Kpipipi cuts:\n");
2675 printf(
"Reconstruct cascades candidates formed with v0s.\n");
2676 printf(
" Lc -> k0s P & Lc -> L Pi cuts:\n");
2684 Double_t &dispersion,Bool_t useTRefArray)
const
2689 AliESDVertex *vertexESD = 0;
2690 AliAODVertex *vertexAOD = 0;
2695 vertexESD = (AliESDVertex*)
fVertexerTracks->VertexForSelectedESDTracks(trkArray);
2697 if(!vertexESD)
return vertexAOD;
2699 if(vertexESD->GetNContributors()!=trkArray->GetEntriesFast()) {
2701 delete vertexESD; vertexESD=NULL;
2705 Double_t vertRadius2=vertexESD->GetX()*vertexESD->GetX()+vertexESD->GetY()*vertexESD->GetY();
2708 delete vertexESD; vertexESD=NULL;
2714 AliKFParticle::SetField(
fBzkG);
2716 AliKFVertex vertexKF;
2718 Int_t nTrks = trkArray->GetEntriesFast();
2719 for(Int_t i=0; i<nTrks; i++) {
2720 AliESDtrack *esdTrack = (AliESDtrack*)trkArray->At(i);
2721 AliKFParticle daughterKF(*esdTrack,211);
2722 vertexKF.AddDaughter(daughterKF);
2724 vertexESD =
new AliESDVertex(vertexKF.Parameters(),
2725 vertexKF.CovarianceMatrix(),
2727 vertexKF.GetNContributors());
2732 Double_t pos[3],cov[6],chi2perNDF;
2733 vertexESD->GetXYZ(pos);
2734 vertexESD->GetCovMatrix(cov);
2735 chi2perNDF = vertexESD->GetChi2toNDF();
2736 dispersion = vertexESD->GetDispersion();
2737 delete vertexESD; vertexESD=NULL;
2739 Int_t nprongs= (useTRefArray ? 0 : trkArray->GetEntriesFast());
2740 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
2749 Int_t retval=kFALSE;
2750 Double_t momentum[3];
2751 Double_t px[3],py[3],pz[3];
2752 for(Int_t iTrack=0; iTrack<3; iTrack++){
2753 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2754 track->GetPxPyPz(momentum);
2755 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2767 Int_t retval=kFALSE;
2768 Double_t momentum[3];
2769 Double_t px[4],py[4],pz[4];
2771 for(Int_t iTrack=0; iTrack<4; iTrack++){
2772 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2773 track->GetPxPyPz(momentum);
2774 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2786 Int_t retval=kFALSE;
2787 Double_t momentum[3];
2788 Double_t px[2],py[2],pz[2];
2790 for(Int_t iTrack=0; iTrack<2; iTrack++){
2791 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2792 track->GetPxPyPz(momentum);
2793 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2808 Double_t minv2,mrange;
2809 Double_t lolim,hilim;
2811 Bool_t retval=kFALSE;
2813 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
2818 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
2823 pdg2[0]=211; pdg2[1]=321;
2825 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2829 pdg2[0]=321; pdg2[1]=211;
2831 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2847 Double_t minv2,mrange;
2848 Double_t lolim,hilim;
2850 Bool_t retval=kFALSE;
2852 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
2857 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
2863 pdg2[0]=11; pdg2[1]=11;
2865 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2882 Double_t minv2,mrange;
2883 Double_t lolim,hilim;
2885 Bool_t retval=kFALSE;
2888 fMassCalc3->SetPxPyPzProngs(nprongs,px,py,pz);
2896 if(
fMassCalc3->Pt2() < minPt*minPt)
return retval;
2901 pdg3[0]=211; pdg3[1]=321; pdg3[2]=211;
2903 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2911 pdg3[0]=321; pdg3[1]=321; pdg3[2]=211;
2913 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2917 pdg3[0]=211; pdg3[1]=321; pdg3[2]=321;
2919 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2928 pdg3[0]=2212; pdg3[1]=321; pdg3[2]=211;
2930 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2936 pdg3[0]=211; pdg3[1]=321; pdg3[2]=2212;
2938 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2956 Double_t minv2,mrange;
2957 Double_t lolim,hilim;
2959 Bool_t retval=kFALSE;
2961 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
2966 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
2968 pdg2[0]=211; pdg2[1]=421;
2973 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2990 Double_t minv2,mrange;
2991 Double_t lolim,hilim;
2993 Bool_t retval=kFALSE;
2996 fMassCalc4->SetPxPyPzProngs(nprongs,px,py,pz);
3001 if(
fMassCalc4->Pt2() < minPt*minPt)
return retval;
3007 pdg4[0]=321; pdg4[1]=211; pdg4[2]=211; pdg4[3]=211;
3009 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3014 pdg4[0]=211; pdg4[1]=321; pdg4[2]=211; pdg4[3]=211;
3016 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3021 pdg4[0]=211; pdg4[1]=211; pdg4[2]=321; pdg4[3]=211;
3023 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3028 pdg4[0]=211; pdg4[1]=211; pdg4[2]=211; pdg4[3]=321;
3030 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3046 Double_t minv2,mrange;
3047 Double_t lolim,hilim;
3049 Bool_t retval=kFALSE;
3051 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3057 pdg2[0]=2212;pdg2[1]=310;
3059 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3063 pdg2[0]=211;pdg2[1]=3122;
3065 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3075 TObjArray &seleTrksArray,
3076 TObjArray &tracksAtVertex,
3078 UChar_t *seleFlags,Int_t *evtNumber)
3087 const AliVVertex *vprimary =
event->GetPrimaryVertex();
3093 UShort_t *indices = 0;
3094 Double_t pos[3],cov[6];
3095 const Int_t entries =
event->GetNumberOfTracks();
3096 AliCentrality* cent;
3099 fV1 =
new AliESDVertex(*((AliESDVertex*)vprimary));
3100 cent=((AliESDEvent*)event)->GetCentrality();
3102 vprimary->GetXYZ(pos);
3103 vprimary->GetCovarianceMatrix(cov);
3104 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
3105 if(entries<=0)
return;
3106 indices =
new UShort_t[entries];
3107 memset(indices,0,
sizeof(UShort_t)*entries);
3111 cent=((AliAODEvent*)event)->GetCentrality();
3113 Float_t centperc=99;
3114 if(event->GetRunNumber()<244824){
3115 centperc=cent->GetCentralityPercentile(
"V0M");
3117 AliMultSelection *multSelection = (AliMultSelection * ) event->FindListObject(
"MultSelection");
3119 centperc=multSelection->GetMultiplicityPercentile(
"V0M");
3120 Int_t qual = multSelection->GetEvSelCode();
3121 if(qual == 199 ) centperc=99.;
3124 Bool_t okDisplaced=kFALSE,okSoftPi=kFALSE,okFor3Prong=kFALSE;
3128 for(Int_t i=0; i<entries; i++) {
3130 track = (AliVTrack*)event->GetTrack(i);
3133 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
3136 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
3140 if(track->GetID()<0)
continue;
3143 Double_t covtest[21];
3144 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
3148 AliAODTrack *aodt = (AliAODTrack*)track;
3149 if(aodt->GetUsedForPrimVtxFit()) {
3150 indices[nindices]=aodt->GetID(); nindices++;
3152 Int_t ind = (Int_t)aodt->GetID();
3156 AliESDtrack *esdt = 0;
3159 esdt = (AliESDtrack*)track;
3161 esdt =
new AliESDtrack(track);
3165 okDisplaced=kFALSE; okSoftPi=kFALSE; okFor3Prong=kFALSE;
3167 evtNumber[i]=((AliMixedEvent*)event)->EventIndex(i);
3168 const AliVVertex* eventVtx=((AliMixedEvent*)event)->GetEventVertex(i);
3169 Double_t vtxPos[3],primPos[3],primCov[6],trasl[3];
3170 eventVtx->GetXYZ(vtxPos);
3171 vprimary->GetXYZ(primPos);
3172 eventVtx->GetCovarianceMatrix(primCov);
3173 for(Int_t ind=0;ind<3;ind++){
3174 trasl[ind]=vtxPos[ind]-primPos[ind];
3177 Bool_t isTransl=esdt->Translate(trasl,primCov);
3185 if(
SingleTrkCuts(esdt,centperc,okDisplaced,okSoftPi,okFor3Prong) && nSeleTrks<trkEntries) {
3186 esdt->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
3187 seleTrksArray.AddLast(esdt);
3188 tracksAtVertex.AddLast(
new AliExternalTrackParam(*esdt));
3189 seleFlags[nSeleTrks]=0;
3190 if(okDisplaced) SETBIT(seleFlags[nSeleTrks],
kBitDispl);
3191 if(okFor3Prong) SETBIT(seleFlags[nSeleTrks],
kBit3Prong);
3192 if(okSoftPi) SETBIT(seleFlags[nSeleTrks],
kBitSoftPi);
3198 Bool_t useTPC=kTRUE;
3200 Double_t nsigmatofPi=
fPidResponse->NumberOfSigmasTOF(esdt,AliPID::kPion);
3201 if(nsigmatofPi>-990. && (nsigmatofPi<-fnSigmaTOFPionLow || nsigmatofPi>
fnSigmaTOFPionHi)){
3204 Double_t nsigmatofK=
fPidResponse->NumberOfSigmasTOF(esdt,AliPID::kKaon);
3205 if(nsigmatofK>-990. && (nsigmatofK<-fnSigmaTOFKaonLow || nsigmatofK>
fnSigmaTOFKaonHi)){
3208 Double_t nsigmatofP=
fPidResponse->NumberOfSigmasTOF(esdt,AliPID::kProton);
3209 if(nsigmatofP>-990. && (nsigmatofP<-fnSigmaTOFProtonLow || nsigmatofP>
fnSigmaTOFProtonHi)){
3215 Double_t nsigmatpcPi=
fPidResponse->NumberOfSigmasTPC(esdt,AliPID::kPion);
3216 if(nsigmatpcPi>-990. && (nsigmatpcPi<-fnSigmaTPCPionLow || nsigmatpcPi>
fnSigmaTPCPionHi)){
3219 Double_t nsigmatpcK=
fPidResponse->NumberOfSigmasTPC(esdt,AliPID::kKaon);
3220 if(nsigmatpcK>-990. && (nsigmatpcK<-fnSigmaTPCKaonLow || nsigmatpcK>
fnSigmaTPCKaonHi)){
3223 Double_t nsigmatpcP=
fPidResponse->NumberOfSigmasTPC(esdt,AliPID::kProton);
3224 if(nsigmatpcP>-990. && (nsigmatpcP<-fnSigmaTPCProtonLow || nsigmatpcP>
fnSigmaTPCProtonHi)){
3240 vprimary->GetXYZ(pos);
3241 vprimary->GetCovarianceMatrix(cov);
3242 Double_t chi2toNDF = vprimary->GetChi2perNDF();
3243 Int_t ncontr=nindices;
3244 if(!strcmp(vprimary->GetTitle(),
"VertexerTracksWithContraint")) ncontr += 1;
3245 Double_t chi2=chi2toNDF*(2.*(Double_t)ncontr-3.);
3246 fV1 =
new AliESDVertex(pos,cov,chi2,ncontr,vprimary->GetName());
3247 fV1->SetTitle(vprimary->GetTitle());
3248 fV1->SetIndices(nindices,indices);
3250 if(indices) {
delete [] indices; indices=NULL; }
3271 Float_t centralityperc,
3272 Bool_t &okDisplaced,
3274 Bool_t &okFor3Prong)
const
3281 trk->RelateToVertex(
fV1,
fBzkG,kVeryBig);
3297 if(selectInfo) okDisplaced=kTRUE;
3311 if(selectInfo) okFor3Prong=kTRUE;
3318 if(selectInfo) okSoftPi=kTRUE;
3320 if(okDisplaced || okSoftPi || okFor3Prong)
return kTRUE;
3335 Double_t vertex[3]; esdV0->GetXYZ(vertex[0],vertex[1],vertex[2]);
3336 AliAODVertex *vertexV0 =
new AliAODVertex(vertex,esdV0->GetChi2V0(),AliAODVertex::kV0,2);
3339 Double_t xyz[3], pxpypz[3];
3341 esdV0->PxPyPz(pxpypz);
3342 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
3343 AliNeutralTrackParam *trackesdV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
3348 Double_t d0z0[2],covd0z0[3];
3350 trackesdV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3351 Double_t dcaV0ToPrimVertex = TMath::Sqrt(covd0z0[0]);
3353 Double_t dcaV0DaughterToPrimVertex[2];
3354 AliExternalTrackParam *posV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(0);
3355 AliExternalTrackParam *negV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(1);
3356 if( !posV0track || !negV0track) {
3357 if(trackesdV0) {
delete trackesdV0; trackesdV0=NULL;}
3359 delete primVertexAOD;
3362 posV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3365 dcaV0DaughterToPrimVertex[0] = TMath::Sqrt(covd0z0[0]);
3366 negV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3369 dcaV0DaughterToPrimVertex[1] = TMath::Sqrt(covd0z0[0]);
3370 Double_t dcaV0Daughters = esdV0->GetDcaV0Daughters();
3371 Double_t pmom[3],nmom[3];
3372 esdV0->GetNPxPyPz(nmom[0],nmom[1],nmom[2]);
3373 esdV0->GetPPxPyPz(pmom[0],pmom[1],pmom[2]);
3375 AliAODv0 *aodV0 =
new AliAODv0(vertexV0,dcaV0Daughters,dcaV0ToPrimVertex,pmom,nmom,dcaV0DaughterToPrimVertex);
3376 aodV0->SetOnFlyStatus(esdV0->GetOnFlyStatus());
3379 delete primVertexAOD;
3388 const Double_t *par=extpar->GetParameter();
3389 const Double_t *cov=extpar->GetCovariance();
3390 Double_t alpha=extpar->GetAlpha();
3391 Double_t x=extpar->GetX();
3392 esdt->Set(x,alpha,par,cov);
3399 fMassDzero=TDatabasePDG::Instance()->GetParticle(421)->Mass();
3400 fMassDplus=TDatabasePDG::Instance()->GetParticle(411)->Mass();
3401 fMassDs=TDatabasePDG::Instance()->GetParticle(431)->Mass();
3402 fMassLambdaC=TDatabasePDG::Instance()->GetParticle(4122)->Mass();
3403 fMassDstar=TDatabasePDG::Instance()->GetParticle(413)->Mass();
3404 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.