@@ -116,6 +116,7 @@ struct HfTaskUpcLc {
116116 Configurable<std::vector<double >> binsPt{" binsPt" , std::vector<double >{hf_cuts_lc_to_p_k_pi::vecBinsPt}, " pT bin limits" };
117117 Configurable<bool > fillTreeOnlySingleGap{" fillTreeOnlySingleGap" , false , " Only fill the tree for candidates that pass the single-gap UPC events" };
118118 Configurable<bool > fillTreeUpcQa{" fillTreeUpcQa" , false , " Fill Tree for UPC QA" };
119+ Configurable<bool > fillHistQa{" fillHistQa" , false , " Fill histograms for UPC detector QA" };
119120 Configurable<bool > verticesWithUpc{" verticesWithUpc" , false , " Consider vertices with UPC settings" };
120121 Configurable<float > zdcTimeThreshold{" zdcTimeThreshold" , 2 ., " Threshold for ZNA/ZNC time" };
121122 // CCDB configuration
@@ -154,7 +155,7 @@ struct HfTaskUpcLc {
154155 }
155156
156157 auto vbins = (std::vector<double >)binsPt;
157- registry.add (" Data/fitInfo/ampFT0A_vs_ampFT0C" , " FT0-A vs FT0-C amplitude;FT0-A amplitude (a.u.);FT0-C amplitude (a.u.)" , {HistType::kTH2F , {{500 , 0 ., 500 }, {500 , 0 ., 500 }}});
158+ registry.add (" Data/fitInfo/ampFT0A_vs_ampFT0C" , " FT0-A vs FT0-C amplitude;FT0-A amplitude (a.u.);FT0-C amplitude (a.u.)" , {HistType::kTH2F , {{200 , 0 ., 200 }, {200 , 0 ., 200 }}});
158159 registry.add (" Data/zdc/energyZNA_vs_energyZNC" , " ZNA vs ZNC common energy;E_{ZNA}^{common} (a.u.);E_{ZNC}^{common} (a.u.)" , {HistType::kTH2F , {{100 , 0 ., 10 }, {100 , 0 ., 10 }}});
159160 registry.add (" Data/zdc/timeZNA_vs_timeZNC" , " ZNA vs ZNC time;ZNA Time;ZNC time" , {HistType::kTH2F , {{200 , -10 ., 10 }, {200 , -10 ., 10 }}});
160161 registry.add (" Data/hUpcGapAfterSelection" , " UPC gap type after selection;Gap side;Counts" , {HistType::kTH1F , {{7 , -1.5 , 5.5 }}});
@@ -195,6 +196,9 @@ struct HfTaskUpcLc {
195196 }
196197 const auto thisCollId = collision.globalIndex ();
197198 const auto & groupedLcCandidates = candidates.sliceBy (candLcPerCollision, thisCollId);
199+ if (!fillTreeUpcQa && !fillHistQa && groupedLcCandidates.size () == 0 ) {
200+ continue ;
201+ }
198202 const auto numPvContributors = collision.numContrib ();
199203 const auto & bc = collision.template bc_as <BCsType>();
200204
@@ -232,27 +236,30 @@ struct HfTaskUpcLc {
232236 zdcEnergyZNC = zdc.energyCommonZNC ();
233237 zdcTimeZNA = zdc.timeZNA ();
234238 zdcTimeZNC = zdc.timeZNC ();
235- registry.fill (HIST (" Data/fitInfo/ampFT0A_vs_ampFT0C" ), fitInfo.ampFT0A , fitInfo.ampFT0C );
236- registry.fill (HIST (" Data/zdc/energyZNA_vs_energyZNC" ), zdcEnergyZNA, zdcEnergyZNC);
237- registry.fill (HIST (" Data/zdc/timeZNA_vs_timeZNC" ), zdcTimeZNA, zdcTimeZNC);
239+ if (fillHistQa) {
240+ registry.fill (HIST (" Data/fitInfo/ampFT0A_vs_ampFT0C" ), fitInfo.ampFT0A , fitInfo.ampFT0C );
241+ registry.fill (HIST (" Data/zdc/energyZNA_vs_energyZNC" ), zdcEnergyZNA, zdcEnergyZNC);
242+ registry.fill (HIST (" Data/zdc/timeZNA_vs_timeZNC" ), zdcTimeZNA, zdcTimeZNC);
243+ }
238244 registry.fill (HIST (" Data/hUpcGapAfterSelection" ), static_cast <int >(gap));
239245 }
240246 const bool ignoreZdcTime = (zdcTimeThreshold < 0 .f );
241-
247+ const auto multNTracksPV = collision.multNTracksPV ();
248+ const auto posZ = collision.posZ ();
242249 if (gap == o2::aod::sgselector::TrueGap::SingleGapA && (ignoreZdcTime || (std::abs (zdcTimeZNA) > zdcTimeThreshold && std::abs (zdcTimeZNC) < zdcTimeThreshold))) {
243250 gapA0nXn = true ;
244251 }
245252 if (gap == o2::aod::sgselector::TrueGap::SingleGapC && (ignoreZdcTime || (std::abs (zdcTimeZNA) < zdcTimeThreshold && std::abs (zdcTimeZNC) > zdcTimeThreshold))) {
246253 gapCXn0n = true ;
247254 }
248- if (fillTreeOnlySingleGap & !gapA0nXn & !gapCXn0n) {
255+ if (fillTreeOnlySingleGap && !gapA0nXn & & !gapCXn0n) {
249256 continue ;
250257 }
251- registry.fill (HIST (" Data/hUpcMulti" ), collision. multNTracksPV () );
252- registry.fill (HIST (" Data/hUpcVtz" ), collision. posZ () );
258+ registry.fill (HIST (" Data/hUpcMulti" ), multNTracksPV);
259+ registry.fill (HIST (" Data/hUpcVtz" ), posZ);
253260
254261 if (fillTreeUpcQa) {
255- rowUpcQa (numPvContributors, collision. multNTracksPV (), collision. posZ () , fitInfo.ampFT0A , fitInfo.ampFT0C , zdcTimeZNA, zdcTimeZNC);
262+ rowUpcQa (numPvContributors, multNTracksPV, posZ, fitInfo.ampFT0A , fitInfo.ampFT0C , zdcTimeZNA, zdcTimeZNC);
256263 }
257264
258265 for (const auto & candidate : groupedLcCandidates) {
@@ -272,10 +279,10 @@ struct HfTaskUpcLc {
272279 const auto eta = candidate.eta ();
273280
274281 double outputBkg (-1 );
282+ registry.fill (HIST (" Data/eta_vs_Multi" ), eta, multNTracksPV);
275283
276284 auto fillTHnData = [&](bool isPKPi) {
277285 const auto massLc = isPKPi ? HfHelper::invMassLcToPKPi (candidate) : HfHelper::invMassLcToPiKP (candidate);
278- registry.fill (HIST (" Data/eta_vs_Multi" ), eta, collision.multNTracksPV ());
279286 if constexpr (FillMl) {
280287 const auto & mlProb = isPKPi ? candidate.mlProbLcToPKPi () : candidate.mlProbLcToPiKP ();
281288 if (mlProb.size () == NumberOfMlClasses) {
0 commit comments