ATLAS Offline Software
Loading...
Searching...
No Matches
DigitizationModule.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
6// DigitizationModule.h, ATLAS Detector software
8
9#ifndef TRKDIGEVENT_PLANARDIGITIZATIONMODULE_H
10#define TRKDIGEVENT_PLANARDIGITIZATIONMODULE_H
11
12// GeoPrimitives
14// Trk
17// STL
18#include <memory>
19#include <vector>
20
21namespace Trk {
22
23 class Surface;
24
49
51 public :
53 DigitizationModule(std::shared_ptr<const Segmentation> moduleSegmentation,
54 double halfThickness,
56 double lorentzAngle);
57
60
62 const std::vector< std::shared_ptr<const Surface> > segmentationSurfaces(const DigitizationCell& entryCids, const DigitizationCell& exitCids) const;
63
65 const DigitizationCell cell(const Amg::Vector2D& position) const;
66
68 double halfThickness() const;
69
71 int readoutDirection() const;
72
74 double lorentzAngle() const;
75
77 const Segmentation& segmentation() const;
78
80 const std::vector< std::shared_ptr<const Surface> > stepSurfaces(const Amg::Vector3D& start, const Amg::Vector3D& end) const;
81
83 const DigitizationStep digitizationStep(const Amg::Vector3D& start, const Amg::Vector3D& end) const;
84
86 const std::vector< std::shared_ptr<const Surface> >& boundarySurfaces() const;
87
89 const std::vector< std::shared_ptr<const Surface> >& segmentationSurfacesX() const;
90
92 const std::vector< std::shared_ptr<const Surface> >& segmentationSurfacesY() const;
93
94 private:
95
100
101 std::shared_ptr<const Segmentation> m_segmentation;
102 std::vector< std::shared_ptr<const Surface> > m_boundarySurfaces;
103 std::vector< std::shared_ptr<const Surface> > m_segmentationSurfacesX;
104 std::vector< std::shared_ptr<const Surface> > m_segmentationSurfacesY;
105
106 };
107
108
110 { return m_halfThickness; }
111
114
116 { return m_lorentzAngle; }
117
119 { return (*(m_segmentation.get())); }
120
121 inline const std::vector< std::shared_ptr<const Surface> >& DigitizationModule::boundarySurfaces() const
122 { return m_boundarySurfaces; }
123
124 inline const std::vector< std::shared_ptr<const Surface> >& DigitizationModule::segmentationSurfacesX() const
125 { return m_segmentationSurfacesX; }
126
127 inline const std::vector< std::shared_ptr<const Surface> >& DigitizationModule::segmentationSurfacesY() const
128 { return m_segmentationSurfacesY; }
129
131 { return m_segmentation->digitizationStep(start,end,m_halfThickness,m_readoutDirection,m_lorentzAngle); }
132
133}
134
135#endif
const Segmentation & segmentation() const
return the segmenation
const DigitizationCell cell(const Amg::Vector2D &position) const
Get the digitization cell fropm a position.
const std::vector< std::shared_ptr< const Surface > > stepSurfaces(const Amg::Vector3D &start, const Amg::Vector3D &end) const
return the test surfaces between these points
const std::vector< std::shared_ptr< const Surface > > & boundarySurfaces() const
return the bounding surfaces at top and bottom
double lorentzAngle() const
return the lorentz Angle
virtual ~DigitizationModule()
Virtual Destructor.
const std::vector< std::shared_ptr< const Surface > > & segmentationSurfacesY() const
return all surfaces in Y - excluding the boundaries
int readoutDirection() const
return the readout direction
double m_lorentzAngle
the lorentz angle
DigitizationModule(std::shared_ptr< const Segmentation > moduleSegmentation, double halfThickness, int readoutDirection, double lorentzAngle)
Constructor from a Segmentation descriptor.
std::vector< std::shared_ptr< const Surface > > m_boundarySurfaces
boundary surfaces, they are ordered: readout, opposite, x boundaries, y boundaries
std::vector< std::shared_ptr< const Surface > > m_segmentationSurfacesX
segmentation surfaces in X - without boundaries
const DigitizationStep digitizationStep(const Amg::Vector3D &start, const Amg::Vector3D &end) const
Fill the associated digitsation cell from this start and end position, correct for lorentz effect if ...
std::shared_ptr< const Segmentation > m_segmentation
segmentation descriptor
std::vector< std::shared_ptr< const Surface > > m_segmentationSurfacesY
segmentation surfaces in Y - without boundaries
double m_tanLorentzAngle
and the tangent of it
int m_readoutDirection
defines if the readout is along (+1) / (-1) wrt the z axis
const std::vector< std::shared_ptr< const Surface > > & segmentationSurfacesX() const
return all surfaces in X - excluding the boundaries
double halfThickness() const
module thickness
const std::vector< std::shared_ptr< const Surface > > segmentationSurfaces(const DigitizationCell &entryCids, const DigitizationCell &exitCids) const
Return the internal test segmentation surfaces to test between entry and exit given by their cell id'...
Segementation class for generic pixel, strixels and strip segmentations on a rectangle shape.
Abstract Base Class for tracking surfaces.
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the ATLAS eigen extensions are properly loaded.
std::pair< size_t, size_t > DigitizationCell