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"
56 fPIDStrategy(kNSigmaCuts),
57 fCombinedPIDThreshold(0.),
58 fUseCascadePID(kFALSE),
63 fProdTrackTPCNclsPIDMin(0),
64 fProdTrackTPCNclsRatioMin(0.0),
65 fProdUseAODFilterBit(kTRUE),
67 fProdRejectTrackWithShared(kFALSE),
68 fProdMassTolLambda(0.010),
69 fProdMassTolXiRough(0.020),
70 fProdMassTolXi(0.008),
71 fProdMassRejOmega(0.008),
73 fProdRfidMaxV0(100.0),
75 fProdRfidMaxXi(100.0),
76 fProdCascProperDecayLengthMax(100.0),
77 fProdDcaXiDaughtersMax(100.),
78 fProdDcaV0DaughtersMax(100.),
79 fProdDcaBachToPrimVertexMin(0.),
80 fProdDcaV0ToPrimVertexMin(0.),
81 fProdDcaV0PrToPrimVertexMin(0.),
82 fProdDcaV0PiToPrimVertexMin(0.),
83 fProdXiCosineOfPoiningAngleMin(-1.),
84 fProdV0CosineOfPoiningAngleXiMin(-1.),
85 fProdCascNTPCClustersMin(0.0),
86 fProdCascEtaMin(-9999.),
87 fProdCascEtaMax(9999.),
88 fProdCascRapMin(-9999.),
89 fProdCascRapMax(9999.),
91 fProdCascPtMax(9999.),
92 fProdRoughMassTol(0.25),
94 fExcludePionTPC(kFALSE),
95 fExcludeProtonTPC(kFALSE),
96 fExcludeKaonTPC(kFALSE),
97 fExcludenSigmaPionTPC(3.),
98 fExcludenSigmaProtonTPC(3.),
99 fExcludenSigmaKaonTPC(3.),
100 fSigmaElectronTPCMin(-9999.),
101 fSigmaElectronTPCPtDepPar0(-9999.),
102 fSigmaElectronTPCPtDepPar1(-9999.),
103 fSigmaElectronTPCPtDepPar2(0.),
104 fSigmaElectronTPCMax(9999.),
105 fSigmaElectronTOFMin(-9999.),
106 fSigmaElectronTOFMax(9999.),
107 fConversionMassMax(-1.)
112 for(Int_t i=0;i<3;i++){
118 TString varNames[nvars]={
120 "cos(Opening angle) [cos(rad)]",
125 Bool_t isUpperCut[nvars]={
132 Bool_t forOpt[nvars]={
140 Float_t limits[2]={0,999999999.};
146 fPIDStrategy(source.fPIDStrategy),
147 fCombinedPIDThreshold(source.fCombinedPIDThreshold),
148 fUseCascadePID(source.fUseCascadePID),
149 fPidObjCascPi(source.fPidObjCascPi),
150 fPidObjCascPr(source.fPidObjCascPr),
151 fUseV0Topology(source.fUseV0Topology),
153 fProdTrackTPCNclsPIDMin(source.fProdTrackTPCNclsPIDMin),
154 fProdTrackTPCNclsRatioMin(source.fProdTrackTPCNclsRatioMin),
155 fProdUseAODFilterBit(source.fProdUseAODFilterBit),
156 fProdAODFilterBit(source.fProdAODFilterBit),
157 fProdRejectTrackWithShared(source.fProdRejectTrackWithShared),
158 fProdMassTolLambda(source.fProdMassTolLambda),
159 fProdMassTolXiRough(source.fProdMassTolXiRough),
160 fProdMassTolXi(source.fProdMassTolXi),
161 fProdMassRejOmega(source.fProdMassRejOmega),
162 fProdRfidMinV0(source.fProdRfidMinV0),
163 fProdRfidMaxV0(source.fProdRfidMaxV0),
164 fProdRfidMinXi(source.fProdRfidMinXi),
165 fProdRfidMaxXi(source.fProdRfidMaxXi),
166 fProdCascProperDecayLengthMax(source.fProdCascProperDecayLengthMax),
167 fProdDcaXiDaughtersMax(source.fProdDcaXiDaughtersMax),
168 fProdDcaV0DaughtersMax(source.fProdDcaV0DaughtersMax),
169 fProdDcaBachToPrimVertexMin(source.fProdDcaBachToPrimVertexMin),
170 fProdDcaV0ToPrimVertexMin(source.fProdDcaV0ToPrimVertexMin),
171 fProdDcaV0PrToPrimVertexMin(source.fProdDcaV0PrToPrimVertexMin),
172 fProdDcaV0PiToPrimVertexMin(source.fProdDcaV0PiToPrimVertexMin),
173 fProdXiCosineOfPoiningAngleMin(source.fProdXiCosineOfPoiningAngleMin),
174 fProdV0CosineOfPoiningAngleXiMin(source.fProdV0CosineOfPoiningAngleXiMin),
175 fProdCascNTPCClustersMin(source.fProdCascNTPCClustersMin),
176 fProdCascEtaMin(source.fProdCascEtaMin),
177 fProdCascEtaMax(source.fProdCascEtaMax),
178 fProdCascRapMin(source.fProdCascRapMin),
179 fProdCascRapMax(source.fProdCascRapMax),
180 fProdCascPtMin(source.fProdCascPtMin),
181 fProdCascPtMax(source.fProdCascPtMax),
182 fProdRoughMassTol(source.fProdRoughMassTol),
183 fProdRoughPtMin(source.fProdRoughPtMin),
184 fExcludePionTPC(source.fExcludePionTPC),
185 fExcludeProtonTPC(source.fExcludeProtonTPC),
186 fExcludeKaonTPC(source.fExcludeKaonTPC),
187 fExcludenSigmaPionTPC(source.fExcludenSigmaPionTPC),
188 fExcludenSigmaProtonTPC(source.fExcludenSigmaProtonTPC),
189 fExcludenSigmaKaonTPC(source.fExcludenSigmaKaonTPC),
190 fSigmaElectronTPCMin(source.fSigmaElectronTPCMin),
191 fSigmaElectronTPCPtDepPar0(source.fSigmaElectronTPCPtDepPar0),
192 fSigmaElectronTPCPtDepPar1(source.fSigmaElectronTPCPtDepPar1),
193 fSigmaElectronTPCPtDepPar2(source.fSigmaElectronTPCPtDepPar2),
194 fSigmaElectronTPCMax(source.fSigmaElectronTPCMax),
195 fSigmaElectronTOFMin(source.fSigmaElectronTOFMin),
196 fSigmaElectronTOFMax(source.fSigmaElectronTOFMax),
197 fConversionMassMax(source.fConversionMassMax)
202 for(Int_t i=0;i<3;i++){
213 if (
this != &source) {
270 for(Int_t i=0;i<3;i++){
291 if (pdgdaughters[0]==-9999)
return;
295 AliError(
"No AliAODRecoCascadeHF object found\n");
300 AliError(
"Cut object seems to have the wrong number of variables\n");
310 UInt_t pdgdg[2]={11,3312};
311 vars[iter]= dd->InvMass(2,pdgdg);
315 Double_t xipx = dd->PxProng(1);
316 Double_t xipy = dd->PyProng(1);
317 Double_t xipz = dd->PzProng(1);
318 Double_t epx = dd->PxProng(0);
319 Double_t epy = dd->PyProng(0);
320 Double_t epz = dd->PzProng(0);
321 vars[iter]= (xipx*epx+xipy*epy+xipz*epz)/sqrt(xipx*xipx+xipy*xipy+xipz*xipz)/sqrt(epx*epx+epy*epy+epz*epz);
334 AliFatal(
"Cut matrix not inizialized. Exit...");
340 AliDebug(2,
"AliAODRecoCascadeHF null");
344 Double_t ptD=d->Pt();
353 Int_t returnvalueCuts=1;
359 Int_t ptbin=
PtBin(pt);
365 Double_t mxiPDG = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
366 UInt_t pdgdg[2]={11,3312};
367 Double_t InvMassEleXi = d->InvMass(2,pdgdg);
368 Double_t xipx = d->PxProng(1);
369 Double_t xipy = d->PyProng(1);
370 Double_t xipz = d->PzProng(1);
371 Double_t epx = d->PxProng(0);
372 Double_t epy = d->PyProng(0);
373 Double_t epz = d->PzProng(0);
374 Double_t cosoa = (xipx*epx+xipy*epy+xipz*epz)/sqrt(xipx*xipx+xipy*xipy+xipz*xipz)/sqrt(epx*epx+epy*epy+epz*epz);
376 Double_t dphis_e_pr, detas_e_pr, dphis_e_pi, detas_e_pi, dphis_e_bach, detas_e_bach;
381 dphis_e_bach = 9999.;
382 detas_e_bach = 9999.;
384 AliAODTrack *trke = (AliAODTrack*)d->GetDaughter(0);
385 AliAODcascade *casc = (AliAODcascade*)d->GetDaughter(1);
387 AliAODTrack *cprtrk = 0;
388 AliAODTrack *cpitrk = 0;
389 AliAODTrack *cbtrk = 0;
390 if(casc->ChargeXi()<0){
391 cprtrk = (AliAODTrack*)casc->GetDaughter(0);
392 cpitrk = (AliAODTrack*)casc->GetDaughter(1);
393 cbtrk = (AliAODTrack*)casc->GetDecayVertexXi()->GetDaughter(0);
395 cprtrk = (AliAODTrack*)casc->GetDaughter(1);
396 cpitrk = (AliAODTrack*)casc->GetDaughter(0);
397 cbtrk = (AliAODTrack*)casc->GetDecayVertexXi()->GetDaughter(0);
399 if(cprtrk && cpitrk && cbtrk)
400 GetdPhiSdEtaSR125(trke,cprtrk,cpitrk,cbtrk,
fBzkG,
fPrimVert, dphis_e_pr,detas_e_pr,dphis_e_pi,detas_e_pi,dphis_e_bach,detas_e_bach);
425 if(!okcand)
return 0;
429 Int_t returnvaluePID=1;
436 Int_t returnvalue = 0;
437 if(returnvalueCuts==1 && returnvaluePID==1) returnvalue=1;
457 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
458 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
459 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
464 if(isElectron<1) returnvalue = 0;
475 if(!
fUsePID || !obj) {
return 1;}
502 if(trk->Pt()<ptmin || trk->Pt()>
ptmax)
return kFALSE;
503 if(trk->Eta()<etamin || trk->Eta()>
etamax)
return kFALSE;
505 Double_t pos[3]; primVert->GetXYZ(pos);
506 Double_t cov[6]; primVert->GetCovarianceMatrix(cov);
507 const AliESDVertex vESD(pos,cov,100.,100);
513 if(trk->GetTPCNclsF()>0){
514 Float_t tpcratio = (Float_t)trk->GetTPCncls()/(Float_t)trk->GetTPCNclsF();
519 const TBits sharedMap = trk->GetTPCSharedMap();
520 if((sharedMap.CountBits()) >= 1){
528 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
529 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
530 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
567 if(trk->Pt()<ptmin || trk->Pt()>
ptmax)
return kFALSE;
568 if(trk->Eta()<etamin || trk->Eta()>
etamax)
return kFALSE;
570 Double_t pos[3]; primVert->GetXYZ(pos);
571 Double_t cov[6]; primVert->GetCovarianceMatrix(cov);
572 const AliESDVertex vESD(pos,cov,100.,100);
578 if(trk->GetTPCNclsF()>0){
579 Float_t tpcratio = (Float_t)trk->GetTPCncls()/(Float_t)trk->GetTPCNclsF();
584 const TBits sharedMap = trk->GetTPCSharedMap();
585 if((sharedMap.CountBits()) >= 1){
622 if(isElectron<1)
return kFALSE;
679 Double_t pte = trk->Pt();
682 if(nSigmaTPCele<nsigmamin)
return kFALSE;
703 if(!casc)
return kFALSE;
704 if(!(casc->GetSecondaryVtx()))
return kFALSE;
705 if(!(casc->GetDecayVertexXi()))
return kFALSE;
707 AliAODTrack *ptrack = (AliAODTrack*) (casc->GetDaughter(0));
708 AliAODTrack *ntrack = (AliAODTrack*) (casc->GetDaughter(1));
709 AliAODTrack *btrack = (AliAODTrack*) (casc->GetDecayVertexXi()->GetDaughter(0));
711 if(!ptrack||!ntrack||!btrack)
return kFALSE;
713 if(ptrack->Charge()<0 && ntrack->Charge()>0){
714 ptrack = (AliAODTrack*) (casc->GetDaughter(1));
715 ntrack = (AliAODTrack*) (casc->GetDaughter(0));
722 Double_t pxxi = casc->MomXiX();
723 Double_t pyxi = casc->MomXiY();
724 Double_t ptxi = sqrt(pxxi*pxxi+pyxi*pyxi);
727 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
728 Double_t mxiPDG = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
729 Double_t momegaPDG = TDatabasePDG::Instance()->GetParticle(3334)->Mass();
731 Double_t massLambda = casc->MassLambda();
732 Double_t massAntiLambda = casc->MassAntiLambda();
736 Bool_t isparticle = kTRUE;
738 if(casc->ChargeXi()>0) isparticle = kFALSE;
740 Double_t massXi = casc->MassXi();
744 Double_t massOmega = casc->MassOmega();
750 lPosXi[0] = casc->DecayVertexXiX();
751 lPosXi[1] = casc->DecayVertexXiY();
752 lPosXi[2] = casc->DecayVertexXiZ();
753 Double_t decayvertXi = TMath::Sqrt(lPosXi[0]*lPosXi[0]+lPosXi[1]*lPosXi[1]);
755 lPosV0[0] = casc->DecayVertexV0X();
756 lPosV0[1] = casc->DecayVertexV0Y();
757 lPosV0[2] = casc->DecayVertexV0Z();
758 Double_t decayvertV0 = TMath::Sqrt(lPosV0[0]*lPosV0[0]+lPosV0[1]*lPosV0[1]);
760 if(decayvertV0<fProdRfidMinV0 || decayvertV0>
fProdRfidMaxV0)
return kFALSE;
761 if(decayvertXi<fProdRfidMinXi || decayvertXi>
fProdRfidMaxXi)
return kFALSE;
763 Double_t ptotxi = TMath::Sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2)+pow(casc->MomXiZ(),2));
764 Double_t properdl = casc->DecayLengthXi(primvert[0],primvert[1],primvert[2])*mxiPDG/ptotxi;
767 Double_t lDcaXiDaughters = casc->DcaXiDaughters();
768 Double_t lDcaV0Daughters = casc->DcaV0Daughters();
772 Double_t lDcaBachToPrimVertex = casc->DcaBachToPrimVertex();
773 Double_t lDcaV0ToPrimVertex = casc->DcaV0ToPrimVertex();
774 Double_t lDcaPosToPrimVertex = casc->DcaPosToPrimVertex();
775 Double_t lDcaNegToPrimVertex = casc->DcaNegToPrimVertex();
786 Double_t lXiCosineOfPointingAngle = casc->CosPointingAngleXi(primvert[0],primvert[1],primvert[2]);
787 Double_t lV0CosineOfPointingAngleXi = casc->CosPointingAngle(lPosXi);
795 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
796 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
797 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
801 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
802 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
803 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
807 Int_t isProton = -9999;
808 Int_t isPion1 = -9999;
809 Int_t isPion2 = -9999;
815 if(fabs(nSigmaTPCpr)<nsigmatpc_proton) isProton = 1;
816 if(fabs(nSigmaTPCpi1)<nsigmatpc_pion) isPion1 = 1;
817 if(fabs(nSigmaTPCpi2)<nsigmatpc_pion) isPion2 = 1;
818 if(isProton<1)
return kFALSE;
819 if(isPion1<1)
return kFALSE;
820 if(isPion2<1)
return kFALSE;
822 Int_t isProton = -9999;
823 Int_t isPion1 = -9999;
824 Int_t isPion2 = -9999;
830 if(fabs(nSigmaTPCpr)<nsigmatpc_proton) isProton = 1;
831 if(fabs(nSigmaTPCpi1)<nsigmatpc_pion) isPion1 = 1;
832 if(fabs(nSigmaTPCpi2)<nsigmatpc_pion) isPion2 = 1;
833 if(isProton<1)
return kFALSE;
834 if(isPion1<1)
return kFALSE;
835 if(isPion2<1)
return kFALSE;
839 Double_t RapXi = casc->RapXi();
842 Double_t EtaXi = 0.5*TMath::Log((ptotxi+casc->MomXiZ())/(ptotxi-casc->MomXiZ()));
846 const TBits sharedMap1 = ptrack->GetTPCSharedMap();
847 const TBits sharedMap2 = ntrack->GetTPCSharedMap();
848 const TBits sharedMap3 = btrack->GetTPCSharedMap();
849 if((sharedMap1.CountBits() >= 1) || (sharedMap2.CountBits() >= 1) ||
850 (sharedMap3.CountBits() >= 1))
857 Double_t dphiprlam = 0.;
859 TVector3 v3v0pr(casc->MomPosX(),casc->MomPosY(),casc->MomPosZ());
860 TVector3 v3lam(casc->Px(),casc->Py(),casc->Pz());
861 dphiprlam = v3v0pr.DeltaPhi(v3lam);
863 TVector3 v3v0pr(casc->MomNegX(),casc->MomNegY(),casc->MomNegZ());
864 TVector3 v3lam(casc->Px(),casc->Py(),casc->Pz());
865 dphiprlam = -1.*v3v0pr.DeltaPhi(v3lam);
868 if(dphiprlam>0)
return kFALSE;
870 if(dphiprlam<0)
return kFALSE;
884 if(!casc)
return kFALSE;
885 if(!part)
return kFALSE;
893 Double_t mxiPDG = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
894 Double_t massXi = casc->MassXi();
903 Double_t mxiPDG = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
904 Double_t massXi = casc->M();
913 Double_t mxiPDG = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
914 Double_t massXi = casc->MassXi();
915 Bool_t issideband = kFALSE;
924 Double_t mxiPDG = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
925 Double_t massXi = casc->M();
926 Bool_t issideband = kFALSE;
940 Bool_t isconv = kFALSE;
943 Int_t trkid = etrk->GetID();
944 Double_t px1 = etrk->Px();
945 Double_t py1 = etrk->Py();
946 Double_t pz1 = etrk->Pz();
947 Double_t E1 = sqrt(px1*px1+py1*py1+pz1*pz1+0.000511*0.000511);
949 for(Int_t it=0;it<ntrk;it++){
950 AliAODTrack *trk2 = (AliAODTrack*) evt->GetTrack(it);
952 Int_t trkid2 = trk2->GetID();
953 if(abs(trkid)==abs(trkid2))
continue;
954 if(etrk->Charge()*trk2->Charge()>0)
continue;
962 Double_t nSigmaTPCele = 9999.;
964 if(-trkid2-1>=19000)
continue;
965 if(-trkid2-1<0)
continue;
966 Int_t index = id2index[-trkid2-1];
967 AliAODTrack *partpid = (AliAODTrack*)evt->GetTrack(index);
972 if(fabs(nSigmaTPCele)>5.)
continue;
974 Double_t px2 = trk2->Px();
975 Double_t py2 = trk2->Py();
976 Double_t pz2 = trk2->Pz();
977 Double_t E2 = sqrt(px2*px2+py2*py2+pz2*pz2+0.000511*0.000511);
979 Double_t
mass = sqrt(pow(E1+E2,2)-pow(px1+px2,2)-pow(py1+py2,2)-pow(pz1+pz2,2));
980 if(mass<minmass) minmass =
mass;
995 Bool_t isconv = kFALSE;
998 Int_t trkid = etrk->GetID();
999 Double_t px1 = etrk->Px();
1000 Double_t py1 = etrk->Py();
1001 Double_t pz1 = etrk->Pz();
1002 Double_t E1 = sqrt(px1*px1+py1*py1+pz1*pz1+0.000511*0.000511);
1004 for(Int_t it=0;it<ntrk;it++){
1005 AliAODTrack *trk2 = (AliAODTrack*) evt->GetTrack(it);
1007 Int_t trkid2 = trk2->GetID();
1008 if(abs(trkid)==abs(trkid2))
continue;
1009 if(etrk->Charge()*trk2->Charge()<0)
continue;
1017 Double_t nSigmaTPCele = 9999.;
1019 if(-trkid2-1>=19000)
continue;
1020 if(-trkid2-1<0)
continue;
1021 Int_t index = id2index[-trkid2-1];
1022 AliAODTrack *partpid = (AliAODTrack*)evt->GetTrack(index);
1027 if(fabs(nSigmaTPCele)>5.)
continue;
1029 Double_t px2 = trk2->Px();
1030 Double_t py2 = trk2->Py();
1031 Double_t pz2 = trk2->Pz();
1032 Double_t E2 = sqrt(px2*px2+py2*py2+pz2*pz2+0.000511*0.000511);
1034 Double_t
mass = sqrt(pow(E1+E2,2)-pow(px1+px2,2)-pow(py1+py2,2)-pow(pz1+pz2,2));
1035 if(mass<minmass) minmass =
mass;
1055 AliExternalTrackParam etp;
1056 etp.CopyFromVTrack(track);
1059 Double_t xyz[3]={-9999.,-9999.,-9999.};
1062 const Float_t RSquaredWanted(125.*125.);
1066 for (Float_t x = 58.;x<247.;x+=1.){
1076 if(!etp.PropagateTo(x,(Float_t)bfield))
break;
1081 Float_t shiftedRadiusSquared = (xyz[0]-priVtx[0])*(xyz[0]-priVtx[0])
1082 + (xyz[1]-priVtx[1])*(xyz[1]-priVtx[1]);
1085 if(shiftedRadiusSquared > RSquaredWanted){
1089 while (shiftedRadiusSquared>RSquaredWanted){
1092 if(!etp.PropagateTo(x,bfield)){
1101 shiftedRadiusSquared = (xyz[0]-priVtx[0])*(xyz[0]-priVtx[0])
1102 + (xyz[1]-priVtx[1])*(xyz[1]-priVtx[1]);
1106 XSftR125[0]=xyz[0]-priVtx[0];
1107 XSftR125[1]=xyz[1]-priVtx[1];
1108 XSftR125[2]=xyz[2]-priVtx[2];
1125 Double_t ThetaS1 = TMath::Pi()/2. - TMath::ATan(postrack1[2]/125.);
1126 Double_t ThetaS2 = TMath::Pi()/2. - TMath::ATan(postrack2[2]/125.);
1127 Double_t EtaS1 = -TMath::Log( TMath::Tan(ThetaS1/2.) );
1128 Double_t EtaS2 = -TMath::Log( TMath::Tan(ThetaS2/2.) );
1141 Double_t distSft= TMath::Sqrt(TMath::Power(postrack1[0] - postrack2[0],2)
1142 +TMath::Power(postrack1[1] - postrack2[1],2));
1143 return 2.0 * TMath::ATan(distSft/2./(125.));
1148 AliAODTrack *trackn, Double_t bfield, Double_t priVtx[3], Double_t &dPhiS_ep, Double_t &dEtaS_ep,
1149 Double_t &dPhiS_en, Double_t &dEtaS_en, Double_t &dPhiS_eb, Double_t &dEtaS_eb)
1154 Double_t XSftR125_e[3];
1156 Double_t XSftR125_p[3];
1158 Double_t XSftR125_n[3];
1160 Double_t XSftR125_b[3];
1162 dPhiS_ep =
dPhiSR125(XSftR125_e,XSftR125_p);
1163 dEtaS_ep =
dEtaSR125(XSftR125_e,XSftR125_p);
1164 dPhiS_en =
dPhiSR125(XSftR125_e,XSftR125_n);
1165 dEtaS_en =
dEtaSR125(XSftR125_e,XSftR125_n);
1166 dPhiS_eb =
dPhiSR125(XSftR125_e,XSftR125_b);
1167 dEtaS_eb =
dEtaSR125(XSftR125_e,XSftR125_b);
1178 AliFatal(
"Cut matrix not inizialized. Exit...");
1182 Double_t ptD=sqrt(pow(vtrk->Px()+vcasc->Px(),2)+pow(vtrk->Px()+vcasc->Py(),2));
1187 Int_t ptbin=
PtBin(pt);
1197 Int_t returnvalueCuts=1;
1202 Bool_t okcand=kTRUE;
1204 Double_t mlcPDG = TDatabasePDG::Instance()->GetParticle(4132)->Mass();
1205 Double_t melePDG = TDatabasePDG::Instance()->GetParticle(11)->Mass();
1206 Double_t mxiPDG = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
1207 Double_t v0px = vcasc->Px();
1208 Double_t v0py = vcasc->Py();
1209 Double_t v0pz = vcasc->Pz();
1210 Double_t epx = vtrk->Px();
1211 Double_t epy = vtrk->Py();
1212 Double_t epz = vtrk->Pz();
1213 Double_t cosoa = (v0px*epx+v0py*epy+v0pz*epz)/sqrt(v0px*v0px+v0py*v0py+v0pz*v0pz)/sqrt(epx*epx+epy*epy+epz*epz);
1215 TLorentzVector vele, vxi,vlc;
1216 vele.SetXYZM(epx,epy,epz,melePDG);
1217 vxi.SetXYZM(v0px,v0py,v0pz,mxiPDG);
1220 Double_t dphis_e_pr = 9999.;
1221 Double_t detas_e_pr = 9999.;
1222 Double_t dphis_e_pi = 9999.;
1223 Double_t detas_e_pi = 9999.;
1224 Double_t dphis_e_bach = 9999.;
1225 Double_t detas_e_bach = 9999.;
1227 Double_t xyzR125_e[3], xyzR125_pr[3], xyzR125_pi[3], xyzR125_bach[3];
1228 xyzR125_e[0] = cutvars[0];
1229 xyzR125_e[1] = cutvars[1];
1230 xyzR125_e[2] = cutvars[2];
1231 xyzR125_pr[0] = cutvars[3];
1232 xyzR125_pr[1] = cutvars[4];
1233 xyzR125_pr[2] = cutvars[5];
1234 xyzR125_pi[0] = cutvars[6];
1235 xyzR125_pi[1] = cutvars[7];
1236 xyzR125_pi[2] = cutvars[8];
1237 xyzR125_bach[0] = cutvars[9];
1238 xyzR125_bach[1] = cutvars[10];
1239 xyzR125_bach[2] = cutvars[11];
1240 dphis_e_pr =
dPhiSR125(xyzR125_e,xyzR125_pr);
1241 detas_e_pr =
dPhiSR125(xyzR125_e,xyzR125_pr);
1242 dphis_e_pi =
dPhiSR125(xyzR125_e,xyzR125_pi);
1243 detas_e_pi =
dPhiSR125(xyzR125_e,xyzR125_pi);
1244 dphis_e_bach =
dPhiSR125(xyzR125_e,xyzR125_bach);
1245 detas_e_bach =
dPhiSR125(xyzR125_e,xyzR125_bach);
1269 if(!okcand)
return 0;
1270 returnvalueCuts = 1;
1273 Int_t returnvaluePID=1;
1279 Int_t returnvalue = 0;
1280 if(returnvalueCuts==1 && returnvaluePID==1) returnvalue=1;
1290 Double_t phiv = atan2(casc->MomXiY(),casc->MomXiX());
1291 if(phiv<-M_PI) phiv += 2 *M_PI;
1292 if(phiv> M_PI) phiv -= 2 *M_PI;
1293 Double_t phie = trk->Phi();
1294 if(phie<-M_PI) phie += 2 *M_PI;
1295 if(phie> M_PI) phie -= 2 *M_PI;
1296 Double_t dphi = phiv - phie;
1297 if(dphi<-M_PI) dphi += 2 *M_PI;
1298 if(dphi> M_PI) dphi -= 2 *M_PI;
1307 Double_t ptotxi = TMath::Sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2)+pow(casc->MomXiZ(),2));
1308 Double_t etav = 0.5*TMath::Log((ptotxi+casc->MomXiZ())/(ptotxi-casc->MomXiZ()));
1309 Double_t etae = trk->Eta();
1310 Double_t deta = etav - etae;
Bool_t IsSelectedCustomizedPtDepeID(AliAODTrack *trk, AliAODTrack *trkpid)
Int_t fUseV0Topology
PID object for cascade-proton.
Double_t fConversionMassMax
nSigma to exclude for Kaon band
Double_t fSigmaElectronTPCMax
nSigma electron lower limit (par2)
AliRDHFCutsXictoeleXifromAODtracks(const char *name="CutsXictoeleXi")
Bool_t IsSelectedCombinedeID(AliAODTrack *trk)
Bool_t fExcludePionTPC
pT cut for Lc used before object creation
Double_t fProdRfidMaxV0
Minimum Decay vertex of V0.
Bool_t SingleCascadeCuts(AliAODcascade *casc, Double_t *vert)
Double_t dEtaSR125(Double_t *postrack1, Double_t *postrack2)
AliRDHFCutsXictoeleXifromAODtracks & operator=(const AliRDHFCutsXictoeleXifromAODtracks &source)
Double_t fProdDcaV0PrToPrimVertexMin
Min Dca between v0 and PV.
Bool_t fExcludeKaonTPC
Flag wheter to exlude proton band.
Double_t fProdV0CosineOfPoiningAngleXiMin
Min Xi cos pointing angle to PV.
Double_t fCombinedPIDThreshold
PID strategy.
Double_t fExcludenSigmaPionTPC
Flag wheter to exlude proton band.
Double_t GetSigma(Int_t idet) const
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d, Float_t *vars, Int_t nvars, Int_t *pdgdaughters)
Double_t fProdCascEtaMin
Minimum number of TPC clusters.
Double_t fProdMassTolXi
Tolerance of Xi mass from PDG value (including sideband)
Double_t fProdDcaBachToPrimVertexMin
Max Dca between V0 daughters.
virtual ~AliRDHFCutsXictoeleXifromAODtracks()
Double_t fProdMassRejOmega
Tolerance of Xi mass from PDG value.
Double_t fProdTrackTPCNclsRatioMin
Min. Number of TPC PID cluster.
Double_t fProdDcaV0DaughtersMax
Max Dca between Xi daughters.
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *obj)
Double_t fExcludenSigmaKaonTPC
nSigma to exclude for proton band
Double_t fProdRfidMaxXi
Minimum Decay vertex of Xi.
Double_t fSigmaElectronTPCMin
nSigma to exclude for Kaon band
Double_t fProdDcaV0ToPrimVertexMin
Min Dca between Bachelor and PV.
Bool_t fExcludeProtonTPC
Flag wheter to exlude pion band.
Double_t fProdDcaXiDaughtersMax
mL/p of cascade
void SetNVars(Int_t nVars)
Double_t fProdRoughMassTol
Maximum Pt of cascade.
Bool_t TagConversionsSameSign(AliAODTrack *etrk, Int_t *id2index, AliAODEvent *evt, Int_t ntrk, Double_t &minmass)
EPIDStrategy fPIDStrategy
AliAODPidHF * fPidObjCascPr
PID object for cascade-pion.
Double_t fProdCascRapMin
Maximum eta of cascade.
AliRDHFCuts & operator=(const AliRDHFCuts &source)
Bool_t TagConversions(AliAODTrack *etrk, Int_t *id2index, AliAODEvent *evt, Int_t ntrk, Double_t &minmass)
Double_t fPrimVert[3]
B field.
Bool_t fUseCascadePID
Threshold used in IsSelectedCombinedPID.
Double_t fSigmaElectronTOFMin
nSigma to exclude for Kaon band
Double_t fProdDcaV0PiToPrimVertexMin
Min Dca between v0-proton and PV.
Bool_t fProdRejectTrackWithShared
AOD filter Bit used before object creation.
Double_t fProdMassTolLambda
Flag to Reject tracks with shared clusters.
Bool_t IsSelectedeID(AliAODTrack *trk)
Double_t fProdRfidMinXi
Max Decay vertex of V0.
Bool_t SelectWithRoughCuts(AliAODcascade *casc, AliAODTrack *trk1)
Double_t fSigmaElectronTPCPtDepPar1
nSigma electron lower limit (par0)
Double_t fBzkG
0: Cowboy+Sailor 1: Cowboy 2:Sailor
Bool_t IsSideBand(AliAODcascade *c)
Bool_t IsPeakRegion(AliAODcascade *c)
Double_t fSigmaElectronTPCPtDepPar0
nSigma to exclude for Kaon band
Double_t fMaxPtCand
minimum pt of the candidate
AliESDtrackCuts * fTrackCuts
quality cuts on the daughter tracks
void SetSftPosR125(AliAODTrack *track, Double_t bfield, Double_t priVtx[3], Double_t *XSftR125)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Double_t fSigmaElectronTPCPtDepPar2
nSigma electron lower limit (par1)
Bool_t IsSelectedCustomizedeID(AliAODTrack *trk)
AliAODTrack * GetBachelor() const
Double_t fSigmaElectronTOFMax
nSigma to exclude for Kaon band
Int_t fProdTrackTPCNclsPIDMin
Primary vertex.
Int_t MakeRawPid(AliAODTrack *track, Int_t specie)
AliPIDResponse * GetPidResponse() const
Double_t fProdCascEtaMax
Minimum eta of cascade.
Float_t * fCutsRD
fnVars*fnPtBins
Double_t fProdMassTolXiRough
Tolerance of Lambda mass from PDG value.
Double_t fProdXiCosineOfPoiningAngleMin
Min Dca between v0-pion and PV.
Double_t fProdCascProperDecayLengthMax
Max Decay vertex of Xi.
void SetVarsForOpt(Int_t nVars, Bool_t *forOpt)
void SetVarNames(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Bool_t * fVarsForOpt
number of cut vars to be optimized for candidates
Double_t fProdCascNTPCClustersMin
Min V0 cos pointing angle to Xi vertex.
Double_t fProdCascRapMax
Minimum rapidity of cascade.
Bool_t fProdUseAODFilterBit
Min. Number of TPC PID cluster.
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
Int_t IsSelectedCombinedPID(AliAODRecoDecayHF *obj)
AliAODPidHF * fPidObjCascPi
Use PID for cascade or not.
Double_t fProdRfidMinV0
Rejection range of Omega mass from PDG value.
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
Double_t fExcludenSigmaProtonTPC
nSigma to exclude for pion band
Double_t fProdCascPtMin
Maximum rapidity of cascade.
Bool_t SingleTrkCutsNoPID(AliAODTrack *trk, AliAODTrack *trkpid, AliAODVertex *primvert)
Int_t fProdAODFilterBit
Flag for AOD filter Bit used before object creation.
Double_t fProdRoughPtMin
Mass cut for Lc used before object creation.
Bool_t SingleTrkCuts(AliAODTrack *trk, AliAODTrack *trkpid, AliAODVertex *primvert)
Double_t GetdPhiSdEtaSR125(AliAODTrack *tracke, AliAODTrack *trackp, AliAODTrack *trackn, AliAODTrack *trackb, 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 &dPhiS_eb, Double_t &dEtaS_eb)
Double_t DeltaPhi(AliAODcascade *casc, AliAODTrack *trk)
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
Double_t DeltaEta(AliAODcascade *casc, AliAODTrack *trk)
Int_t PtBin(Double_t pt) const
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
Double_t fProdCascPtMax
Minimum Pt of cascade.
Double_t fMinPtCand
outcome of PID selection
Bool_t IsDaughterSelected(AliAODTrack *track, const AliESDVertex *primary, AliESDtrackCuts *cuts, const AliAODEvent *aod=0x0) const
Double_t dPhiSR125(Double_t *postrack1, Double_t *postrack2)
void SetPidResponse(AliPIDResponse *pidResp)