CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
METCorrectionAlgorithm.h
Go to the documentation of this file.
1 #ifndef JetMETCorrections_Type1MET_METCorrectionAlgorithm_h
2 #define JetMETCorrections_Type1MET_METCorrectionAlgorithm_h
3 
25 
27 
28 #include <TFormula.h>
29 
30 #include <vector>
31 
33 {
34  public:
35 
36  explicit METCorrectionAlgorithm(const edm::ParameterSet&, edm::ConsumesCollector && iConsumesCollector);
38 
40 
41  private:
42 
43  typedef std::vector<edm::InputTag> vInputTag;
44 
45  std::vector<edm::EDGetTokenT<CorrMETData> > chsSumTokens_;
46  std::vector<edm::EDGetTokenT<CorrMETData> > type1Tokens_;
47 
51 
52  double type0Rsoft_;
53  double type0Cuncl_;
54 
55  typedef std::vector<std::string> vstring;
57  {
58  type2BinningEntryType(const std::string& binCorrformula, const edm::ParameterSet& binCorrParameter, const vInputTag& srcUnclEnergySums, edm::ConsumesCollector & iConsumesCollector)
59  : binLabel_(""),
61  {
62  for (vInputTag::const_iterator inputTag = srcUnclEnergySums.begin(); inputTag != srcUnclEnergySums.end(); ++inputTag)
63  {
64  corrTokens_.push_back(iConsumesCollector.consumes<CorrMETData>(*inputTag));
65  }
66 
67  initialize(binCorrformula, binCorrParameter);
68  }
69  type2BinningEntryType(const edm::ParameterSet& cfg, const vInputTag& srcUnclEnergySums, edm::ConsumesCollector & iConsumesCollector)
70  : binLabel_(cfg.getParameter<std::string>("binLabel")),
72  {
73  for ( vInputTag::const_iterator srcUnclEnergySum = srcUnclEnergySums.begin();
74  srcUnclEnergySum != srcUnclEnergySums.end(); ++srcUnclEnergySum )
75  {
76  std::string instanceLabel = srcUnclEnergySum->instance();
77  if ( instanceLabel != "" && binLabel_ != "" ) instanceLabel.append("#");
78  instanceLabel.append(binLabel_);
79  edm::InputTag inputTag(srcUnclEnergySum->label(), instanceLabel);
80  corrTokens_.push_back(iConsumesCollector.consumes<CorrMETData>(inputTag));
81  }
82 
83  std::string binCorrFormula = cfg.getParameter<std::string>("binCorrFormula").data();
84 
85  edm::ParameterSet binCorrParameter = cfg.getParameter<edm::ParameterSet>("binCorrParameter");
86 
87  initialize(binCorrFormula, binCorrParameter);
88  }
89  void initialize(const std::string& binCorrFormula, const edm::ParameterSet& binCorrParameter)
90  {
91  TString formula = binCorrFormula;
92 
93  vstring parNames = binCorrParameter.getParameterNamesForType<double>();
94  int numParameter = parNames.size();
95  binCorrParameter_.resize(numParameter);
96  for ( int parIndex = 0; parIndex < numParameter; ++parIndex ) {
97  const std::string& parName = parNames[parIndex].data();
98 
99  double parValue = binCorrParameter.getParameter<double>(parName);
100  binCorrParameter_[parIndex] = parValue;
101 
102  TString parName_internal = Form("[%i]", parIndex);
103  formula = formula.ReplaceAll(parName.data(), parName_internal);
104  }
105 
106  std::string binCorrFormulaName = std::string("binCorrFormula").append("_").append(binLabel_);
107  binCorrFormula_ = new TFormula(binCorrFormulaName.data(), formula);
108 
109 //--- check that syntax of formula string is valid
110 // (i.e. that TFormula "compiled" without errors)
111  if ( !(binCorrFormula_->GetNdim() <= 1 && binCorrFormula_->GetNpar() == numParameter) )
112  throw cms::Exception("METCorrectionAlgorithm")
113  << "Formula for Type 2 correction has invalid syntax = " << formula << " !!\n";
114 
115  for ( int parIndex = 0; parIndex < numParameter; ++parIndex ) {
116  binCorrFormula_->SetParameter(parIndex, binCorrParameter_[parIndex]);
117  binCorrFormula_->SetParName(parIndex, parNames[parIndex].data());
118  }
119  }
121  {
122  delete binCorrFormula_;
123  }
125  std::vector<edm::EDGetTokenT<CorrMETData> > corrTokens_;
126  TFormula* binCorrFormula_;
127  std::vector<double> binCorrParameter_;
128  };
129  std::vector<type2BinningEntryType*> type2Binning_;
130 };
131 
132 #endif
133 
134 
135 
136 
void initialize(const std::string &binCorrFormula, const edm::ParameterSet &binCorrParameter)
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
tuple cfg
Definition: looper.py:293
CorrMETData compMETCorrection(edm::Event &, const edm::EventSetup &)
std::vector< std::string > vstring
METCorrectionAlgorithm(const edm::ParameterSet &, edm::ConsumesCollector &&iConsumesCollector)
type2BinningEntryType(const edm::ParameterSet &cfg, const vInputTag &srcUnclEnergySums, edm::ConsumesCollector &iConsumesCollector)
std::vector< edm::InputTag > vInputTag
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
Definition: ParameterSet.h:194
std::vector< edm::EDGetTokenT< CorrMETData > > corrTokens_
std::vector< edm::EDGetTokenT< CorrMETData > > chsSumTokens_
std::vector< type2BinningEntryType * > type2Binning_
std::vector< edm::EDGetTokenT< CorrMETData > > type1Tokens_
type2BinningEntryType(const std::string &binCorrformula, const edm::ParameterSet &binCorrParameter, const vInputTag &srcUnclEnergySums, edm::ConsumesCollector &iConsumesCollector)
a MET correction term
Definition: CorrMETData.h:14
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82