Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@
ID = cms.InputTag("lowPtGsfElectronID"),
),

# Embedding of RECO/AOD items

# Embedding of RECO/AOD items
embedTrack = True,
embedGsfElectronCore = True,
Expand Down Expand Up @@ -69,11 +67,22 @@
genParticleMatch = "electronMatch"
)

# Schedule rekeying of seed BDT ValueMaps by reco::GsfElectron for run2_miniAOD_UL
# For run2_miniAOD_UL ...
from Configuration.ProcessModifiers.run2_miniAOD_UL_cff import run2_miniAOD_UL
from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronSeedValueMaps_cff import rekeyLowPtGsfElectronSeedValueMaps
from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronID_cfi import lowPtGsfElectronID
_makePatLowPtElectronsTask = makePatLowPtElectronsTask.copy()

# (1) rekey seed BDT ValueMaps by reco::GsfElectron
from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronSeedValueMaps_cff import rekeyLowPtGsfElectronSeedValueMaps
_makePatLowPtElectronsTask.add(rekeyLowPtGsfElectronSeedValueMaps)

# (2) rerun ID
from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronID_cfi import lowPtGsfElectronID
_makePatLowPtElectronsTask.add(lowPtGsfElectronID)

# (3) apply energy regression
from RecoEgamma.EgammaElectronProducers.lowPtGsfElectrons_cfi import lowPtGsfElectrons
_makePatLowPtElectronsTask.add(lowPtGsfElectrons)

# Append to Task
run2_miniAOD_UL.toReplaceWith(makePatLowPtElectronsTask,_makePatLowPtElectronsTask)

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#
selectedPatLowPtElectrons = cms.EDFilter("PATElectronSelector",
src = cms.InputTag("patLowPtElectrons"),
cut = cms.string("pt>1. && electronID('ID')>1.5"),
cut = cms.string("pt > 1. && electronID('ID') > -0.25"),
)

# Modifier for bParking (fully open selection)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#include "CommonTools/CandAlgos/interface/ModifyObjectValueBase.h"
#include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
#include "FWCore/Framework/interface/stream/EDProducer.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"

class LowPtGsfElectronFinalizer : public edm::stream::EDProducer<> {
public:
explicit LowPtGsfElectronFinalizer(const edm::ParameterSet&);

void produce(edm::Event&, const edm::EventSetup&) override;

static void fillDescriptions(edm::ConfigurationDescriptions&);

private:
const edm::EDGetTokenT<reco::GsfElectronCollection> previousGsfElectrons_;
std::unique_ptr<ModifyObjectValueBase> regression_;

const edm::EDPutTokenT<reco::GsfElectronCollection> putToken_;
};

using edm::InputTag;
using reco::GsfElectronCollection;

LowPtGsfElectronFinalizer::LowPtGsfElectronFinalizer(const edm::ParameterSet& cfg)
: previousGsfElectrons_{consumes<GsfElectronCollection>(cfg.getParameter<InputTag>("previousGsfElectronsTag"))},
putToken_{produces<GsfElectronCollection>()} {
auto const& iconf = cfg.getParameterSet("regressionConfig");
auto const& mname = iconf.getParameter<std::string>("modifierName");
auto cc = consumesCollector();
regression_ = ModifyObjectValueFactory::get()->create(mname, iconf, cc);
}

void LowPtGsfElectronFinalizer::produce(edm::Event& event, const edm::EventSetup& setup) {
// Setup regression for event
regression_->setEvent(event);
regression_->setEventContent(setup);

// Create new modified electron collection
reco::GsfElectronCollection outputElectrons;
for (auto const& electron : event.get(previousGsfElectrons_)) {
outputElectrons.emplace_back(electron);
auto& newElectron = outputElectrons.back();
regression_->modifyObject(newElectron);
}

// Emplace modified electrons to event
event.emplace(putToken_, std::move(outputElectrons));
}

void LowPtGsfElectronFinalizer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<edm::InputTag>("previousGsfElectronsTag", {});
edm::ParameterSetDescription psd;
psd.setUnknown();
desc.add<edm::ParameterSetDescription>("regressionConfig", psd);
descriptions.addWithDefaultLabel(desc);
}

#include "FWCore/Framework/interface/MakerMacros.h"
DEFINE_FWK_MODULE(LowPtGsfElectronFinalizer);
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ void LowPtGsfElectronIDProducer::fillDescriptions(edm::ConfigurationDescriptions
desc.add<edm::InputTag>("rho", edm::InputTag("fixedGridRhoFastjetAll"));
desc.add<std::vector<std::string> >("ModelNames", {""});
desc.add<std::vector<std::string> >(
"ModelWeights", {"RecoEgamma/ElectronIdentification/data/LowPtElectrons/LowPtElectrons_ID_2020Sept15.root"});
"ModelWeights", {"RecoEgamma/ElectronIdentification/data/LowPtElectrons/LowPtElectrons_ID_2020Nov28.root"});
desc.add<std::vector<double> >("ModelThresholds", {-99.});
desc.add<bool>("PassThrough", false);
desc.add<double>("MinPtThreshold", 0.5);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronCores_cff import lowPtGsfElectronCores

