50 ChainedJetCorrectorImpl(std::vector<reco::JetCorrector const*>
correctors):
51 jetCorrectors_(
std::
move(correctors)) {}
66 std::vector<reco::JetCorrector const*> jetCorrectors_;
69 double ChainedJetCorrectorImpl::correction (
const LorentzVector& fJet)
const 73 for (
auto cor: jetCorrectors_) {
74 double scale = cor->correction (jet);
82 double ChainedJetCorrectorImpl::correction (
const reco::Jet& fJet)
const 84 std::unique_ptr<reco::Jet>
jet (dynamic_cast<reco::Jet*> (fJet.
clone ()));
86 for (
auto cor: jetCorrectors_) {
87 double scale = cor->correction (*jet);
88 jet->scaleEnergy (scale);
95 double ChainedJetCorrectorImpl::correction (
const reco::Jet& fJet,
98 std::unique_ptr<reco::Jet>
jet (dynamic_cast<reco::Jet*> (fJet.
clone ()));
100 for (
auto cor: jetCorrectors_) {
101 double scale = cor->correction (*jet, fJetRef);
102 jet->scaleEnergy (scale);
109 bool ChainedJetCorrectorImpl::refRequired ()
const 111 for (
auto cor: jetCorrectors_) {
112 if (cor->refRequired ())
return true;
148 produces<reco::JetCorrector>();
150 auto const& tags = iConfig.
getParameter<std::vector<edm::InputTag>>(
"correctors");
151 correctorTokens_.reserve(tags.size());
153 for(
auto const&
tag : tags) {
154 correctorTokens_.emplace_back( consumes<reco::JetCorrector>(
tag));
169 std::vector<reco::JetCorrector const*>
correctors;
170 correctors.reserve(correctorTokens_.size());
172 for(
auto const& token: correctorTokens_) {
175 correctors.emplace_back(&(*hCorrector));
178 std::unique_ptr<reco::JetCorrector> pCorr(
new reco::JetCorrector( std::unique_ptr<reco::JetCorrectorImpl>(
new ChainedJetCorrectorImpl(
std::move(correctors)) )));
188 desc.
add<std::vector<edm::InputTag>>(
"correctors");
T getParameter(std::string const &) const
std::vector< edm::EDGetTokenT< reco::JetCorrector > > correctorTokens_
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Base class for all types of Jets.
void produce(edm::Event &, const edm::EventSetup &) override
ChainedJetCorrectorProducer(const edm::ParameterSet &)
#define DEFINE_FWK_MODULE(type)
void addDefault(ParameterSetDescription const &psetDescription)
math::XYZTLorentzVector LorentzVector
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
virtual double correction(const LorentzVector &fJet) const =0
get correction using Jet information only
CompositePtrCandidate * clone() const override
returns a clone of the candidate
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
virtual bool refRequired() const =0
if correction needs the jet reference