Get reconstructed vertex and end positions for this 3D track.
59 const bool foundU(inputSlidingFitMap.end() != iterU);
62 const bool foundV(inputSlidingFitMap.end() != iterV);
65 const bool foundW(inputSlidingFitMap.end() != iterW);
67 bool useU(
false), useV(
false), useW(
false);
70 for (
unsigned int iPermutation = 0; iPermutation < 4; ++iPermutation)
72 const bool isForwardU((1 == iPermutation) ?
false :
true);
73 const bool isForwardV((2 == iPermutation) ?
false :
true);
74 const bool isForwardW((3 == iPermutation) ?
false :
true);
76 CartesianVector vtxU(0.
f, 0.
f, 0.
f), endU(0.
f, 0.
f, 0.
f);
77 CartesianVector vtxV(0.
f, 0.
f, 0.
f), endV(0.
f, 0.
f, 0.
f);
78 CartesianVector vtxW(0.
f, 0.
f, 0.
f), endW(0.
f, 0.
f, 0.
f);
82 const TwoDSlidingFitResult &slidingFitResultU = iterU->second;
83 vtxU = (isForwardU ? slidingFitResultU.GetGlobalMinLayerPosition() : slidingFitResultU.GetGlobalMaxLayerPosition());
84 endU = (isForwardU ? slidingFitResultU.GetGlobalMaxLayerPosition() : slidingFitResultU.GetGlobalMinLayerPosition());
89 const TwoDSlidingFitResult &slidingFitResultV = iterV->second;
90 vtxV = (isForwardV ? slidingFitResultV.GetGlobalMinLayerPosition() : slidingFitResultV.GetGlobalMaxLayerPosition());
91 endV = (isForwardV ? slidingFitResultV.GetGlobalMaxLayerPosition() : slidingFitResultV.GetGlobalMinLayerPosition());
96 const TwoDSlidingFitResult &slidingFitResultW = iterW->second;
97 vtxW = (isForwardW ? slidingFitResultW.GetGlobalMinLayerPosition() : slidingFitResultW.GetGlobalMaxLayerPosition());
98 endW = (isForwardW ? slidingFitResultW.GetGlobalMaxLayerPosition() : slidingFitResultW.GetGlobalMinLayerPosition());
101 CartesianVector vtx3D(0.
f, 0.
f, 0.
f), end3D(0.
f, 0.
f, 0.
f);
104 if (foundU && foundV)
110 if (foundV && foundW)
116 if (foundW && foundU)
122 bool matchedU(
false), matchedV(
false), matchedW(
false);
123 unsigned int matchedViews(0);
167 if (matchedViews < 2)
170 if (vtxChi2 + endChi2 < bestChi2)
178 bestChi2 = vtxChi2 + endChi2;
183 outputSlidingFitMap.insert(MatchedSlidingFitMap::value_type(iterU->first, iterU->second));
186 outputSlidingFitMap.insert(MatchedSlidingFitMap::value_type(iterV->first, iterV->second));
189 outputSlidingFitMap.insert(MatchedSlidingFitMap::value_type(iterW->first, iterW->second));
191 if (outputSlidingFitMap.empty())
192 throw StatusCodeException(STATUS_CODE_NOT_FOUND);
static pandora::CartesianVector ProjectPosition(const pandora::Pandora &pandora, const pandora::CartesianVector &position3D, const pandora::HitType view)
Project 3D position into a given 2D view.
void UpdateBestPosition(const pandora::HitType hitType1, const pandora::HitType hitType2, const pandora::CartesianVector &vtx1, const pandora::CartesianVector &vtx2, pandora::CartesianVector &bestVtx, float &bestChi2) const
Combine two 2D coordinates to give a 3D coordinate.
float m_minTrackLengthSquared
static int max(int a, int b)
float m_vtxDisplacementCutSquared
T min(sqlite3 *const db, std::string const &table_name, std::string const &column_name)