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
93 changes: 52 additions & 41 deletions PWGCF/Femto/Core/partitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,25 +56,29 @@
(o2::aod::femtobase::stored::mass > (selection).massMin) && \
(o2::aod::femtobase::stored::mass < (selection).massMax)

// partition for phis and rhos, i.e. resonance that are their own antiparticle
// partition for phis and rhos, i.e. resonance that are their own antiparticle -- both daughters are
// the same species, so the selection carries a single dauMask pair applied to both stored columns
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
#define MAKE_RESONANCE_0_PARTITON(selection) \
(o2::aod::femtobase::stored::pt > (selection).ptMin) && \
(o2::aod::femtobase::stored::pt < (selection).ptMax) && \
(o2::aod::femtobase::stored::eta > (selection).etaMin) && \
(o2::aod::femtobase::stored::eta < (selection).etaMax) && \
(o2::aod::femtobase::stored::phi > (selection).phiMin) && \
(o2::aod::femtobase::stored::phi < (selection).phiMax) && \
(o2::aod::femtobase::stored::mass > (selection).massMin) && \
(o2::aod::femtobase::stored::mass < (selection).massMax) && \
ifnode(o2::aod::femtotwotrackresonances::posDauHasHighMomentum, \
ncheckbit(o2::aod::femtotwotrackresonances::maskPosDau, (selection).posDauMaskAboveThres), \
ncheckbit(o2::aod::femtotwotrackresonances::maskPosDau, (selection).posDauMaskBelowThres)) && \
ifnode(o2::aod::femtotwotrackresonances::negDauHasHighMomentum, \
ncheckbit(o2::aod::femtotwotrackresonances::maskNegDau, (selection).negDauMaskAboveThres), \
ncheckbit(o2::aod::femtotwotrackresonances::maskNegDau, (selection).negDauMaskBelowThres))
#define MAKE_RESONANCE_0_PARTITON(selection) \
(o2::aod::femtobase::stored::pt > (selection).ptMin) && \
(o2::aod::femtobase::stored::pt < (selection).ptMax) && \
(o2::aod::femtobase::stored::eta > (selection).etaMin) && \
(o2::aod::femtobase::stored::eta < (selection).etaMax) && \
(o2::aod::femtobase::stored::phi > (selection).phiMin) && \
(o2::aod::femtobase::stored::phi < (selection).phiMax) && \
(o2::aod::femtobase::stored::mass > (selection).massMin) && \
(o2::aod::femtobase::stored::mass < (selection).massMax) && \
ifnode(o2::aod::femtotwotrackresonances::posDauHasHighMomentum, \
ncheckbit(o2::aod::femtotwotrackresonances::maskPosDau, (selection).dauMaskAboveThres), \
ncheckbit(o2::aod::femtotwotrackresonances::maskPosDau, (selection).dauMaskBelowThres)) && \
ifnode(o2::aod::femtotwotrackresonances::negDauHasHighMomentum, \
ncheckbit(o2::aod::femtotwotrackresonances::maskNegDau, (selection).dauMaskAboveThres), \
ncheckbit(o2::aod::femtotwotrackresonances::maskNegDau, (selection).dauMaskBelowThres))

