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);
1938 rCasc->SetCharge(esdB->Charge());
1940 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
1941 if(esdB->GetStatus()&AliESDtrack::kESDpid) esdB->GetESDpid(esdpid0);
1942 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
1944 for(
Int_t i=0;i<5;i++) {
1945 esdpid[i] = esdpid0[i];
1946 esdpid[5+i] = esdpid1[i];
1948 rCasc->SetPID(2,esdpid);
1953 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
1954 twoTrackArrayCasc->Clear();
1955 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1956 delete esdB; esdB=NULL;
1957 delete trackV0; trackV0=NULL;
1975 AliAODTrack *trackB =
dynamic_cast<AliAODTrack*
> (rc->
GetBachelor());
1976 if (!trackB)
return kFALSE;
1978 AliAODv0 *v0 =
dynamic_cast<AliAODv0*
> (rc->
Getv0());
1979 if (!v0)
return kFALSE;
1983 AliESDtrack *esdB =
new AliESDtrack(trackB);
1984 if (!esdB)
return kFALSE;
1986 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
1987 if (!trackVV0)
return kFALSE;
1989 AliNeutralTrackParam *trackV0 =
new AliNeutralTrackParam(trackVV0);
1990 if (!trackV0)
return kFALSE;
1993 twoTrackArrayCasc->AddAt(esdB, 0);
1994 twoTrackArrayCasc->AddAt(trackV0, 1);
1997 Double_t dispersion, xdummy, ydummy, pos[3], cov[6];
2005 const AliVVertex *vprimary =
event->GetPrimaryVertex();
2006 vprimary->GetXYZ(pos);
2007 vprimary->GetCovarianceMatrix(cov);
2008 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
2015 Double_t dca = esdB->GetDCA(trackV0,
fBzkG, xdummy, ydummy);
2019 twoTrackArrayCasc->Clear();
2020 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
2022 delete esdB; esdB=0;
2023 delete vtxCasc; vtxCasc=0;
2024 delete trackV0; trackV0=0;
2031 vtxCasc->SetParent(rc);
2032 rc->SetSecondaryVtx(vtxCasc);
2034 vtxCasc->AddDaughter(v0);
2039 Double_t momentum[3], px[2], py[2], pz[2], d0[2], d0err[2], d0z0[2], covd0z0[3];
2040 esdB->PropagateToDCA(vtxCasc,
fBzkG, kVeryBig);
2041 trackV0->PropagateToDCA(vtxCasc,
fBzkG, kVeryBig);
2042 esdB->GetPxPyPz(momentum);
2043 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2044 trackV0->GetPxPyPz(momentum);
2045 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2049 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArrayCasc, event);
2050 if (!primVertexAOD) {
2051 twoTrackArrayCasc->Clear();
2052 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
2054 delete esdB; esdB=0;
2055 delete vtxCasc; vtxCasc=0;
2056 delete trackV0; trackV0=0;
2061 esdB->PropagateToDCA(primVertexAOD,
fBzkG, kVeryBig, d0z0, covd0z0);
2063 d0err[0] = TMath::Sqrt(covd0z0[0]);
2064 trackV0->PropagateToDCA(primVertexAOD,
fBzkG, kVeryBig, d0z0, covd0z0);
2066 d0err[1] = TMath::Sqrt(covd0z0[0]);
2071 Double_t esdpid0[5] = {0., 0., 0., 0., 0.};
2072 Double_t esdpid1[5] = {0., 0., 0., 0., 0.};
2073 if (esdB->GetStatus()&AliESDtrack::kESDpid) esdB->GetESDpid(esdpid0);
2074 for (
Int_t ipid=0; ipid<5; ipid++) {
2075 esdpid[ipid] = esdpid0[ipid];
2076 esdpid[5+ipid] = esdpid1[ipid];
2083 rc->SetPxPyPzProngs(2, px, py, pz);
2084 rc->Setd0Prongs(2, d0);
2086 rc->SetCharge(esdB->Charge());
2087 rc->SetPID(2, esdpid);
2092 twoTrackArrayCasc->Clear();
2093 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
2095 delete primVertexAOD; primVertexAOD=0;
2096 delete esdB; esdB=0;
2097 delete trackV0; trackV0=0;
2105 TObjArray *twoTrackArray,AliVEvent *event,
2106 AliAODVertex *secVert,
2114 UInt_t ntref=TProcessID::GetObjectCount();
2116 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2121 Bool_t dummy1,dummy2,dummy3;
2127 dummy1,dummy2,dummy3);
2128 if(!theCascade)
return 0x0;
2131 AliESDtrack *trackPi = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2132 theCascade->SetCharge(trackPi->Charge());
2140 AliAODTrack* trackPiAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idSoftPi]));
2141 if(!trackPiAOD) AliFatal(
"Not a standard AOD");
2142 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPiAOD);
2145 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPi);
2147 tmpCascade->GetSecondaryVtx()->AddDaughter(rd2Prong);
2149 AliAODVertex *primVertexAOD=0;
2161 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
2163 delete tmpCascade; tmpCascade=NULL;
2167 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2177 TObjArray *twoTrackArray,AliVEvent *event,
2178 AliAODVertex *secVert,
2186 UInt_t ntref=TProcessID::GetObjectCount();
2188 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2193 AliESDtrack *postrack = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2194 AliESDtrack *negtrack = (AliESDtrack*)twoTrackArray->UncheckedAt(1);
2196 postrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2197 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2199 postrack->GetPxPyPz(momentum);
2200 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2201 negtrack->GetPxPyPz(momentum);
2202 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2208 if(!presel)
return 0x0;
2211 okCascades = kFALSE;
2212 Bool_t dummy1,dummy2,dummy3;
2218 dummy1,dummy2,dummy3);
2219 if(!theCascade)
return 0x0;
2222 AliESDtrack *trackBachelor = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2223 theCascade->SetCharge(trackBachelor->Charge());
2230 Int_t idBachelor=(
Int_t)trackBachelor->GetID();
2231 if (idBachelor > -1 && idBachelor <
fAODMapSize) {
2232 AliAODTrack* trackBachelorAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idBachelor]));
2233 if(!trackBachelorAOD) AliFatal(
"Not a standard AOD");
2234 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelorAOD);
2237 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelor);
2239 tmpCascade->GetSecondaryVtx()->AddDaughter(v0);
2241 AliAODVertex *primVertexAOD=0;
2245 if(!primVertexAOD) primVertexAOD = (AliAODVertex*)event->GetPrimaryVertex();
2272 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
2274 delete tmpCascade; tmpCascade=NULL;
2275 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2283 TObjArray *twoTrackArray,AliVEvent *event,
2284 AliAODVertex *secVert,
Double_t dca,
2292 okD0=kFALSE; okJPSI=kFALSE; okD0fromDstar=kFALSE;
2294 UInt_t ntref=TProcessID::GetObjectCount();
2296 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2299 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
2300 AliESDtrack *postrack = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2301 AliESDtrack *negtrack = (AliESDtrack*)twoTrackArray->UncheckedAt(1);
2304 postrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2305 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2308 postrack->GetPxPyPz(momentum);
2309 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2310 negtrack->GetPxPyPz(momentum);
2311 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2326 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArray,event);
2327 if(!primVertexAOD)
return 0x0;
2330 postrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2332 d0err[0] = TMath::Sqrt(covd0z0[0]);
2333 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2335 d0err[1] = TMath::Sqrt(covd0z0[0]);
2343 if(postrack->Charge()!=0 && negtrack->Charge()!=0) {
2367 the2Prong->SetSecondaryVtx(secVert);
2368 secVert->SetParent(the2Prong);
2371 the2Prong->SetPxPyPzProngs(2,px,py,pz);
2372 the2Prong->SetDCA(dca);
2373 the2Prong->Setd0Prongs(2,d0);
2375 the2Prong->SetCharge(0);
2377 delete primVertexAOD; primVertexAOD=NULL;
2385 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2386 if(postrack->GetStatus()&AliESDtrack::kESDpid) postrack->GetESDpid(esdpid0);
2387 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2388 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2390 for(
Int_t i=0;i<5;i++) {
2391 esdpid[i] = esdpid0[i];
2392 esdpid[5+i] = esdpid1[i];
2394 the2Prong->SetPID(2,esdpid);
2399 TObjArray *threeTrackArray,AliVEvent *event,
2400 AliAODVertex *secVert,
Double_t dispersion,
2401 const AliAODVertex *vertexp1n1,
const AliAODVertex *vertexp2n1,
2411 UInt_t ntref=TProcessID::GetObjectCount();
2413 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2417 if(!secVert || !vertexp1n1 || !vertexp2n1)
return 0x0;
2419 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2423 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2424 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2425 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2427 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2428 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2429 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2430 postrack1->GetPxPyPz(momentum);
2431 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2432 negtrack->GetPxPyPz(momentum);
2433 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2434 postrack2->GetPxPyPz(momentum);
2435 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2447 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2448 if(!primVertexAOD)
return 0x0;
2451 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2453 d0err[0] = TMath::Sqrt(covd0z0[0]);
2454 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2456 d0err[1] = TMath::Sqrt(covd0z0[0]);
2457 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2459 d0err[2] = TMath::Sqrt(covd0z0[0]);
2463 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2464 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2465 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]));
2466 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]));
2471 AliAODRecoDecayHF3Prong *the3Prong =
new AliAODRecoDecayHF3Prong(0x0,px,py,pz,d0,d0err,dca,dispersion,dist12,dist23,charge);
2474 AliAODVertex* ownsecv=secVert->CloneWithoutRefs();
2475 the3Prong->SetOwnSecondaryVtx(ownsecv);
2479 delete primVertexAOD; primVertexAOD=NULL;
2515 the3Prong->SetSecondaryVtx(secVert);
2520 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2521 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2522 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2523 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2524 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2525 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2528 for(
Int_t i=0;i<5;i++) {
2529 esdpid[i] = esdpid0[i];
2530 esdpid[5+i] = esdpid1[i];
2531 esdpid[10+i] = esdpid2[i];
2533 the3Prong->SetPID(3,esdpid);
2539 TObjArray *threeTrackArray,AliVEvent *event,
2540 AliAODVertex *secVert,
Double_t dispersion,
2541 Double32_t dist12, Double32_t dist23,
2554 UInt_t ntref=TProcessID::GetObjectCount();
2556 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2559 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2563 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2564 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2565 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2567 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2568 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2569 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2570 postrack1->GetPxPyPz(momentum);
2571 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2572 negtrack->GetPxPyPz(momentum);
2573 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2574 postrack2->GetPxPyPz(momentum);
2575 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2577 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2578 if(!primVertexAOD)
return 0x0;
2580 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2582 d0err[0] = TMath::Sqrt(covd0z0[0]);
2583 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2585 d0err[1] = TMath::Sqrt(covd0z0[0]);
2586 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2588 d0err[2] = TMath::Sqrt(covd0z0[0]);
2590 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2591 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2594 rd->SetSecondaryVtx(secVert);
2595 secVert->SetParent(rd);
2598 rd->SetPxPyPzProngs(3,px,py,pz);
2600 rd->Setd0Prongs(3,d0);
2602 rd->SetCharge(charge);
2605 delete primVertexAOD; primVertexAOD=NULL;
2612 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2613 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2614 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2615 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2616 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2617 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2620 for(
Int_t i=0;i<5;i++) {
2621 esdpid[i] = esdpid0[i];
2622 esdpid[5+i] = esdpid1[i];
2623 esdpid[10+i] = esdpid2[i];
2625 rd->SetPID(3,esdpid);
2630 TObjArray *fourTrackArray,AliVEvent *event,
2631 AliAODVertex *secVert,
2632 const AliAODVertex *vertexp1n1,
2633 const AliAODVertex *vertexp1n1p2,
2643 UInt_t ntref=TProcessID::GetObjectCount();
2645 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2649 if(!secVert || !vertexp1n1 || !vertexp1n1p2)
return 0x0;
2651 Double_t px[4],py[4],pz[4],d0[4],d0err[4];
2653 AliESDtrack *postrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(0);
2654 AliESDtrack *negtrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(1);
2655 AliESDtrack *postrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(2);
2656 AliESDtrack *negtrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(3);
2658 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2659 negtrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2660 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2661 negtrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2664 postrack1->GetPxPyPz(momentum);
2665 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2666 negtrack1->GetPxPyPz(momentum);
2667 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2668 postrack2->GetPxPyPz(momentum);
2669 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2670 negtrack2->GetPxPyPz(momentum);
2671 px[3] = momentum[0]; py[3] = momentum[1]; pz[3] = momentum[2];
2686 AliAODVertex *primVertexAOD =
PrimaryVertex(fourTrackArray,event);
2687 if(!primVertexAOD)
return 0x0;
2690 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2692 d0err[0] = TMath::Sqrt(covd0z0[0]);
2693 negtrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2695 d0err[1] = TMath::Sqrt(covd0z0[0]);
2696 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2698 d0err[2] = TMath::Sqrt(covd0z0[0]);
2699 negtrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2701 d0err[3] = TMath::Sqrt(covd0z0[0]);
2705 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2706 Double_t dca[6]={dcap1n1,0.,dcap1n2,dcap2n1,0.,dcap2n2};
2707 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]));
2708 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]));
2709 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]));
2711 AliAODRecoDecayHF4Prong *the4Prong =
new AliAODRecoDecayHF4Prong(secVert,px,py,pz,d0,d0err,dca,dist12,dist3,dist4,charge);
2716 delete primVertexAOD; primVertexAOD=NULL;
2727 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2728 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2729 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2730 if(negtrack1->GetStatus()&AliESDtrack::kESDpid) negtrack1->GetESDpid(esdpid1);
2731 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2732 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2733 Double_t esdpid3[5]={0.,0.,0.,0.,0.};
2734 if(negtrack2->GetStatus()&AliESDtrack::kESDpid) negtrack2->GetESDpid(esdpid3);
2737 for(
Int_t i=0;i<5;i++) {
2738 esdpid[i] = esdpid0[i];
2739 esdpid[5+i] = esdpid1[i];
2740 esdpid[10+i] = esdpid2[i];
2741 esdpid[15+i] = esdpid3[i];
2743 the4Prong->SetPID(4,esdpid);
2754 AliAODTrack *track=0;
2756 for(
Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
2757 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
2758 if(!track) AliFatal(
"Not a standard AOD");
2760 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
2763 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
2767 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
2771 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
2777 AliVEvent *event)
const
2782 AliESDVertex *vertexESD = 0;
2783 AliAODVertex *vertexAOD = 0;
2789 vertexESD =
new AliESDVertex(*
fV1);
2794 Int_t nTrks = trkArray->GetEntriesFast();
2795 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
2800 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraint")) {
2802 event->GetDiamondCovXY(diamondcovxy);
2803 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
2804 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
2805 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
2806 vertexer->SetVtxStart(diamond);
2807 delete diamond; diamond=NULL;
2808 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraintOnlyFitter"))
2809 vertexer->SetOnlyFitter();
2811 Int_t skipped[1000];
2812 Int_t nTrksToSkip=0,id;
2813 AliExternalTrackParam *t = 0;
2814 for(
Int_t i=0; i<nTrks; i++) {
2815 t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
2816 id = (
Int_t)t->GetID();
2818 skipped[nTrksToSkip++] = id;
2824 for(
Int_t j=0; j<
event->GetNumberOfTracks(); j++) {
2825 AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
2826 if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
2827 id = (
Int_t)vtrack->GetID();
2829 skipped[nTrksToSkip++] = id;
2833 for(
Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
2835 vertexer->SetSkipTracks(nTrksToSkip,skipped);
2836 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
2843 AliESDtrack *esdTrack = 0;
2845 for(
Int_t i=0; i<nTrks; i++) {
2846 t = (AliESDtrack*)trkArray->UncheckedAt(i);
2847 esdTrack =
new AliESDtrack(*t);
2848 rmArray.AddLast(esdTrack);
2849 if(esdTrack->GetID()>=0) {
2850 rmId[i]=(
UShort_t)esdTrack->GetID();
2855 Float_t diamondxy[2]={
static_cast<Float_t>(
event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
2856 vertexESD = vertexer->RemoveTracksFromVertex(
fV1,&rmArray,rmId,diamondxy);
2857 delete [] rmId; rmId=NULL;
2862 if(!vertexESD)
return vertexAOD;
2863 if(vertexESD->GetNContributors()<=0) {
2865 delete vertexESD; vertexESD=NULL;
2869 delete vertexer; vertexer=NULL;
2875 vertexESD->GetXYZ(pos);
2876 vertexESD->GetCovMatrix(cov);
2877 chi2perNDF = vertexESD->GetChi2toNDF();
2878 delete vertexESD; vertexESD=NULL;
2880 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF);
2891 printf(
"Secondary vertex with Kalman filter package (AliKFParticle)\n");
2893 printf(
"Secondary vertex with AliVertexerTracks\n");
2898 printf(
"Reconstruct D0->Kpi candidates with cuts:\n");
2902 printf(
"Reconstruct D*->D0pi candidates with cuts:\n");
2904 printf(
" Reconstruct a secondary vertex for the D*\n");
2906 printf(
" Assume the D* comes from the primary vertex\n");
2911 printf(
"Reconstruct J/psi from B candidates with cuts:\n");
2915 printf(
"Reconstruct 3 prong candidates.\n");
2916 printf(
" D+->Kpipi cuts:\n");
2918 printf(
" Ds->KKpi cuts:\n");
2920 printf(
" Lc->pKpi cuts:\n");
2924 printf(
"Reconstruct 4 prong candidates.\n");
2925 printf(
" D0->Kpipipi cuts:\n");
2929 printf(
"Reconstruct cascade candidates formed with v0s.\n");
2930 printf(
" Lc -> k0s P & Lc -> L Pi cuts:\n");
2932 printf(
" D+ -> K0s pi cuts:\n");
2934 printf(
" Ds -> K0s K cuts:\n");
2947 AliESDVertex *vertexESD = 0;
2948 AliAODVertex *vertexAOD = 0;
2953 vertexESD = (AliESDVertex*)
fVertexerTracks->VertexForSelectedESDTracks(trkArray);
2955 if(!vertexESD)
return vertexAOD;
2957 if(vertexESD->GetNContributors()!=trkArray->GetEntriesFast()) {
2959 delete vertexESD; vertexESD=NULL;
2963 Double_t vertRadius2=vertexESD->GetX()*vertexESD->GetX()+vertexESD->GetY()*vertexESD->GetY();
2966 delete vertexESD; vertexESD=NULL;
2972 AliKFParticle::SetField(
fBzkG);
2974 AliKFVertex vertexKF;
2976 Int_t nTrks = trkArray->GetEntriesFast();
2977 for(
Int_t i=0; i<nTrks; i++) {
2978 AliESDtrack *esdTrack = (AliESDtrack*)trkArray->At(i);
2979 AliKFParticle daughterKF(*esdTrack,211);
2980 vertexKF.AddDaughter(daughterKF);
2982 vertexESD =
new AliESDVertex(vertexKF.Parameters(),
2983 vertexKF.CovarianceMatrix(),
2985 vertexKF.GetNContributors());
2991 vertexESD->GetXYZ(pos);
2992 vertexESD->GetCovMatrix(cov);
2993 chi2perNDF = vertexESD->GetChi2toNDF();
2994 dispersion = vertexESD->GetDispersion();
2995 delete vertexESD; vertexESD=NULL;
2997 Int_t nprongs= (useTRefArray ? 0 : trkArray->GetEntriesFast());
2998 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
3007 Int_t retval=kFALSE;
3010 for(
Int_t iTrack=0; iTrack<3; iTrack++){
3011 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
3012 track->GetPxPyPz(momentum);
3013 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
3025 Int_t retval=kFALSE;
3029 for(
Int_t iTrack=0; iTrack<4; iTrack++){
3030 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
3031 track->GetPxPyPz(momentum);
3032 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
3044 Int_t retval=kFALSE;
3048 for(
Int_t iTrack=0; iTrack<2; iTrack++){
3049 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
3050 track->GetPxPyPz(momentum);
3051 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
3071 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3076 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3081 pdg2[0]=211; pdg2[1]=321;
3083 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3087 pdg2[0]=321; pdg2[1]=211;
3089 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3110 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3115 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3121 pdg2[0]=11; pdg2[1]=11;
3123 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3146 fMassCalc3->SetPxPyPzProngs(nprongs,px,py,pz);
3154 if(
fMassCalc3->Pt2() < minPt*minPt)
return retval;
3159 pdg3[0]=211; pdg3[1]=321; pdg3[2]=211;
3161 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3169 pdg3[0]=321; pdg3[1]=321; pdg3[2]=211;
3171 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3175 pdg3[0]=211; pdg3[1]=321; pdg3[2]=321;
3177 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3186 pdg3[0]=2212; pdg3[1]=321; pdg3[2]=211;
3188 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3194 pdg3[0]=211; pdg3[1]=321; pdg3[2]=2212;
3196 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3219 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3224 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3226 pdg2[0]=211; pdg2[1]=421;
3231 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3254 fMassCalc4->SetPxPyPzProngs(nprongs,px,py,pz);
3259 if(
fMassCalc4->Pt2() < minPt*minPt)
return retval;
3265 pdg4[0]=321; pdg4[1]=211; pdg4[2]=211; pdg4[3]=211;
3267 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3272 pdg4[0]=211; pdg4[1]=321; pdg4[2]=211; pdg4[3]=211;
3274 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3279 pdg4[0]=211; pdg4[1]=211; pdg4[2]=321; pdg4[3]=211;
3281 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3286 pdg4[0]=211; pdg4[1]=211; pdg4[2]=211; pdg4[3]=321;
3288 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3309 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3312 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3321 pdg2[0] = 2212; pdg2[1] = 310;
3323 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3327 pdg2[0] = 211; pdg2[1] = 3122;
3329 if ((minv2>lolim*lolim) && (minv2<hilim*hilim)) {
3340 pdg2[0] = 211; pdg2[1] = 310;
3342 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3352 pdg2[0] = 321; pdg2[1] = 310;
3354 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3367 UChar_t *seleFlags,
Int_t *evtNumber)
3376 const AliVVertex *vprimary =
event->GetPrimaryVertex();
3384 const Int_t entries =
event->GetNumberOfTracks();
3385 AliCentrality* cent;
3388 fV1 =
new AliESDVertex(*((AliESDVertex*)vprimary));
3391 vprimary->GetXYZ(pos);
3392 vprimary->GetCovarianceMatrix(cov);
3393 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
3394 if(entries<=0)
return;
3396 memset(indices,0,
sizeof(
UShort_t)*entries);
3403 if(event->GetRunNumber()<244824){
3404 centperc=cent->GetCentralityPercentile(
"V0M");
3406 AliMultSelection *multSelection = (AliMultSelection * ) event->FindListObject(
"MultSelection");
3408 centperc=multSelection->GetMultiplicityPercentile(
"V0M");
3409 Int_t qual = multSelection->GetEvSelCode();
3410 if(qual == 199 ) centperc=0.1;
3413 Bool_t okDisplaced=kFALSE,okSoftPi=kFALSE,okFor3Prong=kFALSE,okBachelor=kFALSE;
3417 for(
Int_t i=0; i<entries; i++) {
3419 track = (AliVTrack*)event->GetTrack(i);
3422 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
3425 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
3429 if(track->GetID()<0)
continue;
3433 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
3437 AliAODTrack *aodt = (AliAODTrack*)track;
3438 if(aodt->GetUsedForPrimVtxFit()) {
3439 indices[nindices]=aodt->GetID(); nindices++;
3445 AliESDtrack *esdt = 0;
3448 esdt = (AliESDtrack*)track;
3450 esdt =
new AliESDtrack(track);
3454 okDisplaced=kFALSE; okSoftPi=kFALSE; okFor3Prong=kFALSE; okBachelor=kFALSE;
3456 evtNumber[i]=((AliMixedEvent*)event)->EventIndex(i);
3457 const AliVVertex* eventVtx=((AliMixedEvent*)event)->GetEventVertex(i);
3458 Double_t vtxPos[3],primPos[3],primCov[6],trasl[3];
3459 eventVtx->GetXYZ(vtxPos);
3460 vprimary->GetXYZ(primPos);
3461 eventVtx->GetCovarianceMatrix(primCov);
3462 for(
Int_t ind=0;ind<3;ind++){
3463 trasl[ind]=vtxPos[ind]-primPos[ind];
3466 Bool_t isTransl=esdt->Translate(trasl,primCov);
3474 if(
SingleTrkCuts(esdt,centperc,okDisplaced,okSoftPi,okFor3Prong,okBachelor) && nSeleTrks<trkEntries) {
3475 esdt->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
3476 seleTrksArray.AddLast(esdt);
3477 tracksAtVertex.AddLast(
new AliExternalTrackParam(*esdt));
3478 seleFlags[nSeleTrks]=0;
3479 if(okDisplaced) SETBIT(seleFlags[nSeleTrks],
kBitDispl);
3480 if(okFor3Prong) SETBIT(seleFlags[nSeleTrks],
kBit3Prong);
3481 if(okSoftPi) SETBIT(seleFlags[nSeleTrks],
kBitSoftPi);
3482 if(okBachelor) SETBIT(seleFlags[nSeleTrks],
kBitBachelor);
3490 if(nsigmatofPi>-990. && (nsigmatofPi<-fnSigmaTOFPionLow || nsigmatofPi>
fnSigmaTOFPionHi)){
3494 if(nsigmatofK>-990. && (nsigmatofK<-fnSigmaTOFKaonLow || nsigmatofK>
fnSigmaTOFKaonHi)){
3498 if(nsigmatofP>-990. && (nsigmatofP<-fnSigmaTOFProtonLow || nsigmatofP>
fnSigmaTOFProtonHi)){
3505 if(nsigmatpcPi>-990. && (nsigmatpcPi<-fnSigmaTPCPionLow || nsigmatpcPi>
fnSigmaTPCPionHi)){
3509 if(nsigmatpcK>-990. && (nsigmatpcK<-fnSigmaTPCKaonLow || nsigmatpcK>
fnSigmaTPCKaonHi)){
3513 if(nsigmatpcP>-990. && (nsigmatpcP<-fnSigmaTPCProtonLow || nsigmatpcP>
fnSigmaTPCProtonHi)){
3529 vprimary->GetXYZ(pos);
3530 vprimary->GetCovarianceMatrix(cov);
3531 Double_t chi2toNDF = vprimary->GetChi2perNDF();
3532 Int_t ncontr=nindices;
3533 if(!strcmp(vprimary->GetTitle(),
"VertexerTracksWithContraint")) ncontr += 1;
3535 fV1 =
new AliESDVertex(pos,cov,chi2,ncontr,vprimary->GetName());
3536 fV1->SetTitle(vprimary->GetTitle());
3537 fV1->SetIndices(nindices,indices);
3539 if(indices) {
delete [] indices; indices=NULL; }
3564 Bool_t &okBachelor)
const
3571 trk->RelateToVertex(
fV1,
fBzkG,kVeryBig);
3587 if(selectInfo) okDisplaced=kTRUE;
3601 if(selectInfo) okFor3Prong=kTRUE;
3608 if(selectInfo) okSoftPi=kTRUE;
3616 if(okDisplaced) selectInfo=1;
3619 if(selectInfo) okBachelor=kTRUE;
3621 if(okDisplaced || okSoftPi || okFor3Prong || okBachelor)
return kTRUE;
3636 Double_t vertex[3]; esdV0->GetXYZ(vertex[0],vertex[1],vertex[2]);
3637 AliAODVertex *vertexV0 =
new AliAODVertex(vertex,esdV0->GetChi2V0(),AliAODVertex::kV0,2);
3642 esdV0->PxPyPz(pxpypz);
3643 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
3644 AliNeutralTrackParam *trackesdV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
3651 trackesdV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3652 Double_t dcaV0ToPrimVertex = TMath::Sqrt(covd0z0[0]);
3654 Double_t dcaV0DaughterToPrimVertex[2];
3655 AliExternalTrackParam *posV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(0);
3656 AliExternalTrackParam *negV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(1);
3657 if( !posV0track || !negV0track) {
3658 if(trackesdV0) {
delete trackesdV0; trackesdV0=NULL;}
3660 delete primVertexAOD;
3663 posV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3666 dcaV0DaughterToPrimVertex[0] = TMath::Sqrt(covd0z0[0]);
3667 negV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3670 dcaV0DaughterToPrimVertex[1] = TMath::Sqrt(covd0z0[0]);
3671 Double_t dcaV0Daughters = esdV0->GetDcaV0Daughters();
3673 esdV0->GetNPxPyPz(nmom[0],nmom[1],nmom[2]);
3674 esdV0->GetPPxPyPz(pmom[0],pmom[1],pmom[2]);
3676 AliAODv0 *aodV0 =
new AliAODv0(vertexV0,dcaV0Daughters,dcaV0ToPrimVertex,pmom,nmom,dcaV0DaughterToPrimVertex);
3677 aodV0->SetOnFlyStatus(esdV0->GetOnFlyStatus());
3680 delete primVertexAOD;
3689 const Double_t *par=extpar->GetParameter();
3690 const Double_t *cov=extpar->GetCovariance();
3693 esdt->Set(x,alpha,par,cov);
3700 fMassDzero=TDatabasePDG::Instance()->GetParticle(421)->Mass();
3701 fMassDplus=TDatabasePDG::Instance()->GetParticle(411)->Mass();
3702 fMassDs=TDatabasePDG::Instance()->GetParticle(431)->Mass();
3703 fMassLambdaC=TDatabasePDG::Instance()->GetParticle(4122)->Mass();
3704 fMassDstar=TDatabasePDG::Instance()->GetParticle(413)->Mass();
3705 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.