Kinematics tools
V.S.Vorobev (Talk | contribs) |
D.A.Maksimov (Talk | contribs) m |
||
| (One intermediate revision by one user not shown) | |||
| Line 1: | Line 1: | ||
[[Event_selection_framework]] | [[Event_selection_framework]] | ||
| − | Kinematic tools are defined in [https://git.inp.nsk.su/sctau/aurora/-/blob/master/Common/Kinematics/Kinematics | + | Kinematic tools are defined in [https://git.inp.nsk.su/sctau/aurora/-/blob/master/Common/Kinematics/Kinematics Common/Kinematics] package. SCT kinematics classes are based on <code>Eigen3</code> library. ROOT implementation of vectors and matrices is abandoned intentionally as too slow. |
== Main definitions == | == Main definitions == | ||
| − | Main set of aliases for basic kinematic entities in namespace <code>sct</code> is located in [https://git.inp.nsk.su/sctau/aurora/-/blob/master/Common/Kinematics/Kinematics/KineTypedefs.h | + | Main set of aliases for basic kinematic entities in namespace <code>sct</code> is located in [https://git.inp.nsk.su/sctau/aurora/-/blob/master/Common/Kinematics/Kinematics/KineTypedefs.h KineTypedefs.h]. |
| + | These aliases are to be used at maximum extent in the Aurora framework. | ||
{|class="wikitable" style="text-align: center; color: black;" width=700 | {|class="wikitable" style="text-align: center; color: black;" width=700 | ||
| Line 27: | Line 28: | ||
== sct::kine::ThreeVector == | == sct::kine::ThreeVector == | ||
| − | [https://git.inp.nsk.su/sctau/aurora/-/blob/master/Common/Kinematics/Kinematics/ThreeVector.h | + | [https://git.inp.nsk.su/sctau/aurora/-/blob/master/Common/Kinematics/Kinematics/ThreeVector.h ThreeVector.h] (contributors: D. Yakovlev, V. Vorobyev) |
The ThreeVector class is a template class inherits from <code>Eigen::Matrix<ftype, 1, 3></code> | The ThreeVector class is a template class inherits from <code>Eigen::Matrix<ftype, 1, 3></code> | ||
| Line 73: | Line 74: | ||
== sct::kine::FourVector == | == sct::kine::FourVector == | ||
| − | [https://git.inp.nsk.su/sctau/aurora/-/blob/master/Common/Kinematics/Kinematics/FourVector.h | + | [https://git.inp.nsk.su/sctau/aurora/-/blob/master/Common/Kinematics/Kinematics/FourVector.h FourVector.h] (contributors: D. Yakovlev, V. Vorobyev) |
--[[User:V.S.Vorobev|V.S.Vorobev]] ([[User talk:V.S.Vorobev|talk]]) 21:53, 25 April 2020 (+07) | --[[User:V.S.Vorobev|V.S.Vorobev]] ([[User talk:V.S.Vorobev|talk]]) 21:53, 25 April 2020 (+07) | ||
Latest revision as of 00:49, 4 May 2020
Kinematic tools are defined in Common/Kinematics package. SCT kinematics classes are based on Eigen3 library. ROOT implementation of vectors and matrices is abandoned intentionally as too slow.
[edit] Main definitions
Main set of aliases for basic kinematic entities in namespace sct is located in KineTypedefs.h.
These aliases are to be used at maximum extent in the Aurora framework.
| Entity | Alias | Source |
|---|---|---|
| 1D vector | Vector1D | Eigen::Matrix<ftype, 1, S> |
| Three-vector | ThreeVector | sct::kine::ThreeVector<> |
| Lorentz-vector | FourVector | sct::kine::FourVector<> |
| Matrix | template<size_t D1, size_t D2> Matrix | Eigen::Matrix<ftype, D1, D2> |
| Square Matrix | template<size_t S> SquareMatrix | Eigen::Matrix<ftype, S, S> |
| 3x3 matrix | ThreeMatrix | SquareMatrix<3> |
| 4x4 matrix | FourMatrix | SquareMatrix<4> |
Several APIs are described in detail below.
[edit] sct::kine::ThreeVector
ThreeVector.h (contributors: D. Yakovlev, V. Vorobyev)
The ThreeVector class is a template class inherits from Eigen::Matrix<ftype, 1, 3>
template <typename ftype = double> class ThreeVector : public Eigen::Matrix<ftype, 1, 3>
ThreeVector can be initialized with Cartesian or polar coordinates:
ThreeVector v1(x, y, z); ThreeVector v2 = ThreeVector::fromRPhiCosth(r, phi, costh)
| Operation | ThreeVector API | TVector3 API |
|---|---|---|
| x component | x(), px() | X(), Px() |
| y component | y(), py() | Y(), Py() |
| z component | z(), pz() | Z(), Pz() |
| Transverse momentum | pt() | Pt(), Perp() |
| Norm | norm() | Mag() |
| Squared norm | norm2(), squaredNorm() | Mag2() |
| Rotation around x axis | RotateX(double) | RotateX (Double_t) |
| Rotation around y axis | RotateY(double) | RotateY (Double_t) |
| Rotation around z axis | RotateZ(double) | RotateZ (Double_t) |
The angle between two vectors can be obtained with
template <typename ftype> inline ftype angle(const ThreeVector<ftype>& v1, const ThreeVector<ftype> v2)
[edit] sct::kine::FourVector
FourVector.h (contributors: D. Yakovlev, V. Vorobyev)
--V.S.Vorobev (talk) 21:53, 25 April 2020 (+07)