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;
1963 TObjArray *twoTrackArray,AliVEvent *event,
1964 AliAODVertex *secVert,
1972 UInt_t ntref=TProcessID::GetObjectCount();
1974 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
1979 Bool_t dummy1,dummy2,dummy3;
1985 dummy1,dummy2,dummy3);
1986 if(!theCascade)
return 0x0;
1989 AliESDtrack *trackPi = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
1990 theCascade->SetCharge(trackPi->Charge());
1998 AliAODTrack* trackPiAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idSoftPi]));
1999 if(!trackPiAOD) AliFatal(
"Not a standard AOD");
2000 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPiAOD);
2003 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPi);
2005 tmpCascade->GetSecondaryVtx()->AddDaughter(rd2Prong);
2007 AliAODVertex *primVertexAOD=0;
2019 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
2021 delete tmpCascade; tmpCascade=NULL;
2025 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2035 TObjArray *twoTrackArray,AliVEvent *event,
2036 AliAODVertex *secVert,
2044 UInt_t ntref=TProcessID::GetObjectCount();
2046 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2051 AliESDtrack *postrack = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2052 AliESDtrack *negtrack = (AliESDtrack*)twoTrackArray->UncheckedAt(1);
2054 postrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2055 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2057 postrack->GetPxPyPz(momentum);
2058 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2059 negtrack->GetPxPyPz(momentum);
2060 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2066 if(!presel)
return 0x0;
2069 okCascades = kFALSE;
2070 Bool_t dummy1,dummy2,dummy3;
2076 dummy1,dummy2,dummy3);
2077 if(!theCascade)
return 0x0;
2080 AliESDtrack *trackBachelor = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2081 theCascade->SetCharge(trackBachelor->Charge());
2088 Int_t idBachelor=(
Int_t)trackBachelor->GetID();
2089 if (idBachelor > -1 && idBachelor <
fAODMapSize) {
2090 AliAODTrack* trackBachelorAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idBachelor]));
2091 if(!trackBachelorAOD) AliFatal(
"Not a standard AOD");
2092 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelorAOD);
2095 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelor);
2097 tmpCascade->GetSecondaryVtx()->AddDaughter(v0);
2099 AliAODVertex *primVertexAOD=0;
2103 if(!primVertexAOD) primVertexAOD = (AliAODVertex*)event->GetPrimaryVertex();
2130 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
2132 delete tmpCascade; tmpCascade=NULL;
2133 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2141 TObjArray *twoTrackArray,AliVEvent *event,
2142 AliAODVertex *secVert,
Double_t dca,
2150 okD0=kFALSE; okJPSI=kFALSE; okD0fromDstar=kFALSE;
2152 UInt_t ntref=TProcessID::GetObjectCount();
2154 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2157 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
2158 AliESDtrack *postrack = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2159 AliESDtrack *negtrack = (AliESDtrack*)twoTrackArray->UncheckedAt(1);
2162 postrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2163 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2166 postrack->GetPxPyPz(momentum);
2167 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2168 negtrack->GetPxPyPz(momentum);
2169 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2184 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArray,event);
2185 if(!primVertexAOD)
return 0x0;
2188 postrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2190 d0err[0] = TMath::Sqrt(covd0z0[0]);
2191 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2193 d0err[1] = TMath::Sqrt(covd0z0[0]);
2201 if(postrack->Charge()!=0 && negtrack->Charge()!=0) {
2225 the2Prong->SetSecondaryVtx(secVert);
2226 secVert->SetParent(the2Prong);
2229 the2Prong->SetPxPyPzProngs(2,px,py,pz);
2230 the2Prong->SetDCA(dca);
2231 the2Prong->Setd0Prongs(2,d0);
2233 the2Prong->SetCharge(0);
2235 delete primVertexAOD; primVertexAOD=NULL;
2243 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2244 if(postrack->GetStatus()&AliESDtrack::kESDpid) postrack->GetESDpid(esdpid0);
2245 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2246 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2248 for(
Int_t i=0;i<5;i++) {
2249 esdpid[i] = esdpid0[i];
2250 esdpid[5+i] = esdpid1[i];
2252 the2Prong->SetPID(2,esdpid);
2257 TObjArray *threeTrackArray,AliVEvent *event,
2258 AliAODVertex *secVert,
Double_t dispersion,
2259 const AliAODVertex *vertexp1n1,
const AliAODVertex *vertexp2n1,
2269 UInt_t ntref=TProcessID::GetObjectCount();
2271 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2275 if(!secVert || !vertexp1n1 || !vertexp2n1)
return 0x0;
2277 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2281 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2282 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2283 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2285 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2286 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2287 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2288 postrack1->GetPxPyPz(momentum);
2289 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2290 negtrack->GetPxPyPz(momentum);
2291 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2292 postrack2->GetPxPyPz(momentum);
2293 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2305 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2306 if(!primVertexAOD)
return 0x0;
2309 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2311 d0err[0] = TMath::Sqrt(covd0z0[0]);
2312 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2314 d0err[1] = TMath::Sqrt(covd0z0[0]);
2315 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2317 d0err[2] = TMath::Sqrt(covd0z0[0]);
2321 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2322 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2323 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]));
2324 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]));
2329 AliAODRecoDecayHF3Prong *the3Prong =
new AliAODRecoDecayHF3Prong(0x0,px,py,pz,d0,d0err,dca,dispersion,dist12,dist23,charge);
2332 AliAODVertex* ownsecv=secVert->CloneWithoutRefs();
2333 the3Prong->SetOwnSecondaryVtx(ownsecv);
2337 delete primVertexAOD; primVertexAOD=NULL;
2373 the3Prong->SetSecondaryVtx(secVert);
2378 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2379 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2380 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2381 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2382 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2383 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2386 for(
Int_t i=0;i<5;i++) {
2387 esdpid[i] = esdpid0[i];
2388 esdpid[5+i] = esdpid1[i];
2389 esdpid[10+i] = esdpid2[i];
2391 the3Prong->SetPID(3,esdpid);
2397 TObjArray *threeTrackArray,AliVEvent *event,
2398 AliAODVertex *secVert,
Double_t dispersion,
2399 Double32_t dist12, Double32_t dist23,
2412 UInt_t ntref=TProcessID::GetObjectCount();
2414 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2417 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2421 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2422 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2423 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2425 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2426 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2427 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2428 postrack1->GetPxPyPz(momentum);
2429 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2430 negtrack->GetPxPyPz(momentum);
2431 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2432 postrack2->GetPxPyPz(momentum);
2433 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2435 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2436 if(!primVertexAOD)
return 0x0;
2438 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2440 d0err[0] = TMath::Sqrt(covd0z0[0]);
2441 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2443 d0err[1] = TMath::Sqrt(covd0z0[0]);
2444 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2446 d0err[2] = TMath::Sqrt(covd0z0[0]);
2448 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2449 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2452 rd->SetSecondaryVtx(secVert);
2453 secVert->SetParent(rd);
2456 rd->SetPxPyPzProngs(3,px,py,pz);
2458 rd->Setd0Prongs(3,d0);
2460 rd->SetCharge(charge);
2463 delete primVertexAOD; primVertexAOD=NULL;
2470 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2471 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2472 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2473 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2474 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2475 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2478 for(
Int_t i=0;i<5;i++) {
2479 esdpid[i] = esdpid0[i];
2480 esdpid[5+i] = esdpid1[i];
2481 esdpid[10+i] = esdpid2[i];
2483 rd->SetPID(3,esdpid);
2488 TObjArray *fourTrackArray,AliVEvent *event,
2489 AliAODVertex *secVert,
2490 const AliAODVertex *vertexp1n1,
2491 const AliAODVertex *vertexp1n1p2,
2501 UInt_t ntref=TProcessID::GetObjectCount();
2503 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2507 if(!secVert || !vertexp1n1 || !vertexp1n1p2)
return 0x0;
2509 Double_t px[4],py[4],pz[4],d0[4],d0err[4];
2511 AliESDtrack *postrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(0);
2512 AliESDtrack *negtrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(1);
2513 AliESDtrack *postrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(2);
2514 AliESDtrack *negtrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(3);
2516 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2517 negtrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2518 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2519 negtrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2522 postrack1->GetPxPyPz(momentum);
2523 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2524 negtrack1->GetPxPyPz(momentum);
2525 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2526 postrack2->GetPxPyPz(momentum);
2527 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2528 negtrack2->GetPxPyPz(momentum);
2529 px[3] = momentum[0]; py[3] = momentum[1]; pz[3] = momentum[2];
2544 AliAODVertex *primVertexAOD =
PrimaryVertex(fourTrackArray,event);
2545 if(!primVertexAOD)
return 0x0;
2548 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2550 d0err[0] = TMath::Sqrt(covd0z0[0]);
2551 negtrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2553 d0err[1] = TMath::Sqrt(covd0z0[0]);
2554 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2556 d0err[2] = TMath::Sqrt(covd0z0[0]);
2557 negtrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2559 d0err[3] = TMath::Sqrt(covd0z0[0]);
2563 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2564 Double_t dca[6]={dcap1n1,0.,dcap1n2,dcap2n1,0.,dcap2n2};
2565 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]));
2566 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]));
2567 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]));
2569 AliAODRecoDecayHF4Prong *the4Prong =
new AliAODRecoDecayHF4Prong(secVert,px,py,pz,d0,d0err,dca,dist12,dist3,dist4,charge);
2574 delete primVertexAOD; primVertexAOD=NULL;
2585 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2586 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2587 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2588 if(negtrack1->GetStatus()&AliESDtrack::kESDpid) negtrack1->GetESDpid(esdpid1);
2589 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2590 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2591 Double_t esdpid3[5]={0.,0.,0.,0.,0.};
2592 if(negtrack2->GetStatus()&AliESDtrack::kESDpid) negtrack2->GetESDpid(esdpid3);
2595 for(
Int_t i=0;i<5;i++) {
2596 esdpid[i] = esdpid0[i];
2597 esdpid[5+i] = esdpid1[i];
2598 esdpid[10+i] = esdpid2[i];
2599 esdpid[15+i] = esdpid3[i];
2601 the4Prong->SetPID(4,esdpid);
2612 AliAODTrack *track=0;
2614 for(
Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
2615 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
2616 if(!track) AliFatal(
"Not a standard AOD");
2618 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
2621 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
2625 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
2629 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
2635 AliVEvent *event)
const
2640 AliESDVertex *vertexESD = 0;
2641 AliAODVertex *vertexAOD = 0;
2647 vertexESD =
new AliESDVertex(*
fV1);
2652 Int_t nTrks = trkArray->GetEntriesFast();
2653 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
2658 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraint")) {
2660 event->GetDiamondCovXY(diamondcovxy);
2661 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
2662 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
2663 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
2664 vertexer->SetVtxStart(diamond);
2665 delete diamond; diamond=NULL;
2666 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraintOnlyFitter"))
2667 vertexer->SetOnlyFitter();
2669 Int_t skipped[1000];
2670 Int_t nTrksToSkip=0,id;
2671 AliExternalTrackParam *t = 0;
2672 for(
Int_t i=0; i<nTrks; i++) {
2673 t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
2674 id = (
Int_t)t->GetID();
2676 skipped[nTrksToSkip++] = id;
2682 for(
Int_t j=0; j<
event->GetNumberOfTracks(); j++) {
2683 AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
2684 if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
2685 id = (
Int_t)vtrack->GetID();
2687 skipped[nTrksToSkip++] = id;
2691 for(
Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
2693 vertexer->SetSkipTracks(nTrksToSkip,skipped);
2694 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
2701 AliESDtrack *esdTrack = 0;
2703 for(
Int_t i=0; i<nTrks; i++) {
2704 t = (AliESDtrack*)trkArray->UncheckedAt(i);
2705 esdTrack =
new AliESDtrack(*t);
2706 rmArray.AddLast(esdTrack);
2707 if(esdTrack->GetID()>=0) {
2708 rmId[i]=(
UShort_t)esdTrack->GetID();
2713 Float_t diamondxy[2]={
static_cast<Float_t>(
event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
2714 vertexESD = vertexer->RemoveTracksFromVertex(
fV1,&rmArray,rmId,diamondxy);
2715 delete [] rmId; rmId=NULL;
2720 if(!vertexESD)
return vertexAOD;
2721 if(vertexESD->GetNContributors()<=0) {
2723 delete vertexESD; vertexESD=NULL;
2727 delete vertexer; vertexer=NULL;
2733 vertexESD->GetXYZ(pos);
2734 vertexESD->GetCovMatrix(cov);
2735 chi2perNDF = vertexESD->GetChi2toNDF();
2736 delete vertexESD; vertexESD=NULL;
2738 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF);
2749 printf(
"Secondary vertex with Kalman filter package (AliKFParticle)\n");
2751 printf(
"Secondary vertex with AliVertexerTracks\n");
2756 printf(
"Reconstruct D0->Kpi candidates with cuts:\n");
2760 printf(
"Reconstruct D*->D0pi candidates with cuts:\n");
2762 printf(
" Reconstruct a secondary vertex for the D*\n");
2764 printf(
" Assume the D* comes from the primary vertex\n");
2769 printf(
"Reconstruct J/psi from B candidates with cuts:\n");
2773 printf(
"Reconstruct 3 prong candidates.\n");
2774 printf(
" D+->Kpipi cuts:\n");
2776 printf(
" Ds->KKpi cuts:\n");
2778 printf(
" Lc->pKpi cuts:\n");
2782 printf(
"Reconstruct 4 prong candidates.\n");
2783 printf(
" D0->Kpipipi cuts:\n");
2787 printf(
"Reconstruct cascade candidates formed with v0s.\n");
2788 printf(
" Lc -> k0s P & Lc -> L Pi cuts:\n");
2790 printf(
" D+ -> K0s pi cuts:\n");
2792 printf(
" Ds -> K0s K cuts:\n");
2805 AliESDVertex *vertexESD = 0;
2806 AliAODVertex *vertexAOD = 0;
2811 vertexESD = (AliESDVertex*)
fVertexerTracks->VertexForSelectedESDTracks(trkArray);
2813 if(!vertexESD)
return vertexAOD;
2815 if(vertexESD->GetNContributors()!=trkArray->GetEntriesFast()) {
2817 delete vertexESD; vertexESD=NULL;
2821 Double_t vertRadius2=vertexESD->GetX()*vertexESD->GetX()+vertexESD->GetY()*vertexESD->GetY();
2824 delete vertexESD; vertexESD=NULL;
2830 AliKFParticle::SetField(
fBzkG);
2832 AliKFVertex vertexKF;
2834 Int_t nTrks = trkArray->GetEntriesFast();
2835 for(
Int_t i=0; i<nTrks; i++) {
2836 AliESDtrack *esdTrack = (AliESDtrack*)trkArray->At(i);
2837 AliKFParticle daughterKF(*esdTrack,211);
2838 vertexKF.AddDaughter(daughterKF);
2840 vertexESD =
new AliESDVertex(vertexKF.Parameters(),
2841 vertexKF.CovarianceMatrix(),
2843 vertexKF.GetNContributors());
2849 vertexESD->GetXYZ(pos);
2850 vertexESD->GetCovMatrix(cov);
2851 chi2perNDF = vertexESD->GetChi2toNDF();
2852 dispersion = vertexESD->GetDispersion();
2853 delete vertexESD; vertexESD=NULL;
2855 Int_t nprongs= (useTRefArray ? 0 : trkArray->GetEntriesFast());
2856 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
2865 Int_t retval=kFALSE;
2868 for(
Int_t iTrack=0; iTrack<3; iTrack++){
2869 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2870 track->GetPxPyPz(momentum);
2871 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2883 Int_t retval=kFALSE;
2887 for(
Int_t iTrack=0; iTrack<4; iTrack++){
2888 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2889 track->GetPxPyPz(momentum);
2890 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2902 Int_t retval=kFALSE;
2906 for(
Int_t iTrack=0; iTrack<2; iTrack++){
2907 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2908 track->GetPxPyPz(momentum);
2909 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2929 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
2934 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
2939 pdg2[0]=211; pdg2[1]=321;
2941 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2945 pdg2[0]=321; pdg2[1]=211;
2947 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2968 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
2973 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
2979 pdg2[0]=11; pdg2[1]=11;
2981 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3004 fMassCalc3->SetPxPyPzProngs(nprongs,px,py,pz);
3012 if(
fMassCalc3->Pt2() < minPt*minPt)
return retval;
3017 pdg3[0]=211; pdg3[1]=321; pdg3[2]=211;
3019 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3027 pdg3[0]=321; pdg3[1]=321; pdg3[2]=211;
3029 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3033 pdg3[0]=211; pdg3[1]=321; pdg3[2]=321;
3035 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3044 pdg3[0]=2212; pdg3[1]=321; pdg3[2]=211;
3046 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3052 pdg3[0]=211; pdg3[1]=321; pdg3[2]=2212;
3054 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3077 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3082 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3084 pdg2[0]=211; pdg2[1]=421;
3089 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3112 fMassCalc4->SetPxPyPzProngs(nprongs,px,py,pz);
3117 if(
fMassCalc4->Pt2() < minPt*minPt)
return retval;
3123 pdg4[0]=321; pdg4[1]=211; pdg4[2]=211; pdg4[3]=211;
3125 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3130 pdg4[0]=211; pdg4[1]=321; pdg4[2]=211; pdg4[3]=211;
3132 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3137 pdg4[0]=211; pdg4[1]=211; pdg4[2]=321; pdg4[3]=211;
3139 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3144 pdg4[0]=211; pdg4[1]=211; pdg4[2]=211; pdg4[3]=321;
3146 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3167 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3170 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3179 pdg2[0] = 2212; pdg2[1] = 310;
3181 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3185 pdg2[0] = 211; pdg2[1] = 3122;
3187 if ((minv2>lolim*lolim) && (minv2<hilim*hilim)) {
3198 pdg2[0] = 211; pdg2[1] = 310;
3200 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3210 pdg2[0] = 321; pdg2[1] = 310;
3212 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3225 UChar_t *seleFlags,
Int_t *evtNumber)
3234 const AliVVertex *vprimary =
event->GetPrimaryVertex();
3242 const Int_t entries =
event->GetNumberOfTracks();
3243 AliCentrality* cent;
3246 fV1 =
new AliESDVertex(*((AliESDVertex*)vprimary));
3249 vprimary->GetXYZ(pos);
3250 vprimary->GetCovarianceMatrix(cov);
3251 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
3252 if(entries<=0)
return;
3254 memset(indices,0,
sizeof(
UShort_t)*entries);
3261 if(event->GetRunNumber()<244824){
3262 centperc=cent->GetCentralityPercentile(
"V0M");
3264 AliMultSelection *multSelection = (AliMultSelection * ) event->FindListObject(
"MultSelection");
3266 centperc=multSelection->GetMultiplicityPercentile(
"V0M");
3267 Int_t qual = multSelection->GetEvSelCode();
3268 if(qual == 199 ) centperc=0.1;
3271 Bool_t okDisplaced=kFALSE,okSoftPi=kFALSE,okFor3Prong=kFALSE,okBachelor=kFALSE;
3275 for(
Int_t i=0; i<entries; i++) {
3277 track = (AliVTrack*)event->GetTrack(i);
3280 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
3283 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
3287 if(track->GetID()<0)
continue;
3291 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
3295 AliAODTrack *aodt = (AliAODTrack*)track;
3296 if(aodt->GetUsedForPrimVtxFit()) {
3297 indices[nindices]=aodt->GetID(); nindices++;
3303 AliESDtrack *esdt = 0;
3306 esdt = (AliESDtrack*)track;
3308 esdt =
new AliESDtrack(track);
3312 okDisplaced=kFALSE; okSoftPi=kFALSE; okFor3Prong=kFALSE; okBachelor=kFALSE;
3314 evtNumber[i]=((AliMixedEvent*)event)->EventIndex(i);
3315 const AliVVertex* eventVtx=((AliMixedEvent*)event)->GetEventVertex(i);
3316 Double_t vtxPos[3],primPos[3],primCov[6],trasl[3];
3317 eventVtx->GetXYZ(vtxPos);
3318 vprimary->GetXYZ(primPos);
3319 eventVtx->GetCovarianceMatrix(primCov);
3320 for(
Int_t ind=0;ind<3;ind++){
3321 trasl[ind]=vtxPos[ind]-primPos[ind];
3324 Bool_t isTransl=esdt->Translate(trasl,primCov);
3332 if(
SingleTrkCuts(esdt,centperc,okDisplaced,okSoftPi,okFor3Prong,okBachelor) && nSeleTrks<trkEntries) {
3333 esdt->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
3334 seleTrksArray.AddLast(esdt);
3335 tracksAtVertex.AddLast(
new AliExternalTrackParam(*esdt));
3336 seleFlags[nSeleTrks]=0;
3337 if(okDisplaced) SETBIT(seleFlags[nSeleTrks],
kBitDispl);
3338 if(okFor3Prong) SETBIT(seleFlags[nSeleTrks],
kBit3Prong);
3339 if(okSoftPi) SETBIT(seleFlags[nSeleTrks],
kBitSoftPi);
3340 if(okBachelor) SETBIT(seleFlags[nSeleTrks],
kBitBachelor);
3348 if(nsigmatofPi>-990. && (nsigmatofPi<-fnSigmaTOFPionLow || nsigmatofPi>
fnSigmaTOFPionHi)){
3352 if(nsigmatofK>-990. && (nsigmatofK<-fnSigmaTOFKaonLow || nsigmatofK>
fnSigmaTOFKaonHi)){
3356 if(nsigmatofP>-990. && (nsigmatofP<-fnSigmaTOFProtonLow || nsigmatofP>
fnSigmaTOFProtonHi)){
3363 if(nsigmatpcPi>-990. && (nsigmatpcPi<-fnSigmaTPCPionLow || nsigmatpcPi>
fnSigmaTPCPionHi)){
3367 if(nsigmatpcK>-990. && (nsigmatpcK<-fnSigmaTPCKaonLow || nsigmatpcK>
fnSigmaTPCKaonHi)){
3371 if(nsigmatpcP>-990. && (nsigmatpcP<-fnSigmaTPCProtonLow || nsigmatpcP>
fnSigmaTPCProtonHi)){
3387 vprimary->GetXYZ(pos);
3388 vprimary->GetCovarianceMatrix(cov);
3389 Double_t chi2toNDF = vprimary->GetChi2perNDF();
3390 Int_t ncontr=nindices;
3391 if(!strcmp(vprimary->GetTitle(),
"VertexerTracksWithContraint")) ncontr += 1;
3393 fV1 =
new AliESDVertex(pos,cov,chi2,ncontr,vprimary->GetName());
3394 fV1->SetTitle(vprimary->GetTitle());
3395 fV1->SetIndices(nindices,indices);
3397 if(indices) {
delete [] indices; indices=NULL; }
3422 Bool_t &okBachelor)
const
3429 trk->RelateToVertex(
fV1,
fBzkG,kVeryBig);
3445 if(selectInfo) okDisplaced=kTRUE;
3459 if(selectInfo) okFor3Prong=kTRUE;
3466 if(selectInfo) okSoftPi=kTRUE;
3474 if(okDisplaced) selectInfo=1;
3477 if(selectInfo) okBachelor=kTRUE;
3479 if(okDisplaced || okSoftPi || okFor3Prong || okBachelor)
return kTRUE;
3494 Double_t vertex[3]; esdV0->GetXYZ(vertex[0],vertex[1],vertex[2]);
3495 AliAODVertex *vertexV0 =
new AliAODVertex(vertex,esdV0->GetChi2V0(),AliAODVertex::kV0,2);
3500 esdV0->PxPyPz(pxpypz);
3501 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
3502 AliNeutralTrackParam *trackesdV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
3509 trackesdV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3510 Double_t dcaV0ToPrimVertex = TMath::Sqrt(covd0z0[0]);
3512 Double_t dcaV0DaughterToPrimVertex[2];
3513 AliExternalTrackParam *posV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(0);
3514 AliExternalTrackParam *negV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(1);
3515 if( !posV0track || !negV0track) {
3516 if(trackesdV0) {
delete trackesdV0; trackesdV0=NULL;}
3518 delete primVertexAOD;
3521 posV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3524 dcaV0DaughterToPrimVertex[0] = TMath::Sqrt(covd0z0[0]);
3525 negV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3528 dcaV0DaughterToPrimVertex[1] = TMath::Sqrt(covd0z0[0]);
3529 Double_t dcaV0Daughters = esdV0->GetDcaV0Daughters();
3531 esdV0->GetNPxPyPz(nmom[0],nmom[1],nmom[2]);
3532 esdV0->GetPPxPyPz(pmom[0],pmom[1],pmom[2]);
3534 AliAODv0 *aodV0 =
new AliAODv0(vertexV0,dcaV0Daughters,dcaV0ToPrimVertex,pmom,nmom,dcaV0DaughterToPrimVertex);
3535 aodV0->SetOnFlyStatus(esdV0->GetOnFlyStatus());
3538 delete primVertexAOD;
3547 const Double_t *par=extpar->GetParameter();
3548 const Double_t *cov=extpar->GetCovariance();
3551 esdt->Set(x,alpha,par,cov);
3558 fMassDzero=TDatabasePDG::Instance()->GetParticle(421)->Mass();
3559 fMassDplus=TDatabasePDG::Instance()->GetParticle(411)->Mass();
3560 fMassDs=TDatabasePDG::Instance()->GetParticle(431)->Mass();
3561 fMassLambdaC=TDatabasePDG::Instance()->GetParticle(4122)->Mass();
3562 fMassDstar=TDatabasePDG::Instance()->GetParticle(413)->Mass();
3563 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)
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.
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.
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.