CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Static Public Attributes | Private Member Functions | Private Attributes
pat::JetCorrFactors Class Reference

Class for the storage of jet correction factors. More...

#include "DataFormats/PatCandidates/interface/JetCorrFactors.h"

Public Types

typedef std::pair< std::string,
std::vector< float > > 
CorrectionFactor
 
enum  Flavor {
  GLUON, UDS, CHARM, BOTTOM,
  NONE
}
 

Public Member Functions

float correction (unsigned int level, Flavor flavor=NONE) const
 
std::string correctionLabel (unsigned int level) const
 
std::vector< std::string > correctionLabels () const
 
std::string correctionLabelString () const
 
bool flavorDependent (unsigned int level) const
 
std::string jecFlavor (const Flavor &flavor) const
 
Flavor jecFlavor (std::string flavor) const
 
std::string jecLevel (const unsigned int &level) const
 
int jecLevel (const std::string &level) const
 
std::string jecSet () const
 
 JetCorrFactors ()
 
 JetCorrFactors (const std::string &label, const std::vector< CorrectionFactor > &jec)
 
unsigned int numberOfCorrectionLevels () const
 
void print () const
 

Static Public Attributes

static const unsigned int MAX_FLAVORS = 4
 

Private Member Functions

bool flavorDependent (const CorrectionFactor &jec) const
 
bool flavorIndependent (const CorrectionFactor &jec) const
 
bool isValid (const CorrectionFactor &jec) const
 

Private Attributes

std::vector< CorrectionFactorjec_
 
std::string label_
 

Detailed Description

Class for the storage of jet correction factors.

Class for the storage of jet correction factors that have been calculated during pat tuple production. The class is created to deal with a flexible number and order of the JES correction factors, which are expected to be nested. I.e. each correction level implies that all previous correction have been applied in advance. This scheme corresponds to the jet energy correction scheme propagated by the JetMET PAG. In dividual levels of JEC are safed as CorrectionFactor, which is a

std::pair<std::string, std::vector<float> >.

The std::string contains a human readable label indicating the corection level, the std::vector<float> contains the JEC factors, which are expected to have a length of 1 or 5. In this scheme the vector of length 1 is reserved for flavor independent CorrectionFactors, while the vector of length 5 corresponds to flavor dependent CorrectionFactors. The individual positions within the vector are expected to be distributed according to the Flavor enumerator of the class as:

GLUON, UDS, CHARM, BOTTOM, NONE

The structure is checked in the constructor of the class. The function correction returns potentially flavor dependent correction factor of the JES relative to an uncorrected jet. To move from one correction level to another correction level the initial correction level of the jet need to be uncorrected before applying the final correction factor. The class is expected to be used from within the pat::Jet only, this is taken care of automatically.

Definition at line 37 of file JetCorrFactors.h.

Member Typedef Documentation

typedef std::pair<std::string, std::vector<float> > pat::JetCorrFactors::CorrectionFactor

Definition at line 45 of file JetCorrFactors.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

pat::JetCorrFactors::JetCorrFactors ( )
inline

Definition at line 53 of file JetCorrFactors.h.

53 {};
JetCorrFactors::JetCorrFactors ( const std::string &  label,
const std::vector< CorrectionFactor > &  jec 
)

Definition at line 14 of file JetCorrFactors.cc.

References Exception, and isValid().

14  : label_(label), jec_(jec)
15 {
16  for(std::vector<CorrectionFactor>::const_iterator corrFactor=jec.begin(); corrFactor!=jec.end(); ++corrFactor){
17  if(!isValid(*corrFactor)){
18  throw cms::Exception("InvalidRequest") << "You try to create a CorrectionFactor which is neither flavor dependent nor \n"
19  << "flavor independent. The CorrectionFactor should obey the following rules: \n"
20  << "\n"
21  << " * CorrectionFactor is a std::pair<std::string, std::vector<float> >. \n"
22  << " * The std::string holds the label of the correction level (following the \n"
23  << " conventions of JetMET. \n"
24  << " * The std::vector<float> holds the correction factors, these factors are \n"
25  << " up to the given level. They include all previous correction steps. \n"
26  << " * The vector has the length *1* for flavor independent correction factors \n"
27  << " or *5* for flavor dependent correction factors. \n"
28  << " * The expected order of flavor dependent correction factors is: NONE, \n"
29  << " GLUON, UDS, CHARM, BOTTOM. If follows the JetMET conventions and is \n"
30  << " in the Flavor enumerator of the JetCorrFactos class. \n"
31  << " * For flavor depdendent correction factors the first entry in the vector \n"
32  << " (corresponding to NONE) is invalid and should be set to -1. It will not \n"
33  << " be considered by the class structure though. \n"
34  << "\n"
35  << "Make sure that all elements of the argument vector to this contructor are \n"
36  << "in accordance with these rules.\n";
37  }
38  }
39 }
std::vector< CorrectionFactor > jec_
bool isValid(const CorrectionFactor &jec) const

