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),
127 fCutsDplustoK0spi(0x0),
128 fCutsDplustoKpipi(0x0),
133 fCutsD0toKpipipi(0x0),
134 fCutsDStartoKpipi(0x0),
136 fFindVertexForDstar(kTRUE),
137 fFindVertexForCascades(kTRUE),
138 fV0TypeForCascadeVertex(0),
139 fMassCutBeforeVertexing(kFALSE),
143 fOKInvMassD0(kFALSE),
144 fOKInvMassJpsi(kFALSE),
145 fOKInvMassDplus(kFALSE),
146 fOKInvMassDs(kFALSE),
147 fOKInvMassLc(kFALSE),
148 fOKInvMassDstar(kFALSE),
149 fOKInvMassD0to4p(kFALSE),
150 fOKInvMassLctoV0(kFALSE),
153 fMakeReducedRHF(kFALSE),
163 Double_t d02[2]={0.,0.};
164 Double_t d03[3]={0.,0.,0.};
165 Double_t d04[4]={0.,0.,0.,0.};
166 fMassCalc2 =
new AliAODRecoDecay(0x0,2,0,d02);
167 fMassCalc3 =
new AliAODRecoDecay(0x0,3,1,d03);
168 fMassCalc4 =
new AliAODRecoDecay(0x0,4,0,d04);
174 fInputAOD(source.fInputAOD),
175 fAODMapSize(source.fAODMapSize),
176 fAODMap(source.fAODMap),
177 fVertexerTracks(source.fVertexerTracks),
179 fSecVtxWithKF(source.fSecVtxWithKF),
180 fRecoPrimVtxSkippingTrks(source.fRecoPrimVtxSkippingTrks),
181 fRmTrksFromPrimVtx(source.fRmTrksFromPrimVtx),
183 fD0toKpi(source.fD0toKpi),
184 fJPSItoEle(source.fJPSItoEle),
185 f3Prong(source.f3Prong),
186 f4Prong(source.f4Prong),
187 fDstar(source.fDstar),
188 fCascades(source.fCascades),
189 fLikeSign(source.fLikeSign),
190 fLikeSign3prong(source.fLikeSign3prong),
191 fMixEvent(source.fMixEvent),
192 fPidResponse(source.fPidResponse),
193 fUseKaonPIDfor3Prong(source.fUseKaonPIDfor3Prong),
194 fUsePIDforLc(source.fUsePIDforLc),
195 fUsePIDforLc2V0(source.fUsePIDforLc2V0),
196 fUseKaonPIDforDs(source.fUseKaonPIDforDs),
197 fUseTPCPID(source.fUseTPCPID),
198 fUseTOFPID(source.fUseTOFPID),
199 fUseTPCPIDOnlyIfNoTOF(source.fUseTPCPIDOnlyIfNoTOF),
200 fMaxMomForTPCPid(source.fMaxMomForTPCPid),
201 fUsePidTag(source.fUsePidTag),
202 fnSigmaTPCPionLow(source.fnSigmaTPCPionLow),
203 fnSigmaTPCPionHi(source.fnSigmaTPCPionHi),
204 fnSigmaTOFPionLow(source.fnSigmaTOFPionLow),
205 fnSigmaTOFPionHi(source.fnSigmaTOFPionHi),
206 fnSigmaTPCKaonLow(source.fnSigmaTPCKaonLow),
207 fnSigmaTPCKaonHi(source.fnSigmaTPCKaonHi),
208 fnSigmaTOFKaonLow(source.fnSigmaTOFKaonLow),
209 fnSigmaTOFKaonHi(source.fnSigmaTOFKaonHi),
210 fnSigmaTPCProtonLow(source.fnSigmaTPCProtonLow),
211 fnSigmaTPCProtonHi(source.fnSigmaTPCProtonHi),
212 fnSigmaTOFProtonLow(source.fnSigmaTOFProtonLow),
213 fnSigmaTOFProtonHi(source.fnSigmaTOFProtonHi),
214 fMaxCentPercentileForTightCuts(source.fMaxCentPercentileForTightCuts),
215 fTrackFilter(source.fTrackFilter),
216 fTrackFilter2prongCentral(source.fTrackFilter2prongCentral),
217 fTrackFilter3prongCentral(source.fTrackFilter3prongCentral),
218 fTrackFilterSoftPi(source.fTrackFilterSoftPi),
219 fCutsD0toKpi(source.fCutsD0toKpi),
220 fCutsJpsitoee(source.fCutsJpsitoee),
221 fCutsDplustoK0spi(source.fCutsDplustoK0spi),
222 fCutsDplustoKpipi(source.fCutsDplustoKpipi),
223 fCutsDstoK0sK(source.fCutsDstoK0sK),
224 fCutsDstoKKpi(source.fCutsDstoKKpi),
225 fCutsLctopKpi(source.fCutsLctopKpi),
226 fCutsLctoV0(source.fCutsLctoV0),
227 fCutsD0toKpipipi(source.fCutsD0toKpipipi),
228 fCutsDStartoKpipi(source.fCutsDStartoKpipi),
229 fListOfCuts(source.fListOfCuts),
230 fFindVertexForDstar(source.fFindVertexForDstar),
231 fFindVertexForCascades(source.fFindVertexForCascades),
232 fV0TypeForCascadeVertex(source.fV0TypeForCascadeVertex),
233 fMassCutBeforeVertexing(source.fMassCutBeforeVertexing),
234 fMassCalc2(source.fMassCalc2),
235 fMassCalc3(source.fMassCalc3),
236 fMassCalc4(source.fMassCalc4),
237 fOKInvMassD0(source.fOKInvMassD0),
238 fOKInvMassJpsi(source.fOKInvMassJpsi),
239 fOKInvMassDplus(source.fOKInvMassDplus),
240 fOKInvMassDs(source.fOKInvMassDs),
241 fOKInvMassLc(source.fOKInvMassLc),
242 fOKInvMassDstar(source.fOKInvMassDstar),
243 fOKInvMassD0to4p(source.fOKInvMassD0to4p),
244 fOKInvMassLctoV0(source.fOKInvMassLctoV0),
247 fMakeReducedRHF(kFALSE),
248 fMassDzero(source.fMassDzero),
249 fMassDplus(source.fMassDplus),
250 fMassDs(source.fMassDs),
251 fMassLambdaC(source.fMassLambdaC),
252 fMassDstar(source.fMassDstar),
253 fMassJpsi(source.fMassJpsi)
265 if(&source ==
this)
return *
this;
375 TList *
list =
new TList();
377 list->SetName(
"ListOfCuts");
381 list->Add(cutsD0toKpi);
385 list->Add(cutsJpsitoee);
389 list->Add(cutsDplustoK0spi);
393 list->Add(cutsDplustoKpipi);
397 list->Add(cutsDstoK0sK);
401 list->Add(cutsDstoKKpi);
405 list->Add(cutsLctopKpi);
409 list->Add(cutsLctoV0);
413 list->Add(cutsD0toKpipipi);
417 list->Add(cutsDStartoKpipi);
422 if (bCutsOk == kFALSE) {AliFatal(
"AliAnalysisVertexingHF::FillListOfCuts vertexing and the analysis task cuts are not consistent!");}
431 TClonesArray *aodVerticesHFTClArr,
432 TClonesArray *aodD0toKpiTClArr,
433 TClonesArray *aodJPSItoEleTClArr,
434 TClonesArray *aodCharm3ProngTClArr,
435 TClonesArray *aodCharm4ProngTClArr,
436 TClonesArray *aodDstarTClArr,
437 TClonesArray *aodCascadesTClArr,
438 TClonesArray *aodLikeSign2ProngTClArr,
439 TClonesArray *aodLikeSign3ProngTClArr)
447 TString evtype =
event->IsA()->GetName();
448 fInputAOD = ((evtype==
"AliAODEvent") ? kTRUE : kFALSE);
452 AliDebug(2,
"Creating HF candidates from AOD");
454 AliDebug(2,
"Creating HF candidates from ESD");
457 if(!aodVerticesHFTClArr) {
458 printf(
"ERROR: no aodVerticesHFTClArr");
462 printf(
"ERROR: no aodD0toKpiTClArr");
466 printf(
"ERROR: no aodJPSItoEleTClArr");
469 if(
f3Prong && !aodCharm3ProngTClArr) {
470 printf(
"ERROR: no aodCharm3ProngTClArr");
473 if(
f4Prong && !aodCharm4ProngTClArr) {
474 printf(
"ERROR: no aodCharm4ProngTClArr");
477 if(
fDstar && !aodDstarTClArr) {
478 printf(
"ERROR: no aodDstarTClArr");
482 printf(
"ERROR: no aodCascadesTClArr ");
485 if(
fLikeSign && !aodLikeSign2ProngTClArr) {
486 printf(
"ERROR: no aodLikeSign2ProngTClArr");
490 printf(
"ERROR: no aodLikeSign3ProngTClArr");
495 Int_t iVerticesHF=0,iD0toKpi=0,iJPSItoEle=0,i3Prong=0,i4Prong=0,iDstar=0,iCascades=0,iLikeSign2Prong=0,iLikeSign3Prong=0;
496 aodVerticesHFTClArr->Delete();
497 iVerticesHF = aodVerticesHFTClArr->GetEntriesFast();
498 TClonesArray &verticesHFRef = *aodVerticesHFTClArr;
500 aodD0toKpiTClArr->Delete();
501 iD0toKpi = aodD0toKpiTClArr->GetEntriesFast();
504 aodJPSItoEleTClArr->Delete();
505 iJPSItoEle = aodJPSItoEleTClArr->GetEntriesFast();
508 aodCharm3ProngTClArr->Delete();
509 i3Prong = aodCharm3ProngTClArr->GetEntriesFast();
512 aodCharm4ProngTClArr->Delete();
513 i4Prong = aodCharm4ProngTClArr->GetEntriesFast();
516 aodDstarTClArr->Delete();
517 iDstar = aodDstarTClArr->GetEntriesFast();
520 aodCascadesTClArr->Delete();
521 iCascades = aodCascadesTClArr->GetEntriesFast();
524 aodLikeSign2ProngTClArr->Delete();
525 iLikeSign2Prong = aodLikeSign2ProngTClArr->GetEntriesFast();
528 aodLikeSign3ProngTClArr->Delete();
529 iLikeSign3Prong = aodLikeSign3ProngTClArr->GetEntriesFast();
532 TClonesArray &aodD0toKpiRef = *aodD0toKpiTClArr;
533 TClonesArray &aodJPSItoEleRef = *aodJPSItoEleTClArr;
534 TClonesArray &aodCharm3ProngRef = *aodCharm3ProngTClArr;
535 TClonesArray &aodCharm4ProngRef = *aodCharm4ProngTClArr;
536 TClonesArray &aodDstarRef = *aodDstarTClArr;
537 TClonesArray &aodCascadesRef = *aodCascadesTClArr;
538 TClonesArray &aodLikeSign2ProngRef = *aodLikeSign2ProngTClArr;
539 TClonesArray &aodLikeSign3ProngRef = *aodLikeSign3ProngTClArr;
547 Int_t iTrkP1,iTrkP2,iTrkN1,iTrkN2,iTrkSoftPi,trkEntries,iv0,nv0;
548 Double_t xdummy,ydummy,dcap1n1,dcap1n2,dcap2n1,dcap1p2,dcan1n2,dcap2n2,dcaV0,dcaCasc;
549 Bool_t okD0=kFALSE,okJPSI=kFALSE,ok3Prong=kFALSE,ok4Prong=kFALSE;
550 Bool_t okDstar=kFALSE,okD0fromDstar=kFALSE;
551 Bool_t okCascades=kFALSE;
552 AliESDtrack *postrack1 = 0;
553 AliESDtrack *postrack2 = 0;
554 AliESDtrack *negtrack1 = 0;
555 AliESDtrack *negtrack2 = 0;
556 AliESDtrack *trackPi = 0;
557 Double_t mompos1[3],mompos2[3],momneg1[3],momneg2[3];
568 AliDebug(2,Form(
" dca cut set to %f cm",dcaMax));
572 fBzkG = (Double_t)event->GetMagneticField();
580 trkEntries = (Int_t)event->GetNumberOfTracks();
581 AliDebug(1,Form(
" Number of tracks: %d",trkEntries));
584 nv0 = (Int_t)event->GetNumberOfV0s();
585 AliDebug(1,Form(
" Number of V0s: %d",nv0));
587 if( trkEntries<2 && (trkEntries<1 || nv0<1) ) {
588 AliDebug(1,Form(
" Not enough tracks: %d",trkEntries));
607 TObjArray seleTrksArray(trkEntries);
608 TObjArray tracksAtVertex(trkEntries);
609 UChar_t *seleFlags =
new UChar_t[trkEntries];
611 Int_t *evtNumber =
new Int_t[trkEntries];
614 AliDebug(1,Form(
" Selected tracks: %d",nSeleTrks));
618 TObjArray *twoTrackArray1 =
new TObjArray(2);
619 TObjArray *twoTrackArray2 =
new TObjArray(2);
620 TObjArray *twoTrackArrayV0 =
new TObjArray(2);
621 TObjArray *twoTrackArrayCasc =
new TObjArray(2);
622 TObjArray *threeTrackArray =
new TObjArray(3);
623 TObjArray *fourTrackArray =
new TObjArray(4);
626 Bool_t isLikeSign2Prong=kFALSE,isLikeSign3Prong=kFALSE;
633 Bool_t massCutOK=kTRUE;
636 for(iTrkP1=0; iTrkP1<nSeleTrks; iTrkP1++) {
642 postrack1 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkP1);
643 if(!TESTBIT(seleFlags[iTrkP1],
kBitDispl))
continue;
644 postrack1->GetPxPyPz(mompos1);
650 for(iv0=0; iv0<nv0; iv0++){
658 v0 = ((AliAODEvent*)event)->GetV0(iv0);
660 esdV0 = ((AliESDEvent*)event)->GetV0(iv0);
662 if ( (!v0 || !v0->IsA()->InheritsFrom(
"AliAODv0") ) &&
663 (!esdV0 || !esdV0->IsA()->InheritsFrom(
"AliESDv0") ) )
continue;
674 AliExternalTrackParam * posV0track;
675 AliExternalTrackParam * negV0track;
678 AliAODTrack *posVV0track = (AliAODTrack*)(v0->GetDaughter(0));
679 AliAODTrack *negVV0track = (AliAODTrack*)(v0->GetDaughter(1));
680 if( !posVV0track || !negVV0track )
continue;
685 if (posVV0track->GetID() == postrack1->GetID() ||
686 negVV0track->GetID() == postrack1->GetID())
continue;
688 if ( posVV0track->Charge() == negVV0track->Charge() )
continue;
690 if(!(posVV0track->GetStatus() & AliESDtrack::kTPCrefit) ||
691 !(negVV0track->GetStatus() & AliESDtrack::kTPCrefit))
continue;
693 Double_t xyz[3], pxpypz[3], cv[21]; Short_t sign;
694 posVV0track->PxPyPz(pxpypz); posVV0track->XvYvZv(xyz);
695 posVV0track->GetCovarianceXYZPxPyPz(cv); sign=posVV0track->Charge();
696 posV0track =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
697 negVV0track->PxPyPz(pxpypz); negVV0track->XvYvZv(xyz);
698 negVV0track->GetCovarianceXYZPxPyPz(cv); sign=negVV0track->Charge();
699 negV0track =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
701 AliESDtrack *posVV0track = (AliESDtrack*)(event->GetTrack( esdV0->GetPindex() ));
702 AliESDtrack *negVV0track = (AliESDtrack*)(event->GetTrack( esdV0->GetNindex() ));
703 if( !posVV0track || !negVV0track )
continue;
708 if (posVV0track->GetID() == postrack1->GetID() ||
709 negVV0track->GetID() == postrack1->GetID())
continue;
711 if ( posVV0track->Charge() == negVV0track->Charge() )
continue;
713 if(!(posVV0track->GetStatus() & AliESDtrack::kTPCrefit) ||
714 !(negVV0track->GetStatus() & AliESDtrack::kTPCrefit))
continue;
716 if (posVV0track->GetKinkIndex(0)>0 || negVV0track->GetKinkIndex(0)>0)
continue;
718 posV0track =
new AliExternalTrackParam(*posVV0track);
719 negV0track =
new AliExternalTrackParam(*negVV0track);
724 if( !posV0track || !negV0track ){
725 AliDebug(1,Form(
" Couldn't get the V0 daughters"));
730 twoTrackArrayV0->AddAt(posV0track,0);
731 twoTrackArrayV0->AddAt(negV0track,1);
734 dcaV0 = v0->DcaV0Daughters();
737 AliNeutralTrackParam *trackV0=NULL;
739 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
740 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
742 Double_t xyz[3], pxpypz[3];
744 esdV0->PxPyPz(pxpypz);
745 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
746 trackV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
751 twoTrackArrayCasc->AddAt(postrack1,0);
752 twoTrackArrayCasc->AddAt(trackV0,1);
754 AliAODVertex *vertexCasc = 0;
757 dcaCasc = postrack1->GetDCA(trackV0,
fBzkG,xdummy,ydummy);
762 Double_t pos[3],cov[6],chi2perNDF;
764 fV1->GetCovMatrix(cov);
765 chi2perNDF =
fV1->GetChi2toNDF();
766 vertexCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
770 delete posV0track; posV0track=NULL;
771 delete negV0track; negV0track=NULL;
772 delete trackV0; trackV0=NULL;
774 twoTrackArrayV0->Clear();
775 twoTrackArrayCasc->Clear();
780 ioCascade =
MakeCascade(twoTrackArrayCasc,event,vertexCasc,v0,dcaCasc,okCascades);
781 if(okCascades && ioCascade) {
786 UShort_t
id[2]={(UShort_t)postrack1->GetID(),(UShort_t)iv0};
790 AliAODVertex *vCasc =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexCasc);
791 rc->SetSecondaryVtx(vCasc);
792 vCasc->SetParent(rc);
794 AddRefs(vCasc,rc,event,twoTrackArrayCasc);
795 vCasc->AddDaughter(v0);
802 delete posV0track; posV0track=NULL;
803 delete negV0track; negV0track=NULL;
804 delete trackV0; trackV0=NULL;
805 twoTrackArrayV0->Clear();
806 twoTrackArrayCasc->Clear();
807 if(ioCascade) {
delete ioCascade; ioCascade=NULL; }
808 if(vertexCasc) {
delete vertexCasc; vertexCasc=NULL; }
817 AliDebug(1,Form(
" Not enough tracks: %d",trkEntries));
821 if(postrack1->Charge()<0 && !
fLikeSign)
continue;
824 for(iTrkN1=0; iTrkN1<nSeleTrks; iTrkN1++) {
829 if(iTrkN1==iTrkP1)
continue;
832 negtrack1 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN1);
834 if(negtrack1->Charge()>0 && !
fLikeSign)
continue;
836 if(!TESTBIT(seleFlags[iTrkN1],
kBitDispl))
continue;
839 if(evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
842 if(postrack1->Charge()==negtrack1->Charge()) {
843 isLikeSign2Prong=kTRUE;
845 if(iTrkN1<iTrkP1)
continue;
847 isLikeSign2Prong=kFALSE;
848 if(postrack1->Charge()<0 || negtrack1->Charge()>0)
continue;
850 if(evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
860 negtrack1->GetPxPyPz(momneg1);
863 dcap1n1 = postrack1->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
864 if(dcap1n1>dcaMax) { negtrack1=0;
continue; }
867 twoTrackArray1->AddAt(postrack1,0);
868 twoTrackArray1->AddAt(negtrack1,1);
871 twoTrackArray1->Clear();
878 io2Prong =
Make2Prong(twoTrackArray1,event,vertexp1n1,dcap1n1,okD0,okJPSI,okD0fromDstar);
880 if((
fD0toKpi && okD0) || (
fJPSItoEle && okJPSI) || (isLikeSign2Prong && (okD0 || okJPSI))) {
882 AliAODVertex *v2Prong =0x0;
883 if(!
fMakeReducedRHF)v2Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexp1n1);
884 if(!isLikeSign2Prong) {
893 rd->SetSecondaryVtx(v2Prong);
894 v2Prong->SetParent(rd);
895 AddRefs(v2Prong,rd,event,twoTrackArray1);
904 if(!okD0) v2Prong->SetParent(rd);
905 AddRefs(v2Prong,rd,event,twoTrackArray1);
916 rd->SetSecondaryVtx(v2Prong);
917 v2Prong->SetParent(rd);
918 AddRefs(v2Prong,rd,event,twoTrackArray1);
923 if(
fDstar && okD0fromDstar && !isLikeSign2Prong) {
928 vertexp1n1->AddDaughter(postrack1);
929 vertexp1n1->AddDaughter(negtrack1);
931 io2Prong->SetSecondaryVtx(vertexp1n1);
934 AliNeutralTrackParam *trackD0 =
new AliNeutralTrackParam(io2Prong);
937 for(iTrkSoftPi=0; iTrkSoftPi<nSeleTrks; iTrkSoftPi++) {
939 if(iTrkSoftPi==iTrkP1 || iTrkSoftPi==iTrkN1)
continue;
941 if(!TESTBIT(seleFlags[iTrkSoftPi],
kBitSoftPi))
continue;
944 if(evtNumber[iTrkP1]==evtNumber[iTrkSoftPi] ||
945 evtNumber[iTrkN1]==evtNumber[iTrkSoftPi] ||
946 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
951 trackD0->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
952 if(trackD0->GetSigmaY2()<0. || trackD0->GetSigmaZ2()<0.)
continue;
955 trackPi = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkSoftPi);
958 twoTrackArrayCasc->AddAt(trackPi,0);
959 twoTrackArrayCasc->AddAt(trackD0,1);
961 twoTrackArrayCasc->Clear();
966 AliAODVertex *vertexCasc = 0;
970 dcaCasc = trackPi->GetDCA(trackD0,
fBzkG,xdummy,ydummy);
975 Double_t pos[3],cov[6],chi2perNDF;
977 fV1->GetCovMatrix(cov);
978 chi2perNDF =
fV1->GetChi2toNDF();
979 vertexCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
983 twoTrackArrayCasc->Clear();
988 ioCascade =
MakeCascade(twoTrackArrayCasc,event,vertexCasc,io2Prong,dcaCasc,okDstar);
997 AliAODVertex *v2Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*vertexp1n1);
998 rd->SetSecondaryVtx(v2Prong);
999 v2Prong->SetParent(rd);
1000 AddRefs(v2Prong,rd,event,twoTrackArray1);
1008 AliAODVertex *vCasc = 0x0;
1011 UShort_t idCasc[2]={(UShort_t)trackPi->GetID(),(UShort_t)(iD0toKpi-1)};
1016 AliAODVertex *vCasc =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*vertexCasc);
1017 rc->SetSecondaryVtx(vCasc);
1018 vCasc->SetParent(rc);
1020 AddRefs(vCasc,rc,event,twoTrackArrayCasc);
1021 vCasc->AddDaughter(rd);
1024 twoTrackArrayCasc->Clear();
1026 if(ioCascade) {
delete ioCascade; ioCascade=NULL;}
1027 delete vertexCasc; vertexCasc=NULL;
1030 if(trackD0) {
delete trackD0; trackD0=NULL;}
1033 if(io2Prong) {
delete io2Prong; io2Prong=NULL;}
1036 twoTrackArray1->Clear();
1038 (isLikeSign2Prong && !
f3Prong) ) {
1046 for(iTrkP2=iTrkP1+1; iTrkP2<nSeleTrks; iTrkP2++) {
1048 if(iTrkP2==iTrkP1 || iTrkP2==iTrkN1)
continue;
1053 postrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkP2);
1055 if(postrack2->Charge()<0)
continue;
1057 if(!TESTBIT(seleFlags[iTrkP2],
kBitDispl))
continue;
1060 if(!TESTBIT(seleFlags[iTrkP2],
kBit3Prong))
continue;
1061 if(!TESTBIT(seleFlags[iTrkP1],
kBit3Prong))
continue;
1062 if(!TESTBIT(seleFlags[iTrkN1],
kBit3Prong))
continue;
1065 if(evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1066 evtNumber[iTrkN1]==evtNumber[iTrkP2] ||
1067 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1070 if(isLikeSign2Prong) {
1072 if(postrack1->Charge()>0) {
1073 isLikeSign3Prong=kTRUE;
1078 isLikeSign3Prong=kFALSE;
1080 if(evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1081 evtNumber[iTrkN1]==evtNumber[iTrkP2] ||
1082 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1089 Bool_t okForLcTopKpi=kTRUE;
1090 Int_t pidLcStatus=3;
1094 okForLcTopKpi=kFALSE;
1098 okForLcTopKpi=kFALSE;
1102 okForLcTopKpi=kTRUE;
1107 okForLcTopKpi=kTRUE;
1112 Bool_t okForDsToKKpi=kTRUE;
1115 !TESTBIT(seleFlags[iTrkP2],
kBitKaonCompat) ) okForDsToKKpi=kFALSE;
1127 dcap2n1 = postrack2->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1128 if(dcap2n1>dcaMax) { postrack2=0;
continue; }
1129 dcap1p2 = postrack2->GetDCA(postrack1,
fBzkG,xdummy,ydummy);
1130 if(dcap1p2>dcaMax) { postrack2=0;
continue; }
1135 if(postrack2->Charge()>0) {
1136 threeTrackArray->AddAt(postrack1,0);
1137 threeTrackArray->AddAt(negtrack1,1);
1138 threeTrackArray->AddAt(postrack2,2);
1140 threeTrackArray->AddAt(negtrack1,0);
1141 threeTrackArray->AddAt(postrack1,1);
1142 threeTrackArray->AddAt(postrack2,2);
1145 postrack2->GetPxPyPz(mompos2);
1146 Double_t pxDau[3]={mompos1[0],momneg1[0],mompos2[0]};
1147 Double_t pyDau[3]={mompos1[1],momneg1[1],mompos2[1]};
1148 Double_t pzDau[3]={mompos1[2],momneg1[2],mompos2[2]};
1155 threeTrackArray->Clear();
1163 twoTrackArray2->AddAt(postrack2,0);
1164 twoTrackArray2->AddAt(negtrack1,1);
1167 twoTrackArray2->Clear();
1176 io3Prong =
Make3Prong(threeTrackArray,event,secVert3PrAOD,dispersion,vertexp1n1,vertexp2n1,dcap1n1,dcap2n1,dcap1p2,okForLcTopKpi,okForDsToKKpi,ok3Prong);
1178 AliAODVertex *v3Prong=0x0;
1179 if(!
fMakeReducedRHF)v3Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1180 if(!isLikeSign3Prong) {
1190 v3Prong =
new (verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1191 rd->SetSecondaryVtx(v3Prong);
1192 v3Prong->SetParent(rd);
1193 AddRefs(v3Prong,rd,event,threeTrackArray);
1206 rd->SetSecondaryVtx(v3Prong);
1207 v3Prong->SetParent(rd);
1208 AddRefs(v3Prong,rd,event,threeTrackArray);
1214 if(io3Prong) {
delete io3Prong; io3Prong=NULL;}
1215 if(secVert3PrAOD) {
delete secVert3PrAOD; secVert3PrAOD=NULL;}
1221 && !isLikeSign2Prong && !isLikeSign3Prong
1223 && dcap1n1 < fCutsD0toKpipipi->GetDCACut()
1224 && dcap2n1 < fCutsD0toKpipipi->GetDCACut()) {
1234 threeTrackArray->AddAt(postrack1,0);
1235 threeTrackArray->AddAt(negtrack1,1);
1236 threeTrackArray->AddAt(postrack2,2);
1240 for(iTrkN2=iTrkN1+1; iTrkN2<nSeleTrks; iTrkN2++) {
1242 if(iTrkN2==iTrkP1 || iTrkN2==iTrkP2 || iTrkN2==iTrkN1)
continue;
1247 negtrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN2);
1249 if(negtrack2->Charge()>0)
continue;
1251 if(!TESTBIT(seleFlags[iTrkN2],
kBitDispl))
continue;
1253 if(evtNumber[iTrkP1]==evtNumber[iTrkN2] ||
1254 evtNumber[iTrkN1]==evtNumber[iTrkN2] ||
1255 evtNumber[iTrkP2]==evtNumber[iTrkN2] ||
1256 evtNumber[iTrkP1]==evtNumber[iTrkN1] ||
1257 evtNumber[iTrkP1]==evtNumber[iTrkP2] ||
1258 evtNumber[iTrkN1]==evtNumber[iTrkP2])
continue;
1271 dcap1n2 = postrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1273 dcap2n2 = postrack2->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1277 fourTrackArray->AddAt(postrack1,0);
1278 fourTrackArray->AddAt(negtrack1,1);
1279 fourTrackArray->AddAt(postrack2,2);
1280 fourTrackArray->AddAt(negtrack2,3);
1288 fourTrackArray->Clear();
1295 io4Prong =
Make4Prong(fourTrackArray,event,secVert4PrAOD,vertexp1n1,vertexp1n1p2,dcap1n1,dcap1n2,dcap2n1,dcap2n2,ok4Prong);
1302 AliAODVertex *v4Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*secVert4PrAOD);
1303 rd->SetSecondaryVtx(v4Prong);
1304 v4Prong->SetParent(rd);
1305 AddRefs(v4Prong,rd,event,fourTrackArray);
1309 if(io4Prong) {
delete io4Prong; io4Prong=NULL;}
1310 if(secVert4PrAOD) {
delete secVert4PrAOD; secVert4PrAOD=NULL;}
1311 fourTrackArray->Clear();
1316 threeTrackArray->Clear();
1317 delete vertexp1n1p2;
1326 twoTrackArray2->Clear();
1329 for(iTrkN2=iTrkN1+1; iTrkN2<nSeleTrks; iTrkN2++) {
1331 if(iTrkN2==iTrkP1 || iTrkN2==iTrkP2 || iTrkN2==iTrkN1)
continue;
1336 negtrack2 = (AliESDtrack*)seleTrksArray.UncheckedAt(iTrkN2);
1338 if(negtrack2->Charge()>0)
continue;
1340 if(!TESTBIT(seleFlags[iTrkN2],
kBitDispl))
continue;
1343 if(!TESTBIT(seleFlags[iTrkN2],
kBit3Prong))
continue;
1344 if(!TESTBIT(seleFlags[iTrkP1],
kBit3Prong))
continue;
1345 if(!TESTBIT(seleFlags[iTrkN1],
kBit3Prong))
continue;
1348 if(evtNumber[iTrkP1]==evtNumber[iTrkN2] ||
1349 evtNumber[iTrkN1]==evtNumber[iTrkN2] ||
1350 evtNumber[iTrkP1]==evtNumber[iTrkN1])
continue;
1353 if(isLikeSign2Prong) {
1355 if(postrack1->Charge()<0) {
1356 isLikeSign3Prong=kTRUE;
1361 isLikeSign3Prong=kFALSE;
1367 Bool_t okForLcTopKpi=kTRUE;
1368 Int_t pidLcStatus=3;
1372 okForLcTopKpi=kFALSE;
1376 okForLcTopKpi=kFALSE;
1380 okForLcTopKpi=kTRUE;
1385 okForLcTopKpi=kTRUE;
1390 Bool_t okForDsToKKpi=kTRUE;
1393 !TESTBIT(seleFlags[iTrkN2],
kBitKaonCompat) ) okForDsToKKpi=kFALSE;
1405 dcap1n2 = postrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1406 if(dcap1n2>dcaMax) { negtrack2=0;
continue; }
1407 dcan1n2 = negtrack1->GetDCA(negtrack2,
fBzkG,xdummy,ydummy);
1408 if(dcan1n2>dcaMax) { negtrack2=0;
continue; }
1410 threeTrackArray->AddAt(negtrack1,0);
1411 threeTrackArray->AddAt(postrack1,1);
1412 threeTrackArray->AddAt(negtrack2,2);
1417 negtrack2->GetPxPyPz(momneg2);
1418 Double_t pxDau[3]={momneg1[0],mompos1[0],momneg2[0]};
1419 Double_t pyDau[3]={momneg1[1],mompos1[1],momneg2[1]};
1420 Double_t pzDau[3]={momneg1[2],mompos1[2],momneg2[2]};
1425 threeTrackArray->Clear();
1431 twoTrackArray2->AddAt(postrack1,0);
1432 twoTrackArray2->AddAt(negtrack2,1);
1436 twoTrackArray2->Clear();
1443 io3Prong =
Make3Prong(threeTrackArray,event,secVert3PrAOD,dispersion,vertexp1n1,vertexp1n2,dcap1n1,dcap1n2,dcan1n2,okForLcTopKpi,okForDsToKKpi,ok3Prong);
1445 AliAODVertex *v3Prong = 0x0;
1446 if(!
fMakeReducedRHF) v3Prong =
new(verticesHFRef[iVerticesHF++])AliAODVertex(*secVert3PrAOD);
1447 if(!isLikeSign3Prong) {
1456 rd->SetSecondaryVtx(v3Prong);
1457 v3Prong->SetParent(rd);
1458 AddRefs(v3Prong,rd,event,threeTrackArray);
1470 rd->SetSecondaryVtx(v3Prong);
1471 v3Prong->SetParent(rd);
1472 AddRefs(v3Prong,rd,event,threeTrackArray);
1478 if(io3Prong) {
delete io3Prong; io3Prong=NULL;}
1479 if(secVert3PrAOD) {
delete secVert3PrAOD; secVert3PrAOD=NULL;}
1481 threeTrackArray->Clear();
1487 twoTrackArray2->Clear();
1500 AliDebug(1,Form(
" D0->Kpi in event = %d;",
1501 (Int_t)aodD0toKpiTClArr->GetEntriesFast()));
1504 AliDebug(1,Form(
" JPSI->ee in event = %d;",
1505 (Int_t)aodJPSItoEleTClArr->GetEntriesFast()));
1508 AliDebug(1,Form(
" Charm->3Prong in event = %d;",
1509 (Int_t)aodCharm3ProngTClArr->GetEntriesFast()));
1512 AliDebug(1,Form(
" Charm->4Prong in event = %d;\n",
1513 (Int_t)aodCharm4ProngTClArr->GetEntriesFast()));
1516 AliDebug(1,Form(
" D*->D0pi in event = %d;\n",
1517 (Int_t)aodDstarTClArr->GetEntriesFast()));
1520 AliDebug(1,Form(
" cascades -> v0 + track in event = %d;\n",
1521 (Int_t)aodCascadesTClArr->GetEntriesFast()));
1524 AliDebug(1,Form(
" Like-sign 2Prong in event = %d;\n",
1525 (Int_t)aodLikeSign2ProngTClArr->GetEntriesFast()));
1528 AliDebug(1,Form(
" Like-sign 3Prong in event = %d;\n",
1529 (Int_t)aodLikeSign3ProngTClArr->GetEntriesFast()));
1533 twoTrackArray1->Delete();
delete twoTrackArray1;
1534 twoTrackArray2->Delete();
delete twoTrackArray2;
1535 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1536 twoTrackArrayV0->Delete();
delete twoTrackArrayV0;
1537 threeTrackArray->Clear();
1538 threeTrackArray->Delete();
delete threeTrackArray;
1539 fourTrackArray->Delete();
delete fourTrackArray;
1540 delete [] seleFlags; seleFlags=NULL;
1541 if(evtNumber) {
delete [] evtNumber; evtNumber=NULL;}
1542 tracksAtVertex.Delete();
1545 seleTrksArray.Delete();
1556 const AliVEvent *event,
1557 const TObjArray *trkArray)
const
1581 const AliVEvent *event,
1582 const TObjArray *trkArray)
const
1587 Int_t nDg = v->GetNDaughters();
1589 if(nDg) dg = v->GetDaughter(0);
1593 Int_t nTrks = trkArray->GetEntriesFast();
1595 AliExternalTrackParam *track = 0;
1596 AliAODTrack *aodTrack = 0;
1599 for(Int_t i=0; i<nTrks; i++) {
1600 track = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
1601 id = (Int_t)track->GetID();
1604 aodTrack =
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[
id]));
1605 if(!aodTrack) AliFatal(
"Not a standard AOD");
1606 v->AddDaughter(aodTrack);
1620 TClonesArray *inputArray=(TClonesArray*)aod->GetList()->FindObject(
"VerticesHF");
1621 if(!inputArray)
return;
1623 AliAODTrack *track = 0;
1624 AliAODVertex *vertex = 0;
1626 Bool_t needtofix=kFALSE;
1627 for(Int_t iv=0; iv<inputArray->GetEntriesFast(); iv++) {
1628 vertex = (AliAODVertex*)inputArray->UncheckedAt(iv);
1629 for(Int_t
id=0;
id<vertex->GetNDaughters();
id++) {
1630 track = (AliAODTrack*)vertex->GetDaughter(
id);
1631 if(!track->GetStatus()) needtofix=kTRUE;
1633 if(needtofix)
break;
1636 if(!needtofix)
return;
1639 printf(
"Fixing references\n");
1645 for(Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
1646 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
1647 if(!track) AliFatal(
"Not a standard AOD");
1650 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
1653 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
1656 Double_t covtest[21];
1657 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
1660 Int_t ind = (Int_t)track->GetID();
1661 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
1665 Int_t ids[4]={-1,-1,-1,-1};
1666 for(Int_t iv=0; iv<inputArray->GetEntriesFast(); iv++) {
1667 Bool_t cascade=kFALSE;
1668 vertex = (AliAODVertex*)inputArray->UncheckedAt(iv);
1670 Int_t nDgs = vertex->GetNDaughters();
1671 for(
id=0;
id<nDgs;
id++) {
1672 track = (AliAODTrack*)vertex->GetDaughter(
id);
1673 if(track->Charge()==0) {cascade=kTRUE;
continue;}
1674 ids[id]=(Int_t)track->GetID();
1675 vertex->RemoveDaughter(track);
1677 if(cascade)
continue;
1678 for(
id=0;
id<nDgs;
id++) {
1679 if (ids[
id]>-1 && ids[
id] < fAODMapSize) {
1680 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(
fAODMap[ids[
id]]));
1681 if(!track) AliFatal(
"Not a standard AOD");
1682 vertex->AddDaughter(track);
1698 TObjArray *threeTrackArray =
new TObjArray(3);
1701 if(!track1)
return kFALSE;
1703 if(!track2)
return kFALSE;
1704 AliESDtrack *postrack1 = 0;
1705 AliESDtrack *negtrack1 = 0;
1706 postrack1 =
new AliESDtrack(track1);
1707 negtrack1 =
new AliESDtrack(track2);
1710 Double_t xdummy, ydummy;
1711 fBzkG = (Double_t)event->GetMagneticField();
1712 Double_t dca12 = postrack1->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1714 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1717 vprimary->GetXYZ(pos);
1718 vprimary->GetCovarianceMatrix(cov);
1719 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1720 fV1->GetCovMatrix(cov);
1724 if(!track3)
return kFALSE;
1725 AliESDtrack *esdt3 =
new AliESDtrack(track3);
1729 threeTrackArray->AddAt(postrack1,0);
1730 threeTrackArray->AddAt(negtrack1,1);
1731 threeTrackArray->AddAt(esdt3,2);
1732 dca2 = esdt3->GetDCA(negtrack1,
fBzkG,xdummy,ydummy);
1733 dca3 = esdt3->GetDCA(postrack1,
fBzkG,xdummy,ydummy);
1734 Double_t dispersion;
1737 if (!secVert3PrAOD) {
1738 threeTrackArray->Clear();
1739 threeTrackArray->Delete();
delete threeTrackArray;
1741 delete postrack1; postrack1=NULL;
1742 delete negtrack1; negtrack1=NULL;
1743 delete esdt3; esdt3=NULL;
1749 rd=
Make3Prong(threeTrackArray, event, secVert3PrAOD,dispersion, vtxRec, vertexp2n1, dca12, dca2, dca3, rd);
1752 threeTrackArray->Clear();
1753 threeTrackArray->Delete();
delete threeTrackArray;
1755 delete postrack1; postrack1=NULL;
1756 delete negtrack1; negtrack1=NULL;
1757 delete esdt3; esdt3=NULL;
1768 Double_t dispersion;
1769 TObjArray *twoTrackArray1 =
new TObjArray(2);
1772 if(!track1)
return kFALSE;
1774 if(!track2)
return kFALSE;
1776 AliESDtrack *esdt1 = 0;
1777 AliESDtrack *esdt2 = 0;
1778 esdt1 =
new AliESDtrack(track1);
1779 esdt2 =
new AliESDtrack(track2);
1781 twoTrackArray1->AddAt(esdt1,0);
1782 twoTrackArray1->AddAt(esdt2,1);
1784 Double_t xdummy, ydummy;
1785 fBzkG = (Double_t)event->GetMagneticField();
1786 Double_t dca12 = esdt1->GetDCA(esdt2,
fBzkG,xdummy,ydummy);
1787 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1790 vprimary->GetXYZ(pos);
1791 vprimary->GetCovarianceMatrix(cov);
1792 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1793 fV1->GetCovMatrix(cov);
1799 twoTrackArray1->Clear();
1800 twoTrackArray1->Delete();
delete twoTrackArray1;
1802 delete esdt1; esdt1=NULL;
1803 delete esdt2; esdt2=NULL;
1806 Bool_t okJPSI=kFALSE;
1807 Bool_t okD0FromDstar=kFALSE;
1808 Bool_t refill =kTRUE;
1809 rd=
Make2Prong(twoTrackArray1, event, vtxRec, dca12, okD0, okJPSI, okD0FromDstar,refill,rd);
1813 twoTrackArray1->Clear();
1814 twoTrackArray1->Delete();
delete twoTrackArray1;
1815 delete esdt1; esdt1=NULL;
1816 delete esdt2; esdt2=NULL;
1825 TObjArray *twoTrackArrayCasc =
new TObjArray(2);
1827 AliAODTrack *trackB =(AliAODTrack*)event->GetTrack(
fAODMap[rCasc->
GetProngID(0)]);
1828 if(!trackB)
return kFALSE;
1830 AliNeutralTrackParam *trackV0=NULL;
1835 TClonesArray *inputArrayD0=(TClonesArray*)event->GetList()->FindObject(
"D0toKpi");
1836 if(!inputArrayD0)
return kFALSE;
1838 if(!trackD0)
return kFALSE;
1841 trackV0 =
new AliNeutralTrackParam(trackD0);
1844 v0 = ((AliAODEvent*)event)->GetV0(rCasc->
GetProngID(1));
1845 if(!v0)
return kFALSE;
1847 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
1848 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
1851 AliESDtrack *esdB =
new AliESDtrack(trackB);
1853 twoTrackArrayCasc->AddAt(esdB,0);
1854 twoTrackArrayCasc->AddAt(trackV0,1);
1856 fBzkG = (Double_t)event->GetMagneticField();
1857 const AliVVertex *vprimary =
event->GetPrimaryVertex();
1861 vprimary->GetXYZ(pos);
1862 vprimary->GetCovarianceMatrix(cov);
1863 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
1864 fV1->GetCovMatrix(cov);
1867 AliAODVertex *vtxCasc = 0x0;
1868 Double_t chi2perNDF =
fV1->GetChi2toNDF();
1870 Double_t dispersion, xdummy, ydummy;
1871 dca = esdB->GetDCA(trackV0,
fBzkG,xdummy,ydummy);
1875 vtxCasc =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,2);
1878 twoTrackArrayCasc->Clear();
1879 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1881 delete esdB; esdB=NULL;
1882 delete vtxCasc;vtxCasc=NULL;
1884 delete trackV0; trackV0=NULL;
1890 vtxCasc->SetParent(rCasc);
1891 rCasc->SetSecondaryVtx(vtxCasc);
1893 if(DStar)vtxCasc->AddDaughter(trackD0);
1894 else vtxCasc->AddDaughter(v0);
1897 Bool_t refill =kTRUE;
1899 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
1901 esdB->PropagateToDCA(vtxCasc,
fBzkG,kVeryBig);
1902 trackV0->PropagateToDCA(vtxCasc,
fBzkG,kVeryBig);
1903 Double_t momentum[3];
1904 esdB->GetPxPyPz(momentum);
1905 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
1906 trackV0->GetPxPyPz(momentum);
1907 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
1909 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArrayCasc,event);
1912 delete vtxCasc; vtxCasc=NULL;
1913 twoTrackArrayCasc->Clear();
1914 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1915 delete esdB; esdB=NULL;
1916 delete trackV0; trackV0=NULL;
1920 Double_t d0z0[2],covd0z0[3];
1921 esdB->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1923 d0err[0] = TMath::Sqrt(covd0z0[0]);
1924 trackV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1926 d0err[1] = TMath::Sqrt(covd0z0[0]);
1927 rCasc->SetPxPyPzProngs(2,px,py,pz);
1929 rCasc->Setd0Prongs(2,d0);
1931 rCasc->SetCharge(esdB->Charge());
1933 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
1934 if(esdB->GetStatus()&AliESDtrack::kESDpid) esdB->GetESDpid(esdpid0);
1935 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
1936 Double_t esdpid[10];
1937 for(Int_t i=0;i<5;i++) {
1938 esdpid[i] = esdpid0[i];
1939 esdpid[5+i] = esdpid1[i];
1941 rCasc->SetPID(2,esdpid);
1946 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
1947 twoTrackArrayCasc->Clear();
1948 twoTrackArrayCasc->Delete();
delete twoTrackArrayCasc;
1949 delete esdB; esdB=NULL;
1950 delete trackV0; trackV0=NULL;
1956 TObjArray *twoTrackArray,AliVEvent *event,
1957 AliAODVertex *secVert,
1965 UInt_t ntref=TProcessID::GetObjectCount();
1967 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
1972 Bool_t dummy1,dummy2,dummy3;
1978 dummy1,dummy2,dummy3);
1979 if(!theCascade)
return 0x0;
1982 AliESDtrack *trackPi = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
1983 theCascade->SetCharge(trackPi->Charge());
1989 Int_t idSoftPi=(Int_t)trackPi->GetID();
1991 AliAODTrack* trackPiAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idSoftPi]));
1992 if(!trackPiAOD) AliFatal(
"Not a standard AOD");
1993 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPiAOD);
1996 tmpCascade->GetSecondaryVtx()->AddDaughter(trackPi);
1998 tmpCascade->GetSecondaryVtx()->AddDaughter(rd2Prong);
2000 AliAODVertex *primVertexAOD=0;
2012 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
2014 delete tmpCascade; tmpCascade=NULL;
2018 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2028 TObjArray *twoTrackArray,AliVEvent *event,
2029 AliAODVertex *secVert,
2037 UInt_t ntref=TProcessID::GetObjectCount();
2039 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2043 okCascades = kFALSE;
2044 Bool_t dummy1,dummy2,dummy3;
2050 dummy1,dummy2,dummy3);
2051 if(!theCascade)
return 0x0;
2054 AliESDtrack *trackBachelor = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2055 theCascade->SetCharge(trackBachelor->Charge());
2062 Int_t idBachelor=(Int_t)trackBachelor->GetID();
2063 if (idBachelor > -1 && idBachelor <
fAODMapSize) {
2064 AliAODTrack* trackBachelorAOD=
dynamic_cast<AliAODTrack*
>(
event->GetTrack(
fAODMap[idBachelor]));
2065 if(!trackBachelorAOD) AliFatal(
"Not a standard AOD");
2066 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelorAOD);
2069 tmpCascade->GetSecondaryVtx()->AddDaughter(trackBachelor);
2071 tmpCascade->GetSecondaryVtx()->AddDaughter(v0);
2073 AliAODVertex *primVertexAOD=0;
2077 if(!primVertexAOD) primVertexAOD = (AliAODVertex*)event->GetPrimaryVertex();
2104 tmpCascade->GetSecondaryVtx()->RemoveDaughters();
2106 delete tmpCascade; tmpCascade=NULL;
2107 if(primVertexAOD) {
delete primVertexAOD; primVertexAOD=NULL;}
2115 TObjArray *twoTrackArray,AliVEvent *event,
2116 AliAODVertex *secVert,Double_t dca,
2117 Bool_t &okD0,Bool_t &okJPSI,
2124 okD0=kFALSE; okJPSI=kFALSE; okD0fromDstar=kFALSE;
2126 UInt_t ntref=TProcessID::GetObjectCount();
2128 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2131 Double_t px[2],py[2],pz[2],d0[2],d0err[2];
2132 AliESDtrack *postrack = (AliESDtrack*)twoTrackArray->UncheckedAt(0);
2133 AliESDtrack *negtrack = (AliESDtrack*)twoTrackArray->UncheckedAt(1);
2136 postrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2137 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2139 Double_t momentum[3];
2140 postrack->GetPxPyPz(momentum);
2141 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2142 negtrack->GetPxPyPz(momentum);
2143 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2147 Bool_t okMassCut=kFALSE;
2158 AliAODVertex *primVertexAOD =
PrimaryVertex(twoTrackArray,event);
2159 if(!primVertexAOD)
return 0x0;
2161 Double_t d0z0[2],covd0z0[3];
2162 postrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2164 d0err[0] = TMath::Sqrt(covd0z0[0]);
2165 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2167 d0err[1] = TMath::Sqrt(covd0z0[0]);
2173 UShort_t
id[2]={(UShort_t)postrack->GetID(),(UShort_t)negtrack->GetID()};
2175 if(postrack->Charge()!=0 && negtrack->Charge()!=0) {
2199 the2Prong->SetSecondaryVtx(secVert);
2200 secVert->SetParent(the2Prong);
2203 the2Prong->SetPxPyPzProngs(2,px,py,pz);
2204 the2Prong->SetDCA(dca);
2205 the2Prong->Setd0Prongs(2,d0);
2207 the2Prong->SetCharge(0);
2209 delete primVertexAOD; primVertexAOD=NULL;
2217 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2218 if(postrack->GetStatus()&AliESDtrack::kESDpid) postrack->GetESDpid(esdpid0);
2219 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2220 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2221 Double_t esdpid[10];
2222 for(Int_t i=0;i<5;i++) {
2223 esdpid[i] = esdpid0[i];
2224 esdpid[5+i] = esdpid1[i];
2226 the2Prong->SetPID(2,esdpid);
2231 TObjArray *threeTrackArray,AliVEvent *event,
2232 AliAODVertex *secVert,Double_t dispersion,
2233 const AliAODVertex *vertexp1n1,
const AliAODVertex *vertexp2n1,
2234 Double_t dcap1n1,Double_t dcap2n1,Double_t dcap1p2,
2235 Bool_t useForLc, Bool_t useForDs, Bool_t &ok3Prong)
2243 UInt_t ntref=TProcessID::GetObjectCount();
2245 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2249 if(!secVert || !vertexp1n1 || !vertexp2n1)
return 0x0;
2251 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2252 Double_t momentum[3];
2255 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2256 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2257 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2259 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2260 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2261 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2262 postrack1->GetPxPyPz(momentum);
2263 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2264 negtrack->GetPxPyPz(momentum);
2265 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2266 postrack2->GetPxPyPz(momentum);
2267 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2270 Bool_t okMassCut=kFALSE;
2279 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2280 if(!primVertexAOD)
return 0x0;
2282 Double_t d0z0[2],covd0z0[3];
2283 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2285 d0err[0] = TMath::Sqrt(covd0z0[0]);
2286 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2288 d0err[1] = TMath::Sqrt(covd0z0[0]);
2289 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2291 d0err[2] = TMath::Sqrt(covd0z0[0]);
2295 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2296 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2297 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]));
2298 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]));
2299 Short_t
charge=(Short_t)(postrack1->Charge()+postrack2->Charge()+negtrack->Charge());
2300 AliAODRecoDecayHF3Prong *the3Prong =
new AliAODRecoDecayHF3Prong(secVert,px,py,pz,d0,d0err,dca,dispersion,dist12,dist23,charge);
2302 UShort_t
id[3]={(UShort_t)postrack1->GetID(),(UShort_t)negtrack->GetID(),(UShort_t)postrack2->GetID()};
2305 delete primVertexAOD; primVertexAOD=NULL;
2338 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2339 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2340 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2341 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2342 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2343 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2345 Double_t esdpid[15];
2346 for(Int_t i=0;i<5;i++) {
2347 esdpid[i] = esdpid0[i];
2348 esdpid[5+i] = esdpid1[i];
2349 esdpid[10+i] = esdpid2[i];
2351 the3Prong->SetPID(3,esdpid);
2357 TObjArray *threeTrackArray,AliVEvent *event,
2358 AliAODVertex *secVert,Double_t dispersion,
2359 Double32_t dist12, Double32_t dist23,
2360 Double_t dcap1n1,Double_t dcap2n1,Double_t dcap1p2,
2372 UInt_t ntref=TProcessID::GetObjectCount();
2374 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2377 Double_t px[3],py[3],pz[3],d0[3],d0err[3];
2378 Double_t momentum[3];
2381 AliESDtrack *postrack1 = (AliESDtrack*)threeTrackArray->UncheckedAt(0);
2382 AliESDtrack *negtrack = (AliESDtrack*)threeTrackArray->UncheckedAt(1);
2383 AliESDtrack *postrack2 = (AliESDtrack*)threeTrackArray->UncheckedAt(2);
2385 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2386 negtrack->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2387 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2388 postrack1->GetPxPyPz(momentum);
2389 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2390 negtrack->GetPxPyPz(momentum);
2391 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2392 postrack2->GetPxPyPz(momentum);
2393 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2395 AliAODVertex *primVertexAOD =
PrimaryVertex(threeTrackArray,event);
2396 if(!primVertexAOD)
return 0x0;
2397 Double_t d0z0[2],covd0z0[3];
2398 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2400 d0err[0] = TMath::Sqrt(covd0z0[0]);
2401 negtrack->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2403 d0err[1] = TMath::Sqrt(covd0z0[0]);
2404 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2406 d0err[2] = TMath::Sqrt(covd0z0[0]);
2408 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2409 Double_t dca[3]={dcap1n1,dcap2n1,dcap1p2};
2410 Short_t
charge=(Short_t)(postrack1->Charge()+postrack2->Charge()+negtrack->Charge());
2412 rd->SetSecondaryVtx(secVert);
2413 secVert->SetParent(rd);
2416 rd->SetPxPyPzProngs(3,px,py,pz);
2418 rd->Setd0Prongs(3,d0);
2420 rd->SetCharge(charge);
2423 delete primVertexAOD; primVertexAOD=NULL;
2430 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2431 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2432 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2433 if(negtrack->GetStatus()&AliESDtrack::kESDpid) negtrack->GetESDpid(esdpid1);
2434 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2435 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2437 Double_t esdpid[15];
2438 for(Int_t i=0;i<5;i++) {
2439 esdpid[i] = esdpid0[i];
2440 esdpid[5+i] = esdpid1[i];
2441 esdpid[10+i] = esdpid2[i];
2443 rd->SetPID(3,esdpid);
2448 TObjArray *fourTrackArray,AliVEvent *event,
2449 AliAODVertex *secVert,
2450 const AliAODVertex *vertexp1n1,
2451 const AliAODVertex *vertexp1n1p2,
2452 Double_t dcap1n1,Double_t dcap1n2,
2453 Double_t dcap2n1,Double_t dcap2n2,
2461 UInt_t ntref=TProcessID::GetObjectCount();
2463 AliFatal(Form(
"Number of TRef created (=%d), close to limit (16777216)",ntref));
2467 if(!secVert || !vertexp1n1 || !vertexp1n1p2)
return 0x0;
2469 Double_t px[4],py[4],pz[4],d0[4],d0err[4];
2471 AliESDtrack *postrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(0);
2472 AliESDtrack *negtrack1 = (AliESDtrack*)fourTrackArray->UncheckedAt(1);
2473 AliESDtrack *postrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(2);
2474 AliESDtrack *negtrack2 = (AliESDtrack*)fourTrackArray->UncheckedAt(3);
2476 postrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2477 negtrack1->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2478 postrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2479 negtrack2->PropagateToDCA(secVert,
fBzkG,kVeryBig);
2481 Double_t momentum[3];
2482 postrack1->GetPxPyPz(momentum);
2483 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
2484 negtrack1->GetPxPyPz(momentum);
2485 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
2486 postrack2->GetPxPyPz(momentum);
2487 px[2] = momentum[0]; py[2] = momentum[1]; pz[2] = momentum[2];
2488 negtrack2->GetPxPyPz(momentum);
2489 px[3] = momentum[0]; py[3] = momentum[1]; pz[3] = momentum[2];
2492 Bool_t okMassCut=kFALSE;
2504 AliAODVertex *primVertexAOD =
PrimaryVertex(fourTrackArray,event);
2505 if(!primVertexAOD)
return 0x0;
2507 Double_t d0z0[2],covd0z0[3];
2508 postrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2510 d0err[0] = TMath::Sqrt(covd0z0[0]);
2511 negtrack1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2513 d0err[1] = TMath::Sqrt(covd0z0[0]);
2514 postrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2516 d0err[2] = TMath::Sqrt(covd0z0[0]);
2517 negtrack2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
2519 d0err[3] = TMath::Sqrt(covd0z0[0]);
2523 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
2524 Double_t dca[6]={dcap1n1,0.,dcap1n2,dcap2n1,0.,dcap2n2};
2525 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]));
2526 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]));
2527 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]));
2529 AliAODRecoDecayHF4Prong *the4Prong =
new AliAODRecoDecayHF4Prong(secVert,px,py,pz,d0,d0err,dca,dist12,dist3,dist4,charge);
2531 UShort_t
id[4]={(UShort_t)postrack1->GetID(),(UShort_t)negtrack1->GetID(),(UShort_t)postrack2->GetID(),(UShort_t)negtrack2->GetID()};
2534 delete primVertexAOD; primVertexAOD=NULL;
2545 Double_t esdpid0[5]={0.,0.,0.,0.,0.};
2546 if(postrack1->GetStatus()&AliESDtrack::kESDpid) postrack1->GetESDpid(esdpid0);
2547 Double_t esdpid1[5]={0.,0.,0.,0.,0.};
2548 if(negtrack1->GetStatus()&AliESDtrack::kESDpid) negtrack1->GetESDpid(esdpid1);
2549 Double_t esdpid2[5]={0.,0.,0.,0.,0.};
2550 if(postrack2->GetStatus()&AliESDtrack::kESDpid) postrack2->GetESDpid(esdpid2);
2551 Double_t esdpid3[5]={0.,0.,0.,0.,0.};
2552 if(negtrack2->GetStatus()&AliESDtrack::kESDpid) negtrack2->GetESDpid(esdpid3);
2554 Double_t esdpid[20];
2555 for(Int_t i=0;i<5;i++) {
2556 esdpid[i] = esdpid0[i];
2557 esdpid[5+i] = esdpid1[i];
2558 esdpid[10+i] = esdpid2[i];
2559 esdpid[15+i] = esdpid3[i];
2561 the4Prong->SetPID(4,esdpid);
2572 AliAODTrack *track=0;
2574 for(Int_t i=0; i<aod->GetNumberOfTracks(); i++) {
2575 track =
dynamic_cast<AliAODTrack*
>(aod->GetTrack(i));
2576 if(!track) AliFatal(
"Not a standard AOD");
2578 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
2581 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
2584 Double_t covtest[21];
2585 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
2588 Int_t ind = (Int_t)track->GetID();
2589 if (ind>-1 && ind < fAODMapSize)
fAODMap[ind] = i;
2595 AliVEvent *event)
const
2600 AliESDVertex *vertexESD = 0;
2601 AliAODVertex *vertexAOD = 0;
2607 vertexESD =
new AliESDVertex(*
fV1);
2612 Int_t nTrks = trkArray->GetEntriesFast();
2613 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
2618 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraint")) {
2619 Float_t diamondcovxy[3];
2620 event->GetDiamondCovXY(diamondcovxy);
2621 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
2622 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
2623 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
2624 vertexer->SetVtxStart(diamond);
2625 delete diamond; diamond=NULL;
2626 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraintOnlyFitter"))
2627 vertexer->SetOnlyFitter();
2629 Int_t skipped[1000];
2630 Int_t nTrksToSkip=0,id;
2631 AliExternalTrackParam *t = 0;
2632 for(Int_t i=0; i<nTrks; i++) {
2633 t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
2634 id = (Int_t)t->GetID();
2636 skipped[nTrksToSkip++] = id;
2641 Double_t covtest[21];
2642 for(Int_t j=0; j<
event->GetNumberOfTracks(); j++) {
2643 AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
2644 if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
2645 id = (Int_t)vtrack->GetID();
2647 skipped[nTrksToSkip++] = id;
2651 for(Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
2653 vertexer->SetSkipTracks(nTrksToSkip,skipped);
2654 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
2659 TObjArray rmArray(nTrks);
2660 UShort_t *rmId =
new UShort_t[nTrks];
2661 AliESDtrack *esdTrack = 0;
2663 for(Int_t i=0; i<nTrks; i++) {
2664 t = (AliESDtrack*)trkArray->UncheckedAt(i);
2665 esdTrack =
new AliESDtrack(*t);
2666 rmArray.AddLast(esdTrack);
2667 if(esdTrack->GetID()>=0) {
2668 rmId[i]=(UShort_t)esdTrack->GetID();
2673 Float_t diamondxy[2]={
static_cast<Float_t
>(
event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
2674 vertexESD = vertexer->RemoveTracksFromVertex(
fV1,&rmArray,rmId,diamondxy);
2675 delete [] rmId; rmId=NULL;
2680 if(!vertexESD)
return vertexAOD;
2681 if(vertexESD->GetNContributors()<=0) {
2683 delete vertexESD; vertexESD=NULL;
2687 delete vertexer; vertexer=NULL;
2692 Double_t pos[3],cov[6],chi2perNDF;
2693 vertexESD->GetXYZ(pos);
2694 vertexESD->GetCovMatrix(cov);
2695 chi2perNDF = vertexESD->GetChi2toNDF();
2696 delete vertexESD; vertexESD=NULL;
2698 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF);
2709 printf(
"Secondary vertex with Kalman filter package (AliKFParticle)\n");
2711 printf(
"Secondary vertex with AliVertexerTracks\n");
2716 printf(
"Reconstruct D0->Kpi candidates with cuts:\n");
2720 printf(
"Reconstruct D*->D0pi candidates with cuts:\n");
2722 printf(
" Reconstruct a secondary vertex for the D*\n");
2724 printf(
" Assume the D* comes from the primary vertex\n");
2729 printf(
"Reconstruct J/psi from B candidates with cuts:\n");
2733 printf(
"Reconstruct 3 prong candidates.\n");
2734 printf(
" D+->Kpipi cuts:\n");
2736 printf(
" Ds->KKpi cuts:\n");
2738 printf(
" Lc->pKpi cuts:\n");
2742 printf(
"Reconstruct 4 prong candidates.\n");
2743 printf(
" D0->Kpipipi cuts:\n");
2747 printf(
"Reconstruct cascade candidates formed with v0s.\n");
2748 printf(
" Lc -> k0s P & Lc -> L Pi cuts:\n");
2750 printf(
" D+ -> K0s pi cuts:\n");
2752 printf(
" Ds -> K0s K cuts:\n");
2760 Double_t &dispersion,Bool_t useTRefArray)
const
2765 AliESDVertex *vertexESD = 0;
2766 AliAODVertex *vertexAOD = 0;
2771 vertexESD = (AliESDVertex*)
fVertexerTracks->VertexForSelectedESDTracks(trkArray);
2773 if(!vertexESD)
return vertexAOD;
2775 if(vertexESD->GetNContributors()!=trkArray->GetEntriesFast()) {
2777 delete vertexESD; vertexESD=NULL;
2781 Double_t vertRadius2=vertexESD->GetX()*vertexESD->GetX()+vertexESD->GetY()*vertexESD->GetY();
2784 delete vertexESD; vertexESD=NULL;
2790 AliKFParticle::SetField(
fBzkG);
2792 AliKFVertex vertexKF;
2794 Int_t nTrks = trkArray->GetEntriesFast();
2795 for(Int_t i=0; i<nTrks; i++) {
2796 AliESDtrack *esdTrack = (AliESDtrack*)trkArray->At(i);
2797 AliKFParticle daughterKF(*esdTrack,211);
2798 vertexKF.AddDaughter(daughterKF);
2800 vertexESD =
new AliESDVertex(vertexKF.Parameters(),
2801 vertexKF.CovarianceMatrix(),
2803 vertexKF.GetNContributors());
2808 Double_t pos[3],cov[6],chi2perNDF;
2809 vertexESD->GetXYZ(pos);
2810 vertexESD->GetCovMatrix(cov);
2811 chi2perNDF = vertexESD->GetChi2toNDF();
2812 dispersion = vertexESD->GetDispersion();
2813 delete vertexESD; vertexESD=NULL;
2815 Int_t nprongs= (useTRefArray ? 0 : trkArray->GetEntriesFast());
2816 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
2825 Int_t retval=kFALSE;
2826 Double_t momentum[3];
2827 Double_t px[3],py[3],pz[3];
2828 for(Int_t iTrack=0; iTrack<3; iTrack++){
2829 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2830 track->GetPxPyPz(momentum);
2831 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2843 Int_t retval=kFALSE;
2844 Double_t momentum[3];
2845 Double_t px[4],py[4],pz[4];
2847 for(Int_t iTrack=0; iTrack<4; iTrack++){
2848 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2849 track->GetPxPyPz(momentum);
2850 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2862 Int_t retval=kFALSE;
2863 Double_t momentum[3];
2864 Double_t px[2],py[2],pz[2];
2866 for(Int_t iTrack=0; iTrack<2; iTrack++){
2867 AliESDtrack *track = (AliESDtrack*)trkArray->UncheckedAt(iTrack);
2868 track->GetPxPyPz(momentum);
2869 px[iTrack] = momentum[0]; py[iTrack] = momentum[1]; pz[iTrack] = momentum[2];
2884 Double_t minv2,mrange;
2885 Double_t lolim,hilim;
2887 Bool_t retval=kFALSE;
2889 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
2894 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
2899 pdg2[0]=211; pdg2[1]=321;
2901 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2905 pdg2[0]=321; pdg2[1]=211;
2907 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2923 Double_t minv2,mrange;
2924 Double_t lolim,hilim;
2926 Bool_t retval=kFALSE;
2928 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
2933 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
2939 pdg2[0]=11; pdg2[1]=11;
2941 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2958 Double_t minv2,mrange;
2959 Double_t lolim,hilim;
2961 Bool_t retval=kFALSE;
2964 fMassCalc3->SetPxPyPzProngs(nprongs,px,py,pz);
2972 if(
fMassCalc3->Pt2() < minPt*minPt)
return retval;
2977 pdg3[0]=211; pdg3[1]=321; pdg3[2]=211;
2979 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2987 pdg3[0]=321; pdg3[1]=321; pdg3[2]=211;
2989 if(minv2>lolim*lolim && minv2<hilim*hilim ){
2993 pdg3[0]=211; pdg3[1]=321; pdg3[2]=321;
2995 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3004 pdg3[0]=2212; pdg3[1]=321; pdg3[2]=211;
3006 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3012 pdg3[0]=211; pdg3[1]=321; pdg3[2]=2212;
3014 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3032 Double_t minv2,mrange;
3033 Double_t lolim,hilim;
3035 Bool_t retval=kFALSE;
3037 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3042 if(
fMassCalc2->Pt2() < minPt*minPt)
return retval;
3044 pdg2[0]=211; pdg2[1]=421;
3049 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3066 Double_t minv2,mrange;
3067 Double_t lolim,hilim;
3069 Bool_t retval=kFALSE;
3072 fMassCalc4->SetPxPyPzProngs(nprongs,px,py,pz);
3077 if(
fMassCalc4->Pt2() < minPt*minPt)
return retval;
3083 pdg4[0]=321; pdg4[1]=211; pdg4[2]=211; pdg4[3]=211;
3085 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3090 pdg4[0]=211; pdg4[1]=321; pdg4[2]=211; pdg4[3]=211;
3092 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3097 pdg4[0]=211; pdg4[1]=211; pdg4[2]=321; pdg4[3]=211;
3099 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3104 pdg4[0]=211; pdg4[1]=211; pdg4[2]=211; pdg4[3]=321;
3106 if(minv2>lolim*lolim && minv2<hilim*hilim ){
3122 Double_t minv2, mrange;
3123 Double_t lolim, hilim;
3125 Bool_t retval = kFALSE;
3127 fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
3136 pdg2[0] = 2212; pdg2[1] = 310;
3138 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3142 pdg2[0] = 211; pdg2[1] = 3122;
3144 if ((minv2>lolim*lolim) && (minv2<hilim*hilim)) {
3155 pdg2[0] = 211; pdg2[1] = 310;
3157 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3167 pdg2[0] = 321; pdg2[1] = 310;
3169 if ((minv2 > lolim*lolim) && (minv2 < hilim*hilim)) {
3179 TObjArray &seleTrksArray,
3180 TObjArray &tracksAtVertex,
3182 UChar_t *seleFlags,Int_t *evtNumber)
3191 const AliVVertex *vprimary =
event->GetPrimaryVertex();
3197 UShort_t *indices = 0;
3198 Double_t pos[3],cov[6];
3199 const Int_t entries =
event->GetNumberOfTracks();
3200 AliCentrality* cent;
3203 fV1 =
new AliESDVertex(*((AliESDVertex*)vprimary));
3204 cent=((AliESDEvent*)event)->GetCentrality();
3206 vprimary->GetXYZ(pos);
3207 vprimary->GetCovarianceMatrix(cov);
3208 fV1 =
new AliESDVertex(pos,cov,100.,100,vprimary->GetName());
3209 if(entries<=0)
return;
3210 indices =
new UShort_t[entries];
3211 memset(indices,0,
sizeof(UShort_t)*entries);
3215 cent=((AliAODEvent*)event)->GetCentrality();
3217 Float_t centperc=0.1;
3218 if(event->GetRunNumber()<244824){
3219 centperc=cent->GetCentralityPercentile(
"V0M");
3221 AliMultSelection *multSelection = (AliMultSelection * ) event->FindListObject(
"MultSelection");
3223 centperc=multSelection->GetMultiplicityPercentile(
"V0M");
3224 Int_t qual = multSelection->GetEvSelCode();
3225 if(qual == 199 ) centperc=0.1;
3228 Bool_t okDisplaced=kFALSE,okSoftPi=kFALSE,okFor3Prong=kFALSE;
3232 for(Int_t i=0; i<entries; i++) {
3234 track = (AliVTrack*)event->GetTrack(i);
3237 if(track->GetStatus()&AliESDtrack::kITSpureSA)
continue;
3240 if(!(track->GetStatus()&AliESDtrack::kITSin))
continue;
3244 if(track->GetID()<0)
continue;
3247 Double_t covtest[21];
3248 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
3252 AliAODTrack *aodt = (AliAODTrack*)track;
3253 if(aodt->GetUsedForPrimVtxFit()) {
3254 indices[nindices]=aodt->GetID(); nindices++;
3256 Int_t ind = (Int_t)aodt->GetID();
3260 AliESDtrack *esdt = 0;
3263 esdt = (AliESDtrack*)track;
3265 esdt =
new AliESDtrack(track);
3269 okDisplaced=kFALSE; okSoftPi=kFALSE; okFor3Prong=kFALSE;
3271 evtNumber[i]=((AliMixedEvent*)event)->EventIndex(i);
3272 const AliVVertex* eventVtx=((AliMixedEvent*)event)->GetEventVertex(i);
3273 Double_t vtxPos[3],primPos[3],primCov[6],trasl[3];
3274 eventVtx->GetXYZ(vtxPos);
3275 vprimary->GetXYZ(primPos);
3276 eventVtx->GetCovarianceMatrix(primCov);
3277 for(Int_t ind=0;ind<3;ind++){
3278 trasl[ind]=vtxPos[ind]-primPos[ind];
3281 Bool_t isTransl=esdt->Translate(trasl,primCov);
3289 if(
SingleTrkCuts(esdt,centperc,okDisplaced,okSoftPi,okFor3Prong) && nSeleTrks<trkEntries) {
3290 esdt->PropagateToDCA(
fV1,
fBzkG,kVeryBig);
3291 seleTrksArray.AddLast(esdt);
3292 tracksAtVertex.AddLast(
new AliExternalTrackParam(*esdt));
3293 seleFlags[nSeleTrks]=0;
3294 if(okDisplaced) SETBIT(seleFlags[nSeleTrks],
kBitDispl);
3295 if(okFor3Prong) SETBIT(seleFlags[nSeleTrks],
kBit3Prong);
3296 if(okSoftPi) SETBIT(seleFlags[nSeleTrks],
kBitSoftPi);
3302 Bool_t useTPC=kTRUE;
3304 Double_t nsigmatofPi=
fPidResponse->NumberOfSigmasTOF(esdt,AliPID::kPion);
3305 if(nsigmatofPi>-990. && (nsigmatofPi<-fnSigmaTOFPionLow || nsigmatofPi>
fnSigmaTOFPionHi)){
3308 Double_t nsigmatofK=
fPidResponse->NumberOfSigmasTOF(esdt,AliPID::kKaon);
3309 if(nsigmatofK>-990. && (nsigmatofK<-fnSigmaTOFKaonLow || nsigmatofK>
fnSigmaTOFKaonHi)){
3312 Double_t nsigmatofP=
fPidResponse->NumberOfSigmasTOF(esdt,AliPID::kProton);
3313 if(nsigmatofP>-990. && (nsigmatofP<-fnSigmaTOFProtonLow || nsigmatofP>
fnSigmaTOFProtonHi)){
3319 Double_t nsigmatpcPi=
fPidResponse->NumberOfSigmasTPC(esdt,AliPID::kPion);
3320 if(nsigmatpcPi>-990. && (nsigmatpcPi<-fnSigmaTPCPionLow || nsigmatpcPi>
fnSigmaTPCPionHi)){
3323 Double_t nsigmatpcK=
fPidResponse->NumberOfSigmasTPC(esdt,AliPID::kKaon);
3324 if(nsigmatpcK>-990. && (nsigmatpcK<-fnSigmaTPCKaonLow || nsigmatpcK>
fnSigmaTPCKaonHi)){
3327 Double_t nsigmatpcP=
fPidResponse->NumberOfSigmasTPC(esdt,AliPID::kProton);
3328 if(nsigmatpcP>-990. && (nsigmatpcP<-fnSigmaTPCProtonLow || nsigmatpcP>
fnSigmaTPCProtonHi)){
3344 vprimary->GetXYZ(pos);
3345 vprimary->GetCovarianceMatrix(cov);
3346 Double_t chi2toNDF = vprimary->GetChi2perNDF();
3347 Int_t ncontr=nindices;
3348 if(!strcmp(vprimary->GetTitle(),
"VertexerTracksWithContraint")) ncontr += 1;
3349 Double_t chi2=chi2toNDF*(2.*(Double_t)ncontr-3.);
3350 fV1 =
new AliESDVertex(pos,cov,chi2,ncontr,vprimary->GetName());
3351 fV1->SetTitle(vprimary->GetTitle());
3352 fV1->SetIndices(nindices,indices);
3354 if(indices) {
delete [] indices; indices=NULL; }
3375 Float_t centralityperc,
3376 Bool_t &okDisplaced,
3378 Bool_t &okFor3Prong)
const
3385 trk->RelateToVertex(
fV1,
fBzkG,kVeryBig);
3401 if(selectInfo) okDisplaced=kTRUE;
3415 if(selectInfo) okFor3Prong=kTRUE;
3422 if(selectInfo) okSoftPi=kTRUE;
3424 if(okDisplaced || okSoftPi || okFor3Prong)
return kTRUE;
3439 Double_t vertex[3]; esdV0->GetXYZ(vertex[0],vertex[1],vertex[2]);
3440 AliAODVertex *vertexV0 =
new AliAODVertex(vertex,esdV0->GetChi2V0(),AliAODVertex::kV0,2);
3443 Double_t xyz[3], pxpypz[3];
3445 esdV0->PxPyPz(pxpypz);
3446 Double_t cv[21];
for(
int i=0; i<21; i++) cv[i]=0;
3447 AliNeutralTrackParam *trackesdV0 =
new AliNeutralTrackParam(xyz,pxpypz,cv,0);
3452 Double_t d0z0[2],covd0z0[3];
3454 trackesdV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3455 Double_t dcaV0ToPrimVertex = TMath::Sqrt(covd0z0[0]);
3457 Double_t dcaV0DaughterToPrimVertex[2];
3458 AliExternalTrackParam *posV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(0);
3459 AliExternalTrackParam *negV0track = (AliExternalTrackParam*)twoTrackArrayV0->UncheckedAt(1);
3460 if( !posV0track || !negV0track) {
3461 if(trackesdV0) {
delete trackesdV0; trackesdV0=NULL;}
3463 delete primVertexAOD;
3466 posV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3469 dcaV0DaughterToPrimVertex[0] = TMath::Sqrt(covd0z0[0]);
3470 negV0track->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
3473 dcaV0DaughterToPrimVertex[1] = TMath::Sqrt(covd0z0[0]);
3474 Double_t dcaV0Daughters = esdV0->GetDcaV0Daughters();
3475 Double_t pmom[3],nmom[3];
3476 esdV0->GetNPxPyPz(nmom[0],nmom[1],nmom[2]);
3477 esdV0->GetPPxPyPz(pmom[0],pmom[1],pmom[2]);
3479 AliAODv0 *aodV0 =
new AliAODv0(vertexV0,dcaV0Daughters,dcaV0ToPrimVertex,pmom,nmom,dcaV0DaughterToPrimVertex);
3480 aodV0->SetOnFlyStatus(esdV0->GetOnFlyStatus());
3483 delete primVertexAOD;
3492 const Double_t *par=extpar->GetParameter();
3493 const Double_t *cov=extpar->GetCovariance();
3494 Double_t alpha=extpar->GetAlpha();
3495 Double_t x=extpar->GetX();
3496 esdt->Set(x,alpha,par,cov);
3503 fMassDzero=TDatabasePDG::Instance()->GetParticle(421)->Mass();
3504 fMassDplus=TDatabasePDG::Instance()->GetParticle(411)->Mass();
3505 fMassDs=TDatabasePDG::Instance()->GetParticle(431)->Mass();
3506 fMassLambdaC=TDatabasePDG::Instance()->GetParticle(4122)->Mass();
3507 fMassDstar=TDatabasePDG::Instance()->GetParticle(413)->Mass();
3508 fMassJpsi=TDatabasePDG::Instance()->GetParticle(443)->Mass();
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
AliAODRecoDecay * fMassCalc4
for 3 prong
Bool_t fUsePidTag
upper momentum limit to apply TPC PID
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
void SetSelectionBit(Int_t i)
selection map
Bool_t CheckCutsConsistency()
void SetupPID(AliVEvent *event)
AliAnalysisFilter * fTrackFilterSoftPi
Track Filter for displaced vertices in PbPb central events (tighter cuts) for 3 prong (D+...
AliVertexerTracks * fVertexerTracks
Float_t GetMassCut(Int_t iPtBin=0) const
AliPIDResponse * fPidResponse
event mixing
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 Int_t IsSelected(TObject *obj, Int_t selectionLevel)
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 FillRecoCand(AliVEvent *event, AliAODRecoDecayHF3Prong *rd3)
Bool_t fUseTPCPIDOnlyIfNoTOF
switch use/not use TOF PID
AliRDHFCutsD0toKpi * fCutsD0toKpi
Track Filter for D* soft pion.
Bool_t fMixEvent
Like-sign triplets.
virtual void DeleteRecoD()
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,.
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Bool_t fUseTPCPID
Kaon PID usage for Ds.
Bool_t fOKInvMassLctoV0
4tracks fullfilling D0 inv mass selection
void SetPrimaryVtxRef(TObject *vtx)
primary vertex
Double_t GetDist23toPrim() const
void SetOwnPrimaryVtx(const AliAODVertex *vtx)
Bool_t fFindVertexForDstar
pointer to list of cuts for output file
Double_t fnSigmaTOFKaonHi
Low cut value on n. of sigmas for K TOF PID.
AliAODRecoDecay * fMassCalc2
to go faster in PbPb
Float_t GetDCACut(Int_t iPtBin=0) const
void FindCandidates(AliVEvent *event, TClonesArray *aodVerticesHFTClArr, TClonesArray *aodD0toKpiTClArr, TClonesArray *aodJPSItoEleTClArr, TClonesArray *aodCharm3ProngTClArr, TClonesArray *aodCharm4ProngTClArr, TClonesArray *aodDstarTClArr, TClonesArray *aodCascadesTClArr, TClonesArray *aodLikeSign2ProngTClArr, TClonesArray *aodLikeSign3ProngTClArr)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
void AddDaughterRefs(AliAODVertex *v, const AliVEvent *event, const TObjArray *trkArray) const
Int_t fUsePIDforLc
Kaon PID usage for 3 prongs.
Bool_t IsEventSelected(AliVEvent *event)
Bool_t fLikeSign
cascades, Lc –> v0+track, D+ –> K0s+Pi, Ds –> K0s+K
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Bool_t SingleTrkCuts(AliESDtrack *trk, Float_t centralityperc, Bool_t &okDisplaced, Bool_t &okSoftPi, Bool_t &ok3prong) const
void SetUsePID(Bool_t flag=kTRUE)
Bool_t fDstar
D0->Kpipipi.
virtual void PrintAll() const
Float_t GetDCACut(Int_t iPtBin=0) const
AliRDHFCutsJpsitoee * fCutsJpsitoee
D0->Kpi cuts.
Bool_t SelectInvMassAndPtJpsiee(Double_t *px, Double_t *py, Double_t *pz)
Bool_t fOKInvMassD0
for 4 prong
void Setd0errProngs(Int_t nprongs, Double_t *d0)
Bool_t fOKInvMassJpsi
pair fullfilling D0 inv mass selection
Bool_t SelectInvMassAndPtDstarD0pi(Double_t *px, Double_t *py, Double_t *pz)
Int_t fV0TypeForCascadeVertex
reconstruct a secondary vertex or assume it's from the primary vertex
Bool_t fJPSItoEle
D0->Kpi.
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Bool_t GetIsUsePID() const
Bool_t fMassCutBeforeVertexing
Select which V0 type we want to use for the cascas.
Int_t fAODMapSize
input from AOD (kTRUE) or ESD (kFALSE)
void FixReferences(AliAODEvent *aod)
void SetSelectionBitForPID(AliRDHFCuts *cuts, AliAODRecoDecayHF *rd, Int_t bit)
AliAODRecoCascadeHF * MakeCascade(TObjArray *twoTrackArray, AliVEvent *event, AliAODVertex *secVert, AliAODRecoDecayHF2Prong *rd2Prong, Double_t dca, Bool_t &okDstar)
void SelectTracksAndCopyVertex(const AliVEvent *event, Int_t trkEntries, TObjArray &seleTrksArray, TObjArray &tracksAtVertex, Int_t &nSeleTrks, UChar_t *seleFlags, Int_t *evtNumber)
void SetSigmaVert(Double_t sigmaVert)
Bool_t fRecoPrimVtxSkippingTrks
if kTRUE use KF vertexer, else AliVertexerTracks
AliAODRecoDecay * fMassCalc3
for 2 prong
TList * fListOfCuts
Dstar->D0pi cuts.
Float_t GetMassCut(Int_t iPtBin=0) const
Double_t fnSigmaTPCProtonHi
Low cut value on n. of sigmas for p TPC PID.
Double_t GetMinPtCandidate() const
Float_t GetMassCut(Int_t iPtBin=0) const
AliRDHFCutsLctoV0 * fCutsLctoV0
Lc->pKpi cuts.
Float_t GetDCACut(Int_t iPtBin=0) const
void MapAODtracks(AliVEvent *aod)
AliAODRecoDecayHF3Prong * Make3Prong(TObjArray *threeTrackArray, AliVEvent *event, AliAODVertex *secVert, Double_t dispersion, const AliAODVertex *vertexp1n1, const AliAODVertex *vertexp2n1, Double_t dcap1n1, Double_t dcap2n1, Double_t dcap1p2, Bool_t useForLc, Bool_t useForDs, Bool_t &ok3Prong)
AliRDHFCutsDStartoKpipi * fCutsDStartoKpipi
D0->Kpipipi cuts.
AliAnalysisFilter * fTrackFilter
max. centrality percentile for using tight cuts
Float_t GetDCACut(Int_t iPtBin=0) const
Bool_t SelectInvMassAndPtD0Kpi(Double_t *px, Double_t *py, Double_t *pz)
Bool_t GetUsePID(Int_t iPtBin=0) const
AliAODv0 * TransformESDv0toAODv0(AliESDv0 *esdv0, TObjArray *twoTrackArrayV0)
Bool_t SelectInvMassAndPt4prong(Double_t *px, Double_t *py, Double_t *pz)
Double_t fnSigmaTPCPionHi
Low cut value on n. of sigmas for pi TPC PID.
Bool_t fD0toKpi
primary vertex
Bool_t fOKInvMassDs
triplet fullfilling D+ inv mass selection
void SetIsFilled(Int_t filled)
void AddRefs(AliAODVertex *v, AliAODRecoDecayHF *rd, const AliVEvent *event, const TObjArray *trkArray) const
AliAODRecoDecayHF2Prong * Make2Prong(TObjArray *twoTrackArray1, AliVEvent *event, AliAODVertex *secVert, Double_t dcap1n1, Bool_t &okD0, Bool_t &okJPSI, Bool_t &okD0fromDstar, Bool_t refill=kFALSE, AliAODRecoDecayHF2Prong *rd=0x0)
Double_t fnSigmaTOFPionLow
High cut value on n. of sigmas for pi TPC PID.