1616// The skimmed MC stack includes the MC truth particles corresponding to the list of user specified MC signals (see MCsignal.h)
1717// and the MC truth particles corresponding to the reconstructed tracks selected by the specified track cuts on reconstructed data.
1818
19+ #include < cstdint>
1920#include < iostream>
2021#include < map>
2122#include < string>
@@ -86,6 +87,7 @@ using MyMuonsWithCov = soa::Join<aod::FwdTracks, aod::FwdTracksCov, aod::McFwdTr
8687
8788using MyEvents = soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels>;
8889using MyEventsWithMults = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra, aod::McCollisionLabels>;
90+ using MyEventsWithMultsAndRapidityGapFilter = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra, aod::McCollisionLabels, aod::DQRapidityGapFilter>;
8991using MyEventsWithCent = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::McCollisionLabels>;
9092using MyEventsWithCentAndMults = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::Mults, aod::MultsExtra, aod::McCollisionLabels>;
9193using MFTTrackLabeled = soa::Join<o2::aod::MFTTracks, aod::McMFTTrackLabels>;
@@ -95,6 +97,7 @@ constexpr static uint32_t gkEventFillMap = VarManager::ObjTypes::BC | VarManager
9597constexpr static uint32_t gkEventFillMapWithMults = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::CollisionMultExtra;
9698// constexpr static uint32_t gkEventFillMapWithCent = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionCent;
9799constexpr static uint32_t gkEventFillMapWithCentAndMults = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionCent | VarManager::CollisionMult | VarManager::CollisionMultExtra;
100+ constexpr static uint32_t gkEventFillMapWithMultsRapidityGapFilter = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::CollisionMultExtra | VarManager::ObjTypes::RapidityGapFilter;
98101// constexpr static uint32_t gkEventMCFillMap = VarManager::ObjTypes::CollisionMC;
99102// constexpr static uint32_t gkTrackFillMap = VarManager::ObjTypes::Track | VarManager::ObjTypes::TrackExtra | VarManager::ObjTypes::TrackDCA | VarManager::ObjTypes::TrackSelection | VarManager::ObjTypes::TrackPID;
100103constexpr static uint32_t gkTrackFillMapWithCov = VarManager::ObjTypes::Track | VarManager::ObjTypes::TrackExtra | VarManager::ObjTypes::TrackDCA | VarManager::ObjTypes::TrackSelection | VarManager::ObjTypes::TrackCov | VarManager::ObjTypes::TrackPID;
@@ -236,7 +239,7 @@ struct TableMakerMC {
236239 {
237240 // Check whether barrel or muon are enabled
238241 bool isProcessBCenabled = context.mOptions .get <bool >(" processPP" );
239- bool isBarrelEnabled = (context.mOptions .get <bool >(" processPP" ) || context.mOptions .get <bool >(" processPPBarrelOnly" ) || context.mOptions .get <bool >(" processPbPbBarrelOnly" ));
242+ bool isBarrelEnabled = (context.mOptions .get <bool >(" processPP" ) || context.mOptions .get <bool >(" processPPBarrelOnly" ) || context.mOptions .get <bool >(" processPbPbBarrelOnly" ) || context. mOptions . get < bool >( " processPbPbWithFilterBarrelOnly " ) );
240243 bool isMuonEnabled = (context.mOptions .get <bool >(" processPP" ) || context.mOptions .get <bool >(" processPPMuonOnlyBasic" ) || context.mOptions .get <bool >(" processPPMuonOnly" ) || context.mOptions .get <bool >(" processPbPbMuonOnly" ));
241244 // Make sure at least one process function is enabled
242245 if (!(isProcessBCenabled || isBarrelEnabled || isMuonEnabled)) {
@@ -553,6 +556,13 @@ struct TableMakerMC {
553556 }
554557 (reinterpret_cast <TH2I*>(fStatsList ->At (0 )))->Fill (1.0 , static_cast <float >(o2::aod::evsel::kNsel ));
555558
559+ // apply the event filter
560+ if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0 ) {
561+ if (!collision.eventFilter ()) {
562+ continue ;
563+ }
564+ }
565+
556566 auto bc = collision.template bc_as <BCsWithTimestamps>();
557567 // store the selection decisions
558568 uint64_t tag = static_cast <uint64_t >(0 );
@@ -562,6 +572,10 @@ struct TableMakerMC {
562572 if (bcEvSel.globalIndex () != bc.globalIndex ()) {
563573 tag |= (static_cast <uint64_t >(1 ) << 0 );
564574 }
575+ // Put the 8 first bits of the event filter in the last 8 bits of the tag
576+ if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0 ) {
577+ tag |= (collision.eventFilter () << 56 );
578+ }
565579
566580 // Compute BC and event quantities and fill histograms
567581 VarManager::ResetValues (0 , VarManager::kNEventWiseVariables );
@@ -602,16 +616,25 @@ struct TableMakerMC {
602616 event (tag, bc.runNumber (), collision.posX (), collision.posY (), collision.posZ (), collision.numContrib (), collision.collisionTime (), collision.collisionTimeRes ());
603617 if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionMult) > 0 ) {
604618 multTPC = collision.multTPC ();
605- multFV0A = collision.multFV0A ();
606619 multFV0C = collision.multFV0C ();
607- multFT0A = collision.multFT0A ();
608- multFT0C = collision.multFT0C ();
609- multFDDA = collision.multFDDA ();
610- multFDDC = collision.multFDDC ();
611620 multZNA = collision.multZNA ();
612621 multZNC = collision.multZNC ();
613622 multTracklets = collision.multTracklets ();
614623 multTracksPV = collision.multNTracksPV ();
624+ if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0 ) {
625+ // Use the FIT signals from the nearest BC with FIT amplitude above threshold
626+ multFV0A = collision.newBcMultFV0A ();
627+ multFT0A = collision.newBcMultFT0A ();
628+ multFT0C = collision.newBcMultFT0C ();
629+ multFDDA = collision.newBcMultFDDA ();
630+ multFDDC = collision.newBcMultFDDC ();
631+ } else {
632+ multFV0A = collision.multFV0A ();
633+ multFT0A = collision.multFT0A ();
634+ multFT0C = collision.multFT0C ();
635+ multFDDA = collision.multFDDA ();
636+ multFDDC = collision.multFDDC ();
637+ }
615638 }
616639 if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionCent) > 0 ) {
617640 centFT0C = collision.centFT0C ();
@@ -1338,6 +1361,13 @@ struct TableMakerMC {
13381361 fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapWithCov, 0u , 0u >(collisions, bcs, tracksBarrel, nullptr , nullptr , trackAssocs, nullptr , nullptr , mcCollisions, mcParticles);
13391362 }
13401363
1364+ void processPbPbWithFilterBarrelOnly (MyEventsWithMultsAndRapidityGapFilter const & collisions, aod::BCsWithTimestamps const & bcs,
1365+ MyBarrelTracksWithCov const & tracksBarrel, aod::TrackAssoc const & trackAssocs,
1366+ aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
1367+ {
1368+ fullSkimming<gkEventFillMapWithMultsRapidityGapFilter, gkTrackFillMapWithCov, 0u , 0u >(collisions, bcs, tracksBarrel, nullptr , nullptr , trackAssocs, nullptr , nullptr , mcCollisions, mcParticles);
1369+ }
1370+
13411371 void processPbPbMuonOnly (MyEventsWithCentAndMults const & collisions, aod::BCsWithTimestamps const & bcs,
13421372 MyMuonsWithCov const & tracksMuon, MFTTrackLabeled const & mftTracks,
13431373 aod::FwdTrackAssoc const & fwdTrackAssocs, aod::MFTTrackAssoc const & mftAssocs,
@@ -1363,6 +1393,7 @@ struct TableMakerMC {
13631393 PROCESS_SWITCH (TableMakerMC, processPPMuonOnly, " Produce only muon skims, pp settings" , false );
13641394 PROCESS_SWITCH (TableMakerMC, processPbPb, " Produce both barrel and muon skims, PbPb settings" , false );
13651395 PROCESS_SWITCH (TableMakerMC, processPbPbBarrelOnly, " Produce only barrel skims, PbPb settings" , false );
1396+ PROCESS_SWITCH (TableMakerMC, processPbPbWithFilterBarrelOnly, " Produce only barrel skims, pp settings with rapidity gap filter " , false );
13661397 PROCESS_SWITCH (TableMakerMC, processPbPbMuonOnly, " Produce only muon skims, PbPb settings" , false );
13671398 PROCESS_SWITCH (TableMakerMC, processOnlyBCs, " Analyze the BCs to store sampled lumi" , false );
13681399};
0 commit comments