iLCSoft / MarlinTrkProcessors

Collection of Tracking Relelated Processors Based on MarlinTrk
GNU General Public License v3.0
1 stars 28 forks source link

Subtrack of final LCIO Track for VXD+SIT hits sometimes missing #52

Open dudarboh opened 3 years ago

dudarboh commented 3 years ago

Expected behaviour (?)

final lcio Track stores TrackerHits which can be accessed by track->getTrackerHits()

As well as separate subtracks that form this final lcio Track which can be accessed by track->getTracks()

One would always expect:

int n_hits_total = track->getTrackerHits().size();
int n_hits_vxd_sit = ( track->getTracks()[0] )->getTrackerHits().size();
int n_hits_tpc = ( track->getTracks()[1] )->getTrackerHits().size();
n_hits_total == n_hits_vxd_sit + n_hits_tpc; // always holds true

Issue

However sometimes track->getTracks()[0] corresponds to the TPC hits despite the fact that VXD and/or SIT hits are present.

Here is debug printout of such a case:

[ DEBUG6 "MySETAnalysis"]  -- Final Track has 2 subtracks - will use these for displaying hits 
[ VERBOSE "MySETAnalysis"] Track hits size:167
[ VERBOSE "MySETAnalysis"] VXD used: 2
[ VERBOSE "MySETAnalysis"] SIT used: 4
[ VERBOSE "MySETAnalysis"] FTD used: 0
[ VERBOSE "MySETAnalysis"] TPC used: 161
[ VERBOSE "MySETAnalysis"] SET used: 0
[ DEBUG6 "MySETAnalysis"]  -- track i= 0 has 161 hits  
[ DEBUG6 "MySETAnalysis"]  -- track i= 1 has 12 hits  // tpc hits from second curl

Track has 2 VXD hits, 4 SIT hits and 161 TPC hits (1st curl) = total 167 But despite having inner tracker hits one can see that subTrack for VXD and SIT hits is missing, so the total number of subtrack[0] and subtrack[1] hits doesn't add up to the 167!

Here is a debug printout example for a "good" track:

[ DEBUG6 "MySETAnalysis"]  -- track has 2 subtracks - will use these for displaying hits
[ VERBOSE "MySETAnalysis"] Final track hits size:132
[ VERBOSE "MySETAnalysis"] VXD used: 0
[ VERBOSE "MySETAnalysis"] SIT used: 4
[ VERBOSE "MySETAnalysis"] FTD used: 0
[ VERBOSE "MySETAnalysis"] TPC used: 128
[ VERBOSE "MySETAnalysis"] SET used: 0
[ DEBUG6 "MySETAnalysis"]  -- subTrack i= 0 has 4 hits  
[ DEBUG6 "MySETAnalysis"]  -- subTrack i= 1 has 128 hits  

here is another example for the "good" track in case of additional curls in the TPC:

[ DEBUG6 "MySETAnalysis"]  -- track has 3 subtracks - will use these for displaying hits 
[ VERBOSE "MySETAnalysis"] Final track hits size:86
[ VERBOSE "MySETAnalysis"] VXD used: 6
[ VERBOSE "MySETAnalysis"] SIT used: 2
[ VERBOSE "MySETAnalysis"] FTD used: 0
[ VERBOSE "MySETAnalysis"] TPC used: 78
[ VERBOSE "MySETAnalysis"] SET used: 0
[ DEBUG6 "MySETAnalysis"]  -- subTrack i= 0 has 8 hits  
[ DEBUG6 "MySETAnalysis"]  -- subTrack i= 1 has 78 hits  
[ DEBUG6 "MySETAnalysis"]  -- subTrack i= 2 has 68 hits  

Maybe this happens when SiTrack and TPCTrack are failed to be combined? But despite being failed to combine we are still using all hits in the final refit.. And Si hits most of the times are not outliers in the final refit.. But we don't write them int the subTrack?