// top doc page for Doxygen /** \mainpage MathCore library @b MathCore provides a collection of functions and C++ classes for HEP numerical computing. This library provides only the basic mathem atical functions and algorithms and not all the functionality required by the HEP community. The current set includes classes and functions for: The current version can be downloaded here. Instructions on how to build and install are provided in the README file present in the distribution.

@authors The %ROOT Math Library Team

@b Contact: */

Generic Vectors for 2, 3 and 4 dimensions

This is a proposal for a new vector package, @b GenVector, describing vectors and their operations in 2, 3, and 4 dimensions. The 4 dimensional space is used for describing relativistic particles. These vectors are different from generic vectors of the Linear Algebra package which describe N-dimensional vectors. The functionality of this package is currently provided by the CLHEP Vector And Geometry packages and the %ROOT Physics Vector classes (Tvector2, TVector3 and TLorentzVector). It is also re-uses concepts and ideas from the CMS Common Vector package. The main characteristics of this package are :

Example of Usage

Packaging

This classes will be part of the basic Math library, libMathCore. All of the classes and functions will be in the namespace, ROOT::Math. It is still not decided, if in the CVS repository of ROOT, they will be part of a separate Vector directory, or if they will be in the same directory as the other mathcore classes.

Current Status and Time Scale

A prototype is already available in the SEAL CVS directory. A tar file of the latest frozen version is downloadable from here. The current version provides Vector and transfromation for 3 and 4 dimensions. The interfaces are probably not complete, some important methods are probably missing and, what is there, it is not currently all implemented and tested. The source code therefore is not yet really usable, it can be used only for browsing and for trying simple things.

For the time scale, we expect to have a first version available in the %ROOT CVS directory in the next days and have a first released version at the end of June.

Backward compatibility with %ROOT and CLHEP Vector classes

When these classes will be available in ROOT, we will create adapter (proxy) classes replacing the current %ROOT Vector classes (TVector3, TLorentzVector, TRotation and TLorentzRotation). For example a new TLorentzVector, will still inherit from TObject and contain an instance to the new ROOT::Math::LorentzVector class. All the TLorentzVector member functions will be implemented forwarding the calls to the ROOT::Math::LorentzVector. Since all these methods will be inlined, the performance overhead expected for TLorentzVector will be negligible. For mantaining some compatibility with CLHEP and easy the migration, we have decided to keep the same naming convention as CLHEP for the interfaces. Functions which have the same functionality as in CLHEP, will have, whenever possible the same name. For example we will have a ROOT::Math::XYZVector::x(), y() and z() as in CLHEP.

Error Reporting

To report errors conditions caused by infinities and NaN, We use exceptions through a simple class, ROOT::Math::GenVector_exception, inheriting from std::runtime_error.

References

  1. CLHEP Vector package (User guide and reference doc)
  2. CLHEP Geometry package
  3. %ROOT Physics Vector classes
  4. CMS Vector package

*/