41 :
binLabel_(cfg.getParameter<std::string>(
"binLabel")),
44 for ( vInputTag::const_iterator srcUnclEnergySum = srcUnclEnergySums.begin();
45 srcUnclEnergySum != srcUnclEnergySums.end(); ++srcUnclEnergySum ) {
46 std::string instanceLabel = srcUnclEnergySum->instance();
47 if ( instanceLabel !=
"" &&
binLabel_ !=
"" ) instanceLabel.append(
"#");
52 std::string binCorrFormula = cfg.
getParameter<std::string>(
"binCorrFormula").
data();
60 TString
formula = binCorrFormula;
63 int numParameter = parNames.size();
65 for (
int parIndex = 0; parIndex < numParameter; ++parIndex ) {
66 const std::string& parName = parNames[parIndex].data();
68 double parValue = binCorrParameter.
getParameter<
double>(parName);
71 TString parName_internal = Form(
"[%i]", parIndex);
72 formula = formula.ReplaceAll(parName.data(), parName_internal);
75 std::string binCorrFormulaName = std::string(
"binCorrFormula").append(
"_").append(
binLabel_);
82 <<
"Formula for Type 2 correction has invalid syntax = " << formula <<
" !!\n";
84 for (
int parIndex = 0; parIndex < numParameter; ++parIndex ) {
109 if ( cfg.
exists(
"type2Binning") ) {
110 typedef std::vector<edm::ParameterSet> vParameterSet;
111 vParameterSet cfgType2Binning = cfg.
getParameter<vParameterSet>(
"type2Binning");
112 for ( vParameterSet::const_iterator cfgType2BinningEntry = cfgType2Binning.begin();
113 cfgType2BinningEntry != cfgType2Binning.end(); ++cfgType2BinningEntry ) {
117 std::string type2CorrFormula = cfg.
getParameter<std::string>(
"type2CorrFormula").
data();
121 produces<CorrMETData>(
"");
129 for ( std::vector<type2BinningEntryType*>::const_iterator type2BinningEntry =
type2Binning_.begin();
130 type2BinningEntry !=
type2Binning_.end(); ++type2BinningEntry ) {
132 for (vInputTag::const_iterator inputTag = (*type2BinningEntry)->srcUnclEnergySums_.begin();
133 inputTag != (*type2BinningEntry)->srcUnclEnergySums_.end(); ++inputTag) {
137 unclEnergySum += (*unclEnergySummand);
140 double unclEnergySumPt =
sqrt(unclEnergySum.
mex*unclEnergySum.
mex + unclEnergySum.
mey*unclEnergySum.
mey);
141 double unclEnergyScaleFactor = (*type2BinningEntry)->binCorrFormula_->Eval(unclEnergySumPt);
143 unclEnergySum.
mex = -unclEnergySum.
mex;
144 unclEnergySum.
mey = -unclEnergySum.
mey;
146 product += (unclEnergyScaleFactor - 1.)*unclEnergySum;
149 std::auto_ptr<CorrMETData> pprod(
new CorrMETData(product));
T getParameter(std::string const &) const
~Type2CorrectionProducer()
std::vector< edm::InputTag > vInputTag
#define DEFINE_FWK_MODULE(type)
bool exists(std::string const ¶meterName) const
checks if a parameter exists
std::vector< double > binCorrParameter_
std::vector< type2BinningEntryType * > type2Binning_
Type2CorrectionProducer(const edm::ParameterSet &)
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
TFormula * binCorrFormula_
std::vector< std::string > vstring
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
vInputTag srcUnclEnergySums_
void initialize(const std::string &binCorrFormula, const edm::ParameterSet &binCorrParameter)
type2BinningEntryType(const edm::ParameterSet &cfg, const vInputTag &srcUnclEnergySums)
char data[epos_bytes_allocation]
void produce(edm::Event &, const edm::EventSetup &)
type2BinningEntryType(const std::string &binCorrformula, const edm::ParameterSet &binCorrParameter, const vInputTag &srcUnclEnergySums)