1919#include " PWGUD/DataModel/UDTables.h"
2020
2121#include " Common/CCDB/EventSelectionParams.h"
22+ #include " Common/CCDB/RCTSelectionFlags.h"
2223#include " Common/DataModel/EventSelection.h"
2324#include " Common/DataModel/PIDResponseTOF.h"
2425#include " Common/DataModel/PIDResponseTPC.h"
5758
5859using namespace o2 ::framework;
5960using namespace o2 ::framework::expressions;
61+ using namespace o2 ::aod::rctsel;
6062
6163struct UpcCandProducer {
6264 bool fDoMC {false };
@@ -91,6 +93,9 @@ struct UpcCandProducer {
9193 std::vector<bool > fwdSelectors;
9294 std::vector<bool > barrelSelectors;
9395
96+ // RCT flag checker
97+ RCTFlagsChecker myRCTChecker;
98+
9499 // skimmer flags
95100 // choose a source of signal MC events
96101 Configurable<int > fSignalGenID {" signalGenID" , 1 , " Signal generator ID" };
@@ -125,9 +130,15 @@ struct UpcCandProducer {
125130 Configurable<bool > fRequireNoTimeFrameBorder {" requireNoTimeFrameBorder" , true , " Require kNoTimeFrameBorder selection bit" };
126131 Configurable<bool > fRequireNoITSROFrameBorder {" requireNoITSROFrameBorder" , true , " Require kNoITSROFrameBorder selection bit" };
127132
133+ Configurable<std::string> rctLabel{" rctLabel" , " CBT_muon" , " RCT label to use, options: CBT, CBT_hadronPID, CBT_electronPID, CBT_calo, CBT_muon, CBT_muon_glo" };
134+ Configurable<bool > checkZDC{" checkZDC" , false , " Consider ZDC quality" };
135+ Configurable<bool > useLAasBad{" useLAasBad" , false , " Consider Lim acc flag as Bad" };
136+
128137 // QA histograms
129138 HistogramRegistry histRegistry{" HistRegistry" , {}, OutputObjHandlingPolicy::AnalysisObject};
130139
140+ using CollisionsSels = o2::soa::Join<o2::aod::Collisions, o2::aod::EvSels>;
141+
131142 using BCsWithBcSels = o2::soa::Join<o2::aod::BCs, o2::aod::BcSels, o2::aod::BCFlags>;
132143
133144 using ForwardTracks = o2::soa::Join<o2::aod::UDFwdTracksProp, o2::aod::UDFwdTracksCovProp>;
@@ -146,6 +157,9 @@ struct UpcCandProducer {
146157
147158 upcCuts = (UPCCutparHolder)inputCuts;
148159
160+ // initialize RCT flag checker
161+ myRCTChecker.init (rctLabel.value , checkZDC.value , useLAasBad.value );
162+
149163 const AxisSpec axisTrgCounters{10 , 0.5 , 10.5 , " " };
150164 histRegistry.add (" hCountersTrg" , " " , kTH1F , {axisTrgCounters});
151165 histRegistry.get <TH1>(HIST (" hCountersTrg" ))->GetXaxis ()->SetBinLabel (1 , " TCE" );
@@ -179,6 +193,11 @@ struct UpcCandProducer {
179193 histRegistry.get <TH1>(HIST (" BarrelsSelCounter" ))->GetXaxis ()->SetBinLabel (upchelpers::kBarrelSelTPCChi2 + 1 , " TPCChi2" );
180194 histRegistry.get <TH1>(HIST (" BarrelsSelCounter" ))->GetXaxis ()->SetBinLabel (upchelpers::kBarrelSelDCAXY + 1 , " DCAXY" );
181195 histRegistry.get <TH1>(HIST (" BarrelsSelCounter" ))->GetXaxis ()->SetBinLabel (upchelpers::kBarrelSelDCAZ + 1 , " DCAZ" );
196+
197+ histRegistry.add (" RCTSelCounter" , " RCTSelCounter" , kTH1F , {{3 , 0.5 , 3.5 }});
198+ histRegistry.get <TH1>(HIST (" RCTSelCounter" ))->GetXaxis ()->SetBinLabel (1 , " Before RCT sel" );
199+ histRegistry.get <TH1>(HIST (" RCTSelCounter" ))->GetXaxis ()->SetBinLabel (2 , " After RCT sel" );
200+ histRegistry.get <TH1>(HIST (" RCTSelCounter" ))->GetXaxis ()->SetBinLabel (3 , " RCT rejected" );
182201 }
183202
184203 template <typename T>
@@ -682,6 +701,13 @@ struct UpcCandProducer {
682701 uint64_t trackBC = 0 ;
683702 if (trk.has_collision ()) {
684703 const auto & col = trk.collision ();
704+ auto bcRCT = col.bc_as <TBCs>();
705+ histRegistry.get <TH1>(HIST (" RCTSelCounter" ))->Fill (1 );
706+ if (!myRCTChecker (bcRCT)){
707+ histRegistry.get <TH1>(HIST (" RCTSelCounter" ))->Fill (3 );
708+ continue ;
709+ }
710+ histRegistry.get <TH1>(HIST (" RCTSelCounter" ))->Fill (2 );
685711 nContrib = col.numContrib ();
686712 trackBC = col.bc_as <TBCs>().globalBC ();
687713 hasTrackBC = true ;
@@ -725,6 +751,13 @@ struct UpcCandProducer {
725751 if (!trk.has_collision ())
726752 continue ;
727753 const auto & col = trk.collision ();
754+ auto bcRCT = col.bc_as <TBCs>();
755+ histRegistry.get <TH1>(HIST (" RCTSelCounter" ))->Fill (1 );
756+ if (!myRCTChecker (bcRCT)){
757+ histRegistry.get <TH1>(HIST (" RCTSelCounter" ))->Fill (3 );
758+ continue ;
759+ }
760+ histRegistry.get <TH1>(HIST (" RCTSelCounter" ))->Fill (2 );
728761 nContrib = col.numContrib ();
729762 trackBC = col.bc_as <TBCs>().globalBC ();
730763 hasTrackBC = true ;
@@ -765,6 +798,13 @@ struct UpcCandProducer {
765798 if (!trk.has_collision ())
766799 continue ;
767800 const auto & col = trk.collision ();
801+ auto bcRCT = col.bc_as <TBCs>();
802+ histRegistry.get <TH1>(HIST (" RCTSelCounter" ))->Fill (1 );
803+ if (!myRCTChecker (bcRCT)){
804+ histRegistry.get <TH1>(HIST (" RCTSelCounter" ))->Fill (3 );
805+ continue ;
806+ }
807+ histRegistry.get <TH1>(HIST (" RCTSelCounter" ))->Fill (2 );
768808 nContrib = col.numContrib ();
769809 trackBC = col.bc_as <TBCs>().globalBC ();
770810 const auto & bc = col.bc_as <TBCs>();
0 commit comments