Skip to content

Commit 48e81f1

Browse files
committed
PWGJE: Fill track-pT spectra versus FT0 event activity
Add separate scaled FT0C and FT0M track-pT histograms for data and detector-level MC using configurable EA axes. Select normalization means and histogram fills through an explicit TrackSample template parameter, preserving existing cuts and weights.
1 parent 1e3a43c commit 48e81f1

1 file changed

Lines changed: 32 additions & 4 deletions

File tree

‎PWGJE/Tasks/trackEfficiency.cxx‎

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,11 @@ struct TrackEfficiency {
144144
SplitOkCheckFirstAssocCollOnly // 2
145145
};
146146

147+
enum class TrackSample {
148+
Data,
149+
MCDetLevel
150+
};
151+
147152
template <typename TJetTrack>
148153
bool isAcceptedTrack(TJetTrack const& jetTrack)
149154
{
@@ -174,9 +179,15 @@ struct TrackEfficiency {
174179
return std::abs(charge) >= chargeUnit;
175180
}
176181

177-
template <typename TCollision, typename TJetTracks>
182+
template <TrackSample sample, typename TCollision, typename TJetTracks>
178183
void fillTrackHistograms(TCollision const& collision, TJetTracks const& jetTracks, float weight = 1.0)
179184
{
185+
const float meanFT0A = sample == TrackSample::Data ? ft0a.mean.value : ft0a.meanMCDetLevel.value;
186+
const float meanFT0C = sample == TrackSample::Data ? ft0c.mean.value : ft0c.meanMCDetLevel.value;
187+
const auto ft0Metrics = getFT0Metrics(collision, meanFT0A, meanFT0C);
188+
const auto scaledFT0C = ft0Metrics.scaledFT0C;
189+
const auto scaledFT0M = ft0Metrics.scaledFT0M;
190+
180191
for (auto const& track : jetTracks) {
181192
if (!isAcceptedTrack(track)) {
182193
continue;
@@ -190,6 +201,13 @@ struct TrackEfficiency {
190201
float centrality = checkCentFT0M ? collision.centFT0M() : collision.centFT0C();
191202

192203
registry.fill(HIST("h2_centrality_track_pt"), centrality, track.pt(), weight);
204+
if constexpr (sample == TrackSample::Data) {
205+
registry.fill(HIST("hScaledFT0CTrackPt"), scaledFT0C, track.pt(), weight);
206+
registry.fill(HIST("hScaledFT0MTrackPt"), scaledFT0M, track.pt(), weight);
207+
} else {
208+
registry.fill(HIST("hScaledFT0CTrackPt_MCDetLevel"), scaledFT0C, track.pt(), weight);
209+
registry.fill(HIST("hScaledFT0MTrackPt_MCDetLevel"), scaledFT0M, track.pt(), weight);
210+
}
193211
registry.fill(HIST("h2_centrality_track_eta"), centrality, track.eta(), weight);
194212
registry.fill(HIST("h2_centrality_track_phi"), centrality, track.phi(), weight);
195213
registry.fill(HIST("h2_centrality_track_energy"), centrality, track.energy(), weight);
@@ -287,6 +305,10 @@ struct TrackEfficiency {
287305
AxisSpec etaAxisEff{etaEffBinning, "#eta"};
288306
AxisSpec phiAxisEff{phiEffBinning, "#phi"};
289307
AxisSpec centAxis = {centralityBinning, "centrality (%)"};
308+
AxisSpec scaledFT0C{hist.multFT0CThresh, "FT0C / #LT FT0C #GT"};
309+
AxisSpec scaledFT0M{hist.multFT0MThresh, "FT0M^{*}"};
310+
AxisSpec scaledFT0CMCDetLevel{hist.multFT0CThreshMCDetLevel, "FT0C / #LT FT0C #GT"};
311+
AxisSpec scaledFT0MMCDetLevel{hist.multFT0MThreshMCDetLevel, "FT0M^{*}"};
290312
AxisSpec intRateAxis = {intRateBinning, "int. rate (kHz)"};
291313
AxisSpec occupancyAxis = {140, -0.5, 13999.5, "occupancy"};
292314
AxisSpec nTracksAxis = {16001, -1., 16000, "n tracks"};
@@ -379,6 +401,12 @@ struct TrackEfficiency {
379401
registry.add("h2_track_pt_high_track_sigma1overpt", "#sigma(1/#it{p}_{T}); #it{p}_{T,track} (GeV/#it{c})", {HistType::kTH2F, {{90, 10., 100.}, {10000, 0.0, 1.0}}});
380402
registry.add("h3_intrate_centrality_track_pt", "interaction rate vs centrality vs track pT; int. rate; centrality; #it{p}_{T,track} (GeV/#it{c})", {HistType::kTH3F, {intRateAxis, centAxis, {200, 0., 200.}}});
381403
registry.add("h3_track_pt_track_eta_track_phi", "track pT vs track #eta vs track #varphi; #it{p}_{T,track} (GeV/#it{c}); #eta_{track}; #varphi_{track}", {HistType::kTH3F, {{200, 0., 200.}, {100, -1.0, 1.0}, {160, -1.0, 7.}}});
404+
405+
// EA analysis
406+
registry.add("hScaledFT0CTrackPt", "scaled FT0C vs track pT; FT0C / #LT FT0C #GT; #it{p}_{T,track} (GeV/#it{c})", {HistType::kTH2F, {scaledFT0C, {200, 0., 200.}}});
407+
registry.add("hScaledFT0MTrackPt", "scaled FT0M vs track pT; FT0M^{*}; #it{p}_{T,track} (GeV/#it{c})", {HistType::kTH2F, {scaledFT0M, {200, 0., 200.}}});
408+
registry.add("hScaledFT0CTrackPt_MCDetLevel", "MC detector-level scaled FT0C vs track pT; FT0C / #LT FT0C #GT; #it{p}_{T,track} (GeV/#it{c})", {HistType::kTH2F, {scaledFT0CMCDetLevel, {200, 0., 200.}}});
409+
registry.add("hScaledFT0MTrackPt_MCDetLevel", "MC detector-level scaled FT0M vs track pT; FT0M^{*}; #it{p}_{T,track} (GeV/#it{c})", {HistType::kTH2F, {scaledFT0MMCDetLevel, {200, 0., 200.}}});
382410
}
383411

384412
if (doprocessParticles || doprocessParticlesWeighted) {
@@ -886,7 +914,7 @@ struct TrackEfficiency {
886914
return;
887915
}
888916

889-
fillTrackHistograms(collision, jetTracks);
917+
fillTrackHistograms<TrackSample::Data>(collision, jetTracks);
890918
}
891919
PROCESS_SWITCH(TrackEfficiency, processTracksFromData, "QA for charged tracks in data", false);
892920

@@ -914,7 +942,7 @@ struct TrackEfficiency {
914942
return;
915943
}
916944

917-
fillTrackHistograms(collision, jetTracks);
945+
fillTrackHistograms<TrackSample::MCDetLevel>(collision, jetTracks);
918946
}
919947
PROCESS_SWITCH(TrackEfficiency, processTracksFromMc, "QA for charged tracks in MC without weights", false);
920948

@@ -943,7 +971,7 @@ struct TrackEfficiency {
943971
return;
944972
}
945973

946-
fillTrackHistograms(collision, jetTracks, eventWeight);
974+
fillTrackHistograms<TrackSample::MCDetLevel>(collision, jetTracks, eventWeight);
947975
}
948976
PROCESS_SWITCH(TrackEfficiency, processTracksFromMcWeighted, "QA for charged tracks in weighted MC", false);
949977

0 commit comments

Comments
 (0)