Pure Java Track Fitter
Introduction
We have developed a demonstration track fitting code in Java, that efficiently finds
and fits tracks with Pt > 1 GeV in the CMS tracker. The code identifies good tracks at
a rate of ~ 1 per second, for a total set of ~3000 digitisings in the tracker. This
compares favourably with the C++/Fortran Kalman Filter code we use in our production
reconstruction code (which also operates at about 1 track per second, but which is a
considerably more compute intensive procedure).
Results
The image below shows a single di-jet event in the CMS calorimeter, with the
reconstructed tracks from the Kalman Filter in white/grey, and the reconstructed tracks
from the Java fitter in orange. We have tested both codes on simulated single muon event
samples at energies of 1, 2, 5, 20 and 50 GeV. Single track finding efficiencies for both
codes on these events is excellent (a high statistics study is planned).
In the event shown, there are 27 tracks found by the Kalman Filter, and 58 found by the
Java fitter.
Fitting technique
- The tracker digits are fetched from the Objectivity database as a set of space points
(or hits) in (r,phi,z) with associated errors.
- The hits are arranged in layers corresponding to the Tracker detector layers.
- Starting from the outermost layers of the detector, a pair of seed hits are chosen that
line up roughly with the centre of CMS.
- Working from the innermost layer of the detector, a third seed hit is chosen that, when
coupled with the two initial hits, can be fitted to a helix with a radius corresponding to
a momentum of at least 1 GeV, the fit giving an acceptably small Chi squared.
- Using the candidate track fit, and working from the innermost layer of the detector, the
track is extrapolated to each layer of the detector it intersects, in order to build a
list of candidate hits on the track.
- At each intersected layer, the closest hit is determined, and the hit added to the track
list if its Chi squared distance to the track intersection point is below a certain value
- If an acceptable hit is found on the intersected layer, then the Chi squared is
accumulated for the track
- If the accumulated Chi squared of the track at any time exceeds a certain value, then it
is invalidated, and a new trio of seed hits sought
- After the candidate track has been extrapolated through the detector, it is rejected if
it does not meet the following conditions:
- it has at least three well-measured hits in its track list (i.e. hits from Stereo or
Pixel layers)
- it has at least six hits in total in its track list
- it's Chi squared is below a certain value
- If the track meets these criteria, then the innermost three well-measured hits are used
in a new three point fit to a helix. This fit yields the parameters of the helix, and a
Chi squared. The track is only accepted if this Chi squared, in turn, is less than a
certain value.
- For an accepted track, all hits in the track list are marked as "used", and
fitting resumes for further tracks with a new three point seed.
- Once all tracker layers have been iterated over, or once all hits have been marked
"used", fitting terminates.
Note that, unlike the Kalman Filter method, this fitting procedure does not give the
covariance matrix for the fitted track parameters, nor does it take into account multiple
scattering in the detector, not does it use all points on the track in the final fit.
These deficiencies will be addressed in further work.
Further Work
Using this fitter as a basis, we intend to develope a full Kalman Filter fitter in
Java. This will be fully integrated in our JavaCMS event viewing applet, allowing the user
to interactively refit existing tracks, or fit new tracks. The new fitter will also be
integated in a completely Java-based reconstruction tool we are developing for our CMSOO
database. Work will start in early 1999.