Pandora
Pandora source code navigator
Loading...
Searching...
No Matches
LArPointingCluster.cc
Go to the documentation of this file.
1
11
12using namespace pandora;
13
14namespace lar_content
15{
16
17LArPointingCluster::LArPointingCluster(const Cluster *const pCluster, const unsigned int fitHalfLayerWindow, const float fitLayerPitch)
18{
19 // TODO remove default layer fit window and z pitch values
21 {
22 const ThreeDSlidingFitResult slidingFitResult(pCluster, fitHalfLayerWindow, fitLayerPitch);
23 this->BuildPointingCluster(slidingFitResult);
24 }
25 else
26 {
27 const TwoDSlidingFitResult slidingFitResult(pCluster, fitHalfLayerWindow, fitLayerPitch);
28 this->BuildPointingCluster(slidingFitResult);
29 }
30}
31
32//------------------------------------------------------------------------------------------------------------------------------------------
33
35{
36 this->BuildPointingCluster(slidingFitResult);
37}
38
39//------------------------------------------------------------------------------------------------------------------------------------------
40
42{
43 this->BuildPointingCluster(slidingFitResult);
44}
45
46//------------------------------------------------------------------------------------------------------------------------------------------
47
49{
50 const HitType hitType(LArClusterHelper::GetClusterHitType(slidingFitResult.GetCluster()));
51
52 if (!((TPC_VIEW_U == hitType) || (TPC_VIEW_V == hitType) || (TPC_VIEW_W == hitType)))
53 throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
54
55 if (slidingFitResult.GetMinLayer() >= slidingFitResult.GetMaxLayer())
56 throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
57
58 const bool isInner((slidingFitResult.GetGlobalMinLayerPosition().GetZ() < slidingFitResult.GetGlobalMaxLayerPosition().GetZ()));
59
60 m_pCluster = slidingFitResult.GetCluster();
61
62 const Vertex minVertex(m_pCluster, slidingFitResult.GetGlobalMinLayerPosition(), slidingFitResult.GetGlobalMinLayerDirection(),
63 slidingFitResult.GetMinLayerRms(), isInner);
64 const Vertex maxVertex(m_pCluster, slidingFitResult.GetGlobalMaxLayerPosition(), slidingFitResult.GetGlobalMaxLayerDirection() * -1.f,
65 slidingFitResult.GetMaxLayerRms(), !isInner);
66
67 m_innerVertex = (isInner ? minVertex : maxVertex);
68 m_outerVertex = (isInner ? maxVertex : minVertex);
69}
70
71//------------------------------------------------------------------------------------------------------------------------------------------
72
74{
75 if (TPC_3D != LArClusterHelper::GetClusterHitType(slidingFitResult.GetCluster()))
76 throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
77
78 if (slidingFitResult.GetMinLayer() >= slidingFitResult.GetMaxLayer())
79 throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
80
81 const bool isInner((slidingFitResult.GetGlobalMinLayerPosition().GetZ() < slidingFitResult.GetGlobalMaxLayerPosition().GetZ()) &&
82 (slidingFitResult.GetMinLayer() < slidingFitResult.GetMaxLayer()));
83
84 m_pCluster = slidingFitResult.GetCluster();
85
86 const Vertex minVertex(m_pCluster, slidingFitResult.GetGlobalMinLayerPosition(), slidingFitResult.GetGlobalMinLayerDirection(),
87 slidingFitResult.GetMinLayerRms(), isInner);
88 const Vertex maxVertex(m_pCluster, slidingFitResult.GetGlobalMaxLayerPosition(), slidingFitResult.GetGlobalMaxLayerDirection() * -1.f,
89 slidingFitResult.GetMaxLayerRms(), !isInner);
90
91 m_innerVertex = (isInner ? minVertex : maxVertex);
92 m_outerVertex = (isInner ? maxVertex : minVertex);
93}
94
95//------------------------------------------------------------------------------------------------------------------------------------------
96
98 m_pCluster(NULL),
99 m_position(0.f, 0.f, 0.f),
100 m_direction(0.f, 0.f, 0.f),
101 m_rms(std::numeric_limits<float>::max()),
102 m_isInner(false),
103 m_isInitialized(false)
104{
105}
106
107//------------------------------------------------------------------------------------------------------------------------------------------
108
110 const Cluster *const pCluster, const CartesianVector &position, const CartesianVector &direction, const float rms, const bool isInner) :
111 m_pCluster(pCluster),
112 m_position(position),
113 m_direction(direction),
114 m_rms(rms),
115 m_isInner(isInner),
116 m_isInitialized(true)
117{
118}
119
120//------------------------------------------------------------------------------------------------------------------------------------------
121
124 m_position(rhs.m_position),
125 m_direction(rhs.m_direction),
126 m_rms(rhs.m_rms),
127 m_isInner(rhs.m_isInner),
128 m_isInitialized(rhs.m_isInitialized)
129{
130}
131
132//------------------------------------------------------------------------------------------------------------------------------------------
133
137
138//------------------------------------------------------------------------------------------------------------------------------------------
139
141{
143 m_position = rhs.m_position;
144 m_direction = rhs.m_direction;
145 m_rms = rhs.m_rms;
146 m_isInner = rhs.m_isInner;
147 m_isInitialized = rhs.m_isInitialized;
148
149 return *this;
150}
151
152} // namespace lar_content
Header file for the cluster helper class.
Header file for the lar pointing cluster class.
static pandora::HitType GetClusterHitType(const pandora::Cluster *const pCluster)
Get the hit type associated with a two dimensional cluster.
bool m_isInner
Whether this is the inner vertex.
bool m_isInitialized
Whether the vertex has been initialized.
pandora::CartesianVector m_direction
The vertex direction.
const pandora::Cluster * m_pCluster
The address of the cluster.
Vertex & operator=(const Vertex &rhs)
Vertex assigment operator.
pandora::CartesianVector m_position
The vertex position.
void BuildPointingCluster(const TwoDSlidingFitResult &slidingFitResult)
Build the pointing cluster object from the sliding fit result.
Vertex m_outerVertex
The outer vertex.
const pandora::Cluster * m_pCluster
The address of the cluster.
Vertex m_innerVertex
The inner vertex.
LArPointingCluster(const pandora::Cluster *const pCluster, const unsigned int fitHalfLayerWindow=10, const float fitLayerPitch=0.3f)
Constructor.
float GetMinLayerRms() const
Get rms at minimum layer.
int GetMinLayer() const
Get the minimum occupied layer in the sliding fit.
const pandora::CartesianVector & GetGlobalMaxLayerDirection() const
Get global direction corresponding to the fit result in maximum fit layer.
const pandora::CartesianVector & GetGlobalMinLayerDirection() const
Get global direction corresponding to the fit result in minimum fit layer.
int GetMaxLayer() const
Get the maximum occupied layer in the sliding fit.
const pandora::Cluster * GetCluster() const
Get the address of the cluster.
const pandora::CartesianVector & GetGlobalMaxLayerPosition() const
Get global position corresponding to the fit result in maximum fit layer.
const pandora::CartesianVector & GetGlobalMinLayerPosition() const
Get global position corresponding to the fit result in minimum fit layer.
float GetMaxLayerRms() const
Get rms at maximum layer.
float GetMaxLayerRms() const
Get rms at maximum layer.
pandora::CartesianVector GetGlobalMinLayerPosition() const
Get global position corresponding to the fit result in minimum fit layer.
float GetMinLayerRms() const
Get rms at minimum layer.
pandora::CartesianVector GetGlobalMinLayerDirection() const
Get global direction corresponding to the fit result in minimum fit layer.
int GetMaxLayer() const
Get the maximum occupied layer in the sliding fit.
pandora::CartesianVector GetGlobalMaxLayerPosition() const
Get global position corresponding to the fit result in maximum fit layer.
const pandora::Cluster * GetCluster() const
Get the address of the cluster, if originally provided.
int GetMinLayer() const
Get the minimum occupied layer in the sliding fit.
pandora::CartesianVector GetGlobalMaxLayerDirection() const
Get global direction corresponding to the fit result in maximum fit layer.
CartesianVector class.
float GetZ() const
Get the cartesian z coordinate.
Cluster class.
Definition Cluster.h:31
StatusCodeException class.
HitType
Calorimeter hit type enum.