# Low pT electrons
from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronsPreRegression_cfi import *
from RecoEgamma.EgammaElectronProducers.lowPtGsfElectrons_cfi import *

# Low pT Electron value maps
Expand All @@ -84,6 +85,7 @@
lowPtGsfElePfGsfTracks,
lowPtGsfElectronSuperClusters,
lowPtGsfElectronCores,
lowPtGsfElectronsPreRegression,
lowPtGsfElectrons,
lowPtGsfElectronSeedValueMaps,
rekeyLowPtGsfElectronSeedValueMaps,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from RecoEgamma.EgammaElectronProducers.gsfElectrons_cfi import ecalDrivenGsfElectrons

lowPtGsfElectronsPreRegression = ecalDrivenGsfElectrons.clone(gsfElectronCoresTag = "lowPtGsfElectronCores")

from Configuration.Eras.Modifier_fastSim_cff import fastSim
fastSim.toModify(lowPtGsfElectronsPreRegression,ctfTracksTag = "generalTracksBeforeMixing")
53 changes: 46 additions & 7 deletions RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectrons_cfi.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,49 @@
from RecoEgamma.EgammaElectronProducers.gsfElectrons_cfi import ecalDrivenGsfElectrons
import FWCore.ParameterSet.Config as cms

lowPtGsfElectrons = ecalDrivenGsfElectrons.clone(gsfElectronCoresTag = "lowPtGsfElectronCores")
from RecoEgamma.EgammaTools.regressionModifier_cfi import regressionModifier106XUL

from Configuration.Eras.Modifier_fastSim_cff import fastSim
fastSim.toModify(lowPtGsfElectrons,ctfTracksTag = "generalTracksBeforeMixing")
_lowPtRegressionModifier = regressionModifier106XUL.clone(
modifierName = 'EGRegressionModifierV3',
rhoTag = 'fixedGridRhoFastjetAll',
eleRegs = dict(
ecalOnlyMean = dict(
lowEtHighEtBoundary = 20.,
ebLowEtForestName = ":lowPtElectron_eb_ecalOnly_05To50_mean",
ebHighEtForestName = ":lowPtElectron_eb_ecalOnly_05To50_mean",
eeLowEtForestName = ":lowPtElectron_ee_ecalOnly_05To50_mean",
eeHighEtForestName = ":lowPtElectron_ee_ecalOnly_05To50_mean",
),
ecalOnlySigma = dict(
lowEtHighEtBoundary = 20.,
ebLowEtForestName = ":lowPtElectron_eb_ecalOnly_05To50_sigma",
ebHighEtForestName = ":lowPtElectron_eb_ecalOnly_05To50_sigma",
eeLowEtForestName = ":lowPtElectron_ee_ecalOnly_05To50_sigma",
eeHighEtForestName = ":lowPtElectron_ee_ecalOnly_05To50_sigma",
),
epComb = dict(
ecalTrkRegressionConfig = dict(
lowEtHighEtBoundary = 20.,
ebLowEtForestName = ":lowPtElectron_eb_ecalTrk_05To50_mean",
ebHighEtForestName = ":lowPtElectron_eb_ecalTrk_05To50_mean",
eeLowEtForestName = ":lowPtElectron_ee_ecalTrk_05To50_mean",
eeHighEtForestName = ":lowPtElectron_ee_ecalTrk_05To50_mean",
),
ecalTrkRegressionUncertConfig = dict(
lowEtHighEtBoundary = 20.,
ebLowEtForestName = ":lowPtElectron_eb_ecalTrk_05To50_sigma",
ebHighEtForestName = ":lowPtElectron_eb_ecalTrk_05To50_sigma",
eeLowEtForestName = ":lowPtElectron_ee_ecalTrk_05To50_sigma",
eeHighEtForestName = ":lowPtElectron_ee_ecalTrk_05To50_sigma",
),
)
),
)

from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA
pp_on_AA.toModify(lowPtGsfElectrons.preselection, minSCEtBarrel = 15.0)
pp_on_AA.toModify(lowPtGsfElectrons.preselection, minSCEtEndcaps = 15.0)
from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronFinalizer_cfi import lowPtGsfElectronFinalizer
lowPtGsfElectrons = lowPtGsfElectronFinalizer.clone(
previousGsfElectronsTag = "lowPtGsfElectronsPreRegression",
regressionConfig = _lowPtRegressionModifier,
)

from Configuration.ProcessModifiers.run2_miniAOD_UL_cff import run2_miniAOD_UL
run2_miniAOD_UL.toModify(lowPtGsfElectrons, previousGsfElectronsTag = "lowPtGsfElectrons::@skipCurrentProcess")