@@ -121,6 +121,7 @@ struct Cascqaanalysis {
121121 Configurable<bool > isNoTimeFrameBorder{" isNoTimeFrameBorder" , 1 , " TF border cut" };
122122 Configurable<bool > isNoITSROFrameBorder{" isNoITSROFrameBorder" , 1 , " ITS ROF border cut" };
123123 Configurable<bool > applyBcBorderCutsOnGen{" applyBcBorderCutsOnGen" , false , " Apply enabled BC-level TF and ITS ROF border cuts on generated-level MC collisions" };
124+ Configurable<bool > applyRCTOnGen{" applyRCTOnGen" , false , " Apply enabled BC-level RCT run-condition selection on generated-level MC collisions" };
124125 Configurable<bool > isNoCollInTimeRangeNarrow{" isNoCollInTimeRangeNarrow" , 1 , " No collisions in +-2us window" };
125126
126127 Configurable<bool > requireRCTFlagChecker{" requireRCTFlagChecker" , true , " Check event quality in run condition table" };
@@ -223,7 +224,7 @@ struct Cascqaanalysis {
223224 void init (InitContext const &)
224225 {
225226 TString hCandidateCounterLabels[4 ] = {" All candidates" , " passed topo cuts" , " has associated MC particle" , " associated with Xi(Omega)" };
226- TString hNEventsMCLabels[7 ] = {" All" , " z vrtx" , " BC TF/ITS ROF border" , " INEL" , " INEL>0" , " INEL>1" , " Associated with rec. collision" };
227+ TString hNEventsMCLabels[8 ] = {" All" , " z vrtx" , " BC TF/ITS ROF border" , " RCTFlagsChecker " , " INEL" , " INEL>0" , " INEL>1" , " Associated with rec. collision" };
227228 TString hNEventsLabels[14 ] = {" All" , " kIsTriggerTVX" , " kNoTimeFrameBorder" , " kNoITSROFrameBorder" , " kIsVertexITSTPC" , " kNoSameBunchPileup" , " kIsGoodZvtxFT0vsPV" , " isVertexTOFmatched" , " kNoCollInTimeRangeNarrow" , " z vrtx" , " RCTFlagsChecker" , " INEL" , " INEL>0" , " INEL>1" };
228229
229230 registry.add (" hNEvents" , " hNEvents" , {HistType::kTH1D , {{14 , 0 .f , 14 .f }}});
@@ -241,7 +242,7 @@ struct Cascqaanalysis {
241242 // Rec. lvl
242243 registry.add (" fakeEvents" , " fakeEvents" , {HistType::kTH1F , {{1 , -0 .5f , 0 .5f }}});
243244 // Gen. lvl
244- registry.add (" hNEventsMC" , " hNEventsMC" , {HistType::kTH1D , {{7 , 0 .0f , 7 .0f }}});
245+ registry.add (" hNEventsMC" , " hNEventsMC" , {HistType::kTH1D , {{8 , 0 .0f , 8 .0f }}});
245246 for (int n = 1 ; n <= registry.get <TH1>(HIST (" hNEventsMC" ))->GetNbinsX (); n++) {
246247 registry.get <TH1>(HIST (" hNEventsMC" ))->GetXaxis ()->SetBinLabel (n, hNEventsMCLabels[n - 1 ]);
247248 }
@@ -295,7 +296,7 @@ struct Cascqaanalysis {
295296 setEventTypeAxisLabels (registry.get <TH3>(HIST (" hFT0MsignalPVContr" ))->GetZaxis ());
296297 }
297298
298- rctChecker.init (cfgEvtRCTFlagCheckerLabel, cfgEvtRCTFlagCheckerZDCCheck, cfgEvtRCTFlagCheckerLimitAcceptAsBad);
299+ rctChecker.init (cfgEvtRCTFlagCheckerLabel, cfgEvtRCTFlagCheckerZDCCheck, cfgEvtRCTFlagCheckerLimitAcceptAsBad, requireRCTFlagChecker || applyRCTOnGen );
299300 if (cfgEvtRCTFlagCheckerFV0Check) {
300301 rctChecker.set (o2::aod::rctsel::kFV0Bad );
301302 }
@@ -498,6 +499,12 @@ struct Cascqaanalysis {
498499 return true ;
499500 }
500501
502+ template <typename TBC>
503+ bool acceptGeneratedEventRCT (TBC const & bc)
504+ {
505+ return !applyRCTOnGen || rctChecker (bc);
506+ }
507+
501508 void processData (soa::Join<aod::Collisions, aod::EvSels,
502509 aod::PVMults, aod::FT0Mults, aod::FV0Mults,
503510 aod::CentFT0Ms, aod::CentFV0As>::iterator const & collision,
@@ -709,28 +716,33 @@ struct Cascqaanalysis {
709716 return ;
710717 }
711718 registry.fill (HIST (" hNEventsMC" ), 1.5 );
712- if (!acceptGeneratedEventBcBorderCuts (mcCollision.bc_as <BCsWithBcSels>())) {
719+ const auto bc = mcCollision.bc_as <BCsWithBcSels>();
720+ if (!acceptGeneratedEventBcBorderCuts (bc)) {
713721 return ;
714722 }
715- registry.fill (HIST (" hZCollisionGen" ), mcCollision.posZ ());
716723 registry.fill (HIST (" hNEventsMC" ), 2.5 );
724+ if (!acceptGeneratedEventRCT (bc)) {
725+ return ;
726+ }
727+ registry.fill (HIST (" hZCollisionGen" ), mcCollision.posZ ());
728+ registry.fill (HIST (" hNEventsMC" ), 3.5 );
717729
718730 // Define the type of generated MC collision
719731 EventTypeBin evType = kINEL ;
720732 uint8_t flagsGen = 0 ;
721733 flagsGen |= o2::aod::myMCcascades::EvFlags::EvINEL;
722- registry.fill (HIST (" hNEventsMC" ), 3 .5 );
734+ registry.fill (HIST (" hNEventsMC" ), 4 .5 );
723735 // Generated collision is INEL>0
724736 if (pwglf::isINELgtNmc (mcParticles, 0 , pdgDB)) {
725737 flagsGen |= o2::aod::myMCcascades::EvFlags::EvINELgt0;
726738 evType = kINELgt0 ;
727- registry.fill (HIST (" hNEventsMC" ), 4 .5 );
739+ registry.fill (HIST (" hNEventsMC" ), 5 .5 );
728740 }
729741 // Generated collision is INEL>1
730742 if (pwglf::isINELgtNmc (mcParticles, 1 , pdgDB)) {
731743 flagsGen |= o2::aod::myMCcascades::EvFlags::EvINELgt1;
732744 evType = kINELgt1 ;
733- registry.fill (HIST (" hNEventsMC" ), 5 .5 );
745+ registry.fill (HIST (" hNEventsMC" ), 6 .5 );
734746 }
735747
736748 registry.fill (HIST (" hCentFT0M_genMC" ), mcCollision.centFT0M (), evType);
@@ -805,7 +817,7 @@ struct Cascqaanalysis {
805817 uint8_t flagsAssoc = 0 ;
806818 if (evtReconstructedAndINEL) {
807819 flagsAssoc |= o2::aod::myMCcascades::EvFlags::EvINEL;
808- registry.fill (HIST (" hNEventsMC" ), 6 .5 );
820+ registry.fill (HIST (" hNEventsMC" ), 7 .5 );
809821 }
810822 if (evtReconstructedAndINELgt0) {
811823 flagsAssoc |= o2::aod::myMCcascades::EvFlags::EvINELgt0;
0 commit comments