Skip to content

Commit 42ba0b7

Browse files
authored
[PWGCF] Update femto framework (#14330)
1 parent bf8d4ac commit 42ba0b7

33 files changed

+1668
-825
lines changed

PWGCF/Femto/Core/cascadeBuilder.h

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ class CascadeBuilder
380380
}
381381

382382
template <modes::System system, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
383-
void fillCascades(T1 const& col, T2& collisionBuilder, T3& collisionProducts, T4& trackProducts, T5& cascadeProducts, T6 const& fullCascades, T7 const& fullTracks, T8& trackBuilder, T9& indexMap)
383+
void fillCascades(T1 const& col, T2& collisionBuilder, T3& collisionProducts, T4& trackProducts, T5& cascadeProducts, T6 const& cascades, T7 const& tracks, T8 const& tracksWithItsPid, T9& trackBuilder)
384384
{
385385
if (!mFillAnyTable) {
386386
return;
@@ -389,24 +389,27 @@ class CascadeBuilder
389389
int64_t bachelorIndex = 0;
390390
int64_t posDaughterIndex = 0;
391391
int64_t negDaughterIndex = 0;
392-
for (const auto& cascade : fullCascades) {
392+
for (const auto& cascade : cascades) {
393393
if (!mCascadeSelection.checkFilters(cascade)) {
394394
continue;
395395
}
396-
mCascadeSelection.applySelections(cascade, fullTracks, col);
396+
mCascadeSelection.applySelections(cascade, tracks, col);
397397
if (!mCascadeSelection.passesAllRequiredSelections()) {
398398
continue;
399399
}
400400

401-
auto bachelor = cascade.template bachelor_as<T7>();
402-
auto posDaughter = cascade.template posTrack_as<T7>();
403-
auto negDaughter = cascade.template negTrack_as<T7>();
401+
// cleaner, but without ITS pid: auto bachelor = cascade.template bachelor_as<T7>();
402+
auto bachelor = tracksWithItsPid.iteratorAt(cascade.bachelorId() - tracksWithItsPid.offset());
403+
// cleaner, but without ITS pid: auto posDaughter = cascade.template posTrack_as<T7>();
404+
auto posDaughter = tracksWithItsPid.iteratorAt(cascade.posTrackId() - tracksWithItsPid.offset());
405+
// cleaner, but without ITS pid: auto negDaughter = cascade.template negTrack_as<T7>();
406+
auto negDaughter = tracksWithItsPid.iteratorAt(cascade.negTrackId() - tracksWithItsPid.offset());
404407

405408
collisionBuilder.template fillCollision<system>(collisionProducts, col);
406409

407-
bachelorIndex = trackBuilder.template getDaughterIndex<modes::Track::kCascadeBachelor>(bachelor, trackProducts, collisionProducts, indexMap);
408-
posDaughterIndex = trackBuilder.template getDaughterIndex<modes::Track::kV0Daughter>(posDaughter, trackProducts, collisionProducts, indexMap);
409-
negDaughterIndex = trackBuilder.template getDaughterIndex<modes::Track::kV0Daughter>(negDaughter, trackProducts, collisionProducts, indexMap);
410+
bachelorIndex = trackBuilder.template getDaughterIndex<modes::Track::kCascadeBachelor>(bachelor, trackProducts, collisionProducts);
411+
posDaughterIndex = trackBuilder.template getDaughterIndex<modes::Track::kV0Daughter>(posDaughter, trackProducts, collisionProducts);
412+
negDaughterIndex = trackBuilder.template getDaughterIndex<modes::Track::kV0Daughter>(negDaughter, trackProducts, collisionProducts);
410413

411414
fillCascade(collisionProducts, cascadeProducts, cascade, col, bachelorIndex, posDaughterIndex, negDaughterIndex);
412415
}

PWGCF/Femto/Core/cascadeHistManager.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -164,24 +164,24 @@ template <const char* cascadePrefix,
164164
const char* bachelorPrefix,
165165
const char* posDauPrefix,
166166
const char* negDauPrefix,
167-
modes::Mode mode,
168167
modes::Cascade cascade>
169168
class CascadeHistManager
170169
{
171170
public:
172171
CascadeHistManager() = default;
173172
~CascadeHistManager() = default;
174173

174+
template <modes::Mode mode>
175175
void init(o2::framework::HistogramRegistry* registry,
176176
std::map<CascadeHist, std::vector<o2::framework::AxisSpec>> const& cascadeSpecs,
177177
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& BachelorSpecs,
178178
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& PosDauSpecs,
179179
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& NegDauSpecs)
180180
{
181181
mHistogramRegistry = registry;
182-
mBachelorManager.init(registry, BachelorSpecs);
183-
mPosDauManager.init(registry, PosDauSpecs);
184-
mNegDauManager.init(registry, NegDauSpecs);
182+
mBachelorManager.template init<mode>(registry, BachelorSpecs);
183+
mPosDauManager.template init<mode>(registry, PosDauSpecs);
184+
mNegDauManager.template init<mode>(registry, NegDauSpecs);
185185
if constexpr (modes::isFlagSet(mode, modes::Mode::kAnalysis)) {
186186
initAnalysis(cascadeSpecs);
187187
}
@@ -199,7 +199,7 @@ class CascadeHistManager
199199
mPlot2d = CascadeConfBinningQa.plot2d.value;
200200
}
201201

202-
template <typename T1, typename T2, typename T3, typename T4>
202+
template <modes::Mode mode, typename T1, typename T2, typename T3, typename T4>
203203
void init(o2::framework::HistogramRegistry* registry,
204204
std::map<CascadeHist, std::vector<o2::framework::AxisSpec>> const& cascadeSpecs,
205205
T1 const& CascadeConfBinningQa,
@@ -211,22 +211,22 @@ class CascadeHistManager
211211
T4 const& NegDauConfBinningQa)
212212
{
213213
enableOptionalHistograms(CascadeConfBinningQa, BachelorConfBinningQa, PosDauConfBinningQa, NegDauConfBinningQa);
214-
init(registry, cascadeSpecs, BachelorSpecs, PosDauSpecs, NegDauSpecs);
214+
this->template init<mode>(registry, cascadeSpecs, BachelorSpecs, PosDauSpecs, NegDauSpecs);
215215
}
216216

217-
template <typename T1, typename T2>
217+
template <modes::Mode mode, typename T1, typename T2>
218218
void fill(T1 const& cascadeCandidate, T2 const& tracks)
219219
{
220220
// this used to work, still under investigation
221221
// auto bachelor = cascadeCandidate.template bachelor_as<T2>();
222222
// auto posDaughter = cascadeCandidate.template posDau_as<T2>();
223223
// auto negDaughter = cascadeCandidate.template negDau_as<T2>();
224224
auto posDaughter = tracks.rawIteratorAt(cascadeCandidate.posDauId() - tracks.offset());
225-
mPosDauManager.fill(posDaughter, tracks);
225+
mPosDauManager.template fill<mode>(posDaughter, tracks);
226226
auto negDaughter = tracks.rawIteratorAt(cascadeCandidate.negDauId() - tracks.offset());
227-
mNegDauManager.fill(negDaughter, tracks);
227+
mNegDauManager.template fill<mode>(negDaughter, tracks);
228228
auto bachelor = tracks.rawIteratorAt(cascadeCandidate.bachelorId() - tracks.offset());
229-
mBachelorManager.fill(bachelor, tracks);
229+
mBachelorManager.template fill<mode>(bachelor, tracks);
230230

231231
if constexpr (modes::isFlagSet(mode, modes::Mode::kAnalysis)) {
232232
fillAnalysis(cascadeCandidate);
@@ -310,9 +310,9 @@ class CascadeHistManager
310310

311311
o2::framework::HistogramRegistry* mHistogramRegistry = nullptr;
312312
bool mPlot2d = true;
313-
trackhistmanager::TrackHistManager<bachelorPrefix, mode> mBachelorManager;
314-
trackhistmanager::TrackHistManager<posDauPrefix, mode> mPosDauManager;
315-
trackhistmanager::TrackHistManager<negDauPrefix, mode> mNegDauManager;
313+
trackhistmanager::TrackHistManager<bachelorPrefix> mBachelorManager;
314+
trackhistmanager::TrackHistManager<posDauPrefix> mPosDauManager;
315+
trackhistmanager::TrackHistManager<negDauPrefix> mNegDauManager;
316316
};
317317
}; // namespace cascadehistmanager
318318
}; // namespace o2::analysis::femto

PWGCF/Femto/Core/collisionBuilder.h

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ struct ConfCollisionFilters : o2::framework::ConfigurableGroup {
5959
o2::framework::Configurable<float> sphericityMax{"sphericityMax", 1.f, "Maximum sphericity"};
6060
o2::framework::Configurable<int> magFieldMin{"magFieldMin", -5, "Minimum magnetic field strength (kG)"};
6161
o2::framework::Configurable<int> magFieldMax{"magFieldMax", 5, "Maximum magnetic field strength (kG)"};
62+
o2::framework::Configurable<int> subGeneratorId{"subGeneratorId", 0, "MC ONLY: If positive, keep 0 = MB, <0 triggered on something"};
6263
};
6364

6465
struct ConfCollisionBits : o2::framework::ConfigurableGroup {
@@ -390,6 +391,7 @@ class CollisionBuilder
390391
mRctFlagsChecker.init(confRct.label.value, confRct.useZdc.value, confRct.treatLimitedAcceptanceAsBad.value);
391392
}
392393
mGrpPath = confCcdb.grpPath.value;
394+
mSubGeneratorId = confFilter.subGeneratorId.value;
393395

394396
mCollisionSelection.configure(registry, confFilter, confBits);
395397
mCollisionSelection.printSelections(colSelsName);
@@ -439,14 +441,36 @@ class CollisionBuilder
439441
mCollisionSelection.passesAllRequiredSelections();
440442
}
441443

444+
template <typename T1, typename T2>
445+
bool checkCollision(T1 const& col, T2 const& /*mcCols*/)
446+
{
447+
// check sub generator id of associated generated collision
448+
if (mSubGeneratorId >= 0) {
449+
if (col.has_mcCollision()) {
450+
auto mcCol = col.template mcCollision_as<T2>();
451+
if (mcCol.getSubGeneratorId() != mSubGeneratorId) {
452+
return false;
453+
}
454+
}
455+
}
456+
457+
// check RCT flags first
458+
if (mUseRctFlags && !mRctFlagsChecker(col)) {
459+
return false;
460+
}
461+
// make other checks
462+
return mCollisionSelection.checkFilters(col) &&
463+
mCollisionSelection.passesAllRequiredSelections();
464+
}
465+
442466
template <modes::System system, typename T1, typename T2>
443467
void fillCollision(T1& collisionProducts, T2 const& col)
444468
{
445469
if (!mFillAnyTable) {
446470
return;
447471
}
448472

449-
if (mCollisionAleadyFilled) {
473+
if (mCollisionAlreadyFilled) {
450474
return;
451475
}
452476

@@ -488,17 +512,28 @@ class CollisionBuilder
488512
}
489513
}
490514

491-
mCollisionAleadyFilled = true;
515+
mCollisionAlreadyFilled = true;
516+
}
517+
518+
template <modes::System system, typename T1, typename T2, typename T3, typename T4, typename T5>
519+
void fillMcCollision(T1& collisionProducts, T2 const& col, T3 const& mcCols, T4& mcProducts, T5& mcBuilder)
520+
{
521+
if (mCollisionAlreadyFilled) {
522+
return;
523+
}
524+
this->template fillCollision<system>(collisionProducts, col);
525+
mcBuilder.template fillMcCollisionWithLabel<system>(mcProducts, col, mcCols);
492526
}
493527

494-
void reset()
528+
void
529+
reset()
495530
{
496-
mCollisionAleadyFilled = false;
531+
mCollisionAlreadyFilled = false;
497532
}
498533

499534
private:
500535
CollisionSelection<HistName> mCollisionSelection;
501-
bool mCollisionAleadyFilled = false;
536+
bool mCollisionAlreadyFilled = false;
502537
Zorro mZorro;
503538
bool mUseTrigger = false;
504539
int mRunNumber = -1;
@@ -507,6 +542,7 @@ class CollisionBuilder
507542
aod::rctsel::RCTFlagsChecker mRctFlagsChecker;
508543
bool mUseRctFlags = false;
509544
std::string mTriggerNames = std::string("");
545+
int mSubGeneratorId = -1;
510546
bool mFillAnyTable = false;
511547
bool mProducedCollisions = false;
512548
bool mProducedCollisionMasks = false;

0 commit comments

Comments
 (0)