Skip to content

Commit eaa71b7

Browse files
author
Mattia Faggin
committed
DPG: add qa of tracks not matched to collisions.
1 parent 894f153 commit eaa71b7

1 file changed

Lines changed: 61 additions & 9 deletions

File tree

DPG/Tasks/qaEventTrack.cxx

Lines changed: 61 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -161,16 +161,25 @@ struct qaEventTrack {
161161
return true;
162162
}
163163

164-
// General function to fill data and MC histograms
165-
template <bool IS_MC, typename C, typename T>
166-
void fillRecoHistograms(const C& collision, const T& tracks, aod::FullTracks const& tracksUnfiltered);
164+
// General functions to fill data and MC histograms
165+
template <bool IS_MC, typename T>
166+
void fillRecoHistogramsAllTracks(const T& tracks);
167+
template <bool IS_MC, typename C, typename T, typename T_UNF>
168+
void fillRecoHistogramsGroupedTracks(const C& collision, const T& tracks, const T_UNF& tracksUnfiltered);
167169

168170
// Process function for data
169171
using CollisionTableData = soa::Join<aod::Collisions, aod::EvSels>;
170172
using TrackTableData = soa::Join<aod::FullTracks, aod::TracksCov, aod::TracksDCA, aod::TrackSelection>;
171-
void processData(CollisionTableData::iterator const& collision, soa::Filtered<TrackTableData> const& tracks, aod::FullTracks const& tracksUnfiltered)
173+
void processData(CollisionTableData const& collisions, soa::Filtered<TrackTableData> const& tracks, aod::FullTracks const& tracksUnfiltered)
172174
{
173-
fillRecoHistograms<false>(collision, tracks, tracksUnfiltered);
175+
/// work with all tracks
176+
fillRecoHistogramsAllTracks<false>(tracks);
177+
/// work with collision grouping
178+
for (auto const& collision : collisions) {
179+
const auto& tracksColl = tracks.sliceBy(aod::track::collisionId, collision.globalIndex());
180+
const auto& tracksUnfilteredColl = tracksUnfiltered.sliceBy(aod::track::collisionId, collision.globalIndex());
181+
fillRecoHistogramsGroupedTracks<false>(collision, tracksColl, tracksUnfilteredColl);
182+
}
174183
}
175184
PROCESS_SWITCH(qaEventTrack, processData, "process data", false);
176185

