Skip to content

new Hough cluster search for the UV (stereo) hits in the SciFi Hybrid Seeding

Salvatore Aiola requested to merge saiola-hybrid-seeding-newHoughSearch into master

This merge request includes several improvements to the SciFi hybrid seeding algorithm, particularly the step where UV (stereo) hits are added to the xz track candidates.

The new Hough cluster search is implemented in a generic template class. For each track candidate in the x-z projection, the y-z slopes corresponding to the hits from each of the 6 UV layers are collected in 6 separate histograms implemented as fixed-size arrays. The histograms are added together to form clusters. The largest clusters are promoted to candidate hits for the full track.

The code has also been reorganized, templating some methods and classes to avoid code repetition without affecting the performance.

The new algorithm was tested on a Monte Carlo sample (upgrade_DC19_01_Bd2KsteeMU) of 35k events with Moore. The physics performance are equivalent to the previous algorithm (see tables below with efficiency and ghost rates).

The code was also tested with the callgrind profiler. The new hybrid seeding algorithm results in -15% instruction fetch counts, with the Hough cluster search counting -40% instruction fetch.

Efficiency from master

SeedTrackChecker                       INFO Results
SeedTrackChecker                       INFO **** Seed                         3785456 tracks including         240976 ghosts [ 6.37 %], Event average  5.73 % ****
SeedTrackChecker                       INFO   01_hasT                       : 2509335 from  3020640 [ 83.07 %]    366 clones [ 0.01 %], purity: 99.50 %, hitEff: 97.94 %
SeedTrackChecker                       INFO   02_long                       : 1839150 from  1977324 [ 93.01 %]    159 clones [ 0.01 %], purity: 99.65 %, hitEff: 98.53 %
SeedTrackChecker                       INFO   03_long>5GeV                  : 1313194 from  1368948 [ 95.93 %]     92 clones [ 0.01 %], purity: 99.65 %, hitEff: 99.09 %
SeedTrackChecker                       INFO   04_long_fromB                 :  101294 from   107958 [ 93.83 %]      5 clones [ 0.00 %], purity: 99.71 %, hitEff: 98.81 %
SeedTrackChecker                       INFO   05_long_fromB>5GeV            :   78402 from    81750 [ 95.90 %]      4 clones [ 0.01 %], purity: 99.71 %, hitEff: 99.21 %
SeedTrackChecker                       INFO   06_noVelo+UT+T                :  269373 from   299637 [ 89.90 %]     34 clones [ 0.01 %], purity: 99.63 %, hitEff: 97.66 %
SeedTrackChecker                       INFO   07_noVelo+UT+T>5GeV           :  127490 from   133142 [ 95.75 %]      7 clones [ 0.01 %], purity: 99.64 %, hitEff: 98.91 %
SeedTrackChecker                       INFO   08_noVelo+UT+T_strange        :   98458 from   107262 [ 91.79 %]     10 clones [ 0.01 %], purity: 99.65 %, hitEff: 98.16 %
SeedTrackChecker                       INFO   09_noVelo+UT+T_strange>5GeV   :   58136 from    60598 [ 95.94 %]      2 clones [ 0.00 %], purity: 99.66 %, hitEff: 99.02 %
SeedTrackChecker                       INFO   10_noVelo+noUT+T              :  400812 from   743679 [ 53.90 %]    173 clones [ 0.04 %], purity: 98.74 %, hitEff: 95.39 %
SeedTrackChecker                       INFO   11_noVelo+noUT+T>5GeV         :  188883 from   239284 [ 78.94 %]    105 clones [ 0.06 %], purity: 98.50 %, hitEff: 96.51 %
SeedTrackChecker                       INFO   12_noVelo+noUT+T_strange      :   49208 from    63493 [ 77.50 %]     10 clones [ 0.02 %], purity: 99.24 %, hitEff: 97.29 %
SeedTrackChecker                       INFO   13_noVelo+noUT+T>5GeV_strange :   33143 from    36646 [ 90.44 %]      6 clones [ 0.02 %], purity: 99.23 %, hitEff: 98.10 %
SeedTrackChecker                       INFO   14_long_electrons             :  187546 from   215333 [ 87.10 %]     17 clones [ 0.01 %], purity: 99.72 %, hitEff: 97.92 %
SeedTrackChecker                       INFO   15_noVelo+UT+T_electrons      :  209189 from   246648 [ 84.81 %]     33 clones [ 0.02 %], purity: 99.69 %, hitEff: 97.36 %
SeedTrackChecker                       INFO   16_noVelo+noUT+T_electrons    :  149147 from   533945 [ 27.93 %]     65 clones [ 0.04 %], purity: 99.24 %, hitEff: 96.48 %

