Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
175 changes: 87 additions & 88 deletions ALICE3/DataModel/A3DecayFinderTables.h

Large diffs are not rendered by default.

45 changes: 22 additions & 23 deletions ALICE3/ML/alice3-mlresponse3prong.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
#ifndef ALICE3_ML_ALICE3MLRESPONSE3PRONG_H_
#define ALICE3_ML_ALICE3MLRESPONSE3PRONG_H_

#include "Tools/ML/MlResponse.h"
#include "PWGHF/DataModel/CandidateReconstructionTables.h"

#include "Tools/ML/MlResponse.h"
Expand All @@ -38,10 +37,10 @@

// Specific case of CHECK_AND_FILL_ML_ALICE3_FULL(OBJECT, FEATURE, GETTER)
// where OBJECT is named candidate and FEATURE = GETTER
#define CHECK_AND_FILL_ML_ALICE3(GETTER) \
case static_cast<uint8_t>(InputFeatures3Prong::GETTER): { \
inputFeatures.emplace_back(candidate.GETTER()); \
break; \
#define CHECK_AND_FILL_ML_ALICE3(GETTER) \
case static_cast<uint8_t>(InputFeatures3Prong::GETTER): { \
inputFeatures.emplace_back(candidate.GETTER()); \
break; \
}

namespace o2::analysis
Expand All @@ -62,15 +61,15 @@ enum class InputFeatures3Prong : uint8_t {
cpa,
cpaXY,
chi2PCA,
nSigRichPr0, // 0
nSigRichKa0, // 0
nSigRichPi0, // 0
nSigRichPr1, // 1
nSigRichKa1, // 1
nSigRichPi1, // 1
nSigRichPr2, // 2
nSigRichKa2, // 2
nSigRichPi2, // 2
nSigRichPr0, // 0
nSigRichKa0, // 0
nSigRichPi0, // 0
nSigRichPr1, // 1
nSigRichKa1, // 1
nSigRichPi1, // 1
nSigRichPr2, // 2
nSigRichKa2, // 2
nSigRichPi2, // 2
nSigInnTofPr0, // 0
nSigInnTofKa0, // 0
nSigInnTofPi0, // 0
Expand All @@ -89,15 +88,15 @@ enum class InputFeatures3Prong : uint8_t {
nSigOutTofPr2, // 2
nSigOutTofKa2, // 2
nSigOutTofPi2, // 2
nSigTrkPr0, // 0
nSigTrkKa0, // 0
nSigTrkPi0, // 0
nSigTrkPr1, // 1
nSigTrkKa1, // 1
nSigTrkPi1, // 1
nSigTrkPr2, // 2
nSigTrkKa2, // 2
nSigTrkPi2 // 2
nSigTrkPr0, // 0
nSigTrkKa0, // 0
nSigTrkPi0, // 0
nSigTrkPr1, // 1
nSigTrkKa1, // 1
nSigTrkPi1, // 1
nSigTrkPr2, // 2
nSigTrkKa2, // 2
nSigTrkPi2 // 2
};

template <typename TypeOutputScore = float>
Expand Down
141 changes: 70 additions & 71 deletions ALICE3/TableProducer/alice3-decayfinder.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -17,38 +17,40 @@
// HF decays. Work in progress: use at your own risk!
//

#include <cmath>
#include <array>
#include <cstdlib>
#include <map>
#include <iterator>
#include <utility>
#include "PWGHF/Utils/utilsAnalysis.h"
#include "PWGLF/DataModel/LFParticleIdentification.h"
#include "PWGLF/DataModel/LFStrangenessTables.h"

#include "Framework/runDataProcessing.h"
#include "Framework/RunningWorkflowInfo.h"
#include "Framework/AnalysisTask.h"
#include "Framework/AnalysisDataModel.h"
#include "Framework/ASoAHelpers.h"
#include "DCAFitter/DCAFitterN.h"
#include "ReconstructionDataFormats/Track.h"
#include "ALICE3/DataModel/A3DecayFinderTables.h"
#include "ALICE3/DataModel/OTFPIDTrk.h"
#include "ALICE3/DataModel/OTFRICH.h"
#include "ALICE3/DataModel/OTFTOF.h"
#include "ALICE3/DataModel/RICH.h"
#include "Common/Core/RecoDecay.h"
#include "Common/Core/trackUtilities.h"
#include "PWGLF/DataModel/LFStrangenessTables.h"
#include "PWGLF/DataModel/LFParticleIdentification.h"
#include "Common/Core/TrackSelection.h"
#include "Common/Core/trackUtilities.h"
#include "Common/DataModel/TrackSelectionTables.h"
#include "DetectorsBase/Propagator.h"
#include "DetectorsBase/GeometryManager.h"
#include "DataFormatsParameters/GRPObject.h"
#include "DataFormatsParameters/GRPMagField.h"

#include "CCDB/BasicCCDBManager.h"
#include "DCAFitter/DCAFitterN.h"
#include "DataFormatsCalibration/MeanVertexObject.h"
#include "ALICE3/DataModel/OTFTOF.h"
#include "ALICE3/DataModel/OTFPIDTrk.h"
#include "ALICE3/DataModel/OTFRICH.h"
#include "ALICE3/DataModel/RICH.h"
#include "ALICE3/DataModel/A3DecayFinderTables.h"
#include "PWGHF/Utils/utilsAnalysis.h"
#include "DataFormatsParameters/GRPMagField.h"
#include "DataFormatsParameters/GRPObject.h"
#include "DetectorsBase/GeometryManager.h"
#include "DetectorsBase/Propagator.h"
#include "Framework/ASoAHelpers.h"
#include "Framework/AnalysisDataModel.h"
#include "Framework/AnalysisTask.h"
#include "Framework/RunningWorkflowInfo.h"
#include "Framework/runDataProcessing.h"
#include "ReconstructionDataFormats/Track.h"

#include <array>
#include <cmath>
#include <cstdlib>
#include <iterator>
#include <map>
#include <utility>

using namespace o2;
using namespace o2::analysis;
Expand All @@ -68,13 +70,13 @@
struct alice3decayFinder {
SliceCache cache;

Produces<aod::Alice3D0Meson> candidateD0meson; // contains D0 and D0bar selected candidates (separated, i.e. each row with a single mass hypothesis)
Produces<aod::Alice3D0Sel> selectionOutcome; // flags for isSelD0 and isSelD0bar
Produces<aod::Alice3D0MCTruth> mcTruthOutcome; // contains MC truth info (is true D0, true D0bar, or bkg)
Produces<aod::Alice3Cand3Ps> candidate3Prong; // contains Lc selected candidates
Produces<aod::Alice3McRecFlags> mcRecFlags; // contains MC truth info (is true Lc, or bkg)
Produces<aod::Alice3PidLcs> pidInfoLcDaugs; // contains PID info for Lc candidates
Produces<aod::Alice3McGenFlags> mcGenFlags; // contains MC gen info for 3-prong candidates
Produces<aod::Alice3D0Meson> candidateD0meson; // contains D0 and D0bar selected candidates (separated, i.e. each row with a single mass hypothesis)
Produces<aod::Alice3D0Sel> selectionOutcome; // flags for isSelD0 and isSelD0bar
Produces<aod::Alice3D0MCTruth> mcTruthOutcome; // contains MC truth info (is true D0, true D0bar, or bkg)
Produces<aod::Alice3Cand3Ps> candidate3Prong; // contains Lc selected candidates
Produces<aod::Alice3McRecFlags> mcRecFlags; // contains MC truth info (is true Lc, or bkg)
Produces<aod::Alice3PidLcs> pidInfoLcDaugs; // contains PID info for Lc candidates
Produces<aod::Alice3McGenFlags> mcGenFlags; // contains MC gen info for 3-prong candidates

Configurable<bool> fillSwapHypo{"fillSwapHypo", true, "swap prong 0 and prong 2 in 3-prong case"};
// Vertexing
Expand Down Expand Up @@ -149,10 +151,10 @@

HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject};

Partition<aod::McParticles> trueD = aod::mcparticle::pdgCode == 421;

Check failure on line 154 in ALICE3/TableProducer/alice3-decayfinder.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
Partition<aod::McParticles> trueDbar = aod::mcparticle::pdgCode == -421;

Check failure on line 155 in ALICE3/TableProducer/alice3-decayfinder.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
Partition<aod::McParticles> trueLc = aod::mcparticle::pdgCode == 4122;

Check failure on line 156 in ALICE3/TableProducer/alice3-decayfinder.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
Partition<aod::McParticles> trueLcbar = aod::mcparticle::pdgCode == -4122;

Check failure on line 157 in ALICE3/TableProducer/alice3-decayfinder.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.

// filter expressions for D mesons
static constexpr uint32_t trackSelectionPiPlusFromD = 1 << kInnerTOFPion | 1 << kOuterTOFPion | 1 << kRICHPion | 1 << kTruePiPlusFromD;
Expand All @@ -171,8 +173,8 @@
// partitions for D mesons
Partition<Alice3TracksWPid> tracksPiPlusFromD =
((aod::a3DecayMap::decayMap & trackSelectionPiPlusFromD) == trackSelectionPiPlusFromD) &&
aod::track::signed1Pt > 0.0f &&
nabs(aod::track::dcaXY) > piFromD_dcaXYconstant + piFromD_dcaXYpTdep* nabs(aod::track::signed1Pt);
aod::track::signed1Pt > 0.0f &&
nabs(aod::track::dcaXY) > piFromD_dcaXYconstant + piFromD_dcaXYpTdep* nabs(aod::track::signed1Pt);
Partition<Alice3TracksWPid> tracksPiMinusFromD =
((aod::a3DecayMap::decayMap & trackSelectionPiMinusFromD) == trackSelectionPiMinusFromD) && aod::track::signed1Pt < 0.0f && nabs(aod::track::dcaXY) > piFromD_dcaXYconstant + piFromD_dcaXYpTdep* nabs(aod::track::signed1Pt);
Partition<Alice3TracksWPid> tracksKaPlusFromD =
Expand Down Expand Up @@ -215,36 +217,36 @@
float normalizedDecayLength;
int mcTruth; // 0 = bkg, 1 = D0, 2 = D0bar
} dmeson;

struct {
float dcaDau;
float mass;
float pt;
float phi;
float eta;
std::array<float, 3> Pdaug0; // proton track
std::array<float, 3> Pdaug1; // kaon track
std::array<float, 3> Pdaug2; // pion track
std::array<float, 3> primaryVertex; // primary vertex coordinates
std::array<float, 3> Pdaug0; // proton track
std::array<float, 3> Pdaug1; // kaon track
std::array<float, 3> Pdaug2; // pion track
std::array<float, 3> primaryVertex; // primary vertex coordinates
std::array<float, 3> secondaryVertex; // secondary vertex coordinates
float impactParameterY0; // impact parameters
float errorImpactParameterY0; // impact parameters error
float impactParameterY1; // impact parameters
float errorImpactParameterY1; // impact parameters error
float impactParameterY2; // impact parameters
float errorImpactParameterY2; // impact parameters error
float impactParameterZ0; // impact parameters
float errorImpactParameterZ0; // impact parameters error
float impactParameterZ1; // impact parameters
float errorImpactParameterZ1; // impact parameters error
float impactParameterZ2; // impact parameters
float errorImpactParameterZ2; // impact parameters error
float errorDecayLength; // normalized 3D decay length
float errorDecayLengthXY; // normalized 3D decay length
float chi2PCA; // normalized 3D decay length
int flagMc; // 0 = bkg, pdg code for signal
int origin; // 1 = prompt, 2 = non-prompt
float ptBMotherRec; // pT of the B hadron mother (reconstructed)
float impactParameterY0; // impact parameters
float errorImpactParameterY0; // impact parameters error
float impactParameterY1; // impact parameters
float errorImpactParameterY1; // impact parameters error
float impactParameterY2; // impact parameters
float errorImpactParameterY2; // impact parameters error
float impactParameterZ0; // impact parameters
float errorImpactParameterZ0; // impact parameters error
float impactParameterZ1; // impact parameters
float errorImpactParameterZ1; // impact parameters error
float impactParameterZ2; // impact parameters
float errorImpactParameterZ2; // impact parameters error
float errorDecayLength; // normalized 3D decay length
float errorDecayLengthXY; // normalized 3D decay length
float chi2PCA; // normalized 3D decay length
int flagMc; // 0 = bkg, pdg code for signal
int origin; // 1 = prompt, 2 = non-prompt
float ptBMotherRec; // pT of the B hadron mother (reconstructed)
} cand3prong;

template <typename TTrackType>
Expand Down Expand Up @@ -281,12 +283,12 @@
dmeson.Ndaug[2] = negP[2];

// return mass and kinematic variables
dmeson.mass = RecoDecay::m(array{array{posP[0], posP[1], posP[2]}, array{negP[0], negP[1], negP[2]}}, array{posMass, negMass});

Check failure on line 286 in ALICE3/TableProducer/alice3-decayfinder.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
dmeson.pt = std::hypot(posP[0] + negP[0], posP[1] + negP[1]);
dmeson.ptdaugPos = std::hypot(posP[0], posP[1]);
dmeson.ptdaugNeg = std::hypot(negP[0], negP[1]);
dmeson.phi = RecoDecay::phi(array{posP[0] + negP[0], posP[1] + negP[1]});

Check failure on line 290 in ALICE3/TableProducer/alice3-decayfinder.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
dmeson.eta = RecoDecay::eta(array{posP[0] + negP[0], posP[1] + negP[1], posP[2] + negP[2]});

Check failure on line 291 in ALICE3/TableProducer/alice3-decayfinder.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
dmeson.y = RecoDecay::y(std::array{posP[0] + negP[0], posP[1] + negP[1], posP[2] + negP[2]}, dmeson.mass);
const auto posSV = fitter.getPCACandidate();
dmeson.posSV[0] = posSV[0];
Expand Down Expand Up @@ -338,7 +340,7 @@
return false;
}
//}-{}-{}-{}-{}-{}-{}-{}-{}-{}

