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 fProdITSSharedFractionMax(-9999),
69 fProdITSChi2OverNclsMax(-9999),
70 fProdV0KinkRejection(kTRUE),
71 fProdV0MassTolLambda(0.01),
72 fProdV0MassTolLambdaRough(0.01),
75 fProdV0CosPointingAngleToPrimVtxMin(0.99),
76 fProdV0DcaDaughtersMax(1.5),
77 fProdV0DaughterEtaRange(0.8),
78 fProdV0DaughterPtMin(0.0),
79 fProdV0DaughterTPCClusterMin(70),
80 fProdV0DaughterTPCCrossRatioMin(0.0),
82 fProdRfidMaxV0(100.0),
83 fProdDcaV0ToPrimVertexMin(0.),
84 fProdDcaV0ToPrimVertexMax(9999.),
85 fProdDcaV0PrToPrimVertexMin(0.),
86 fProdDcaV0PiToPrimVertexMin(0.),
87 fProdV0ProperDecayLengthMax(99999.),
89 fProdV0EtaMin(-9999.),
91 fProdV0RapMin(-9999.),
93 fProdRoughMassTol(0.25),
95 fExcludePionTPC(kFALSE),
96 fExcludeProtonTPC(kFALSE),
97 fExcludeKaonTPC(kFALSE),
98 fExcludenSigmaPionTPC(3.),
99 fExcludenSigmaProtonTPC(3.),
100 fExcludenSigmaKaonTPC(3.),
101 fSigmaElectronTPCMin(-9999.),
102 fSigmaElectronTPCPtDepPar0(-9999.),
103 fSigmaElectronTPCPtDepPar1(-9999.),
104 fSigmaElectronTPCPtDepPar2(0.),
105 fSigmaElectronTPCMax(9999.),
106 fSigmaElectronTOFMin(-9999.),
107 fSigmaElectronTOFMax(9999.),
108 fSigmaElectronITSMin(-9999.),
109 fSigmaElectronITSMax(9999.),
110 fConversionMassMax(-1.),
111 fConversionUseStrongerCut(kFALSE),
112 fEleLambdaMassMax(2.3)
117 for(
Int_t i=0;i<3;i++){
125 "cos(Opening angle) [cos(rad)]",
130 Bool_t isUpperCut[nvars]={
145 Float_t limits[2]={0,999999999.};
151 fPIDStrategy(source.fPIDStrategy),
152 fCombinedPIDThreshold(source.fCombinedPIDThreshold),
153 fUseLambdaPID(source.fUseLambdaPID),
154 fPidObjProton(source.fPidObjProton),
155 fPidObjPion(source.fPidObjPion),
156 fUseOnTheFlyV0(source.fUseOnTheFlyV0),
157 fUseV0Topology(source.fUseV0Topology),
159 fProdTrackTPCNclsPIDMin(source.fProdTrackTPCNclsPIDMin),
160 fProdTrackTPCNclsRatioMin(source.fProdTrackTPCNclsRatioMin),
161 fProdUseAODFilterBit(source.fProdUseAODFilterBit),
162 fProdAODFilterBit(source.fProdAODFilterBit),
163 fProdRejectTrackWithShared(source.fProdRejectTrackWithShared),
164 fProdITSSharedFractionMax(source.fProdITSSharedFractionMax),
165 fProdITSChi2OverNclsMax(source.fProdITSChi2OverNclsMax),
166 fProdV0KinkRejection(source.fProdV0KinkRejection),
167 fProdV0MassTolLambda(source.fProdV0MassTolLambda),
168 fProdV0MassTolLambdaRough(source.fProdV0MassTolLambdaRough),
169 fProdV0PtMin(source.fProdV0PtMin),
170 fProdV0PtMax(source.fProdV0PtMax),
171 fProdV0CosPointingAngleToPrimVtxMin(source.fProdV0CosPointingAngleToPrimVtxMin),
172 fProdV0DcaDaughtersMax(source.fProdV0DcaDaughtersMax),
173 fProdV0DaughterEtaRange(source.fProdV0DaughterEtaRange),
174 fProdV0DaughterPtMin(source.fProdV0DaughterPtMin),
175 fProdV0DaughterTPCClusterMin(source.fProdV0DaughterTPCClusterMin),
176 fProdV0DaughterTPCCrossRatioMin(source.fProdV0DaughterTPCCrossRatioMin),
177 fProdRfidMinV0(source.fProdRfidMinV0),
178 fProdRfidMaxV0(source.fProdRfidMaxV0),
179 fProdDcaV0ToPrimVertexMin(source.fProdDcaV0ToPrimVertexMin),
180 fProdDcaV0ToPrimVertexMax(source.fProdDcaV0ToPrimVertexMax),
181 fProdDcaV0PrToPrimVertexMin(source.fProdDcaV0PrToPrimVertexMin),
182 fProdDcaV0PiToPrimVertexMin(source.fProdDcaV0PiToPrimVertexMin),
183 fProdV0ProperDecayLengthMax(source.fProdV0ProperDecayLengthMax),
184 fProdMassRejK0s(source.fProdMassRejK0s),
185 fProdV0EtaMin(source.fProdV0EtaMin),
186 fProdV0EtaMax(source.fProdV0EtaMax),
187 fProdV0RapMin(source.fProdV0RapMin),
188 fProdV0RapMax(source.fProdV0RapMax),
189 fProdRoughMassTol(source.fProdRoughMassTol),
190 fProdRoughPtMin(source.fProdRoughPtMin),
191 fExcludePionTPC(source.fExcludePionTPC),
192 fExcludeProtonTPC(source.fExcludeProtonTPC),
193 fExcludeKaonTPC(source.fExcludeKaonTPC),
194 fExcludenSigmaPionTPC(source.fExcludenSigmaPionTPC),
195 fExcludenSigmaProtonTPC(source.fExcludenSigmaProtonTPC),
196 fExcludenSigmaKaonTPC(source.fExcludenSigmaKaonTPC),
197 fSigmaElectronTPCMin(source.fSigmaElectronTPCMin),
198 fSigmaElectronTPCPtDepPar0(source.fSigmaElectronTPCPtDepPar0),
199 fSigmaElectronTPCPtDepPar1(source.fSigmaElectronTPCPtDepPar1),
200 fSigmaElectronTPCPtDepPar2(source.fSigmaElectronTPCPtDepPar2),
201 fSigmaElectronTPCMax(source.fSigmaElectronTPCMax),
202 fSigmaElectronTOFMin(source.fSigmaElectronTOFMin),
203 fSigmaElectronTOFMax(source.fSigmaElectronTOFMax),
204 fSigmaElectronITSMin(source.fSigmaElectronITSMin),
205 fSigmaElectronITSMax(source.fSigmaElectronITSMax),
206 fConversionMassMax(source.fConversionMassMax),
207 fConversionUseStrongerCut(source.fConversionUseStrongerCut),
208 fEleLambdaMassMax(source.fEleLambdaMassMax)
213 for(
Int_t i=0;i<3;i++){
224 if (
this != &source) {
287 for(
Int_t i=0;i<3;i++){
308 if (pdgdaughters[0]==-9999)
return;
312 AliError(
"No AliAODRecoCascadeHF object found\n");
317 AliError(
"Cut object seems to have the wrong number of variables\n");
328 UInt_t pdgdg[2]={11,3122};
329 vars[iter]= dd->InvMass(2,pdgdg);
339 vars[iter]= (v0px*epx+v0py*epy+v0pz*epz)/sqrt(v0px*v0px+v0py*v0py+v0pz*v0pz)/sqrt(epx*epx+epy*epy+epz*epz);
352 AliFatal(
"Cut matrix not inizialized. Exit...");
358 AliDebug(2,
"AliAODRecoCascadeHF null");
371 Int_t returnvalueCuts=1;
383 Double_t mlamPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
384 UInt_t pdgdg[2]={11,3122};
385 Double_t InvMassEleLambda = d->InvMass(2,pdgdg);
393 Double_t cosoa = (v0px*epx+v0py*epy+v0pz*epz)/sqrt(v0px*v0px+v0py*v0py+v0pz*v0pz)/sqrt(epx*epx+epy*epy+epz*epz);
395 Double_t dphis_e_pr, detas_e_pr, dphis_e_pi, detas_e_pi;
401 AliAODTrack *trke = (AliAODTrack*)d->GetDaughter(0);
402 AliAODv0 *v0 = (AliAODv0*)d->GetDaughter(1);
404 Bool_t isparticle = kTRUE;
406 AliAODTrack *cprtrk = 0;
407 AliAODTrack *cpitrk = 0;
409 cprtrk = (AliAODTrack*)v0->GetDaughter(0);
410 cpitrk = (AliAODTrack*)v0->GetDaughter(1);
412 cprtrk = (AliAODTrack*)v0->GetDaughter(1);
413 cpitrk = (AliAODTrack*)v0->GetDaughter(0);
437 if(!okcand)
return 0;
441 Int_t returnvaluePID=1;
448 Int_t returnvalue = 0;
449 if(returnvalueCuts==1 && returnvaluePID==1) returnvalue=1;
470 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
471 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
476 if(isElectron<1) returnvalue = 0;
487 if(!
fUsePID || !obj) {
return 1;}
513 if(trk->Pt()<ptmin || trk->Pt()>
ptmax)
return kFALSE;
514 if(trk->Eta()<etamin || trk->Eta()>
etamax)
return kFALSE;
516 Double_t pos[3]; primVert->GetXYZ(pos);
517 Double_t cov[6]; primVert->GetCovarianceMatrix(cov);
518 const AliESDVertex vESD(pos,cov,100.,100);
524 if(trk->GetTPCNclsF()>0){
530 const TBits sharedMap = trk->GetTPCSharedMap();
531 if((sharedMap.CountBits()) >= 1){
538 Int_t ncls_its_shared = 0;
539 for(
Int_t i=0;i<6;i++){
540 if(trk->HasPointOnITSLayer(i)) ncls_its++;
541 if(trk->HasPointOnITSLayer(i) && trk->HasSharedPointOnITSLayer(i)) ncls_its_shared++;
551 Float_t chi2 = trk->GetITSchi2();
553 for(
Int_t i=0;i<6;i++){
554 if(trk->HasPointOnITSLayer(i)) ncls_its++;
566 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
567 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
605 if(trk->Pt()<ptmin || trk->Pt()>
ptmax)
return kFALSE;
606 if(trk->Eta()<etamin || trk->Eta()>
etamax)
return kFALSE;
608 Double_t pos[3]; primVert->GetXYZ(pos);
609 Double_t cov[6]; primVert->GetCovarianceMatrix(cov);
610 const AliESDVertex vESD(pos,cov,100.,100);
616 if(trk->GetTPCNclsF()>0){
622 const TBits sharedMap = trk->GetTPCSharedMap();
623 if((sharedMap.CountBits()) >= 1){
659 if(isElectron<1)
return kFALSE;
751 if(nSigmaTPCele<nsigmamin)
return kFALSE;
773 Bool_t onFlyV0 = v0->GetOnFlyStatus();
776 if(!v0)
return kFALSE;
777 if(!(v0->GetSecondaryVtx()))
return kFALSE;
779 AliAODTrack *cptrack = (AliAODTrack*)(v0->GetDaughter(0));
780 AliAODTrack *cntrack = (AliAODTrack*)(v0->GetDaughter(1));
781 if(!cptrack || !cntrack)
return kFALSE;
788 if ( cptrack->Charge() == cntrack->Charge() )
return kFALSE;
789 if(!(cptrack->GetStatus() & AliESDtrack::kTPCrefit) ||
790 !(cntrack->GetStatus() & AliESDtrack::kTPCrefit))
return kFALSE;
791 AliAODVertex *maybeKinkPos = (AliAODVertex*)cptrack->GetProdVertex();
792 AliAODVertex *maybeKinkNeg = (AliAODVertex*)cntrack->GetProdVertex();
793 if (
fProdV0KinkRejection && (maybeKinkPos->GetType()==AliAODVertex::kKink || maybeKinkNeg->GetType()==AliAODVertex::kKink))
803 Double_t massLambda = v0->MassLambda();
804 Double_t massAntiLambda = v0->MassAntiLambda();
805 Double_t mlamPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
806 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
809 Double_t massK0s = v0->MassK0Short();
813 Bool_t isparticle = kTRUE;
819 primVert->GetXYZ(posVtx);
820 Double_t cospav0 = v0->CosPointingAngle(posVtx);
829 Double_t lDcaV0ToPrimVertex = v0->DcaV0ToPrimVertex();
830 Double_t lDcaPosToPrimVertex = v0->DcaPosToPrimVertex();
831 Double_t lDcaNegToPrimVertex = v0->DcaNegToPrimVertex();
842 lPosV0[0] = v0->DecayVertexV0X();
843 lPosV0[1] = v0->DecayVertexV0Y();
844 lPosV0[2] = v0->DecayVertexV0Z();
845 Double_t decayvertV0 = TMath::Sqrt(lPosV0[0]*lPosV0[0]+lPosV0[1]*lPosV0[1]);
847 if(decayvertV0<fProdRfidMinV0 || decayvertV0>
fProdRfidMaxV0)
return kFALSE;
849 Double_t ptotlam = TMath::Sqrt(pow(v0->Px(),2)+pow(v0->Py(),2)+pow(v0->Pz(),2));
850 Double_t properdl = v0->DecayLengthV0(posVtx)*mlamPDG/ptotlam;
858 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
859 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
864 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
865 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
881 if(fabs(nSigmaTPCpr)>nsigmatpc_proton) isProton = 0;
882 if(fabs(nSigmaTPCpi)>nsigmatpc_pion) isPion = 0;
883 if(nsigmatof_proton>0.01 && nsigmatof_proton<999.){
884 if(nSigmaTOFpr>-998 && fabs(nSigmaTOFpr)>nsigmatof_proton) isProton = 0;
886 if(nsigmatof_pion>0.01 && nsigmatof_pion<999.){
887 if(nSigmaTOFpi>-998 && fabs(nSigmaTOFpi)>nsigmatof_pion) isPion = 0;
894 if(fabs(nSigmaTPCpr)>nsigmatpc_proton) isProton = 0;
895 if(fabs(nSigmaTPCpi)>nsigmatpc_pion) isPion = 0;
896 if(nsigmatof_proton>0.01 && nsigmatof_proton<999.){
897 if(nSigmaTOFpr>-998 && fabs(nSigmaTOFpr)>nsigmatof_proton) isProton = 0;
899 if(nsigmatof_pion>0.01 && nsigmatof_pion<999.){
900 if(nSigmaTOFpi>-998 && fabs(nSigmaTOFpi)>nsigmatof_pion) isPion = 0;
903 if(isProton<1)
return kFALSE;
904 if(isPion<1)
return kFALSE;
907 Double_t RapLambda = v0->RapLambda();
908 if(RapLambda<fProdV0RapMin || RapLambda>
fProdV0RapMax)
return kFALSE;
910 Double_t EtaLambda = v0->PseudoRapV0();
911 if(EtaLambda<fProdV0EtaMin || EtaLambda>
fProdV0EtaMax)
return kFALSE;
914 const TBits sharedMap1 = cptrack->GetTPCSharedMap();
915 const TBits sharedMap2 = cntrack->GetTPCSharedMap();
916 if((sharedMap1.CountBits() >= 1) ||
917 (sharedMap2.CountBits() >= 1))
926 TVector3 v3v0pr(v0->MomPosX(),v0->MomPosY(),v0->MomPosZ());
927 TVector3 v3lam(v0->Px(),v0->Py(),v0->Pz());
928 dphiprlam = v3v0pr.DeltaPhi(v3lam);
930 TVector3 v3v0pr(v0->MomNegX(),v0->MomNegY(),v0->MomNegZ());
931 TVector3 v3lam(v0->Px(),v0->Py(),v0->Pz());
932 dphiprlam = -1.*v3v0pr.DeltaPhi(v3lam);
935 if(dphiprlam>0)
return kFALSE;
937 if(dphiprlam<0)
return kFALSE;
951 if(!v0)
return kFALSE;
952 if(!part)
return kFALSE;
961 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
964 massL = v0->MassAntiLambda();
974 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
984 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
987 massL = v0->MassAntiLambda();
989 Bool_t issideband = kFALSE;
998 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
1000 Bool_t issideband = kFALSE;
1016 Int_t trkid = etrk->GetID();
1021 Double_t E1 = sqrt(px1*px1+py1*py1+pz1*pz1+0.000511*0.000511);
1023 for(
Int_t it=0;it<ntrk;it++){
1024 AliAODTrack *trk2 = (AliAODTrack*) evt->GetTrack(it);
1026 Int_t trkid2 = trk2->GetID();
1027 if(abs(trkid)==abs(trkid2))
continue;
1028 if(etrk->Charge()*trk2->Charge()>0)
continue;
1038 if(-trkid2-1>=19000)
continue;
1039 if(-trkid2-1<0)
continue;
1040 Int_t index = id2index[-trkid2-1];
1041 AliAODTrack *partpid = (AliAODTrack*)evt->GetTrack(index);
1048 if(fabs(nSigmaTPCele)>5.)
continue;
1054 if(nSigmaTPCele<nsigmamin)
continue;
1055 if(nSigmaTPCele<-3.)
continue;
1059 if(nSigmaITSele<-2.)
continue;
1060 if(nSigmaITSele>2.)
continue;
1066 Double_t E2 = sqrt(px2*px2+py2*py2+pz2*pz2+0.000511*0.000511);
1068 Double_t mass = sqrt(pow(E1+E2,2)-pow(px1+px2,2)-pow(py1+py2,2)-pow(pz1+pz2,2));
1070 if(mass<minmass) minmass =
mass;
1089 Int_t trkid = etrk->GetID();
1093 Double_t E1 = sqrt(px1*px1+py1*py1+pz1*pz1+0.000511*0.000511);
1095 for(
Int_t it=0;it<ntrk;it++){
1096 AliAODTrack *trk2 = (AliAODTrack*) evt->GetTrack(it);
1098 Int_t trkid2 = trk2->GetID();
1099 if(abs(trkid)==abs(trkid2))
continue;
1100 if(etrk->Charge()*trk2->Charge()<0)
continue;
1110 if(-trkid2-1>=19000)
continue;
1111 if(-trkid2-1<0)
continue;
1112 Int_t index = id2index[-trkid2-1];
1113 AliAODTrack *partpid = (AliAODTrack*)evt->GetTrack(index);
1120 if(fabs(nSigmaTPCele)>5.)
continue;
1126 if(nSigmaTPCele<nsigmamin)
continue;
1127 if(nSigmaTPCele<-3.)
continue;
1131 if(nSigmaITSele<-2.)
continue;
1132 if(nSigmaITSele>2.)
continue;
1138 Double_t E2 = sqrt(px2*px2+py2*py2+pz2*pz2+0.000511*0.000511);
1140 Double_t mass = sqrt(pow(E1+E2,2)-pow(px1+px2,2)-pow(py1+py2,2)-pow(pz1+pz2,2));
1141 if(mass<minmass) minmass =
mass;
1161 AliExternalTrackParam etp;
1162 etp.CopyFromVTrack(track);
1165 Double_t xyz[3]={-9999.,-9999.,-9999.};
1168 const Float_t RSquaredWanted(125.*125.);
1172 for (
Float_t x = 58.;x<247.;x+=1.){
1182 if(!etp.PropagateTo(x,(
Float_t)bfield))
break;
1187 Float_t shiftedRadiusSquared = (xyz[0]-priVtx[0])*(xyz[0]-priVtx[0])
1188 + (xyz[1]-priVtx[1])*(xyz[1]-priVtx[1]);
1191 if(shiftedRadiusSquared > RSquaredWanted){
1195 while (shiftedRadiusSquared>RSquaredWanted){
1198 if(!etp.PropagateTo(x,bfield)){
1207 shiftedRadiusSquared = (xyz[0]-priVtx[0])*(xyz[0]-priVtx[0])
1208 + (xyz[1]-priVtx[1])*(xyz[1]-priVtx[1]);
1212 XSftR125[0]=xyz[0]-priVtx[0];
1213 XSftR125[1]=xyz[1]-priVtx[1];
1214 XSftR125[2]=xyz[2]-priVtx[2];
1235 AliExternalTrackParam etp;
1236 etp.CopyFromVTrack(track);
1239 Double_t xyz[3]={-9999.,-9999.,-9999.};
1242 const Float_t RSquaredWanted(R*R);
1246 for (
Float_t x = 2.;x<247.;x+=1.){
1256 if(!etp.PropagateTo(x,(
Float_t)bfield))
break;
1261 Float_t shiftedRadiusSquared = (xyz[0]-priVtx[0])*(xyz[0]-priVtx[0])
1262 + (xyz[1]-priVtx[1])*(xyz[1]-priVtx[1]);
1265 if(shiftedRadiusSquared > RSquaredWanted){
1269 while (shiftedRadiusSquared>RSquaredWanted){
1272 if(!etp.PropagateTo(x,bfield)){
1281 shiftedRadiusSquared = (xyz[0]-priVtx[0])*(xyz[0]-priVtx[0])
1282 + (xyz[1]-priVtx[1])*(xyz[1]-priVtx[1]);
1286 XSftR[0]=xyz[0]-priVtx[0];
1287 XSftR[1]=xyz[1]-priVtx[1];
1288 XSftR[2]=xyz[2]-priVtx[2];
1305 Double_t ThetaS1 = TMath::Pi()/2. - TMath::ATan(postrack1[2]/125.);
1306 Double_t ThetaS2 = TMath::Pi()/2. - TMath::ATan(postrack2[2]/125.);
1307 Double_t EtaS1 = -TMath::Log( TMath::Tan(ThetaS1/2.) );
1308 Double_t EtaS2 = -TMath::Log( TMath::Tan(ThetaS2/2.) );
1321 Double_t distSft= TMath::Sqrt(TMath::Power(postrack1[0] - postrack2[0],2)
1322 +TMath::Power(postrack1[1] - postrack2[1],2));
1323 return 2.0 * TMath::ATan(distSft/2./(125.));
1340 dPhiS_ep =
dPhiSR125(XSftR125_e,XSftR125_p);
1341 dEtaS_ep =
dEtaSR125(XSftR125_e,XSftR125_p);
1342 dPhiS_en =
dPhiSR125(XSftR125_e,XSftR125_n);
1343 dEtaS_en =
dEtaSR125(XSftR125_e,XSftR125_n);
1354 AliFatal(
"Cut matrix not inizialized. Exit...");
1358 Double_t ptD=sqrt(pow(vtrk->Px()+vv0->Px(),2)+pow(vtrk->Px()+vv0->Py(),2));
1373 Int_t returnvalueCuts=1;
1380 Double_t mlcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
1381 Double_t melePDG = TDatabasePDG::Instance()->GetParticle(11)->Mass();
1382 Double_t mlamPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
1389 Double_t cosoa = (v0px*epx+v0py*epy+v0pz*epz)/sqrt(v0px*v0px+v0py*v0py+v0pz*v0pz)/sqrt(epx*epx+epy*epy+epz*epz);
1391 TLorentzVector vele, vlam,vlc;
1392 vele.SetXYZM(epx,epy,epz,melePDG);
1393 vlam.SetXYZM(v0px,v0py,v0pz,mlamPDG);
1401 Double_t xyzR125_e[3], xyzR125_pr[3], xyzR125_pi[3];
1402 xyzR125_e[0] = cutvars[0];
1403 xyzR125_e[1] = cutvars[1];
1404 xyzR125_e[2] = cutvars[2];
1405 xyzR125_pr[0] = cutvars[3];
1406 xyzR125_pr[1] = cutvars[4];
1407 xyzR125_pr[2] = cutvars[5];
1408 xyzR125_pi[0] = cutvars[6];
1409 xyzR125_pi[1] = cutvars[7];
1410 xyzR125_pi[2] = cutvars[8];
1411 dphis_e_pr =
dPhiSR125(xyzR125_e,xyzR125_pr);
1412 detas_e_pr =
dPhiSR125(xyzR125_e,xyzR125_pr);
1413 dphis_e_pi =
dPhiSR125(xyzR125_e,xyzR125_pi);
1414 detas_e_pi =
dPhiSR125(xyzR125_e,xyzR125_pi);
1434 if(!okcand)
return 0;
1435 returnvalueCuts = 1;
1438 Int_t returnvaluePID=1;
1444 Int_t returnvalue = 0;
1445 if(returnvalueCuts==1 && returnvaluePID==1) returnvalue=1;
1456 if(
fBzkG<0.) pol = -1.;
1464 Double_t ux1 = trk1->Px()/trk1->Pt();
1465 Double_t uy1 = trk1->Py()/trk1->Pt();
1469 Double_t xc1 = x1 + charge1*Rcurv1*(uy1)*pol;
1470 Double_t yc1 = y1 + charge1*Rcurv1*(-1.*ux1)*pol;
1474 Double_t ux2 = trk2->Px()/trk2->Pt();
1475 Double_t uy2 = trk2->Py()/trk2->Pt();
1479 Double_t xc2 = x2 + charge2*Rcurv2*(uy2)*pol;
1480 Double_t yc2 = y2 + charge2*Rcurv2*(-1.*ux2)*pol;
1482 if(fabs(sqrt((xc2-xc1)*(xc2-xc1)+(yc2-yc1)*(yc2-yc1))-(Rcurv1+Rcurv2))>5.)
return 9999.;
1487 Double_t nux = dyc/sqrt(dxc*dxc+dyc*dyc);
1488 Double_t nuy = -1.*dxc/sqrt(dxc*dxc+dyc*dyc);
1489 Double_t vertx1 = xc1 + (xc2-xc1)*Rcurv1/sqrt(dxc*dxc+dyc*dyc);
1490 Double_t verty1 = yc1 + (yc2-yc1)*Rcurv1/sqrt(dxc*dxc+dyc*dyc);
1491 Double_t vertx2 = xc2 + (xc1-xc2)*Rcurv2/sqrt(dxc*dxc+dyc*dyc);
1492 Double_t verty2 = yc2 + (yc1-yc2)*Rcurv2/sqrt(dxc*dxc+dyc*dyc);
1493 Double_t vertxmid = (vertx1+vertx2)/2.;
1494 Double_t vertymid = (verty1+verty2)/2.;
1496 if(vertxmid*nux+vertymid*nuy<0.)
return 9999.;
1501 Double_t E1_new = sqrt(px1_new*px1_new+py1_new*py1_new+pz1_new*pz1_new+0.000511);
1505 Double_t E2_new = sqrt(px2_new*px2_new+py2_new*py2_new+pz2_new*pz2_new+0.000511);
1508 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));
1548 if(dphi<-M_PI) dphi += 2 *M_PI;
1549 if(dphi> M_PI) dphi -= 2 *M_PI;
1576 Double_t cosoa = (v0px*epx+v0py*epy+v0pz*epz)/sqrt(v0px*v0px+v0py*v0py+v0pz*v0pz)/sqrt(epx*epx+epy*epy+epz*epz);
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.
Float_t fProdITSChi2OverNclsMax
Cut on fraction of shared clusters in ITS.
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 select electron band
Int_t IsSelectedCombinedPID(AliAODRecoDecayHF *obj)
Double_t fExcludenSigmaProtonTPC
nSigma to exclude for pion band
Double_t fProdDcaV0PrToPrimVertexMin
Max 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
Cut on chi2/ncls in ITS.
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 electron 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 electron 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)
Double_t fEleLambdaMassMax
Conversion stronger cut.
Double_t fProdDcaV0ToPrimVertexMax
Min Dca between v0 and PV.
Bool_t fConversionUseStrongerCut
Conversion mass.
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
void 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)
Double_t CosOpeningAngle(AliAODv0 *v0, AliAODTrack *trk)
Double_t fSigmaElectronITSMax
nSigma to select electron band
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 select electron 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
Float_t fProdITSSharedFractionMax
Flag to Reject tracks with shared clusters.
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.
Double_t fSigmaElectronITSMin
nSigma to electron band
Bool_t IsDaughterSelected(AliAODTrack *track, const AliESDVertex *primary, AliESDtrackCuts *cuts, const AliAODEvent *aod=0x0) const
Bool_t IsSideBand(AliAODv0 *c)
Double_t CalculatePhotonMass(AliAODTrack *track1, AliAODTrack *track2)
void SetPidResponse(AliPIDResponse *pidResp)