@@ -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