CMS 3D CMS Logo

List of all members | Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
EnergyScaleCorrection Class Reference

#include <EnergyScaleCorrection.h>

Classes

class  CorrectionCategory
 
class  ScaleCorrection
 
struct  SmearCorrection
 
class  Sorter
 

Public Types

enum  FileFormat { UNKNOWN = 0, GLOBE, ECALELF_TOY, ECALELF }
 
enum  ParamSmear { kNone = 0, kRho, kPhi, kNParamSmear }
 
enum  ScaleNuisances {
  kErrStatBitNr = 0, kErrSystBitNr = 1, kErrGainBitNr = 2, kErrNrBits = 3,
  kErrNone = 0, kErrStat = 1, kErrSyst = 2, kErrGain = 4,
  kErrStatSyst = 3, kErrStatGain = 5, kErrSystGain = 6, kErrStatSystGain = 7
}
 

Public Member Functions

 EnergyScaleCorrection (const std::string &correctionFileName, unsigned int genSeed=0)
 
 EnergyScaleCorrection ()
 
const ScaleCorrectiongetScaleCorr (unsigned int runnr, double et, double eta, double r9, unsigned int gainSeed) const
 
const SmearCorrectiongetSmearCorr (unsigned int runnr, double et, double eta, double r9, unsigned int gainSeed) const
 
float scaleCorr (unsigned int runnr, double et, double eta, double r9, unsigned int gainSeed=12, std::bitset< kErrNrBits > uncBitMask=kErrNone) const
 
float scaleCorrUncert (unsigned int runnr, double et, double eta, double r9, unsigned int gainSeed, std::bitset< kErrNrBits > uncBitMask=kErrNone) const
 
void setSmearingType (FileFormat value)
 
float smearingSigma (int runnr, double et, double eta, double r9, unsigned int gainSeed, ParamSmear par, float nSigma=0.) const
 
float smearingSigma (int runnr, double et, double eta, double r9, unsigned int gainSeed, float nSigmaRho, float nSigmaPhi) const
 
 ~EnergyScaleCorrection ()
 

Private Member Functions

void addScale (const std::string &category, int runMin, int runMax, double deltaP, double errDeltaP, double errSystDeltaP, double errDeltaPGain)
 
void addScale (int runMin, int runMax, double etaMin, double etaMax, double r9Min, double r9Max, double etMin, double etMax, unsigned int gain, double energyScale, double energyScaleErrStat, double energyScaleErrSyst, double energyScaleErrGain)
 
void addSmearing (const std::string &category, int runMin, int runMax, double rho, double errRho, double phi, double errPhi, double eMean, double errEMean)
 
void readScalesFromFile (const std::string &filename)
 
void readSmearingsFromFile (const std::string &filename)
 

Private Attributes

std::vector< std::pair< CorrectionCategory, ScaleCorrection > > scales_
 
std::vector< std::pair< CorrectionCategory, SmearCorrection > > smearings_
 
FileFormat smearingType_
 

Static Private Attributes

static constexpr float kDefaultScaleVal_ = 1.0
 
static constexpr float kDefaultSmearVal_ = 0.0
 

Detailed Description

Definition at line 17 of file EnergyScaleCorrection.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

EnergyScaleCorrection::EnergyScaleCorrection ( const std::string &  correctionFileName,
unsigned int  genSeed = 0 
)

Definition at line 13 of file EnergyScaleCorrection.cc.

References Exception, corrVsCorr::filename, readScalesFromFile(), readSmearingsFromFile(), scales_, smearings_, and AlCaHLTBitMon_QueryRunRegistry::string.

15  if (!correctionFileName.empty()) {
16  std::string filename = correctionFileName + "_scales.dat";
17  readScalesFromFile(filename);
18  if (scales_.empty()) {
19  throw cms::Exception("EnergyScaleCorrection") << "scale correction map empty";
20  }
21  }
22 
23  if (!correctionFileName.empty()) {
24  std::string filename = correctionFileName + "_smearings.dat";
25  readSmearingsFromFile(filename);
26  if (smearings_.empty()) {
27  throw cms::Exception("EnergyScaleCorrection") << "smearing correction map empty";
28  }
29  }
30 }
void readSmearingsFromFile(const std::string &filename)
void readScalesFromFile(const std::string &filename)
std::vector< std::pair< CorrectionCategory, SmearCorrection > > smearings_
std::vector< std::pair< CorrectionCategory, ScaleCorrection > > scales_
EnergyScaleCorrection::EnergyScaleCorrection ( )
inline

