Skip to content

Commit 64441c8

Browse files
mfagginMattia Faggin
andauthored
DPG: add qa of tracks not matched to collisions. (#1000)
* DPG: add qa of tracks not matched to collisions. * Fix comment. Co-authored-by: Mattia Faggin <mfaggin@cern.ch>
1 parent 3ef77de commit 64441c8

1 file changed

Lines changed: 62 additions & 9 deletions

File tree

DPG/Tasks/qaEventTrack.cxx

Lines changed: 62 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ struct qaEventTrack {
103103
HistogramRegistry histos;
104104

105105
Preslice<aod::McParticles> perMcCollision = aod::mcparticle::mcCollisionId;
106+
Preslice<aod::Tracks> perRecoCollision = aod::track::collisionId;
106107

107108
void init(InitContext const&);
108109

@@ -161,16 +162,25 @@ struct qaEventTrack {
161162
return true;
162163
}
163164

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);
165+
// General functions to fill data and MC histograms
166+
template <bool IS_MC, typename T>
167+
void fillRecoHistogramsAllTracks(const T& tracks);
168+
template <bool IS_MC, typename C, typename T, typename T_UNF>
169+
void fillRecoHistogramsGroupedTracks(const C& collision, const T& tracks, const T_UNF& tracksUnfiltered);
167170

168171
// Process function for data
169172
using CollisionTableData = soa::Join<aod::Collisions, aod::EvSels>;
170173
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)
174+
void processData(CollisionTableData const& collisions, soa::Filtered<TrackTableData> const& tracks, aod::FullTracks const& tracksUnfiltered)
172175
{
173-
fillRecoHistograms<false>(collision, tracks, tracksUnfiltered);
176+
/// work with all tracks
177+
fillRecoHistogramsAllTracks<false>(tracks);
178+
/// work with collision grouping
179+
for (auto const& collision : collisions) {
180+
const auto& tracksColl = tracks.sliceBy(perRecoCollision, collision.globalIndex());
181+
const auto& tracksUnfilteredColl = tracksUnfiltered.sliceBy(perRecoCollision, collision.globalIndex());
182+
fillRecoHistogramsGroupedTracks<false>(collision, tracksColl, tracksUnfilteredColl);
183+
}
174184
}
175185
PROCESS_SWITCH(qaEventTrack, processData, "process data", false);
176186

@@ -246,10 +256,17 @@ struct qaEventTrack {
246256
// Process function for MC
247257
using CollisionTableMC = soa::Join<CollisionTableData, aod::McCollisionLabels>;
248258
using TrackTableMC = soa::Join<TrackTableData, aod::McTrackLabels>;
249-
void processMC(CollisionTableMC::iterator const& collision, soa::Filtered<TrackTableMC> const& tracks, aod::FullTracks const& tracksUnfiltered,
259+
void processMC(CollisionTableMC const& collisions, soa::Filtered<TrackTableMC> const& tracks, aod::FullTracks const& tracksUnfiltered,
250260
aod::McParticles const& mcParticles, aod::McCollisions const& mcCollisions)
251261
{
252-
fillRecoHistograms<true>(collision, tracks, tracksUnfiltered);
262+
/// work with all tracks
263+
fillRecoHistogramsAllTracks<true>(tracks);
264+
/// work with collision grouping
265+
for (auto const& collision : collisions) {
266+
const auto& tracksColl = tracks.sliceBy(perRecoCollision, collision.globalIndex());
267+
const auto& tracksUnfilteredColl = tracksUnfiltered.sliceBy(perRecoCollision, collision.globalIndex());
268+
fillRecoHistogramsGroupedTracks<true>(collision, tracksColl, tracksUnfilteredColl);
269+
}
253270
}
254271
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
255272

@@ -473,6 +490,17 @@ void qaEventTrack::init(InitContext const&)
473490
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}}});
474491
histos.add("Tracks/Kine/relativeResoPtMean", "mean relative #it{p}_{T} resolution;#LT#sigma{#it{p}}/#it{p}_{T}#GT;#it{p}_{T}", kTProfile, {{axisPt}});
475492

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

0 commit comments

Comments
 (0)