auto covMatrixPCA = fitter3.calcPCACovMatrixFlat();
cand3prong.chi2PCA = fitter3.getChi2AtPCACandidate();
cand3prong.dcaDau = TMath::Sqrt(fitter3.getChi2AtPCACandidate());
Expand All @@ -353,7 +355,7 @@
trackParVar0 = fitter3.getTrack(0);
trackParVar1 = fitter3.getTrack(1);
trackParVar2 = fitter3.getTrack(2);

std::array<float, 3> P0{};
std::array<float, 3> P1{};
std::array<float, 3> P2{};
Expand Down Expand Up @@ -395,14 +397,14 @@
cand3prong.errorImpactParameterZ2 = impactParameter2.getSigmaZ2();

// return mass
cand3prong.mass = RecoDecay::m(array{array{P0[0], P0[1], P0[2]},

Check failure on line 400 in ALICE3/TableProducer/alice3-decayfinder.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
array{P1[0], P1[1], P1[2]},
array{P2[0], P2[1], P2[2]}},
array{P1[0], P1[1], P1[2]},
array{P2[0], P2[1], P2[2]}},
daughtersMasses3Prong);

cand3prong.pt = std::hypot(P0[0] + P1[0] + P2[0], P0[1] + P1[1] + P2[1]);
cand3prong.phi = RecoDecay::phi(array{P0[0] + P1[0] + P2[0], P0[1] + P1[1] + P2[1]});

