Skip to content

Commit 1752675

Browse files
committed
[PWGHF] Add configurable UPC gap thresholds and enable occupancy storage
This commit introduces configurable thresholds for UPC gap determination and enables occupancy/IR storage for UPC processes in taskD0 and taskDplus. Changes: - Add configurable parameters for FT0A, FT0C, and ZDC thresholds in taskD0 and taskDplus, with defaults from utilsUpcHf.h - Update determineGapType calls to use configurable thresholds instead of hardcoded values - Enable storeOccupancyAndIR for UPC process in taskD0 by updating validation check to include doprocessDataWithDCAFitterNMlWithUpc - Add occupancy calculation in taskDplus UPC process to properly store occupancy values when storeOccupancy is enabled Benefits: - Allows users to optimize gap selection criteria via configuration files - Enables occupancy and interaction rate studies in UPC analyses - Maintains consistency with taskLc approach for occupancy handling - Provides flexibility for different beam conditions and physics requirements Default threshold values (defined in utilsUpcHf.h): - FT0A: 100.0 a.u. - FT0C: 50.0 a.u. - ZDC: 1.0 a.u.
1 parent 8789b18 commit 1752675

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

PWGHF/D2H/Tasks/taskD0.cxx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,11 @@ struct HfTaskD0 {
156156
ConfigurableAxis thnConfigAxisFT0A{"thnConfigAxisFT0A", {1001, -1.5, 999.5}, "axis for FT0-A amplitude (a.u.)"};
157157
ConfigurableAxis thnConfigAxisFT0C{"thnConfigAxisFT0C", {1001, -1.5, 999.5}, "axis for FT0-C amplitude (a.u.)"};
158158

159+
// UPC gap determination thresholds
160+
Configurable<float> upcFT0AThreshold{"upcFT0AThreshold", hf_upc::defaults::FT0AThreshold, "FT0-A amplitude threshold for UPC gap determination (a.u.)"};
161+
Configurable<float> upcFT0CThreshold{"upcFT0CThreshold", hf_upc::defaults::FT0CThreshold, "FT0-C amplitude threshold for UPC gap determination (a.u.)"};
162+
Configurable<float> upcZDCThreshold{"upcZDCThreshold", hf_upc::defaults::ZDCThreshold, "ZDC energy threshold for UPC gap determination (a.u.)"};
163+
159164
HistogramRegistry registry{
160165
"registry",
161166
{{"hPtCand", "2-prong candidates;candidate #it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1F, {{360, 0., 36.}}}},
@@ -243,8 +248,8 @@ struct HfTaskD0 {
243248
if ((doprocessDataWithDCAFitterN || doprocessDataWithDCAFitterNCent || doprocessMcWithDCAFitterN || doprocessMcWithDCAFitterNCent || doprocessDataWithDCAFitterNMl || doprocessDataWithDCAFitterNMlCent || doprocessMcWithDCAFitterNMl || doprocessMcWithDCAFitterNMlCent) && (doprocessDataWithKFParticle || doprocessMcWithKFParticle || doprocessDataWithKFParticleMl || doprocessMcWithKFParticleMl)) {
244249
LOGP(fatal, "DCAFitterN and KFParticle can not be enabled at a time.");
245250
}
246-
if ((storeCentrality || storeOccupancyAndIR) && !(doprocessDataWithDCAFitterNCent || doprocessMcWithDCAFitterNCent || doprocessDataWithDCAFitterNMlCent || doprocessMcWithDCAFitterNMlCent)) {
247-
LOGP(fatal, "Can't enable the storeCentrality and storeOccupancu without cent process");
251+
if ((storeCentrality || storeOccupancyAndIR) && !(doprocessDataWithDCAFitterNCent || doprocessMcWithDCAFitterNCent || doprocessDataWithDCAFitterNMlCent || doprocessMcWithDCAFitterNMlCent || doprocessDataWithDCAFitterNMlWithUpc)) {
252+
LOGP(fatal, "Can't enable the storeCentrality and storeOccupancu without cent process or UPC process");
248253
}
249254
auto vbins = (std::vector<double>)binsPt;
250255
registry.add("hMass", "2-prong candidates;inv. mass (#pi K) (GeV/#it{c}^{2});entries", {HistType::kTH2F, {{500, 0., 5.}, {vbins, "#it{p}_{T} (GeV/#it{c})"}}});
@@ -583,7 +588,8 @@ struct HfTaskD0 {
583588
auto zdc = bc.zdc();
584589
qaRegistry.fill(HIST("Data/fitInfo/ampFT0A_vs_ampFT0C"), fitInfo.ampFT0A, fitInfo.ampFT0C);
585590
qaRegistry.fill(HIST("Data/zdc/energyZNA_vs_energyZNC"), zdc.energyCommonZNA(), zdc.energyCommonZNC());
586-
gap = hf_upc::determineGapType(fitInfo.ampFT0A, fitInfo.ampFT0C, zdc.energyCommonZNA(), zdc.energyCommonZNC());
591+
gap = hf_upc::determineGapType(fitInfo.ampFT0A, fitInfo.ampFT0C, zdc.energyCommonZNA(), zdc.energyCommonZNC(),
592+
upcFT0AThreshold, upcFT0CThreshold, upcZDCThreshold);
587593
qaRegistry.fill(HIST("Data/hUpcGapAfterSelection"), hf_upc::gapTypeToInt(gap));
588594
}
589595
if (hf_upc::isSingleSidedGap(gap)) {

PWGHF/D2H/Tasks/taskDplus.cxx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,11 @@ struct HfTaskDplus {
128128
ConfigurableAxis thnConfigAxisFT0A{"thnConfigAxisFT0A", {1001, -1.5, 999.5}, "axis for FT0-A amplitude (a.u.)"};
129129
ConfigurableAxis thnConfigAxisFT0C{"thnConfigAxisFT0C", {1001, -1.5, 999.5}, "axis for FT0-C amplitude (a.u.)"};
130130

131+
// UPC gap determination thresholds
132+
Configurable<float> upcFT0AThreshold{"upcFT0AThreshold", hf_upc::defaults::FT0AThreshold, "FT0-A amplitude threshold for UPC gap determination (a.u.)"};
133+
Configurable<float> upcFT0CThreshold{"upcFT0CThreshold", hf_upc::defaults::FT0CThreshold, "FT0-C amplitude threshold for UPC gap determination (a.u.)"};
134+
Configurable<float> upcZDCThreshold{"upcZDCThreshold", hf_upc::defaults::ZDCThreshold, "ZDC energy threshold for UPC gap determination (a.u.)"};
135+
131136
HistogramRegistry registry{
132137
"registry",
133138
{{"hPt", "3-prong candidates;candidate #it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1F, {{360, 0., 36.}}}},
@@ -712,7 +717,8 @@ struct HfTaskDplus {
712717
auto zdc = bc.zdc();
713718
qaRegistry.fill(HIST("Data/fitInfo/ampFT0A_vs_ampFT0C"), fitInfo.ampFT0A, fitInfo.ampFT0C);
714719
qaRegistry.fill(HIST("Data/zdc/energyZNA_vs_energyZNC"), zdc.energyCommonZNA(), zdc.energyCommonZNC());
715-
gap = hf_upc::determineGapType(fitInfo.ampFT0A, fitInfo.ampFT0C, zdc.energyCommonZNA(), zdc.energyCommonZNC());
720+
gap = hf_upc::determineGapType(fitInfo.ampFT0A, fitInfo.ampFT0C, zdc.energyCommonZNA(), zdc.energyCommonZNC(),
721+
upcFT0AThreshold, upcFT0CThreshold, upcZDCThreshold);
716722
qaRegistry.fill(HIST("Data/hUpcGapAfterSelection"), hf_upc::gapTypeToInt(gap));
717723
}
718724
if (hf_upc::isSingleSidedGap(gap)) {
@@ -721,6 +727,9 @@ struct HfTaskDplus {
721727
const auto& groupedDplusCandidates = candidates.sliceBy(candDplusPerCollision, thisCollId);
722728
float cent{-1.f};
723729
float occ{-1.f};
730+
if (storeOccupancy && occEstimator != OccupancyEstimator::None) {
731+
occ = o2::hf_occupancy::getOccupancyColl(collision, occEstimator);
732+
}
724733
float numPvContr{-1.f};
725734
int const gapTypeInt = hf_upc::gapTypeToInt(gap);
726735

0 commit comments

Comments
 (0)