Skip to content

Commit 2f4650a

Browse files
authored
[PWGCF] Update femto framework (#14366)
1 parent fe06647 commit 2f4650a

17 files changed

+1528
-319
lines changed

PWGCF/Femto/Core/cascadeHistManager.h

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ constexpr char PrefixLambdaCascade[] = "LambdaCascadeQa/";
157157
constexpr std::string_view AnalysisDir = "Kinematics/";
158158
constexpr std::string_view QaDir = "QA/";
159159

160+
constexpr int AbsChargeDaughters = 1;
161+
160162
/// \class FemtoDreamEventHisto
161163
/// \brief Class for histogramming event properties
162164
// template <femtomodes::Mode mode>
@@ -179,9 +181,9 @@ class CascadeHistManager
179181
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& NegDauSpecs)
180182
{
181183
mHistogramRegistry = registry;
182-
mBachelorManager.template init<mode>(registry, BachelorSpecs);
183-
mPosDauManager.template init<mode>(registry, PosDauSpecs);
184-
mNegDauManager.template init<mode>(registry, NegDauSpecs);
184+
mBachelorManager.template init<mode>(registry, BachelorSpecs, AbsChargeDaughters);
185+
mPosDauManager.template init<mode>(registry, PosDauSpecs, AbsChargeDaughters);
186+
mNegDauManager.template init<mode>(registry, NegDauSpecs, AbsChargeDaughters);
185187
if constexpr (modes::isFlagSet(mode, modes::Mode::kAnalysis)) {
186188
initAnalysis(cascadeSpecs);
187189
}
@@ -190,15 +192,6 @@ class CascadeHistManager
190192
}
191193
}
192194

193-
template <typename T1, typename T2, typename T3, typename T4>
194-
void enableOptionalHistograms(T1 const& CascadeConfBinningQa, T2 const& BachelorConfBinningQa, T3 const& PosDauConfBinningQa, T4 const& NegDauConfBinningQa)
195-
{
196-
mBachelorManager.enableOptionalHistograms(BachelorConfBinningQa);
197-
mPosDauManager.enableOptionalHistograms(PosDauConfBinningQa);
198-
mNegDauManager.enableOptionalHistograms(NegDauConfBinningQa);
199-
mPlot2d = CascadeConfBinningQa.plot2d.value;
200-
}
201-
202195
template <modes::Mode mode, typename T1, typename T2, typename T3, typename T4>
203196
void init(o2::framework::HistogramRegistry* registry,
204197
std::map<CascadeHist, std::vector<o2::framework::AxisSpec>> const& cascadeSpecs,
@@ -210,8 +203,17 @@ class CascadeHistManager
210203
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& NegDauSpecs,
211204
T4 const& NegDauConfBinningQa)
212205
{
213-
enableOptionalHistograms(CascadeConfBinningQa, BachelorConfBinningQa, PosDauConfBinningQa, NegDauConfBinningQa);
214-
this->template init<mode>(registry, cascadeSpecs, BachelorSpecs, PosDauSpecs, NegDauSpecs);
206+
mHistogramRegistry = registry;
207+
mBachelorManager.template init<mode>(registry, BachelorSpecs, BachelorConfBinningQa, AbsChargeDaughters);
208+
mPosDauManager.template init<mode>(registry, PosDauSpecs, PosDauConfBinningQa, AbsChargeDaughters);
209+
mNegDauManager.template init<mode>(registry, NegDauSpecs, NegDauConfBinningQa, AbsChargeDaughters);
210+
this->enableOptionalHistograms(CascadeConfBinningQa);
211+
if constexpr (modes::isFlagSet(mode, modes::Mode::kAnalysis)) {
212+
initAnalysis(cascadeSpecs);
213+
}
214+
if constexpr (modes::isFlagSet(mode, modes::Mode::kQa)) {
215+
initQa(cascadeSpecs);
216+
}
215217
}
216218

217219
template <modes::Mode mode, typename T1, typename T2>
@@ -237,6 +239,12 @@ class CascadeHistManager
237239
}
238240

239241
private:
242+
template <typename T>
243+
void enableOptionalHistograms(T const& CascadeConfBinningQa)
244+
{
245+
mPlot2d = CascadeConfBinningQa.plot2d.value;
246+
}
247+
240248
void initAnalysis(std::map<CascadeHist, std::vector<o2::framework::AxisSpec>> const& cascadeSpecs)
241249
{
242250
std::string analysisDir = std::string(cascadePrefix) + std::string(AnalysisDir);

PWGCF/Femto/Core/collisionBuilder.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ struct ConfCollisionBits : o2::framework::ConfigurableGroup {
8787
struct ConfCcdb : o2::framework::ConfigurableGroup {
8888
std::string prefix = std::string("ConfCcdb");
8989
o2::framework::Configurable<std::string> ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "URL to ccdb"};
90-
o2::framework::Configurable<std::string> grpPath{"grpPath", "GLO/Config/GRPMagField", "Path to GRP object (Run3 -> GLO/Config/GRPMagField/Run2 -> GLO/GRP/GRP"};
90+
o2::framework::Configurable<std::string> grpPath{"grpPath", "GLO/Config/GRPMagField", "Path to GRP object (Run3 -> GLO/Config/GRPMagField, Run2 -> GLO/GRP/GRP"};
9191
o2::framework::Configurable<std::string> triggerPath{"triggerPath", "EventFiltering/Zorro/", "CCDB path for trigger information"};
9292
};
9393

@@ -525,11 +525,7 @@ class CollisionBuilder
525525
mcBuilder.template fillMcCollisionWithLabel<system>(mcProducts, col, mcCols);
526526
}
527527

