KalTest: A ROOT-based Kalman Filter Package

Welcome to KalTest home page. KalTest is a Kalman Filter Package written in C++. It is based on ROOT and provides basic libraries for track fitting with Kalman filter technique. The package is distributed with some sample test programs to illustrate their usage.

ACFA Sim-J Group

What's new?


Since the tracking system of a collider detector usually consists of various components such as a vertex detector (VD), an intermediate tracker (IT), a central tracker (CT), etc., which have different shapes and coordinate systems, the software package for Kalman-filter-based track fitting should be able to accommodate a measurement layer with any shape and/or coordinate system. Considering possible extrapolation of a track to an outer tracking device such as a muon detector, it is also desirable that the package can handle site-to-site change of the magnetic field. In order to satisfy these requirements with minimum user-implemented code, we use C++ and exploit its object-oriented features as much as possible. For persistency of data, we rely on ROOT's automatic schema evolution.

Notice that the Kalman filter defines a generic procedure and has a much wider scope than track fitting. This implies necessity for a library of generic abstract base classes (KalLib) that implement the generic algorithm of the Kalman Filter. By inheriting from the generic base classes in KalLib and implementing their pure virtual methods for track fitting purpose, we then realize a Kalman-filter-based track fitter library (KalTrackLib). However, KalTrackLib should not depend on any particular track model or shape or coordinate system of a measurement layer according to the above guideline. We hence separate out geometry classes that provide track model (helix, straight line, ...) and surfaces (cylinder, hyperboloid, flat plane, etc.) as a geometry library (GeomLib). Each of these three class libraries, KalLib, KalTrackLib, and GeomLib are distributed as a subpackage of LEDA (Library Extension for Data Analysis) or KalTest (Kalman filter Test bench).

In this way we can minimize the number of user-implemented classes to the following three:

Notice also that track model can change site to site, which allows magnetic field variation along a particle trajectory.


The lasest version is available from the JLCCVS server as a module named KalTest in CDC Modules (CVSROOT=anonymous@jlccvs.kek.jp:/home/cvs/cdc). The following is a snap shot.

How to Build KalTest

KalTest is based on ROOT. Install ROOT if you haven't and set ROOTSYS environmental variable accordingly. You then need to set KalTest-related environmental variables by sourcing "setup" in the top directory of the KalTest source tree and make the libraries in it as follows:

$ tar -zxvf KalTest-20090702.tar.gz
$ cd KalTest
$ source ./setup
$ make

How to Run Test Programs

The KalTest package contains the following test programs under examples/kaltest:

First build them as follows:

$ pushd examples/kaltest
$ make

This produces a binary exectutable called EXKalTest in the "prod" subsubdirectory of each of the test program subdirectory. In order to run one of them, say "hybrid/prod/EXKalTest", do

$ cd hybrid/prod
$ ./EXKalTest [-b] [# events] [pt in GeV] [t0 in ns]

where "-b" makes the test program to run batch mode without event display. The other test programs, "cdc", "ct", and "simple" have no event display facility and hence no "-b" option.


The package contains some reference materials in "doc":

  1. Reference Manual (pdf: 904kB)
  2. Extended Kalman Filter : A talk by K.Fujii (pdf: 957kB)
  3. K.Hoshina's Doctor Thesis (pdf: 8.3MB, in Japanese)
  4. Y.Nakashima's Master Thesis (pdf: 5.3MB in Japanese)
  5. A.Yamaguchi's Master Thesis (pdf: 1.8MB in Japanese)


KalTest package has been built and tested on MacOSX 10.5 and Scientific Linux 4.2 with ROOT5.26.00 and the gcc3.x or gcc4.x compiler.

Since 2005/08/26 ACFA Sim-J Group