Definition at line 127 of file EnergyScaleCorrection.h.

127 {};
EnergyScaleCorrection::~EnergyScaleCorrection ( )
inline

Member Function Documentation

void EnergyScaleCorrection::addScale ( const std::string &  category,
int  runMin,
int  runMax,
double  deltaP,
double  errDeltaP,
double  errSystDeltaP,
double  errDeltaPGain 
)
private

Definition at line 135 of file EnergyScaleCorrection.cc.

References eostools::cat(), corr, Exception, mps_fire::result, and scales_.

Referenced by readScalesFromFile(), and ~EnergyScaleCorrection().

141  {
142  CorrectionCategory cat(category, runMin, runMax); // build the category from the string
143  auto result = std::equal_range(scales_.begin(), scales_.end(), cat, Sorter<CorrectionCategory, ScaleCorrection>());
144  if (result.first != result.second) {
145  throw cms::Exception("ConfigError") << "Category already defined! " << cat;
146  }
147 
148  ScaleCorrection corr(energyScale, energyScaleErrStat, energyScaleErrSyst, energyScaleErrGain);
149  scales_.push_back({cat, corr});
150  std::sort(scales_.begin(), scales_.end(), Sorter<CorrectionCategory, ScaleCorrection>());
151 }
def cat(path)
Definition: eostools.py:401
JetCorrectorParameters corr
Definition: classes.h:5
std::vector< std::pair< CorrectionCategory, ScaleCorrection > > scales_
void EnergyScaleCorrection::addScale ( int  runMin,
int  runMax,
double  etaMin,
double  etaMax,
double  r9Min,
double  r9Max,
double  etMin,
double  etMax,
unsigned int  gain,
double  energyScale,
double  energyScaleErrStat,
double  energyScaleErrSyst,
double  energyScaleErrGain 
)
private

Definition at line 153 of file EnergyScaleCorrection.cc.

References eostools::cat(), corr, Exception, mps_fire::result, and scales_.

165  {
166  CorrectionCategory cat(runMin, runMax, etaMin, etaMax, r9Min, r9Max, etMin, etMax, gain);
167 
168  auto result = std::equal_range(scales_.begin(), scales_.end(), cat, Sorter<CorrectionCategory, ScaleCorrection>());
169  if (result.first != result.second) {
170  throw cms::Exception("ConfigError") << "Category already defined! " << cat;
171  }
172 
173  ScaleCorrection corr(energyScale, energyScaleErrStat, energyScaleErrSyst, energyScaleErrGain);
174  scales_.push_back({cat, corr});
175  std::sort(scales_.begin(), scales_.end(), Sorter<CorrectionCategory, ScaleCorrection>());
176 }
def cat(path)
Definition: eostools.py:401
JetCorrectorParameters corr
Definition: classes.h:5
std::vector< std::pair< CorrectionCategory, ScaleCorrection > > scales_
void EnergyScaleCorrection::addSmearing ( const std::string &  category,
int  runMin,
int  runMax,
double  rho,
double  errRho,
double  phi,
double  errPhi,
double  eMean,
double  errEMean 
)
private

Definition at line 178 of file EnergyScaleCorrection.cc.

References eostools::cat(), corr, Exception, and smearings_.

Referenced by readSmearingsFromFile(), and ~EnergyScaleCorrection().

