3636#include " Common/DataModel/PIDResponse.h"
3737#include " Common/DataModel/TrackSelectionTables.h"
3838#include " Common/DataModel/MftmchMatchingML.h"
39+ #include " Common/Core/TableHelper.h"
3940#include " PWGDQ/DataModel/ReducedInfoTables.h"
4041#include " PWGDQ/Core/VarManager.h"
4142#include " PWGDQ/Core/HistogramManager.h"
@@ -98,6 +99,7 @@ using MyEvents = soa::Join<aod::Collisions, aod::EvSels>;
9899using MyEventsWithMults = soa::Join<aod::Collisions, aod::EvSels, aod::Mults>;
99100using MyEventsWithFilter = soa::Join<aod::Collisions, aod::EvSels, aod::DQEventFilter>;
100101using MyEventsWithMultsAndFilter = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra, aod::DQEventFilter>;
102+ using MyEventsWithMultsAndRapidityGapFilter = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra, aod::DQRapidityGapFilter>;
101103using MyEventsWithCent = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs>;
102104using MyEventsWithCentAndMults = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::Mults, aod::MultsExtra>;
103105using MyEventsWithMultsExtra = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra>;
@@ -116,6 +118,7 @@ constexpr static uint32_t gkEventFillMapWithMults = VarManager::ObjTypes::BC | V
116118constexpr static uint32_t gkEventFillMapWithMultsZdc = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::Zdc;
117119constexpr static uint32_t gkEventFillMapWithMultsAndEventFilter = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::CollisionMultExtra | VarManager::ObjTypes::EventFilter;
118120constexpr static uint32_t gkEventFillMapWithMultsEventFilterZdc = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::CollisionMultExtra | VarManager::ObjTypes::EventFilter | VarManager::ObjTypes::Zdc;
121+ constexpr static uint32_t gkEventFillMapWithMultsRapidityGapFilterZdc = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::CollisionMultExtra | VarManager::ObjTypes::RapidityGapFilter | VarManager::ObjTypes::Zdc;
119122// constexpr static uint32_t gkEventFillMapWithCent = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionCent;
120123constexpr static uint32_t gkEventFillMapWithCentAndMults = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionCent | VarManager::CollisionMult | VarManager::ObjTypes::CollisionMultExtra;
121124constexpr static uint32_t gkEventFillMapWithMultsExtra = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::CollisionMult | VarManager::ObjTypes::CollisionMultExtra;
@@ -356,7 +359,8 @@ struct TableMaker {
356359
357360 // Check whether we have to define barrel or muon histograms
358361 bool enableBarrelHistos = (context.mOptions .get <bool >(" processPPWithFilter" ) || context.mOptions .get <bool >(" processPPWithFilterBarrelOnly" ) || context.mOptions .get <bool >(" processPPBarrelOnly" ) ||
359- context.mOptions .get <bool >(" processPbPb" ) || context.mOptions .get <bool >(" processPbPbBarrelOnly" ) || context.mOptions .get <bool >(" processPbPbBarrelOnlyWithV0Bits" ) || context.mOptions .get <bool >(" processPbPbBarrelOnlyWithV0BitsNoTOF" ));
362+ context.mOptions .get <bool >(" processPbPb" ) || context.mOptions .get <bool >(" processPbPbBarrelOnly" ) || context.mOptions .get <bool >(" processPbPbBarrelOnlyWithV0Bits" ) || context.mOptions .get <bool >(" processPbPbBarrelOnlyWithV0BitsNoTOF" )) ||
363+ context.mOptions .get <bool >(" processPbPbWithFilterBarrelOnly" );
360364
361365 bool enableMuonHistos = (context.mOptions .get <bool >(" processPPWithFilter" ) || context.mOptions .get <bool >(" processPPWithFilterMuonOnly" ) || context.mOptions .get <bool >(" processPPWithFilterMuonMFT" ) || context.mOptions .get <bool >(" processPPMuonOnly" ) || context.mOptions .get <bool >(" processPPMuonMFT" ) || context.mOptions .get <bool >(" processPPMuonMFTWithMultsExtra" ) ||
362366 context.mOptions .get <bool >(" processPbPb" ) || context.mOptions .get <bool >(" processPbPbMuonOnly" ) || context.mOptions .get <bool >(" processPbPbMuonMFT" ));
@@ -772,7 +776,7 @@ struct TableMaker {
772776 (reinterpret_cast <TH2D*>(fStatsList ->At (kStatsEvent )))->Fill (1.0 , static_cast <float >(o2::aod::evsel::kNsel ));
773777
774778 // apply the event filter computed by filter-PP
775- if constexpr ((TEventFillMap & VarManager::ObjTypes::EventFilter) > 0 ) {
779+ if constexpr ((TEventFillMap & VarManager::ObjTypes::EventFilter) > 0 || (TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0 ) {
776780 if (!collision.eventFilter ()) {
777781 continue ;
778782 }
@@ -788,15 +792,18 @@ struct TableMaker {
788792 tag |= (static_cast <uint64_t >(1 ) << 0 );
789793 }
790794 // Put the 8 first bits of the event filter in the last 8 bits of the tag
791- if constexpr ((TEventFillMap & VarManager::ObjTypes::EventFilter) > 0 ) {
795+ if constexpr ((TEventFillMap & VarManager::ObjTypes::EventFilter) > 0 || (TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0 ) {
792796 tag |= (collision.eventFilter () << 56 );
793797 }
794798
795799 VarManager::ResetValues (0 , VarManager::kNEventWiseVariables );
796800 VarManager::FillBC (bc);
797801 VarManager::FillEvent<TEventFillMap>(collision); // extract event information and place it in the fValues array
798802 if constexpr ((TEventFillMap & VarManager::ObjTypes::Zdc) > 0 ) {
799- if (bcEvSel.has_zdc ()) {
803+ if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0 ) {
804+ // Collision table already has ZDC info
805+ VarManager::FillZDC (collision);
806+ } else if (bcEvSel.has_zdc ()) {
800807 auto bc_zdc = bcEvSel.zdc ();
801808 VarManager::FillZDC (bc_zdc);
802809 }
@@ -863,17 +870,26 @@ struct TableMaker {
863870 // create the event tables
864871 event (tag, bc.runNumber (), collision.posX (), collision.posY (), collision.posZ (), collision.numContrib (), collision.collisionTime (), collision.collisionTimeRes ());
865872 if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionMult) > 0 ) {
866- multTPC = collision.multTPC ();
867- multFV0A = collision.multFV0A ();
868873 multFV0C = collision.multFV0C ();
869- multFT0A = collision.multFT0A ();
870- multFT0C = collision.multFT0C ();
871- multFDDA = collision.multFDDA ();
872- multFDDC = collision.multFDDC ();
874+ multTPC = collision.multTPC ();
873875 multZNA = collision.multZNA ();
874876 multZNC = collision.multZNC ();
875877 multTracklets = collision.multTracklets ();
876878 multTracksPV = collision.multNTracksPV ();
879+ if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0 ) {
880+ // Use the FIT signals from the nearest BC with FIT amplitude above threshold
881+ multFV0A = collision.newBcMultFV0A ();
882+ multFT0A = collision.newBcMultFT0A ();
883+ multFT0C = collision.newBcMultFT0C ();
884+ multFDDA = collision.newBcMultFDDA ();
885+ multFDDC = collision.newBcMultFDDC ();
886+ } else {
887+ multFV0A = collision.multFV0A ();
888+ multFT0A = collision.multFT0A ();
889+ multFT0C = collision.multFT0C ();
890+ multFDDA = collision.multFDDA ();
891+ multFDDC = collision.multFDDC ();
892+ }
877893 }
878894 if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionCent) > 0 ) {
879895 centFT0C = collision.centFT0C ();
@@ -883,7 +899,11 @@ struct TableMaker {
883899 eventVtxCov (collision.covXX (), collision.covXY (), collision.covXZ (), collision.covYY (), collision.covYZ (), collision.covZZ (), collision.chi2 ());
884900 eventInfo (collision.globalIndex ());
885901 if constexpr ((TEventFillMap & VarManager::ObjTypes::Zdc) > 0 ) {
886- if (bcEvSel.has_zdc ()) {
902+ if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0 ) {
903+ // ZDC information is already in the DQRapidityGapFilter
904+ zdc (collision.energyCommonZNA (), collision.energyCommonZNC (), collision.energyCommonZPA (), collision.energyCommonZPC (),
905+ collision.timeZNA (), collision.timeZNC (), collision.timeZPA (), collision.timeZPC ());
906+ } else if (bcEvSel.has_zdc ()) {
887907 auto bc_zdc = bcEvSel.zdc ();
888908 zdc (bc_zdc.energyCommonZNA (), bc_zdc.energyCommonZNC (), bc_zdc.energyCommonZPA (), bc_zdc.energyCommonZPC (),
889909 bc_zdc.timeZNA (), bc_zdc.timeZNC (), bc_zdc.timeZPA (), bc_zdc.timeZPC ());
@@ -1424,6 +1444,14 @@ struct TableMaker {
14241444 fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapWithCov, 0u , 0u >(collisions, bcs, nullptr , tracksBarrel, nullptr , nullptr , trackAssocs, nullptr , nullptr );
14251445 }
14261446
1447+ // produce the barrel-only DQ skimmed data model typically for UPC Pb-Pb (no centrality), subscribe to the DQ rapidity gap event filter (filter-PbPb)
1448+ void processPbPbWithFilterBarrelOnly (MyEventsWithMultsAndRapidityGapFilter const & collisions, MyBCs const & bcs, aod::Zdcs& zdcs,
1449+ MyBarrelTracksWithCov const & tracksBarrel,
1450+ TrackAssoc const & trackAssocs)
1451+ {
1452+ fullSkimming<gkEventFillMapWithMultsRapidityGapFilterZdc, gkTrackFillMapWithCov, 0u , 0u >(collisions, bcs, zdcs, tracksBarrel, nullptr , nullptr , trackAssocs, nullptr , nullptr );
1453+ }
1454+
14271455 // produce the barrel only DQ skimmed data model typically for Pb-Pb (with centrality), no subscribtion to the DQ event filter
14281456 void processPbPbBarrelOnlyWithV0Bits (MyEventsWithCentAndMults const & collisions, BCsWithTimestamps const & bcs,
14291457 MyBarrelTracksWithV0Bits const & tracksBarrel,
@@ -1478,6 +1506,7 @@ struct TableMaker {
14781506 PROCESS_SWITCH (TableMaker, processPPMuonMFTWithMultsExtra, " Build muon + mft DQ skimmed data model typically for pp/p-Pb and UPC Pb-Pb" , false );
14791507 PROCESS_SWITCH (TableMaker, processPbPb, " Build full DQ skimmed data model typically for Pb-Pb, w/o event filtering" , false );
14801508 PROCESS_SWITCH (TableMaker, processPbPbBarrelOnly, " Build barrel only DQ skimmed data model typically for Pb-Pb, w/o event filtering" , false );
1509+ PROCESS_SWITCH (TableMaker, processPbPbWithFilterBarrelOnly, " Build barrel only DQ skimmed data model typically for UPC Pb-Pb, w/ event filtering" , false );
14811510 PROCESS_SWITCH (TableMaker, processPbPbBarrelOnlyWithV0Bits, " Build barrel only DQ skimmed data model typically for Pb-Pb, w/ V0 bits, w/o event filtering" , false );
14821511 PROCESS_SWITCH (TableMaker, processPbPbBarrelOnlyWithV0BitsNoTOF, " Build barrel only DQ skimmed data model typically for Pb-Pb, w/ V0 bits, no TOF, w/o event filtering" , false );
14831512 PROCESS_SWITCH (TableMaker, processPbPbMuonOnly, " Build muon only DQ skimmed data model typically for Pb-Pb, w/o event filtering" , false );
0 commit comments