ATLAS Offline Software
MuonHoughMathUtils.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef MUONHOUGHPATTERNEVENT_MUONHOUGHMATHUTILS_H
6 #define MUONHOUGHPATTERNEVENT_MUONHOUGHMATHUTILS_H
7 
8 #include <cmath>
9 #include <string>
10 #include <vector>
11 
14 
15 namespace MuonHough {
16  constexpr double two_Pi = 2 * M_PI;
17  constexpr double degree_rad_conversion_factor = M_PI / 180.;
18  constexpr double rad_degree_conversion_factor = 180. / M_PI;
19 
20  // Geometry for curved Hough extrapolation
22  constexpr double tan_barrel = 11430. / 14000.;
24  constexpr double radius_cylinder = 4000.;
26  constexpr double z_cylinder = 6000.;
28  constexpr double z_end = 15000.;
30  constexpr double z_magnetic_range = z_end - z_cylinder;
33 } // namespace MuonHough
34 
36 public:
40  virtual ~MuonHoughMathUtils() = default;
41 
43  static int sgn(double d);
45  static int step(double d, double x0 = 0);
46 
48  static double signedDistanceToLine(double x0, double y0, double r0, double phi);
50  static double distanceToLine(double x0, double y0, double r0, double phi);
52  static double incrementTillAbove0(double x, double inc, double zero = 0);
54  static double angleFrom0To360(double angle);
56  static double angleFrom0To180(double angle);
58  static double angleFrom0ToPi(double angle);
60  static double angleFromMinusPiToPi(double angle);
62  double angleFromRadialToGrad(double angle) const;
64  double angleFromGradToRadial(double angle) const;
65 
67  static std::string intToString(int i);
68 
70  static double distanceToLine2D(double x0, double y0, double r, double phi) ;
72  static double distanceToLine3D(const Amg::Vector3D& point, const Amg::Vector3D& l_trans, double phi, double theta);
73 
75  static double distanceOfLineToOrigin2D(double a, double b);
77  static double signedDistanceOfLineToOrigin2D(double x, double y, double phi);
78 
80  static double thetaForCurvedHit(double invcurvature, MuonHoughHit* hit);
82  static void thetasForCurvedHit(double ratio, MuonHoughHit* hit, double& theta1, double& theta2);
84  static double signedDistanceCurvedToHit(double z0, double theta, double invcurvature, const Amg::Vector3D& hit);
85 
95  static void extrapolateCurvedRoad(const Amg::Vector3D& roadpos, const Amg::Vector3D& roadmom, const Amg::Vector3D& pos,
96  Amg::Vector3D& roadpose, Amg::Vector3D& roaddire);
97 
100 
102  static Amg::Vector3D shortestPointOfLineToOrigin(const Amg::Vector3D& vec, double phi, double theta);
103 
105  static bool lineThroughCylinder(const Amg::Vector3D& vec, double phi, double theta, double r_0, double z_0);
106 
107 };
108 
111 } // angle in radial
114 } // angle in grad
115 
116 #endif // MUONHOUGHPATTERNEVENT_MUONHOUGHMATHUTILS_H
MuonHough::degree_rad_conversion_factor
constexpr double degree_rad_conversion_factor
Definition: MuonHoughMathUtils.h:17
beamspotman.r
def r
Definition: beamspotman.py:676
MuonHoughMathUtils::angleFrom0To180
static double angleFrom0To180(double angle)
computes angle in degrees between 0 and 180
Definition: MuonHoughMathUtils.cxx:52
MuonHoughMathUtils::signedDistanceToLine
static double signedDistanceToLine(double x0, double y0, double r0, double phi)
distance from (x0,y0) to the line (r0,phi), phi in rad
Definition: MuonHoughMathUtils.cxx:31
MuonHoughMathUtils::sgn
static int sgn(double d)
sign (-1 or 1) of a double
Definition: MuonHoughMathUtils.cxx:19
MuonHoughMathUtils::shortestPointOfLineToOrigin
static Amg::Vector3D shortestPointOfLineToOrigin(const Amg::Vector3D &vec, double phi, double theta)
calculates the 3d-point closest to origin
Definition: MuonHoughMathUtils.cxx:139
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
hist_file_dump.d
d
Definition: hist_file_dump.py:137
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:71
MuonHoughMathUtils::step
static int step(double d, double x0=0)
step function at place x0
Definition: MuonHoughMathUtils.cxx:21
M_PI
#define M_PI
Definition: ActiveFraction.h:11
MuonHoughMathUtils
Definition: MuonHoughMathUtils.h:35
MuonHoughMathUtils::~MuonHoughMathUtils
virtual ~MuonHoughMathUtils()=default
destructor
MuonHough::z_cylinder
constexpr double z_cylinder
length of cylinder
Definition: MuonHoughMathUtils.h:26
MuonHoughMathUtils::distanceToLine3D
static double distanceToLine3D(const Amg::Vector3D &point, const Amg::Vector3D &l_trans, double phi, double theta)
distance from (x0,y0,z0) to line (x,y,z,phi,theta)
Definition: MuonHoughMathUtils.cxx:86
MuonHoughHit
Definition: MuonHoughHit.h:28
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:12
x
#define x
GeoPrimitives.h
MuonHoughHit.h
MuonHoughMathUtils::thetasForCurvedHit
static void thetasForCurvedHit(double ratio, MuonHoughHit *hit, double &theta1, double &theta2)
calculates theta at (x,y,z) for curved track model, for positive and negative curvature
Definition: MuonHoughMathUtils.cxx:254
MuonHough::rad_degree_conversion_factor
constexpr double rad_degree_conversion_factor
Definition: MuonHoughMathUtils.h:18
lumiFormat.i
int i
Definition: lumiFormat.py:92
MuonHoughMathUtils::distanceToLine
static double distanceToLine(double x0, double y0, double r0, double phi)
distance from (x0,y0) to the line (r0,phi), phi in rad
Definition: MuonHoughMathUtils.cxx:40
MuonHoughMathUtils::angleFromMinusPiToPi
static double angleFromMinusPiToPi(double angle)
computes angle in rad between -Pi and Pi
Definition: MuonHoughMathUtils.cxx:56
MuonHoughMathUtils::signedDistanceOfLineToOrigin2D
static double signedDistanceOfLineToOrigin2D(double x, double y, double phi)
signed distance of line with point (x,y) and angle phi to origin
Definition: MuonHoughMathUtils.cxx:110
angle
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
Definition: TRTDetectorFactory_Full.cxx:73
MuonHough
Definition: MuonLayerHoughTool.h:42
MuonHoughMathUtils::incrementTillAbove0
static double incrementTillAbove0(double x, double inc, double zero=0)
increments x with inc till above x
Definition: MuonHoughMathUtils.cxx:44
TRT_PAI_physicsConstants::r0
const double r0
electron radius{cm}
Definition: TRT_PAI_physicsConstants.h:20
MuonHough::z_end
constexpr double z_end
z value whereafter no magnetic field / curvature
Definition: MuonHoughMathUtils.h:28
MuonHoughMathUtils::angleFrom0To360
static double angleFrom0To360(double angle)
computes angle in degrees between 0 and 360
Definition: MuonHoughMathUtils.cxx:50
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
MuonHoughMathUtils::extrapolateCurvedRoad
static void extrapolateCurvedRoad(const Amg::Vector3D &roadpos, const Amg::Vector3D &roadmom, const Amg::Vector3D &pos, Amg::Vector3D &roadpose, Amg::Vector3D &roaddire)
extrapolates road to global position
Definition: MuonHoughMathUtils.cxx:264
MuonHoughMathUtils::MuonHoughMathUtils
MuonHoughMathUtils()
default constructor
MuonHoughMathUtils::thetaForCurvedHit
static double thetaForCurvedHit(double invcurvature, MuonHoughHit *hit)
calculates theta at (x,y,z) for curved track model
Definition: MuonHoughMathUtils.cxx:246
MuonHough::two_Pi
constexpr double two_Pi
Definition: MuonHoughMathUtils.h:16
MuonHoughMathUtils::shortestPointOfLineToOrigin3D
static Amg::Vector3D shortestPointOfLineToOrigin3D(const Amg::Vector3D &vec, double phi, double theta)
calculates the 3d-point closest to origin in xy-plane
Definition: MuonHoughMathUtils.cxx:115
MuonHoughMathUtils::angleFrom0ToPi
static double angleFrom0ToPi(double angle)
computes angle in rad between 0 and Pi
Definition: MuonHoughMathUtils.cxx:54
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
MuonHoughMathUtils::distanceToLine2D
static double distanceToLine2D(double x0, double y0, double r, double phi)
distance from (x0,y0) to line (r,phi)
Definition: MuonHoughMathUtils.cxx:67
a
TList * a
Definition: liststreamerinfos.cxx:10
y
#define y
python.compareTCTs.ratio
ratio
Definition: compareTCTs.py:295
MuonHoughMathUtils::distanceOfLineToOrigin2D
static double distanceOfLineToOrigin2D(double a, double b)
distance of line y = ax + b to origin
Definition: MuonHoughMathUtils.cxx:108
MuonHough::radius_cylinder
constexpr double radius_cylinder
radius of cylinder
Definition: MuonHoughMathUtils.h:24
MuonHoughMathUtils::lineThroughCylinder
static bool lineThroughCylinder(const Amg::Vector3D &vec, double phi, double theta, double r_0, double z_0)
calculates if line (x,y,z,phi,theta) crosses cylinder (r_0,z_0) around origin
Definition: MuonHoughMathUtils.cxx:161
MuonHough::tan_barrel
constexpr double tan_barrel
relation for transition between endcap and barrel 11.43 m (r) / 14m (z)
Definition: MuonHoughMathUtils.h:22
MuonHoughMathUtils::angleFromRadialToGrad
double angleFromRadialToGrad(double angle) const
converts angle in rad to degrees
Definition: MuonHoughMathUtils.h:109
MuonHoughMathUtils::angleFromGradToRadial
double angleFromGradToRadial(double angle) const
converts angle in degrees to rad
Definition: MuonHoughMathUtils.h:112
MuonHoughMathUtils::intToString
static std::string intToString(int i)
converts integer to string
Definition: MuonHoughMathUtils.cxx:58
MuonHough::z_magnetic_range
constexpr double z_magnetic_range
range where hit is curved in endcap region
Definition: MuonHoughMathUtils.h:30
zero
void zero(TH2 *h)
zero the contents of a 2d histogram
Definition: comparitor.cxx:435
MuonHoughMathUtils::signedDistanceCurvedToHit
static double signedDistanceCurvedToHit(double z0, double theta, double invcurvature, const Amg::Vector3D &hit)
calculates distance of point (x,y,z) to curved track with z0, theta and invcurvature for curved track...
Definition: MuonHoughMathUtils.cxx:207
MuonHough::z_magnetic_range_squared
constexpr double z_magnetic_range_squared
range where hit is curved in endcap region ('squared')
Definition: MuonHoughMathUtils.h:32