26 #include <Riostream.h>
28 #include <TDatabasePDG.h>
32 #include "AliAnalysisManager.h"
33 #include "AliInputEventHandler.h"
34 #include "AliPIDResponse.h"
37 #include "AliAODTrack.h"
38 #include "AliESDtrack.h"
39 #include "AliESDVertex.h"
40 #include "AliAODVertex.h"
42 #include "AliAODcascade.h"
55 fPIDStrategy(kNSigmaCuts),
56 fCombinedPIDThreshold(0.),
57 fUseLambdaPID(kFALSE),
60 fUseOnTheFlyV0(kFALSE),
63 fProdTrackTPCNclsPIDMin(0),
64 fProdTrackTPCNclsRatioMin(0.0),
65 fProdUseAODFilterBit(kTRUE),
67 fProdRejectTrackWithShared(kFALSE),
68 fProdV0KinkRejection(kTRUE),
69 fProdV0MassTolLambda(0.01),
70 fProdV0MassTolLambdaRough(0.01),
73 fProdV0CosPointingAngleToPrimVtxMin(0.99),
74 fProdV0DcaDaughtersMax(1.5),
75 fProdV0DaughterEtaRange(0.8),
76 fProdV0DaughterPtMin(0.0),
77 fProdV0DaughterTPCClusterMin(70),
78 fProdV0DaughterTPCCrossRatioMin(0.0),
80 fProdRfidMaxV0(100.0),
81 fProdDcaV0ToPrimVertexMin(0.),
82 fProdDcaV0PrToPrimVertexMin(0.),
83 fProdDcaV0PiToPrimVertexMin(0.),
84 fProdV0ProperDecayLengthMax(99999.),
86 fProdV0EtaMin(-9999.),
88 fProdV0RapMin(-9999.),
90 fProdRoughMassTol(0.25),
92 fExcludePionTPC(kFALSE),
93 fExcludeProtonTPC(kFALSE),
94 fExcludeKaonTPC(kFALSE),
95 fExcludenSigmaPionTPC(3.),
96 fExcludenSigmaProtonTPC(3.),
97 fExcludenSigmaKaonTPC(3.),
98 fSigmaElectronTPCMin(-9999.),
99 fSigmaElectronTPCPtDepPar0(-9999.),
100 fSigmaElectronTPCPtDepPar1(-9999.),
101 fSigmaElectronTPCPtDepPar2(0.),
102 fSigmaElectronTPCMax(9999.),
103 fSigmaElectronTOFMin(-9999.),
104 fSigmaElectronTOFMax(9999.),
105 fConversionMassMax(-1.)
110 for(Int_t i=0;i<3;i++){
116 TString varNames[nvars]={
118 "cos(Opening angle) [cos(rad)]",
123 Bool_t isUpperCut[nvars]={
130 Bool_t forOpt[nvars]={
138 Float_t limits[2]={0,999999999.};
144 fPIDStrategy(source.fPIDStrategy),
145 fCombinedPIDThreshold(source.fCombinedPIDThreshold),
146 fUseLambdaPID(source.fUseLambdaPID),
147 fPidObjProton(source.fPidObjProton),
148 fPidObjPion(source.fPidObjPion),
149 fUseOnTheFlyV0(source.fUseOnTheFlyV0),
150 fUseV0Topology(source.fUseV0Topology),
152 fProdTrackTPCNclsPIDMin(source.fProdTrackTPCNclsPIDMin),
153 fProdTrackTPCNclsRatioMin(source.fProdTrackTPCNclsRatioMin),
154 fProdUseAODFilterBit(source.fProdUseAODFilterBit),
155 fProdAODFilterBit(source.fProdAODFilterBit),
156 fProdRejectTrackWithShared(source.fProdRejectTrackWithShared),
157 fProdV0KinkRejection(source.fProdV0KinkRejection),
158 fProdV0MassTolLambda(source.fProdV0MassTolLambda),
159 fProdV0MassTolLambdaRough(source.fProdV0MassTolLambdaRough),
160 fProdV0PtMin(source.fProdV0PtMin),
161 fProdV0PtMax(source.fProdV0PtMax),
162 fProdV0CosPointingAngleToPrimVtxMin(source.fProdV0CosPointingAngleToPrimVtxMin),
163 fProdV0DcaDaughtersMax(source.fProdV0DcaDaughtersMax),
164 fProdV0DaughterEtaRange(source.fProdV0DaughterEtaRange),
165 fProdV0DaughterPtMin(source.fProdV0DaughterPtMin),
166 fProdV0DaughterTPCClusterMin(source.fProdV0DaughterTPCClusterMin),
167 fProdV0DaughterTPCCrossRatioMin(source.fProdV0DaughterTPCCrossRatioMin),
168 fProdRfidMinV0(source.fProdRfidMinV0),
169 fProdRfidMaxV0(source.fProdRfidMaxV0),
170 fProdDcaV0ToPrimVertexMin(source.fProdDcaV0ToPrimVertexMin),
171 fProdDcaV0PrToPrimVertexMin(source.fProdDcaV0PrToPrimVertexMin),
172 fProdDcaV0PiToPrimVertexMin(source.fProdDcaV0PiToPrimVertexMin),
173 fProdV0ProperDecayLengthMax(source.fProdV0ProperDecayLengthMax),
174 fProdMassRejK0s(source.fProdMassRejK0s),
175 fProdV0EtaMin(source.fProdV0EtaMin),
176 fProdV0EtaMax(source.fProdV0EtaMax),
177 fProdV0RapMin(source.fProdV0RapMin),
178 fProdV0RapMax(source.fProdV0RapMax),
179 fProdRoughMassTol(source.fProdRoughMassTol),
180 fProdRoughPtMin(source.fProdRoughPtMin),
181 fExcludePionTPC(source.fExcludePionTPC),
182 fExcludeProtonTPC(source.fExcludeProtonTPC),
183 fExcludeKaonTPC(source.fExcludeKaonTPC),
184 fExcludenSigmaPionTPC(source.fExcludenSigmaPionTPC),
185 fExcludenSigmaProtonTPC(source.fExcludenSigmaProtonTPC),
186 fExcludenSigmaKaonTPC(source.fExcludenSigmaKaonTPC),
187 fSigmaElectronTPCMin(source.fSigmaElectronTPCMin),
188 fSigmaElectronTPCPtDepPar0(source.fSigmaElectronTPCPtDepPar0),
189 fSigmaElectronTPCPtDepPar1(source.fSigmaElectronTPCPtDepPar1),
190 fSigmaElectronTPCPtDepPar2(source.fSigmaElectronTPCPtDepPar2),
191 fSigmaElectronTPCMax(source.fSigmaElectronTPCMax),
192 fSigmaElectronTOFMin(source.fSigmaElectronTOFMin),
193 fSigmaElectronTOFMax(source.fSigmaElectronTOFMax),
194 fConversionMassMax(source.fConversionMassMax)
199 for(Int_t i=0;i<3;i++){
210 if (
this != &source) {
266 for(Int_t i=0;i<3;i++){
287 if (pdgdaughters[0]==-9999)
return;
291 AliError(
"No AliAODRecoCascadeHF object found\n");
296 AliError(
"Cut object seems to have the wrong number of variables\n");
307 UInt_t pdgdg[2]={11,3122};
308 vars[iter]= dd->InvMass(2,pdgdg);
312 Double_t v0px = dd->PxProng(1);
313 Double_t v0py = dd->PyProng(1);
314 Double_t v0pz = dd->PzProng(1);
315 Double_t epx = dd->PxProng(0);
316 Double_t epy = dd->PyProng(0);
317 Double_t epz = dd->PzProng(0);
318 vars[iter]= (v0px*epx+v0py*epy+v0pz*epz)/sqrt(v0px*v0px+v0py*v0py+v0pz*v0pz)/sqrt(epx*epx+epy*epy+epz*epz);
331 AliFatal(
"Cut matrix not inizialized. Exit...");
337 AliDebug(2,
"AliAODRecoCascadeHF null");
341 Double_t ptD=d->Pt();
350 Int_t returnvalueCuts=1;
356 Int_t ptbin=
PtBin(pt);
362 Double_t mlamPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
363 UInt_t pdgdg[2]={11,3122};
364 Double_t InvMassEleLambda = d->InvMass(2,pdgdg);
366 Double_t v0px = d->PxProng(1);
367 Double_t v0py = d->PyProng(1);
368 Double_t v0pz = d->PzProng(1);
369 Double_t epx = d->PxProng(0);
370 Double_t epy = d->PyProng(0);
371 Double_t epz = d->PzProng(0);
372 Double_t cosoa = (v0px*epx+v0py*epy+v0pz*epz)/sqrt(v0px*v0px+v0py*v0py+v0pz*v0pz)/sqrt(epx*epx+epy*epy+epz*epz);
374 Double_t dphis_e_pr, detas_e_pr, dphis_e_pi, detas_e_pi;
380 AliAODTrack *trke = (AliAODTrack*)d->GetDaughter(0);
381 AliAODv0 *v0 = (AliAODv0*)d->GetDaughter(1);
383 Bool_t isparticle = kTRUE;
385 AliAODTrack *cprtrk = 0;
386 AliAODTrack *cpitrk = 0;
388 cprtrk = (AliAODTrack*)v0->GetDaughter(0);
389 cpitrk = (AliAODTrack*)v0->GetDaughter(1);
391 cprtrk = (AliAODTrack*)v0->GetDaughter(1);
392 cpitrk = (AliAODTrack*)v0->GetDaughter(0);
416 if(!okcand)
return 0;
420 Int_t returnvaluePID=1;
427 Int_t returnvalue = 0;
428 if(returnvalueCuts==1 && returnvaluePID==1) returnvalue=1;
448 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
449 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
450 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
455 if(isElectron<1) returnvalue = 0;
466 if(!
fUsePID || !obj) {
return 1;}
492 if(trk->Pt()<ptmin || trk->Pt()>
ptmax)
return kFALSE;
493 if(trk->Eta()<etamin || trk->Eta()>
etamax)
return kFALSE;
495 Double_t pos[3]; primVert->GetXYZ(pos);
496 Double_t cov[6]; primVert->GetCovarianceMatrix(cov);
497 const AliESDVertex vESD(pos,cov,100.,100);
503 if(trk->GetTPCNclsF()>0){
504 Float_t tpcratio = (Float_t)trk->GetTPCncls()/(Float_t)trk->GetTPCNclsF();
509 const TBits sharedMap = trk->GetTPCSharedMap();
510 if((sharedMap.CountBits()) >= 1){
518 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
519 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
520 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
558 if(trk->Pt()<ptmin || trk->Pt()>
ptmax)
return kFALSE;
559 if(trk->Eta()<etamin || trk->Eta()>
etamax)
return kFALSE;
561 Double_t pos[3]; primVert->GetXYZ(pos);
562 Double_t cov[6]; primVert->GetCovarianceMatrix(cov);
563 const AliESDVertex vESD(pos,cov,100.,100);
569 if(trk->GetTPCNclsF()>0){
570 Float_t tpcratio = (Float_t)trk->GetTPCncls()/(Float_t)trk->GetTPCNclsF();
575 const TBits sharedMap = trk->GetTPCSharedMap();
576 if((sharedMap.CountBits()) >= 1){
612 if(isElectron<1)
return kFALSE;
691 Double_t pte = trk->Pt();
694 if(nSigmaTPCele<nsigmamin)
return kFALSE;
716 Bool_t onFlyV0 = v0->GetOnFlyStatus();
719 if(!v0)
return kFALSE;
720 if(!(v0->GetSecondaryVtx()))
return kFALSE;
722 AliAODTrack *cptrack = (AliAODTrack*)(v0->GetDaughter(0));
723 AliAODTrack *cntrack = (AliAODTrack*)(v0->GetDaughter(1));
724 if(!cptrack || !cntrack)
return kFALSE;
731 if ( cptrack->Charge() == cntrack->Charge() )
return kFALSE;
732 if(!(cptrack->GetStatus() & AliESDtrack::kTPCrefit) ||
733 !(cntrack->GetStatus() & AliESDtrack::kTPCrefit))
return kFALSE;
734 AliAODVertex *maybeKinkPos = (AliAODVertex*)cptrack->GetProdVertex();
735 AliAODVertex *maybeKinkNeg = (AliAODVertex*)cntrack->GetProdVertex();
736 if (
fProdV0KinkRejection && (maybeKinkPos->GetType()==AliAODVertex::kKink || maybeKinkNeg->GetType()==AliAODVertex::kKink))
746 Double_t massLambda = v0->MassLambda();
747 Double_t massAntiLambda = v0->MassAntiLambda();
748 Double_t mlamPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
749 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
752 Double_t massK0s = v0->MassK0Short();
756 Bool_t isparticle = kTRUE;
761 Double_t posVtx[3] = {0.,0.,0.};
762 primVert->GetXYZ(posVtx);
763 Double_t cospav0 = v0->CosPointingAngle(posVtx);
772 Double_t lDcaV0ToPrimVertex = v0->DcaV0ToPrimVertex();
773 Double_t lDcaPosToPrimVertex = v0->DcaPosToPrimVertex();
774 Double_t lDcaNegToPrimVertex = v0->DcaNegToPrimVertex();
784 lPosV0[0] = v0->DecayVertexV0X();
785 lPosV0[1] = v0->DecayVertexV0Y();
786 lPosV0[2] = v0->DecayVertexV0Z();
787 Double_t decayvertV0 = TMath::Sqrt(lPosV0[0]*lPosV0[0]+lPosV0[1]*lPosV0[1]);
789 if(decayvertV0<fProdRfidMinV0 || decayvertV0>
fProdRfidMaxV0)
return kFALSE;
791 Double_t ptotlam = TMath::Sqrt(pow(v0->Px(),2)+pow(v0->Py(),2)+pow(v0->Pz(),2));
792 Double_t properdl = v0->DecayLengthV0(posVtx)*mlamPDG/ptotlam;
799 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
800 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
801 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
805 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
806 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
807 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
823 if(fabs(nSigmaTPCpr)>nsigmatpc_proton) isProton = 0;
824 if(fabs(nSigmaTPCpi)>nsigmatpc_pion) isPion = 0;
825 if(nsigmatof_proton>0.01 && nsigmatof_proton<999.){
826 if(fabs(nSigmaTOFpr)>nsigmatof_proton) isProton = 0;
828 if(nsigmatof_pion>0.01 && nsigmatof_pion<999.){
829 if(fabs(nSigmaTOFpi)>nsigmatof_pion) isPion = 0;
836 if(fabs(nSigmaTPCpr)>nsigmatpc_proton) isProton = 0;
837 if(fabs(nSigmaTPCpi)>nsigmatpc_pion) isPion = 0;
838 if(nsigmatof_proton>0.01 && nsigmatof_proton<999.){
839 if(fabs(nSigmaTOFpr)>nsigmatof_proton) isProton = 0;
841 if(nsigmatof_pion>0.01 && nsigmatof_pion<999.){
842 if(fabs(nSigmaTOFpi)>nsigmatof_pion) isPion = 0;
845 if(isProton<1)
return kFALSE;
846 if(isPion<1)
return kFALSE;
849 Double_t RapLambda = v0->RapLambda();
850 if(RapLambda<fProdV0RapMin || RapLambda>
fProdV0RapMax)
return kFALSE;
852 Double_t EtaLambda = v0->PseudoRapV0();
853 if(EtaLambda<fProdV0EtaMin || EtaLambda>
fProdV0EtaMax)
return kFALSE;
856 const TBits sharedMap1 = cptrack->GetTPCSharedMap();
857 const TBits sharedMap2 = cntrack->GetTPCSharedMap();
858 if((sharedMap1.CountBits() >= 1) ||
859 (sharedMap2.CountBits() >= 1))
866 Double_t dphiprlam = 0.;
868 TVector3 v3v0pr(v0->MomPosX(),v0->MomPosY(),v0->MomPosZ());
869 TVector3 v3lam(v0->Px(),v0->Py(),v0->Pz());
870 dphiprlam = v3v0pr.DeltaPhi(v3lam);
872 TVector3 v3v0pr(v0->MomNegX(),v0->MomNegY(),v0->MomNegZ());
873 TVector3 v3lam(v0->Px(),v0->Py(),v0->Pz());
874 dphiprlam = -1.*v3v0pr.DeltaPhi(v3lam);
877 if(dphiprlam>0)
return kFALSE;
879 if(dphiprlam<0)
return kFALSE;
893 if(!v0)
return kFALSE;
894 if(!part)
return kFALSE;
903 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
904 Double_t massL = v0->MassLambda();
906 massL = v0->MassAntiLambda();
916 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
917 Double_t massL = v0->M();
926 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
927 Double_t massL = v0->MassLambda();
929 massL = v0->MassAntiLambda();
931 Bool_t issideband = kFALSE;
940 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
941 Double_t massL = v0->M();
942 Bool_t issideband = kFALSE;
956 Bool_t isconv = kFALSE;
958 Int_t trkid = etrk->GetID();
960 Double_t px1 = etrk->Px();
961 Double_t py1 = etrk->Py();
962 Double_t pz1 = etrk->Pz();
963 Double_t E1 = sqrt(px1*px1+py1*py1+pz1*pz1+0.000511*0.000511);
965 for(Int_t it=0;it<ntrk;it++){
966 AliAODTrack *trk2 = (AliAODTrack*) evt->GetTrack(it);
968 Int_t trkid2 = trk2->GetID();
969 if(abs(trkid)==abs(trkid2))
continue;
970 if(etrk->Charge()*trk2->Charge()>0)
continue;
977 Double_t nSigmaTPCele = 9999.;
979 if(-trkid2-1>=19000)
continue;
980 if(-trkid2-1<0)
continue;
981 Int_t index = id2index[-trkid2-1];
982 AliAODTrack *partpid = (AliAODTrack*)evt->GetTrack(index);
987 if(fabs(nSigmaTPCele)>5.)
continue;
989 Double_t px2 = trk2->Px();
990 Double_t py2 = trk2->Py();
991 Double_t pz2 = trk2->Pz();
992 Double_t E2 = sqrt(px2*px2+py2*py2+pz2*pz2+0.000511*0.000511);
994 Double_t
mass = sqrt(pow(E1+E2,2)-pow(px1+px2,2)-pow(py1+py2,2)-pow(pz1+pz2,2));
996 if(mass<minmass) minmass =
mass;
1012 Bool_t isconv = kFALSE;
1015 Int_t trkid = etrk->GetID();
1016 Double_t px1 = etrk->Px();
1017 Double_t py1 = etrk->Py();
1018 Double_t pz1 = etrk->Pz();
1019 Double_t E1 = sqrt(px1*px1+py1*py1+pz1*pz1+0.000511*0.000511);
1021 for(Int_t it=0;it<ntrk;it++){
1022 AliAODTrack *trk2 = (AliAODTrack*) evt->GetTrack(it);
1024 Int_t trkid2 = trk2->GetID();
1025 if(abs(trkid)==abs(trkid2))
continue;
1026 if(etrk->Charge()*trk2->Charge()<0)
continue;
1033 Double_t nSigmaTPCele = 9999.;
1035 if(-trkid2-1>=19000)
continue;
1036 if(-trkid2-1<0)
continue;
1037 Int_t index = id2index[-trkid2-1];
1038 AliAODTrack *partpid = (AliAODTrack*)evt->GetTrack(index);
1043 if(fabs(nSigmaTPCele)>5.)
continue;
1045 Double_t px2 = trk2->Px();
1046 Double_t py2 = trk2->Py();
1047 Double_t pz2 = trk2->Pz();
1048 Double_t E2 = sqrt(px2*px2+py2*py2+pz2*pz2+0.000511*0.000511);
1050 Double_t
mass = sqrt(pow(E1+E2,2)-pow(px1+px2,2)-pow(py1+py2,2)-pow(pz1+pz2,2));
1051 if(mass<minmass) minmass =
mass;
1071 AliExternalTrackParam etp;
1072 etp.CopyFromVTrack(track);
1075 Double_t xyz[3]={-9999.,-9999.,-9999.};
1078 const Float_t RSquaredWanted(125.*125.);
1082 for (Float_t x = 58.;x<247.;x+=1.){
1092 if(!etp.PropagateTo(x,(Float_t)bfield))
break;
1097 Float_t shiftedRadiusSquared = (xyz[0]-priVtx[0])*(xyz[0]-priVtx[0])
1098 + (xyz[1]-priVtx[1])*(xyz[1]-priVtx[1]);
1101 if(shiftedRadiusSquared > RSquaredWanted){
1105 while (shiftedRadiusSquared>RSquaredWanted){
1108 if(!etp.PropagateTo(x,bfield)){
1117 shiftedRadiusSquared = (xyz[0]-priVtx[0])*(xyz[0]-priVtx[0])
1118 + (xyz[1]-priVtx[1])*(xyz[1]-priVtx[1]);
1122 XSftR125[0]=xyz[0]-priVtx[0];
1123 XSftR125[1]=xyz[1]-priVtx[1];
1124 XSftR125[2]=xyz[2]-priVtx[2];
1145 AliExternalTrackParam etp;
1146 etp.CopyFromVTrack(track);
1149 Double_t xyz[3]={-9999.,-9999.,-9999.};
1152 const Float_t RSquaredWanted(R*R);
1156 for (Float_t x = 2.;x<247.;x+=1.){
1166 if(!etp.PropagateTo(x,(Float_t)bfield))
break;
1171 Float_t shiftedRadiusSquared = (xyz[0]-priVtx[0])*(xyz[0]-priVtx[0])
1172 + (xyz[1]-priVtx[1])*(xyz[1]-priVtx[1]);
1175 if(shiftedRadiusSquared > RSquaredWanted){
1179 while (shiftedRadiusSquared>RSquaredWanted){
1182 if(!etp.PropagateTo(x,bfield)){
1191 shiftedRadiusSquared = (xyz[0]-priVtx[0])*(xyz[0]-priVtx[0])
1192 + (xyz[1]-priVtx[1])*(xyz[1]-priVtx[1]);
1196 XSftR[0]=xyz[0]-priVtx[0];
1197 XSftR[1]=xyz[1]-priVtx[1];
1198 XSftR[2]=xyz[2]-priVtx[2];
1215 Double_t ThetaS1 = TMath::Pi()/2. - TMath::ATan(postrack1[2]/125.);
1216 Double_t ThetaS2 = TMath::Pi()/2. - TMath::ATan(postrack2[2]/125.);
1217 Double_t EtaS1 = -TMath::Log( TMath::Tan(ThetaS1/2.) );
1218 Double_t EtaS2 = -TMath::Log( TMath::Tan(ThetaS2/2.) );
1231 Double_t distSft= TMath::Sqrt(TMath::Power(postrack1[0] - postrack2[0],2)
1232 +TMath::Power(postrack1[1] - postrack2[1],2));
1233 return 2.0 * TMath::ATan(distSft/2./(125.));
1238 AliAODTrack *trackn, Double_t bfield, Double_t priVtx[3], Double_t &dPhiS_ep, Double_t &dEtaS_ep,
1239 Double_t &dPhiS_en, Double_t &dEtaS_en)
1244 Double_t XSftR125_e[3];
1246 Double_t XSftR125_p[3];
1248 Double_t XSftR125_n[3];
1250 dPhiS_ep =
dPhiSR125(XSftR125_e,XSftR125_p);
1251 dEtaS_ep =
dEtaSR125(XSftR125_e,XSftR125_p);
1252 dPhiS_en =
dPhiSR125(XSftR125_e,XSftR125_n);
1253 dEtaS_en =
dEtaSR125(XSftR125_e,XSftR125_n);
1264 AliFatal(
"Cut matrix not inizialized. Exit...");
1268 Double_t ptD=sqrt(pow(vtrk->Px()+vv0->Px(),2)+pow(vtrk->Px()+vv0->Py(),2));
1273 Int_t ptbin=
PtBin(pt);
1283 Int_t returnvalueCuts=1;
1288 Bool_t okcand=kTRUE;
1290 Double_t mlcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
1291 Double_t melePDG = TDatabasePDG::Instance()->GetParticle(11)->Mass();
1292 Double_t mlamPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
1293 Double_t v0px = vv0->Px();
1294 Double_t v0py = vv0->Py();
1295 Double_t v0pz = vv0->Pz();
1296 Double_t epx = vtrk->Px();
1297 Double_t epy = vtrk->Py();
1298 Double_t epz = vtrk->Pz();
1299 Double_t cosoa = (v0px*epx+v0py*epy+v0pz*epz)/sqrt(v0px*v0px+v0py*v0py+v0pz*v0pz)/sqrt(epx*epx+epy*epy+epz*epz);
1301 TLorentzVector vele, vlam,vlc;
1302 vele.SetXYZM(epx,epy,epz,melePDG);
1303 vlam.SetXYZM(v0px,v0py,v0pz,mlamPDG);
1306 Double_t dphis_e_pr = 9999.;
1307 Double_t detas_e_pr = 9999.;
1308 Double_t dphis_e_pi = 9999.;
1309 Double_t detas_e_pi = 9999.;
1311 Double_t xyzR125_e[3], xyzR125_pr[3], xyzR125_pi[3];
1312 xyzR125_e[0] = cutvars[0];
1313 xyzR125_e[1] = cutvars[1];
1314 xyzR125_e[2] = cutvars[2];
1315 xyzR125_pr[0] = cutvars[3];
1316 xyzR125_pr[1] = cutvars[4];
1317 xyzR125_pr[2] = cutvars[5];
1318 xyzR125_pi[0] = cutvars[6];
1319 xyzR125_pi[1] = cutvars[7];
1320 xyzR125_pi[2] = cutvars[8];
1321 dphis_e_pr =
dPhiSR125(xyzR125_e,xyzR125_pr);
1322 detas_e_pr =
dPhiSR125(xyzR125_e,xyzR125_pr);
1323 dphis_e_pi =
dPhiSR125(xyzR125_e,xyzR125_pi);
1324 detas_e_pi =
dPhiSR125(xyzR125_e,xyzR125_pi);
1344 if(!okcand)
return 0;
1345 returnvalueCuts = 1;
1348 Int_t returnvaluePID=1;
1354 Int_t returnvalue = 0;
1355 if(returnvalueCuts==1 && returnvaluePID==1) returnvalue=1;
1366 if(
fBzkG<0.) pol = -1.;
1370 Double_t
mass = 9999.;
1372 Double_t Rcurv1 = trk1->Pt()/0.3/(0.1*fabs(
fBzkG))*100.;
1373 Double_t charge1 = (Double_t) trk1->Charge();
1374 Double_t ux1 = trk1->Px()/trk1->Pt();
1375 Double_t uy1 = trk1->Py()/trk1->Pt();
1377 Double_t x1 = xyz[0];
1378 Double_t y1 = xyz[1];
1379 Double_t xc1 = x1 + charge1*Rcurv1*(uy1)*pol;
1380 Double_t yc1 = y1 + charge1*Rcurv1*(-1.*ux1)*pol;
1382 Double_t Rcurv2 = trk2->Pt()/0.3/(0.1*fabs(
fBzkG))*100.;
1383 Double_t charge2 = (Double_t) trk2->Charge();
1384 Double_t ux2 = trk2->Px()/trk2->Pt();
1385 Double_t uy2 = trk2->Py()/trk2->Pt();
1387 Double_t x2 = xyz[0];
1388 Double_t y2 = xyz[1];
1389 Double_t xc2 = x2 + charge2*Rcurv2*(uy2)*pol;
1390 Double_t yc2 = y2 + charge2*Rcurv2*(-1.*ux2)*pol;
1392 if(fabs(sqrt((xc2-xc1)*(xc2-xc1)+(yc2-yc1)*(yc2-yc1))-(Rcurv1+Rcurv2))>5.)
return 9999.;
1395 Double_t dxc = xc2-xc1;
1396 Double_t dyc = yc2-yc1;
1397 Double_t nux = dyc/sqrt(dxc*dxc+dyc*dyc);
1398 Double_t nuy = -1.*dxc/sqrt(dxc*dxc+dyc*dyc);
1399 Double_t vertx1 = xc1 + (xc2-xc1)*Rcurv1/sqrt(dxc*dxc+dyc*dyc);
1400 Double_t verty1 = yc1 + (yc2-yc1)*Rcurv1/sqrt(dxc*dxc+dyc*dyc);
1401 Double_t vertx2 = xc2 + (xc1-xc2)*Rcurv2/sqrt(dxc*dxc+dyc*dyc);
1402 Double_t verty2 = yc2 + (yc1-yc2)*Rcurv2/sqrt(dxc*dxc+dyc*dyc);
1403 Double_t vertxmid = (vertx1+vertx2)/2.;
1404 Double_t vertymid = (verty1+verty2)/2.;
1406 if(vertxmid*nux+vertymid*nuy<0.)
return 9999.;
1408 Double_t px1_new = trk1->Pt()*nux;
1409 Double_t py1_new = trk1->Pt()*nuy;
1410 Double_t pz1_new = trk1->Pz();
1411 Double_t E1_new = sqrt(px1_new*px1_new+py1_new*py1_new+pz1_new*pz1_new+0.000511);
1412 Double_t px2_new = trk2->Pt()*nux;
1413 Double_t py2_new = trk2->Pt()*nuy;
1414 Double_t pz2_new = trk2->Pz();
1415 Double_t E2_new = sqrt(px2_new*px2_new+py2_new*py2_new+pz2_new*pz2_new+0.000511);
1418 mass = sqrt(pow(E1_new+E2_new,2)-pow(px1_new+px2_new,2)-pow(py1_new+py2_new,2)-pow(pz1_new+pz2_new,2));
1455 Double_t phiv = v0->Phi();
1456 Double_t phie = trk->Phi();
1457 Double_t dphi = phiv - phie;
1458 if(dphi<-M_PI) dphi += 2 *M_PI;
1459 if(dphi> M_PI) dphi -= 2 *M_PI;
1468 Double_t etav = v0->Eta();
1469 Double_t etae = trk->Eta();
1470 Double_t deta = etav - etae;
Bool_t SingleV0Cuts(AliAODv0 *v0, AliAODVertex *vert)
Double_t fProdV0RapMax
Minimum rapidity of cascade.
Double_t fPrimVert[3]
B field.
Double_t fProdV0DaughterTPCCrossRatioMin
V0 daughter Minimum TPC cluster pT used before object creation.
Bool_t IsSelectedCustomizedeID(AliAODTrack *trk)
Double_t fProdV0ProperDecayLengthMax
Min Dca between v0-pion and PV.
Double_t fSigmaElectronTPCMin
nSigma to exclude for Kaon band
AliAODPidHF * fPidObjProton
Use PID for proton from Lc.
Double_t fProdRoughMassTol
Maximum rapidity of cascade.
AliRDHFCutsLctoeleLambdafromAODtracks & operator=(const AliRDHFCutsLctoeleLambdafromAODtracks &source)
Bool_t TagConversions(AliAODTrack *etrk, Int_t *id2index, AliAODEvent *evt, Int_t ntrk, Double_t &minmass)
Bool_t IsSelectedeID(AliAODTrack *trk)
Double_t GetSigma(Int_t idet) const
Bool_t IsPeakRegion(AliAODv0 *c)
Double_t fProdV0CosPointingAngleToPrimVtxMin
Max Lambda pT used before object creation.
Double_t fProdV0PtMin
Lambda mass selection used before object creation.
Int_t fUseV0Topology
Flag to check if we use on-the-fly v0.
Double_t fProdV0PtMax
Minimum Lambda pT used before object creation.
void SetSftPosR125(AliAODTrack *track, Double_t bfield, Double_t priVtx[3], Double_t *XSftR125)
Double_t fExcludenSigmaKaonTPC
nSigma to exclude for proton band
void SetNVars(Int_t nVars)
Bool_t fProdRejectTrackWithShared
AOD filter Bit used before object creation.
Bool_t SingleTrkCuts(AliAODTrack *trk, AliAODTrack *trkpid, AliAODVertex *vert)
AliRDHFCuts & operator=(const AliRDHFCuts &source)
Bool_t fExcludePionTPC
pT cut for Lc used before object creation
Double_t fProdTrackTPCNclsRatioMin
Min. Number of TPC PID cluster.
Double_t fSigmaElectronTPCPtDepPar1
nSigma electron lower limit (par0)
Double_t fSigmaElectronTPCPtDepPar0
nSigma to exclude for Kaon band
Int_t IsSelectedCombinedPID(AliAODRecoDecayHF *obj)
Double_t fExcludenSigmaProtonTPC
nSigma to exclude for pion band
Double_t fProdDcaV0PrToPrimVertexMin
Min Dca between v0 and PV.
Int_t fProdAODFilterBit
Flag for AOD filter Bit used before object creation.
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d, Float_t *vars, Int_t nvars, Int_t *pdgdaughters)
Bool_t fProdV0KinkRejection
Flag to Reject tracks with shared clusters.
Double_t fProdV0RapMin
Maximum eta of cascade.
EPIDStrategy fPIDStrategy
Double_t fProdV0DaughterEtaRange
Max DCA between V0 daughters used before object creation.
Bool_t fUseLambdaPID
Threshold used in IsSelectedCombinedPID.
Double_t fMaxPtCand
minimum pt of the candidate
Double_t fSigmaElectronTOFMin
nSigma to exclude for Kaon band
AliESDtrackCuts * fTrackCuts
quality cuts on the daughter tracks
Bool_t IsSelectedCombinedeID(AliAODTrack *trk)
Bool_t fExcludeKaonTPC
Flag wheter to exlude proton band.
Double_t fProdRoughPtMin
Mass cut for Lc used before object creation.
Double_t fProdDcaV0PiToPrimVertexMin
Min Dca between v0-proton and PV.
Double_t fSigmaElectronTOFMax
nSigma to exclude for Kaon band
Int_t fProdTrackTPCNclsPIDMin
Primary vertex.
AliAODTrack * GetBachelor() const
Double_t fBzkG
0: Cowboy+Sailor 1: Cowboy 2:Sailor
Bool_t TagConversionsSameSign(AliAODTrack *etrk, Int_t *id2index, AliAODEvent *evt, Int_t ntrk, Double_t &minmass)
Bool_t fUseOnTheFlyV0
PID object for proton from Lc.
Double_t fSigmaElectronTPCPtDepPar2
nSigma electron lower limit (par1)
Double_t DeltaEta(AliAODv0 *v0, AliAODTrack *trk)
void SetSftPosR(AliAODTrack *track, Double_t bfield, Double_t R, Double_t priVtx[3], Double_t *XSftR)
Bool_t SelectWithRoughCuts(AliAODv0 *v0, AliAODTrack *trk1)
Double_t fProdRfidMaxV0
Minimum Decay vertex of V0.
Int_t MakeRawPid(AliAODTrack *track, Int_t specie)
AliPIDResponse * GetPidResponse() const
Double_t fProdV0MassTolLambda
Flag to Reject v0 kinks.
Float_t * fCutsRD
fnVars*fnPtBins
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *obj)
Double_t fProdV0EtaMin
Rejection range of Omega mass from PDG value.
void SetVarsForOpt(Int_t nVars, Bool_t *forOpt)
Double_t fProdV0DaughterTPCClusterMin
V0 Daughter pT min used before object creation.
Double_t fExcludenSigmaPionTPC
Flag wheter to exlude proton band.
void SetVarNames(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Bool_t fExcludeProtonTPC
Flag wheter to exlude pion band.
Bool_t * fVarsForOpt
number of cut vars to be optimized for candidates
Bool_t SingleTrkCutsNoPID(AliAODTrack *trk, AliAODTrack *trkpid, AliAODVertex *vert)
Double_t fConversionMassMax
nSigma to exclude for Kaon band
Double_t fProdV0MassTolLambdaRough
Lambda mass selection used before object creation.
Double_t fProdDcaV0ToPrimVertexMin
Max Decay vertex of V0.
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
Bool_t IsSelectedCustomizedPtDepeID(AliAODTrack *trk, AliAODTrack *trkpid)
Bool_t fProdUseAODFilterBit
Min. Number of TPC PID cluster.
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
Double_t fSigmaElectronTPCMax
nSigma electron lower limit (par2)
virtual ~AliRDHFCutsLctoeleLambdafromAODtracks()
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Double_t DeltaPhi(AliAODv0 *v0, AliAODTrack *trk)
Double_t fCombinedPIDThreshold
PID strategy.
Double_t fProdMassRejK0s
mL/p of cascade
Double_t fProdRfidMinV0
V0 daughter Minimum TPC cluster pT used before object creation.
Double_t fProdV0DcaDaughtersMax
V0 pointing angle used before object creation.
Double_t fProdV0EtaMax
Minimum eta of cascade.
Double_t dPhiSR125(Double_t *postrack1, Double_t *postrack2)
AliRDHFCutsLctoeleLambdafromAODtracks(const char *name="CutsLctoeleLambda")
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
Int_t PtBin(Double_t pt) const
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
Double_t dEtaSR125(Double_t *postrack1, Double_t *postrack2)
Double_t fMinPtCand
outcome of PID selection
AliAODPidHF * fPidObjPion
PID object for proton from Lc.
Double_t fProdV0DaughterPtMin
V0Daughter eta range used before object creation.
Bool_t IsDaughterSelected(AliAODTrack *track, const AliESDVertex *primary, AliESDtrackCuts *cuts, const AliAODEvent *aod=0x0) const
Double_t GetdPhiSdEtaSR125(AliAODTrack *tracke, AliAODTrack *trackp, AliAODTrack *trackn, Double_t bfield, Double_t priVtx[3], Double_t &dPhiS_ep, Double_t &dEtaS_ep, Double_t &dPhiS_en, Double_t &dEtaS_en)
Bool_t IsSideBand(AliAODv0 *c)
Double_t CalculatePhotonMass(AliAODTrack *track1, AliAODTrack *track2)
void SetPidResponse(AliPIDResponse *pidResp)