38 for (vInputTag::const_iterator
inputTag = srcUnclEnergySums.begin();
inputTag != srcUnclEnergySums.end(); ++
inputTag)
50 for ( vInputTag::const_iterator srcUnclEnergySum = srcUnclEnergySums.begin();
51 srcUnclEnergySum != srcUnclEnergySums.end(); ++srcUnclEnergySum )
53 std::string instanceLabel = srcUnclEnergySum->instance();
54 if ( instanceLabel !=
"" &&
binLabel_ !=
"" ) instanceLabel.append(
"#");
68 TString
formula = binCorrFormula;
71 int numParameter = parNames.size();
73 for (
int parIndex = 0; parIndex < numParameter; ++parIndex ) {
76 double parValue = binCorrParameter.
getParameter<
double>(parName);
79 TString parName_internal = Form(
"[%i]", parIndex);
80 formula = formula.ReplaceAll(parName.data(), parName_internal);
90 <<
"Formula for Type 2 correction has invalid syntax = " << formula <<
" !!\n";
92 for (
int parIndex = 0; parIndex < numParameter; ++parIndex ) {
118 if ( cfg.
exists(
"type2Binning") )
120 typedef std::vector<edm::ParameterSet> vParameterSet;
121 vParameterSet cfgType2Binning = cfg.
getParameter<vParameterSet>(
"type2Binning");
122 for ( vParameterSet::const_iterator cfgType2BinningEntry = cfgType2Binning.begin();
123 cfgType2BinningEntry != cfgType2Binning.end(); ++cfgType2BinningEntry ) {
133 produces<CorrMETData>(
"");
141 for ( std::vector<type2BinningEntryType*>::const_iterator type2BinningEntry =
type2Binning_.begin();
142 type2BinningEntry !=
type2Binning_.end(); ++type2BinningEntry )
147 for (std::vector<
edm::EDGetTokenT<CorrMETData> >::const_iterator corrToken = (*type2BinningEntry)->corrTokens_.begin(); corrToken != (*type2BinningEntry)->corrTokens_.end(); ++corrToken)
149 evt.
getByToken(*corrToken, unclEnergySummand);
150 unclEnergySum += (*unclEnergySummand);
153 double unclEnergySumPt =
sqrt(unclEnergySum.
mex*unclEnergySum.
mex + unclEnergySum.
mey*unclEnergySum.
mey);
154 double unclEnergyScaleFactor = (*type2BinningEntry)->binCorrFormula_->Eval(unclEnergySumPt);
156 unclEnergySum.
mex = -unclEnergySum.
mex;
157 unclEnergySum.
mey = -unclEnergySum.
mey;
159 product += (unclEnergyScaleFactor - 1.)*unclEnergySum;
162 std::unique_ptr<CorrMETData> pprod(
new CorrMETData(product));
T getParameter(std::string const &) const
~Type2CorrectionProducer() override
std::vector< edm::InputTag > vInputTag
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
type2BinningEntryType(const std::string &binCorrformula, const edm::ParameterSet &binCorrParameter, const vInputTag &srcUnclEnergySums, edm::ConsumesCollector &&iConsumesCollector)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
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
void produce(edm::Event &, const edm::EventSetup &) override
#define DEFINE_FWK_MODULE(type)
TFormula * binCorrFormula_
std::vector< std::string > vstring
std::vector< edm::EDGetTokenT< CorrMETData > > corrTokens_
void initialize(const std::string &binCorrFormula, const edm::ParameterSet &binCorrParameter)
char data[epos_bytes_allocation]
type2BinningEntryType(const edm::ParameterSet &cfg, const vInputTag &srcUnclEnergySums, edm::ConsumesCollector &&iConsumesCollector)