Check failure on line 406 in ALICE3/TableProducer/alice3-decayfinder.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
cand3prong.eta = RecoDecay::eta(array{P0[0] + P1[0] + P2[0], P0[1] + P1[1] + P2[1], P0[2] + P1[2] + P2[2]});

Check failure on line 407 in ALICE3/TableProducer/alice3-decayfinder.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
cand3prong.Pdaug0[0] = P0[0];
cand3prong.Pdaug0[1] = P0[1];
cand3prong.Pdaug0[2] = P0[2];
Expand All @@ -423,7 +425,7 @@
} else {
cand3prong.flagMc = motherPart.pdgCode() > 0 ? charmHadFlag : -charmHadFlag; // Particle
}

cand3prong.origin = 0;
if (indexRec > 0) {
LOG(info) << "indexRec: " << indexRec;
Expand Down Expand Up @@ -589,7 +591,6 @@
histos.add("h2dDCAxyVsPtPrMinusFrom3P", "h2dDCAxyVsPtPrMinusFrom3P", kTH2F, {axisPt, axisDCA});
histos.add("hDcaXYProngs", "DCAxy of 3-prong candidate daughters;#it{p}_{T} (GeV/#it{c};#it{d}_{xy}) (#mum);entries", {HistType::kTH2F, {{100, 0., 20.}, {200, -500., 500.}}});
histos.add("hDcaZProngs", "DCAz of 3-prong candidate daughters;#it{p}_{T} (GeV/#it{c};#it{d}_{z}) (#mum);entries", {HistType::kTH2F, {{100, 0., 20.}, {200, -500., 500.}}});

}
}

