HerdSoftware  0.4.0
DistributionFiberTool.h
Go to the documentation of this file.
1 /*
2  * DistributionFiberTool.h
3  *
4  * This tool calculates the fraction of the total path length
5  * of a track in the core of each fibre that was hit along with
6  * the position of the fibre.
7  *
8  * Created on 03 Mar 2020
9  * Author: Valerio Formato (based on code by Junjing Wang)
10  */
11 
12 #ifndef HERD_DISTRIBUTIONFIBERTOOL_H_
13 #define HERD_DISTRIBUTIONFIBERTOOL_H_
14 
15 // HerdSoftware headers
19 
20 // C++ headers
21 #include <cmath>
22 #include <vector>
23 
24 // this in c++17 will become
25 // namespace Herd::FitDigitizationTools {
27 
28 namespace MCFT {
29 
30 class Vec2 : public Vec3D {
31 public:
32  Vec2() : Vec3D(std::numeric_limits<float>::max(), std::numeric_limits<float>::max(), 0) {}
33  Vec2(float u, float v) : Vec3D(u, v, 0) {}
34 
35  Vec2(const Vec3D &vec) : Vec2(vec[RefFrame::Coo::X], vec[RefFrame::Coo::Y]) {}
36 
37  // float u() { return (*this)[RefFrame::Coo::X]; }
38  // float v() { return (*this)[RefFrame::Coo::Y]; }
39 };
40 
41 double distanceToSquared(const Vec2 &v, const Vec2 &p);
42 double distanceTo(const Vec2 &v, const Vec2 &p);
43 double minDistanceFromLineSegmentToPoint(const Vec2 &v, const Vec2 &w, const Vec2 &p);
44 double minDistanceFromLineToPoint(const Vec2 &v, const Vec2 &w, const Vec2 &p);
45 
46 inline double getXOnPath(const Vec2 &entry, const Vec2 &exit, double z) {
47  return entry[RefFrame::Coo::X] + (exit[RefFrame::Coo::X] - entry[RefFrame::Coo::X]) /
48  (exit[RefFrame::Coo::Y] - entry[RefFrame::Coo::Y]) *
49  (z - entry[RefFrame::Coo::Y]);
50 }
51 
52 inline double getZOnPath(const Vec2 &entry, const Vec2 &exit, double x) {
53  return entry[RefFrame::Coo::Y] + (exit[RefFrame::Coo::Y] - entry[RefFrame::Coo::Y]) /
54  (exit[RefFrame::Coo::X] - entry[RefFrame::Coo::X]) *
55  (x - entry[RefFrame::Coo::X]);
56 }
57 
58 } // namespace MCFT
59 
61 public:
63  ~DistributionFiberTool() = default;
64 
65  [[nodiscard]] std::vector<std::pair<Point, double>>
66  effectivePathFracInCores(const Point &enPoint, const Point &exPoint, const FitGeoParams &geoParams) const;
67 
68  void setMatWidth(float matWidth);
69 
70 private:
81  [[nodiscard]] inline double getFiberX(unsigned int iLayer, int iFiber) const {
82  return m_fibrePitch * (iFiber + 0.5 * (iLayer % 2));
83  }
84  [[nodiscard]] inline double getFiberZ(unsigned int iLayer) const {
85  return (iLayer - 0.5 * (m_nlayers - 1)) * m_deltaZ;
86  }
87 
88  [[nodiscard]] inline double firstFiber(unsigned int iLayer) const {
89  return ((iLayer % 2) == 0) ? m_firstFiber0 : m_firstFiber1;
90  }
91 
92  [[nodiscard]] inline double lastFiber(unsigned int iLayer) const {
93  return ((iLayer % 2) == 0) ? -m_firstFiber0 : m_lastFiber1;
94  }
95 
96  void initNFibers(unsigned int nFibers);
97 
102  [[nodiscard]] std::pair<int, int> getAdjacentFiberIds(double x, double dx_over_dz, unsigned int iLayer) const;
103 
104  // const double m_fibreDiameter = 0.025; // Diameter of the fiber in the fiber mats
105  const double m_fibreCoreRadius = 0.011; // Radius of the fiber core
106  const double m_fibrePitch = 0.0275; // Distance between two neighbour fibre centers in x-direction
107  const double m_deltaZ = 0.021; // Pitch in z-direction
108  // junjing 0809
109  int m_nlayers = 6; // Number of layers
110 
111  // ()()()
112  // ()()()()
113  // ()()()
114  // ()()()()
115  // ()()()
116  // ()()()()
117 
118  const double m_crossTalkProb = 0.193; // Probability of cross talk between fibers
119  const double m_CTmodelTouching = 0.163; // Fraction of cross talk going to the each of the 4 neighbors touching fibers
120  const double m_CTmodelSide = 0.147; // Fraction of cross talk going to each of the 2 neighbors on the sides
121  const double m_CTmodel2layers = 0.028; // Fraction of cross talk going to each of the 2 neighbors on the same column
122  //*/
123 
124  double m_minZ;
125  unsigned int m_nFibers = 355;
129 };
130 } // namespace Herd::FitDigitizationTools
131 
132 #endif
Herd::FitDigitizationTools::DistributionFiberTool::m_minZ
double m_minZ
Definition: DistributionFiberTool.h:124
Herd::RefFrame::Coo::Y
@ Y
FitGeoParams.h
Point.h
Herd::Vec3D
A class describing a vector in 3D space.
Definition: Vec3D.h:33
Herd::RefFrame::Coo::X
@ X
Herd::FitDigitizationTools::DistributionFiberTool::m_CTmodelSide
const double m_CTmodelSide
Definition: DistributionFiberTool.h:120
Herd::FitDigitizationTools::MCFT::getZOnPath
double getZOnPath(const Vec2 &entry, const Vec2 &exit, double x)
Definition: DistributionFiberTool.h:52
Herd::FitDigitizationTools::DistributionFiberTool::DistributionFiberTool
DistributionFiberTool()
Definition: DistributionFiberTool.cpp:28
Herd::FitDigitizationTools::MCFT::distanceTo
double distanceTo(const Vec2 &v, const Vec2 &p)
Definition: DistributionFiberTool.cpp:259
Herd::FitDigitizationTools::DistributionFiberTool::lastFiber
double lastFiber(unsigned int iLayer) const
Definition: DistributionFiberTool.h:92
Herd::FitDigitizationTools::MCFT::Vec2::Vec2
Vec2(const Vec3D &vec)
Definition: DistributionFiberTool.h:35
Herd::FitDigitizationTools::DistributionFiberTool::m_CTmodelTouching
const double m_CTmodelTouching
Definition: DistributionFiberTool.h:119
Herd::FitDigitizationTools::DistributionFiberTool::m_nFibers
unsigned int m_nFibers
Definition: DistributionFiberTool.h:125
Herd::FitDigitizationTools
Definition: AttenuationTool.h:26
Herd::FitDigitizationTools::DistributionFiberTool
Definition: DistributionFiberTool.h:60
Herd::FitDigitizationTools::DistributionFiberTool::setMatWidth
void setMatWidth(float matWidth)
Definition: DistributionFiberTool.cpp:35
Herd::FitDigitizationTools::DistributionFiberTool::getFiberZ
double getFiberZ(unsigned int iLayer) const
Definition: DistributionFiberTool.h:84
Herd::FitDigitizationTools::MCFT::minDistanceFromLineToPoint
double minDistanceFromLineToPoint(const Vec2 &v, const Vec2 &w, const Vec2 &p)
Definition: DistributionFiberTool.cpp:279
Herd::FitDigitizationTools::DistributionFiberTool::getFiberX
double getFiberX(unsigned int iLayer, int iFiber) const
Definition: DistributionFiberTool.h:81
Herd::FitDigitizationTools::MCFT::Vec2::Vec2
Vec2(float u, float v)
Definition: DistributionFiberTool.h:33
Herd::FitDigitizationTools::DistributionFiberTool::getAdjacentFiberIds
std::pair< int, int > getAdjacentFiberIds(double x, double dx_over_dz, unsigned int iLayer) const
Definition: DistributionFiberTool.cpp:41
Herd::FitDigitizationTools::MCFT::minDistanceFromLineSegmentToPoint
double minDistanceFromLineSegmentToPoint(const Vec2 &v, const Vec2 &w, const Vec2 &p)
Definition: DistributionFiberTool.cpp:261
Herd::FitDigitizationTools::DistributionFiberTool::m_lastFiber1
int m_lastFiber1
Definition: DistributionFiberTool.h:128
Herd::FitDigitizationTools::DistributionFiberTool::firstFiber
double firstFiber(unsigned int iLayer) const
Definition: DistributionFiberTool.h:88
Benchmark.h
Herd::FitDigitizationTools::DistributionFiberTool::m_firstFiber1
int m_firstFiber1
Definition: DistributionFiberTool.h:127
Herd::FitDigitizationTools::DistributionFiberTool::m_fibreCoreRadius
const double m_fibreCoreRadius
Definition: DistributionFiberTool.h:105
Herd::FitDigitizationTools::DistributionFiberTool::m_deltaZ
const double m_deltaZ
Definition: DistributionFiberTool.h:107
Herd::FitGeoParams
Data structure for single silicon layer geometry parameters.
Definition: FitGeoParams.h:66
Herd::FitDigitizationTools::DistributionFiberTool::m_fibrePitch
const double m_fibrePitch
Definition: DistributionFiberTool.h:106
Herd::FitDigitizationTools::MCFT::getXOnPath
double getXOnPath(const Vec2 &entry, const Vec2 &exit, double z)
Definition: DistributionFiberTool.h:46
Herd::FitDigitizationTools::MCFT::distanceToSquared
double distanceToSquared(const Vec2 &v, const Vec2 &p)
Definition: DistributionFiberTool.cpp:254
Herd::FitDigitizationTools::MCFT::Vec2::Vec2
Vec2()
Definition: DistributionFiberTool.h:32
Herd::RefFrame::Coo
Coo
Aliases for the three space coordinates.
Definition: RefFrame.h:24
Herd::FitDigitizationTools::DistributionFiberTool::~DistributionFiberTool
~DistributionFiberTool()=default
Herd::FitDigitizationTools::DistributionFiberTool::m_crossTalkProb
const double m_crossTalkProb
Definition: DistributionFiberTool.h:118
Herd::FitDigitizationTools::DistributionFiberTool::m_nlayers
int m_nlayers
Definition: DistributionFiberTool.h:109
Herd::FitDigitizationTools::MCFT::Vec2
Definition: DistributionFiberTool.h:30
Herd::FitDigitizationTools::DistributionFiberTool::m_CTmodel2layers
const double m_CTmodel2layers
Definition: DistributionFiberTool.h:121
Herd::FitDigitizationTools::DistributionFiberTool::initNFibers
void initNFibers(unsigned int nFibers)
Definition: DistributionFiberTool.cpp:74
Herd::FitDigitizationTools::DistributionFiberTool::m_firstFiber0
int m_firstFiber0
Definition: DistributionFiberTool.h:126
Herd::FitDigitizationTools::DistributionFiberTool::effectivePathFracInCores
std::vector< std::pair< Point, double > > effectivePathFracInCores(const Point &enPoint, const Point &exPoint, const FitGeoParams &geoParams) const
Definition: DistributionFiberTool.cpp:92