10#include "GaudiKernel/MsgStream.h"
33 m_containedChildRots.push_back(rot->clone());
36 m_globalPosition.store(std::make_unique<const Amg::Vector3D>(*compROT.m_globalPosition));
42 std::vector<const InDet::SCT_ClusterOnTrack*>&& childrots,
43 std::vector<AssignmentProb>&& assgnProb
58 if (
this != &compROT) {
81 if (
this != &compROT) {
110 <<
"] competing RIO_OnTrack objects" << std::endl;
113 <<
" (given prob>cut)" << std::endl;
115 out <<
" - GlobalPosition : ";
117 out <<
"null pointer" <<
endmsg;
128 <<
"] competing RIO_OnTrack objects" << std::endl;
131 <<
" (given prob>cut)" << std::endl;
133 out <<
" - GlobalPosition : ";
135 out <<
"null pointer" << std::endl;
156 nNonVanishingROTs += 1;
161 meanWeightMatrix.setZero();
163 if (nNonVanishingROTs > 1) {
177 meanParams = meanWeightMatrix.inverse() * meanParams;
180 }
else if (paramKey == 3) {
181 double meanTheta = 0.;
182 double meanEigen1 = 0.;
183 double meanEigen2 = 0.;
184 double sumAssignProb = 0.;
185 double meanMeasX = 0.;
186 double meanMeasY = 0.;
191 sumAssignProb += assignProb;
192 const double trace = covMat(0, 0) + covMat(1, 1);
193 const double det = covMat(0, 0) * covMat(1, 1) - covMat(0, 1) * covMat(1, 0);
194 const double lambda1 = trace / 2. - sqrt(trace * trace / 4. - det);
195 const double lambda2 = trace / 2. + sqrt(trace * trace / 4. - det);
197 assignProb * 0.5 * atan(2. * covMat(0, 1) / (covMat(0, 0) - covMat(1, 1)));
198 meanEigen1 += assignProb / lambda1;
199 meanEigen2 += assignProb / lambda2;
204 meanTheta /= sumAssignProb;
205 meanMeasX /= meanEigen1;
206 meanMeasY /= meanEigen2;
208 const double cosTheta = cos(meanTheta);
209 const double sinTheta = sin(meanTheta);
211 meanWeightMatrix.setZero();
212 meanWeightMatrix(0, 0) =
213 cosTheta * cosTheta * meanEigen1 + sinTheta * sinTheta * meanEigen2;
214 meanWeightMatrix(1, 1) =
215 cosTheta * cosTheta * meanEigen2 + sinTheta * sinTheta * meanEigen1;
216 meanWeightMatrix(0, 1) =
217 cosTheta * sinTheta * meanEigen1 - cosTheta * sinTheta * meanEigen2;
218 meanWeightMatrix(1, 0) = meanWeightMatrix(0, 1);
222 int orderInput = (weightMatrix_maxIndex(0, 0) > weightMatrix_maxIndex(1, 1)) ? -1 : 1;
223 int orderOutput = (meanWeightMatrix(0, 0) > meanWeightMatrix(1, 1)) ? -1 : 1;
224 if (orderInput * orderOutput < 0) {
225 std::cout <<
"Trk::CompetingSCT_ClustersOnTrack: order of dimensions "
233 std::cout <<
"Trk::CompetingSCT_ClustersOnTrack: can not handle parameter key "
234 << paramKey << std::endl;
244 if (meanWeightMatrix.trace() <= 1.0e-15) {
245 for (
int i = 0; i < meanWeightMatrix.cols(); ++i)
246 meanWeightMatrix(i, i) = 1.0e-10;
252 std::cout <<
"Trk::CompetingRIOsOnTrack: can not handle ROTs in different "
253 "surfaces without detector specific knowledge "
Class for competing SCT_Clusters, it extends the Trk::CompetingRIOsOnTrack base class.
virtual ~CompetingSCT_ClustersOnTrack()
Destructor.
const InDet::SCT_ClusterOnTrack & rioOnTrack(unsigned int) const
returns the RIO_OnTrack (also known as ROT) objects depending on the integer
bool ROTsHaveCommonSurface(const bool withNonVanishingAssignProb=true) const
Have all the contained ROTs a common associated surface?
MsgStream & dump(MsgStream &out) const
returns some information about this MeasurementBase/CompetingSCT_ClustersOnTrack.
unsigned int numberOfContainedROTs() const
Number of RIO_OnTracks to be contained by this CompetingRIOsOnTrack.
virtual void setLocalParametersAndErrorMatrix()
recalculate the LocalParameters and ErrorMatrix
std::vector< const InDet::SCT_ClusterOnTrack * > m_containedChildRots
The vector of contained InDet::SCT_ClusterOnTrack objects.
CompetingSCT_ClustersOnTrack & operator=(const CompetingSCT_ClustersOnTrack &compROT)
Assignment operator.
CxxUtils::CachedUniquePtr< const Amg::Vector3D > m_globalPosition
The global position.
CompetingSCT_ClustersOnTrack()
Default Constructor for POOL.
void clearChildRotVector()
private method to clear the Trk::RIO_OnTrack vector
Specific class to represent the SCT measurements.
virtual SCT_ClusterOnTrack * clone() const override final
Pseudo-constructor.
AssignmentProb assignmentProbability(unsigned int indx) const
returns the AssignmentProbability depending on the integer.
CompetingRIOsOnTrack & operator=(const CompetingRIOsOnTrack &compROT)=default
Assignment operator.
virtual MsgStream & dump(MsgStream &out) const override
returns the some information about the base class members (avoid code duplication)
unsigned int indexOfMaxAssignProb() const
Index of the ROT with the highest assignment probability.
CompetingRIOsOnTrack()
Default Constructor for POOL.
int parameterKey() const
Identifier key for matrix expansion/reduction.
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
LocalParameters m_localParams
Amg::MatrixX m_localCovariance
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
Ensure that the ATLAS eigen extensions are properly loaded.
@ loc2
generic first and second local coordinate
std::pair< double, ParamDefs > DefinedParameter
Typedef to of a std::pair<double, ParamDefs> to identify a passed-through double as a specific type o...