Skip to content

Commit

Permalink
Merge pull request #25617 from makortel/objectModifierConsumes
Browse files Browse the repository at this point in the history
Pass ConsumesCollector to ModifyObjectValueBase-derived classes in the constructor
  • Loading branch information
cmsbuild committed Jan 18, 2019
2 parents 380d56b + b7b86a1 commit 1c5d76f
Show file tree
Hide file tree
Showing 18 changed files with 75 additions and 263 deletions.
5 changes: 2 additions & 3 deletions CommonTools/CandAlgos/interface/ModifyObjectValueBase.h
Expand Up @@ -17,14 +17,13 @@

class ModifyObjectValueBase {
public:
ModifyObjectValueBase(const edm::ParameterSet& conf) :
ModifyObjectValueBase(const edm::ParameterSet& conf) :
name_( conf.getParameter<std::string>("modifierName") ) {}

virtual ~ModifyObjectValueBase() {}

virtual void setEvent(const edm::Event&) {}
virtual void setEventContent(const edm::EventSetup&) {}
virtual void setConsumes(edm::ConsumesCollector&) {}

virtual void modifyObject(reco::GsfElectron&) const {
throw cms::Exception("InvalidConfiguration")
Expand Down Expand Up @@ -76,7 +75,7 @@ class ModifyObjectValueBase {

#if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__REFLEX__)
#include "FWCore/PluginManager/interface/PluginFactory.h"
typedef edmplugin::PluginFactory< ModifyObjectValueBase* (const edm::ParameterSet&) > ModifyObjectValueFactory;
typedef edmplugin::PluginFactory< ModifyObjectValueBase* (const edm::ParameterSet&, edm::ConsumesCollector&) > ModifyObjectValueFactory;
#endif

#endif
18 changes: 4 additions & 14 deletions PhysicsTools/PatAlgos/interface/ObjectModifier.h
Expand Up @@ -10,7 +10,7 @@ namespace pat {
public:
typedef std::unique_ptr<ModifyObjectValueBase> ModifierPointer;

ObjectModifier(const edm::ParameterSet& conf);
ObjectModifier(const edm::ParameterSet& conf, edm::ConsumesCollector&& cc);
~ObjectModifier() {}

void setEvent(const edm::Event& event) {
Expand All @@ -23,11 +23,6 @@ namespace pat {
modifiers_[i]->setEventContent(setup);
}

void setConsumes(edm::ConsumesCollector& sumes) {
for( unsigned i = 0; i < modifiers_.size(); ++i )
modifiers_[i]->setConsumes(sumes);
}

void modify(T& obj) const {
for( unsigned i = 0; i < modifiers_.size(); ++i )
modifiers_[i]->modifyObject(obj);
Expand All @@ -38,20 +33,15 @@ namespace pat {
};

template<class T>
ObjectModifier<T>::ObjectModifier(const edm::ParameterSet& conf) {
ObjectModifier<T>::ObjectModifier(const edm::ParameterSet& conf, edm::ConsumesCollector&& cc) {
const std::vector<edm::ParameterSet>& mods =
conf.getParameterSetVector("modifications");
for(unsigned i = 0; i < mods.size(); ++i ) {
const edm::ParameterSet& iconf = mods[i];
const std::string& mname = iconf.getParameter<std::string>("modifierName");
ModifyObjectValueBase* plugin =
ModifyObjectValueFactory::get()->create(mname,iconf);
if( nullptr != plugin ) {
modifiers_.push_back(ModifierPointer(plugin));
} else {
throw cms::Exception("BadPluginName")
<< "The requested modifier: " << mname << " is not available!";
}
ModifyObjectValueFactory::get()->create(mname,iconf,cc);
modifiers_.emplace_back(plugin);
}
}
}
Expand Down
4 changes: 1 addition & 3 deletions PhysicsTools/PatAlgos/plugins/ModifiedObjectProducer.h
Expand Up @@ -23,11 +23,9 @@ namespace pat {
//set our input source
src_ = consumes<edm::View<T> >(conf.getParameter<edm::InputTag>("src"));
//setup modifier
edm::ConsumesCollector sumes(consumesCollector());
const edm::ParameterSet& mod_config =
conf.getParameter<edm::ParameterSet>("modifierConfig");
modifier_.reset( new Modifier(mod_config) );
modifier_->setConsumes(sumes);
modifier_ = std::make_unique<Modifier>(mod_config, consumesCollector());
//declare products
produces<Collection>();
}
Expand Down
6 changes: 1 addition & 5 deletions PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc
Expand Up @@ -72,13 +72,9 @@ pat::PATElectronSlimmer::PATElectronSlimmer(const edm::ParameterSet & iConfig) :
reducedEndcapRecHitCollectionToken_(consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("reducedEndcapRecHitCollection"))),
modifyElectron_(iConfig.getParameter<bool>("modifyElectrons"))
{
edm::ConsumesCollector sumes(consumesCollector());
if( modifyElectron_ ) {
const edm::ParameterSet& mod_config = iConfig.getParameter<edm::ParameterSet>("modifierConfig");
electronModifier_.reset(new pat::ObjectModifier<pat::Electron>(mod_config) );
electronModifier_->setConsumes(sumes);
} else {
electronModifier_.reset(nullptr);
electronModifier_ = std::make_unique<pat::ObjectModifier<pat::Electron>>(mod_config, consumesCollector());
}

mayConsume<EcalRecHitCollection>(edm::InputTag("reducedEcalRecHitsEB"));
Expand Down
6 changes: 1 addition & 5 deletions PhysicsTools/PatAlgos/plugins/PATJetSlimmer.cc
Expand Up @@ -62,13 +62,9 @@ pat::PATJetSlimmer::PATJetSlimmer(const edm::ParameterSet & iConfig) :
pf2pc_ = consumes<edm::Association<pat::PackedCandidateCollection> >(iConfig.getParameter<edm::InputTag>("packedPFCandidates"));
}
}
edm::ConsumesCollector sumes(consumesCollector());
if( modifyJet_ ) {
const edm::ParameterSet& mod_config = iConfig.getParameter<edm::ParameterSet>("modifierConfig");
jetModifier_.reset(new pat::ObjectModifier<pat::Jet>(mod_config) );
jetModifier_->setConsumes(sumes);
} else {
jetModifier_.reset(nullptr);
jetModifier_ = std::make_unique<pat::ObjectModifier<pat::Jet>>(mod_config, consumesCollector());
}
produces<std::vector<pat::Jet> >();
}
Expand Down
6 changes: 1 addition & 5 deletions PhysicsTools/PatAlgos/plugins/PATMuonSlimmer.cc
Expand Up @@ -66,13 +66,9 @@ pat::PATMuonSlimmer::PATMuonSlimmer(const edm::ParameterSet & iConfig) :
for (const edm::InputTag &tag : pf2pc) pf2pc_.push_back(consumes<edm::Association<pat::PackedCandidateCollection>>(tag));
}

edm::ConsumesCollector sumes(consumesCollector());
if( modifyMuon_ ) {
const edm::ParameterSet& mod_config = iConfig.getParameter<edm::ParameterSet>("modifierConfig");
muonModifier_.reset(new pat::ObjectModifier<pat::Muon>(mod_config) );
muonModifier_->setConsumes(sumes);
} else {
muonModifier_.reset(nullptr);
muonModifier_ = std::make_unique<pat::ObjectModifier<pat::Muon>>(mod_config, consumesCollector());
}
produces<std::vector<pat::Muon> >();
if( saveSegments_ ) {
Expand Down
6 changes: 1 addition & 5 deletions PhysicsTools/PatAlgos/plugins/PATPhotonSlimmer.cc
Expand Up @@ -68,13 +68,9 @@ pat::PATPhotonSlimmer::PATPhotonSlimmer(const edm::ParameterSet & iConfig) :
reducedEndcapRecHitCollectionToken_(consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("reducedEndcapRecHitCollection"))),
modifyPhoton_(iConfig.getParameter<bool>("modifyPhotons"))
{
edm::ConsumesCollector sumes(consumesCollector());
if( modifyPhoton_ ) {
const edm::ParameterSet& mod_config = iConfig.getParameter<edm::ParameterSet>("modifierConfig");
photonModifier_.reset(new pat::ObjectModifier<pat::Photon>(mod_config) );
photonModifier_->setConsumes(sumes);
} else {
photonModifier_.reset(nullptr);
photonModifier_ = std::make_unique<pat::ObjectModifier<pat::Photon>>(mod_config, consumesCollector());
}

mayConsume<EcalRecHitCollection>(edm::InputTag("reducedEcalRecHitsEB"));
Expand Down
6 changes: 1 addition & 5 deletions PhysicsTools/PatAlgos/plugins/PATTauSlimmer.cc
Expand Up @@ -47,13 +47,9 @@ pat::PATTauSlimmer::PATTauSlimmer(const edm::ParameterSet & iConfig) :
dropPFSpecific_(iConfig.exists("dropPFSpecific") ? iConfig.getParameter<bool>("dropPFSpecific") : true),
modifyTau_(iConfig.getParameter<bool>("modifyTaus"))
{
edm::ConsumesCollector sumes(consumesCollector());
if( modifyTau_ ) {
const edm::ParameterSet& mod_config = iConfig.getParameter<edm::ParameterSet>("modifierConfig");
tauModifier_.reset(new pat::ObjectModifier<pat::Tau>(mod_config) );
tauModifier_->setConsumes(sumes);
} else {
tauModifier_.reset(nullptr);
tauModifier_ = std::make_unique<pat::ObjectModifier<pat::Tau>>(mod_config, consumesCollector());
}
produces<std::vector<pat::Tau> >();
}
Expand Down
Expand Up @@ -33,11 +33,10 @@ GEDGsfElectronFinalizer::GEDGsfElectronFinalizer( const edm::ParameterSet & cfg
if( cfg.existsAs<edm::ParameterSet>("regressionConfig") ) {
const edm::ParameterSet& iconf = cfg.getParameterSet("regressionConfig");
const std::string& mname = iconf.getParameter<std::string>("modifierName");
edm::ConsumesCollector&& cc = consumesCollector();
ModifyObjectValueBase* plugin =
ModifyObjectValueFactory::get()->create(mname,iconf);
ModifyObjectValueFactory::get()->create(mname,iconf,cc);
gedRegression_.reset(plugin);
edm::ConsumesCollector sumes = consumesCollector();
gedRegression_->setConsumes(sumes);
} else {
gedRegression_.reset(nullptr);
}
Expand Down
4 changes: 1 addition & 3 deletions RecoEgamma/EgammaPhotonAlgos/src/PhotonEnergyCorrector.cc
Expand Up @@ -53,10 +53,8 @@ PhotonEnergyCorrector::PhotonEnergyCorrector( const edm::ParameterSet& config, e
const edm::ParameterSet& regr_conf =
config.getParameterSet("regressionConfig");
const std::string& mname = regr_conf.getParameter<std::string>("modifierName");
ModifyObjectValueBase* regr = ModifyObjectValueFactory::get()->create(mname,regr_conf);
ModifyObjectValueBase* regr = ModifyObjectValueFactory::get()->create(mname,regr_conf,iC);
gedRegression_.reset(regr);
} else {
gedRegression_.reset(nullptr);
}

// ingredient for energy regression
Expand Down
4 changes: 0 additions & 4 deletions RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc
Expand Up @@ -167,10 +167,6 @@ GEDPhotonProducer::GEDPhotonProducer(const edm::ParameterSet& config) :

thePhotonEnergyCorrector_ =
new PhotonEnergyCorrector(conf_, consumesCollector());
if( conf_.existsAs<edm::ParameterSet>("regressionConfig") ) {
auto sumes = consumesCollector();
thePhotonEnergyCorrector_->gedRegression()->setConsumes(sumes);
}

//AA

Expand Down
Expand Up @@ -85,25 +85,19 @@ class EGExtraInfoModifierFromValueMaps : public ModifyObjectValueBase {
public:
using ValMapToken = edm::EDGetTokenT<edm::ValueMap<MapType> >;
using ValueMaps = std::unordered_map<std::string,ValMapToken>;
using ValueMapsTags = std::unordered_map<std::string,edm::InputTag>;
struct electron_config {
edm::InputTag electron_src;
edm::EDGetTokenT<edm::View<pat::Electron> > tok_electron_src;
ValueMapsTags valuemaps;
ValueMaps tok_valuemaps;
};

struct photon_config {
edm::InputTag photon_src;
edm::EDGetTokenT<edm::View<pat::Photon> > tok_photon_src;
ValueMapsTags valuemaps;
ValueMaps tok_valuemaps;
};

EGExtraInfoModifierFromValueMaps(const edm::ParameterSet& conf);
EGExtraInfoModifierFromValueMaps(const edm::ParameterSet& conf, edm::ConsumesCollector& cc);

void setEvent(const edm::Event&) final;
void setConsumes(edm::ConsumesCollector&) final;

void modifyObject(pat::Electron&) const final;
void modifyObject(pat::Photon&) const final;
Expand All @@ -123,31 +117,31 @@ class EGExtraInfoModifierFromValueMaps : public ModifyObjectValueBase {

template<typename MapType,typename OutputType>
EGExtraInfoModifierFromValueMaps<MapType,OutputType>::
EGExtraInfoModifierFromValueMaps(const edm::ParameterSet& conf) :
EGExtraInfoModifierFromValueMaps(const edm::ParameterSet& conf, edm::ConsumesCollector& cc) :
ModifyObjectValueBase(conf) {
constexpr char electronSrc[] = "electronSrc";
constexpr char photonSrc[] = "photonSrc";
overrideExistingValues_ = conf.exists("overrideExistingValues") ? conf.getParameter<bool>("overrideExistingValues") : false;
if( conf.exists("electron_config") ) {
const edm::ParameterSet& electrons = conf.getParameter<edm::ParameterSet>("electron_config");
if( electrons.exists(electronSrc) ) e_conf.electron_src = electrons.getParameter<edm::InputTag>(electronSrc);
if( electrons.exists(electronSrc) ) e_conf.tok_electron_src = cc.consumes<edm::View<pat::Electron>>(electrons.getParameter<edm::InputTag>(electronSrc));

const std::vector<std::string> parameters = electrons.getParameterNames();
for( const std::string& name : parameters ) {
if( std::string(electronSrc) == name ) continue;
if( electrons.existsAs<edm::InputTag>(name) ) {
e_conf.valuemaps[name] = electrons.getParameter<edm::InputTag>(name);
e_conf.tok_valuemaps[name] = cc.consumes<edm::ValueMap<MapType>>(electrons.getParameter<edm::InputTag>(name));
}
}
}
if( conf.exists("photon_config") ) {
const edm::ParameterSet& photons = conf.getParameter<edm::ParameterSet>("photon_config");
if( photons.exists(photonSrc) ) ph_conf.photon_src = photons.getParameter<edm::InputTag>(photonSrc);
if( photons.exists(photonSrc) ) ph_conf.tok_photon_src = cc.consumes<edm::View<pat::Photon>>(photons.getParameter<edm::InputTag>(photonSrc));
const std::vector<std::string> parameters = photons.getParameterNames();
for( const std::string& name : parameters ) {
if( std::string(photonSrc) == name ) continue;
if( photons.existsAs<edm::InputTag>(name) ) {
ph_conf.valuemaps[name] = photons.getParameter<edm::InputTag>(name);
ph_conf.tok_valuemaps[name] = cc.consumes<edm::ValueMap<MapType>>(photons.getParameter<edm::InputTag>(name));
}
}
}
Expand Down Expand Up @@ -185,24 +179,6 @@ setEvent(const edm::Event& evt) {
for(auto const& itr : ph_conf.tok_valuemaps) evt.getByToken(itr.second,pho_vmaps[itr.second.index()]);
}

namespace {
template<typename T>
inline void make_consumes(const edm::InputTag& tag,edm::EDGetTokenT<T>& token, edm::ConsumesCollector& cc)
{ if( !(empty_tag == tag) ) token = cc.consumes<T>(tag); }
}

template<typename MapType,typename OutputType>
void EGExtraInfoModifierFromValueMaps<MapType,OutputType>::
setConsumes(edm::ConsumesCollector& sumes) {
//setup electrons
if( !(empty_tag == e_conf.electron_src) ) e_conf.tok_electron_src = sumes.consumes<edm::View<pat::Electron> >(e_conf.electron_src);
for(auto const& itr : e_conf.valuemaps) make_consumes(itr.second,e_conf.tok_valuemaps[itr.first],sumes);

// setup photons
if( !(empty_tag == ph_conf.photon_src) ) ph_conf.tok_photon_src = sumes.consumes<edm::View<pat::Photon> >(ph_conf.photon_src);
for(auto const& itr : ph_conf.valuemaps) make_consumes(itr.second,ph_conf.tok_valuemaps[itr.first],sumes);
}

namespace {
template<typename T, typename U, typename V, typename MapType >
inline void assignValue(const T& ptr, const U& tok, const V& map, MapType& value) {
Expand Down
17 changes: 4 additions & 13 deletions RecoEgamma/EgammaTools/plugins/EG8XObjectUpdateModifier.cc
Expand Up @@ -19,12 +19,11 @@

class EG8XObjectUpdateModifier : public ModifyObjectValueBase {
public:
EG8XObjectUpdateModifier(const edm::ParameterSet& conf);
EG8XObjectUpdateModifier(const edm::ParameterSet& conf, edm::ConsumesCollector& cc);
~EG8XObjectUpdateModifier() override{}

void setEvent(const edm::Event&) final;
void setEventContent(const edm::EventSetup&) final;
void setConsumes(edm::ConsumesCollector&) final;

void modifyObject(reco::GsfElectron& ele) const final;
void modifyObject(reco::Photon& pho) const final;
Expand All @@ -40,26 +39,18 @@ class EG8XObjectUpdateModifier : public ModifyObjectValueBase {
edm::Handle<EcalRecHitCollection> ecalRecHitsEEHandle_;
edm::EDGetTokenT<EcalRecHitCollection> ecalRecHitsEBToken_;
edm::EDGetTokenT<EcalRecHitCollection> ecalRecHitsEEToken_;
edm::InputTag ecalRecHitsEBTag_;
edm::InputTag ecalRecHitsEETag_;

};

EG8XObjectUpdateModifier::EG8XObjectUpdateModifier(const edm::ParameterSet& conf):
EG8XObjectUpdateModifier::EG8XObjectUpdateModifier(const edm::ParameterSet& conf, edm::ConsumesCollector& cc):
ModifyObjectValueBase(conf),
ecalRecHitsEBTag_(conf.getParameter<edm::InputTag>("ecalRecHitsEB")),
ecalRecHitsEETag_(conf.getParameter<edm::InputTag>("ecalRecHitsEE"))
ecalRecHitsEBToken_(cc.consumes<EcalRecHitCollection>(conf.getParameter<edm::InputTag>("ecalRecHitsEB"))),
ecalRecHitsEEToken_(cc.consumes<EcalRecHitCollection>(conf.getParameter<edm::InputTag>("ecalRecHitsEE")))
{


}

void EG8XObjectUpdateModifier::setConsumes(edm::ConsumesCollector& cc)
{
ecalRecHitsEBToken_ = cc.consumes<EcalRecHitCollection>(ecalRecHitsEBTag_);
ecalRecHitsEEToken_ = cc.consumes<EcalRecHitCollection>(ecalRecHitsEETag_);
}

void EG8XObjectUpdateModifier::setEvent(const edm::Event& iEvent)
{
iEvent.getByToken(ecalRecHitsEBToken_,ecalRecHitsEBHandle_);
Expand Down
10 changes: 2 additions & 8 deletions RecoEgamma/EgammaTools/plugins/EGEtScaleSysModifier.cc
Expand Up @@ -28,12 +28,11 @@

class EGEtScaleSysModifier : public ModifyObjectValueBase {
public:
EGEtScaleSysModifier(const edm::ParameterSet& conf);
EGEtScaleSysModifier(const edm::ParameterSet& conf, edm::ConsumesCollector&);
~EGEtScaleSysModifier() override{}

void setEvent(const edm::Event&) final;
void setEventContent(const edm::EventSetup&) final;
void setConsumes(edm::ConsumesCollector&) final;

void modifyObject(pat::Electron& ele) const final;
void modifyObject(pat::Photon& pho) const final;
Expand Down Expand Up @@ -85,7 +84,7 @@ class EGEtScaleSysModifier : public ModifyObjectValueBase {
std::unique_ptr<UncertFuncBase> uncertFunc_;
};

EGEtScaleSysModifier::EGEtScaleSysModifier(const edm::ParameterSet& conf):
EGEtScaleSysModifier::EGEtScaleSysModifier(const edm::ParameterSet& conf, edm::ConsumesCollector&):
ModifyObjectValueBase(conf),
epCombTool_(conf.getParameter<edm::ParameterSet>("epCombConfig"))
{
Expand All @@ -99,11 +98,6 @@ EGEtScaleSysModifier::EGEtScaleSysModifier(const edm::ParameterSet& conf):

}

void EGEtScaleSysModifier::setConsumes(edm::ConsumesCollector& cc)
{

}

void EGEtScaleSysModifier::setEvent(const edm::Event& iEvent)
{

Expand Down

0 comments on commit 1c5d76f

Please sign in to comment.