GeneralBrokenLines
V020104
using EIGEN

For a track with an initial trajectory from a prefit of the 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. Measurements are arbitrary functions of the local track parameters at a point (e.g. 2D: position, 4D: direction+position). The refit provides corrections to the local track parameters (in the local system) and the corresponding covariance matrix at any of those points. Nondiagonal covariance matrices of measurements will be diagonalized internally. Outliers can be downweighted by use of Mestimators. 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. These are calculated from the pointtopoint jacobians along the initial trajectory. The sequence of points has to be strictly monotonic in arclength.
Additional local or global parameters can be added and the trajectories can be written to special binary files for calibration and alignment with MillepedeII. (V. Blobel, NIM A, 566 (2006), pp. 513).
Besides simple trajectories describing the path of a single particle composed trajectories are supported. These are constructed from the trajectories of multiple particles and some external parameters (like those describing a decay) and transformations at the first points from the external to the local track parameters.
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) 687698.
The source code is available at the DESY SVN server, see: https://www.wiki.terascale.de/index.php/GeneralBrokenLines
std::vector<GblPoint> list
point = gbl::GblPoint(..)
point.addMeasurement(..)
point.addLocals(..)
point.addGlobals(..)
point.addScatterer(..)
list.push_back(point)
traj = gbl::GblTrajectory (list)
traj = gbl::GblTrajectory (list,seed)
if (!traj.isValid()) .. //abort
ierr = traj.fit(..)
[..] = traj.getResults(label)
[..] = traj.getMeasResults(label)
[..] = traj.getScatResults(label)
traj.milleOut(..)
At each point on the trajectory a local coordinate system with local track parameters has to be defined. The first of the five parameters describes the bending, the next two the direction and the last two the position (offsets). The curvilinear system (T,U,V) with parameters (q/p, lambda, phi, x_t, y_t) is well suited.
Matrices are implemented with the EIGEN template library (eigen.tuxfamily.org). User input or output is in the form of MatrixXd. With the preprocessor directive GBL_EIGEN_SUPPORT_ROOT
user input and output with ROOT (root.cern.ch) matrices is supported too. Internally Matrix<n>d are used for fixed sized and simple matrices based on std::vector<> for variable sized matrices. Several GBL methods are implemented as templates to allow more EIGEN compile time optimization.
Technical examples are given in example1.cpp, example2.cpp and example3.cpp. An example silicon tracker is described in exampleSit.cpp and an example sector of forward drift chambers in exampleDc.cpp.