10 : jetEnergyResolutionScaleFactors_(jetEnergyResolutionScaleFactors),
11 jetEnergyResolutionEtaBinning_(jetEnergyResolutionEtaBinning) {
12 for (std::vector<edm::ParameterSet>::const_iterator iSet = udscResolutions.begin(); iSet != udscResolutions.end();
14 if (iSet->exists(
"bin"))
16 else if (udscResolutions.size() == 1)
19 throw cms::Exception(
"Configuration") <<
"Parameter 'bin' is needed if more than one PSet is specified!\n";
25 for (std::vector<edm::ParameterSet>::const_iterator iSet = bResolutions.begin(); iSet != bResolutions.end(); ++iSet) {
26 if (iSet->exists(
"bin"))
28 else if (bResolutions.size() == 1)
31 throw cms::Exception(
"Configuration") <<
"Parameter 'bin' is needed if more than one PSet is specified!\n";
41 const std::vector<edm::ParameterSet>& lepResolutions,
42 const std::vector<edm::ParameterSet>& metResolutions,
48 throw cms::Exception(
"Configuration") <<
"The number of scale factors does not fit to the number of eta bins!\n";
51 throw cms::Exception(
"Configuration") <<
"eta binning in absolut values required!\n";
53 for (std::vector<edm::ParameterSet>::const_iterator iSet = udscResolutions.begin(); iSet != udscResolutions.end();
55 if (iSet->exists(
"bin"))
57 else if (udscResolutions.size() == 1)
60 throw cms::Exception(
"Configuration") <<
"Parameter 'bin' is needed if more than one PSet is specified!\n";
66 for (std::vector<edm::ParameterSet>::const_iterator iSet = bResolutions.begin(); iSet != bResolutions.end(); ++iSet) {
67 if (iSet->exists(
"bin"))
69 else if (bResolutions.size() == 1)
72 throw cms::Exception(
"Configuration") <<
"Parameter 'bin' is needed if more than one PSet is specified!\n";
78 for (std::vector<edm::ParameterSet>::const_iterator iSet = lepResolutions.begin(); iSet != lepResolutions.end();
80 if (iSet->exists(
"bin"))
82 else if (lepResolutions.size() == 1)
85 throw cms::Exception(
"Configuration") <<
"Parameter 'bin' is needed if more than one PSet is specified!\n";
91 for (std::vector<edm::ParameterSet>::const_iterator iSet = metResolutions.begin(); iSet != metResolutions.end();
93 if (iSet->exists(
"bin"))
95 else if (metResolutions.size() == 1)
98 throw cms::Exception(
"Configuration") <<
"Parameter 'bin' is needed if more than one PSet is specified!\n";
109 std::vector<std::string>*bins_, *funcEt_, *funcEta_, *funcPhi_;
143 throw cms::Exception(
"UnsupportedObject") <<
"The object given is not supported!\n";
146 int selectedBin = -1;
148 for (
unsigned int i = 0;
i < bins_->size(); ++
i) {
152 if (select_(candidate)) {
158 if (selectedBin >= 0) {
159 if (whichResolution ==
"et")
161 else if (whichResolution ==
"eta")
163 else if (whichResolution ==
"phi")
166 throw cms::Exception(
"ProgrammingError") <<
"Only 'et', 'eta' and 'phi' resolutions supported!\n";
174 TMatrixD CovM3(3, 3);
176 TMatrixD CovM4(4, 4);
178 const double pt =
object.Pt();
179 const double eta =
object.Eta();
253 CovM3(0, 0) =
pow(muonRes.
a(pt, eta), 2);
254 CovM3(1, 1) =
pow(muonRes.
b(pt, eta), 2);
255 CovM3(2, 2) =
pow(muonRes.
c(pt, eta), 2);
259 CovM3(0, 0) =
pow(muonRes.
et(pt, eta), 2);
260 CovM3(1, 1) =
pow(muonRes.
eta(pt, eta), 2);
261 CovM3(2, 2) =
pow(muonRes.
phi(pt, eta), 2);
269 CovM3(0, 0) =
pow(muonRes.
et(pt, eta), 2);
270 CovM3(1, 1) =
pow(muonRes.
theta(pt, eta), 2);
271 CovM3(2, 2) =
pow(muonRes.
phi(pt, eta), 2);
281 CovM3(0, 0) =
pow(elecRes.
a(pt, eta), 2);
282 CovM3(1, 1) =
pow(elecRes.
b(pt, eta), 2);
283 CovM3(2, 2) =
pow(elecRes.
c(pt, eta), 2);
287 CovM3(0, 0) =
pow(elecRes.
et(pt, eta), 2);
288 CovM3(1, 1) =
pow(elecRes.
eta(pt, eta), 2);
289 CovM3(2, 2) =
pow(elecRes.
phi(pt, eta), 2);
297 CovM3(0, 0) =
pow(elecRes.
et(pt, eta), 2);
298 CovM3(1, 1) =
pow(elecRes.
theta(pt, eta), 2);
299 CovM3(2, 2) =
pow(elecRes.
phi(pt, eta), 2);
309 CovM3(0, 0) =
pow(metRes.
a(pt), 2);
310 CovM3(1, 1) =
pow(metRes.
b(pt), 2);
311 CovM3(2, 2) =
pow(metRes.
c(pt), 2);
315 CovM3(0, 0) =
pow(metRes.
et(pt), 2);
316 CovM3(1, 1) =
pow(9999., 2);
317 CovM3(2, 2) =
pow(metRes.
phi(pt), 2);
325 CovM3(0, 0) =
pow(metRes.
et(pt), 2);
326 CovM3(1, 1) =
pow(9999., 2);
327 CovM3(2, 2) =
pow(metRes.
phi(pt), 2);
333 cms::Exception(
"Logic") <<
"Something went wrong while trying to setup a covariance matrix!\n";
338 double etaDependentScaleFactor = 1.;
341 if (
i == jetEnergyResolutionEtaBinning_.size() - 1) {
343 << jetEnergyResolutionEtaBinning_[
i] <<
") using scale factor 1.0!";
344 etaDependentScaleFactor = 1.;
351 return etaDependentScaleFactor;
Param
supported parameterizations
double c(double pt, double eta)
std::vector< std::string > binsB_
const std::vector< double > jetEnergyResolutionEtaBinning_
double et(double pt, double eta)
double phi(double pt, double eta, Flavor flav)
double phi(double pt, double eta)
std::vector< std::string > funcEtUdsc_
vectors for the resolution functions
double b(double pt, double eta)
std::vector< std::string > binsMet_
double theta(double pt, double eta, Flavor flav)
double c(double pt, double eta)
double eta(double pt, double eta)
jetEnergyResolutionScaleFactors
TMatrixD setupMatrix(const pat::PATObject< T > &object, const TopKinFitter::Param param, const std::string &resolutionProvider="")
return covariance matrix for a PAT object
double et(double pt, double eta, Flavor flav)
std::vector< std::string > funcEtB_
std::vector< std::string > binsUdsc_
vector of strings for the binning of the resolutions
std::vector< std::string > funcPhiB_
const std::vector< double > jetEnergyResolutionScaleFactors_
scale factors for the jet energy resolution
double b(double pt, double eta, Flavor flav)
double d(double pt, double eta, Flavor flav)
std::vector< std::string > funcEtaB_
double a(double pt, double eta)
double theta(double pt, double eta)
jetEnergyResolutionEtaBinning
Abs< T >::type abs(const T &t)
double et(double pt, double eta)
CovarianceMatrix()
default constructor
std::vector< std::string > funcPhiUdsc_
std::vector< std::string > funcPhiLep_
double eta(double pt, double eta, Flavor flav)
std::vector< std::string > funcEtaUdsc_
std::vector< std::string > funcEtLep_
double theta(double pt, double eta)
std::vector< std::string > funcEtMet_
double eta(double pt, double eta)
double a(double pt, double eta)
std::vector< std::string > funcEtaLep_
std::vector< std::string > binsLep_
double c(double pt, double eta, Flavor flav)
std::vector< std::string > funcEtaMet_
double phi(double pt, double eta)
std::vector< std::string > funcPhiMet_
double a(double pt, double eta, Flavor flav)
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Power< A, B >::type pow(const A &a, const B &b)
double b(double pt, double eta)
double getResolution(const TLorentzVector &object, const ObjectType objType, const std::string &whichResolution="")
get resolution for a given component of an object
double getEtaDependentScaleFactor(const pat::PATObject< T > &object)
get eta dependent smear factor for a PAT object