GeneralBrokenLines  V02-01-04
General information


For a track with an initial trajectory from a prefit of the (2D, 4D or 5D) measurements (internal seed) or an external prediction (external seed) the description of multiple scattering is added by offsets in a local system. Along the initial trajectory points are defined with can describe a measurement or a (thin) scatterer or both. The refit provides corrections to the local track parameters (in the local system) and the corresponding covariance matrix at any of those points. Non-diagonal covariance matrices will be diagonalized internally. Outliers can be down-weighted by use of M-estimators. At one point the measurements can be omitted from the refit to calculate unbiased residuals.

A position measurement is in a plane defined by two directions. Along one direction the measurement precision may be zero, defining a 1D measurement in the other direction.

The broken lines trajectory is defined by (2D) offsets at the first and last point and all points with a scatterer. The prediction for a measurement is obtained by interpolation of the enclosing offsets and for triplets of adjacent offsets kink angles are determined. This requires for all points the jacobians for propagation to the previous and next offset.

Additional local or global parameters can be added and the trajectories can be written to special binary files for calibration and alignment with Millepede-II. (V. Blobel, NIM A, 566 (2006), pp. 5-13).

The conventions for the coordinate systems follow: Derivation of Jacobians for the propagation of covariance matrices of track parameters in homogeneous magnetic fields A. Strandlie, W. Wittek, NIM A, 566 (2006) 687-698.

The source code is available at the DESY SVN server, see:

Calling sequence:

  1. Create trajectory:
    traj = GblTrajectory()
  2. For all points on initial trajectory
    • Create point (supply jacobian from previous point):
      point = GblPoint(jacobian)
    • Optionally add measurement to point:

    • Optionally additional local or global parameters for measurement:
    • Optionally add scatterer to point:

    • Add point (ordered by arc length) to trajectory, get label of point:
      label = traj.addPoint(point)
  3. Optionally add external seed:
  4. Fit trajectory (potentially several times with different options), get Chi2, Ndf (and weight lost by M-estimators):
    [..] =
  5. For any point on inital trajectory
    • Get corrections and covariance matrix for track parameters:
      [..] = traj.getResults(label)
    • Optionally get residuals with errors for measurements:
      [..] = traj.getMeasResults(label)
    • Optionally get residuals with errors for scatterers:
      [..] = traj.getScatResults(label)
  6. Optionally write trajectory to MP binary file:

Alternatively trajectories can by read from MP binary files and fitted. As the points on the initial trajectory are not stored in this files results at points (corrections, covariance matrix) are not available and omission of measurements from a point is not possible.


Technical examples are given in, an example silicon tracker in


- V. Blobel, C. Kleinwort, F. Meier, Fast alignment of a complex tracking detector using advanced track models, Computer Phys. Communications (2011), doi:10.1016/j.cpc.2011.03.017