Expand Down Expand Up @@ -661,7 +662,7 @@
if (mcParticle.pdgCode() > 0) {
LOG(info) << "[P] Origin: " << origin << " PDG: " << charmHadFlag << " " << mcParticle.pdgCode();
histos.fill(HIST("h2dGen3Prong"), mcParticle.pt(), mcParticle.eta());
} else {
} else {
histos.fill(HIST("h2dGen3ProngBar"), mcParticle.pt(), mcParticle.eta());
LOG(info) << "[AP] Origin: " << origin << " PDG: " << -charmHadFlag << " " << mcParticle.pdgCode();
}
Expand Down Expand Up @@ -985,7 +986,7 @@
}
//*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*

template<typename TProng>
template <typename TProng>
void fillPidTable(TProng const& prong0, TProng const& prong1, TProng const& prong2)
{
if (motherPdgCode == o2::constants::physics::Pdg::kLambdaCPlus) {
Expand All @@ -998,7 +999,7 @@
}

//*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*
template<bool FillSwapHypo, typename TProng>
template <bool FillSwapHypo, typename TProng>
void fill3ProngTable(aod::Collision const& collision, TProng const& prongs0, TProng const& prongs1, TProng const& prongs2, aod::McParticles const& mcParticles)
{
// LOG(info) << "Filling 3-prong candidates with nprongs0: " << prongs0.size() << ", nprongs1: " << prongs1.size() << ", nprongs2: " << prongs2.size();
Expand Down Expand Up @@ -1042,8 +1043,7 @@
std::sqrt(cand3prong.errorImpactParameterZ1),
std::sqrt(cand3prong.errorImpactParameterZ2),
false, // is swapped hypothesis
candPx, candPy, candPz
);
candPx, candPy, candPz);
mcRecFlags(cand3prong.origin, cand3prong.ptBMotherRec, cand3prong.flagMc); // placeholder for prompt/non-prompt
fillPidTable(prong0, prong1, prong2);

