GeneralBrokenLines V03-00-01
using EIGEN
exampleUtil.h
Go to the documentation of this file.
1/*
2 * exampleUtil.h
3 *
4 * Created on: 6 Nov 2018
5 * Author: kleinwrt
6 */
7
30#ifndef SRC_EXAMPLEUTIL_H_
31#define SRC_EXAMPLEUTIL_H_
32
33#include "Eigen/Dense"
34#include<iostream>
35
37namespace gbl {
38
39double unrm();
40double unif();
41Eigen::Matrix<double, 5, 5> gblSimpleJacobian(double ds, double cosl,
42 double bfac);
43double gblMultipleScatteringError(double qbyp, double xbyx0);
44
46
50public:
51 GblHelixPrediction(double sArc, const Eigen::Vector2d& aPred,
52 const Eigen::Vector3d& tDir, const Eigen::Vector3d& uDir,
53 const Eigen::Vector3d& vDir, const Eigen::Vector3d& nDir,
54 const Eigen::Vector3d& aPos);
55 virtual ~GblHelixPrediction();
56 double getArcLength() const;
57 const Eigen::Vector2d& getMeasPred() const;
58 const Eigen::Vector3d& getPosition() const;
59 const Eigen::Vector3d& getDirection() const;
60 double getCosIncidence() const;
61 Eigen::Matrix<double, 2, 3> getCurvilinearDirs() const;
62
63private:
64 const double sarc;
65 const Eigen::Vector2d pred;
66 const Eigen::Vector3d tdir;
67 const Eigen::Vector3d udir;
68 const Eigen::Vector3d vdir;
69 const Eigen::Vector3d ndir;
70 const Eigen::Vector3d pos;
71 Eigen::Matrix3d global2meas;
72};
73
75
79public:
80 GblSimpleHelix(double aRinv, double aPhi0, double aDca, double aDzds,
81 double aZ0);
82 virtual ~GblSimpleHelix();
83 double getPhi(double aRadius) const;
84 double getArcLengthR(double aRadius) const;
85 double getArcLengthXY(double xPos, double yPos) const;
86 void moveToXY(double xPos, double yPos, double& newPhi0, double& newDca,
87 double& newZ0) const;
88 GblHelixPrediction getPrediction(const Eigen::Vector3d& refPos,
89 const Eigen::Vector3d& uDir, const Eigen::Vector3d& vDir) const;
90
91private:
92 const double rinv;
93 const double phi0;
94 const double dca;
95 const double dzds;
96 const double z0;
97 const double cosPhi0;
98 const double sinPhi0;
99 const double xRelCenter;
100 const double yRelCenter;
101};
102
104
108public:
109 GblDetectorLayer(const std::string aName, const unsigned int aLayer,
110 const int aDim, const double thickness, Eigen::Vector3d& aCenter,
111 Eigen::Vector2d& aResolution, Eigen::Vector2d& aPrecision,
112 Eigen::Matrix3d& measTrafo, Eigen::Matrix3d& alignTrafo);
113 virtual ~GblDetectorLayer();
114 void print() const;
115 unsigned int getLayerID() const;
116 double getRadiationLength() const;
117 Eigen::Vector2d getResolution() const;
118 Eigen::Vector2d getPrecision() const;
119 Eigen::Vector3d getCenter() const;
120 Eigen::Matrix3d getMeasSystemDirs() const;
121 Eigen::Matrix3d getAlignSystemDirs() const;
123 Eigen::Matrix<double, 3, 6> getRigidBodyDerGlobal(Eigen::Vector3d& position,
124 Eigen::Vector3d& direction) const;
125 Eigen::Matrix<double, 2, 6> getRigidBodyDerLocal(Eigen::Vector3d& position,
126 Eigen::Vector3d& direction) const;
127 Eigen::Matrix<double, 6, 6> getTrafoGlobalToLocal(Eigen::Vector3d& offset,
128 Eigen::Matrix3d& rotation) const;
129 Eigen::Matrix<double, 6, 6> getTrafoLocalToGlobal(Eigen::Vector3d& offset,
130 Eigen::Matrix3d& rotation) const;
131
132private:
133 std::string name;
134 unsigned int layer;
135 unsigned int measDim;
136 double xbyx0;
137 Eigen::Vector3d center;
138 Eigen::Vector2d resolution;
139 Eigen::Vector2d precision;
140 Eigen::Vector3d udir;
141 Eigen::Vector3d vdir;
142 Eigen::Vector3d ndir;
143 Eigen::Matrix3d global2meas;
144 Eigen::Matrix3d global2align;
145};
146
147}
148#endif /* SRC_EXAMPLEUTIL_H_ */
Detector layer.
Definition: exampleUtil.h:107
double xbyx0
normalized material thickness
Definition: exampleUtil.h:136
Eigen::Vector3d getCenter() const
Get center.
GblHelixPrediction intersectWithHelix(GblSimpleHelix hlx) const
Intersect with helix.
Eigen::Vector3d ndir
normal to measurement plane
Definition: exampleUtil.h:142
Eigen::Vector3d center
center
Definition: exampleUtil.h:137
double getRadiationLength() const
Get radiation length.
void print() const
Print GblDetectorLayer.
unsigned int measDim
measurement dimension (1 or 2)
Definition: exampleUtil.h:135
Eigen::Matrix< double, 2, 6 > getRigidBodyDerLocal(Eigen::Vector3d &position, Eigen::Vector3d &direction) const
Get rigid body derivatives in local (alignment) frame (rotated in measurement plane).
unsigned int getLayerID() const
Get layer ID.
Eigen::Matrix3d getMeasSystemDirs() const
Get directions of measurement system.
Eigen::Matrix< double, 6, 6 > getTrafoGlobalToLocal(Eigen::Vector3d &offset, Eigen::Matrix3d &rotation) const
Get transformation for rigid body derivatives from global to local (alignment) system.
Eigen::Matrix< double, 3, 6 > getRigidBodyDerGlobal(Eigen::Vector3d &position, Eigen::Vector3d &direction) const
Get rigid body derivatives in global frame.
Eigen::Matrix3d global2meas
transformation into measurement system
Definition: exampleUtil.h:143
unsigned int layer
layer ID
Definition: exampleUtil.h:134
GblDetectorLayer(const std::string aName, const unsigned int aLayer, const int aDim, const double thickness, Eigen::Vector3d &aCenter, Eigen::Vector2d &aResolution, Eigen::Vector2d &aPrecision, Eigen::Matrix3d &measTrafo, Eigen::Matrix3d &alignTrafo)
Create a detector layer.
Eigen::Matrix3d getAlignSystemDirs() const
Get directions of alignment system.
Eigen::Vector2d precision
measurements precision
Definition: exampleUtil.h:139
Eigen::Vector3d vdir
Definition: exampleUtil.h:141
Eigen::Vector2d getResolution() const
Get resolution.
Eigen::Vector3d udir
Definition: exampleUtil.h:140
Eigen::Matrix< double, 6, 6 > getTrafoLocalToGlobal(Eigen::Vector3d &offset, Eigen::Matrix3d &rotation) const
Get transformation for rigid body derivatives from local (alignment) to global system.
Eigen::Vector2d resolution
measurements resolution
Definition: exampleUtil.h:138
std::string name
name
Definition: exampleUtil.h:133
Eigen::Vector2d getPrecision() const
Get precision.
Eigen::Matrix3d global2align
transformation into (local) alignment system
Definition: exampleUtil.h:144
Prediction on helix.
Definition: exampleUtil.h:49
Eigen::Matrix< double, 2, 3 > getCurvilinearDirs() const
Get curvilinear directions (U,V)
const Eigen::Vector3d pos
position at prediction
Definition: exampleUtil.h:70
double getArcLength() const
Get arc-length.
const Eigen::Vector2d & getMeasPred() const
Get (measurement) prediction.
const double sarc
arc-length at prediction
Definition: exampleUtil.h:64
double getCosIncidence() const
Get cosine of incidence.
Eigen::Matrix3d global2meas
transformation into measurement system
Definition: exampleUtil.h:71
const Eigen::Vector3d & getPosition() const
Get position.
const Eigen::Vector3d vdir
measurement direction for v
Definition: exampleUtil.h:68
const Eigen::Vector2d pred
prediction for measurement (u,v)
Definition: exampleUtil.h:65
const Eigen::Vector3d udir
measurement direction for u
Definition: exampleUtil.h:67
const Eigen::Vector3d tdir
track direction at prediction
Definition: exampleUtil.h:66
GblHelixPrediction(double sArc, const Eigen::Vector2d &aPred, const Eigen::Vector3d &tDir, const Eigen::Vector3d &uDir, const Eigen::Vector3d &vDir, const Eigen::Vector3d &nDir, const Eigen::Vector3d &aPos)
Create helix prediction.
const Eigen::Vector3d & getDirection() const
Get position.
const Eigen::Vector3d ndir
normal to measurement plane
Definition: exampleUtil.h:69
Simple helix.
Definition: exampleUtil.h:78
double getArcLengthR(double aRadius) const
Get (2D) arc length for given radius (to ref. point)
void moveToXY(double xPos, double yPos, double &newPhi0, double &newDca, double &newZ0) const
Move to new reference point (X,y)
virtual ~GblSimpleHelix()
GblHelixPrediction getPrediction(const Eigen::Vector3d &refPos, const Eigen::Vector3d &uDir, const Eigen::Vector3d &vDir) const
Get prediction.
GblSimpleHelix(double aRinv, double aPhi0, double aDca, double aDzds, double aZ0)
Create simple helix.
const double rinv
curvature (1/Radius)
Definition: exampleUtil.h:92
double getPhi(double aRadius) const
Get phi (of point on circle) for given radius (to ref. point)
const double sinPhi0
sin(phi0)
Definition: exampleUtil.h:98
double getArcLengthXY(double xPos, double yPos) const
Get (2D) arc length for given point.
const double dca
distance to origin in XY plane at PCA
Definition: exampleUtil.h:94
const double z0
offset in ZS plane
Definition: exampleUtil.h:96
const double cosPhi0
cos(phi0)
Definition: exampleUtil.h:97
const double xRelCenter
X position of circle center / R.
Definition: exampleUtil.h:99
const double dzds
slope in ZS plane (dZ/dS)
Definition: exampleUtil.h:95
const double phi0
azimuth at PCA (point of closest approach to origin in XY plane, defines arc-length S=0)
Definition: exampleUtil.h:93
const double yRelCenter
Y position of circle center / R.
Definition: exampleUtil.h:100
Namespace for the general broken lines package.
double unrm()
unit normal distribution, Box-Muller method, polar form
Definition: exampleUtil.cpp:69
double gblMultipleScatteringError(double qbyp, double xbyx0)
Multiple scattering error.
Definition: exampleUtil.cpp:44
double unif()
uniform distribution [0..1]
Definition: exampleUtil.cpp:94
Matrix5d gblSimpleJacobian(double ds, double cosl, double bfac)
Simple jacobian.
Definition: exampleUtil.cpp:58