Skip to content

Commit 73f4e66

Browse files
committed
PWGJE: Add FT0 event-activity helpers and detector-level MC means
Add minimal FT0 helpers for scaled FT0C and FT0M event activity. Introduce grouped data and detector-level MC normalization means, validated as nonzero in init(). Existing selections and histograms remain unchanged.
1 parent d5b4376 commit 73f4e66

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

‎PWGJE/Tasks/trackEfficiency.cxx‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,19 @@ struct TrackEfficiency {
9595

9696
Configurable<bool> useTrueTrackWeight{"useTrueTrackWeight", true, "test configurable, should be set to 1 then config removed once well tested"};
9797

98+
// Normalization FT0 by means
99+
struct FT0A : ConfigurableGroup {
100+
std::string prefix = "ft0a";
101+
Configurable<float> mean{"mean", 3499., "Mean FT0A signal"};
102+
Configurable<float> meanMCDetLevel{"meanMCDetLevel", 3499., "Mean FT0A signal at MC detector level"};
103+
} ft0a;
104+
105+
struct FT0C : ConfigurableGroup {
106+
std::string prefix = "ft0c";
107+
Configurable<float> mean{"mean", 844.6, "Mean FT0C signal"};
108+
Configurable<float> meanMCDetLevel{"meanMCDetLevel", 844.6, "Mean FT0C signal at MC detector level"};
109+
} ft0c;
110+
98111
// systematics variation - Run 2 guidelines: https://twiki.cern.ch/twiki/bin/view/ALICE/AliDPGtoolsTrackSystematicUncertainty
99112
TrackSelection customTrackSelection;
100113
Configurable<bool> useCustomTrackSelection{"useCustomTrackSelection", false, "whether to use the custom cuts (used for cut variation for tracking efficiency systematics)"};
@@ -205,6 +218,10 @@ struct TrackEfficiency {
205218
LOGP(fatal, "Configurable acceptSplitCollisions has wrong input value; stopping workflow");
206219
}
207220

221+
if (ft0a.mean == 0.f || ft0c.mean == 0.f || ft0a.meanMCDetLevel == 0.f || ft0c.meanMCDetLevel == 0.f) {
222+
LOGP(fatal, "FT0A and FT0C means must be non-zero to avoid division by zero; stopping workflow");
223+
}
224+
208225
eventSelectionBits = jetderiveddatautilities::initialiseEventSelectionBits(static_cast<std::string>(eventSelections));
209226
trackSelection = jetderiveddatautilities::initialiseTrackSelection(static_cast<std::string>(trackSelections));
210227

@@ -1711,6 +1728,44 @@ struct TrackEfficiency {
17111728
}
17121729
}
17131730
PROCESS_SWITCH(TrackEfficiency, processQcCheck, "Histograms for QC checks", false);
1731+
1732+
// FT0 event activity helpers
1733+
struct FT0Metrics {
1734+
float multFT0A = 0.f;
1735+
float multFT0C = 0.f;
1736+
float multFT0M = 0.f;
1737+
float scaledFT0A = 0.f;
1738+
float scaledFT0C = 0.f;
1739+
float scaledFT0M = 0.f;
1740+
};
1741+
1742+
float getScaledFT0(const float& multFT0, const float& meanFT0)
1743+
{
1744+
return multFT0 / meanFT0;
1745+
}
1746+
1747+
float getScaledFT0M(const float& scaledMultFT0A, const float& scaledMultFT0C)
1748+
{
1749+
return 0.5 * (scaledMultFT0A + scaledMultFT0C);
1750+
}
1751+
1752+
FT0Metrics makeFT0Metrics(float multFT0A, float multFT0C, float meanFT0A, float meanFT0C)
1753+
{
1754+
FT0Metrics values;
1755+
values.multFT0A = multFT0A;
1756+
values.multFT0C = multFT0C;
1757+
values.multFT0M = multFT0A + multFT0C;
1758+
values.scaledFT0A = getScaledFT0(values.multFT0A, meanFT0A);
1759+
values.scaledFT0C = getScaledFT0(values.multFT0C, meanFT0C);
1760+
values.scaledFT0M = getScaledFT0M(values.scaledFT0A, values.scaledFT0C);
1761+
return values;
1762+
}
1763+
1764+
template <typename Collision>
1765+
FT0Metrics getFT0Metrics(const Collision& collision, float meanFT0A, float meanFT0C)
1766+
{
1767+
return makeFT0Metrics(collision.multFT0A(), collision.multFT0C(), meanFT0A, meanFT0C);
1768+
}
17141769
};
17151770

17161771
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)