ROOT logo


SMatrix Package

SMatrix is a C++ package for high performance vector and matrix computations.

It can be used only in problems when the size of the matrices is known at compile time, like in the tracking reconstruction of HEP experiments. It is based on a C++ technique, called expression templates, to achieve an high level optimization. The C++ templates can be used to implement vector and matrix expressions such that these expressions can be transformed at compile time to code which is equivalent to hand optimized code in a low-level language like FORTRAN or C (see for example ref. 1)

The SMatrix has been developed initially by T. Glebe of the Max-Planck-Institut, Heidelberg, as part of the HeraB analysis framework. A subset of the original package has been now incorporated in the ROOT distribution, with the aim to provide to the LHC experiments a stand-alone and high performant matrix package for reconstruction. The API of the current package differs from the original one, in order to be compliant to the ROOT coding conventions.

SMatrix contains generic Matrix and Vector classes to describe matrix and vector of arbitrary dimensions and of arbitrary type. The classes are templated on the scalar type and on the size of the matrix (number of rows and columns) or the vector. Therefore, the size has to be known at compile time. SMatrix supports symmetric matrices using a storage class (ROOT::Math::MatRepSym) which contains only the N*(N+1)/2 independent element of a NxN symmetric matrix.
It is not in the mandate of this package to provide a complete linear algebra functionality for these classes. What is provided are basic Matrix Template Functions and Vector Template Functions, such as the matrix-matrix, matrix-vector, vector-vector operations, plus some extra functionality for square matrices, like inversion, which is based on the optimized Cramer method for squared matrices of size up to 6x6, and determinant calculation.
For a more detailed descriptions and usage examples see:

The SMatrix package contains only header files. Normally one does not need to build any library for using SMatrix, it consists of only header files. However, in the ROOT distribution a library, libSmatrix is produced containing the C++ dictionary information for vectors, symmetric and squared matrices for double, float and Double32_t types up to dimension 7.


  1. T. Veldhuizen, Expression Templates, C++ Report, 1995.
  2. T. Glebe, SMatrix - A high performance library for Vector/Matrix calculation and Vertexing, HERA-B Software Note 01-134, December 2, 2003 (pdf)
  3. The Math Chapter in the Users Guide describing the functionality of SMatrix

N.B.: For browsing the reference SMatrix documentation it is strongly recommended to look at these online doc. The class documentation shown from the class links below is not complete, it is missing for example template methods.

Further Reading

Functions SMatrix SMatrixClass SVector

List of Classes

Class Index

Jump to

R ROOT::Math::MatRepStd<f ROOT::Math::MatRepSy ROOT::Math::MatRepSym<f ROOT::Math::S ROOT::Math::SMatrix< ROOT::Math::SMatrix<double, ROOT::Math::SMatrix<double,4 ROOT::Math::SMatrix<double,5 ROOT::Math::SMatrix<double,7 ROOT::Math::SMatrix<f ROOT::Math::SMatrix<float,4 ROOT::Math::SMatrix<float,5 ROOT::Math::SMatrix<float,7 ROOT::Math::SMatrixS ROOT::Math::SMatrixSym7 ROOT::Math::SV ROOT::Math::SVector<f