Skip to content

Commit 8a0a3dd

Browse files
[PWGHF,Trigger] Add ITSPID slection on the deuteron of LcDe femto trigger (#9863)
1 parent 9682bc6 commit 8a0a3dd

File tree

2 files changed

+25
-17
lines changed

2 files changed

+25
-17
lines changed

EventFiltering/PWGHF/HFFilter.cxx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
#include "Common/Core/trackUtilities.h"
4444
#include "Common/DataModel/CollisionAssociationTables.h"
4545
#include "Common/DataModel/EventSelection.h"
46+
#include "Common/DataModel/PIDResponseITS.h"
4647
#include "PWGEM/PhotonMeson/DataModel/gammaTables.h"
4748
#include "PWGHF/DataModel/CandidateReconstructionTables.h"
4849
#include "PWGHF/DataModel/CandidateSelectionTables.h"
@@ -52,6 +53,7 @@
5253
#include "PWGHF/Utils/utilsTrkCandHf.h"
5354

5455
using namespace o2;
56+
using namespace o2::soa;
5557
using namespace o2::analysis;
5658
using namespace o2::aod::hffilters;
5759
using namespace o2::framework;
@@ -71,7 +73,7 @@ struct HfFilter { // Main struct for HF triggers
7173

7274
// parameters for all triggers
7375
// nsigma PID (except for V0 and cascades)
74-
Configurable<LabeledArray<float>> nSigmaPidCuts{"nSigmaPidCuts", {cutsNsigma[0], 3, 7, labelsRowsNsigma, labelsColumnsNsigma}, "Nsigma cuts for TPC/TOF PID (except for V0 and cascades)"};
76+
Configurable<LabeledArray<float>> nSigmaPidCuts{"nSigmaPidCuts", {cutsNsigma[0], 4, 7, labelsRowsNsigma, labelsColumnsNsigma}, "Nsigma cuts for ITS/TPC/TOF PID (except for V0 and cascades)"};
7577
// min and max pts for tracks and bachelors (except for V0 and cascades)
7678
Configurable<LabeledArray<float>> ptCuts{"ptCuts", {cutsPt[0], 2, 7, labelsRowsCutsPt, labelsColumnsCutsPt}, "minimum and maximum pT for bachelor tracks (except for V0 and cascades)"};
7779

@@ -202,8 +204,8 @@ struct HfFilter { // Main struct for HF triggers
202204
helper.setCutsSingleTrackBeauty(cutsTrackBeauty3Prong, cutsTrackBeauty4Prong);
203205
helper.setCutsSingleTrackCharmBaryonBachelor(cutsTrackCharmBaryonBachelor);
204206
helper.setCutsBhadrons(cutsBplus, cutsBzeroToDstar, cutsBzero, cutsBs, cutsLb, cutsXib);
205-
helper.setNsigmaProtonCutsForFemto(std::array{nSigmaPidCuts->get(0u, 3u), nSigmaPidCuts->get(1u, 3u), nSigmaPidCuts->get(2u, 3u)});
206-
helper.setNsigmaDeuteronCutsForFemto(std::array{nSigmaPidCuts->get(0u, 6u), nSigmaPidCuts->get(1u, 6u), nSigmaPidCuts->get(2u, 6u)});
207+
helper.setNsigmaProtonCutsForFemto(std::array{nSigmaPidCuts->get(0u, 3u), nSigmaPidCuts->get(1u, 3u), nSigmaPidCuts->get(2u, 3u), nSigmaPidCuts->get(3u, 3u)});
208+
helper.setNsigmaDeuteronCutsForFemto(std::array{nSigmaPidCuts->get(0u, 6u), nSigmaPidCuts->get(1u, 6u), nSigmaPidCuts->get(2u, 6u), nSigmaPidCuts->get(3u, 6u)});
207209
helper.setNsigmaProtonCutsForCharmBaryons(nSigmaPidCuts->get(0u, 0u), nSigmaPidCuts->get(1u, 0u));
208210
helper.setNsigmaPionKaonCutsForDzero(nSigmaPidCuts->get(0u, 1u), nSigmaPidCuts->get(1u, 1u));
209211
helper.setNsigmaKaonCutsFor3Prongs(nSigmaPidCuts->get(0u, 2u), nSigmaPidCuts->get(1u, 2u));
@@ -303,8 +305,8 @@ struct HfFilter { // Main struct for HF triggers
303305
if (activateQA > 1) {
304306
hProtonTPCPID = registry.add<TH2>("fProtonTPCPID", "#it{N}_{#sigma}^{TPC} vs. #it{p} for selected protons;#it{p} (GeV/#it{c});#it{N}_{#sigma}^{TPC}", HistType::kTH2D, {pAxis, nSigmaAxis});
305307
hProtonTOFPID = registry.add<TH2>("fProtonTOFPID", "#it{N}_{#sigma}^{TOF} vs. #it{p} for selected protons;#it{p} (GeV/#it{c});#it{N}_{#sigma}^{TOF}", HistType::kTH2D, {pAxis, nSigmaAxis});
306-
hDeuteronTPCPID = registry.add<TH2>("hDeuteronTPCPID", "#it{N}_{#sigma}^{TPC} vs. #it{p} for selected deuterons;#it{p} (GeV/#it{c});#it{N}_{#sigma}^{TPC}", HistType::kTH2D, {pAxis, nSigmaAxis});
307-
hDeuteronTOFPID = registry.add<TH2>("hDeuteronTOFPID", "#it{N}_{#sigma}^{TOF} vs. #it{p} for selected deuterons;#it{p} (GeV/#it{c});#it{N}_{#sigma}^{TOF}", HistType::kTH2D, {pAxis, nSigmaAxis});
308+
hDeuteronTPCPID = registry.add<TH2>("fDeuteronTPCPID", "#it{N}_{#sigma}^{TPC} vs. #it{p} for selected deuterons;#it{p} (GeV/#it{c});#it{N}_{#sigma}^{TPC}", HistType::kTH2D, {pAxis, nSigmaAxis});
309+
hDeuteronTOFPID = registry.add<TH2>("fDeuteronTOFPID", "#it{N}_{#sigma}^{TOF} vs. #it{p} for selected deuterons;#it{p} (GeV/#it{c});#it{N}_{#sigma}^{TOF}", HistType::kTH2D, {pAxis, nSigmaAxis});
308310

309311
hV0Selected = registry.add<TH2>("fV0Selected", "Selections for V0s;;counts", HistType::kTH2D, {{9, -0.5, 8.5}, {kNV0, -0.5, +kNV0 - 0.5}});
310312

@@ -491,8 +493,9 @@ struct HfFilter { // Main struct for HF triggers
491493
auto massD0BarCand = RecoDecay::m(std::array{pVecPos, pVecNeg}, std::array{massKa, massPi});
492494

493495
auto trackIdsThisCollision = trackIndices.sliceBy(trackIndicesPerCollision, thisCollId);
496+
auto tracksWithItsPid = soa::Attach<BigTracksPID, aod::pidits::ITSNSigmaPr, aod::pidits::ITSNSigmaDe>(tracks);
494497
for (const auto& trackId : trackIdsThisCollision) { // start loop over tracks
495-
auto track = tracks.rawIteratorAt(trackId.trackId());
498+
auto track = tracksWithItsPid.rawIteratorAt(trackId.trackId());
496499

497500
if (track.globalIndex() == trackPos.globalIndex() || track.globalIndex() == trackNeg.globalIndex()) {
498501
continue;
@@ -976,9 +979,10 @@ struct HfFilter { // Main struct for HF triggers
976979
} // end high-pT selection
977980

978981
auto trackIdsThisCollision = trackIndices.sliceBy(trackIndicesPerCollision, thisCollId);
982+
auto tracksWithItsPid = soa::Attach<BigTracksPID, aod::pidits::ITSNSigmaPr, aod::pidits::ITSNSigmaDe>(tracks);
979983

980984
for (const auto& trackId : trackIdsThisCollision) { // start loop over track indices as associated to this collision in HF code
981-
auto track = tracks.rawIteratorAt(trackId.trackId());
985+
auto track = tracksWithItsPid.rawIteratorAt(trackId.trackId());
982986
if (track.globalIndex() == trackFirst.globalIndex() || track.globalIndex() == trackSecond.globalIndex() || track.globalIndex() == trackThird.globalIndex()) {
983987
continue;
984988
}

EventFiltering/PWGHF/HFFilterHelpers.h

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -281,11 +281,14 @@ static const std::vector<std::string> labelsColumnsCutsPt = {"Beauty", "DstarPlu
281281
static const std::vector<std::string> labelsRowsCutsPt = {"Minimum", "Maximum"};
282282

283283
// PID cuts
284-
constexpr float cutsNsigma[3][7] = {{3., 3., 3., 5., 3., 3., 5.}, // TPC proton from Lc, pi/K from D0, K from 3-prong, femto selected proton, pi/K from Xic/Omegac, K from Xic*->SigmaC-Kaon, femto selected deuteron
285-
{3., 3., 3., 2.5, 3., 3., 5.}, // TOF proton from Lc, pi/K from D0, K from 3-prong, femto selected proton, pi/K from Xic/Omegac, K from Xic*->SigmaC-Kaon, femto selected deuteron
286-
{999., 999., 999., 2.5, 999., 999., 5.}}; // Sum in quadrature of TPC and TOF (used only for femto selected proton and deuteron for pT < 4 GeV/c)
284+
constexpr float cutsNsigma[4][7] = {
285+
{3., 3., 3., 5., 3., 3., 5.}, // TPC proton from Lc, pi/K from D0, K from 3-prong, femto selected proton, pi/K from Xic/Omegac, K from Xic*->SigmaC-Kaon, femto selected deuteron
286+
{3., 3., 3., 2.5, 3., 3., 5.}, // TOF proton from Lc, pi/K from D0, K from 3-prong, femto selected proton, pi/K from Xic/Omegac, K from Xic*->SigmaC-Kaon, femto selected deuteron
287+
{999., 999., 999., 2.5, 999., 999., 5.}, // Sum in quadrature of TPC and TOF (used only for femto selected proton and deuteron for pT < 4 GeV/c)
288+
{999., 999., 999., 999., 999., 999., 4.} // used only for femto selected deuteron for less than pt threshold
289+
};
287290
static const std::vector<std::string> labelsColumnsNsigma = {"PrFromLc", "PiKaFromDZero", "KaFrom3Prong", "PrForFemto", "PiKaFromCharmBaryon", "SoftKaonFromXicResoToSigmaC", "DeForFemto"};
288-
static const std::vector<std::string> labelsRowsNsigma = {"TPC", "TOF", "Comb"};
291+
static const std::vector<std::string> labelsRowsNsigma = {"TPC", "TOF", "Comb", "ITS"};
289292

290293
// high pt
291294
constexpr float cutsHighPtThresholds[1][2] = {{8., 8.}}; // 2-prongs, 3-prongs
@@ -436,8 +439,8 @@ class HfFilterHelper
436439
mPtMaxCharmBaryonBachelor = maxPt;
437440
}
438441

439-
void setNsigmaProtonCutsForFemto(std::array<float, 3> nSigmaCuts) { mNSigmaPrCutsForFemto = nSigmaCuts; }
440-
void setNsigmaDeuteronCutsForFemto(std::array<float, 3> nSigmaCuts) { mNSigmaDeCutsForFemto = nSigmaCuts; }
442+
void setNsigmaProtonCutsForFemto(std::array<float, 4> nSigmaCuts) { mNSigmaPrCutsForFemto = nSigmaCuts; }
443+
void setNsigmaDeuteronCutsForFemto(std::array<float, 4> nSigmaCuts) { mNSigmaDeCutsForFemto = nSigmaCuts; }
441444
void setNsigmaProtonCutsForCharmBaryons(float nSigmaTpc, float nSigmaTof)
442445
{
443446
mNSigmaTpcPrCutForCharmBaryons = nSigmaTpc;
@@ -633,8 +636,8 @@ class HfFilterHelper
633636
float mPtMinSigmaC2520Zero{0.f}; // pt min SigmaC(2520)0 candidate
634637
float mPtMinSigmaCPlusPlus{0.f}; // pt min SigmaC++ candidate
635638
float mPtMinSigmaC2520PlusPlus{0.f}; // pt min SigmaC(2520)++ candidate
636-
std::array<float, 3> mNSigmaPrCutsForFemto{3., 3., 3.}; // cut values for Nsigma TPC, TOF, combined for femto protons
637-
std::array<float, 3> mNSigmaDeCutsForFemto{3., 3., 3.}; // cut values for Nsigma TPC, TOF, combined for femto deuterons
639+
std::array<float, 4> mNSigmaPrCutsForFemto{3., 3., 3., 4.}; // cut values for Nsigma TPC, TOF, combined, ITS for femto protons
640+
std::array<float, 4> mNSigmaDeCutsForFemto{3., 3., 3., 4.}; // cut values for Nsigma TPC, TOF, combined, ITS for femto deuterons
638641
float mNSigmaTpcPrCutForCharmBaryons{3.}; // maximum Nsigma TPC for protons in Lc and Xic decays
639642
float mNSigmaTofPrCutForCharmBaryons{3.}; // maximum Nsigma TOF for protons in Lc and Xic decays
640643
float mNSigmaTpcKaCutFor3Prongs{3.}; // maximum Nsigma TPC for kaons in 3-prong decays
@@ -802,7 +805,7 @@ inline bool HfFilterHelper::isSelectedTrack4Femto(const T1& track, const T2& tra
802805
{
803806
float pt = trackPar.getPt();
804807
float ptMin, ptMax, ptThresholdPidStrategy;
805-
std::array<float, 3> nSigmaCuts;
808+
std::array<float, 4> nSigmaCuts;
806809
bool forceTof = false; // flag to force TOF PID
807810

808811
// Assign particle-specific parameters
@@ -838,6 +841,7 @@ inline bool HfFilterHelper::isSelectedTrack4Femto(const T1& track, const T2& tra
838841
return false; // use only global tracks
839842
}
840843
// PID evaluation
844+
float NSigmaITS = (trackSpecies == kProtonForFemto) ? track.itsNSigmaPr() : track.itsNSigmaDe(); // only used for deuteron
841845
float NSigmaTPC = (trackSpecies == kProtonForFemto) ? track.tpcNSigmaPr() : track.tpcNSigmaDe();
842846
float NSigmaTOF = (trackSpecies == kProtonForFemto) ? track.tofNSigmaPr() : track.tofNSigmaDe();
843847
if (!forceTof && !track.hasTOF()) {
@@ -872,7 +876,7 @@ inline bool HfFilterHelper::isSelectedTrack4Femto(const T1& track, const T2& tra
872876
if (trackSpecies == kDeuteronForFemto) {
873877
// Apply different PID strategy in different pt range
874878
if (pt <= ptThresholdPidStrategy) {
875-
if (std::fabs(NSigmaTPC) > nSigmaCuts[0]) { // Use only TPC below the threshold
879+
if (std::fabs(NSigmaTPC) > nSigmaCuts[0] && std::fabs(NSigmaITS) > nSigmaCuts[3]) { // Use TPC and ITS below the threshold
876880
return false;
877881
}
878882
} else {

0 commit comments

Comments
 (0)