528-
void
529-
reset()
530-
{
531-
mCollisionAlreadyFilled = false;
532-
}
528+
void reset() { mCollisionAlreadyFilled = false; }
533529

534530
private:
535531
CollisionSelection<HistName> mCollisionSelection;

PWGCF/Femto/Core/femtoUtils.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ using HasSign = decltype(std::declval<T&>().sign());
210210
template <typename T>
211211
inline int signum(T x)
212212
{
213-
return (T(0) < x) - (x < T(0)); // works for floats too
213+
return (T(0) < x) - (x < T(0));
214214
}
215215

216216
}; // namespace utils

PWGCF/Femto/Core/histManager.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ namespace o2::analysis::femto
2626
namespace histmanager
2727
{
2828

29+
// plot level for secondaries during mc processing
30+
enum SecondaryPlotLevel {
31+
kSecondaryPlotLevel1 = 1,
32+
kSecondaryPlotLevel2 = 2,
33+
kSecondaryPlotLevel3 = 3
34+
};
35+
2936
template <typename Hist>
3037
struct HistInfo {
3138
Hist hist;

PWGCF/Femto/Core/kinkBuilder.h

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
#include "Common/Core/RecoDecay.h"
2828

2929
#include "CommonConstants/MathConstants.h"
30-
#include "CommonConstants/PhysicsConstants.h"
3130
#include "Framework/AnalysisHelpers.h"
3231
#include "Framework/Configurable.h"
3332

@@ -435,7 +434,6 @@ class KinkBuilder
435434
int64_t daughterIndex = 0;
436435

437436
for (const auto& kink : kinks) {
438-
439437
// compute mother kinematics before checking filters
440438
mKinkSelection.computeKinkMotherKinematics(kink);
441439
if (!mKinkSelection.checkFilters(kink)) {
@@ -444,15 +442,15 @@ class KinkBuilder
444442
// compute qa variables before applying selections
445443
mKinkSelection.computeQaVariables(kink, tracks);
446444
mKinkSelection.applySelections(kink, tracks);
447-
448445
if (!mKinkSelection.passesAllRequiredSelections()) {
449446
continue;
450447
}
451448

452449
collisionBuilder.template fillCollision<system>(collisionProducts, col);
453450
// cleaner, but without ITS pid: auto daughter = kink.template trackDaug_as<T7>();
454451
int64_t idx = kink.trackDaugId() - tracksWithItsPid.offset();
455-
if (idx < 0 || idx > static_cast<int64_t>(tracksWithItsPid.size())) {
452+
// check for valid index
453+
if (idx < 0 || idx >= static_cast<int64_t>(tracksWithItsPid.size())) {
456454
return;
457455
}
458456
auto daughter = tracksWithItsPid.iteratorAt(idx);
@@ -466,6 +464,49 @@ class KinkBuilder
466464
}
467465
}
468466

467+
template <modes::System system, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
468+
void fillMcKinks(T1 const& col, T2& collisionBuilder, T3& collisionProducts, T4 const& mcCols, T5& trackProducts, T6& kinkProducts, T7 const& kinks, T8 const& tracks, T9 const& tracksWithItsPid, T10& trackBuilder, T11 const& mcParticles, T12& mcBuilder, T13& mcProducts)
469+
{
470+
471+
if (!mFillAnyTable) {
472+
return;
473+
}
474+
int64_t daughterIndex = 0;
475+
for (const auto& kink : kinks) {
476+
// compute mother kinematics before checking filters
477+
mKinkSelection.computeKinkMotherKinematics(kink);
478+
if (!mKinkSelection.checkFilters(kink)) {
479+
continue;
480+
}
481+
// compute qa variables before applying selections
482+
mKinkSelection.computeQaVariables(kink, tracks);
483+
mKinkSelection.applySelections(kink, tracks);
484+
if (!mKinkSelection.passesAllRequiredSelections()) {
485+
continue;
486+
}
487+
488+
collisionBuilder.template fillMcCollision<system>(collisionProducts, col, mcCols, mcProducts, mcBuilder);
489+
490+
int64_t idx = kink.trackDaugId() - tracks.offset();
491+
// check for valid index
492+
if (idx < 0 || idx >= static_cast<int64_t>(tracks.size())) {
493+
return;
494+
}
495+
auto daughter = tracks.iteratorAt(idx);
496+
auto daughterWithItsPid = tracksWithItsPid.iteratorAt(idx);
497+
daughterIndex = trackBuilder.template getDaughterIndex<system, modes::Track::kKinkDaughter>(col, collisionProducts, mcCols, daughter, daughterWithItsPid, trackProducts, mcParticles, mcBuilder, mcProducts);
498+
499+
if constexpr (modes::isEqual(kinkType, modes::Kink::kSigma)) {
500+
fillSigma(collisionProducts, kinkProducts, kink, daughterIndex);
501+
mcBuilder.template fillMcSigmaWithLabel<system>(col, mcCols, kink, daughter, mcParticles, mcProducts);
502+
}
503+
if constexpr (modes::isEqual(kinkType, modes::Kink::kSigmaPlus)) {
504+
fillSigmaPlus(collisionProducts, kinkProducts, kink, daughterIndex);
505+
mcBuilder.template fillMcSigmaPlusWithLabel<system>(col, mcCols, kink, daughter, mcParticles, mcProducts);
506+
}
507+
}
508+
}
509+
469510
template <typename T1, typename T2, typename T3>
470511
void fillSigma(T1& collisionProducts, T2& kinkProducts, T3 const& kink, int64_t daughterIndex)
471512
{

0 commit comments

Comments
 (0)