186  {
187  CorrectionCategory cat(category);
188 
189  auto res = std::equal_range(smearings_.begin(), smearings_.end(), cat, Sorter<CorrectionCategory, SmearCorrection>());
190 
191  if (res.first != res.second) {
192  throw cms::Exception("EnergyScaleCorrection") << "Smearing category already defined " << cat;
193  }
194 
195  SmearCorrection corr(rho, errRho, phi, errPhi, eMean, errEMean);
196  smearings_.push_back({cat, corr});
197  std::sort(smearings_.begin(), smearings_.end(), Sorter<CorrectionCategory, SmearCorrection>());
198 }
Definition: Electron.h:6
def cat(path)
Definition: eostools.py:401
std::vector< std::pair< CorrectionCategory, SmearCorrection > > smearings_
JetCorrectorParameters corr
Definition: classes.h:5
const EnergyScaleCorrection::ScaleCorrection * EnergyScaleCorrection::getScaleCorr ( unsigned int  runnr,
double  et,
double  eta,
double  r9,
unsigned int  gainSeed 
) const

Definition at line 77 of file EnergyScaleCorrection.cc.

References taus_updatedMVAIds_cff::category, SoftLeptonByDistance_cfi::distance, Exception, mps_fire::result, and scales_.

Referenced by PhotonEnergyCalibrator::calibrate(), ElectronEnergyCalibrator::calibrate(), scaleCorr(), scaleCorrUncert(), and ~EnergyScaleCorrection().

78  {
79  // buld the category based on the values of the object
80  CorrectionCategory category(runnr, et, eta, r9, gainSeed);
81  auto result =
82  std::equal_range(scales_.begin(), scales_.end(), category, Sorter<CorrectionCategory, ScaleCorrection>());
83  auto nrFound = std::distance(result.first, result.second);
84  if (nrFound == 0) {
85  edm::LogInfo("EnergyScaleCorrection")
86  << "Scale category not found: " << category << " Returning uncorrected value.";
87  return nullptr;
88  } else if (nrFound > 1) {
89  std::ostringstream foundCats;
90  for (auto it = result.first; it != result.second; ++it) {
91  foundCats << " " << it->first << std::endl;
92  }
93  throw cms::Exception("ConfigError") << " scale error category " << category << " has " << nrFound << " entries "
94  << std::endl
95  << foundCats.str();
96  }
97  //validate the result, just to be sure
98  if (!result.first->first.inCategory(runnr, et, eta, r9, gainSeed)) {
99  throw cms::Exception("LogicError") << " error found scale category " << result.first->first
100  << " that does not contain run " << runnr << " et " << et << " eta " << eta
101  << " r9 " << r9 << " gain seed " << gainSeed;
102  }
103  return &result.first->second;
104 }
et
define resolution functions of each parameter
std::vector< std::pair< CorrectionCategory, ScaleCorrection > > scales_
const EnergyScaleCorrection::SmearCorrection * EnergyScaleCorrection::getSmearCorr ( unsigned int  runnr,
double  et,
double  eta,
double  r9,
unsigned int  gainSeed 
) const

Definition at line 106 of file EnergyScaleCorrection.cc.

References taus_updatedMVAIds_cff::category, SoftLeptonByDistance_cfi::distance, Exception, mps_fire::result, and smearings_.

Referenced by PhotonEnergyCalibrator::calibrate(), ElectronEnergyCalibrator::calibrate(), smearingSigma(), and ~EnergyScaleCorrection().

107  {
108  // buld the category based on the values of the object
109  CorrectionCategory category(runnr, et, eta, r9, gainSeed);
110  auto result =
111  std::equal_range(smearings_.begin(), smearings_.end(), category, Sorter<CorrectionCategory, SmearCorrection>());
112  auto nrFound = std::distance(result.first, result.second);
113  if (nrFound == 0) {
114  edm::LogInfo("EnergyScaleCorrection")
115  << "Smear category not found: " << category << " Returning uncorrected value.";
116  return nullptr;
117  } else if (nrFound > 1) {
118  std::ostringstream foundCats;
119  for (auto it = result.first; it != result.second; ++it) {
120  foundCats << " " << it->first << std::endl;
121  }
122  throw cms::Exception("ConfigError") << " error smear category " << category << " has " << nrFound << " entries "
123  << std::endl
124  << foundCats.str();
125  }
126  //validate the result, just to be sure
127  if (!result.first->first.inCategory(runnr, et, eta, r9, gainSeed)) {
128  throw cms::Exception("LogicError") << " error found smear category " << result.first->first
129  << " that does not contain run " << runnr << " et " << et << " eta " << eta
130  << " r9 " << r9 << " gain seed " << gainSeed;
131  }
132  return &result.first->second;
133 }
std::vector< std::pair< CorrectionCategory, SmearCorrection > > smearings_
et
define resolution functions of each parameter
void EnergyScaleCorrection::readScalesFromFile ( const std::string &  filename)
private

