29 #include <Riostream.h>
31 #include <TDatabasePDG.h>
34 #include <TProcessID.h>
36 #include "AliVEvent.h"
37 #include "AliVVertex.h"
38 #include "AliVTrack.h"
39 #include "AliVertexerTracks.h"
40 #include "AliKFVertex.h"
41 #include "AliESDEvent.h"
42 #include "AliESDVertex.h"
43 #include "AliExternalTrackParam.h"
44 #include "AliNeutralTrackParam.h"
45 #include "AliESDtrack.h"
46 #include "AliESDtrackCuts.h"
47 #include "AliAODEvent.h"
48 #include "AliPIDResponse.h"
49 #include "AliAODRecoDecay.h"
65 #include "AliAnalysisFilter.h"
67 #include "AliMixedEvent.h"
70 #include "AliCodeTimer.h"
71 #include "AliMultSelection.h"
85 fSecVtxWithKF(kFALSE),
86 fRecoPrimVtxSkippingTrks(kFALSE),
87 fRmTrksFromPrimVtx(kFALSE),
96 fLikeSign3prong(kFALSE),
99 fUseKaonPIDfor3Prong(kFALSE),
102 fUseKaonPIDforDs(kFALSE),
105 fUseTPCPIDOnlyIfNoTOF(kFALSE),
106 fMaxMomForTPCPid(1.),
108 fnSigmaTPCPionLow(5.),
109 fnSigmaTPCPionHi(5.),
110 fnSigmaTOFPionLow(5.),
111 fnSigmaTOFPionHi(5.),
112 fnSigmaTPCKaonLow(5.),
113 fnSigmaTPCKaonHi(5.),
114 fnSigmaTOFKaonLow(5.),
115 fnSigmaTOFKaonHi(5.),
116 fnSigmaTPCProtonLow(5.),
117 fnSigmaTPCProtonHi(5.),
118 fnSigmaTOFProtonLow(5.),
119 fnSigmaTOFProtonHi(5.),
120 fMaxCentPercentileForTightCuts(-9999),
122 fTrackFilter2prongCentral(0x0),
123 fTrackFilter3prongCentral(0x0),
124 fTrackFilterSoftPi(0x0),
125 fTrackFilterBachelor(0x0),
128 fCutsDplustoK0spi(0x0),
129 fCutsDplustoKpipi(0x0),
134 fCutsD0toKpipipi(0x0),
135 fCutsDStartoKpipi(0x0),
137 fFindVertexForDstar(kTRUE),
138 fFindVertexForCascades(kTRUE),
139 fV0TypeForCascadeVertex(0),
140 fMassCutBeforeVertexing(kFALSE),
144 fOKInvMassD0(kFALSE),
145 fOKInvMassJpsi(kFALSE),
146 fOKInvMassDplus(kFALSE),
147 fOKInvMassDs(kFALSE),
148 fOKInvMassLc(kFALSE),
149 fOKInvMassDstar(kFALSE),
150 fOKInvMassD0to4p(kFALSE),
151 fOKInvMassLctoV0(kFALSE),
154 fMakeReducedRHF(kFALSE),
167 fMassCalc2 =
new AliAODRecoDecay(0x0,2,0,d02);
168 fMassCalc3 =
new AliAODRecoDecay(0x0,3,1,d03);
169 fMassCalc4 =
new AliAODRecoDecay(0x0,4,0,d04);
175 fInputAOD(source.fInputAOD),
176 fAODMapSize(source.fAODMapSize),
177 fAODMap(source.fAODMap),
178 fVertexerTracks(source.fVertexerTracks),
180 fSecVtxWithKF(source.fSecVtxWithKF),
181 fRecoPrimVtxSkippingTrks(source.fRecoPrimVtxSkippingTrks),
182 fRmTrksFromPrimVtx(source.fRmTrksFromPrimVtx),
184 fD0toKpi(source.fD0toKpi),
185 fJPSItoEle(source.fJPSItoEle),
186 f3Prong(source.f3Prong),
187 f4Prong(source.f4Prong),
188 fDstar(source.fDstar),
189 fCascades(source.fCascades),
190 fLikeSign(source.fLikeSign),
191 fLikeSign3prong(source.fLikeSign3prong),
192 fMixEvent(source.fMixEvent),
193 fPidResponse(source.fPidResponse),
194 fUseKaonPIDfor3Prong(source.fUseKaonPIDfor3Prong),
195 fUsePIDforLc(source.fUsePIDforLc),
196 fUsePIDforLc2V0(source.fUsePIDforLc2V0),
197 fUseKaonPIDforDs(source.fUseKaonPIDforDs),
198 fUseTPCPID(source.fUseTPCPID),
199 fUseTOFPID(source.fUseTOFPID),
200 fUseTPCPIDOnlyIfNoTOF(source.fUseTPCPIDOnlyIfNoTOF),
201 fMaxMomForTPCPid(source.fMaxMomForTPCPid),
202 fUsePidTag(source.fUsePidTag),
203 fnSigmaTPCPionLow(source.fnSigmaTPCPionLow),
204 fnSigmaTPCPionHi(source.fnSigmaTPCPionHi),
205 fnSigmaTOFPionLow(source.fnSigmaTOFPionLow),
206 fnSigmaTOFPionHi(source.fnSigmaTOFPionHi),
207 fnSigmaTPCKaonLow(source.fnSigmaTPCKaonLow),
208 fnSigmaTPCKaonHi(source.fnSigmaTPCKaonHi),
209 fnSigmaTOFKaonLow(source.fnSigmaTOFKaonLow),
210 fnSigmaTOFKaonHi(source.fnSigmaTOFKaonHi),
211 fnSigmaTPCProtonLow(source.fnSigmaTPCProtonLow),
212 fnSigmaTPCProtonHi(source.fnSigmaTPCProtonHi),
213 fnSigmaTOFProtonLow(source.fnSigmaTOFProtonLow),
214 fnSigmaTOFProtonHi(source.fnSigmaTOFProtonHi),
215 fMaxCentPercentileForTightCuts(source.fMaxCentPercentileForTightCuts),
216 fTrackFilter(source.fTrackFilter),
217 fTrackFilter2prongCentral(source.fTrackFilter2prongCentral),
218 fTrackFilter3prongCentral(source.fTrackFilter3prongCentral),
219 fTrackFilterSoftPi(source.fTrackFilterSoftPi),
220 fTrackFilterBachelor(source.fTrackFilterBachelor),
221 fCutsD0toKpi(source.fCutsD0toKpi),
222 fCutsJpsitoee(source.fCutsJpsitoee),
223 fCutsDplustoK0spi(source.fCutsDplustoK0spi),
224 fCutsDplustoKpipi(source.fCutsDplustoKpipi),
225 fCutsDstoK0sK(source.fCutsDstoK0sK),
226 fCutsDstoKKpi(source.fCutsDstoKKpi),
227 fCutsLctopKpi(source.fCutsLctopKpi),
228 fCutsLctoV0(source.fCutsLctoV0),
229 fCutsD0toKpipipi(source.fCutsD0toKpipipi),
230 fCutsDStartoKpipi(source.fCutsDStartoKpipi),
231 fListOfCuts(source.fListOfCuts),
232 fFindVertexForDstar(source.fFindVertexForDstar),
233 fFindVertexForCascades(source.fFindVertexForCascades),
234 fV0TypeForCascadeVertex(source.fV0TypeForCascadeVertex),
235 fMassCutBeforeVertexing(source.fMassCutBeforeVertexing),
236 fMassCalc2(source.fMassCalc2),
237 fMassCalc3(source.fMassCalc3),
238 fMassCalc4(source.fMassCalc4),
239 fOKInvMassD0(source.fOKInvMassD0),
240 fOKInvMassJpsi(source.fOKInvMassJpsi),
241 fOKInvMassDplus(source.fOKInvMassDplus),
242 fOKInvMassDs(source.fOKInvMassDs),
243 fOKInvMassLc(source.fOKInvMassLc),
244 fOKInvMassDstar(source.fOKInvMassDstar),
245 fOKInvMassD0to4p(source.fOKInvMassD0to4p),
246 fOKInvMassLctoV0(source.fOKInvMassLctoV0),
249 fMakeReducedRHF(kFALSE),
250 fMassDzero(source.fMassDzero),
251 fMassDplus(source.fMassDplus),
252 fMassDs(source.fMassDs),
253 fMassLambdaC(source.fMassLambdaC),
254 fMassDstar(source.fMassDstar),
255 fMassJpsi(source.fMassJpsi)
267 if(&source ==
this)
return *
this;
381 list->SetName(
"ListOfCuts");
385 list->Add(cutsD0toKpi);
389 list->Add(cutsJpsitoee);
393 list->Add(cutsDplustoK0spi);
397 list->Add(cutsDplustoKpipi);
401 list->Add(cutsDstoK0sK);
405 list->Add(cutsDstoKKpi);
409 list->Add(cutsLctopKpi);
413 list->Add(cutsLctoV0);
417 list->Add(cutsD0toKpipipi);
421 list->Add(cutsDStartoKpipi);
426 if (bCutsOk == kFALSE) {AliFatal(
"AliAnalysisVertexingHF::FillListOfCuts vertexing and the analysis task cuts are not consistent!");}
435 TClonesArray *aodVerticesHFTClArr,
436 TClonesArray *aodD0toKpiTClArr,
437 TClonesArray *aodJPSItoEleTClArr,
438 TClonesArray *aodCharm3ProngTClArr,
439 TClonesArray *aodCharm4ProngTClArr,
440 TClonesArray *aodDstarTClArr,
441 TClonesArray *aodCascadesTClArr,
442 TClonesArray *aodLikeSign2ProngTClArr,
443 TClonesArray *aodLikeSign3ProngTClArr)
451 TString evtype =
event->IsA()->GetName();
452 fInputAOD = ((evtype==
"AliAODEvent") ? kTRUE : kFALSE);
456 AliDebug(2,
"Creating HF candidates from AOD");
458 AliDebug(2,
"Creating HF candidates from ESD");
461 if(!aodVerticesHFTClArr) {
462 printf(
"ERROR: no aodVerticesHFTClArr");
466 printf(
"ERROR: no aodD0toKpiTClArr");
470 printf(
"ERROR: no aodJPSItoEleTClArr");
473 if(
f3Prong && !aodCharm3ProngTClArr) {
474 printf(
"ERROR: no aodCharm3ProngTClArr");
477 if(
f4Prong && !aodCharm4ProngTClArr) {
478 printf(
"ERROR: no aodCharm4ProngTClArr");
481 if(
fDstar && !aodDstarTClArr) {
482 printf(
"ERROR: no aodDstarTClArr");
486 printf(
"ERROR: no aodCascadesTClArr ");
489 if(
fLikeSign && !aodLikeSign2ProngTClArr) {
490 printf(
"ERROR: no aodLikeSign2ProngTClArr");
494 printf(
"ERROR: no aodLikeSign3ProngTClArr");
499 Int_t iVerticesHF=0,iD0toKpi=0,iJPSItoEle=0,i3Prong=0,i4Prong=0,iDstar=0,iCascades=0,iLikeSign2Prong=0,iLikeSign3Prong=0;
500 aodVerticesHFTClArr->Delete();
501 iVerticesHF = aodVerticesHFTClArr->GetEntriesFast();
502 TClonesArray &verticesHFRef = *aodVerticesHFTClArr;
504 aodD0toKpiTClArr->Delete();
505 iD0toKpi = aodD0toKpiTClArr->GetEntriesFast();
508 aodJPSItoEleTClArr->Delete();
509 iJPSItoEle = aodJPSItoEleTClArr->GetEntriesFast();
512 aodCharm3ProngTClArr->Delete();
513 i3Prong = aodCharm3ProngTClArr->GetEntriesFast();
516 aodCharm4ProngTClArr->Delete();
517 i4Prong = aodCharm4ProngTClArr->GetEntriesFast();
520 aodDstarTClArr->Delete();
521 iDstar = aodDstarTClArr->GetEntriesFast();
524 aodCascadesTClArr->Delete();
525 iCascades = aodCascadesTClArr->GetEntriesFast();
528 aodLikeSign2ProngTClArr->Delete();
529 iLikeSign2Prong = aodLikeSign2ProngTClArr->GetEntriesFast();
532 aodLikeSign3ProngTClArr->Delete();
533 iLikeSign3Prong = aodLikeSign3ProngTClArr->GetEntriesFast();
536 TClonesArray &aodD0toKpiRef = *aodD0toKpiTClArr;
537 TClonesArray &aodJPSItoEleRef = *aodJPSItoEleTClArr;
538 TClonesArray &aodCharm3ProngRef = *aodCharm3ProngTClArr;
539 TClonesArray &aodCharm4ProngRef = *aodCharm4ProngTClArr;
540 TClonesArray &aodDstarRef = *aodDstarTClArr;
541 TClonesArray &aodCascadesRef = *aodCascadesTClArr;
542 TClonesArray &aodLikeSign2ProngRef = *aodLikeSign2ProngTClArr;
543 TClonesArray &aodLikeSign3ProngRef = *aodLikeSign3ProngTClArr;
551 Int_t iTrkP1,iTrkP2,iTrkN1,iTrkN2,iTrkSoftPi,trkEntries,iv0,nv0;
552 Double_t xdummy,ydummy,dcap1n1,dcap1n2,dcap2n1,dcap1p2,dcan1n2,dcap2n2,dcaV0,dcaCasc;
553 Bool_t okD0=kFALSE,okJPSI=kFALSE,ok3Prong=kFALSE,ok4Prong=kFALSE;
554 Bool_t okDstar=kFALSE,okD0fromDstar=kFALSE;
556 AliESDtrack *postrack1 = 0;
557 AliESDtrack *postrack2 = 0;
558 AliESDtrack *negtrack1 = 0;
559 AliESDtrack *negtrack2 = 0;
560 AliESDtrack *trackPi = 0;
561 Double_t mompos1[3],mompos2[3],momneg1[3],momneg2[3];
572 AliDebug(2,Form(
" dca cut set to %f cm",dcaMax));
584 trkEntries = (
Int_t)event->GetNumberOfTracks();
585 AliDebug(1,Form(
" Number of tracks: %d",trkEntries));
588 nv0 = (
Int_t)event->GetNumberOfV0s();
589 AliDebug(1,Form(
" Number of V0s: %d",nv0));
591 if( trkEntries<2 && (trkEntries<1 || nv0<1) ) {
592 AliDebug(1,Form(
" Not enough tracks: %d",trkEntries));
613 UChar_t *seleFlags =
new UChar_t[trkEntries];
618 AliDebug(1,Form(
" Selected tracks: %d",nSeleTrks));
630 Bool_t isLikeSign2Prong=kFALSE,isLikeSign3Prong=kFALSE;
640 for(iTrkP1=0; iTrkP1<nSeleTrks; iTrkP1++) {
646 postrack1 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkP1);
647 postrack1->GetPxPyPz(mompos1);
653 for(iv0=0; iv0<nv0; iv0++){
656 if ( !TESTBIT(seleFlags[iTrkP1],
kBitBachelor) )
continue;
666 if ( (!v0 || !v0->IsA()->InheritsFrom(
"AliAODv0") ) &&
667 (!esdV0 || !esdV0->IsA()->InheritsFrom(
"AliESDv0") ) )
continue;
678 AliExternalTrackParam * posV0track;
679 AliExternalTrackParam * negV0track;
682 AliAODTrack *posVV0track = (AliAODTrack*)(v0->GetDaughter(0));
683 AliAODTrack *negVV0track = (AliAODTrack*)(v0->GetDaughter(1));
684 if( !posVV0track || !negVV0track )
continue;
689 if (posVV0track->GetID() == postrack1->GetID() ||
690 negVV0track->GetID() == postrack1->GetID())
continue;
692 if ( posVV0track->Charge() == negVV0track->Charge() )
continue;
694 if(!(posVV0track->GetStatus() & AliESDtrack::kTPCrefit) ||
695 !(negVV0track->GetStatus() & AliESDtrack::kTPCrefit))
continue;
698 posVV0track->PxPyPz(pxpypz); posVV0track->XvYvZv(xyz);
699 posVV0track->GetCovarianceXYZPxPyPz(cv); sign=posVV0track->Charge();
700 posV0track =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
701 negVV0track->PxPyPz(pxpypz); negVV0track->XvYvZv(xyz);
702 negVV0track->GetCovarianceXYZPxPyPz(cv); sign=negVV0track->Charge();
703 negV0track =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
705 AliESDtrack *posVV0track = (AliESDtrack*)(event->GetTrack( esdV0->GetPindex() ));
706 AliESDtrack *negVV0track = (AliESDtrack*)(event->GetTrack( esdV0->GetNindex() ));
707 if( !posVV0track || !negVV0track )
continue;
712 if (posVV0track->GetID() == postrack1->GetID() ||
713 negVV0track->GetID() == postrack1->GetID())
continue;
715 if ( posVV0track->Charge() == negVV0track->Charge() )
continue;
717 if(!(posVV0track->GetStatus() & AliESDtrack::kTPCrefit) ||
718 !(negVV0track->GetStatus() & AliESDtrack::kTPCrefit))
continue;
720 if (posVV0track->GetKinkIndex(0)>0 || negVV0track->GetKinkIndex(0)>0)
continue;
722 posV0track =
new AliExternalTrackParam(*posVV0track);
723 negV0track =
new AliExternalTrackParam(*negVV0track);
728 if( !posV0track || !negV0track ){
729 AliDebug(1,Form(
" Couldn't get the V0 daughters"));
734 twoTrackArrayV0->AddAt(posV0track,0);
735 twoTrackArrayV0->AddAt(negV0track,1);
738 dcaV0 = v0->DcaV0Daughters();
741 AliNeutralTrackParam *trackV0=NULL;
743 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
744 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
748 esdV0->PxPyPz(pxpypz);
749 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
750 trackV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
755 twoTrackArrayCasc->AddAt(postrack1,0);
756 twoTrackArrayCasc->AddAt(trackV0,1);
758 AliAODVertex *vertexCasc = 0;
761 dcaCasc = postrack1->GetDCA(trackV0,
fBzkG,xdummy,ydummy);
768 fV1->GetCovMatrix(cov);
769 chi2perNDF =
fV1->GetChi2toNDF();
770 vertexCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
774 delete posV0track; posV0track=NULL;
775 delete negV0track; negV0track=NULL;
776 delete trackV0; trackV0=NULL;
778 twoTrackArrayV0->Clear();
779 twoTrackArrayCasc->Clear();
784 ioCascade =
MakeCascade(twoTrackArrayCasc,event,vertexCasc,v0,dcaCasc,okCascades);
785 if(okCascades && ioCascade) {
794 AliAODVertex *vCasc =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexCasc);
795 rc->SetSecondaryVtx(vCasc);
796 vCasc->SetParent(rc);
798 AddRefs(vCasc,rc,event,twoTrackArrayCasc);
799 vCasc->AddDaughter(v0);
806 delete posV0track; posV0track=NULL;
807 delete negV0track; negV0track=NULL;
808 delete trackV0; trackV0=NULL;
809 twoTrackArrayV0->Clear();
810 twoTrackArrayCasc->Clear();
811 if(ioCascade) {
delete ioCascade; ioCascade=NULL; }
812 if(vertexCasc) {
delete vertexCasc; vertexCasc=NULL; }
823 AliDebug(1,Form(
" Not enough tracks: %d",trkEntries));
827 if(!TESTBIT(seleFlags[iTrkP1],
kBitDispl))
continue;
828 if(postrack1->Charge()<0 && !
fLikeSign)
continue;
831 for(iTrkN1=0; iTrkN1<nSeleTrks; iTrkN1++) {
836 if(iTrkN1==iTrkP1)
continue;
839 negtrack1 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN1);
841 if(negtrack1->Charge()>0 && !
fLikeSign)
continue;
843 if(!TESTBIT(seleFlags[iTrkN1],
kBitDispl))
continue;
846 if(evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
849 if(postrack1->Charge()==negtrack1->Charge()) {
850 isLikeSign2Prong=kTRUE;
852 if(iTrkN1<iTrkP1)
continue;
854 isLikeSign2Prong=kFALSE;
855 if(postrack1->Charge()<0 || negtrack1->Charge()>0)
continue;
857 if(evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
867 negtrack1->GetPxPyPz(momneg1);
870 dcap1n1 = postrack1->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
871 if(dcap1n1>dcaMax) { negtrack1=0;
continue; }
874 twoTrackArray1->AddAt(postrack1,0);
875 twoTrackArray1->AddAt(negtrack1,1);
878 twoTrackArray1->Clear();
885 io2Prong =
Make2Prong(twoTrackArray1,event,vertexp1n1,dcap1n1,okD0,okJPSI,okD0fromDstar);
887 if((
fD0toKpi && okD0) || (
fJPSItoEle && okJPSI) || (isLikeSign2Prong && (okD0 || okJPSI))) {
889 AliAODVertex *v2Prong =0x0;
890 if(!
fMakeReducedRHF)v2Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexp1n1);
891 if(!isLikeSign2Prong) {
900 rd->SetSecondaryVtx(v2Prong);
901 v2Prong->SetParent(rd);
902 AddRefs(v2Prong,rd,event,twoTrackArray1);
911 if(!okD0) v2Prong->SetParent(rd);
912 AddRefs(v2Prong,rd,event,twoTrackArray1);
923 rd->SetSecondaryVtx(v2Prong);
924 v2Prong->SetParent(rd);
925 AddRefs(v2Prong,rd,event,twoTrackArray1);
930 if(
fDstar && okD0fromDstar && !isLikeSign2Prong) {
935 vertexp1n1->AddDaughter(postrack1);
936 vertexp1n1->AddDaughter(negtrack1);
938 io2Prong->SetSecondaryVtx(vertexp1n1);
941 AliNeutralTrackParam *trackD0 =
new AliNeutralTrackParam(io2Prong);
944 for(iTrkSoftPi=0; iTrkSoftPi<nSeleTrks; iTrkSoftPi++) {
946 if(iTrkSoftPi==iTrkP1 || iTrkSoftPi==iTrkN1)
continue;
948 if(!TESTBIT(seleFlags[iTrkSoftPi],
kBitSoftPi))
continue;
951 if(evtNumber[iTrkP1]==evtNumber[iTrkSoftPi] ||
952 evtNumber[iTrkN1]==evtNumber[iTrkSoftPi] ||
953 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
958 trackD0->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
959 if(trackD0->GetSigmaY2()<0. || trackD0->GetSigmaZ2()<0.)
continue;
962 trackPi = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkSoftPi);
965 twoTrackArrayCasc->AddAt(trackPi,0);
966 twoTrackArrayCasc->AddAt(trackD0,1);
968 twoTrackArrayCasc->Clear();
973 AliAODVertex *vertexCasc = 0;
977 dcaCasc = trackPi->GetDCA(trackD0,
fBzkG,xdummy,ydummy);
984 fV1->GetCovMatrix(cov);
985 chi2perNDF =
fV1->GetChi2toNDF();
986 vertexCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
990 twoTrackArrayCasc->Clear();
995 ioCascade =
MakeCascade(twoTrackArrayCasc,event,vertexCasc,io2Prong,dcaCasc,okDstar);
1004 AliAODVertex *v2Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*vertexp1n1);
1005 rd->SetSecondaryVtx(v2Prong);
1006 v2Prong->SetParent(rd);
1007 AddRefs(v2Prong,rd,event,twoTrackArray1);
1015 AliAODVertex *vCasc = 0x0;
1023 AliAODVertex *vCasc =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexCasc);
1024 rc->SetSecondaryVtx(vCasc);
1025 vCasc->SetParent(rc);
1027 AddRefs(vCasc,rc,event,twoTrackArrayCasc);
1028 vCasc->AddDaughter(rd);
1031 twoTrackArrayCasc->Clear();
1033 if(ioCascade) {
delete ioCascade; ioCascade=NULL;}
1034 delete vertexCasc; vertexCasc=NULL;
1037 if(trackD0) {
delete trackD0; trackD0=NULL;}
1040 if(io2Prong) {
delete io2Prong; io2Prong=NULL;}
1043 twoTrackArray1->Clear();
1045 (isLikeSign2Prong && !
f3Prong) ) {
1053 for(iTrkP2=iTrkP1+1; iTrkP2<nSeleTrks; iTrkP2++) {
1055 if(iTrkP2==iTrkP1 || iTrkP2==iTrkN1)
continue;
1060 postrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkP2);
1062 if(postrack2->Charge()<0)
continue;
1064 if(!TESTBIT(seleFlags[iTrkP2],
kBitDispl))
continue;
1067 if(!TESTBIT(seleFlags[iTrkP2],
kBit3Prong))
continue;
1068 if(!TESTBIT(seleFlags[iTrkP1],
kBit3Prong))
continue;
1069 if(!TESTBIT(seleFlags[iTrkN1],
kBit3Prong))
continue;
1072 if(evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1073 evtNumber[iTrkN1]==evtNumber[iTrkP2] ||
1074 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1077 if(isLikeSign2Prong) {
1079 if(postrack1->Charge()>0) {
1080 isLikeSign3Prong=kTRUE;
1085 isLikeSign3Prong=kFALSE;
1087 if(evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1088 evtNumber[iTrkN1]==evtNumber[iTrkP2] ||
1089 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1096 Bool_t okForLcTopKpi=kTRUE;
1097 Int_t pidLcStatus=3;
1101 okForLcTopKpi=kFALSE;
1105 okForLcTopKpi=kFALSE;
1109 okForLcTopKpi=kTRUE;
1114 okForLcTopKpi=kTRUE;
1119 Bool_t okForDsToKKpi=kTRUE;
1122 !TESTBIT(seleFlags[iTrkP2],
kBitKaonCompat) ) okForDsToKKpi=kFALSE;
1134 dcap2n1 = postrack2->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1135 if(dcap2n1>dcaMax) { postrack2=0;
continue; }
1136 dcap1p2 = postrack2->GetDCA(postrack1,
fBzkG,xdummy,ydummy);
1137 if(dcap1p2>dcaMax) { postrack2=0;
continue; }
1142 if(postrack2->Charge()>0) {
1143 threeTrackArray->AddAt(postrack1,0);
1144 threeTrackArray->AddAt(negtrack1,1);
1145 threeTrackArray->AddAt(postrack2,2);
1147 threeTrackArray->AddAt(negtrack1,0);
1148 threeTrackArray->AddAt(postrack1,1);
1149 threeTrackArray->AddAt(postrack2,2);
1152 postrack2->GetPxPyPz(mompos2);
1153 Double_t pxDau[3]={mompos1[0],momneg1[0],mompos2[0]};
1154 Double_t pyDau[3]={mompos1[1],momneg1[1],mompos2[1]};
1155 Double_t pzDau[3]={mompos1[2],momneg1[2],mompos2[2]};
1162 threeTrackArray->Clear();
1170 twoTrackArray2->AddAt(postrack2,0);
1171 twoTrackArray2->AddAt(negtrack1,1);
1174 twoTrackArray2->Clear();
1183 io3Prong =
Make3Prong(threeTrackArray,event,secVert3PrAOD,dispersion,vertexp1n1,vertexp2n1,dcap1n1,dcap2n1,dcap1p2,okForLcTopKpi,okForDsToKKpi,ok3Prong);
1185 AliAODVertex *v3Prong=0x0;
1186 if(!
fMakeReducedRHF)v3Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1187 if(!isLikeSign3Prong) {
1197 v3Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1198 rd->SetSecondaryVtx(v3Prong);
1199 v3Prong->SetParent(rd);
1200 AddRefs(v3Prong,rd,event,threeTrackArray);
1213 rd->SetSecondaryVtx(v3Prong);
1214 v3Prong->SetParent(rd);
1215 AddRefs(v3Prong,rd,event,threeTrackArray);
1221 if(io3Prong) {
delete io3Prong; io3Prong=NULL;}
1222 if(secVert3PrAOD) {
delete secVert3PrAOD; secVert3PrAOD=NULL;}
1228 && !isLikeSign2Prong && !isLikeSign3Prong
1230 && dcap1n1 < fCutsD0toKpipipi->GetDCACut()
1231 && dcap2n1 < fCutsD0toKpipipi->GetDCACut()) {
1241 threeTrackArray->AddAt(postrack1,0);
1242 threeTrackArray->AddAt(negtrack1,1);
1243 threeTrackArray->AddAt(postrack2,2);
1247 for(iTrkN2=iTrkN1+1; iTrkN2<nSeleTrks; iTrkN2++) {
1249 if(iTrkN2==iTrkP1 || iTrkN2==iTrkP2 || iTrkN2==iTrkN1)
continue;
1254 negtrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN2);
1256 if(negtrack2->Charge()>0)
continue;
1258 if(!TESTBIT(seleFlags[iTrkN2],
kBitDispl))
continue;
1260 if(evtNumber[iTrkP1]==evtNumber[iTrkN2] ||
1261 evtNumber[iTrkN1]==evtNumber[iTrkN2] ||
1262 evtNumber[iTrkP2]==evtNumber[iTrkN2] ||
1263 evtNumber[iTrkP1]==evtNumber[iTrkN1] ||
1264 evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1265 evtNumber[iTrkN1]==evtNumber[iTrkP2])
continue;
1278 dcap1n2 = postrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1280 dcap2n2 = postrack2->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1284 fourTrackArray->AddAt(postrack1,0);
1285 fourTrackArray->AddAt(negtrack1,1);
1286 fourTrackArray->AddAt(postrack2,2);
1287 fourTrackArray->AddAt(negtrack2,3);
1295 fourTrackArray->Clear();
1302 io4Prong =
Make4Prong(fourTrackArray,event,secVert4PrAOD,vertexp1n1,vertexp1n1p2,dcap1n1,dcap1n2,dcap2n1,dcap2n2,ok4Prong);
1309 AliAODVertex *v4Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*secVert4PrAOD);
1310 rd->SetSecondaryVtx(v4Prong);
1311 v4Prong->SetParent(rd);
1312 AddRefs(v4Prong,rd,event,fourTrackArray);
1316 if(io4Prong) {
delete io4Prong; io4Prong=NULL;}
1317 if(secVert4PrAOD) {
delete secVert4PrAOD; secVert4PrAOD=NULL;}
1318 fourTrackArray->Clear();
1323 threeTrackArray->Clear();
1324 delete vertexp1n1p2;
1333 twoTrackArray2->Clear();
1336 for(iTrkN2=iTrkN1+1; iTrkN2<nSeleTrks; iTrkN2++) {
1338 if(iTrkN2==iTrkP1 || iTrkN2==iTrkP2 || iTrkN2==iTrkN1)
continue;
1343 negtrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN2);
1345 if(negtrack2->Charge()>0)
continue;
1347 if(!TESTBIT(seleFlags[iTrkN2],
kBitDispl))
continue;
1350 if(!TESTBIT(seleFlags[iTrkN2],
kBit3Prong))
continue;
1351 if(!TESTBIT(seleFlags[iTrkP1],
kBit3Prong))
continue;
1352 if(!TESTBIT(seleFlags[iTrkN1],
kBit3Prong))
continue;
1355 if(evtNumber[iTrkP1]==evtNumber[iTrkN2] ||
1356 evtNumber[iTrkN1]==evtNumber[iTrkN2] ||
1357 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1360 if(isLikeSign2Prong) {
1362 if(postrack1->Charge()<0) {
1363 isLikeSign3Prong=kTRUE;
1368 isLikeSign3Prong=kFALSE;
1374 Bool_t okForLcTopKpi=kTRUE;
1375 Int_t pidLcStatus=3;
1379 okForLcTopKpi=kFALSE;
1383 okForLcTopKpi=kFALSE;
1387 okForLcTopKpi=kTRUE;
1392 okForLcTopKpi=kTRUE;
1397 Bool_t okForDsToKKpi=kTRUE;
1400 !TESTBIT(seleFlags[iTrkN2],
kBitKaonCompat) ) okForDsToKKpi=kFALSE;
1412 dcap1n2 = postrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1413 if(dcap1n2>dcaMax) { negtrack2=0;
continue; }
1414 dcan1n2 = negtrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1415 if(dcan1n2>dcaMax) { negtrack2=0;
continue; }
1417 threeTrackArray->AddAt(negtrack1,0);
1418 threeTrackArray->AddAt(postrack1,1);
1419 threeTrackArray->AddAt(negtrack2,2);
1424 negtrack2->GetPxPyPz(momneg2);
1425 Double_t pxDau[3]={momneg1[0],mompos1[0],momneg2[0]};
1426 Double_t pyDau[3]={momneg1[1],mompos1[1],momneg2[1]};
1427 Double_t pzDau[3]={momneg1[2],mompos1[2],momneg2[2]};
1432 threeTrackArray->Clear();
1438 twoTrackArray2->AddAt(postrack1,0);
1439 twoTrackArray2->AddAt(negtrack2,1);
1443 twoTrackArray2->Clear();
1450 io3Prong =
Make3Prong(threeTrackArray,event,secVert3PrAOD,dispersion,vertexp1n1,vertexp1n2,dcap1n1,dcap1n2,dcan1n2,okForLcTopKpi,okForDsToKKpi,ok3Prong);
1452 AliAODVertex *v3Prong = 0x0;
1453 if(!
fMakeReducedRHF) v3Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1454 if(!isLikeSign3Prong) {
1463 rd->SetSecondaryVtx(v3Prong);
1464 v3Prong->SetParent(rd);
1465 AddRefs(v3Prong,rd,event,threeTrackArray);
1477 rd->SetSecondaryVtx(v3Prong);
1478 v3Prong->SetParent(rd);
1479 AddRefs(v3Prong,rd,event,threeTrackArray);
1485 if(io3Prong) {
delete io3Prong; io3Prong=NULL;}
1486 if(secVert3PrAOD) {
delete secVert3PrAOD; secVert3PrAOD=NULL;}
1488 threeTrackArray->Clear();
1494 twoTrackArray2->Clear();
1507 AliDebug(1,Form(
" D0->Kpi in event = %d;",
1508 (
Int_t)aodD0toKpiTClArr->GetEntriesFast()));
1511 AliDebug(1,Form(
" JPSI->ee in event = %d;",
1512 (
Int_t)aodJPSItoEleTClArr->GetEntriesFast()));
1515 AliDebug(1,Form(
" Charm->3Prong in event = %d;",
1516 (
Int_t)aodCharm3ProngTClArr->GetEntriesFast()));
1519 AliDebug(1,Form(
" Charm->4Prong in event = %d;\n",
1520 (
Int_t)aodCharm4ProngTClArr->GetEntriesFast()));
1523 AliDebug(1,Form(
" D*->D0pi in event = %d;\n",
1524 (
Int_t)aodDstarTClArr->GetEntriesFast()));
1527 AliDebug(1,Form(
" cascades -> v0 + track in event = %d;\n",
1528 (
Int_t)aodCascadesTClArr->GetEntriesFast()));
1531 AliDebug(1,Form(
" Like-sign 2Prong in event = %d;\n",
1532 (
Int_t)aodLikeSign2ProngTClArr->GetEntriesFast()));
1535 AliDebug(1,Form(
" Like-sign 3Prong in event = %d;\n",
1536 (
Int_t)aodLikeSign3ProngTClArr->GetEntriesFast()));
1540 twoTrackArray1->Delete();
delete twoTrackArray1;
1541 twoTrackArray2->Delete();
delete twoTrackArray2;
1542 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1543 twoTrackArrayV0->Delete();
delete twoTrackArrayV0;
1544 threeTrackArray->Clear();
1545 threeTrackArray->Delete();
delete threeTrackArray;
1546 fourTrackArray->Delete();
delete fourTrackArray;
1547 delete [] seleFlags; seleFlags=NULL;
1548 if(evtNumber) {
delete [] evtNumber; evtNumber=NULL;}
1549 tracksAtVertex.Delete();
1552 seleTrksArray.Delete();
1563 const AliVEvent *event,
1588 const AliVEvent *event,
1594 Int_t nDg = v->GetNDaughters();
1596 if(nDg) dg = v->GetDaughter(0);
1600 Int_t nTrks = trkArray->GetEntriesFast();
1602 AliExternalTrackParam *track = 0;
1603 AliAODTrack *aodTrack = 0;
1606 for(
Int_t i=0; i<nTrks; i++) {
1607 track = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
1608 id = (
Int_t)track->GetID();
1611 aodTrack =
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[
id]));
1612 if(!aodTrack) AliFatal(
"Not a standard AOD");
1613 v->AddDaughter(aodTrack);
1627 TClonesArray *inputArray=(TClonesArray*)aod->GetList()->FindObject(
"VerticesHF");
1628 if(!inputArray)
return;
1630 AliAODTrack *track = 0;
1631 AliAODVertex *vertex = 0;
1634 for(
Int_t iv=0; iv<inputArray->GetEntriesFast(); iv++) {
1635 vertex = (AliAODVertex*)inputArray->UncheckedAt(iv);
1636 for(
Int_t id=0;
id<vertex->GetNDaughters();
id++) {
1637 track = (AliAODTrack*)vertex->GetDaughter(
id);
1638 if(!track->GetStatus()) needtofix=kTRUE;
1640 if(needtofix)
break;
1643 if(!needtofix)
return;
1646 printf(
"Fixing references\n");
1652 for(
Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
1653 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
1654 if(!track) AliFatal(
"Not a standard AOD");
1657 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
1660 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
1664 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
1668 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
1672 Int_t ids[4]={-1,-1,-1,-1};
1673 for(
Int_t iv=0; iv<inputArray->GetEntriesFast(); iv++) {
1675 vertex = (AliAODVertex*)inputArray->UncheckedAt(iv);
1677 Int_t nDgs = vertex->GetNDaughters();
1678 for(
id=0;
id<nDgs;
id++) {
1679 track = (AliAODTrack*)vertex->GetDaughter(
id);
1680 if(track->Charge()==0) {cascade=kTRUE;
continue;}
1681 ids[id]=(
Int_t)track->GetID();
1682 vertex->RemoveDaughter(track);
1684 if(cascade)
continue;
1685 for(
id=0;
id<nDgs;
id++) {
1686 if (ids[
id]>-1 && ids[
id] < fAODMapSize) {
1687 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(
fAODMap[ids[
id]]));
1688 if(!track) AliFatal(
"Not a standard AOD");
1689 vertex->AddDaughter(track);
1708 if(!track1)
return kFALSE;
1710 if(!track2)
return kFALSE;
1711 AliESDtrack *postrack1 = 0;
1712 AliESDtrack *negtrack1 = 0;
1713 postrack1 =
new AliESDtrack(track1);
1714 negtrack1 =
new AliESDtrack(track2);
1719 Double_t dca12 = postrack1->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1721 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1724 vprimary->GetXYZ(pos);
1725 vprimary->GetCovarianceMatrix(cov);
1726 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1727 fV1->GetCovMatrix(cov);
1731 if(!track3)
return kFALSE;
1732 AliESDtrack *esdt3 =
new AliESDtrack(track3);
1736 threeTrackArray->AddAt(postrack1,0);
1737 threeTrackArray->AddAt(negtrack1,1);
1738 threeTrackArray->AddAt(esdt3,2);
1739 dca2 = esdt3->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1740 dca3 = esdt3->GetDCA(postrack1,
fBzkG,xdummy,ydummy);
1744 if (!secVert3PrAOD) {
1745 threeTrackArray->Clear();
1746 threeTrackArray->Delete();
delete threeTrackArray;
1748 delete postrack1; postrack1=NULL;
1749 delete negtrack1; negtrack1=NULL;
1750 delete esdt3; esdt3=NULL;
1756 rd=
Make3Prong(threeTrackArray, event, secVert3PrAOD,dispersion, vtxRec, vertexp2n1, dca12, dca2, dca3, rd);
1759 threeTrackArray->Clear();
1760 threeTrackArray->Delete();
delete threeTrackArray;
1762 delete postrack1; postrack1=NULL;
1763 delete negtrack1; negtrack1=NULL;
1764 delete esdt3; esdt3=NULL;
1779 if(!track1)
return kFALSE;
1781 if(!track2)
return kFALSE;
1783 AliESDtrack *esdt1 = 0;
1784 AliESDtrack *esdt2 = 0;
1785 esdt1 =
new AliESDtrack(track1);
1786 esdt2 =
new AliESDtrack(track2);
1788 twoTrackArray1->AddAt(esdt1,0);
1789 twoTrackArray1->AddAt(esdt2,1);
1794 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1797 vprimary->GetXYZ(pos);
1798 vprimary->GetCovarianceMatrix(cov);
1799 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1800 fV1->GetCovMatrix(cov);
1806 twoTrackArray1->Clear();
1807 twoTrackArray1->Delete();
delete twoTrackArray1;
1809 delete esdt1; esdt1=NULL;
1810 delete esdt2; esdt2=NULL;
1814 Bool_t okD0FromDstar=kFALSE;
1816 rd=
Make2Prong(twoTrackArray1, event, vtxRec, dca12, okD0, okJPSI, okD0FromDstar,refill,rd);
1820 twoTrackArray1->Clear();
1821 twoTrackArray1->Delete();
delete twoTrackArray1;
1822 delete esdt1; esdt1=NULL;
1823 delete esdt2; esdt2=NULL;
1834 AliAODTrack *trackB =(AliAODTrack*)event->GetTrack(
fAODMap[rCasc->
GetProngID(0)]);
1835 if(!trackB)
return kFALSE;
1837 AliNeutralTrackParam *trackV0=NULL;
1842 TClonesArray *inputArrayD0=(TClonesArray*)event->GetList()->FindObject(
"D0toKpi");
1843 if(!inputArrayD0)
return kFALSE;
1845 if(!trackD0)
return kFALSE;
1848 trackV0 =
new AliNeutralTrackParam(trackD0);
1852 if(!v0)
return kFALSE;
1854 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
1855 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
1858 AliESDtrack *esdB =
new AliESDtrack(trackB);
1860 twoTrackArrayCasc->AddAt(esdB,0);
1861 twoTrackArrayCasc->AddAt(trackV0,1);
1864 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1868 vprimary->GetXYZ(pos);
1869 vprimary->GetCovarianceMatrix(cov);
1870 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1871 fV1->GetCovMatrix(cov);
1874 AliAODVertex *vtxCasc = 0x0;
1877 Double_t dispersion, xdummy, ydummy;
1878 dca = esdB->GetDCA(trackV0,
fBzkG,xdummy,ydummy);
1882 vtxCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
1885 twoTrackArrayCasc->Clear();
1886 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1888 delete esdB; esdB=NULL;
1889 delete vtxCasc;vtxCasc=NULL;
1891 delete trackV0; trackV0=NULL;
1897 vtxCasc->SetParent(rCasc);
1898 rCasc->SetSecondaryVtx(vtxCasc);
1900 if(DStar)vtxCasc->AddDaughter(trackD0);
1901 else vtxCasc->AddDaughter(v0);
1906 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
1908 esdB->PropagateToDCA(vtxCasc,
fBzkG,kVeryBig);
1909 trackV0->PropagateToDCA(vtxCasc,
fBzkG,kVeryBig);
1911 esdB->GetPxPyPz(momentum);
1912 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
1913 trackV0->GetPxPyPz(momentum);
1914 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
1916 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArrayCasc,event);
1919 delete vtxCasc; vtxCasc=NULL;
1920 twoTrackArrayCasc->Clear();
1921 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1922 delete esdB; esdB=NULL;
1923 delete trackV0; trackV0=NULL;
1928 esdB->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1930 d0err[0] = TMath::Sqrt(covd0z0[0]);
1931 trackV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1933 d0err[1] = TMath::Sqrt(covd0z0[0]);
1934 rCasc->SetPxPyPzProngs(2,px,py,pz);
1936 rCasc->Setd0Prongs(2,d0);
1939 rCasc->SetCharge(esdB->Charge());
1941 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
1942 if(esdB->GetStatus()&AliESDtrack::kESDpid) esdB->GetESDpid(esdpid0);
1943 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
1945 for(
Int_t i=0;i<5;i++) {
1946 esdpid[i] = esdpid0[i];
1947 esdpid[5+i] = esdpid1[i];
1949 rCasc->SetPID(2,esdpid);
1954 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
1955 twoTrackArrayCasc->Clear();
1956 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1957 delete esdB; esdB=NULL;
1958 delete trackV0; trackV0=NULL;
1976 AliAODTrack *trackB =
dynamic_cast<AliAODTrack*
> (rc->
GetBachelor());
1977 if (!trackB)
return kFALSE;
1979 AliAODv0 *v0 =
dynamic_cast<AliAODv0*
> (rc->
Getv0());
1980 if (!v0)
return kFALSE;
1984 AliESDtrack *esdB =
new AliESDtrack(trackB);
1985 if (!esdB)
return kFALSE;
1987 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
1988 if (!trackVV0)
return kFALSE;
1990 AliNeutralTrackParam *trackV0 =
new AliNeutralTrackParam(trackVV0);
1991 if (!trackV0)
return kFALSE;
1994 twoTrackArrayCasc->AddAt(esdB, 0);
1995 twoTrackArrayCasc->AddAt(trackV0, 1);
1998 Double_t dispersion, xdummy, ydummy, pos[3], cov[6];
2006 const AliVVertex *vprimary =
event->GetPrimaryVertex();
2007 vprimary->GetXYZ(pos);
2008 vprimary->GetCovarianceMatrix(cov);
2009 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
2016 Double_t dca = esdB->GetDCA(trackV0,
fBzkG, xdummy, ydummy);
2020 twoTrackArrayCasc->Clear();
2021 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
2023 delete esdB; esdB=0;
2024 delete vtxCasc; vtxCasc=0;
2025 delete trackV0; trackV0=0;
2032 vtxCasc->SetParent(rc);
2033 rc->SetSecondaryVtx(vtxCasc);
2035 vtxCasc->AddDaughter(v0);
2040 Double_t momentum[3], px[2], py[2], pz[2], d0[2], d0err[2], d0z0[2], covd0z0[3];
2041 esdB->PropagateToDCA(vtxCasc,
fBzkG, kVeryBig);
2042 trackV0->PropagateToDCA(vtxCasc,
fBzkG, kVeryBig);
2043 esdB->GetPxPyPz(momentum);
2044 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2045 trackV0->GetPxPyPz(momentum);
2046 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2050 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArrayCasc, event);
2051 if (!primVertexAOD) {
2052 twoTrackArrayCasc->Clear();
2053 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
2055 delete esdB; esdB=0;
2056 delete vtxCasc; vtxCasc=0;
2057 delete trackV0; trackV0=0;
2062 esdB->PropagateToDCA(primVertexAOD,
fBzkG, kVeryBig, d0z0, covd0z0);
2064 d0err[0] = TMath::Sqrt(covd0z0[0]);
2065 trackV0->PropagateToDCA(primVertexAOD,
fBzkG, kVeryBig, d0z0, covd0z0);
2067 d0err[1] = TMath::Sqrt(covd0z0[0]);
2072 Double_t esdpid0[5] = {0., 0., 0., 0., 0.};
2073 Double_t esdpid1[5] = {0., 0., 0., 0., 0.};
2074 if (esdB->GetStatus()&AliESDtrack::kESDpid) esdB->GetESDpid(esdpid0);
2075 for (
Int_t ipid=0; ipid<5; ipid++) {
2076 esdpid[ipid] = esdpid0[ipid];
2077 esdpid[5+ipid] = esdpid1[ipid];
2084 rc->SetPxPyPzProngs(2, px, py, pz);
2085 rc->Setd0Prongs(2, d0);
2087 rc->SetCharge(esdB->Charge());
2088 rc->SetPID(2, esdpid);
2093 twoTrackArrayCasc->Clear();
2094 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
2096 delete primVertexAOD; primVertexAOD=0;
2097 delete esdB; esdB=0;
2098 delete trackV0; trackV0=0;
2106 TObjArray *twoTrackArray,AliVEvent *event,
2107 AliAODVertex *secVert,
2115 UInt_t ntref=TProcessID::GetObjectCount();
2117 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2122 Bool_t dummy1,dummy2,dummy3;
2128 dummy1,dummy2,dummy3);
2129 if(!theCascade)
return 0x0;
2132 AliESDtrack *trackPi = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2133 theCascade->SetCharge(trackPi->Charge());
2141 AliAODTrack* trackPiAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idSoftPi]));
2142 if(!trackPiAOD) AliFatal(
"Not a standard AOD");
2143 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPiAOD);
2146 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPi);
2148 tmpCascade->GetSecondaryVtx()->AddDaughter(rd2Prong);
2150 AliAODVertex *primVertexAOD=0;
2162 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
2164 delete tmpCascade; tmpCascade=NULL;
2168 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2178 TObjArray *twoTrackArray,AliVEvent *event,
2179 AliAODVertex *secVert,
2187 UInt_t ntref=TProcessID::GetObjectCount();
2189 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2194 AliESDtrack *postrack = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2195 AliESDtrack *negtrack = (AliESDtrack*)twoTrackArray->UncheckedAt(1);
2197 postrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2198 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2200 postrack->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];
2209 if(!presel)
return 0x0;
2212 okCascades = kFALSE;
2213 Bool_t dummy1,dummy2,dummy3;
2219 dummy1,dummy2,dummy3);
2220 if(!theCascade)
return 0x0;
2223 AliESDtrack *trackBachelor = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2224 theCascade->SetCharge(trackBachelor->Charge());
2231 Int_t idBachelor=(
Int_t)trackBachelor->GetID();
2232 if (idBachelor > -1 && idBachelor <
fAODMapSize) {
2233 AliAODTrack* trackBachelorAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idBachelor]));
2234 if(!trackBachelorAOD) AliFatal(
"Not a standard AOD");
2235 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelorAOD);
2238 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelor);
2240 tmpCascade->GetSecondaryVtx()->AddDaughter(v0);
2242 AliAODVertex *primVertexAOD=0;
2246 if(!primVertexAOD) primVertexAOD = (AliAODVertex*)event->GetPrimaryVertex();
2273 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
2275 delete tmpCascade; tmpCascade=NULL;
2276 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2284 TObjArray *twoTrackArray,AliVEvent *event,
2285 AliAODVertex *secVert,
Double_t dca,
2293 okD0=kFALSE; okJPSI=kFALSE; okD0fromDstar=kFALSE;
2295 UInt_t ntref=TProcessID::GetObjectCount();
2297 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2300 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
2301 AliESDtrack *postrack = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2302 AliESDtrack *negtrack = (AliESDtrack*)twoTrackArray->UncheckedAt(1);
2305 postrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2306 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2309 postrack->GetPxPyPz(momentum);
2310 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2311 negtrack->GetPxPyPz(momentum);
2312 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2327 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArray,event);
2328 if(!primVertexAOD)
return 0x0;
2331 postrack->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]);
2344 if(postrack->Charge()!=0 && negtrack->Charge()!=0) {
2368 the2Prong->SetSecondaryVtx(secVert);
2369 secVert->SetParent(the2Prong);
2372 the2Prong->SetPxPyPzProngs(2,px,py,pz);
2373 the2Prong->SetDCA(dca);
2374 the2Prong->Setd0Prongs(2,d0);
2376 the2Prong->SetCharge(0);
2378 delete primVertexAOD; primVertexAOD=NULL;
2386 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2387 if(postrack->GetStatus()&AliESDtrack::kESDpid) postrack->GetESDpid(esdpid0);
2388 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2389 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2391 for(
Int_t i=0;i<5;i++) {
2392 esdpid[i] = esdpid0[i];
2393 esdpid[5+i] = esdpid1[i];
2395 the2Prong->SetPID(2,esdpid);
2400 TObjArray *threeTrackArray,AliVEvent *event,
2401 AliAODVertex *secVert,
Double_t dispersion,
2402 const AliAODVertex *vertexp1n1,
const AliAODVertex *vertexp2n1,
2412 UInt_t ntref=TProcessID::GetObjectCount();
2414 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2418 if(!secVert || !vertexp1n1 || !vertexp2n1)
return 0x0;
2420 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2424 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2425 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2426 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2428 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2429 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2430 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2431 postrack1->GetPxPyPz(momentum);
2432 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2433 negtrack->GetPxPyPz(momentum);
2434 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2435 postrack2->GetPxPyPz(momentum);
2436 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2448 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2449 if(!primVertexAOD)
return 0x0;
2452 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2454 d0err[0] = TMath::Sqrt(covd0z0[0]);
2455 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2457 d0err[1] = TMath::Sqrt(covd0z0[0]);
2458 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2460 d0err[2] = TMath::Sqrt(covd0z0[0]);
2464 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2465 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2466 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]));
2467 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]));
2472 AliAODRecoDecayHF3Prong *the3Prong =
new AliAODRecoDecayHF3Prong(0x0,px,py,pz,d0,d0err,dca,dispersion,dist12,dist23,charge);
2475 AliAODVertex* ownsecv=secVert->CloneWithoutRefs();
2476 the3Prong->SetOwnSecondaryVtx(ownsecv);
2480 delete primVertexAOD; primVertexAOD=NULL;
2516 the3Prong->SetSecondaryVtx(secVert);
2521 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2522 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2523 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2524 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2525 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2526 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2529 for(
Int_t i=0;i<5;i++) {
2530 esdpid[i] = esdpid0[i];
2531 esdpid[5+i] = esdpid1[i];
2532 esdpid[10+i] = esdpid2[i];
2534 the3Prong->SetPID(3,esdpid);
2540 TObjArray *threeTrackArray,AliVEvent *event,
2541 AliAODVertex *secVert,
Double_t dispersion,
2542 Double32_t dist12, Double32_t dist23,
2555 UInt_t ntref=TProcessID::GetObjectCount();
2557 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2560 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2564 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2565 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2566 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2568 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2569 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2570 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2571 postrack1->GetPxPyPz(momentum);
2572 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2573 negtrack->GetPxPyPz(momentum);
2574 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2575 postrack2->GetPxPyPz(momentum);
2576 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2578 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2579 if(!primVertexAOD)
return 0x0;
2581 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2583 d0err[0] = TMath::Sqrt(covd0z0[0]);
2584 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2586 d0err[1] = TMath::Sqrt(covd0z0[0]);
2587 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2589 d0err[2] = TMath::Sqrt(covd0z0[0]);
2591 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2592 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2595 rd->SetSecondaryVtx(secVert);
2596 secVert->SetParent(rd);
2599 rd->SetPxPyPzProngs(3,px,py,pz);
2601 rd->Setd0Prongs(3,d0);
2603 rd->SetCharge(charge);
2606 delete primVertexAOD; primVertexAOD=NULL;
2613 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2614 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2615 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2616 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2617 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2618 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2621 for(
Int_t i=0;i<5;i++) {
2622 esdpid[i] = esdpid0[i];
2623 esdpid[5+i] = esdpid1[i];
2624 esdpid[10+i] = esdpid2[i];
2626 rd->SetPID(3,esdpid);
2631 TObjArray *fourTrackArray,AliVEvent *event,
2632 AliAODVertex *secVert,
2633 const AliAODVertex *vertexp1n1,
2634 const AliAODVertex *vertexp1n1p2,
2644 UInt_t ntref=TProcessID::GetObjectCount();
2646 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2650 if(!secVert || !vertexp1n1 || !vertexp1n1p2)
return 0x0;
2652 Double_t px[4],py[4],pz[4],d0[4],d0err[4];
2654 AliESDtrack *postrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(0);
2655 AliESDtrack *negtrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(1);
2656 AliESDtrack *postrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(2);
2657 AliESDtrack *negtrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(3);
2659 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2660 negtrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2661 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2662 negtrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2665 postrack1->GetPxPyPz(momentum);
2666 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2667 negtrack1->GetPxPyPz(momentum);
2668 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2669 postrack2->GetPxPyPz(momentum);
2670 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2671 negtrack2->GetPxPyPz(momentum);
2672 px[3] = momentum[0]; py[3] = momentum[1]; pz[3] = momentum[2];
2687 AliAODVertex *primVertexAOD =
PrimaryVertex(fourTrackArray,event);
2688 if(!primVertexAOD)
return 0x0;
2691 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2693 d0err[0] = TMath::Sqrt(covd0z0[0]);
2694 negtrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2696 d0err[1] = TMath::Sqrt(covd0z0[0]);
2697 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2699 d0err[2] = TMath::Sqrt(covd0z0[0]);
2700 negtrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2702 d0err[3] = TMath::Sqrt(covd0z0[0]);
2706 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2707 Double_t dca[6]={dcap1n1,0.,dcap1n2,dcap2n1,0.,dcap2n2};
2708 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]));
2709 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]));
2710 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]));
2712 AliAODRecoDecayHF4Prong *the4Prong =
new AliAODRecoDecayHF4Prong(secVert,px,py,pz,d0,d0err,dca,dist12,dist3,dist4,charge);
2717 delete primVertexAOD; primVertexAOD=NULL;
2728 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2729 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2730 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2731 if(negtrack1->GetStatus()&AliESDtrack::kESDpid) negtrack1->GetESDpid(esdpid1);
2732 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2733 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2734 Double_t esdpid3[5]={0.,0.,0.,0.,0.};
2735 if(negtrack2->GetStatus()&AliESDtrack::kESDpid) negtrack2->GetESDpid(esdpid3);
2738 for(
Int_t i=0;i<5;i++) {
2739 esdpid[i] = esdpid0[i];
2740 esdpid[5+i] = esdpid1[i];
2741 esdpid[10+i] = esdpid2[i];
2742 esdpid[15+i] = esdpid3[i];
2744 the4Prong->SetPID(4,esdpid);
2755 AliAODTrack *track=0;
2757 for(
Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
2758 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
2759 if(!track) AliFatal(
"Not a standard AOD");
2761 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
2764 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
2768 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
2772 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
2778 AliVEvent *event)
const
2783 AliESDVertex *vertexESD = 0;
2784 AliAODVertex *vertexAOD = 0;
2790 vertexESD =
new AliESDVertex(*
fV1);
2795 Int_t nTrks = trkArray->GetEntriesFast();
2796 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
2801 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraint")) {
2803 event->GetDiamondCovXY(diamondcovxy);
2804 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
2805 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
2806 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
2807 vertexer->SetVtxStart(diamond);
2808 delete diamond; diamond=NULL;
2809 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraintOnlyFitter"))
2810 vertexer->SetOnlyFitter();
2812 Int_t skipped[1000];
2813 Int_t nTrksToSkip=0,id;
2814 AliExternalTrackParam *t = 0;
2815 for(
Int_t i=0; i<nTrks; i++) {
2816 t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
2817 id = (
Int_t)t->GetID();
2819 skipped[nTrksToSkip++] = id;
2825 for(
Int_t j=0; j<
event->GetNumberOfTracks(); j++) {
2826 AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
2827 if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
2828 id = (
Int_t)vtrack->GetID();
2830 skipped[nTrksToSkip++] = id;
2834 for(
Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
2836 vertexer->SetSkipTracks(nTrksToSkip,skipped);
2837 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
2844 AliESDtrack *esdTrack = 0;
2846 for(
Int_t i=0; i<nTrks; i++) {
2847 t = (AliESDtrack*)trkArray->UncheckedAt(i);
2848 esdTrack =
new AliESDtrack(*t);
2849 rmArray.AddLast(esdTrack);
2850 if(esdTrack->GetID()>=0) {
2851 rmId[i]=(
UShort_t)esdTrack->GetID();
2856 Float_t diamondxy[2]={
static_cast<Float_t>(
event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
2857 vertexESD = vertexer->RemoveTracksFromVertex(
fV1,&rmArray,rmId,diamondxy);
2858 delete [] rmId; rmId=NULL;
2863 if(!vertexESD)
return vertexAOD;
2864 if(vertexESD->GetNContributors()<=0) {
2866 delete vertexESD; vertexESD=NULL;
2870 delete vertexer; vertexer=NULL;
2876 vertexESD->GetXYZ(pos);
2877 vertexESD->GetCovMatrix(cov);
2878 chi2perNDF = vertexESD->GetChi2toNDF();
2879 delete vertexESD; vertexESD=NULL;
2881 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF);
2892 printf(
"Secondary vertex with Kalman filter package (AliKFParticle)\n");
2894 printf(
"Secondary vertex with AliVertexerTracks\n");
2899 printf(
"Reconstruct D0->Kpi candidates with cuts:\n");
2903 printf(
"Reconstruct D*->D0pi candidates with cuts:\n");
2905 printf(
" Reconstruct a secondary vertex for the D*\n");
2907 printf(
" Assume the D* comes from the primary vertex\n");
2912 printf(
"Reconstruct J/psi from B candidates with cuts:\n");
2916 printf(
"Reconstruct 3 prong candidates.\n");
2917 printf(
" D+->Kpipi cuts:\n");
2919 printf(
" Ds->KKpi cuts:\n");
2921 printf(
" Lc->pKpi cuts:\n");
2925 printf(
"Reconstruct 4 prong candidates.\n");
2926 printf(
" D0->Kpipipi cuts:\n");
2930 printf(
"Reconstruct cascade candidates formed with v0s.\n");
2931 printf(
" Lc -> k0s P & Lc -> L Pi cuts:\n");
2933 printf(
" D+ -> K0s pi cuts:\n");
2935 printf(
" Ds -> K0s K cuts:\n");
2948 AliESDVertex *vertexESD = 0;
2949 AliAODVertex *vertexAOD = 0;
2954 vertexESD = (AliESDVertex*)
fVertexerTracks->VertexForSelectedESDTracks(trkArray);
2956 if(!vertexESD)
return vertexAOD;
2958 if(vertexESD->GetNContributors()!=trkArray->GetEntriesFast()) {
2960 delete vertexESD; vertexESD=NULL;
2964 Double_t vertRadius2=vertexESD->GetX()*vertexESD->GetX()+vertexESD->GetY()*vertexESD->GetY();
2967 delete vertexESD; vertexESD=NULL;
2973 AliKFParticle::SetField(
fBzkG);
2975 AliKFVertex vertexKF;
2977 Int_t nTrks = trkArray->GetEntriesFast();
2978 for(
Int_t i=0; i<nTrks; i++) {
2979 AliESDtrack *esdTrack = (AliESDtrack*)trkArray->At(i);
2980 AliKFParticle daughterKF(*esdTrack,211);
2981 vertexKF.AddDaughter(daughterKF);
2983 vertexESD =
new AliESDVertex(vertexKF.Parameters(),
2984 vertexKF.CovarianceMatrix(),
2986 vertexKF.GetNContributors());
2992 vertexESD->GetXYZ(pos);
2993 vertexESD->GetCovMatrix(cov);
2994 chi2perNDF = vertexESD->GetChi2toNDF();
2995 dispersion = vertexESD->GetDispersion();
2996 delete vertexESD; vertexESD=NULL;
2998 Int_t nprongs= (useTRefArray ? 0 : trkArray->GetEntriesFast());
2999 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
3008 Int_t retval=kFALSE;
3011 for(
Int_t iTrack=0; iTrack<3; iTrack++){
3012 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
3013 track->GetPxPyPz(momentum);
3014 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
3026 Int_t retval=kFALSE;
3030 for(
Int_t iTrack=0; iTrack<4; iTrack++){
3031 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
3032 track->GetPxPyPz(momentum);
3033 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
3045 Int_t retval=kFALSE;
3049 for(
Int_t iTrack=0; iTrack<2; iTrack++){
3050 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
3051 track->GetPxPyPz(momentum);
3052 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
3072 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3077 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3082 pdg2[0]=211; pdg2[1]=321;
3084 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3088 pdg2[0]=321; pdg2[1]=211;
3090 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3111 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3116 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3122 pdg2[0]=11; pdg2[1]=11;
3124 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3147 fMassCalc3->SetPxPyPzProngs(nprongs,px,py,pz);
3155 if(
fMassCalc3->Pt2() < minPt*minPt)
return retval;
3160 pdg3[0]=211; pdg3[1]=321; pdg3[2]=211;
3162 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3170 pdg3[0]=321; pdg3[1]=321; pdg3[2]=211;
3172 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3176 pdg3[0]=211; pdg3[1]=321; pdg3[2]=321;
3178 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3187 pdg3[0]=2212; pdg3[1]=321; pdg3[2]=211;
3189 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3195 pdg3[0]=211; pdg3[1]=321; pdg3[2]=2212;
3197 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3220 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3225 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3227 pdg2[0]=211; pdg2[1]=421;
3232 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3255 fMassCalc4->SetPxPyPzProngs(nprongs,px,py,pz);
3260 if(
fMassCalc4->Pt2() < minPt*minPt)
return retval;
3266 pdg4[0]=321; pdg4[1]=211; pdg4[2]=211; pdg4[3]=211;
3268 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3273 pdg4[0]=211; pdg4[1]=321; pdg4[2]=211; pdg4[3]=211;
3275 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3280 pdg4[0]=211; pdg4[1]=211; pdg4[2]=321; pdg4[3]=211;
3282 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3287 pdg4[0]=211; pdg4[1]=211; pdg4[2]=211; pdg4[3]=321;
3289 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3310 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3313 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3322 pdg2[0] = 2212; pdg2[1] = 310;
3324 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3328 pdg2[0] = 211; pdg2[1] = 3122;
3330 if ((minv2>lolim*lolim) && (minv2<hilim*hilim)) {
3341 pdg2[0] = 211; pdg2[1] = 310;
3343 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3353 pdg2[0] = 321; pdg2[1] = 310;
3355 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3368 UChar_t *seleFlags,
Int_t *evtNumber)
3377 const AliVVertex *vprimary =
event->GetPrimaryVertex();
3385 const Int_t entries =
event->GetNumberOfTracks();
3386 AliCentrality* cent;
3389 fV1 =
new AliESDVertex(*((AliESDVertex*)vprimary));
3392 vprimary->GetXYZ(pos);
3393 vprimary->GetCovarianceMatrix(cov);
3394 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
3395 if(entries<=0)
return;
3397 memset(indices,0,
sizeof(
UShort_t)*entries);
3404 if(event->GetRunNumber()<244824){
3405 centperc=cent->GetCentralityPercentile(
"V0M");
3407 AliMultSelection *multSelection = (AliMultSelection * ) event->FindListObject(
"MultSelection");
3409 centperc=multSelection->GetMultiplicityPercentile(
"V0M");
3410 Int_t qual = multSelection->GetEvSelCode();
3411 if(qual == 199 ) centperc=0.1;
3414 Bool_t okDisplaced=kFALSE,okSoftPi=kFALSE,okFor3Prong=kFALSE,okBachelor=kFALSE;
3418 for(
Int_t i=0; i<entries; i++) {
3420 track = (AliVTrack*)event->GetTrack(i);
3423 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
3426 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
3430 if(track->GetID()<0)
continue;
3434 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
3438 AliAODTrack *aodt = (AliAODTrack*)track;
3439 if(aodt->GetUsedForPrimVtxFit()) {
3440 indices[nindices]=aodt->GetID(); nindices++;
3446 AliESDtrack *esdt = 0;
3449 esdt = (AliESDtrack*)track;
3451 esdt =
new AliESDtrack(track);
3455 okDisplaced=kFALSE; okSoftPi=kFALSE; okFor3Prong=kFALSE; okBachelor=kFALSE;
3457 evtNumber[i]=((AliMixedEvent*)event)->EventIndex(i);
3458 const AliVVertex* eventVtx=((AliMixedEvent*)event)->GetEventVertex(i);
3459 Double_t vtxPos[3],primPos[3],primCov[6],trasl[3];
3460 eventVtx->GetXYZ(vtxPos);
3461 vprimary->GetXYZ(primPos);
3462 eventVtx->GetCovarianceMatrix(primCov);
3463 for(
Int_t ind=0;ind<3;ind++){
3464 trasl[ind]=vtxPos[ind]-primPos[ind];
3467 Bool_t isTransl=esdt->Translate(trasl,primCov);
3475 if(
SingleTrkCuts(esdt,centperc,okDisplaced,okSoftPi,okFor3Prong,okBachelor) && nSeleTrks<trkEntries) {
3476 esdt->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
3477 seleTrksArray.AddLast(esdt);
3478 tracksAtVertex.AddLast(
new AliExternalTrackParam(*esdt));
3479 seleFlags[nSeleTrks]=0;
3480 if(okDisplaced) SETBIT(seleFlags[nSeleTrks],
kBitDispl);
3481 if(okFor3Prong) SETBIT(seleFlags[nSeleTrks],
kBit3Prong);
3482 if(okSoftPi) SETBIT(seleFlags[nSeleTrks],
kBitSoftPi);
3483 if(okBachelor) SETBIT(seleFlags[nSeleTrks],
kBitBachelor);
3491 if(nsigmatofPi>-990. && (nsigmatofPi<-fnSigmaTOFPionLow || nsigmatofPi>
fnSigmaTOFPionHi)){
3495 if(nsigmatofK>-990. && (nsigmatofK<-fnSigmaTOFKaonLow || nsigmatofK>
fnSigmaTOFKaonHi)){
3499 if(nsigmatofP>-990. && (nsigmatofP<-fnSigmaTOFProtonLow || nsigmatofP>
fnSigmaTOFProtonHi)){
3506 if(nsigmatpcPi>-990. && (nsigmatpcPi<-fnSigmaTPCPionLow || nsigmatpcPi>
fnSigmaTPCPionHi)){
3510 if(nsigmatpcK>-990. && (nsigmatpcK<-fnSigmaTPCKaonLow || nsigmatpcK>
fnSigmaTPCKaonHi)){
3514 if(nsigmatpcP>-990. && (nsigmatpcP<-fnSigmaTPCProtonLow || nsigmatpcP>
fnSigmaTPCProtonHi)){
3530 vprimary->GetXYZ(pos);
3531 vprimary->GetCovarianceMatrix(cov);
3532 Double_t chi2toNDF = vprimary->GetChi2perNDF();
3533 Int_t ncontr=nindices;
3534 if(!strcmp(vprimary->GetTitle(),
"VertexerTracksWithContraint")) ncontr += 1;
3536 fV1 =
new AliESDVertex(pos,cov,chi2,ncontr,vprimary->GetName());
3537 fV1->SetTitle(vprimary->GetTitle());
3538 fV1->SetIndices(nindices,indices);
3540 if(indices) {
delete [] indices; indices=NULL; }
3565 Bool_t &okBachelor)
const
3572 trk->RelateToVertex(
fV1,
fBzkG,kVeryBig);
3588 if(selectInfo) okDisplaced=kTRUE;
3602 if(selectInfo) okFor3Prong=kTRUE;
3609 if(selectInfo) okSoftPi=kTRUE;
3617 if(okDisplaced) selectInfo=1;
3620 if(selectInfo) okBachelor=kTRUE;
3622 if(okDisplaced || okSoftPi || okFor3Prong || okBachelor)
return kTRUE;
3637 Double_t vertex[3]; esdV0->GetXYZ(vertex[0],vertex[1],vertex[2]);
3638 AliAODVertex *vertexV0 =
new AliAODVertex(vertex,esdV0->GetChi2V0(),AliAODVertex::kV0,2);
3643 esdV0->PxPyPz(pxpypz);
3644 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
3645 AliNeutralTrackParam *trackesdV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
3652 trackesdV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3653 Double_t dcaV0ToPrimVertex = TMath::Sqrt(covd0z0[0]);
3655 Double_t dcaV0DaughterToPrimVertex[2];
3656 AliExternalTrackParam *posV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(0);
3657 AliExternalTrackParam *negV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(1);
3658 if( !posV0track || !negV0track) {
3659 if(trackesdV0) {
delete trackesdV0; trackesdV0=NULL;}
3661 delete primVertexAOD;
3664 posV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3667 dcaV0DaughterToPrimVertex[0] = TMath::Sqrt(covd0z0[0]);
3668 negV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3671 dcaV0DaughterToPrimVertex[1] = TMath::Sqrt(covd0z0[0]);
3672 Double_t dcaV0Daughters = esdV0->GetDcaV0Daughters();
3674 esdV0->GetNPxPyPz(nmom[0],nmom[1],nmom[2]);
3675 esdV0->GetPPxPyPz(pmom[0],pmom[1],pmom[2]);
3677 AliAODv0 *aodV0 =
new AliAODv0(vertexV0,dcaV0Daughters,dcaV0ToPrimVertex,pmom,nmom,dcaV0DaughterToPrimVertex);
3678 aodV0->SetOnFlyStatus(esdV0->GetOnFlyStatus());
3681 delete primVertexAOD;
3690 const Double_t *par=extpar->GetParameter();
3691 const Double_t *cov=extpar->GetCovariance();
3694 esdt->Set(x,alpha,par,cov);
3701 fMassDzero=TDatabasePDG::Instance()->GetParticle(421)->Mass();
3702 fMassDplus=TDatabasePDG::Instance()->GetParticle(411)->Mass();
3703 fMassDs=TDatabasePDG::Instance()->GetParticle(431)->Mass();
3704 fMassLambdaC=TDatabasePDG::Instance()->GetParticle(4122)->Mass();
3705 fMassDstar=TDatabasePDG::Instance()->GetParticle(413)->Mass();
3706 fMassJpsi=TDatabasePDG::Instance()->GetParticle(443)->Mass();
AliAODRecoDecay * fMassCalc4
for 3 prong
Bool_t fUsePidTag
upper momentum limit to apply TPC PID
void SetSelectionBit(Int_t i)
selection map
Bool_t CheckCutsConsistency()
void UnsetOwnSecondaryVtx()
void SetupPID(AliVEvent *event)
AliAnalysisFilter * fTrackFilterSoftPi
Track Filter for displaced vertices in PbPb central events (tighter cuts) for 3 prong (D+...
AliVertexerTracks * fVertexerTracks
Float_t GetMassCut(Int_t iPtBin=0) const
AliPIDResponse * fPidResponse
event mixing
AliRDHFCutsDstoK0sK * fCutsDstoK0sK
D+->Kpipi cuts.
AliAODVertex * ReconstructSecondaryVertex(TObjArray *trkArray, Double_t &dispersion, Bool_t useTRefArray=kTRUE) const
Double_t fnSigmaTOFPionHi
Low cut value on n. of sigmas for pi TOF PID.
Double_t fnSigmaTOFProtonHi
Low cut value on n. of sigmas for p TOF PID.
virtual void PrintAll() const
void UnsetOwnPrimaryVtx()
AliAODVertex * PrimaryVertex(const TObjArray *trkArray=0x0, AliVEvent *event=0x0) const
Double_t GetDist12toPrim() const
AliAnalysisFilter * fTrackFilter3prongCentral
Track Filter for displaced vertices in PbPb central events (tighter cuts) for 2 prong (D0->Kpi) ...
AliAnalysisVertexingHF & operator=(const AliAnalysisVertexingHF &source)
virtual void PrintAll() const
Float_t GetMassCut(Int_t iPtBin=0) const
AliRDHFCutsDstoKKpi * fCutsDstoKKpi
Ds->K0s+K.
Int_t IsD0FromDStarSelected(Double_t pt, TObject *obj, Int_t selectionLevel, AliAODEvent *aod) const
Bool_t fSecVtxWithKF
z componenent of field in kG
AliRDHFCutsLctopKpi * fCutsLctopKpi
Ds->KKpi cuts.
Bool_t fRmTrksFromPrimVtx
Bool_t SelectInvMassAndPt3prong(Double_t *px, Double_t *py, Double_t *pz, Int_t pidLcStatus=3)
Int_t fnTrksTotal
triplet fullfilling Lc inv mass selection
Double_t fnSigmaTOFProtonLow
High cut value on n. of sigmas for p TPC PID.
Bool_t fOKInvMassDplus
pair fullfilling Jpsi inv mass selection
Double_t fnSigmaTPCKaonLow
High cut value on n. of sigmas for pi TOF PID.
Bool_t SingleTrkCuts(AliESDtrack *trk, Float_t centralityperc, Bool_t &okDisplaced, Bool_t &okSoftPi, Bool_t &ok3prong, Bool_t &okBachelor) const
Bool_t FillRecoCand(AliVEvent *event, AliAODRecoDecayHF3Prong *rd3)
Bool_t fUseTPCPIDOnlyIfNoTOF
switch use/not use TOF PID
AliRDHFCutsD0toKpi * fCutsD0toKpi
Track Filter for bachelor.
Bool_t fMixEvent
Like-sign triplets.
virtual void DeleteRecoD()
Float_t GetMassCut(Int_t iPtBin=0) const
Bool_t fUseTOFPID
switch use/not use TPC PID
Bool_t fOKInvMassD0to4p
combination fullfilling D* inv mass selection
Bool_t fOKInvMassLc
triplet fullfilling Ds inv mass selection
Float_t GetMassCut(Int_t iPtBin=0) const
Int_t * fAODMap
map between index and ID for AOD tracks
Double_t fnSigmaTPCPionLow
flag to control usage of PID tagging
Bool_t FillRecoCasc(AliVEvent *event, AliAODRecoCascadeHF *rc, Bool_t isDStar, Bool_t recoSecVtx=kFALSE)
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *)
Bool_t fFindVertexForCascades
reconstruct a secondary vertex or assume it's from the primary vertex
Double_t fnSigmaTPCKaonHi
Low cut value on n. of sigmas for K TPC PID.
AliAODPidHF * GetPidHF() const
Bool_t fUseKaonPIDfor3Prong
PID response.
AliRDHFCutsDplustoK0spi * fCutsDplustoK0spi
J/psi->ee cuts.
AliRDHFCutsDplustoKpipi * fCutsDplustoKpipi
D+->K0s+pi.
AliRDHFCutsD0toKpipipi * fCutsD0toKpipipi
Lc –> v0 + bachelor cuts.
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Bool_t fLikeSign3prong
Like-sign pairs.
Bool_t SelectInvMassAndPtCascade(Double_t *px, Double_t *py, Double_t *pz)
AliAODRecoDecayHF4Prong * Make4Prong(TObjArray *fourTrackArray, AliVEvent *event, AliAODVertex *secVert, const AliAODVertex *vertexp1n1, const AliAODVertex *vertexp1n1p2, Double_t dcap1n1, Double_t dcap1n2, Double_t dcap2n1, Double_t dcap2n2, Bool_t &ok4Prong)
Class for cuts on AOD reconstructed D+->Kpipi.
Float_t GetDCACut(Int_t iPtBin=0) const
Double_t fnSigmaTPCProtonLow
High cut value on n. of sigmas for K TOF PID.
virtual ~AliAnalysisVertexingHF()
void SetParametersAtVertex(AliESDtrack *esdt, const AliExternalTrackParam *extpar) const
Float_t GetMassCut(Int_t iPtBin=0) const
Float_t GetDCACut(Int_t iPtBin=0) const
Double_t fMaxMomForTPCPid
use TPC PID only for tracks that without TOF
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Int_t GetIsFilled() const
Class for cuts on AOD reconstructed Ds->K0S+K.
Float_t GetMassCut(Int_t iPtBin=0) const
Float_t GetMassCut(Int_t iPtBin=0) const
AliAnalysisFilter * fTrackFilter2prongCentral
Track Filter for displaced vertices.
Double_t fnSigmaTOFKaonLow
High cut value on n. of sigmas for K TPC PID.
Bool_t fCascades
D*->D0pi.
Float_t fMaxCentPercentileForTightCuts
High cut value on n. of sigmas for p TOF PID.
AliAODTrack * GetBachelor() const
Bool_t fOKInvMassDstar
triplet fullfilling Lc inv mass selection
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel, AliAODEvent *aod)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Double_t fBzkG
vertexer, to compute secondary vertices
Float_t GetDCACut(Int_t iPtBin=0) const
Bool_t fUsePIDforLc2V0
PID for Lambdac: 0=no, 1=proton, 2=p and pi.
void SetProngIDs(Int_t nIDs, UShort_t *id)
Class for cuts on AOD reconstructed D+->K0S+pi.
virtual void PrintAll() const
UShort_t GetProngID(Int_t ip) const
Float_t GetMassCut(Int_t iPtBin=0) const
Bool_t fUseKaonPIDforDs
PID for Lambdac 2 V0: 0=no, 1=proton,.
Bool_t fUseTPCPID
Kaon PID usage for Ds.
Bool_t fOKInvMassLctoV0
4tracks fullfilling D0 inv mass selection
void SetPrimaryVtxRef(TObject *vtx)
primary vertex
Double_t GetDist23toPrim() const
void SetOwnPrimaryVtx(const AliAODVertex *vtx)
Bool_t fFindVertexForDstar
pointer to list of cuts for output file
Double_t fnSigmaTOFKaonHi
Low cut value on n. of sigmas for K TOF PID.
AliAODRecoDecay * fMassCalc2
to go faster in PbPb
Float_t GetDCACut(Int_t iPtBin=0) const
void FindCandidates(AliVEvent *event, TClonesArray *aodVerticesHFTClArr, TClonesArray *aodD0toKpiTClArr, TClonesArray *aodJPSItoEleTClArr, TClonesArray *aodCharm3ProngTClArr, TClonesArray *aodCharm4ProngTClArr, TClonesArray *aodDstarTClArr, TClonesArray *aodCascadesTClArr, TClonesArray *aodLikeSign2ProngTClArr, TClonesArray *aodLikeSign3ProngTClArr)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
void AddDaughterRefs(AliAODVertex *v, const AliVEvent *event, const TObjArray *trkArray) const
Bool_t PreSelect(TObject *obj, AliAODv0 *v0, AliVTrack *bachelorTrack)
Int_t fUsePIDforLc
Kaon PID usage for 3 prongs.
Bool_t IsEventSelected(AliVEvent *event)
Bool_t fLikeSign
cascades, Lc –> v0+track, D+ –> K0s+Pi, Ds –> K0s+K
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
void SetUsePID(Bool_t flag=kTRUE)
Bool_t fDstar
D0->Kpipipi.
virtual void PrintAll() const
Float_t GetDCACut(Int_t iPtBin=0) const
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
AliRDHFCutsJpsitoee * fCutsJpsitoee
D0->Kpi cuts.
Bool_t SelectInvMassAndPtJpsiee(Double_t *px, Double_t *py, Double_t *pz)
Bool_t fOKInvMassD0
for 4 prong
void Setd0errProngs(Int_t nprongs, Double_t *d0)
Bool_t fOKInvMassJpsi
pair fullfilling D0 inv mass selection
Bool_t SelectInvMassAndPtDstarD0pi(Double_t *px, Double_t *py, Double_t *pz)
Int_t fV0TypeForCascadeVertex
reconstruct a secondary vertex or assume it's from the primary vertex
Bool_t fJPSItoEle
D0->Kpi.
AliAnalysisFilter * fTrackFilterBachelor
Track Filter for D* soft pion.
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Bool_t GetIsUsePID() const
Bool_t fMassCutBeforeVertexing
Select which V0 type we want to use for the cascas.
Int_t fAODMapSize
input from AOD (kTRUE) or ESD (kFALSE)
void FixReferences(AliAODEvent *aod)
void SetSelectionBitForPID(AliRDHFCuts *cuts, AliAODRecoDecayHF *rd, Int_t bit)
AliAODRecoCascadeHF * MakeCascade(TObjArray *twoTrackArray, AliVEvent *event, AliAODVertex *secVert, AliAODRecoDecayHF2Prong *rd2Prong, Double_t dca, Bool_t &okDstar)
void SelectTracksAndCopyVertex(const AliVEvent *event, Int_t trkEntries, TObjArray &seleTrksArray, TObjArray &tracksAtVertex, Int_t &nSeleTrks, UChar_t *seleFlags, Int_t *evtNumber)
void SetSigmaVert(Double_t sigmaVert)
Bool_t fRecoPrimVtxSkippingTrks
if kTRUE use KF vertexer, else AliVertexerTracks
AliAODRecoDecay * fMassCalc3
for 2 prong
TList * fListOfCuts
Dstar->D0pi cuts.
Bool_t RecoSecondaryVertexForCascades(AliVEvent *event, AliAODRecoCascadeHF *rc)
Float_t GetMassCut(Int_t iPtBin=0) const
Double_t fnSigmaTPCProtonHi
Low cut value on n. of sigmas for p TPC PID.
Double_t GetMinPtCandidate() const
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Float_t GetMassCut(Int_t iPtBin=0) const
AliRDHFCutsLctoV0 * fCutsLctoV0
Lc->pKpi cuts.
Float_t GetDCACut(Int_t iPtBin=0) const
void MapAODtracks(AliVEvent *aod)
AliAODRecoDecayHF3Prong * Make3Prong(TObjArray *threeTrackArray, AliVEvent *event, AliAODVertex *secVert, Double_t dispersion, const AliAODVertex *vertexp1n1, const AliAODVertex *vertexp2n1, Double_t dcap1n1, Double_t dcap2n1, Double_t dcap1p2, Bool_t useForLc, Bool_t useForDs, Bool_t &ok3Prong)
AliRDHFCutsDStartoKpipi * fCutsDStartoKpipi
D0->Kpipipi cuts.
AliAnalysisFilter * fTrackFilter
max. centrality percentile for using tight cuts
Float_t GetDCACut(Int_t iPtBin=0) const
Bool_t SelectInvMassAndPtD0Kpi(Double_t *px, Double_t *py, Double_t *pz)
Bool_t GetUsePID(Int_t iPtBin=0) const
AliAODv0 * TransformESDv0toAODv0(AliESDv0 *esdv0, TObjArray *twoTrackArrayV0)
Bool_t SelectInvMassAndPt4prong(Double_t *px, Double_t *py, Double_t *pz)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Double_t fnSigmaTPCPionHi
Low cut value on n. of sigmas for pi TPC PID.
Bool_t fD0toKpi
primary vertex
Bool_t fOKInvMassDs
triplet fullfilling D+ inv mass selection
void SetIsFilled(Int_t filled)
void AddRefs(AliAODVertex *v, AliAODRecoDecayHF *rd, const AliVEvent *event, const TObjArray *trkArray) const
AliAODRecoDecayHF2Prong * Make2Prong(TObjArray *twoTrackArray1, AliVEvent *event, AliAODVertex *secVert, Double_t dcap1n1, Bool_t &okD0, Bool_t &okJPSI, Bool_t &okD0fromDstar, Bool_t refill=kFALSE, AliAODRecoDecayHF2Prong *rd=0x0)
Double_t fnSigmaTOFPionLow
High cut value on n. of sigmas for pi TPC PID.