CbmRoot
Loading...
Searching...
No Matches
CaUvConverter.h
Go to the documentation of this file.
1/* Copyright (C) 2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Sergey Gorbunov [committer] */
4
5#ifndef CaUvConverter_h
6#define CaUvConverter_h 1
7
8
9#include "CaDefs.h"
10
11namespace cbm::ca
12{
14
16
17 public:
19 CaUvConverter(double phiU, double phiV) { SetFromUV(phiU, phiV); }
20
22 CaUvConverter(double phiU, double dx2, double dxy, double dy2) { SetFromXYCovMatrix(phiU, dx2, dxy, dy2); }
23
25 void SetFromUV(double phiU, double phiV);
26
28 void SetFromXYCovMatrix(double phiU, double dx2, double dxy, double dy2);
29
34 std::pair<double, double> ConvertXYtoUV(double x, double y) const
35 {
36 return std::make_pair(fcosU * x + fsinU * y, fcosV * x + fsinV * y);
37 }
38
43 std::pair<double, double> ConvertUVtoXY(double u, double v) const
44 {
45 return std::make_pair(fcosX * u + fsinX * v, fcosY * u + fsinY * v);
46 }
47
53 std::tuple<double, double, double> ConvertCovMatrixUVtoXY(double du2, double duv, double dv2) const
54 {
55 return std::make_tuple(fcosX * fcosX * du2 + 2. * fsinX * fcosX * duv + fsinX * fsinX * dv2,
56 fcosX * fcosY * du2 + (fcosX * fsinY + fsinX * fcosY) * duv + fsinX * fsinY * dv2,
57 fcosY * fcosY * du2 + 2. * fsinY * fcosY * duv + fsinY * fsinY * dv2);
58 }
59
65 std::tuple<double, double, double> ConvertCovMatrixXYtoUV(double dx2, double dxy, double dy2) const
66 {
67 return std::make_tuple(fcosU * fcosU * dx2 + 2. * fsinU * fcosU * dxy + fsinU * fsinU * dy2,
68 fcosU * fcosV * dx2 + (fcosU * fsinV + fsinU * fcosV) * dxy + fsinU * fsinV * dy2,
69 fcosV * fcosV * dx2 + 2. * fsinV * fcosV * dxy + fsinV * fsinV * dy2);
70 }
71
72
73 private:
76
79
82
85 };
86
87} // namespace cbm::ca
88
89
90#endif
Compile-time constants definition for the CA tracking algorithm.
fscal v[fmask::Size]
Definition KfSimdPseudo.h:4
A class to convert XY coordinates to UV coordinates.
std::tuple< double, double, double > ConvertCovMatrixUVtoXY(double du2, double duv, double dv2) const
Conversion function (du2, duv, dv2) -> (dx2, dxy, dy2)
void SetFromXYCovMatrix(double phiU, double dx2, double dxy, double dy2)
construct from U angle and XY covariance matrix
double fcosU
U coordinate in XY.
double fcosY
Y coordinate in UV.
std::pair< double, double > ConvertUVtoXY(double u, double v) const
Conversion function (x,y) -> (u,v)
CaUvConverter(double phiU, double dx2, double dxy, double dy2)
construct from U angle and XY covariance matrix
std::tuple< double, double, double > ConvertCovMatrixXYtoUV(double dx2, double dxy, double dy2) const
Conversion function (dx2, dxy, dy2) -> (du2, duv, dv2)
double fcosV
V coordinate in XY.
CaUvConverter(double phiU, double phiV)
construct from U,V angles
double fcosX
X coordinate in UV.
void SetFromUV(double phiU, double phiV)
construct from U,V angles
std::pair< double, double > ConvertXYtoUV(double x, double y) const
Conversion function (x,y) -> (u,v)
constexpr double Undef< double >
Definition CaDefs.h:122