< Min eta value for the bin

< Max eta value for the bin

< Min R9 vaule for the bin

< Max R9 value for the bin

< Min Et value for the bin

< Max Et value for the bin

< 12, 6, 1, 61 (double gain switch)

Definition at line 208 of file EnergyScaleCorrection.cc.

References addScale(), taus_updatedMVAIds_cff::category, SoftLeptonByDistance_cfi::distance, ALCARECOTkAlBeamHalo_cff::etaMax, ALCARECOTkAlBeamHalo_cff::etaMin, conversionPostprocessing_cfi::etMax, btagDijet_cfi::etMin, Exception, FrontierConditions_GlobalTag_cff::file, muonCSCDigis_cfi::gain, mps_splice::line, hgcalPlots::ncols, photonValidator_cfi::r9Max, photonValidator_cfi::r9Min, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by EnergyScaleCorrection(), and ~EnergyScaleCorrection().

208  {
209  std::ifstream file(edm::FileInPath(filename).fullPath().c_str());
210 
211  if (!file.good()) {
212  throw cms::Exception("EnergyScaleCorrection") << "file " << filename << " not readable.";
213  }
214 
215  int runMin, runMax;
216  std::string category, region2;
217  double energyScale, energyScaleErr, energyScaleErrStat, energyScaleErrSyst, energyScaleErrGain;
218 
219  double etaMin;
220  double etaMax;
221  double r9Min;
222  double r9Max;
223  double etMin;
224  double etMax;
225  unsigned int gain;
226 
227  // TO count the #columns in that txt file and decide based on that the version to read
229  std::stringstream stream;
230  getline(file, line);
231  stream.clear();
232  stream << line;
233 
234  int ncols = std::distance(std::istream_iterator<std::string>(stream), std::istream_iterator<std::string>());
235 
236  file.seekg(0, std::ios::beg);
237 
238  if (ncols == 9) {
239  for (file >> category; file.good(); file >> category) {
240  file >> region2 >> runMin >> runMax >> energyScale >> energyScaleErr >> energyScaleErrStat >>
241  energyScaleErrSyst >> energyScaleErrGain;
242  addScale(category, runMin, runMax, energyScale, energyScaleErrStat, energyScaleErrSyst, energyScaleErrGain);
243  }
244  } else {
245  if (file.peek() == 'r')
246  file.ignore(1000, 10);
247 
248  for (file >> runMin; file.good(); file >> runMin) {
249  file >> runMax >> etaMin >> etaMax >> r9Min >> r9Max >> etMin >> etMax >> gain >> energyScale >> energyScaleErr;
250  file.ignore(1000, 10);
251  energyScaleErrStat = energyScaleErr;
252  energyScaleErrSyst = 0;
253  energyScaleErrGain = 0;
254 
255  addScale(runMin,
256  runMax,
257  etaMin,
258  etaMax,
259  r9Min,
260  r9Max,
261  etMin,
262  etMax,
263  gain,
264  energyScale,
265  energyScaleErrStat,
266  energyScaleErrSyst,
267  energyScaleErrGain);
268  }
269  }
270 
271  file.close();
272  return;
273 }
void addScale(const std::string &category, int runMin, int runMax, double deltaP, double errDeltaP, double errSystDeltaP, double errDeltaPGain)
void EnergyScaleCorrection::readSmearingsFromFile ( const std::string &  filename)
private

Definition at line 276 of file EnergyScaleCorrection.cc.

References addSmearing(), taus_updatedMVAIds_cff::category, ECALELF, ALCARECOTkAlBeamHalo_cff::etaMax, ALCARECOTkAlBeamHalo_cff::etaMin, Exception, FrontierConditions_GlobalTag_cff::file, GLOBE, M_PI_2, phi, photonValidator_cfi::r9Max, photonValidator_cfi::r9Min, rho, smearingType_, AlCaHLTBitMon_QueryRunRegistry::string, and UNKNOWN.

