Skip to Content.
Sympa Menu

sphenix-tracking-l - [Sphenix-tracking-l] Seeding-only Tracking Fixes

sphenix-tracking-l AT lists.bnl.gov

Subject: sPHENIX tracking discussion

List archive

Chronological Thread  
  • 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.

Top of Page