Pure Java Track Fitter


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).


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).

JavaFitter1.jpg (91618 bytes)

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.