Referenced by EnergyScaleCorrection(), and ~EnergyScaleCorrection().

276  {
277  std::ifstream file(edm::FileInPath(filename).fullPath().c_str());
278  if (!file.good()) {
279  throw cms::Exception("EnergyScaleCorrection") << "file " << filename << " not readable";
280  }
281 
282  int runMin = 0;
283  int runMax = 900000;
284  int unused = 0;
285  std::string category, region2;
286  double rho, phi, eMean, errRho, errPhi, errEMean;
287  double etaMin, etaMax, r9Min, r9Max;
288  std::string phiString, errPhiString;
289 
290  while (file.peek() != EOF && file.good()) {
291  if (file.peek() == 10) { // 10 = \n
292  file.get();
293  continue;
294  }
295 
296  if (file.peek() == 35) { // 35 = #
297  file.ignore(1000, 10); // ignore the rest of the line until \n
298  continue;
299  }
300 
301  if (smearingType_ == UNKNOWN) { // trying to guess: not recommended
302  throw cms::Exception("ConfigError") << "unknown smearing type";
303 
304  } else if (smearingType_ == GLOBE) {
305  file >> category >> unused >> etaMin >> etaMax >> r9Min >> r9Max >> runMin >> runMax >> eMean >> errEMean >>
306  rho >> errRho >> phi >> errPhi;
307 
308  addSmearing(category, runMin, runMax, rho, errRho, phi, errPhi, eMean, errEMean);
309 
310  } else if (smearingType_ == ECALELF) {
311  file >> category >> eMean >> errEMean >> rho >> errRho >> phiString >> errPhiString;
312 
313  if (phiString == "M_PI_2")
314  phi = M_PI_2;
315  else
316  phi = std::stod(phiString);
317 
318  if (errPhiString == "M_PI_2")
319  errPhi = M_PI_2;
320  else
321  errPhi = std::stod(errPhiString);
322 
323  addSmearing(category, runMin, runMax, rho, errRho, phi, errPhi, eMean, errEMean);
324 
325  } else {
326  file >> category >> rho >> phi;
327  errRho = errPhi = eMean = errEMean = 0;
328  addSmearing(category, runMin, runMax, rho, errRho, phi, errPhi, eMean, errEMean);
329  }
330  }
331 
332  file.close();
333  return;
334 }
#define M_PI_2
void addSmearing(const std::string &category, int runMin, int runMax, double rho, double errRho, double phi, double errPhi, double eMean, double errEMean)
float EnergyScaleCorrection::scaleCorr ( unsigned int  runnr,
double  et,
double  eta,
double  r9,
unsigned int  gainSeed = 12,
std::bitset< kErrNrBits uncBitMask = kErrNone 
) const

Definition at line 32 of file EnergyScaleCorrection.cc.

References getScaleCorr(), kDefaultScaleVal_, and EnergyScaleCorrection::ScaleCorrection::scale().

Referenced by scaleCorrUncert(), and ~EnergyScaleCorrection().

37  {
38  const ScaleCorrection* scaleCorr = getScaleCorr(runNumber, et, eta, r9, gainSeed);
39  if (scaleCorr != nullptr)
40  return scaleCorr->scale();
41  else
42  return kDefaultScaleVal_;
43 }
const ScaleCorrection * getScaleCorr(unsigned int runnr, double et, double eta, double r9, unsigned int gainSeed) const
static constexpr float kDefaultScaleVal_
et
define resolution functions of each parameter
float scaleCorr(unsigned int runnr, double et, double eta, double r9, unsigned int gainSeed=12, std::bitset< kErrNrBits > uncBitMask=kErrNone) const
float EnergyScaleCorrection::scaleCorrUncert ( unsigned int  runnr,
double  et,
double  eta,
double  r9,
unsigned int  gainSeed,
std::bitset< kErrNrBits uncBitMask = kErrNone 
) const

