Skip to content

Commit 266ced8

Browse files
committed
Feat: framework update
1 parent f2e614f commit 266ced8

29 files changed

+718
-304
lines changed

PWGCF/Femto/Core/baseSelection.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -279,12 +279,12 @@ class BaseSelection
279279
line << std::setw(bitWidth) << "-> loosest minimal selection, no bit saved";
280280
} else {
281281
const uint64_t bitmask = uint64_t{1} << globalBitIndex++;
282-
line << std::setw(bitWidth) << ("-> bitmask: " + std::to_string(bitmask));
282+
std::stringstream hexStream;
283+
hexStream << "-> bitmask: 0x" << std::uppercase << std::hex << bitmask;
284+
line << std::setw(bitWidth) << hexStream.str();
283285
}
284-
285286
LOG(info) << line.str();
286287
}
287-
288288
LOG(info) << ""; // blank line between observables
289289
}
290290
LOG(info) << "Printing done";

PWGCF/Femto/Core/cascadeBuilder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ struct ConfOmegaBits : o2::framework::ConfigurableGroup {
101101
o2::framework::Configurable<float> phiMax{"phiMax", 1.f * o2::constants::math::TwoPI, "Maximum phi"}; \
102102
o2::framework::Configurable<float> massMin{"massMin", defaultMassMin, "Minimum invariant mass for Cascade"}; \
103103
o2::framework::Configurable<float> massMax{"massMax", defaultMassMax, "Maximum invariant mass for Cascade"}; \
104-
o2::framework::Configurable<o2::aod::femtodatatypes::CascadeMaskType> mask{"mask", 0, "Bitmask for cascade selection"};
104+
o2::framework::Configurable<o2::aod::femtodatatypes::CascadeMaskType> mask{"mask", 0x0, "Bitmask for cascade selection"};
105105

106106
struct ConfXiSelection : o2::framework::ConfigurableGroup {
107107
std::string prefix = std::string("XiSelection");

PWGCF/Femto/Core/closePairRejection.h

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -109,20 +109,13 @@ class CloseTrackRejection
109109
CloseTrackRejection() = default;
110110
virtual ~CloseTrackRejection() = default;
111111

112-
void init(o2::framework::HistogramRegistry* registry, std::map<CprHist, std::vector<o2::framework::AxisSpec>>& specs, float detaMax, float dphistarMax, int chargeTrack1, int chargeTrack2)
112+
void init(o2::framework::HistogramRegistry* registry, std::map<CprHist, std::vector<o2::framework::AxisSpec>>& specs, float detaMax, float dphistarMax, int chargeAbsTrack1, int chargeAbsTrack2)
113113
{
114114
mDetaMax = detaMax;
115115
mDphistarMax = dphistarMax;
116116

117-
if (mDetaMax < o2::constants::math::Epsilon || mDphistarMax < o2::constants::math::Epsilon) {
118-
LOG(fatal) << "Either DetaMax or DphistarMax are 0 or negative. Either turn off CPR or specify reasonable values. Breaking ...";
119-
}
120-
mChargeTrack1 = chargeTrack1;
121-
mChargeTrack2 = chargeTrack2;
122-
123-
if (utils::sign(mChargeTrack1) != utils::sign(mChargeTrack2)) {
124-
LOG(warn) << "CPR is turned on for tracks with opposite charge. Is this intended?";
125-
}
117+
mChargeAbsTrack1 = chargeAbsTrack1;
118+
mChargeAbsTrack2 = chargeAbsTrack2;
126119

127120
mHistogramRegistry = registry;
128121

@@ -150,8 +143,8 @@ class CloseTrackRejection
150143

151144
mDeta = track1.eta() - track2.eta();
152145
for (size_t i = 0; i < kTpcRadius.size(); i++) {
153-
auto phistar1 = utils::dphistar(mMagField, kTpcRadius[i], mChargeTrack1, track1.pt(), track1.phi());
154-
auto phistar2 = utils::dphistar(mMagField, kTpcRadius[i], mChargeTrack2, track2.pt(), track2.phi());
146+
auto phistar1 = utils::dphistar(mMagField, kTpcRadius[i], mChargeAbsTrack1 * track1.signedPt(), track1.phi());
147+
auto phistar2 = utils::dphistar(mMagField, kTpcRadius[i], mChargeAbsTrack2 * track2.signedPt(), track2.phi());
155148
if (phistar1 && phistar2) {
156149
// if the calculation for one phistar fails, keep the default value, which is 0
157150
// this makes it more likelier for the pair to be rejected sind the averave will be biased towards lower values
@@ -184,8 +177,8 @@ class CloseTrackRejection
184177
}
185178

186179
private:
187-
int mChargeTrack1 = 0;
188-
int mChargeTrack2 = 0;
180+
int mChargeAbsTrack1 = 0;
181+
int mChargeAbsTrack2 = 0;
189182
float mMagField = 0.f;
190183
float mAverageDphistar = 0.f;
191184
float mDeta = 0.f;

PWGCF/Femto/Core/collisionBuilder.h

Lines changed: 72 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@ struct ConfCollisionFilters : o2::framework::ConfigurableGroup {
4545
o2::framework::Configurable<float> vtxZMin{"vtxZMin", -10.f, "Minimum vertex Z position (cm)"};
4646
o2::framework::Configurable<float> vtxZMax{"vtxZMax", 10.f, "Maximum vertex Z position (cm)"};
4747
o2::framework::Configurable<float> multMin{"multMin", 0.f, "Minimum multiplicity"};
48-
o2::framework::Configurable<float> multMax{"multMax", 999.f, "Maximum multiplicity"};
48+
o2::framework::Configurable<float> multMax{"multMax", 5000.f, "Maximum multiplicity"};
4949
o2::framework::Configurable<float> centMin{"centMin", 0.f, "Minimum centrality (multiplicity percentile)"};
50-
o2::framework::Configurable<float> centMax{"centMax", 999.f, "Maximum centrality (multiplicity percentile)"};
51-
o2::framework::Configurable<float> spherMin{"spherMin", 0.f, "Minimum centrality (multiplicity percentile)"};
52-
o2::framework::Configurable<float> spherMax{"spherMax", 2.f, "Maximum centrality (multiplicity percentile)"};
53-
o2::framework::Configurable<float> magFieldMin{"magFieldMin", -1.f, "Minimum magnetic field strength (T)"};
54-
o2::framework::Configurable<float> magFieldMax{"magFieldMax", 1.f, "Maximum magnetic field strength (T)"};
50+
o2::framework::Configurable<float> centMax{"centMax", 100.f, "Maximum centrality (multiplicity percentile)"};
51+
o2::framework::Configurable<float> sphericityMin{"sphericityMin", 0.f, "Minimum sphericity"};
52+
o2::framework::Configurable<float> sphericityMax{"sphericityMax", 1.f, "Maximum sphericity"};
53+
o2::framework::Configurable<int> magFieldMin{"magFieldMin", -5, "Minimum magnetic field strength (kG)"};
54+
o2::framework::Configurable<int> magFieldMax{"magFieldMax", 5, "Maximum magnetic field strength (kG)"};
5555
};
5656

5757
struct ConfCollisionBits : o2::framework::ConfigurableGroup {
@@ -71,6 +71,8 @@ struct ConfCollisionBits : o2::framework::ConfigurableGroup {
7171
o2::framework::Configurable<int> isGoodItsLayersAll{"isGoodItsLayersAll", 0, "numbers of inactive chips on all ITS layers are below maximum allowed values (-1: stored in bitmaks; 0 off; 1 on)"};
7272
o2::framework::Configurable<std::vector<float>> occupancyMin{"occupancyMin", {}, "Minimum occpancy"};
7373
o2::framework::Configurable<std::vector<float>> occupancyMax{"occupancyMax", {}, "Maximum occpancy"};
74+
o2::framework::Configurable<std::vector<float>> sphericityMin{"sphericityMin", {}, "Minimum sphericity"};
75+
o2::framework::Configurable<std::vector<float>> sphericityMax{"sphericityMax", {}, "Maximum sphericity"};
7476
};
7577

7678
struct ConfCollisionTriggers : o2::framework::ConfigurableGroup {
@@ -94,14 +96,12 @@ struct ConfCollisionSelection : o2::framework::ConfigurableGroup {
9496
o2::framework::Configurable<float> vtxZMin{"vtxZMin", -10.f, "Minimum vertex Z position (cm)"};
9597
o2::framework::Configurable<float> vtxZMax{"vtxZMax", 10.f, "Maximum vertex Z position (cm)"};
9698
o2::framework::Configurable<float> multMin{"multMin", 0.f, "Minimum multiplicity"};
97-
o2::framework::Configurable<float> multMax{"multMax", 999.f, "Maximum multiplicity"};
99+
o2::framework::Configurable<float> multMax{"multMax", 5000.f, "Maximum multiplicity"};
98100
o2::framework::Configurable<float> centMin{"centMin", 0.f, "Minimum centrality (multiplicity percentile)"};
99-
o2::framework::Configurable<float> centMax{"centMax", 999.f, "Maximum centrality (multiplicity percentile)"};
100-
o2::framework::Configurable<float> spherMin{"spherMin", 0.f, "Minimum centrality (multiplicity percentile)"};
101-
o2::framework::Configurable<float> spherMax{"spherMax", 2.f, "Maximum centrality (multiplicity percentile)"};
102-
o2::framework::Configurable<float> magFieldMin{"magFieldMin", -1.f, "Minimum magnetic field strength (T)"};
103-
o2::framework::Configurable<float> magFieldMax{"magFieldMax", 1.f, "Maximum magnetic field strength (T)"};
104-
o2::framework::Configurable<aod::femtodatatypes::CollisionMaskType> collisionMask{"collisionMask", 0, "Bitmask for collision"};
101+
o2::framework::Configurable<float> centMax{"centMax", 100.f, "Maximum centrality (multiplicity percentile)"};
102+
o2::framework::Configurable<int> magFieldMin{"magFieldMin", -5, "Minimum magnetic field strength (kG)"};
103+
o2::framework::Configurable<int> magFieldMax{"magFieldMax", 5, "Maximum magnetic field strength (kG)"};
104+
o2::framework::Configurable<aod::femtodatatypes::CollisionMaskType> collisionMask{"collisionMask", 0x0, "Bitmask for collision"};
105105
};
106106

107107
/// enum for all collision selections
@@ -122,6 +122,8 @@ enum CollisionSels {
122122
kIsGoodItsLayersAll, ///< numbers of inactive chips on all ITS layers are below maximum allowed values
123123
kOccupancyMin, ///< Min. occupancy
124124
kOccupancyMax, ///< Max. occupancy
125+
kSphericityMin, ///< Min. sphericity
126+
kSphericityMax, ///< Max. sphericity
125127

126128
kCollisionSelsMax
127129
};
@@ -142,7 +144,11 @@ const std::unordered_map<CollisionSels, std::string> colSelsToString = {
142144
{kIsGoodItsLayer0123, "Is good ITS layer 0-3"},
143145
{kIsGoodItsLayersAll, "Is good ITS layer all"},
144146
{kOccupancyMin, "Minimum Occupancy"},
145-
{kOccupancyMax, "Maximum Occupancy"}};
147+
{kOccupancyMax, "Maximum Occupancy"},
148+
{kSphericityMin, "Minimum Sphericity"},
149+
{kSphericityMax, "Maximum Sphericity"}
150+
151+
};
146152

147153
class CollisionSelection : public BaseSelection<float, o2::aod::femtodatatypes::CollisionMaskType, kCollisionSelsMax>
148154
{
@@ -162,8 +168,8 @@ class CollisionSelection : public BaseSelection<float, o2::aod::femtodatatypes::
162168
mMultMax = filter.multMax.value;
163169
mCentMin = filter.centMin.value;
164170
mCentMax = filter.centMax.value;
165-
mSphericityMin = filter.spherMin.value;
166-
mSphericityMax = filter.spherMax.value;
171+
mSphericityMin = filter.sphericityMin.value;
172+
mSphericityMax = filter.sphericityMax.value;
167173

168174
// flags
169175
this->addSelection(config.sel8.value, kSel8);
@@ -180,9 +186,11 @@ class CollisionSelection : public BaseSelection<float, o2::aod::femtodatatypes::
180186
this->addSelection(config.isGoodItsLayersAll.value, kIsGoodItsLayersAll);
181187
this->addSelection(config.occupancyMin.value, kOccupancyMin, limits::kLowerLimit, true, true);
182188
this->addSelection(config.occupancyMax.value, kOccupancyMax, limits::kUpperLimit, true, true);
189+
this->addSelection(config.sphericityMin.value, kSphericityMin, limits::kLowerLimit, true, true);
190+
this->addSelection(config.sphericityMax.value, kSphericityMax, limits::kUpperLimit, true, true);
183191
};
184192

185-
void setMagneticField(float MagField)
193+
void setMagneticField(int MagField)
186194
{
187195
mMagField = MagField;
188196
}
@@ -269,6 +277,8 @@ class CollisionSelection : public BaseSelection<float, o2::aod::femtodatatypes::
269277

270278
this->evaluateObservable(kOccupancyMin, col.trackOccupancyInTimeRange());
271279
this->evaluateObservable(kOccupancyMax, col.trackOccupancyInTimeRange());
280+
this->evaluateObservable(kSphericityMin, mSphericity);
281+
this->evaluateObservable(kSphericityMax, mSphericity);
272282

273283
this->assembleBitmask();
274284
};
@@ -278,15 +288,15 @@ class CollisionSelection : public BaseSelection<float, o2::aod::femtodatatypes::
278288
float mVtxZMin = -12.f;
279289
float mVtxZMax = -12.f;
280290
float mSphericityMin = 0.f;
281-
float mSphericityMax = 2.f;
282-
float mMagFieldMin = -1.f;
283-
float mMagFieldMax = 1.f;
291+
float mSphericityMax = 1.f;
292+
float mMagFieldMin = -5.f;
293+
float mMagFieldMax = 5.f;
284294
float mMultMin = 0.f;
285-
float mMultMax = 999.f;
295+
float mMultMax = 5000.f;
286296
float mCentMin = 0.f;
287-
float mCentMax = 999.f;
297+
float mCentMax = 100.f;
288298

289-
float mMagField = 0.f;
299+
int mMagField = 0.f;
290300
float mSphericity = 0.f;
291301
float mCentrality = 0.f;
292302
float mMultiplicity = 0.f;
@@ -295,20 +305,22 @@ class CollisionSelection : public BaseSelection<float, o2::aod::femtodatatypes::
295305
struct CollisionBuilderProducts : o2::framework::ProducesGroup {
296306
o2::framework::Produces<o2::aod::FCols> producedCollision;
297307
o2::framework::Produces<o2::aod::FColMasks> producedCollisionMask;
298-
o2::framework::Produces<o2::aod::FColQns> producedQns;
299308
o2::framework::Produces<o2::aod::FColPos> producedPositions;
309+
o2::framework::Produces<o2::aod::FColSphericities> producedSphericities;
300310
o2::framework::Produces<o2::aod::FColMults> producedMultiplicityEstimators;
301311
o2::framework::Produces<o2::aod::FColCents> producedCentralityEstimators;
312+
o2::framework::Produces<o2::aod::FColQns> producedQns;
302313
};
303314

304315
struct ConfCollisionTables : o2::framework::ConfigurableGroup {
305316
std::string prefix = std::string("CollisionTables");
306317
o2::framework::Configurable<int> produceCollisions{"produceCollisions", -1, "Produce Collisions (-1: auto; 0 off; 1 on)"};
307318
o2::framework::Configurable<int> produceCollisionMasks{"produceCollisionMasks", -1, "Produce Collision Masks (-1: auto; 0 off; 1 on)"};
308-
o2::framework::Configurable<int> produceQns{"produceQns", -1, "Produce Qn (-1: auto; 0 off; 1 on)"};
309319
o2::framework::Configurable<int> producePositions{"producePositions", -1, "Produce Positions (-1: auto; 0 off; 1 on)"};
320+
o2::framework::Configurable<int> produceSphericities{"produceSphericities", -1, "Produce Sphericity (-1: auto; 0 off; 1 on)"};
310321
o2::framework::Configurable<int> produceMults{"produceMults", -1, "Produce Multiplicities (-1: auto; 0 off; 1 on)"};
311322
o2::framework::Configurable<int> produceCents{"produceCents", -1, "Produce Centralities (-1: auto; 0 off; 1 on)"};
323+
o2::framework::Configurable<int> produceQns{"produceQns", -1, "Produce Qn (-1: auto; 0 off; 1 on)"};
312324
};
313325

314326
class CollisionBuilder
@@ -334,11 +346,12 @@ class CollisionBuilder
334346
LOG(info) << "Initialize femto collision builder...";
335347
mProducedCollisions = utils::enableTable("FCols_001", confTable.produceCollisions.value, initContext);
336348
mProducedCollisionMasks = utils::enableTable("FColMasks_001", confTable.produceCollisionMasks.value, initContext);
337-
mProduceQns = utils::enableTable("FColQnBins_001", confTable.produceQns.value, initContext);
338349
mProducedPositions = utils::enableTable("FColPos_001", confTable.producePositions.value, initContext);
350+
mProducedSphericities = utils::enableTable("FColSphericities_001", confTable.produceSphericities.value, initContext);
339351
mProducedMultiplicities = utils::enableTable("FColMults_001", confTable.produceMults.value, initContext);
340352
mProducedCentralities = utils::enableTable("FColCents_001", confTable.produceCents.value, initContext);
341-
if (mProducedCollisions || mProducedCollisionMasks || mProducedPositions || mProducedMultiplicities || mProducedCentralities) {
353+
mProduceQns = utils::enableTable("FColQnBins_001", confTable.produceQns.value, initContext);
354+
if (mProducedCollisions || mProducedCollisionMasks || mProducedPositions || mProducedSphericities || mProducedMultiplicities || mProducedCentralities) {
342355
mFillAnyTable = true;
343356
mCollisionSelection.printSelections(colSelsName, colSelsToString);
344357
} else {
@@ -348,7 +361,7 @@ class CollisionBuilder
348361
}
349362

350363
template <modes::System system, typename T1, typename T2, typename T3, typename T4>
351-
void buildCollision(T1& bc, T2& col, T3& tracks, T4& ccdb, float magField)
364+
void buildCollision(T1& bc, T2& col, T3& tracks, T4& ccdb, int magField)
352365
{
353366
if (mUseTrigger) {
354367
mZorro.initCCDB(ccdb.service, bc.runNumber(), bc.timestamp(), mTriggerNames);
@@ -357,7 +370,6 @@ class CollisionBuilder
357370
mCollisionSelection.setSphericity(tracks);
358371
mCollisionSelection.setMultiplicity<system>(col);
359372
mCollisionSelection.setCentrality<system>(col);
360-
361373
mCollisionSelection.applySelections(col);
362374
}
363375

@@ -387,8 +399,7 @@ class CollisionBuilder
387399
collisionProducts.producedCollision(col.posZ(),
388400
col.multNTracksPV(),
389401
mCollisionSelection.getCentrality(),
390-
mCollisionSelection.getSphericity(),
391-
mCollisionSelection.getMagneticField());
402+
static_cast<int8_t>(mCollisionSelection.getMagneticField()));
392403
}
393404
if (mProducedCollisionMasks) {
394405
collisionProducts.producedCollisionMask(mCollisionSelection.getBitmask());
@@ -397,6 +408,9 @@ class CollisionBuilder
397408
collisionProducts.producedPositions(col.posX(),
398409
col.posY());
399410
}
411+
if (mProducedSphericities) {
412+
collisionProducts.producedSphericities(mCollisionSelection.getSphericity());
413+
}
400414
if (mProducedMultiplicities) {
401415
collisionProducts.producedMultiplicityEstimators(
402416
col.multFT0A(),
@@ -430,12 +444,36 @@ class CollisionBuilder
430444
bool mFillAnyTable = false;
431445
bool mProducedCollisions = false;
432446
bool mProducedCollisionMasks = false;
433-
bool mProduceQns = false;
434447
bool mProducedPositions = false;
448+
bool mProducedSphericities = false;
435449
bool mProducedMultiplicities = false;
436450
bool mProducedCentralities = false;
451+
bool mProduceQns = false;
437452
};
438-
}; // namespace collisionbuilder
439-
}; // namespace o2::analysis::femto
453+
454+
struct CollisionBuilderDerivedToDerivedProducts : o2::framework::ProducesGroup {
455+
o2::framework::Produces<o2::aod::StoredFCols> producedCollision;
456+
o2::framework::Produces<o2::aod::StoredFColMasks> producedCollisionMask;
457+
};
458+
459+
class CollisionBuilderDerivedToDerived
460+
{
461+
public:
462+
CollisionBuilderDerivedToDerived() = default;
463+
virtual ~CollisionBuilderDerivedToDerived() = default;
464+
465+
template <typename T1, typename T2>
466+
void processCollision(T1& col, T2& newCollisionTable)
467+
{
468+
newCollisionTable.producedCollision(col.posZ(),
469+
col.mult(),
470+
col.cent(),
471+
col.magField());
472+
newCollisionTable.producedCollisionMask(col.collisionMask());
473+
}
474+
};
475+
476+
} // namespace collisionbuilder
477+
} // namespace o2::analysis::femto
440478
;
441479
#endif // PWGCF_FEMTO_CORE_COLLISIONBUILDER_H_

0 commit comments

Comments
 (0)