CMS 3D CMS Logo

TtSemiLepKinFitter.h
Go to the documentation of this file.
1 #ifndef TtSemiLepKinFitter_h
2 #define TtSemiLepKinFitter_h
3 
4 #include <vector>
5 
6 #include "TLorentzVector.h"
7 
9 
11 
13 
16 
18 
19 class TAbsFitParticle;
20 class TFitConstraintM;
21 class TFitConstraintEp;
22 
23 /*
24  \class TtSemiLepKinFitter TtSemiLepKinFitter.h "TopQuarkAnalysis/TopKinFitter/interface/TtSemiLepKinFitter.h"
25 
26  \brief one line description to be added here...
27 
28  text to be added here...
29 
30 **/
31 
33 public:
36 
37 public:
39  explicit TtSemiLepKinFitter();
41  explicit TtSemiLepKinFitter(Param jetParam,
42  Param lepParam,
43  Param metParam,
44  int maxNrIter,
45  double maxDeltaS,
46  double maxF,
47  const std::vector<Constraint>& constraints,
48  double mW = 80.4,
49  double mTop = 173.,
50  const std::vector<edm::ParameterSet>* udscResolutions = nullptr,
51  const std::vector<edm::ParameterSet>* bResolutions = nullptr,
52  const std::vector<edm::ParameterSet>* lepResolutions = nullptr,
53  const std::vector<edm::ParameterSet>* metResolutions = nullptr,
54  const std::vector<double>* jetEnergyResolutionScaleFactors = nullptr,
55  const std::vector<double>* jetEnergyResolutionEtaBinning = nullptr);
58 
60  template <class LeptonType>
61  int fit(const std::vector<pat::Jet>& jets, const pat::Lepton<LeptonType>& leps, const pat::MET& met);
63  int fit(const TLorentzVector& p4HadP,
64  const TLorentzVector& p4HadQ,
65  const TLorentzVector& p4HadB,
66  const TLorentzVector& p4LepB,
67  const TLorentzVector& p4Lepton,
68  const TLorentzVector& p4Neutrino,
69  const int leptonCharge,
72  int fit(const TLorentzVector& p4HadP,
73  const TLorentzVector& p4HadQ,
74  const TLorentzVector& p4HadB,
75  const TLorentzVector& p4LepB,
76  const TLorentzVector& p4Lepton,
77  const TLorentzVector& p4Neutrino,
78  const TMatrixD& covHadP,
79  const TMatrixD& covHadQ,
80  const TMatrixD& covHadB,
81  const TMatrixD& covLepB,
82  const TMatrixD& covLepton,
83  const TMatrixD& covNeutrino,
84  const int leptonCharge);
86  const pat::Particle fittedHadB() const { return (fitter_->getStatus() == 0 ? fittedHadB_ : pat::Particle()); };
88  const pat::Particle fittedHadP() const { return (fitter_->getStatus() == 0 ? fittedHadP_ : pat::Particle()); };
90  const pat::Particle fittedHadQ() const { return (fitter_->getStatus() == 0 ? fittedHadQ_ : pat::Particle()); };
92  const pat::Particle fittedLepB() const { return (fitter_->getStatus() == 0 ? fittedLepB_ : pat::Particle()); };
94  const pat::Particle fittedLepton() const { return (fitter_->getStatus() == 0 ? fittedLepton_ : pat::Particle()); };
96  const pat::Particle fittedNeutrino() const {
97  return (fitter_->getStatus() == 0 ? fittedNeutrino_ : pat::Particle());
98  };
101 
102 private:
104  void printSetup() const;
106  void setupFitter();
108  void setupJets();
110  void setupLeptons();
112  void setupConstraints();
113 
114 private:
116  std::unique_ptr<TAbsFitParticle> hadB_;
117  std::unique_ptr<TAbsFitParticle> hadP_;
118  std::unique_ptr<TAbsFitParticle> hadQ_;
119  std::unique_ptr<TAbsFitParticle> lepB_;
120  std::unique_ptr<TAbsFitParticle> lepton_;
121  std::unique_ptr<TAbsFitParticle> neutrino_;
123  const std::vector<edm::ParameterSet>* udscResolutions_ = nullptr;
124  const std::vector<edm::ParameterSet>* bResolutions_ = nullptr;
125  const std::vector<edm::ParameterSet>* lepResolutions_ = nullptr;
126  const std::vector<edm::ParameterSet>* metResolutions_ = nullptr;
128  const std::vector<double>* jetEnergyResolutionScaleFactors_ = nullptr;
129  const std::vector<double>* jetEnergyResolutionEtaBinning_ = nullptr;
131  std::unique_ptr<CovarianceMatrix> covM_;
133  std::map<Constraint, std::unique_ptr<TFitConstraintM>> massConstr_;
134  std::unique_ptr<TFitConstraintEp> sumPxConstr_;
135  std::unique_ptr<TFitConstraintEp> sumPyConstr_;
150  std::vector<Constraint> constrList_;
153 };
154 
155 template <class LeptonType>
156 int TtSemiLepKinFitter::fit(const std::vector<pat::Jet>& jets,
157  const pat::Lepton<LeptonType>& lepton,
158  const pat::MET& neutrino) {
159  if (jets.size() < 4)
160  throw edm::Exception(edm::errors::Configuration, "Cannot run the TtSemiLepKinFitter with less than 4 jets");
161 
162  // get jets in right order
165  const pat::Jet& hadB = jets[TtSemiLepEvtPartons::HadB];
166  const pat::Jet& lepB = jets[TtSemiLepEvtPartons::LepB];
167 
168  // initialize particles
169  const TLorentzVector p4HadP(hadP.px(), hadP.py(), hadP.pz(), hadP.energy());
170  const TLorentzVector p4HadQ(hadQ.px(), hadQ.py(), hadQ.pz(), hadQ.energy());
171  const TLorentzVector p4HadB(hadB.px(), hadB.py(), hadB.pz(), hadB.energy());
172  const TLorentzVector p4LepB(lepB.px(), lepB.py(), lepB.pz(), lepB.energy());
173  const TLorentzVector p4Lepton(lepton.px(), lepton.py(), lepton.pz(), lepton.energy());
174  const TLorentzVector p4Neutrino(neutrino.px(), neutrino.py(), 0, neutrino.et());
175 
176  // initialize covariance matrices
177  TMatrixD covHadP = covM_->setupMatrix(hadP, jetParam_);
178  TMatrixD covHadQ = covM_->setupMatrix(hadQ, jetParam_);
179  TMatrixD covHadB = covM_->setupMatrix(hadB, jetParam_, "bjets");
180  TMatrixD covLepB = covM_->setupMatrix(lepB, jetParam_, "bjets");
181  TMatrixD covLepton = covM_->setupMatrix(lepton, lepParam_);
182  TMatrixD covNeutrino = covM_->setupMatrix(neutrino, metParam_);
183 
184  // now do the part that is fully independent of PAT features
185  return fit(p4HadP,
186  p4HadQ,
187  p4HadB,
188  p4LepB,
189  p4Lepton,
190  p4Neutrino,
191  covHadP,
192  covHadQ,
193  covHadB,
194  covLepB,
195  covLepton,
196  covNeutrino,
197  lepton.charge());
198 }
199 
200 #endif
Analysis-level MET class.
Definition: MET.h:40
std::map< Constraint, std::unique_ptr< TFitConstraintM > > massConstr_
supported constraints
std::unique_ptr< TAbsFitParticle > hadQ_
Param
supported parameterizations
Definition: TopKinFitter.h:22
double pz() const final
z coordinate of momentum vector
const std::vector< edm::ParameterSet > * udscResolutions_
resolutions
void printSetup() const
print fitter setup
std::unique_ptr< TKinFitter > fitter_
kinematic fitter
Definition: TopKinFitter.h:49
std::unique_ptr< TAbsFitParticle > neutrino_
bool constrainSumPt_
internally use simple boolean for this constraint to reduce the per-event computing time ...
const pat::Particle fittedHadQ() const
return hadronic light quark candidate
const pat::Particle fittedNeutrino() const
return neutrino candidate
std::unique_ptr< TAbsFitParticle > lepton_
pat::Particle fittedHadP_
pat::Particle fittedLepB_
Param lepParam_
lepton parametrization
pat::Particle fittedHadB_
output particles
const std::vector< edm::ParameterSet > * bResolutions_
leptonType
LEPTON
Definition: autophobj.py:48
double px() const final
x coordinate of momentum vector
int fit(const std::vector< pat::Jet > &jets, const pat::Lepton< LeptonType > &leps, const pat::MET &met)
kinematic fit interface for PAT objects
void setupJets()
initialize jet inputs
const std::vector< edm::ParameterSet > * lepResolutions_
const pat::Particle fittedLepB() const
return leptonic b quark candidate
pat::Particle fittedLepton_
Analysis-level lepton class.
Definition: Lepton.h:29
const std::vector< double > * jetEnergyResolutionScaleFactors_
scale factors for the jet energy resolution
Param jetParam_
jet parametrization
std::unique_ptr< TFitConstraintEp > sumPyConstr_
TtSemiLepKinFitter()
default constructor
double py() const final
y coordinate of momentum vector
Param metParam_
met parametrization
pat::Particle fittedHadQ_
TtSemiEvtSolution addKinFitInfo(TtSemiEvtSolution *asol)
add kin fit information to the old event solution (in for legacy reasons)
~TtSemiLepKinFitter()
default destructor
void setupConstraints()
initialize constraints
std::vector< Constraint > constrList_
vector of constraints to be used
std::unique_ptr< TAbsFitParticle > lepB_
void setupLeptons()
initialize lepton inputs
Analysis-level particle class.
Definition: Particle.h:30
std::unique_ptr< TFitConstraintEp > sumPxConstr_
std::unique_ptr< TAbsFitParticle > hadB_
input particles
Analysis-level calorimeter jet class.
Definition: Jet.h:77
const pat::Particle fittedHadP() const
return hadronic light quark candidate
double et() const final
transverse energy
void setupFitter()
setup fitter
pat::Particle fittedNeutrino_
const std::vector< double > * jetEnergyResolutionEtaBinning_
std::unique_ptr< CovarianceMatrix > covM_
object used to construct the covariance matrices for the individual particles
const pat::Particle fittedHadB() const
return hadronic b quark candidate
std::unique_ptr< TAbsFitParticle > hadP_
Constraint
supported constraints
const pat::Particle fittedLepton() const
return lepton candidate
double energy() const final
energy
const std::vector< edm::ParameterSet > * metResolutions_