Skip to content

Commit 16990dc

Browse files
committed
Feat: finish CollisionBuilder
1 parent 4004c68 commit 16990dc

16 files changed

+389
-303
lines changed

PWGCF/Femto/Core/baseSelection.h

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,17 +110,48 @@ class BaseSelection
110110
mSelectionContainers.at(observableIndex) = SelectionContainer<T, BitmaskType>(baseName, lowerLimit, upperLimit, selectionValues, limitType, skipMostPermissiveBit, isMinimalCut);
111111
}
112112

113+
/// \brief Add a boolean based selection for a specific observable.
114+
/// \param mode Whether the selection is not applied, minimal or optional cut
115+
/// \param observableIndex Index of the observable.
116+
void addSelection(int mode, int observableIndex)
117+
{
118+
if (static_cast<size_t>(observableIndex) >= NumObservables) {
119+
LOG(fatal) << "Observable is not valid. Observable (index) has to be smaller than " << NumObservables;
120+
}
121+
switch (mode) {
122+
case -1: // cut is optional and we store bit for the cut
123+
mNSelections += 1;
124+
mHasOptionalSelection = true;
125+
mSelectionContainers.at(observableIndex) = SelectionContainer<T, BitmaskType>(std::vector<T>{1}, limits::LimitType::kEqual, false, false);
126+
break;
127+
case 0: // cut is not applied, initalize with empty vector, so we bail out later
128+
mSelectionContainers.at(observableIndex) = SelectionContainer<T, BitmaskType>(std::vector<T>{}, limits::LimitType::kEqual, false, false);
129+
break;
130+
case 1: // cut is added as mininal selection (since it is only one value, not extra bit is stored)
131+
mSelectionContainers.at(observableIndex) = SelectionContainer<T, BitmaskType>(std::vector<T>{1}, limits::LimitType::kEqual, true, true);
132+
break;
133+
default:
134+
LOG(fatal) << "Invalid switch for boolean selection";
135+
}
136+
if (mNSelections >= sizeof(BitmaskType) * CHAR_BIT) {
137+
LOG(fatal) << "Too many selections. At most " << sizeof(BitmaskType) * CHAR_BIT << " are supported";
138+
}
139+
}
140+
113141
/// \brief Update the limits of a function-based selection for a specific observable.
114142
/// \param observable Index of the observable.
115143
/// \param value Value at which to evaluate the selection functions.
116-
void updateLimits(int observable, T value) { mSelectionContainers.at(observable).updateLimits(value); }
144+
void updateLimits(int observable, T value)
145+
{
146+
mSelectionContainers.at(observable).updateLimits(value);
147+
}
117148

118149
/// \brief Reset the internal bitmask and evaluation flags before evaluating a new event.
119150
void reset()
120151
{
121152
mFinalBitmask.reset();
122153
mPassesMinimalSelections = true;
123-
// will be true if no optional cut as been defined and
154+
// will be true if no optional cut has been defined and
124155
// will be set to false if we have optional cuts (but will be set to true in the case at least one optional cut succeeds)
125156
mPassesOptionalSelections = !mHasOptionalSelection;
126157
}

