6 : diagonalOnly_(iConfig.getParameter<
bool>(
"diagonalOnly")),
7 usePosition_(iConfig.getParameter<
bool>(
"usePosition")),
8 refitter_(iConfig, iC) {}
16 if (traj.size() != 1) {
25 const std::vector<TrajectoryMeasurement> &tms = trajectory.
measurements();
29 for (
int itm = 3, nm = tms.size() - 3; itm < nm; ++itm) {
32 if (!
pre.isValid() || !
post.isValid())
38 GlobalPoint pos = (tms[itm].updatedState().isValid() ? tms[itm].updatedState() :
pre).globalPosition();
49 throw cms::Exception(
"LogicError") <<
"At least one of the two states must have errors to make chi2s.\n";
52 cov +=
start.localError().matrix();
54 cov +=
other.localError().matrix();
57 return ROOT::Math::Similarity(
diff, cov);
63 for (
size_t i = 0;
i < 5; ++
i) {
64 for (
size_t j =
i + 1;
j < 5; ++
j) {
81 cov.Place_at(momCov, 0, 0);
83 for (
size_t i = 3;
i < 5; ++
i) {
84 for (
size_t j =
i;
j < 5; ++
j) {
bool diagonalOnly_
use only on-diagonal terms of the covariance matrices
TrackTransformer refitter_
Track Transformer.
double getChi2(const TrajectoryStateOnSurface &start, const TrajectoryStateOnSurface &other) const
DataContainer const & measurements() const
void init(const edm::EventSetup &iSetup)
bool fillTrkKink(reco::MuonQuality &quality, const Trajectory &trajectory) const
MuonKinkFinder(const edm::ParameterSet &iConfig, edm::ConsumesCollector &iC)
ROOT::Math::SVector< double, 5 > AlgebraicVector5
XYZPointD XYZPoint
point in space with cartesian internal representation
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
void cropAndInvert(AlgebraicSymMatrix55 &cov) const
bool usePosition_
if true, use full 5x5 track state; if false, use only the track direction
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33