threeTrackArray->AddAt(postrack2,2);
}
if(fMassCutBeforeVertexing)
- massCutOK = SelectInvMass(threeTrackArray);
+ massCutOK = SelectInvMassAndPt(threeTrackArray);
}
if(f3Prong && !massCutOK) {
// check invariant mass cuts for D0
massCutOK=kTRUE;
if(fMassCutBeforeVertexing)
- massCutOK = SelectInvMass(fourTrackArray);
+ massCutOK = SelectInvMassAndPt(fourTrackArray);
if(!massCutOK) {
fourTrackArray->Clear();
// check invariant mass cuts for D+,Ds,Lc
massCutOK=kTRUE;
if(fMassCutBeforeVertexing && f3Prong)
- massCutOK = SelectInvMass(threeTrackArray);
+ massCutOK = SelectInvMassAndPt(threeTrackArray);
if(!massCutOK) {
threeTrackArray->Clear();
// invariant mass cut (try to improve coding here..)
Bool_t okMassCut=kFALSE;
- if(!okMassCut && fD0toKpi) if(SelectInvMass(0,2,px,py,pz)) okMassCut=kTRUE;
- if(!okMassCut && fJPSItoEle) if(SelectInvMass(1,2,px,py,pz)) okMassCut=kTRUE;
- if(!okMassCut && fDstar) if(SelectInvMass(3,2,px,py,pz)) okMassCut=kTRUE;
+ if(!okMassCut && fD0toKpi) if(SelectInvMassAndPt(0,2,px,py,pz)) okMassCut=kTRUE;
+ if(!okMassCut && fJPSItoEle) if(SelectInvMassAndPt(1,2,px,py,pz)) okMassCut=kTRUE;
+ if(!okMassCut && fDstar) if(SelectInvMassAndPt(3,2,px,py,pz)) okMassCut=kTRUE;
if(!okMassCut) {
AliDebug(2," candidate didn't pass mass cut");
return 0x0;
// invariant mass cut for D+, Ds, Lc
Bool_t okMassCut=kFALSE;
if(fMassCutBeforeVertexing) okMassCut=kTRUE; // mass cut already done and passed
- if(!okMassCut && f3Prong) if(SelectInvMass(2,3,px,py,pz)) okMassCut=kTRUE;
+ if(!okMassCut && f3Prong) if(SelectInvMassAndPt(2,3,px,py,pz)) okMassCut=kTRUE;
if(!okMassCut) {
AliDebug(2," candidate didn't pass mass cut");
return 0x0;
Bool_t okMassCut=kFALSE;
if(fMassCutBeforeVertexing) okMassCut=kTRUE; // mass cut already done and passed
if(!okMassCut && !(fCutsD0toKpipipi->GetUsePID())) { //no PID, to be implemented with PID
- if(SelectInvMass(4,4,px,py,pz)) okMassCut=kTRUE;
+ if(SelectInvMassAndPt(4,4,px,py,pz)) okMassCut=kTRUE;
}
if(!okMassCut) {
//if(fDebug) printf(" candidate didn't pass mass cut\n");
return vertexAOD;
}
//-----------------------------------------------------------------------------
-Bool_t AliAnalysisVertexingHF::SelectInvMass(TObjArray *trkArray) const {
+Bool_t AliAnalysisVertexingHF::SelectInvMassAndPt(TObjArray *trkArray) const {
// Invariant mass cut on tracks
Int_t nProngs=trkArray->GetEntriesFast();
px3[1] = momentum[0]; py3[1] = momentum[1]; pz3[1] = momentum[2];
postrack2->GetPxPyPz(momentum);
px3[2] = momentum[0]; py3[2] = momentum[1]; pz3[2] = momentum[2];
- retval = SelectInvMass(2,3,px3,py3,pz3);
+ retval = SelectInvMassAndPt(2,3,px3,py3,pz3);
break;
case 4:
// invariant mass cut for D0->4prong
px4[2] = momentum[0]; py4[2] = momentum[1]; pz4[2] = momentum[2];
negtrack2->GetPxPyPz(momentum);
px4[3] = momentum[0]; py4[3] = momentum[1]; pz4[3] = momentum[2];
- retval = SelectInvMass(4,4,px4,py4,pz4);
+ retval = SelectInvMassAndPt(4,4,px4,py4,pz4);
break;
default:
- printf("SelectInvMass(): wrong decay selection\n");
+ printf("SelectInvMassAndPt(): wrong decay selection\n");
break;
}
return retval;
}
//-----------------------------------------------------------------------------
-Bool_t AliAnalysisVertexingHF::SelectInvMass(Int_t decay,
+Bool_t AliAnalysisVertexingHF::SelectInvMassAndPt(Int_t decay,
Int_t nprongs,
Double_t *px,
Double_t *py,
Double_t *pz) const {
- // Check invariant mass cut
+ // Check invariant mass cut and pt candidate cut
UInt_t pdg2[2],pdg3[3],pdg4[4];
Double_t mPDG,minv;
+ Double_t minPt=0;
Bool_t retval=kFALSE;
switch (decay)
{
case 0: // D0->Kpi
fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
+ // pt cut
+ minPt=fCutsD0toKpi->GetMinPtCandidate();
+ if(minPt>0.1)
+ if(fMassCalc2->Pt2() < minPt*minPt) break;
+ // mass cut
pdg2[0]=211; pdg2[1]=321;
mPDG=TDatabasePDG::Instance()->GetParticle(421)->Mass();
minv = fMassCalc2->InvMass(nprongs,pdg2);
break;
case 1: // JPSI->ee
fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
+ // pt cut
+ minPt=fCutsJpsitoee->GetMinPtCandidate();
+ if(minPt>0.1)
+ if(fMassCalc2->Pt2() < minPt*minPt) break;
+ // mass cut
pdg2[0]=11; pdg2[1]=11;
mPDG=TDatabasePDG::Instance()->GetParticle(443)->Mass();
minv = fMassCalc2->InvMass(nprongs,pdg2);
break;
case 2: // D+->Kpipi
fMassCalc3->SetPxPyPzProngs(nprongs,px,py,pz);
+ // pt cut
+ minPt=TMath::Min(fCutsDplustoKpipi->GetMinPtCandidate(),fCutsDstoKKpi->GetMinPtCandidate());
+ minPt=TMath::Min(minPt,fCutsLctopKpi->GetMinPtCandidate());
+ if(minPt>0.1)
+ if(fMassCalc3->Pt2() < minPt*minPt) break;
+ // mass cut
pdg3[0]=211; pdg3[1]=321; pdg3[2]=211;
mPDG=TDatabasePDG::Instance()->GetParticle(411)->Mass();
minv = fMassCalc3->InvMass(nprongs,pdg3);
break;
case 3: // D*->D0pi
fMassCalc2->SetPxPyPzProngs(nprongs,px,py,pz);
+ // pt cut
+ minPt=fCutsDStartoKpipi->GetMinPtCandidate();
+ if(minPt>0.1)
+ if(fMassCalc2->Pt2() < minPt*minPt) break;
+ // mass cut
pdg2[0]=211; pdg2[1]=421; // in twoTrackArrayCasc we put the pion first
mPDG=TDatabasePDG::Instance()->GetParticle(413)->Mass();
minv = fMassCalc2->InvMass(nprongs,pdg2);
break;
case 4: // D0->Kpipipi without PID
fMassCalc4->SetPxPyPzProngs(nprongs,px,py,pz);
+ // pt cut
+ minPt=fCutsD0toKpipipi->GetMinPtCandidate();
+ if(minPt>0.1)
+ if(fMassCalc4->Pt2() < minPt*minPt) break;
+ // mass cut
pdg4[0]=321; pdg4[1]=211; pdg4[2]=211; pdg4[3]=211;
mPDG=TDatabasePDG::Instance()->GetParticle(421)->Mass();
minv = fMassCalc4->InvMass(nprongs,pdg4);
if(TMath::Abs(minv-mPDG)<fCutsD0toKpipipi->GetMassCut()) retval=kTRUE;
break;
default:
- printf("SelectInvMass(): wrong decay selection\n");
+ printf("SelectInvMassAndPt(): wrong decay selection\n");
break;
}
esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
AliESDtrackCuts::kAny);
// |d0|>100 micron for pt<2GeV, no cut above 2
- esdTrackCuts->SetMinDCAToVertexXYPtDep("0.0050*TMath::Max(0.,(1-TMath::Floor(TMath::Abs(pt)/2.)))");
+ esdTrackCuts->SetMinDCAToVertexXYPtDep("0.0075*TMath::Max(0.,(1-TMath::Floor(TMath::Abs(pt)/2.)))");
esdTrackCuts->SetMaxDCAToVertexXY(1.);
esdTrackCuts->SetMaxDCAToVertexZ(1.);
esdTrackCuts->SetPtRange(0.8,1.e10);
cutsDplustoKpipi->SetPtBins(nptbins,ptlimits);
cutsDplustoKpipi->SetCuts(12,cutsArrayDplustoKpipi);
cutsDplustoKpipi->AddTrackCuts(esdTrackCuts);
+ cutsDplustoKpipi->SetMinPtCandidate(3.);
vHF->SetCutsDplustoKpipi(cutsDplustoKpipi);
AliRDHFCutsDstoKKpi *cutsDstoKKpi = new AliRDHFCutsDstoKKpi("CutsDstoKKpi");
cutsDstoKKpi->SetStandardCutsPbPb2010();
cutsDstoKKpi->SetPtBins(nptbins,ptlimits);
cutsDstoKKpi->SetCuts(14,cutsArrayDstoKKpi);
cutsDstoKKpi->AddTrackCuts(esdTrackCuts);
+ cutsDstoKKpi->SetMinPtCandidate(4.);
vHF->SetCutsDstoKKpi(cutsDstoKKpi);
AliRDHFCutsLctopKpi *cutsLctopKpi = new AliRDHFCutsLctopKpi("CutsLctopKpi");
cutsLctopKpi->SetStandardCutsPbPb2010();
cutsLctopKpi->SetPtBins(nptbins,ptlimits);
cutsLctopKpi->SetCuts(12,cutsArrayLctopKpi);
cutsLctopKpi->AddTrackCuts(esdTrackCuts);
- cutsLctopKpi->SetMinPtCandidate(3.);
+ cutsLctopKpi->SetMinPtCandidate(4.);
vHF->SetCutsLctopKpi(cutsLctopKpi);
AliRDHFCutsD0toKpipipi *cutsD0toKpipipi = new AliRDHFCutsD0toKpipipi("CutsD0toKpipipi");
Float_t cutsArrayD0toKpipipi[9]={0.2,0.04,0.00,0.01,0.02,0.8,0.,0.1,0.};
cutsDStartoKpipi->AddTrackCuts(esdTrackCuts);
cutsDStartoKpipi->AddTrackCutsSoftPi(esdTrackCutsSoftPi);
+ cutsDStartoKpipi->SetMinPtCandidate(3.);
vHF->SetCutsDStartoKpipi(cutsDStartoKpipi);
//--------------------------------------------------------