Expand All @@ -1070,8 +1070,7 @@
std::sqrt(cand3prong.errorImpactParameterZ1),
std::sqrt(cand3prong.errorImpactParameterZ0),
true, // is swapped hypothesis
candPx, candPy, candPz
);
candPx, candPy, candPz);
mcRecFlags(cand3prong.origin, cand3prong.ptBMotherRec, cand3prong.flagMc); // placeholder for prompt/non-prompt
fillPidTable(prong2, prong1, prong0);
}
Expand Down
2 changes: 1 addition & 1 deletion ALICE3/TableProducer/alice3-decaypreselector.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ struct alice3decaypreselector {
if (!checkPDG(track, +4122, +211)) { //+4122 -> +2212 -321 +211
bitoff(selectionMap[track.globalIndex()], kTruePiPlusFromLc);
}
if (!checkPDG(track, -4122, -2212)){ //-4122 -> -2212 +321 -211
if (!checkPDG(track, -4122, -2212)) { //-4122 -> -2212 +321 -211
bitoff(selectionMap[track.globalIndex()], kTruePrMinusFromLc);
}
if (!checkPDG(track, -4122, +321)) { //-4122 -> -2212 +321 -211
Expand Down
25 changes: 12 additions & 13 deletions ALICE3/TableProducer/alice3-selector3prong.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,17 @@
///
/// \author Marcello Di Costanzo <marcello.di.costanzo@cern.ch>, Polytechnic University of Turin and INFN Turin

#include "ALICE3/ML/alice3-mlresponse3prong.h"
#include "ALICE3/DataModel/OTFTOF.h"
#include "ALICE3/DataModel/OTFPIDTrk.h"
#include "ALICE3/DataModel/OTFRICH.h"
#include "ALICE3/DataModel/RICH.h"
#include "ALICE3/DataModel/A3DecayFinderTables.h"

#include "PWGHF/Core/HfHelper.h"
#include "PWGHF/Core/SelectorCuts.h"
#include "PWGHF/DataModel/CandidateReconstructionTables.h"
#include "PWGHF/DataModel/CandidateSelectionTables.h"

#include "ALICE3/DataModel/A3DecayFinderTables.h"
#include "ALICE3/DataModel/OTFPIDTrk.h"
#include "ALICE3/DataModel/OTFRICH.h"
#include "ALICE3/DataModel/OTFTOF.h"
#include "ALICE3/DataModel/RICH.h"
#include "ALICE3/ML/alice3-mlresponse3prong.h"
#include "Common/Core/TrackSelectorPID.h"
#include "Common/DataModel/PIDResponseCombined.h"

Expand Down Expand Up @@ -61,7 +60,7 @@ enum Particles {

/// Struct for applying Lc selection cuts
struct Alice3Selector3Prong {
Produces<aod::Alice3Sel3Ps> candSelFlags; // flags for isSelLc
Produces<aod::Alice3Sel3Ps> candSelFlags; // flags for isSelLc
Produces<aod::Alice3Ml3Ps> candMlScores;

Configurable<double> ptCandMin{"ptCandMin", 0., "Lower bound of cand pT"};
Expand Down Expand Up @@ -241,14 +240,14 @@ struct Alice3Selector3Prong {
/// \param pidTrack0 is the PID status of proton cand track
/// \param pidTrack1 is the PID status of kaon cand track
/// \param pidTrack2 is the PID status of pion cand track
template<CharmHadAlice3 CharmHad, typename TCand>
template <CharmHadAlice3 CharmHad, typename TCand>
void configurePidMask(const TCand& cand, uint32_t& pidMask)
{

auto isSelPid = [&] (int selCut, float nsigma, float pt, float nSigmaMax, float ptMin, float ptMax)
{
auto isSelPid = [&](int selCut, float nsigma, float pt, float nSigmaMax, float ptMin, float ptMax) {
bool isSelected = !(pt >= ptMin && pt < ptMax && std::abs(nsigma) > nSigmaMax);
if (isSelected) SETBIT(pidMask, selCut);
if (isSelected)
SETBIT(pidMask, selCut);
return isSelected;
};

Expand Down Expand Up @@ -291,7 +290,7 @@ struct Alice3Selector3Prong {
bool isSel = false;
std::vector<float> outputMl{-1.f, -1.f, -1.f};
uint32_t pidMask = 0;

// looping over 3-prong cands
for (const auto& cand : cands) {
isSel = false;
Expand Down
Loading
Loading