Member Function Documentation

float JetCorrFactors::correction ( unsigned int  level,
Flavor  flavor = NONE 
) const

Definition at line 72 of file JetCorrFactors.cc.

References correctionLabelString(), Exception, flavorDependent(), jec_, and NONE.

Referenced by print().

73 {
74  if(!(level<jec_.size())){
75  throw cms::Exception("InvalidRequest") << "You try to call a jet energy correction level wich does not exist. \n"
76  << "Available jet energy correction levels are: \n"
78  }
79  if(flavorDependent(jec_.at(level)) && flavor==NONE){
80  throw cms::Exception("InvalidRequest") << "You try to call a flavor dependent jet energy correction level: \n"
81  << "level : " << level << " label: " << jec_.at(level).first << " \n"
82  << "You need to specify one of the following flavors: GLUON, UDS, \n"
83  << "CHARM, BOTTOM. \n";
84  }
85  return flavorDependent(jec_.at(level)) ? jec_.at(level).second.at(flavor) : jec_.at(level).second.at(0);
86 }
std::vector< CorrectionFactor > jec_
std::string correctionLabelString() const
bool flavorDependent(unsigned int level) const
tuple level
Definition: testEve_cfg.py:34
std::string pat::JetCorrFactors::correctionLabel ( unsigned int  level) const
inline

Definition at line 75 of file JetCorrFactors.h.

References jec_, and AlCaHLTBitMon_QueryRunRegistry::string.

75 { return (level<jec_.size() ? jec_.at(level).first : std::string("ERROR")); };
std::vector< CorrectionFactor > jec_
tuple level
Definition: testEve_cfg.py:34
std::vector< std::string > JetCorrFactors::correctionLabels ( ) const

Definition at line 100 of file JetCorrFactors.cc.

References jec_, and HLT_25ns14e33_v1_cff::labels.

101 {
102  std::vector<std::string> labels;
103  for(std::vector<CorrectionFactor>::const_iterator corrFactor=jec_.begin(); corrFactor!=jec_.end(); ++corrFactor){
104  labels.push_back(corrFactor->first);
105  }
106  return labels;
107 }
std::vector< CorrectionFactor > jec_
std::string JetCorrFactors::correctionLabelString ( ) const

Definition at line 89 of file JetCorrFactors.cc.

References python.multivaluedict::append(), customizeTrackingMonitorSeedNumber::idx, jec_, HLT_25ns14e33_v1_cff::labels, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by correction().

90 {
92  for(std::vector<CorrectionFactor>::const_iterator corrFactor=jec_.begin(); corrFactor!=jec_.end(); ++corrFactor){
93  std::stringstream idx; idx << (corrFactor-jec_.begin());
94  labels.append(idx.str()).append(" ").append(corrFactor->first).append("\n");
95  }
96  return labels;
97 }
std::vector< CorrectionFactor > jec_
tuple idx
DEBUGGING if hasattr(process,&quot;trackMonIterativeTracking2012&quot;): print &quot;trackMonIterativeTracking2012 D...
bool pat::JetCorrFactors::flavorDependent ( unsigned int  level) const
inline

Definition at line 77 of file JetCorrFactors.h.

References jec_, and MAX_FLAVORS.

Referenced by correction(), isValid(), and print().

77 { return (level<jec_.size() ? jec_.at(level).second.size()==MAX_FLAVORS : false); };
std::vector< CorrectionFactor > jec_
static const unsigned int MAX_FLAVORS
tuple level
Definition: testEve_cfg.py:34
bool pat::JetCorrFactors::flavorDependent ( const CorrectionFactor jec) const
inlineprivate

Definition at line 85 of file JetCorrFactors.h.

References MAX_FLAVORS.

85 { return (jec.second.size()==MAX_FLAVORS); }
static const unsigned int MAX_FLAVORS
bool pat::JetCorrFactors::flavorIndependent ( const CorrectionFactor jec) const
inlineprivate

Definition at line 87 of file JetCorrFactors.h.

Referenced by isValid().

87 { return (jec.second.size()==1); }
bool pat::JetCorrFactors::isValid ( const CorrectionFactor jec) const
inlineprivate

Definition at line 89 of file JetCorrFactors.h.

References flavorDependent(), and flavorIndependent().

