Skip to content

Commit 9d0c942

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 1c10742 commit 9d0c942

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
@@ -157,6 +157,11 @@ struct HfTaskD0 {
157157
ConfigurableAxis thnConfigAxisFT0A{"thnConfigAxisFT0A", {1001, -1.5, 999.5}, "axis for FT0-A amplitude (a.u.)"};
158158
ConfigurableAxis thnConfigAxisFT0C{"thnConfigAxisFT0C", {1001, -1.5, 999.5}, "axis for FT0-C amplitude (a.u.)"};
159159

160+
// UPC gap determination thresholds
161+
Configurable<float> upcFT0AThreshold{"upcFT0AThreshold", hf_upc::defaults::FT0AThreshold, "FT0-A amplitude threshold for UPC gap determination (a.u.)"};
162+
Configurable<float> upcFT0CThreshold{"upcFT0CThreshold", hf_upc::defaults::FT0CThreshold, "FT0-C amplitude threshold for UPC gap determination (a.u.)"};
163+
Configurable<float> upcZDCThreshold{"upcZDCThreshold", hf_upc::defaults::ZDCThreshold, "ZDC energy threshold for UPC gap determination (a.u.)"};
164+
160165
HistogramRegistry registry{
161166
"registry",
162167
{{"hPtCand", "2-prong candidates;candidate #it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1F, {{360, 0., 36.}}}},
@@ -244,8 +249,8 @@ struct HfTaskD0 {
244249
if ((doprocessDataWithDCAFitterN || doprocessDataWithDCAFitterNCent || doprocessMcWithDCAFitterN || doprocessMcWithDCAFitterNCent || doprocessDataWithDCAFitterNMl || doprocessDataWithDCAFitterNMlCent || doprocessMcWithDCAFitterNMl || doprocessMcWithDCAFitterNMlCent) && (doprocessDataWithKFParticle || doprocessMcWithKFParticle || doprocessDataWithKFParticleMl || doprocessMcWithKFParticleMl)) {
245250
LOGP(fatal, "DCAFitterN and KFParticle can not be enabled at a time.");
246251
}
247-
if ((storeCentrality || storeOccupancyAndIR) && !(doprocessDataWithDCAFitterNCent || doprocessMcWithDCAFitterNCent || doprocessDataWithDCAFitterNMlCent || doprocessMcWithDCAFitterNMlCent)) {
248-
LOGP(fatal, "Can't enable the storeCentrality and storeOccupancu without cent process");
252+
if ((storeCentrality || storeOccupancyAndIR) && !(doprocessDataWithDCAFitterNCent || doprocessMcWithDCAFitterNCent || doprocessDataWithDCAFitterNMlCent || doprocessMcWithDCAFitterNMlCent || doprocessDataWithDCAFitterNMlWithUpc)) {
253+
LOGP(fatal, "Can't enable the storeCentrality and storeOccupancu without cent process or UPC process");
249254
}
250255
auto vbins = (std::vector<double>)binsPt;
251256
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})"}}});
@@ -584,7 +589,8 @@ struct HfTaskD0 {
584589
auto zdc = bc.zdc();
585590
qaRegistry.fill(HIST("Data/fitInfo/ampFT0A_vs_ampFT0C"), fitInfo.ampFT0A, fitInfo.ampFT0C);
586591
qaRegistry.fill(HIST("Data/zdc/energyZNA_vs_energyZNC"), zdc.energyCommonZNA(), zdc.energyCommonZNC());
587-
gap = hf_upc::determineGapType(fitInfo.ampFT0A, fitInfo.ampFT0C, zdc.energyCommonZNA(), zdc.energyCommonZNC());
592+
gap = hf_upc::determineGapType(fitInfo.ampFT0A, fitInfo.ampFT0C, zdc.energyCommonZNA(), zdc.energyCommonZNC(),
593+
upcFT0AThreshold, upcFT0CThreshold, upcZDCThreshold);
588594
qaRegistry.fill(HIST("Data/hUpcGapAfterSelection"), hf_upc::gapTypeToInt(gap));
589595
}
590596
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)