16 for(std::vector<CorrectionFactor>::const_iterator corrFactor=jec.begin(); corrFactor!=jec.end(); ++corrFactor){
31 std::map<Flavor, std::string> flavors;
32 flavors[
UDS]=
"uds"; flavors[
CHARM]=
"charm"; flavors[
BOTTOM]=
"bottom"; flavors[
GLUON]=
"gluon"; flavors[
NONE]=
"none";
33 return flavors.find(flavor)->second;
39 std::map<std::string, Flavor> flavors;
40 std::transform(flavor.begin(), flavor.end(), flavor.begin(), [&](
int c){
return std::tolower(
c);} );
41 flavors[
"uds"]=
UDS; flavors[
"charm"]=
CHARM; flavors[
"bottom"]=
BOTTOM; flavors[
"gluon"]=
GLUON; flavors[
"none"]=
NONE;
42 if(flavors.find(flavor)==flavors.end()){
43 throw cms::Exception(
"InvalidRequest") <<
"You ask for a flavor, which does not exist. Available flavors are: \n" 44 <<
"'uds', 'charm', 'bottom', 'gluon', 'none', (not case sensitive). \n";
46 return flavors.find(flavor)->second;
52 for(std::vector<CorrectionFactor>::const_iterator corrFactor=
jec_.begin(); corrFactor!=
jec_.end(); ++corrFactor){
53 if(corrFactor->first==level)
return (corrFactor-
jec_.begin());
61 if(!(level<
jec_.size())){
62 throw cms::Exception(
"InvalidRequest") <<
"You try to call a jet energy correction level wich does not exist. \n" 63 <<
"Available jet energy correction levels are: \n" 67 throw cms::Exception(
"InvalidRequest") <<
"You try to call a flavor dependent jet energy correction level: \n" 68 <<
"level : " << level <<
" label: " <<
jec_.at(level).first <<
" \n" 69 <<
"You need to specify one of the following flavors: GLUON, UDS, \n" 70 <<
"CHARM, BOTTOM. \n";
79 for(std::vector<CorrectionFactor>::const_iterator corrFactor=
jec_.begin(); corrFactor!=
jec_.end(); ++corrFactor){
80 std::stringstream
idx; idx << (corrFactor-
jec_.begin());
81 labels.append(idx.str()).
append(
" ").append(corrFactor->first).append(
"\n");
86 std::vector<std::string>
89 std::vector<std::string>
labels;
90 for(std::vector<CorrectionFactor>::const_iterator corrFactor=
jec_.begin(); corrFactor!=
jec_.end(); ++corrFactor){
91 labels.push_back(corrFactor->first);
100 for(std::vector<CorrectionFactor>::const_iterator corrFactor=
jec_.begin(); corrFactor!=
jec_.end(); ++corrFactor){
101 unsigned int corrFactorIdx=corrFactor-
jec_.begin();
102 message << std::setw(3) << corrFactorIdx <<
" " << corrFactor->first;
104 for(std::vector<float>::const_iterator flavor=corrFactor->second.begin(); flavor!=corrFactor->second.end(); ++flavor){
105 unsigned int flavorIdx=flavor-corrFactor->second.begin();
118 <<
"You try to create a CorrectionFactor which is neither flavor dependent nor \n" 119 <<
"flavor independent. The CorrectionFactor should obey the following rules: \n" 121 <<
" * CorrectionFactor is a std::pair<std::string, std::vector<float> >. \n" 122 <<
" * The std::string holds the label of the correction level (following the \n" 123 <<
" conventions of JetMET. \n" 124 <<
" * The std::vector<float> holds the correction factors, these factors are \n" 125 <<
" up to the given level. They include all previous correction steps. \n" 126 <<
" * The vector has the length *1* for flavor independent correction factors \n" 127 <<
" or *5* for flavor dependent correction factors. \n" 128 <<
" * The expected order of flavor dependent correction factors is: NONE, \n" 129 <<
" GLUON, UDS, CHARM, BOTTOM. If follows the JetMET conventions and is \n" 130 <<
" in the Flavor enumerator of the JetCorrFactos class. \n" 131 <<
" * For flavor depdendent correction factors the first entry in the vector \n" 132 <<
" (corresponding to NONE) is invalid and should be set to -1. It will not \n" 133 <<
" be considered by the class structure though. \n" 135 <<
"Make sure that all elements of the argument vector to this contructor are \n" 136 <<
"in accordance with these rules.\n";
float correction(unsigned int level, Flavor flavor=NONE) const
std::vector< std::string > correctionLabels() const
std::string jecLevel(const unsigned int &level) const
std::vector< CorrectionFactor > jec_
void insertFactor(const unsigned int &position, const CorrectionFactor &factor)
std::string correctionLabelString() const
bool isValid(const CorrectionFactor &jec) const
std::pair< std::string, std::vector< float > > CorrectionFactor
std::string jecFlavor(const Flavor &flavor) const
void invalidFactor() const
static int position[264][3]
bool flavorDependent(unsigned int level) const