@@ -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
5757struct 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
7678struct 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
147153class 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::
295305struct 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
304315struct 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
314326class 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