Pandora
Pandora source code navigator
Loading...
Searching...
No Matches
DetectorGap.h
Go to the documentation of this file.
1
8#ifndef PANDORA_DETECTOR_GAP_H
9#define PANDORA_DETECTOR_GAP_H 1
10
12
13namespace pandora
14{
15
16typedef std::vector<CartesianVector> VertexPointList;
17template<typename T, typename S> class PandoraObjectFactory;
18
19//------------------------------------------------------------------------------------------------------------------------------------------
20
25{
26public:
30 virtual ~DetectorGap();
31
41 virtual bool IsInGap(const CartesianVector &positionVector, const HitType hitType, const float gapTolerance = 0.f) const = 0;
42};
43
44//------------------------------------------------------------------------------------------------------------------------------------------
45
49class LineGap : public DetectorGap
50{
51public:
52 bool IsInGap(const CartesianVector &positionVector, const HitType hitType, const float gapTolerance) const;
53
60
66 float GetLineStartX() const;
67
73 float GetLineEndX() const;
74
80 float GetLineStartZ() const;
81
87 float GetLineEndZ() const;
88
89private:
96
98 const float m_lineStartX;
99 const float m_lineEndX;
100 const float m_lineStartZ;
101 const float m_lineEndZ;
102
103 friend class PandoraObjectFactory<object_creation::Geometry::LineGap::Parameters, object_creation::Geometry::LineGap::Object>;
104};
105
106//------------------------------------------------------------------------------------------------------------------------------------------
107
111class BoxGap : public DetectorGap
112{
113public:
114 bool IsInGap(const CartesianVector &positionVector, const HitType hitType, const float gapTolerance) const;
115
121 const CartesianVector &GetVertex() const;
122
128 const CartesianVector &GetSide1() const;
129
135 const CartesianVector &GetSide2() const;
136
142 const CartesianVector &GetSide3() const;
143
144private:
151
156
157 friend class PandoraObjectFactory<object_creation::Geometry::BoxGap::Parameters, object_creation::Geometry::BoxGap::Object>;
158};
159
160//------------------------------------------------------------------------------------------------------------------------------------------
161
166{
167public:
168 bool IsInGap(const CartesianVector &positionVector, const HitType hitType, const float gapTolerance) const;
169
175 float GetMinZCoordinate() const;
176
182 float GetMaxZCoordinate() const;
183
189 float GetInnerRCoordinate() const;
190
196 float GetInnerPhiCoordinate() const;
197
203 unsigned int GetInnerSymmetryOrder() const;
204
210 float GetOuterRCoordinate() const;
211
217 float GetOuterPhiCoordinate() const;
218
224 unsigned int GetOuterSymmetryOrder() const;
225
226private:
233
243 void GetPolygonVertices(const float rCoordinate, const float zCoordinate, const float phiCoordinate,
244 const unsigned int symmetryOrder, VertexPointList &vertexPointList) const;
245
255 bool IsIn2DPolygon(const CartesianVector &point, const VertexPointList &vertexPointList, const unsigned int symmetryOrder) const;
256
257 const float m_minZCoordinate;
258 const float m_maxZCoordinate;
259 const float m_innerRCoordinate;
261 const unsigned int m_innerSymmetryOrder;
262 const float m_outerRCoordinate;
264 const unsigned int m_outerSymmetryOrder;
265
268
269 friend class PandoraObjectFactory<object_creation::Geometry::ConcentricGap::Parameters, object_creation::Geometry::ConcentricGap::Object>;
270};
271
272//------------------------------------------------------------------------------------------------------------------------------------------
273//------------------------------------------------------------------------------------------------------------------------------------------
274
275inline LineGapType LineGap::GetLineGapType() const
276{
277 return m_lineGapType;
278}
279
280//------------------------------------------------------------------------------------------------------------------------------------------
281
282inline float LineGap::GetLineStartX() const
283{
284 return m_lineStartX;
285}
286
287//------------------------------------------------------------------------------------------------------------------------------------------
288
289inline float LineGap::GetLineEndX() const
290{
291 return m_lineEndX;
292}
293
294//------------------------------------------------------------------------------------------------------------------------------------------
295
296inline float LineGap::GetLineStartZ() const
297{
298 return m_lineStartZ;
299}
300
301//------------------------------------------------------------------------------------------------------------------------------------------
302
303inline float LineGap::GetLineEndZ() const
304{
305 return m_lineEndZ;
306}
307
308//------------------------------------------------------------------------------------------------------------------------------------------
309//------------------------------------------------------------------------------------------------------------------------------------------
310
311inline const CartesianVector &BoxGap::GetVertex() const
312{
313 return m_vertex;
314}
315
316//------------------------------------------------------------------------------------------------------------------------------------------
317
318inline const CartesianVector &BoxGap::GetSide1() const
319{
320 return m_side1;
321}
322
323//------------------------------------------------------------------------------------------------------------------------------------------
324
325inline const CartesianVector &BoxGap::GetSide2() const
326{
327 return m_side2;
328}
329
330//------------------------------------------------------------------------------------------------------------------------------------------
331
332inline const CartesianVector &BoxGap::GetSide3() const
333{
334 return m_side3;
335}
336
337//------------------------------------------------------------------------------------------------------------------------------------------
338//------------------------------------------------------------------------------------------------------------------------------------------
339
340inline float ConcentricGap::GetMinZCoordinate() const
341{
342 return m_minZCoordinate;
343}
344
345//------------------------------------------------------------------------------------------------------------------------------------------
346
347inline float ConcentricGap::GetMaxZCoordinate() const
348{
349 return m_maxZCoordinate;
350}
351
352//------------------------------------------------------------------------------------------------------------------------------------------
353
354inline float ConcentricGap::GetInnerRCoordinate() const
355{
356 return m_innerRCoordinate;
357}
358
359//------------------------------------------------------------------------------------------------------------------------------------------
360
361inline float ConcentricGap::GetInnerPhiCoordinate() const
362{
363 return m_innerPhiCoordinate;
364}
365
366//------------------------------------------------------------------------------------------------------------------------------------------
367
368inline unsigned int ConcentricGap::GetInnerSymmetryOrder() const
369{
370 return m_innerSymmetryOrder;
371}
372
373//------------------------------------------------------------------------------------------------------------------------------------------
374
375inline float ConcentricGap::GetOuterRCoordinate() const
376{
377 return m_outerRCoordinate;
378}
379
380//------------------------------------------------------------------------------------------------------------------------------------------
381
382inline float ConcentricGap::GetOuterPhiCoordinate() const
383{
384 return m_outerPhiCoordinate;
385}
386
387//------------------------------------------------------------------------------------------------------------------------------------------
388
389inline unsigned int ConcentricGap::GetOuterSymmetryOrder() const
390{
391 return m_outerSymmetryOrder;
392}
393
394} // namespace pandora
395
396#endif // #ifndef PANDORA_DETECTOR_GAP_H
Header file for pandora object creation classes.
BoxGap class, associated with all 3D hit types.
const CartesianVector m_vertex
Cartesian coordinates of a gap vertex, units mm.
const CartesianVector m_side2
Cartesian vector describing second side meeting vertex, units mm.
const CartesianVector m_side3
Cartesian vector describing third side meeting vertex, units mm.
const CartesianVector m_side1
Cartesian vector describing first side meeting vertex, units mm.
CartesianVector class.
ConcentricGap class, associated with all 3D hit types.
const float m_outerPhiCoordinate
Outer cylindrical polar phi coordinate (angle wrt cartesian x axis)
VertexPointList m_outerVertexPointList
The vertex points of the outer polygon.
const float m_innerRCoordinate
Inner cylindrical polar r coordinate, origin interaction point, units mm.
VertexPointList m_innerVertexPointList
The vertex points of the inner polygon.
const float m_maxZCoordinate
Max cylindrical polar z coordinate, origin interaction point, units mm.
const unsigned int m_outerSymmetryOrder
Order of symmetry of the outermost edge of gap.
const float m_outerRCoordinate
Outer cylindrical polar r coordinate, origin interaction point, units mm.
const float m_innerPhiCoordinate
Inner cylindrical polar phi coordinate (angle wrt cartesian x axis)
const float m_minZCoordinate
Min cylindrical polar z coordinate, origin interaction point, units mm.
const unsigned int m_innerSymmetryOrder
Order of symmetry of the innermost edge of gap.
DetectorGap class.
Definition DetectorGap.h:25
virtual ~DetectorGap()
Destructor.
virtual bool IsInGap(const CartesianVector &positionVector, const HitType hitType, const float gapTolerance=0.f) const =0
Whether a specified position lies within the gap.
LineGap class, associated only with 2D TPC hit types and applied only to the z coordinate when sampli...
Definition DetectorGap.h:50
bool IsInGap(const CartesianVector &positionVector, const HitType hitType, const float gapTolerance) const
Whether a specified position lies within the gap.
float GetLineEndZ() const
Get the line end z coordinate.
const float m_lineStartZ
The line z start coordinate, units mm.
const float m_lineStartX
The line x start coordinate, units mm.
Definition DetectorGap.h:98
const LineGapType m_lineGapType
The type of line gap, e.g. TPC wire-type gap (u, v, w), or drift-type gap.
Definition DetectorGap.h:97
LineGapType GetLineGapType() const
Get the line gap type.
const float m_lineEndX
The line x end coordinate, units mm.
Definition DetectorGap.h:99
float GetLineStartX() const
Get the line start x coordinate.
float GetLineStartZ() const
Get the line start z coordinate.
const float m_lineEndZ
The line z end coordinate, units mm.
float GetLineEndX() const
Get the line end x coordinate.
PandoraObjectFactory class.
HitType
Calorimeter hit type enum.
std::vector< CartesianVector > VertexPointList
Definition DetectorGap.h:16
LineGapType
Line gap type.