PWGCF/Femto/Core/cascadeBuilder.h

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -337,23 +337,23 @@ class CascadeBuilder
337337
template <typename T1, typename T2, typename T3, typename T4>
338338
void init(T1& config, T2& filter, T3& table, T4& initContext)
339339
{
340-
cascadeSelection.configure(config, filter);
340+
mCascadeSelection.configure(config, filter);
341341
if constexpr (modes::isEqual(cascadeType, modes::Cascade::kXi)) {
342342
LOG(info) << "Initialize femto Xi builder...";
343-
produceXis = utils::enableTable("FXis_001", table.produceXis.value, initContext);
344-
produceXiMasks = utils::enableTable("FXiMasks_001", table.produceXiMasks.value, initContext);
345-
produceXiExtras = utils::enableTable("FXiExtras_001", table.produceXiExtras.value, initContext);
343+
mProduceXis = utils::enableTable("FXis_001", table.produceXis.value, initContext);
344+
mProduceXiMasks = utils::enableTable("FXiMasks_001", table.produceXiMasks.value, initContext);
345+
mProduceXiExtras = utils::enableTable("FXiExtras_001", table.produceXiExtras.value, initContext);
346346
}
347347
if constexpr (modes::isEqual(cascadeType, modes::Cascade::kOmega)) {
348348
LOG(info) << "Initialize femto Omega builder...";
349-
produceOmegas = utils::enableTable("FOmegas_001", table.produceOmegas.value, initContext);
350-
produceOmegaMasks = utils::enableTable("FOmegaMasks_001", table.produceOmegaMasks.value, initContext);
351-
produceOmegaExtras = utils::enableTable("FOmegaExtras_001", table.produceOmegaExtras.value, initContext);
349+
mProduceOmegas = utils::enableTable("FOmegas_001", table.produceOmegas.value, initContext);
350+
mProduceOmegaMasks = utils::enableTable("FOmegaMasks_001", table.produceOmegaMasks.value, initContext);
351+
mProduceOmegaExtras = utils::enableTable("FOmegaExtras_001", table.produceOmegaExtras.value, initContext);
352352
}
353353

354-
if (produceXis || produceXiExtras || produceXiMasks || produceOmegas || produceOmegaMasks || produceOmegaExtras) {
354+
if (mProduceXis || mProduceXiExtras || mProduceXiMasks || mProduceOmegas || mProduceOmegaMasks || mProduceOmegaExtras) {
355355
mFillAnyTable = true;
356-
cascadeSelection.printSelections(cascadeSelsName, cascadeSelsToString);
356+
mCascadeSelection.printSelections(cascadeSelsName, cascadeSelsToString);
357357
} else {
358358
LOG(info) << "No tables configured";
359359
}
@@ -371,11 +371,11 @@ class CascadeBuilder
371371
int64_t posDaughterIndex = 0;
372372
int64_t negDaughterIndex = 0;
373373
for (const auto& cascade : fullCascades) {
374-
if (!cascadeSelection.checkFilters(cascade)) {
374+
if (!mCascadeSelection.checkFilters(cascade)) {
375375
continue;
376376
}
377-
cascadeSelection.applySelections(cascade, fullTracks, col);
378-
if (cascadeSelection.passesAllRequiredSelections() && cascadeSelection.checkHypothesis(cascade)) {
377+
mCascadeSelection.applySelections(cascade, fullTracks, col);
378+
if (mCascadeSelection.passesAllRequiredSelections() && mCascadeSelection.checkHypothesis(cascade)) {
379379

380380
auto bachelor = cascade.template bachelor_as<T5>();
381381
auto posDaughter = cascade.template posTrack_as<T5>();
@@ -394,7 +394,7 @@ class CascadeBuilder
394394
void fillCascade(T1& collisionProducts, T2& cascadeProducts, T3 const& cascade, T4 const& col, int bachelorIndex, int posDaughterIndex, int negDaughterIndex)
395395
{
396396
if constexpr (modes::isEqual(cascadeType, modes::Cascade::kXi)) {
397-
if (produceXis) {
397+
if (mProduceXis) {
398398
cascadeProducts.producedXis(collisionProducts.producedCollision.lastIndex(),
399399
cascade.sign() * cascade.pt(),
400400
cascade.eta(),
@@ -404,10 +404,10 @@ class CascadeBuilder
404404
posDaughterIndex,
405405
negDaughterIndex);
406406
}
407-
if (produceXiMasks) {
408-
cascadeProducts.producedXiMasks(cascadeSelection.getBitmask());
407+
if (mProduceXiMasks) {
408+
cascadeProducts.producedXiMasks(mCascadeSelection.getBitmask());
409409
}
410-
if (produceXiExtras) {
410+
if (mProduceXiExtras) {
411411
cascadeProducts.producedXiExtras(
412412
cascade.mOmega(),
413413
cascade.casccosPA(col.posX(), col.posY(), col.posZ()),
@@ -420,7 +420,7 @@ class CascadeBuilder
420420
}
421421
}
422422
if constexpr (modes::isEqual(cascadeType, modes::Cascade::kOmega)) {
423-
if (produceOmegas) {
423+
if (mProduceOmegas) {
424424
cascadeProducts.producedOmegas(collisionProducts.producedCollision.lastIndex(),
425425
cascade.sign() * cascade.pt(),
426426
cascade.eta(),
@@ -430,10 +430,10 @@ class CascadeBuilder
430430
posDaughterIndex,
431431
negDaughterIndex);
432432
}
433-
if (produceOmegaMasks) {
434-
cascadeProducts.producedOmegaMasks(cascadeSelection.getBitmask());
433+
if (mProduceOmegaMasks) {
434+
cascadeProducts.producedOmegaMasks(mCascadeSelection.getBitmask());
435435
}
436-
if (produceOmegaExtras) {
436+
if (mProduceOmegaExtras) {
437437
cascadeProducts.producedOmegaExtras(
438438
cascade.mXi(),
439439
cascade.casccosPA(col.posX(), col.posY(), col.posZ()),
@@ -450,14 +450,14 @@ class CascadeBuilder
450450
bool fillAnyTable() { return mFillAnyTable; }
451451

452452
private:
453-
CascadeSelection<cascadeType> cascadeSelection;
453+
CascadeSelection<cascadeType> mCascadeSelection;
454454
bool mFillAnyTable = false;
455-
bool produceXis = false;
456-
bool produceXiMasks = false;
457-
bool produceXiExtras = false;
458-
bool produceOmegas = false;
459-
bool produceOmegaMasks = false;
460-
bool produceOmegaExtras = false;
455+
bool mProduceXis = false;
456+
bool mProduceXiMasks = false;
457+
bool mProduceXiExtras = false;
458+
bool mProduceOmegas = false;
459+
bool mProduceOmegaMasks = false;
460+
bool mProduceOmegaExtras = false;
461461
};
462462

463463
} // namespace cascadebuilder

0 commit comments

Comments
 (0)