A Gaudi algorithm for Key4hep that finds tracks in the planar hits of one tracking system (an inner tracker, a silicon wrapper, a muon system, ...) without using any other detector. It is built for displaced tracks, for example from long-lived particle decays, so it never assumes that a track comes from the interaction point. The detector, field and cuts are set in the steering file.
- The hits are grouped by layer (barrel and endcap layers, from the cellID).
- Track candidates are found with one of two strategies (
Strategy):Exhaustive: every combination of k hits on k different layers is fitted (a circle in xy, a line of z versus arc length). Good for sparse events.SeedAndExtend: seeds of 3 to 5 hits on neighbouring layers are extended layer by layer along their helix. Good for dense events. WithSeedAndExtendMode = BestFirst, the best seeds go first, take their hits and are judged with a kink χ² that includes multiple scattering.
- Road, outlier and quality cuts remove wrong combinations. The best candidate becomes a track, its hits are removed, and the search repeats.
- Each track stores its fitted helix as EDM4hep track states (below). A GenFit fit can be
added (
UseGenFit).
| Location | What it is | When |
|---|---|---|
AtFirstHit |
the fitted helix at the innermost hit (referencePoint = that hit) |
always |
AtLastHit |
the same helix at the outermost hit | StoreLastHitState = true (default) |
AtIP |
the track at its closest approach to the origin | IPStateMode (below) |
AtOther |
GenFit fit at the first hit | UseGenFit = true |
All states follow the EDM4hep convention: the five parameters are relative to the
referencePoint, the track moves outward, and omega > 0 means clockwise seen from +z.
IPStateMode says whether, and how, an AtIP state is made. The track is never forced to
come from the IP. The state only describes it at the point closest to the origin.
IPStateMode |
Use |
|---|---|
None (default) |
no AtIP state |
Helix |
the same helix at its closest approach to the origin. For tracks in a uniform field (inner trackers). |
SolenoidCrossing |
the helix is followed back to the solenoid boundary and matched there to a helix in the inner field. For tracks measured outside the solenoid (muon system). |
source /cvmfs/sw-nightlies.hsf.org/key4hep/setup.sh
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=$PWD/install
cmake --build build -j8 --target install
(cd build && ctest) # unit tests of the helix extrapolation and the kink chi2GenFit is found on CMAKE_PREFIX_PATH or through GENFIT_INSTALL_DIR, or through
GENFIT_INC / GENFIT_LIB (see cmake/FindGenFit.cmake).
source /cvmfs/sw-nightlies.hsf.org/key4hep/setup.sh
export LD_LIBRARY_PATH=<path to>/install/lib64:$LD_LIBRARY_PATH
export PYTHONPATH=<path to>/install/python:$PYTHONPATHk4run options/runGlobalTrackerTracking.py| Steering | Detector |
|---|---|
runGlobalTrackerTracking.py |
IDEA vertex detector + silicon wrapper, merged with MergeTrackerHitPlanes; IPStateMode = Helix |
runMuonSystemTracking.py |
IDEA muon system, settings of the HNL muon-system studies; input, output and compact on the command line; IPStateMode = SolenoidCrossing |
runCombinatorialTrackFinder.py |
IDEA muon system, fixed example files; IPStateMode = SolenoidCrossing |
The geometry compact in the steering must be the one the input file was digitised with.
Every property is documented in components/CombinatorialTrackFinder.h.
| File | Content |
|---|---|
components/CombinatorialTrackFinder.{h,cpp} |
the algorithm |
components/MergeTrackerHitPlanes.cpp |
merges hit collections of several subdetectors |
src/, include/ |
circle and helix tools, layer geometry, seed finder, kink χ², DD4hep field and material for GenFit |
test/ |
unit tests |
options/ |
example steering files |
Mahmoud Al-Thakeel