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:
123  const std::vector<edm::ParameterSet>* udscResolutions_;
124  const std::vector<edm::ParameterSet>* bResolutions_;
125  const std::vector<edm::ParameterSet>* lepResolutions_;
126  const std::vector<edm::ParameterSet>* metResolutions_;
128  const std::vector<double>* jetEnergyResolutionScaleFactors_;
129  const std::vector<double>* jetEnergyResolutionEtaBinning_;
133  std::map<Constraint, TFitConstraintM*> massConstr_;
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
163  const pat::Jet hadP = jets[TtSemiLepEvtPartons::LightQ];
164  const pat::Jet hadQ = jets[TtSemiLepEvtPartons::LightQBar];
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
const pat::Particle fittedHadP() const
return hadronic light quark candidate
TAbsFitParticle * hadB_
input particles
Param
supported parameterizations
Definition: TopKinFitter.h:20
const std::vector< edm::ParameterSet > * udscResolutions_
resolutions
TAbsFitParticle * neutrino_
const pat::Particle fittedNeutrino() const
return neutrino candidate
const pat::Particle fittedLepB() const
return leptonic b quark candidate
TAbsFitParticle * hadQ_
double px() const final
x coordinate of momentum vector
bool constrainSumPt_
internally use simple boolean for this constraint to reduce the per-event computing time ...
TMatrixD setupMatrix(const pat::PATObject< T > &object, const TopKinFitter::Param param, const std::string &resolutionProvider="")
return covariance matrix for a PAT object
TFitConstraintEp * sumPyConstr_
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
TAbsFitParticle * lepton_
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_
void printSetup() const
print fitter setup
double et() const final
transverse energy
double pz() const final
z coordinate of momentum vector
pat::Particle fittedLepton_
TAbsFitParticle * hadP_
Analysis-level lepton class.
Definition: Lepton.h:29
const std::vector< double > * jetEnergyResolutionScaleFactors_
scale factors for the jet energy resolution
double energy() const final
energy
Int_t getStatus()
Definition: TKinFitter.h:51
Param jetParam_
jet parametrization
const pat::Particle fittedHadB() const
return hadronic b quark candidate
TtSemiLepKinFitter()
default constructor
std::map< Constraint, TFitConstraintM * > massConstr_
supported constraints
Param metParam_
met parametrization
CovarianceMatrix * covM_
object used to construct the covariance matrices for the individual particles
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
void setupLeptons()
initialize lepton inputs
TFitConstraintEp * sumPxConstr_
Analysis-level particle class.
Definition: Particle.h:30
double py() const final
y coordinate of momentum vector
Analysis-level calorimeter jet class.
Definition: Jet.h:77
const pat::Particle fittedHadQ() const
return hadronic light quark candidate
const pat::Particle fittedLepton() const
return lepton candidate
void setupFitter()
setup fitter
pat::Particle fittedNeutrino_
const std::vector< double > * jetEnergyResolutionEtaBinning_
TKinFitter * fitter_
kinematic fitter
Definition: TopKinFitter.h:47
TAbsFitParticle * lepB_
Constraint
supported constraints
const std::vector< edm::ParameterSet > * metResolutions_