Efficiency with new algorithm

SeedTrackChecker                       INFO Results
SeedTrackChecker                       INFO **** Seed                         3767476 tracks including         195001 ghosts [ 5.18 %], Event average  4.76 % ****
SeedTrackChecker                       INFO   01_hasT                       : 2529299 from  3020640 [ 83.73 %]    101 clones [ 0.00 %], purity: 99.49 %, hitEff: 97.80 %
SeedTrackChecker                       INFO   02_long                       : 1838689 from  1977324 [ 92.99 %]     41 clones [ 0.00 %], purity: 99.62 %, hitEff: 98.36 %
SeedTrackChecker                       INFO   03_long>5GeV                  : 1311833 from  1368948 [ 95.83 %]     35 clones [ 0.00 %], purity: 99.61 %, hitEff: 98.92 %
SeedTrackChecker                       INFO   04_long_fromB                 :  101372 from   107958 [ 93.90 %]      2 clones [ 0.00 %], purity: 99.68 %, hitEff: 98.63 %
SeedTrackChecker                       INFO   05_long_fromB>5GeV            :   78404 from    81750 [ 95.91 %]      1 clones [ 0.00 %], purity: 99.67 %, hitEff: 99.05 %
SeedTrackChecker                       INFO   06_noVelo+UT+T                :  270212 from   299637 [ 90.18 %]     12 clones [ 0.00 %], purity: 99.63 %, hitEff: 97.55 %
SeedTrackChecker                       INFO   07_noVelo+UT+T>5GeV           :  127746 from   133142 [ 95.95 %]      3 clones [ 0.00 %], purity: 99.63 %, hitEff: 98.82 %
SeedTrackChecker                       INFO   08_noVelo+UT+T_strange        :   98445 from   107262 [ 91.78 %]      3 clones [ 0.00 %], purity: 99.63 %, hitEff: 98.01 %
SeedTrackChecker                       INFO   09_noVelo+UT+T_strange>5GeV   :   58099 from    60598 [ 95.88 %]      1 clones [ 0.00 %], purity: 99.62 %, hitEff: 98.87 %
SeedTrackChecker                       INFO   10_noVelo+noUT+T              :  420398 from   743679 [ 56.53 %]     48 clones [ 0.01 %], purity: 98.83 %, hitEff: 95.49 %
SeedTrackChecker                       INFO   11_noVelo+noUT+T>5GeV         :  197584 from   239284 [ 82.57 %]     35 clones [ 0.02 %], purity: 98.64 %, hitEff: 96.83 %
SeedTrackChecker                       INFO   12_noVelo+noUT+T_strange      :   50021 from    63493 [ 78.78 %]      5 clones [ 0.01 %], purity: 99.25 %, hitEff: 97.25 %
SeedTrackChecker                       INFO   13_noVelo+noUT+T>5GeV_strange :   33502 from    36646 [ 91.42 %]      3 clones [ 0.01 %], purity: 99.23 %, hitEff: 98.09 %
SeedTrackChecker                       INFO   14_long_electrons             :  187248 from   215333 [ 86.96 %]      3 clones [ 0.00 %], purity: 99.70 %, hitEff: 97.78 %
SeedTrackChecker                       INFO   15_noVelo+UT+T_electrons      :  208831 from   246648 [ 84.67 %]     10 clones [ 0.00 %], purity: 99.67 %, hitEff: 97.21 %
SeedTrackChecker                       INFO   16_noVelo+noUT+T_electrons    :  148969 from   533945 [ 27.90 %]     12 clones [ 0.01 %], purity: 99.28 %, hitEff: 96.42 %

I attach also the callgrind graphs for master and for the new algorithm, obatined running Moore on 100 events from the same MC sample.

Callgrind for master: total Ir = 1,776,909,692 master

Callgrind for new algorithm: total Ir = 1,513,821,530 (-15% compared to master) hough2

Edited by Salvatore Aiola

Merge request reports