28 const unsigned int nClusterHits(pCluster->
GetNCaloHits());
37 return ((nClusterHits > 0) ? rTSum /
static_cast<float>(nClusterHits) : 0.f);
47 unsigned int nMatchedHits(0);
48 const unsigned int nClusterHits(pCluster->
GetNCaloHits());
53 const float rL(displacement.
GetDotProduct(this->GetConeDirection()));
55 if ((rL < 0.f) || (rL > coneLength))
60 if (rL * coneTanHalfAngle > rT)
64 return ((nClusterHits > 0) ?
static_cast<float>(nMatchedHits) /
static_cast<float>(nClusterHits) : 0.f);
83 const int nSteps(
static_cast<int>((maxLayerPosition3D - minLayerPosition3D).GetMagnitude() / slidingFitLayerPitch));
85 for (
int iStep = 0; iStep <= nSteps; ++iStep)
89 const float rL((
static_cast<float>(iStep) + 0.5f) * slidingFitLayerPitch);
90 CartesianVector fitPosition3D(0.f, 0.f, 0.f), fitDirection3D(0.f, 0.f, 0.f);
99 if (!contributionMap1.count(fitResult1.
GetLayer(rL)) && !contributionMap2.count(fitResult2.
GetLayer(rL)))
114 const unsigned int nLayersForConeFit,
const unsigned int nCones,
const ConeSelection coneSelection,
SimpleConeList &simpleConeList)
const
117 const unsigned int nLayers(trackStateMap.size());
119 if (nLayers + 1 < nLayersForConeFit + nCones)
123 const unsigned int coneInterval((nCones > 1) ? (nLayers - nLayersForConeFit) / (nCones - 1) : 1);
125 const CartesianVector coneDisplacement(slidingFitResult.GetGlobalMaxLayerPosition() - slidingFitResult.GetGlobalMinLayerPosition());
126 const bool isForward(coneDisplacement.
GetZ() > std::numeric_limits<float>::epsilon());
127 const unsigned int coneOffset1((nLayers - nLayersForConeFit - (nCones - 1) * coneInterval) / 2);
128 const unsigned int coneOffset2((1 == nLayers % 2) && isForward ? 1 : 0);
129 const unsigned int coneOffset(coneOffset1 + coneOffset2);
133 const float clusterLength((trackStateMap.begin()->second.GetPosition() - trackStateMap.rbegin()->second.GetPosition()).GetMagnitude());
135 unsigned int nConeSamplingSteps(0);
137 for (TrackStateMap::const_iterator iter = trackStateMap.begin(), iterEnd = trackStateMap.end(); iter != iterEnd; ++iter)
139 if (nConeSamplingSteps >= nCones)
142 trackStateList.push_back(iter->second);
143 directionSum += iter->second.GetMomentum();
145 const unsigned int beginDistance(
static_cast<unsigned int>(std::distance(trackStateMap.begin(), iter)));
147 if (beginDistance + 1 < nLayersForConeFit)
150 const TrackState &maxLayerTrackState(trackStateList.back());
151 const TrackState &minLayerTrackState(trackStateList.front());
153 if ((beginDistance + 1 >= nLayersForConeFit + coneOffset) && (beginDistance + 1 - nLayersForConeFit - coneOffset) % coneInterval == 0)
162 ++nConeSamplingSteps;
163 const float placeHolderTanHalfAngle(0.5f);
166 simpleConeList.push_back(
SimpleCone(minLayerApex, minLayerDirection, clusterLength, placeHolderTanHalfAngle));
169 simpleConeList.push_back(
SimpleCone(maxLayerApex, maxLayerDirection, clusterLength, placeHolderTanHalfAngle));
173 trackStateList.pop_front();
Header file for the cluster class.
Header file for the cluster helper class.
Header file for the lar three dimensional sliding cone fit result class.
static void GetCoordinateVector(const pandora::Cluster *const pCluster, pandora::CartesianPointVector &coordinateVector)
Get vector of hit coordinates from an input cluster.
float GetBoundedHitFraction(const pandora::Cluster *const pCluster) const
Get the fraction of hits in a provided cluster that are bounded within the cone, using fitted cone an...
const pandora::CartesianVector & GetConeApex() const
Get the cone apex.
float GetMeanRT(const pandora::Cluster *const pCluster) const
Get the mean transverse distance to all hits in a cluster (whether contained or not)
const ThreeDSlidingFitResult & GetSlidingFitResult() const
Get the sliding fit result for the full cluster.
ThreeDSlidingConeFitResult(const T *const pT, const unsigned int slidingFitWindow, const float slidingFitLayerPitch)
Constructor.
void GetSimpleConeList(const unsigned int nLayersForConeFit, const unsigned int nCones, const ConeSelection coneSelection, SimpleConeList &simpleConeList) const
Get the list of simple cones fitted to the three dimensional cluster.
std::list< pandora::TrackState > TrackStateLinkedList
The track state linked list typedef.
const ThreeDSlidingFitResult m_slidingFitResult
The sliding fit result for the full cluster.
TrackStateMap m_trackStateMap
The track state map.
const TrackStateMap & GetTrackStateMap() const
Get the track state map, which caches results from the sliding fit result.
ThreeDSlidingFitResult class.
pandora::StatusCode GetGlobalFitPosition(const float rL, pandora::CartesianVector &position) const
Get global fit position for a given longitudinal coordinate.
const TwoDSlidingFitResult & GetSecondFitResult() const
Get the second sliding fit result for this cluster.
const pandora::CartesianVector & GetGlobalMaxLayerPosition() const
Get global position corresponding to the fit result in maximum fit layer.
pandora::StatusCode GetGlobalFitDirection(const float rL, pandora::CartesianVector &direction) const
Get global fit direction for a given longitudinal coordinate.
const pandora::CartesianVector & GetGlobalMinLayerPosition() const
Get global position corresponding to the fit result in minimum fit layer.
const TwoDSlidingFitResult & GetFirstFitResult() const
Get the first sliding fit result for this cluster.
TwoDSlidingFitResult class.
const LayerFitContributionMap & GetLayerFitContributionMap() const
Get the layer fit contribution map.
int GetLayer(const float rL) const
Get layer number for given sliding linear fit longitudinal coordinate.
CartesianVector GetUnitVector() const
Get a unit vector in the direction of the cartesian vector.
float GetZ() const
Get the cartesian z coordinate.
float GetDotProduct(const CartesianVector &rhs) const
Get the dot product of the cartesian vector with a second cartesian vector.
float GetMagnitude() const
Get the magnitude.
CartesianVector GetCrossProduct(const CartesianVector &rhs) const
Get the cross product of the cartesian vector with a second cartesian vector.
unsigned int GetNCaloHits() const
Get the number of calo hits in the cluster.
StatusCodeException class.
const CartesianVector & GetMomentum() const
Get the track momentum vector.
const CartesianVector & GetPosition() const
Get the track position vector.
ConeSelection
ConeSelection enum.
std::map< int, pandora::TrackState > TrackStateMap
std::vector< SimpleCone > SimpleConeList
std::map< int, LayerFitContribution > LayerFitContributionMap
std::vector< CartesianVector > CartesianPointVector