LArSoft  v10_06_00
Liquid Argon Software toolkit - https://larsoft.org/
LArGeometryHelper.h
Go to the documentation of this file.
1 
8 #ifndef LAR_GEOMETRY_HELPER_H
9 #define LAR_GEOMETRY_HELPER_H 1
10 
11 #include "Objects/Cluster.h"
12 #include "Pandora/PandoraEnumeratedTypes.h"
13 #include "Pandora/StatusCodes.h"
14 
15 #include <unordered_map>
16 
17 namespace pandora
18 {
19 class CartesianVector;
20 class Pandora;
21 } // namespace pandora
22 
23 namespace lar_content
24 {
25 
26 class TwoDSlidingFitResult;
27 
28 //------------------------------------------------------------------------------------------------------------------------------------------
29 
34 {
35 public:
36  typedef std::set<unsigned int> UIntSet;
37 
42  {
43  std::pair<float, float> m_xBoundaries = {std::numeric_limits<float>::max(), std::numeric_limits<float>::lowest()};
44  std::pair<float, float> m_yBoundaries = {std::numeric_limits<float>::max(), std::numeric_limits<float>::lowest()};
45  std::pair<float, float> m_zBoundaries = {std::numeric_limits<float>::max(), std::numeric_limits<float>::lowest()};
46  };
47 
57  static float MergeTwoPositions(const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2,
58  const float position1, const float position2);
59 
69  static pandora::CartesianVector MergeTwoDirections(const pandora::Pandora &pandora, const pandora::HitType view1,
70  const pandora::HitType view2, const pandora::CartesianVector &direction1, const pandora::CartesianVector &direction2);
71 
83  static void MergeTwoPositions(const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2,
84  const pandora::CartesianVector &position1, const pandora::CartesianVector &position2, pandora::CartesianVector &position3, float &chiSquared);
85 
99  static void MergeTwoPositions(const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2,
100  const pandora::CartesianVector &position1, const pandora::CartesianVector &position2, pandora::CartesianVector &outputU,
101  pandora::CartesianVector &outputV, pandora::CartesianVector &outputW, float &chiSquared);
102 
118  static void MergeThreePositions(const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2,
119  const pandora::HitType view3, const pandora::CartesianVector &position1, const pandora::CartesianVector &position2,
120  const pandora::CartesianVector &position3, pandora::CartesianVector &outputU, pandora::CartesianVector &outputV,
121  pandora::CartesianVector &outputW, float &chiSquared);
122 
135  static void MergeThreePositions(const pandora::Pandora &pandora, const pandora::CartesianVector &positionU,
136  const pandora::CartesianVector &positionV, const pandora::CartesianVector &positionW, pandora::CartesianVector &outputU,
137  pandora::CartesianVector &outputV, pandora::CartesianVector &outputW, float &chiSquared);
138 
150  static void MergeTwoPositions3D(const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2,
151  const pandora::CartesianVector &position1, const pandora::CartesianVector &position2, pandora::CartesianVector &position3D, float &chiSquared);
152 
166  static void MergeThreePositions3D(const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2,
167  const pandora::HitType view3, const pandora::CartesianVector &position1, const pandora::CartesianVector &position2,
168  const pandora::CartesianVector &position3, pandora::CartesianVector &position3D, float &chiSquared);
169 
177  static pandora::CartesianVector ProjectPosition(
178  const pandora::Pandora &pandora, const pandora::CartesianVector &position3D, const pandora::HitType view);
179 
187  static pandora::CartesianVector ProjectDirection(
188  const pandora::Pandora &pandora, const pandora::CartesianVector &direction3D, const pandora::HitType view);
189 
196  static float GetWireZPitch(const pandora::Pandora &pandora, const float maxWirePitchDiscrepancy = 0.01);
197 
205  static float GetWirePitch(const pandora::Pandora &pandora, const pandora::HitType view, const float maxWirePitchDiscrepancy = 0.01);
206 
215  static float GetWirePitchRatio(const pandora::Pandora &pandora, const pandora::HitType view);
216 
223  static pandora::CartesianVector GetWireAxis(const pandora::Pandora &pandora, const pandora::HitType view);
224 
235  static bool IsInGap(const pandora::Pandora &pandora, const pandora::CartesianVector &testPoint2D, const pandora::HitType hitType,
236  const float gapTolerance = 0.f);
237 
248  static bool IsInGap3D(const pandora::Pandora &pandora, const pandora::CartesianVector &testPoint3D, const pandora::HitType hitType,
249  const float gapTolerance = 0.f);
250 
261  static bool IsXSamplingPointInGap(
262  const pandora::Pandora &pandora, const float xSample, const TwoDSlidingFitResult &slidingFitResult, const float gapTolerance = 0.f);
263 
272  static float CalculateGapDeltaZ(const pandora::Pandora &pandora, const float minZ, const float maxZ, const pandora::HitType hitType);
273 
280  static float GetSigmaUVW(const pandora::Pandora &pandora, const float maxSigmaDiscrepancy = 0.01);
281 
289  static void GetCommonDaughterVolumes(const pandora::Cluster *const pCluster1, const pandora::Cluster *const pCluster2, UIntSet &intersect);
290 
296  static DetectorBoundaries GetDetectorBoundaries(const pandora::Pandora &pandora);
297 
306  static bool IsInDetector(const DetectorBoundaries &detectorBoundaries, const pandora::CartesianVector &position);
307 };
308 
309 //------------------------------------------------------------------------------------------------------------------------------------------
310 
311 inline float LArGeometryHelper::GetWireZPitch(const pandora::Pandora &pandora, const float maxWirePitchWDiscrepancy)
312 {
313  return LArGeometryHelper::GetWirePitch(pandora, pandora::TPC_VIEW_W, maxWirePitchWDiscrepancy);
314 }
315 
316 } // namespace lar_content
317 
318 #endif // #ifndef LAR_GEOMETRY_HELPER_H
LArGeometryHelper class.
std::set< unsigned int > UIntSet
TFile f
Definition: plotHisto.C:6
Struct to hold detector boundaries.
HitType
Definition: HitType.h:12