CMS 3D CMS Logo

CandKinResolution.cc
Go to the documentation of this file.
4 
5 pat::CandKinResolution::CandKinResolution() : parametrization_(Invalid), covariances_(), constraints_(), covmatrix_() {}
6 
8  const std::vector<Scalar> &covariances,
9  const std::vector<Scalar> &constraints)
10  : parametrization_(parametrization), covariances_(covariances), constraints_(constraints), covmatrix_() {
11  fillMatrix();
12 }
13 
15  const AlgebraicSymMatrix44 &covariance,
16  const std::vector<Scalar> &constraints)
17  : parametrization_(parametrization), covariances_(), constraints_(constraints), covmatrix_(covariance) {
18  fillVector();
19  if (sizeof(double) != sizeof(Scalar)) { // should become boost::mpl::if_c
20  fillMatrix(); // forcing double => float => double conversion
21  }
22 }
23 
25 
27  return pat::helper::ResolutionHelper::getResolEta(parametrization_, covmatrix_, p4);
28 }
30  return pat::helper::ResolutionHelper::getResolTheta(parametrization_, covmatrix_, p4);
31 }
33  return pat::helper::ResolutionHelper::getResolPhi(parametrization_, covmatrix_, p4);
34 }
36  return pat::helper::ResolutionHelper::getResolE(parametrization_, covmatrix_, p4);
37 }
39  return pat::helper::ResolutionHelper::getResolEt(parametrization_, covmatrix_, p4);
40 }
42  return pat::helper::ResolutionHelper::getResolM(parametrization_, covmatrix_, p4);
43 }
45  return pat::helper::ResolutionHelper::getResolP(parametrization_, covmatrix_, p4);
46 }
48  return pat::helper::ResolutionHelper::getResolPt(parametrization_, covmatrix_, p4);
49 }
51  return pat::helper::ResolutionHelper::getResolPInv(parametrization_, covmatrix_, p4);
52 }
54  return pat::helper::ResolutionHelper::getResolPx(parametrization_, covmatrix_, p4);
55 }
57  return pat::helper::ResolutionHelper::getResolPy(parametrization_, covmatrix_, p4);
58 }
60  return pat::helper::ResolutionHelper::getResolPz(parametrization_, covmatrix_, p4);
61 }
62 
64  if (dimension() == 3) {
65  AlgebraicSymMatrix33 sub = covmatrix_.Sub<AlgebraicSymMatrix33>(0, 0);
66  covariances_.insert(covariances_.end(), sub.begin(), sub.end());
67  } else {
68  covariances_.insert(covariances_.end(), covmatrix_.begin(), covmatrix_.end());
69  }
70 }
71 
73  const std::vector<Scalar> &covariances,
74  AlgebraicSymMatrix44 &covmatrix) {
75  int dimension = dimensionFrom(parametrization);
76  if (dimension == 3) {
77  if (covariances.size() == 3) {
78  for (int i = 0; i < 3; ++i)
79  covmatrix(i, i) = covariances[i];
80  } else {
81  covmatrix.Place_at(AlgebraicSymMatrix33(covariances.begin(), covariances.end()), 0, 0);
82  }
83  } else if (dimension == 4) {
84  if (covariances.size() == 4) {
85  for (int i = 0; i < 4; ++i)
86  covmatrix(i, i) = covariances[i];
87  } else {
88  covmatrix = AlgebraicSymMatrix44(covariances.begin(), covariances.end());
89  }
90  }
91 }
92 
93 void pat::CandKinResolution::fillMatrix() { fillMatrixFrom(parametrization_, covariances_, covmatrix_); }
double getResolEt(pat::CandKinResolution::Parametrization parametrization, const AlgebraicSymMatrix44 &covariance, const pat::CandKinResolution::LorentzVector &p4)
double getResolPz(pat::CandKinResolution::Parametrization parametrization, const AlgebraicSymMatrix44 &covariance, const pat::CandKinResolution::LorentzVector &p4)
double resolPx(const LorentzVector &p4) const
Resolution on px, given the 4-momentum of the associated Candidate.
double getResolPy(pat::CandKinResolution::Parametrization parametrization, const AlgebraicSymMatrix44 &covariance, const pat::CandKinResolution::LorentzVector &p4)
double getResolP(pat::CandKinResolution::Parametrization parametrization, const AlgebraicSymMatrix44 &covariance, const pat::CandKinResolution::LorentzVector &p4)
double getResolPx(pat::CandKinResolution::Parametrization parametrization, const AlgebraicSymMatrix44 &covariance, const pat::CandKinResolution::LorentzVector &p4)
double getResolPt(pat::CandKinResolution::Parametrization parametrization, const AlgebraicSymMatrix44 &covariance, const pat::CandKinResolution::LorentzVector &p4)
double resolE(const LorentzVector &p4) const
Resolution on energy, given the 4-momentum of the associated Candidate.
double getResolPhi(pat::CandKinResolution::Parametrization parametrization, const AlgebraicSymMatrix44 &covariance, const pat::CandKinResolution::LorentzVector &p4)
double getResolM(pat::CandKinResolution::Parametrization parametrization, const AlgebraicSymMatrix44 &covariance, const pat::CandKinResolution::LorentzVector &p4)
double getResolPInv(pat::CandKinResolution::Parametrization parametrization, const AlgebraicSymMatrix44 &covariance, const pat::CandKinResolution::LorentzVector &p4)
double resolEta(const LorentzVector &p4) const
Resolution on eta, given the 4-momentum of the associated Candidate.
double getResolE(pat::CandKinResolution::Parametrization parametrization, const AlgebraicSymMatrix44 &covariance, const pat::CandKinResolution::LorentzVector &p4)
double resolPInv(const LorentzVector &p4) const
Resolution on 1/p, given the 4-momentum of the associated Candidate.
double resolTheta(const LorentzVector &p4) const
Resolution on theta, given the 4-momentum of the associated Candidate.
double resolPz(const LorentzVector &p4) const
Resolution on pz, given the 4-momentum of the associated Candidate.
double resolPhi(const LorentzVector &p4) const
Resolution on phi, given the 4-momentum of the associated Candidate.
double resolP(const LorentzVector &p4) const
Resolution on p, given the 4-momentum of the associated Candidate.
parametrization
specify parametrization (see SWGuidePATKinematicResolutions for more details)
void fillVector()
Fill vectoor from matrix.
double resolM(const LorentzVector &p4) const
double resolPt(const LorentzVector &p4) const
Resolution on pt, given the 4-momentum of the associated Candidate.
ROOT::Math::SMatrix< double, 4, 4, ROOT::Math::MatRepSym< double, 4 > > AlgebraicSymMatrix44
static void fillMatrixFrom(Parametrization parametrization, const std::vector< Scalar > &covariances, AlgebraicSymMatrix44 &covmatrix)
math::XYZTLorentzVector LorentzVector
void fillMatrix()
Fill matrix from vector.
double resolPy(const LorentzVector &p4) const
Resolution on py, given the 4-momentum of the associated Candidate.
double resolEt(const LorentzVector &p4) const
Resolution on et, given the 4-momentum of the associated Candidate.
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33
double getResolEta(pat::CandKinResolution::Parametrization parametrization, const AlgebraicSymMatrix44 &covariance, const pat::CandKinResolution::LorentzVector &p4)
double getResolTheta(pat::CandKinResolution::Parametrization parametrization, const AlgebraicSymMatrix44 &covariance, const pat::CandKinResolution::LorentzVector &p4)
uint32_t dimension(pat::CandKinResolution::Parametrization parametrization)
Returns the number of free parameters in a parametrization (3 or 4)