Definition at line 45 of file EnergyScaleCorrection.cc.

References getScaleCorr(), scaleCorr(), and EnergyScaleCorrection::ScaleCorrection::scaleErr().

Referenced by ~EnergyScaleCorrection().

50  {
51  const ScaleCorrection* scaleCorr = getScaleCorr(runNumber, et, eta, r9, gainSeed);
52  if (scaleCorr != nullptr)
53  return scaleCorr->scaleErr(uncBitMask);
54  else
55  return 0.;
56 }
const ScaleCorrection * getScaleCorr(unsigned int runnr, double et, double eta, double r9, unsigned int gainSeed) const
et
define resolution functions of each parameter
float scaleCorr(unsigned int runnr, double et, double eta, double r9, unsigned int gainSeed=12, std::bitset< kErrNrBits > uncBitMask=kErrNone) const
void EnergyScaleCorrection::setSmearingType ( FileFormat  value)

Definition at line 200 of file EnergyScaleCorrection.cc.

References smearingType_, UNKNOWN, and relativeConstraints::value.

Referenced by ~EnergyScaleCorrection().

200  {
201  if (value <= 1) {
203  } else {
205  }
206 }
Definition: value.py:1
float EnergyScaleCorrection::smearingSigma ( int  runnr,
double  et,
double  eta,
double  r9,
unsigned int  gainSeed,
ParamSmear  par,
float  nSigma = 0. 
) const

Definition at line 58 of file EnergyScaleCorrection.cc.

References kPhi, and kRho.

Referenced by ~EnergyScaleCorrection().

59  {
60  if (par == kRho)
61  return smearingSigma(runnr, et, eta, r9, gainSeed, nSigma, 0.);
62  if (par == kPhi)
63  return smearingSigma(runnr, et, eta, r9, gainSeed, 0., nSigma);
64  return smearingSigma(runnr, et, eta, r9, gainSeed, 0., 0.);
65 }
float smearingSigma(int runnr, double et, double eta, double r9, unsigned int gainSeed, ParamSmear par, float nSigma=0.) const
et
define resolution functions of each parameter
float EnergyScaleCorrection::smearingSigma ( int  runnr,
double  et,
double  eta,
double  r9,
unsigned int  gainSeed,
float  nSigmaRho,
float  nSigmaPhi 
) const

Definition at line 67 of file EnergyScaleCorrection.cc.

References getSmearCorr(), kDefaultSmearVal_, and EnergyScaleCorrection::SmearCorrection::sigma().

68  {
69  const SmearCorrection* smearCorr = getSmearCorr(runnr, et, eta, r9, gainSeed);
70 
71  if (smearCorr != nullptr)
72  return smearCorr->sigma(nrSigmaRho, nrSigmaPhi);
73  else
74  return kDefaultSmearVal_;
75 }
static constexpr float kDefaultSmearVal_
const SmearCorrection * getSmearCorr(unsigned int runnr, double et, double eta, double r9, unsigned int gainSeed) const
et
define resolution functions of each parameter

Member Data Documentation

constexpr float EnergyScaleCorrection::kDefaultScaleVal_ = 1.0
staticprivate

Definition at line 191 of file EnergyScaleCorrection.h.

Referenced by scaleCorr().

constexpr float EnergyScaleCorrection::kDefaultSmearVal_ = 0.0
staticprivate

Definition at line 192 of file EnergyScaleCorrection.h.

Referenced by smearingSigma().

std::vector<std::pair<CorrectionCategory, ScaleCorrection> > EnergyScaleCorrection::scales_
private

Definition at line 196 of file EnergyScaleCorrection.h.

Referenced by addScale(), EnergyScaleCorrection(), and getScaleCorr().

std::vector<std::pair<CorrectionCategory, SmearCorrection> > EnergyScaleCorrection::smearings_
private

Definition at line 197 of file EnergyScaleCorrection.h.

Referenced by addSmearing(), EnergyScaleCorrection(), and getSmearCorr().

FileFormat EnergyScaleCorrection::smearingType_
private

Definition at line 195 of file EnergyScaleCorrection.h.

Referenced by readSmearingsFromFile(), and setSmearingType().