@@ -500,6 +500,7 @@ class CollisionSelection : public baseselection::BaseSelection<float, o2::analys
500500
501501struct CollisionBuilderProducts : o2::framework::ProducesGroup {
502502 o2::framework::Produces<o2::aod::FCols> producedCollision;
503+ o2::framework::Produces<o2::aod::FLiteCols> producedLiteCollision;
503504 o2::framework::Produces<o2::aod::FColMasks> producedCollisionMask;
504505 o2::framework::Produces<o2::aod::FColPos> producedPositions;
505506 o2::framework::Produces<o2::aod::FColSphericities> producedSphericities;
@@ -511,6 +512,7 @@ struct CollisionBuilderProducts : o2::framework::ProducesGroup {
511512struct ConfCollisionTables : o2::framework::ConfigurableGroup {
512513 std::string prefix = std::string(" CollisionTables" );
513514 o2::framework::Configurable<int > produceCollisions{" produceCollisions" , -1 , " Produce Collisions (-1: auto; 0 off; 1 on)" };
515+ o2::framework::Configurable<int > produceLiteCollisions{" produceLiteCollisions" , -1 , " Produce Lite Collisions (-1: auto; 0 off; 1 on)" };
514516 o2::framework::Configurable<int > produceCollisionMasks{" produceCollisionMasks" , -1 , " Produce Collision Masks (-1: auto; 0 off; 1 on)" };
515517 o2::framework::Configurable<int > producePositions{" producePositions" , -1 , " Produce Positions (-1: auto; 0 off; 1 on)" };
516518 o2::framework::Configurable<int > produceSphericities{" produceSphericities" , -1 , " Produce Sphericity (-1: auto; 0 off; 1 on)" };
@@ -536,13 +538,21 @@ class CollisionBuilder
536538 mSubGeneratorId = confFilter.subGeneratorId .value ;
537539
538540 mProducedCollisions = utils::enableTable (" FCols_001" , confTable.produceCollisions .value , initContext);
541+ mProducedLiteCollisions = utils::enableTable (" FLiteCols_001" , confTable.produceLiteCollisions .value , initContext);
539542 mProducedCollisionMasks = utils::enableTable (" FColMasks_001" , confTable.produceCollisionMasks .value , initContext);
540543 mProducedPositions = utils::enableTable (" FColPos_001" , confTable.producePositions .value , initContext);
541544 mProducedSphericities = utils::enableTable (" FColSphericities_001" , confTable.produceSphericities .value , initContext);
542545 mProducedMultiplicities = utils::enableTable (" FColMults_001" , confTable.produceMults .value , initContext);
543546 mProducedCentralities = utils::enableTable (" FColCents_001" , confTable.produceCents .value , initContext);
544547 mProduceQns = utils::enableTable (" FColQnBins_001" , confTable.produceQns .value , initContext);
545- if (mProducedCollisions || mProducedCollisionMasks || mProducedPositions || mProducedSphericities || mProducedMultiplicities || mProducedCentralities ) {
548+
549+ if (mProducedCollisions && mProducedLiteCollisions ) {
550+ LOG (fatal) << " FCols and FLiteCols are mutually exclusive -- enable only one. "
551+ << " FLiteCols is meant to only replace FCols at the producer stage (for better compression in derived data); "
552+ << " use the dedicated converter task to reconstruct FCols from FLiteCols downstream." ;
553+ }
554+
555+ if (mProducedCollisions || mProducedLiteCollisions || mProducedCollisionMasks || mProducedPositions || mProducedSphericities || mProducedMultiplicities || mProducedCentralities ) {
546556 mFillAnyTable = true ;
547557 } else {
548558 LOG (info) << " No tables configured, Selection object will not be configured..." ;
@@ -616,17 +626,25 @@ class CollisionBuilder
616626 if (!mFillAnyTable ) {
617627 return ;
618628 }
619-
620629 if (mCollisionAlreadyFilled ) {
621630 return ;
622631 }
623-
624632 if (mProducedCollisions ) {
625633 collisionProducts.producedCollision (col.posZ (),
626634 col.multNTracksPV (),
627635 mCollisionSelection .getCentrality (),
628636 static_cast <int8_t >(mCollisionSelection .getMagneticField ()));
637+
638+ mCurrentCollisionIndex = collisionProducts.producedCollision .lastIndex ();
639+ }
640+ if (mProducedLiteCollisions ) {
641+ collisionProducts.producedLiteCollision (o2::aod::femtocollisions::lite::binPosZ (col.posZ ()),
642+ o2::aod::femtocollisions::lite::binMult (col.multNTracksPV ()),
643+ o2::aod::femtocollisions::lite::binCent (mCollisionSelection .getCentrality ()),
644+ static_cast <int8_t >(mCollisionSelection .getMagneticField ()));
645+ mCurrentCollisionIndex = collisionProducts.producedLiteCollision .lastIndex ();
629646 }
647+
630648 if (mProducedCollisionMasks ) {
631649 collisionProducts.producedCollisionMask (mCollisionSelection .getBitmask ());
632650 }
@@ -673,18 +691,25 @@ class CollisionBuilder
673691 mcBuilder.template fillMcCollisionWithLabel <system>(mcProducts, col, mcCols);
674692 }
675693
676- void reset () { mCollisionAlreadyFilled = false ; }
694+ [[nodiscard]] int64_t collisionIndex () const { return mCurrentCollisionIndex ; }
695+ void reset ()
696+ {
697+ mCollisionAlreadyFilled = false ;
698+ mCurrentCollisionIndex = -1 ;
699+ }
677700
678701 private:
679702 CollisionSelection<SelectionHistName, FilterHistName> mCollisionSelection ;
680703 bool mCollisionAlreadyFilled = false ;
704+ int64_t mCurrentCollisionIndex = -1 ;
681705 int mRunNumber = -1 ;
682706 std::string mGrpPath = std::string(" " );
683707 int mMagFieldForced = 0 ;
684708 int mMagField = 0 ;
685709 int mSubGeneratorId = -1 ;
686710 bool mFillAnyTable = false ;
687711 bool mProducedCollisions = false ;
712+ bool mProducedLiteCollisions = false ;
688713 bool mProducedCollisionMasks = false ;
689714 bool mProducedPositions = false ;
690715 bool mProducedSphericities = false ;
0 commit comments