16 : moduleLabel_(cfg.getParameter<
std::
string>(
"@module_label")),
17 srcToken_(consumes<
edm::
View<
reco::BaseTau> >(cfg.getParameter<
edm::InputTag>(
"src"))),
18 levels_(cfg.getParameter<
std::vector<
std::
string> >(
"levels"))
20 typedef std::vector<edm::ParameterSet> vParameterSet;
22 for ( vParameterSet::const_iterator param = parameters.begin();
23 param != parameters.end(); ++param ) {
28 vstring decayModes_string = param->getParameter<
vstring>(
"decayModes");
29 for ( vstring::const_iterator
decayMode = decayModes_string.begin();
41 produces<TauJetCorrFactorsMap>();
44 std::vector<JetCorrectorParameters>
47 std::vector<JetCorrectorParameters> retVal;
48 for ( std::vector<std::string>::const_iterator
corrLevel = levels.begin();
60 corrector->setJetEta(tauJet->eta());
61 corrector->setJetPt(tauJet->pt());
62 corrector->setJetE(tauJet->energy());
63 return corrector->getSubCorrections()[
corrLevel];
73 typedef boost::shared_ptr<FactorizedJetCorrector> FactorizedJetCorrectorPtr;
74 std::map<std::string, FactorizedJetCorrectorPtr> correctorMapping;
77 std::vector<TauJetCorrFactors> tauJetCorrections;
79 tauJet != tauJets->end(); ++tauJet ) {
84 std::vector<TauJetCorrFactors::CorrectionFactor>
jec;
85 jec.push_back(std::make_pair(
std::string(
"Uncorrected"), 1.0));
89 <<
"You request to create a jetCorrFactors object with no JEC Levels indicated. \n" 90 <<
"This makes no sense, either you should correct this or drop the module from \n" 94 if ( dynamic_cast<const reco::PFTau*>(&(*tauJet)) ) {
96 for ( std::vector<payloadMappingType>::const_iterator payloadMapping =
payloadMappings_.begin();
98 for( vint::const_iterator
decayMode = payloadMapping->decayModes_.begin();
100 if ( pfTauJet->
decayMode() == (*decayMode) ) payload = payloadMapping->payload_;
107 if ( correctorMapping.find(payload) == correctorMapping.end() ) {
116 size_t numLevels =
levels_.size();
117 for (
size_t idx = 0;
idx < numLevels; ++
idx ) {
120 float jecFactor =
evaluate(tauJet, corrector,
idx);
128 jec.push_back(std::make_pair(corrLevel.substr(0, corrLevel.find(
"_")), jecFactor));
134 tauJetCorrections.push_back(tauJetCorrection);
138 auto jecMapping = std::make_unique<TauJetCorrFactorsMap>();
141 filler.insert(tauJets, tauJetCorrections.begin(), tauJetCorrections.end());
TauJetCorrFactorsProducer(const edm::ParameterSet &)
default constructor
T getParameter(std::string const &) const
float evaluate(edm::View< reco::BaseTau >::const_iterator &, boost::shared_ptr< FactorizedJetCorrector > &, int)
evaluate jet correction factor up to a given level
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void push_back(key_type i, value_type const &j, label_type const &flav="")
std::vector< JetCorrectorParameters > params(const JetCorrectorParametersCollection &, const std::vector< std::string > &) const
return the jec parameters as input to the FactorizedJetCorrector for different flavors ...
std::string defaultPayload_
void produce(edm::Event &, const edm::EventSetup &) override
everything that needs to be done per event
hadronicDecayMode decayMode() const
std::vector< std::string > vstring
jec levels
#define DEFINE_FWK_MODULE(type)
edm::EDGetTokenT< edm::View< reco::BaseTau > > srcToken_
input tau-jet collection
std::string moduleLabel_
python label of this TauJetCorrFactorsProducer module
std::string payload_
payload label
edm::ValueMap< pat::TauJetCorrFactors > TauJetCorrFactorsMap
value map for JetCorrFactors (to be written into the event)
std::vector< payloadMappingType > payloadMappings_
Produces a ValueMap between TauJetCorrFactors and the originating reco taus.
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator