if(TMath::Abs(PtProng(2)) < cuts[2] || TMath::Abs(Getd0Prong(2))<cuts[4])return kFALSE;//Pion2
//DCA
- for(Int_t i=0;i<3;i++) if(cuts[11]>0 && GetDCA(i)>cuts[11])return kFALSE;
+ for(Int_t i=0;i<3;i++) if(GetDCA(i)>cuts[11])return kFALSE;
//2track cuts
if(fDist12toPrim<cuts[5] || fDist23toPrim<cuts[5])return kFALSE;
// cuts[9] = cosThetaPoint
// cuts[10] = Sum d0^2 (cm^2)
// cuts[11] = dca cut (cm)
+// cuts[12] = max. inv. mass difference(Mphi-MKK and MK0*-MKpi) [GeV]
//
// If candidate Ds does not pass the cuts return kFALSE
//
//single track
if(TMath::Abs(PtProng(0)) < cuts[1] || TMath::Abs(Getd0Prong(0))<cuts[3])return kFALSE;//Kaon1
if(TMath::Abs(PtProng(1)) < cuts[1] || TMath::Abs(Getd0Prong(1))<cuts[3])return kFALSE;//Kaon2
- if(TMath::Abs(PtProng(2)) < cuts[2] || TMath::Abs(Getd0Prong(2))<cuts[4])return kFALSE;//Pion2
+ if(TMath::Abs(PtProng(2)) < cuts[2] || TMath::Abs(Getd0Prong(2))<cuts[4])return kFALSE;//Pion
+ // cuts on resonant decays (via Phi or K0*)
+ Bool_t okMassPhi=1;
+ Double_t mass01phi=InvMass2Prongs(0,1,321,321);
+ Double_t mass12phi=InvMass2Prongs(1,2,321,321);
+ Double_t mPhiPDG = TDatabasePDG::Instance()->GetParticle(333)->Mass();
+ if(TMath::Abs(mass01phi-mPhiPDG)>cuts[12] && TMath::Abs(mass12phi-mPhiPDG)>cuts[12]) okMassPhi = 0;
+ Bool_t okMassK0star=1;
+ Double_t mass01K0s=InvMass2Prongs(0,1,211,321);
+ Double_t mass12K0s=InvMass2Prongs(1,2,321,211);
+ Double_t mK0sPDG = TDatabasePDG::Instance()->GetParticle(313)->Mass();
+ if(TMath::Abs(mass01K0s-mK0sPDG)>cuts[12] && TMath::Abs(mass12K0s-mK0sPDG)>cuts[12]) okMassK0star = 0;
+ if(!okMassPhi && !okMassK0star) return kFALSE;
+
//DCA
- for(Int_t i=0;i<3;i++) if(cuts[11]>0 && GetDCA(i)>cuts[11])return kFALSE;
+ for(Int_t i=0;i<3;i++) if(GetDCA(i)>cuts[11])return kFALSE;
//2track cuts
if(fDist12toPrim<cuts[5] || fDist23toPrim<cuts[5])return kFALSE;
- if(Getd0Prong(0)*Getd0Prong(1)<0. && Getd0Prong(2)*Getd0Prong(1)<0.)return kFALSE;
//sec vert
if(fSigmaVert>cuts[6])return kFALSE;
if(TMath::Abs(PtProng(2)) < cuts[2] || TMath::Abs(Getd0Prong(2))<cuts[4])return kFALSE;//Pion
//DCA
- for(Int_t i=0;i<3;i++) if(cuts[11]>0 && GetDCA(i)>cuts[11])return kFALSE;
+ for(Int_t i=0;i<3;i++) if(GetDCA(i)>cuts[11])return kFALSE;
//2track cuts
if(fDist12toPrim<cuts[5] || fDist23toPrim<cuts[5])return kFALSE;
for(Int_t i=0; i<9; i++) fD0toKpiCuts[i]=source.fD0toKpiCuts[i];
for(Int_t i=0; i<9; i++) fBtoJPSICuts[i]=source.fBtoJPSICuts[i];
for(Int_t i=0; i<12; i++) fDplusCuts[i]=source.fDplusCuts[i];
- for(Int_t i=0; i<12; i++) fDsCuts[i]=source.fDsCuts[i];
+ for(Int_t i=0; i<13; i++) fDsCuts[i]=source.fDsCuts[i];
for(Int_t i=0; i<12; i++) fLcCuts[i]=source.fLcCuts[i];
}
//--------------------------------------------------------------------------
for(Int_t i=0; i<9; i++) fD0toKpiCuts[i]=source.fD0toKpiCuts[i];
for(Int_t i=0; i<9; i++) fBtoJPSICuts[i]=source.fBtoJPSICuts[i];
for(Int_t i=0; i<12; i++) fDplusCuts[i]=source.fDplusCuts[i];
- for(Int_t i=0; i<12; i++) fDsCuts[i]=source.fDsCuts[i];
+ for(Int_t i=0; i<13; i++) fDsCuts[i]=source.fDsCuts[i];
for(Int_t i=0; i<12; i++) fLcCuts[i]=source.fLcCuts[i];
return *this;
printf(" dca cut [cm] < %f\n",fDplusCuts[11]);
printf(" Ds->KKpi cuts:\n");
printf(" |M-MDs| [GeV] < %f\n",fDsCuts[0]);
- printf(" pTK [GeV/c] > %f\n",fDplusCuts[1]);
- printf(" pTPi [GeV/c] > %f\n",fDplusCuts[2]);
- printf(" |d0K| [cm] > %f\n",fDplusCuts[3]);
- printf(" |d0Pi| [cm] > %f\n",fDplusCuts[4]);
- printf(" dist12 [cm] < %f\n",fDplusCuts[5]);
- printf(" sigmavert [cm] < %f\n",fDplusCuts[6]);
- printf(" dist prim-sec [cm] > %f\n",fDplusCuts[7]);
- printf(" pM=Max{pT1,pT2,pT3} [GeV/c] > %f\n",fDplusCuts[8]);
- printf(" cosThetaPoint > %f\n",fDplusCuts[9]);
- printf(" Sum d0^2 [cm^2] > %f\n",fDplusCuts[10]);
- printf(" dca cut [cm] < %f\n",fDplusCuts[11]);
+ printf(" pTK [GeV/c] > %f\n",fDsCuts[1]);
+ printf(" pTPi [GeV/c] > %f\n",fDsCuts[2]);
+ printf(" |d0K| [cm] > %f\n",fDsCuts[3]);
+ printf(" |d0Pi| [cm] > %f\n",fDsCuts[4]);
+ printf(" dist12 [cm] < %f\n",fDsCuts[5]);
+ printf(" sigmavert [cm] < %f\n",fDsCuts[6]);
+ printf(" dist prim-sec [cm] > %f\n",fDsCuts[7]);
+ printf(" pM=Max{pT1,pT2,pT3} [GeV/c] > %f\n",fDsCuts[8]);
+ printf(" cosThetaPoint > %f\n",fDsCuts[9]);
+ printf(" Sum d0^2 [cm^2] > %f\n",fDsCuts[10]);
+ printf(" dca cut [cm] < %f\n",fDsCuts[11]);
+ printf(" Inv. Mass phi/K0* [GeV] < %f\n",fDsCuts[12]);
printf(" Lc->pKpi cuts:\n");
printf(" |M-MLc| [GeV] < %f\n",fLcCuts[0]);
- printf(" pTP [GeV/c] > %f\n",fDplusCuts[1]);
- printf(" pTPi and pTK [GeV/c] > %f\n",fDplusCuts[2]);
- printf(" |d0P| [cm] > %f\n",fDplusCuts[3]);
- printf(" |d0Pi| and |d0K| [cm] > %f\n",fDplusCuts[4]);
- printf(" dist12 [cm] < %f\n",fDplusCuts[5]);
- printf(" sigmavert [cm] < %f\n",fDplusCuts[6]);
- printf(" dist prim-sec [cm] > %f\n",fDplusCuts[7]);
- printf(" pM=Max{pT1,pT2,pT3} [GeV/c] > %f\n",fDplusCuts[8]);
- printf(" cosThetaPoint > %f\n",fDplusCuts[9]);
- printf(" Sum d0^2 [cm^2] > %f\n",fDplusCuts[10]);
- printf(" dca cut [cm] < %f\n",fDplusCuts[11]);
+ printf(" pTP [GeV/c] > %f\n",fLcCuts[1]);
+ printf(" pTPi and pTK [GeV/c] > %f\n",fLcCuts[2]);
+ printf(" |d0P| [cm] > %f\n",fLcCuts[3]);
+ printf(" |d0Pi| and |d0K| [cm] > %f\n",fLcCuts[4]);
+ printf(" dist12 [cm] < %f\n",fLcCuts[5]);
+ printf(" sigmavert [cm] < %f\n",fLcCuts[6]);
+ printf(" dist prim-sec [cm] > %f\n",fLcCuts[7]);
+ printf(" pM=Max{pT1,pT2,pT3} [GeV/c] > %f\n",fLcCuts[8]);
+ printf(" cosThetaPoint > %f\n",fLcCuts[9]);
+ printf(" Sum d0^2 [cm^2] > %f\n",fLcCuts[10]);
+ printf(" dca cut [cm] < %f\n",fLcCuts[11]);
printf(" Ds->KKpi cuts:\n");
- printf(" |M-MDs| [GeV] < %f\n",fDsCuts[0]);
- printf(" Lc->pKpi cuts:\n");
- printf(" |M-MD+| [GeV] < %f\n",fLcCuts[0]);
}
return;
Double_t cut2,Double_t cut3,Double_t cut4,
Double_t cut5,Double_t cut6,
Double_t cut7,Double_t cut8,
- Double_t cut9,Double_t cut10,Double_t cut11)
+ Double_t cut9,Double_t cut10,
+ Double_t cut11,Double_t cut12)
{
// Set the cuts for Ds->KKpi selection
fDsCuts[0] = cut0;
fDsCuts[9] = cut9;
fDsCuts[10] = cut10;
fDsCuts[11] = cut11;
+ fDsCuts[12] = cut12;
return;
}
//-----------------------------------------------------------------------------
-void AliAnalysisVertexingHF::SetDsCuts(const Double_t cuts[12])
+void AliAnalysisVertexingHF::SetDsCuts(const Double_t cuts[13])
{
// Set the cuts for Ds->KKpi selection
- for(Int_t i=0; i<12; i++) fDsCuts[i] = cuts[i];
+ for(Int_t i=0; i<13; i++) fDsCuts[i] = cuts[i];
return;
}
Double_t cut5=0.,Double_t cut6=10000000000.,
Double_t cut7=0.,Double_t cut8=0.,
Double_t cut9=-1.1,Double_t cut10=0.,
- Double_t cut11=0.);
+ Double_t cut11=10000000000.);
void SetDplusCuts(const Double_t cuts[12]);
void SetDsCuts(Double_t cut0=1000.,Double_t cut1=0.,
Double_t cut2=0.,Double_t cut3=0.,Double_t cut4=0.,
Double_t cut5=0.,Double_t cut6=10000000000.,
Double_t cut7=0.,Double_t cut8=0.,
Double_t cut9=-1.1,Double_t cut10=0.,
- Double_t cut11=0.);
- void SetDsCuts(const Double_t cuts[12]);
+ Double_t cut11=10000000000., Double_t cut12=1000.);
+ void SetDsCuts(const Double_t cuts[13]);
void SetLcCuts(Double_t cut0=1000.,Double_t cut1=0.,
Double_t cut2=0.,Double_t cut3=0.,Double_t cut4=0.,
Double_t cut5=0.,Double_t cut6=10000000000.,
Double_t cut7=0.,Double_t cut8=0.,
Double_t cut9=-1.1,Double_t cut10=0.,
- Double_t cut11=0.);
+ Double_t cut11=10000000000.);
void SetLcCuts(const Double_t cuts[12]);
//
// 9 = cosThetaPoint
// 10 = Sum d0^2 (cm^2)
// 11 = dca cut (cm)
- Double_t fDsCuts[12]; // cuts on Ds candidates
+ Double_t fDsCuts[13]; // cuts on Ds candidates
// (to be passed to AliAODRecoDecayHF3Prong::SelectDs())
// 0 = inv. mass half width [GeV]
// 1 = pTK [GeV/c]
// 9 = cosThetaPoint
// 10 = Sum d0^2 (cm^2)
// 11 = dca cut (cm)
- Double_t fLcCuts[12]; // cuts on Lambdac candidates
+ // 12 = inv. mass cut arounf phi and K0* [GeV]
+ Double_t fLcCuts[12]; // cuts on Lambdac candidates
// (to be passed to AliAODRecoDecayHF3Prong::SelectLc())
// 0 = inv. mass half width [GeV]
// 1 = pTP [GeV/c]
vHF->SetD0toKpiCuts(0.2,999999.,1.1,0.,0.,999999.,999999.,999999.,0.3);
vHF->SetBtoJPSICuts(0.350);
vHF->SetDplusCuts(0.2,0.,0.,0.,0.,0.01,0.06,0.,0.,0.8);
- vHF->SetDsCuts(0.2,0.,0.,0.,0.,0.01,0.06,0.,0.,0.8);
+ vHF->SetDsCuts(0.2,0.,0.,0.,0.,0.005,0.06,0.,0.,0.8,0.,0.1,0.1);
vHF->SetLcCuts(0.2,0.,0.,0.,0.,0.01,0.06,0.,0.,0.8);
//--- set this if you want to reconstruct primary vertex candidate by
// candidate using other tracks in the event (for pp, broad