Skip to content

Commit ea7b7f0

Browse files
authored
[PWGCF] Update cascade processing (#16958)
1 parent ca8d7b6 commit ea7b7f0

2 files changed

Lines changed: 36 additions & 12 deletions

File tree

PWGCF/Femto/Core/cascadeBuilder.h

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,19 @@ struct ConfCascadeFilters : o2::framework::ConfigurableGroup {
4747
o2::framework::Configurable<float> etaMax{"etaMax", 10.f, "Maximum eta"};
4848
o2::framework::Configurable<float> phiMin{"phiMin", 0.f, "Minimum phi"};
4949
o2::framework::Configurable<float> phiMax{"phiMax", 1.f * o2::constants::math::TwoPI, "Maximum phi"};
50+
o2::framework::Configurable<float> massLambdaMin{"massLambdaMin", 1.0f, "Minimum mass of Lambda daughters in cascade decay"};
51+
o2::framework::Configurable<float> massLambdaMax{"massLambdaMax", 1.2f, "Maximum mass of Lambda daughters in cascade decay"};
5052
o2::framework::Configurable<float> massXiMin{"massXiMin", 1.2f, "Minimum Xi mass"};
5153
o2::framework::Configurable<float> massXiMax{"massXiMax", 1.4f, "Maximum Xi mass"};
52-
o2::framework::Configurable<float> rejectMassXiMin{"rejectMassXiMin", 1.317f, "Reject Minimum Xi mass for Omega hypothesis"};
53-
o2::framework::Configurable<float> rejectMassXiMax{"rejectMassXiMax", 1.325f, "Rejection Maximum Xi mass for Omega hypothesis"};
54-
o2::framework::Configurable<float> massOmegaMin{"massOmegaMin", 1.5f, "Minimum Omega mass"};
55-
o2::framework::Configurable<float> massOmegaMax{"massOmegaMax", 1.9f, "Maximum Omega mass"};
54+
o2::framework::Configurable<bool> rejectHypothesisOmega{"rejectHypothesisOmega", false, "Rejection of Omega hypothesis for Xi candidates"};
5655
o2::framework::Configurable<float> rejectMassOmegaMin{"rejectMassOmegaMin", 1.668f, "Reject minimum Omega mass for Xi hypothesis"};
5756
o2::framework::Configurable<float> rejectMassOmegaMax{"rejectMassOmegaMax", 1.676f, "Reject maximum Omega mass for Xi hypothesis"};
58-
o2::framework::Configurable<float> massLambdaMin{"massLambdaMin", 1.0f, "Minimum Lambda mass"};
59-
o2::framework::Configurable<float> massLambdaMax{"massLambdaMax", 1.2f, "Maximum Lambda mass"};
57+
58+
o2::framework::Configurable<float> massOmegaMin{"massOmegaMin", 1.5f, "Minimum Omega mass"};
59+
o2::framework::Configurable<float> massOmegaMax{"massOmegaMax", 1.9f, "Maximum Omega mass"};
60+
o2::framework::Configurable<bool> rejectHypothesisXi{"rejectHypothesisXi", false, "Rejection of Xi hypothesis for Omega candidates"};
61+
o2::framework::Configurable<float> rejectMassXiMin{"rejectMassXiMin", 1.317f, "Reject Minimum Xi mass for Omega hypothesis"};
62+
o2::framework::Configurable<float> rejectMassXiMax{"rejectMassXiMax", 1.325f, "Reject Maximum Xi mass for Omega hypothesis"};
6063
};
6164

6265
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
@@ -97,7 +100,7 @@ struct ConfOmegaBits : o2::framework::ConfigurableGroup {
97100
o2::framework::Configurable<float> ptMax{"ptMax", 999.f, "Maximum pT"}; \
98101
o2::framework::Configurable<float> etaMin{"etaMin", -10.f, "Minimum eta"}; \
99102
o2::framework::Configurable<float> etaMax{"etaMax", 10.f, "Maximum eta"}; \
100-
o2::framework::Configurable<float> phiMin{"phiMin", 0.f, "Minimum eta"}; \
103+
o2::framework::Configurable<float> phiMin{"phiMin", 0.f, "Minimum phi"}; \
101104
o2::framework::Configurable<float> phiMax{"phiMax", 1.f * o2::constants::math::TwoPI, "Maximum phi"}; \
102105
o2::framework::Configurable<float> massMin{"massMin", (defaultMassMin), "Minimum invariant mass for Cascade"}; \
103106
o2::framework::Configurable<float> massMax{"massMax", (defaultMassMax), "Maximum invariant mass for Cascade"}; \
@@ -192,13 +195,15 @@ class CascadeSelection : public BaseSelection<float, o2::analysis::femto::dataty
192195
if constexpr (modes::isEqual(cascadeType, modes::Cascade::kXi)) {
193196
mXiMassLowerLimit = filter.massXiMin.value;
194197
mXiMassUpperLimit = filter.massXiMax.value;
198+
mRejectOmegaHypothesis = filter.rejectHypothesisOmega.value;
195199
mOmegaMassLowerLimit = filter.rejectMassOmegaMin.value;
196200
mOmegaMassUpperLimit = filter.rejectMassOmegaMax.value;
197201
this->addSelection(kBachelorTpcPion, cascadeSelectionNames.at(kBachelorTpcPion), config.bachelorTpcPion.value, limits::kAbsUpperLimit, skipMostPermissiveBit, isMinimalCut, false);
198202
}
199203
if constexpr (modes::isEqual(cascadeType, modes::Cascade::kOmega)) {
200204
mOmegaMassLowerLimit = filter.massOmegaMin.value;
201205
mOmegaMassUpperLimit = filter.massOmegaMax.value;
206+
mRejectXiHypothesis = filter.rejectHypothesisXi.value;
202207
mXiMassLowerLimit = filter.rejectMassXiMin.value;
203208
mXiMassUpperLimit = filter.rejectMassXiMax.value;
204209
this->addSelection(kBachelorTpcKaon, cascadeSelectionNames.at(kBachelorTpcKaon), config.bachelorTpcKaon.value, limits::kAbsUpperLimit, skipMostPermissiveBit, isMinimalCut, false);
@@ -305,13 +310,13 @@ class CascadeSelection : public BaseSelection<float, o2::analysis::femto::dataty
305310
if constexpr (modes::isEqual(cascadeType, modes::Cascade::kXi)) {
306311
// Xi candidate must be inside Xi window and outside Omega
307312
return (cascade.mXi() > mXiMassLowerLimit && cascade.mXi() < mXiMassUpperLimit) &&
308-
(cascade.mOmega() < mOmegaMassLowerLimit || cascade.mOmega() > mOmegaMassUpperLimit);
313+
(!mRejectOmegaHypothesis || (cascade.mOmega() < mOmegaMassLowerLimit || cascade.mOmega() > mOmegaMassUpperLimit));
309314
}
310315

311316
if constexpr (modes::isEqual(cascadeType, modes::Cascade::kOmega)) {
312317
// Omega candidate must be inside Omega window and outside Xi
313318
return (cascade.mOmega() > mOmegaMassLowerLimit && cascade.mOmega() < mOmegaMassUpperLimit) &&
314-
(cascade.mXi() < mXiMassLowerLimit || cascade.mXi() > mXiMassUpperLimit);
319+
(!mRejectXiHypothesis || (cascade.mXi() < mXiMassLowerLimit || cascade.mXi() > mXiMassUpperLimit));
315320
}
316321

317322
return false; // should never happen
@@ -320,12 +325,14 @@ class CascadeSelection : public BaseSelection<float, o2::analysis::femto::dataty
320325
[[nodiscard]] bool passThroughAllCascades() const { return mPassThrough; }
321326

322327
protected:
323-
float mXiMassLowerLimit = 0.f;
324-
float mXiMassUpperLimit = 999.f;
325-
328+
bool mRejectOmegaHypothesis = false;
326329
float mOmegaMassLowerLimit = 0.f;
327330
float mOmegaMassUpperLimit = 999.f;
328331

332+
bool mRejectXiHypothesis = false;
333+
float mXiMassLowerLimit = 0.f;
334+
float mXiMassUpperLimit = 999.f;
335+
329336
bool mPassThrough = false;
330337

331338
// kinematic filters

PWGCF/Femto/TableProducer/femtoProducer.cxx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,23 @@ struct FemtoProducer {
377377
}
378378
PROCESS_SWITCH(FemtoProducer, processTracksV0sCascadesRun3pp, "Provide Tracks, V0s and Cascades for Run3", false);
379379

380+
void processTracksV0sCascadesRun3PbPb(rawinputs::Run3PbPbCollisions::iterator const& col,
381+
o2::aod::BCsWithTimestamps const& bcs,
382+
rawinputs::Run3FullPidTracks const& tracks,
383+
rawinputs::Run3Vzeros const& v0s,
384+
rawinputs::Run3Cascades const& cascades)
385+
{
386+
if (!processCollisions<modes::System::kPbPb_Run3>(col, bcs, tracks)) {
387+
return;
388+
}
389+
auto tracksWithItsPid = o2::soa::Attach<rawinputs::Run3FullPidTracks, o2::aod::pidits::ITSNSigmaEl, o2::aod::pidits::ITSNSigmaPi, o2::aod::pidits::ITSNSigmaKa,
390+
o2::aod::pidits::ITSNSigmaPr, o2::aod::pidits::ITSNSigmaDe, o2::aod::pidits::ITSNSigmaTr, o2::aod::pidits::ITSNSigmaHe>(tracks);
391+
processTracks<modes::System::kPbPb_Run3>(col, tracksWithItsPid);
392+
processV0s<modes::System::kPbPb_Run3>(col, tracks, v0s);
393+
processCascades<modes::System::kPbPb_Run3>(col, tracks, cascades);
394+
}
395+
PROCESS_SWITCH(FemtoProducer, processTracksV0sCascadesRun3PbPb, "Provide Tracks, V0s and Cascades for Run3", false);
396+
380397
// process tracks, v0s, cascades and kinks
381398
void processTracksV0sCascadesKinksRun3pp(rawinputs::Run3PpCollisions::iterator const& col,
382399
o2::aod::BCsWithTimestamps const& bcs,

0 commit comments

Comments
 (0)