@@ -246,10 +255,17 @@ struct qaEventTrack {
246255
// Process function for MC
247256
using CollisionTableMC = soa::Join<CollisionTableData, aod::McCollisionLabels>;
248257
using TrackTableMC = soa::Join<TrackTableData, aod::McTrackLabels>;
249-
void processMC(CollisionTableMC::iterator const& collision, soa::Filtered<TrackTableMC> const& tracks, aod::FullTracks const& tracksUnfiltered,
258+
void processMC(CollisionTableMC const& collisions, soa::Filtered<TrackTableMC> const& tracks, aod::FullTracks const& tracksUnfiltered,
250259
aod::McParticles const& mcParticles, aod::McCollisions const& mcCollisions)
251260
{
252-
fillRecoHistograms<true>(collision, tracks, tracksUnfiltered);
261+
/// work with all tracks
262+
fillRecoHistogramsAllTracks<true>(tracks);
263+
/// work with collision grouping
264+
for (auto const& collision : collisions) {
265+
const auto& tracksColl = tracks.sliceBy(aod::track::collisionId, collision.globalIndex());
266+
const auto& tracksUnfilteredColl = tracksUnfiltered.sliceBy(aod::track::collisionId, collision.globalIndex());
267+
fillRecoHistogramsGroupedTracks<true>(collision, tracksColl, tracksUnfilteredColl);
268+
}
253269
}
254270
PROCESS_SWITCH(qaEventTrack, processMC, "process mc", true); // FIXME: would like to disable this by default and swich on via --processMC but currently this crashes -> ask experts
255271

@@ -473,6 +489,17 @@ void qaEventTrack::init(InitContext const&)
473489
histos.add("Tracks/Kine/relativeResoPt", "relative #it{p}_{T} resolution;#sigma{#it{p}}/#it{p}_{T};#it{p}_{T}", kTH2D, {{axisPt, {100, 0., 0.3}}});
474490
histos.add("Tracks/Kine/relativeResoPtMean", "mean relative #it{p}_{T} resolution;#LT#sigma{#it{p}}/#it{p}_{T}#GT;#it{p}_{T}", kTProfile, {{axisPt}});
475491

492+
// count tracks matched to a collision
493+
auto h1 = histos.add<TH1>("Tracks/KineUnmatchTracks/trackCollMatch", "Track - collision matching", kTH1F, {{4, 0.5, 4.5, ""}});
494+
h1->GetXaxis()->SetBinLabel(h1->FindBin(1), "all tracks");
495+
h1->GetXaxis()->SetBinLabel(h1->FindBin(2), "tracks matched to coll.");
496+
h1->GetXaxis()->SetBinLabel(h1->FindBin(3), "tracks unmatched");
497+
h1->GetXaxis()->SetBinLabel(h1->FindBin(4), "(MC) fake tracks");
498+
// kine histograms for tracks not matched to collisions
499+
histos.add("Tracks/KineUnmatchTracks/pt", "#it{p}_{T}", kTH1D, {axisPt});
500+
histos.add("Tracks/KineUnmatchTracks/eta", "#eta", kTH1D, {axisEta});
501+
histos.add("Tracks/KineUnmatchTracks/phi", "#varphi", kTH1D, {axisPhi});
502+
476503
// track histograms
477504
auto hselAxis = histos.add<TH1>("Tracks/selection", "trackSelection", kTH1F, {{40, 0.5, 40.5}})->GetXaxis();
478505
hselAxis->SetBinLabel(1, "Tracks read");
@@ -621,8 +648,33 @@ void qaEventTrack::init(InitContext const&)
621648
* Fill reco level histograms.
622649
*/
623650
//**************************************************************************************************
624-
template <bool IS_MC, typename C, typename T>
625-
void qaEventTrack::fillRecoHistograms(const C& collision, const T& tracks, const aod::FullTracks& tracksUnfiltered)
651+
template <bool IS_MC, typename T>
652+
void qaEventTrack::fillRecoHistogramsAllTracks(const T& tracks)
653+
{
654+
for (const auto& track : tracks) {
655+
/// all tracks
656+
histos.fill(HIST("Tracks/KineUnmatchTracks/trackCollMatch"), 1.f);
657+
if (track.has_collision()) {
658+
/// tracks assigned to a collision
659+
histos.fill(HIST("Tracks/KineUnmatchTracks/trackCollMatch"), 2.f);
660+
} else {
661+
/// tracks not assigned to any collision
662+
histos.fill(HIST("Tracks/KineUnmatchTracks/trackCollMatch"), 3.f);
663+
if constexpr (IS_MC) {
664+
if (!track.has_mcParticle()) {
665+
/// fake track
666+
histos.fill(HIST("Tracks/KineUnmatchTracks/trackCollMatch"), 4.f);
667+
}
668+
}
669+
histos.fill(HIST("Tracks/KineUnmatchTracks/pt"), track.pt());
670+
histos.fill(HIST("Tracks/KineUnmatchTracks/eta"), track.eta());
671+
histos.fill(HIST("Tracks/KineUnmatchTracks/phi"), track.phi());
672+
}
673+
}
674+
}
675+
///////////////////////////////////////////////////////////////
676+
template <bool IS_MC, typename C, typename T, typename T_UNF>
677+
void qaEventTrack::fillRecoHistogramsGroupedTracks(const C& collision, const T& tracks, const T_UNF& tracksUnfiltered)
626678
{
627679
// fill reco collision related histograms
628680
if (!isSelectedCollision<true>(collision)) {

0 commit comments

Comments
 (0)