sphenix-tracking-l AT lists.bnl.gov
Subject: sPHENIX tracking discussion
List archive
- From: Michael Joseph Peters <mjpeters AT mit.edu>
- To: "sphenix-tracking-l AT lists.bnl.gov" <sphenix-tracking-l AT lists.bnl.gov>
- Subject: [Sphenix-tracking-l] Seeding-only Tracking Fixes
- Date: Fri, 15 Jul 2022 06:48:11 +0000
Hi all,
I was finally able to chase down the source of the silent crashes I mentioned Monday, which kept happening in SvtxEvaluator when I tried to run with seeding only (i.e. turning off PHActsTrackFitter, PHActsVertexPropagator, PHActsTrackProjection, at the very
least), using TrackSeedTrackMapConverter to produce SvtxTracks to feed to the evaluator.
It turns out that TrackSeedTrackMapConverter was not storing the actual TPC and silicon seed pointers in the SvtxTrack it creates. This is important because get_tpc_seed() and get_silicon_seed() are used by SvtxTrackEval to retrieve the cluster keys associated
with a track, and giving SvtxTrackEval nullptr for seeds causes a silent crash as it dereferences null (e.g. here: https://github.com/sPHENIX-Collaboration/coresoftware/blob/master/simulation/g4simulation/g4eval/SvtxTrackEval.cc#L952).
Since TrackSeedTrackMapConverter didn't store either seed, regardless of seeding method, the evaluator always silently crashed, no matter how many truth components were switched on (which is part of why diagnosis took a while).
PHTrackCleaner also uses get_tpc_seed() to retrieve a list of unique TPC seed IDs from the track map. When it's handed a nullptr, it continues on somehow, but
produces nonsense (I think this is something to do with the behavior of TrackSeedContainer::find, as used here: https://github.com/sPHENIX-Collaboration/coresoftware/blob/master/offline/packages/trackreco/PHTrackCleaner.cc#L70).
There are probably other places where get_tpc_seed() is used, but these were the relevant ones I happened to find.
Anyway, there's a second problem with using TrackSeedTrackMapConverter and PHTrackCleaner in tandem, which is that PHTrackCleaner expects the chisq and ndf fields of the SvtxTrack to be filled, which TrackSeedTrackMapConverter does not currently do; this
results in PHTrackCleaner deleting all of the tracks. This issue, at least, is straightforwardly fixed by setting those values.
But using set_tpc_seed() and set_silicon_seed() in TrackSeedTrackMapConverter didn't initially work, because it turns out TrackSeedTrackMapConverter is one of the last modules left still using SvtxTrack_v3 instead of SvtxTrack_v4. This is important because
SvtxTrack_v3 doesn't implement set_tpc_seed() and set_silicon_seed(), and the base class methods are not pure virtual -- the default behavior is to silently do nothing unless the derived class overrides this.
So I'm preparing a PR with the following fixes:
- TrackSeedTrackMapConverter uses SvtxTrack_v4, sets TPC and silicon seeds, and sets chisq and ndf.
- PHTrackCleaner throws a warning when the result of get_tpc_seed() is null, and doesn't attempt to find null seeds.
- SvtxTrackEval throws a warning when TPC and silicon seeds are both null, and in general doesn't attempt to retrieve clusters from null TPC or silicon seeds.
I'll be submitting the PR Friday afternoon; in the meantime, let me know if there are any additions or objections.
Thanks,
Michael Peters
- [Sphenix-tracking-l] Seeding-only Tracking Fixes, Michael Joseph Peters, 07/15/2022
Archive powered by MHonArc 2.6.24.