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>
@@ -88,6 +89,7 @@ using MyMuonsRealignWithCov = soa::Join<aod::FwdTracksReAlign, aod::FwdTrksCovRe
8889
8990using MyEvents = soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels>;
9091using MyEventsWithMults = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra, aod::McCollisionLabels>;
92+ using MyEventsWithMultsAndRapidityGapFilter = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra, aod::McCollisionLabels, aod::DQRapidityGapFilter>;
9193using MyEventsWithCent = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::McCollisionLabels>;
9294using MyEventsWithCentAndMults = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::Mults, aod::MultsExtra, aod::McCollisionLabels>;
9395using MFTTrackLabeled = soa::Join<o2::aod::MFTTracks, aod::McMFTTrackLabels>;
@@ -97,6 +99,7 @@ constexpr static uint32_t gkEventFillMap = VarManager::ObjTypes::BC | VarManager
9799constexpr static uint32_t gkEventFillMapWithMults = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::CollisionMultExtra;
98100// constexpr static uint32_t gkEventFillMapWithCent = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionCent;
99101constexpr static uint32_t gkEventFillMapWithCentAndMults = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionCent | VarManager::CollisionMult | VarManager::CollisionMultExtra;
102+ constexpr static uint32_t gkEventFillMapWithMultsRapidityGapFilter = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::CollisionMultExtra | VarManager::ObjTypes::RapidityGapFilter;
100103// constexpr static uint32_t gkEventMCFillMap = VarManager::ObjTypes::CollisionMC;
101104// constexpr static uint32_t gkTrackFillMap = VarManager::ObjTypes::Track | VarManager::ObjTypes::TrackExtra | VarManager::ObjTypes::TrackDCA | VarManager::ObjTypes::TrackSelection | VarManager::ObjTypes::TrackPID;
102105constexpr static uint32_t gkTrackFillMapWithCov = VarManager::ObjTypes::Track | VarManager::ObjTypes::TrackExtra | VarManager::ObjTypes::TrackDCA | VarManager::ObjTypes::TrackSelection | VarManager::ObjTypes::TrackCov | VarManager::ObjTypes::TrackPID;
@@ -239,7 +242,7 @@ struct TableMakerMC {
239242 {
240243 // Check whether barrel or muon are enabled
241244 bool isProcessBCenabled = context.mOptions .get <bool >(" processPP" );
242- bool isBarrelEnabled = (context.mOptions .get <bool >(" processPP" ) || context.mOptions .get <bool >(" processPPBarrelOnly" ) || context.mOptions .get <bool >(" processPbPbBarrelOnly" ) || context.mOptions .get <bool >(" processPbPbWithFilterBarrelOnly" ));
245+ bool isBarrelEnabled = (context.mOptions .get <bool >(" processPP" ) || context.mOptions .get <bool >(" processPPBarrelOnly" ) || context.mOptions .get <bool >(" processPbPbBarrelOnly" ) || context.mOptions .get <bool >(" processPbPbWithFilterBarrelOnly" ) || context. mOptions . get < bool >( " processPbPbWithFilterBarrelOnly " ) );
243246 bool isMuonEnabled = (context.mOptions .get <bool >(" processPP" ) || context.mOptions .get <bool >(" processPPMuonOnlyBasic" ) || context.mOptions .get <bool >(" processPPMuonOnly" ) || context.mOptions .get <bool >(" processPPRealignedMuonOnly" ) || context.mOptions .get <bool >(" processPbPbMuonOnly" )) || context.mOptions .get <bool >(" processPbPbRealignedMuonOnly" ));
244247 // Make sure at least one process function is enabled
245248 if (!(isProcessBCenabled || isBarrelEnabled || isMuonEnabled)) {
@@ -558,6 +561,13 @@ struct TableMakerMC {
558561 }
559562 (reinterpret_cast <TH2I*>(fStatsList ->At (0 )))->Fill (1.0 , static_cast <float >(o2::aod::evsel::kNsel ));
560563
564+ // apply the event filter
565+ if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0 ) {
566+ if (!collision.eventFilter ()) {
567+ continue ;
568+ }
569+ }
570+
561571 auto bc = collision.template bc_as <BCsWithTimestamps>();
562572 // store the selection decisions
563573 uint64_t tag = static_cast <uint64_t >(0 );
@@ -567,6 +577,10 @@ struct TableMakerMC {
567577 if (bcEvSel.globalIndex () != bc.globalIndex ()) {
568578 tag |= (static_cast <uint64_t >(1 ) << 0 );
569579 }
580+ // Put the 8 first bits of the event filter in the last 8 bits of the tag
581+ if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0 ) {
582+ tag |= (collision.eventFilter () << 56 );
583+ }
570584
571585 // Compute BC and event quantities and fill histograms
572586 VarManager::ResetValues (0 , VarManager::kNEventWiseVariables );
@@ -607,16 +621,25 @@ struct TableMakerMC {
607621 event (tag, bc.runNumber (), collision.posX (), collision.posY (), collision.posZ (), collision.numContrib (), collision.collisionTime (), collision.collisionTimeRes ());
608622 if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionMult) > 0 ) {
609623 multTPC = collision.multTPC ();
610- multFV0A = collision.multFV0A ();
611624 multFV0C = collision.multFV0C ();
612- multFT0A = collision.multFT0A ();
613- multFT0C = collision.multFT0C ();
614- multFDDA = collision.multFDDA ();
615- multFDDC = collision.multFDDC ();
616625 multZNA = collision.multZNA ();
617626 multZNC = collision.multZNC ();
618627 multTracklets = collision.multTracklets ();
619628 multTracksPV = collision.multNTracksPV ();
629+ if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0 ) {
630+ // Use the FIT signals from the nearest BC with FIT amplitude above threshold
631+ multFV0A = collision.newBcMultFV0A ();
632+ multFT0A = collision.newBcMultFT0A ();
633+ multFT0C = collision.newBcMultFT0C ();
634+ multFDDA = collision.newBcMultFDDA ();
635+ multFDDC = collision.newBcMultFDDC ();
636+ } else {
637+ multFV0A = collision.multFV0A ();
638+ multFT0A = collision.multFT0A ();
639+ multFT0C = collision.multFT0C ();
640+ multFDDA = collision.multFDDA ();
641+ multFDDC = collision.multFDDC ();
642+ }
620643 }
621644 if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionCent) > 0 ) {
622645 centFT0C = collision.centFT0C ();
@@ -1394,6 +1417,13 @@ struct TableMakerMC {
13941417 fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapWithCov, 0u , 0u , 0u >(collisions, bcs, tracksBarrel, nullptr , nullptr , nullptr , trackAssocs, nullptr , nullptr , mcCollisions, mcParticles);
13951418 }
13961419
1420+ void processPbPbWithFilterBarrelOnly (MyEventsWithMultsAndRapidityGapFilter const & collisions, aod::BCsWithTimestamps const & bcs,
1421+ MyBarrelTracksWithCov const & tracksBarrel, aod::TrackAssoc const & trackAssocs,
1422+ aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
1423+ {
1424+ fullSkimming<gkEventFillMapWithMultsRapidityGapFilter, gkTrackFillMapWithCov, 0u , 0u >(collisions, bcs, tracksBarrel, nullptr , nullptr , trackAssocs, nullptr , nullptr , mcCollisions, mcParticles);
1425+ }
1426+
13971427 void processPbPbMuonOnly (MyEventsWithCentAndMults const & collisions, aod::BCsWithTimestamps const & bcs,
13981428 MyMuonsWithCov const & tracksMuon, MFTTrackLabeled const & mftTracks,
13991429 aod::FwdTrackAssoc const & fwdTrackAssocs, aod::MFTTrackAssoc const & mftAssocs,
@@ -1428,6 +1458,7 @@ struct TableMakerMC {
14281458 PROCESS_SWITCH (TableMakerMC, processPPRealignedMuonOnly, " Build realigned muon only DQ skimmed data model typically for pp/p-Pb and UPC Pb-Pb" , false );
14291459 PROCESS_SWITCH (TableMakerMC, processPbPb, " Produce both barrel and muon skims, PbPb settings" , false );
14301460 PROCESS_SWITCH (TableMakerMC, processPbPbBarrelOnly, " Produce only barrel skims, PbPb settings" , false );
1461+ PROCESS_SWITCH (TableMakerMC, processPbPbWithFilterBarrelOnly, " Produce only barrel skims, pp settings with rapidity gap filter " , false );
14311462 PROCESS_SWITCH (TableMakerMC, processPbPbMuonOnly, " Produce only muon skims, PbPb settings" , false );
14321463 PROCESS_SWITCH (TableMakerMC, processPbPbRealignedMuonOnly, " Build realigned muon only DQ skimmed data model typically for Pb-Pb, w/o event filtering" , false );
14331464 PROCESS_SWITCH (TableMakerMC, processOnlyBCs, " Analyze the BCs to store sampled lumi" , false );
0 commit comments