Referenced by JetCorrFactors(), and core.AutoHandle.AutoHandle::ReallyLoad().

89 { return (flavorDependent(jec) || flavorIndependent(jec)); }
bool flavorIndependent(const CorrectionFactor &jec) const
bool flavorDependent(unsigned int level) const
std::string JetCorrFactors::jecFlavor ( const Flavor flavor) const

Definition at line 42 of file JetCorrFactors.cc.

References BOTTOM, CHARM, GLUON, NONE, and UDS.

43 {
44  std::map<Flavor, std::string> flavors;
45  flavors[UDS]="uds"; flavors[CHARM]="charm"; flavors[BOTTOM]="bottom"; flavors[GLUON]="gluon"; flavors[NONE]="none";
46  return flavors.find(flavor)->second;
47 }
JetCorrFactors::Flavor JetCorrFactors::jecFlavor ( std::string  flavor) const

Definition at line 50 of file JetCorrFactors.cc.

References BOTTOM, CHARM, Exception, GLUON, NONE, create_public_lumi_plots::transform, and UDS.

51 {
52  std::map<std::string, Flavor> flavors;
53  std::transform(flavor.begin(), flavor.end(), flavor.begin(), std::ptr_fun<int,int>(std::tolower));
54  flavors["uds"]=UDS; flavors["charm"]=CHARM; flavors["bottom"]=BOTTOM; flavors["gluon"]=GLUON; flavors["none"]=NONE;
55  if(flavors.find(flavor)==flavors.end()){
56  throw cms::Exception("InvalidRequest") << "You ask for a flavor, which does not exist. Available flavors are: \n"
57  << "'uds', 'charm', 'bottom', 'gluon', 'none', (not case sensitive). \n";
58  }
59  return flavors.find(flavor)->second;
60 }
std::string pat::JetCorrFactors::jecLevel ( const unsigned int &  level) const
inline

Definition at line 60 of file JetCorrFactors.h.

References jec_.

60 { return jec_.at(level).first; };
std::vector< CorrectionFactor > jec_
tuple level
Definition: testEve_cfg.py:34
int JetCorrFactors::jecLevel ( const std::string &  level) const

Definition at line 63 of file JetCorrFactors.cc.

References jec_.

64 {
65  for(std::vector<CorrectionFactor>::const_iterator corrFactor=jec_.begin(); corrFactor!=jec_.end(); ++corrFactor){
66  if(corrFactor->first==level) return (corrFactor-jec_.begin());
67  }
68  return -1;
69 }
std::vector< CorrectionFactor > jec_
tuple level
Definition: testEve_cfg.py:34
std::string pat::JetCorrFactors::jecSet ( ) const
inline

Definition at line 58 of file JetCorrFactors.h.

References label_.

58 { return label_; }
unsigned int pat::JetCorrFactors::numberOfCorrectionLevels ( ) const
inline

Definition at line 79 of file JetCorrFactors.h.

References jec_.

79 { return jec_.size(); };
std::vector< CorrectionFactor > jec_
void JetCorrFactors::print ( void  ) const

Definition at line 110 of file JetCorrFactors.cc.

References correction(), flavorDependent(), jec_, python.rootplot.argparse::message, and NONE.

111 {
112  edm::LogInfo message( "JetCorrFactors" );
113  for(std::vector<CorrectionFactor>::const_iterator corrFactor=jec_.begin(); corrFactor!=jec_.end(); ++corrFactor){
114  unsigned int corrFactorIdx=corrFactor-jec_.begin();
115  message << std::setw(3) << corrFactorIdx << " " << corrFactor->first;
116  if( flavorDependent(*corrFactor) ){
117  for(std::vector<float>::const_iterator flavor=corrFactor->second.begin(); flavor!=corrFactor->second.end(); ++flavor){
118  unsigned int flavorIdx=flavor-corrFactor->second.begin();
119  message << std::setw(10) << correction(corrFactorIdx, (Flavor)flavorIdx);
120  }
121  }
122  else{
123  message << std::setw(10) << correction (corrFactor-jec_.begin(), NONE);
124  }
125  message << "\n";
126  }
127 }
float correction(unsigned int level, Flavor flavor=NONE) const
std::vector< CorrectionFactor > jec_
bool flavorDependent(unsigned int level) const

Member Data Documentation

std::vector<CorrectionFactor> pat::JetCorrFactors::jec_
private
std::string pat::JetCorrFactors::label_
private
const unsigned int pat::JetCorrFactors::MAX_FLAVORS = 4
static

Definition at line 49 of file JetCorrFactors.h.

Referenced by flavorDependent().