// partition for kstars, they have distinct antiparticle
// partition for kstars, they have distinct antiparticle -- K*0 (K+ pi-) and K*0bar (K- pi+) swap
// which physical daughter (pos/neg) is the kaon vs the pion, so the selection carries masks named by
// species (kaon/pion) and this macro resolves pos/neg <-> kaon/pion from the candidate's own
// signedPt, the same way it's reconstructed (no need for the user to reason about this downstream)
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
#define MAKE_RESONANCE_1_PARTITON(selection) \
ifnode((selection).sign.node() != 0, \
Expand All @@ -87,12 +91,19 @@
(o2::aod::femtobase::stored::phi < (selection).phiMax) && \
(o2::aod::femtobase::stored::mass > (selection).massMin) && \
(o2::aod::femtobase::stored::mass < (selection).massMax) && \
ifnode(o2::aod::femtotwotrackresonances::posDauHasHighMomentum, \
ncheckbit(o2::aod::femtotwotrackresonances::maskPosDau, (selection).posDauMaskAboveThres), \
ncheckbit(o2::aod::femtotwotrackresonances::maskPosDau, (selection).posDauMaskBelowThres)) && \
ifnode(o2::aod::femtotwotrackresonances::negDauHasHighMomentum, \
ncheckbit(o2::aod::femtotwotrackresonances::maskNegDau, (selection).negDauMaskAboveThres), \
ncheckbit(o2::aod::femtotwotrackresonances::maskNegDau, (selection).negDauMaskBelowThres))
ifnode(o2::aod::femtobase::stored::signedPt > 0.f, \
ifnode(o2::aod::femtotwotrackresonances::posDauHasHighMomentum, \
ncheckbit(o2::aod::femtotwotrackresonances::maskPosDau, (selection).kaonDauMaskAboveThres), \
ncheckbit(o2::aod::femtotwotrackresonances::maskPosDau, (selection).kaonDauMaskBelowThres)) && \
ifnode(o2::aod::femtotwotrackresonances::negDauHasHighMomentum, \
ncheckbit(o2::aod::femtotwotrackresonances::maskNegDau, (selection).pionDauMaskAboveThres), \
ncheckbit(o2::aod::femtotwotrackresonances::maskNegDau, (selection).pionDauMaskBelowThres)), \
ifnode(o2::aod::femtotwotrackresonances::posDauHasHighMomentum, \
ncheckbit(o2::aod::femtotwotrackresonances::maskPosDau, (selection).pionDauMaskAboveThres), \
ncheckbit(o2::aod::femtotwotrackresonances::maskPosDau, (selection).pionDauMaskBelowThres)) && \
ifnode(o2::aod::femtotwotrackresonances::negDauHasHighMomentum, \
ncheckbit(o2::aod::femtotwotrackresonances::maskNegDau, (selection).kaonDauMaskAboveThres), \
ncheckbit(o2::aod::femtotwotrackresonances::maskNegDau, (selection).kaonDauMaskBelowThres)))

// partition for resonances built from two photons (pi0, eta, ...): unlike MAKE_RESONANCE_0/1_PARTITON
// there is no sign and no momentum-threshold PID switch, and just a single mask check -- both
Expand All @@ -111,25 +122,25 @@
ncheckbit(o2::aod::femtotwophotonresonances::maskDau, (selection).dauMask)

// partition for resonances built from two tracks and a two-photon resonance (e.g. omega(782) ->
// pi+ pi- pi0): same pattern as MAKE_RESONANCE_1_PARTITON (daughter masks copied onto the candidate
// at build time, systematics reselected here), just with 3 daughter masks instead of 2 -- the two
// charged daughters keep their momentum-threshold PID switch, the neutral daughter does not
// pi+ pi- pi0): same pattern as MAKE_RESONANCE_0_PARTITON (both charged daughters are the same
// species -- pions, just opposite charge, no kstar-style species swap -- so a single dauMask pair
// covers both), plus a 3rd mask for the neutral daughter (no momentum-threshold split there)
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
#define MAKE_TRACKTRACKTWOPHOTONRESONANCE_PARTITION(selection) \
(o2::aod::femtobase::stored::pt > (selection).ptMin) && \
(o2::aod::femtobase::stored::pt < (selection).ptMax) && \
(o2::aod::femtobase::stored::eta > (selection).etaMin) && \
(o2::aod::femtobase::stored::eta < (selection).etaMax) && \
(o2::aod::femtobase::stored::phi > (selection).phiMin) && \
(o2::aod::femtobase::stored::phi < (selection).phiMax) && \
(o2::aod::femtobase::stored::mass > (selection).massMin) && \
(o2::aod::femtobase::stored::mass < (selection).massMax) && \
ifnode(o2::aod::femtotrackstwophotonresonances::posDauHasHighMomentum, \
ncheckbit(o2::aod::femtotrackstwophotonresonances::maskPosDau, (selection).posDauMaskAboveThres), \
ncheckbit(o2::aod::femtotrackstwophotonresonances::maskPosDau, (selection).posDauMaskBelowThres)) && \
ifnode(o2::aod::femtotrackstwophotonresonances::negDauHasHighMomentum, \
ncheckbit(o2::aod::femtotrackstwophotonresonances::maskNegDau, (selection).negDauMaskAboveThres), \
ncheckbit(o2::aod::femtotrackstwophotonresonances::maskNegDau, (selection).negDauMaskBelowThres)) && \
#define MAKE_TRACKTRACKTWOPHOTONRESONANCE_PARTITION(selection) \
(o2::aod::femtobase::stored::pt > (selection).ptMin) && \
(o2::aod::femtobase::stored::pt < (selection).ptMax) && \
(o2::aod::femtobase::stored::eta > (selection).etaMin) && \
(o2::aod::femtobase::stored::eta < (selection).etaMax) && \
(o2::aod::femtobase::stored::phi > (selection).phiMin) && \
(o2::aod::femtobase::stored::phi < (selection).phiMax) && \
(o2::aod::femtobase::stored::mass > (selection).massMin) && \
(o2::aod::femtobase::stored::mass < (selection).massMax) && \
ifnode(o2::aod::femtotrackstwophotonresonances::posDauHasHighMomentum, \
ncheckbit(o2::aod::femtotrackstwophotonresonances::maskPosDau, (selection).pionDauMaskAboveThres), \
ncheckbit(o2::aod::femtotrackstwophotonresonances::maskPosDau, (selection).pionDauMaskBelowThres)) && \
ifnode(o2::aod::femtotrackstwophotonresonances::negDauHasHighMomentum, \
ncheckbit(o2::aod::femtotrackstwophotonresonances::maskNegDau, (selection).pionDauMaskAboveThres), \
ncheckbit(o2::aod::femtotrackstwophotonresonances::maskNegDau, (selection).pionDauMaskBelowThres)) && \
ncheckbit(o2::aod::femtotrackstwophotonresonances::maskNeutralDau, (selection).neutralDauMask)

// partition for lambdas
Expand Down
13 changes: 6 additions & 7 deletions PWGCF/Femto/Core/trackTrackTwoPhotonResonanceBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,10 @@ struct ConfOmegaMesonFilters : o2::framework::ConfigurableGroup {
};

// selection used downstream (QA/pairing) to re-select already produced resonances by mass window
// and daughter mask -- same pattern as the two-track resonances (TWOTRACKRESONANCE_DEFAULT_SELECTION),
// just with a 3rd mask for the neutral daughter (no momentum-threshold split there, same as
// femtotwophotonresonances' single dauMask)
// and daughter mask. both charged daughters are pions (just opposite charge, no species swap the
// way kstar's kaon/pion does), so -- same as TWOTRACKRESONANCE_SAME_SPECIES_MASK for phi/rho0 --
// a single pair of mask thresholds is applied to both. plus a 3rd mask for the neutral daughter (no
// momentum-threshold split there, same as femtotwophotonresonances' single dauMask)
template <auto& Prefix>
struct ConfOmegaMesonSelection : o2::framework::ConfigurableGroup {
std::string prefix = Prefix;
Expand All @@ -67,10 +68,8 @@ struct ConfOmegaMesonSelection : o2::framework::ConfigurableGroup {
o2::framework::Configurable<float> phiMax{"phiMax", 1.f * o2::constants::math::TwoPI, "Maximum phi"};
o2::framework::Configurable<float> massMin{"massMin", 0.6f, "Minimum invariant mass"};
o2::framework::Configurable<float> massMax{"massMax", 0.95f, "Maximum invariant mass"};
o2::framework::Configurable<o2::analysis::femto::datatypes::TrackMaskType> posDauMaskBelowThres{"posDauMaskBelowThres", 0x10u, "Bitmask for positive daughter below threshold"};
o2::framework::Configurable<o2::analysis::femto::datatypes::TrackMaskType> posDauMaskAboveThres{"posDauMaskAboveThres", 0x8u, "Bitmask for positive daughter above threshold"};
o2::framework::Configurable<o2::analysis::femto::datatypes::TrackMaskType> negDauMaskBelowThres{"negDauMaskBelowThres", 0x2u, "Bitmask for negative daughter below threshold"};
o2::framework::Configurable<o2::analysis::femto::datatypes::TrackMaskType> negDauMaskAboveThres{"negDauMaskAboveThres", 0x1u, "Bitmask for negative daughter above threshold"};
o2::framework::Configurable<o2::analysis::femto::datatypes::TrackMaskType> pionDauMaskBelowThres{"pionDauMaskBelowThres", 0x10u, "Bitmask for both pion daughters below threshold"};
o2::framework::Configurable<o2::analysis::femto::datatypes::TrackMaskType> pionDauMaskAboveThres{"pionDauMaskAboveThres", 0x8u, "Bitmask for both pion daughters above threshold"};
o2::framework::Configurable<o2::analysis::femto::datatypes::PhotonMaskType> neutralDauMask{"neutralDauMask", 0, "Bitmask required for the neutral (two-photon-resonance) daughter"};
};

Expand Down
Loading
Loading