36 const GsfTrackRef oldElectronGsfTrackRef = oldCoreRef->gsfTrack();
38 for (icore = 0; icore < newCores->size(); ++icore) {
39 if (oldElectronGsfTrackRef == (*newCores)[icore].gsfTrack()) {
41 electrons.emplace_back(oldElectron, coreRef);
64 event.getByToken(
pfMVA_, pfMva);
74 double pfTranslatorMinMva = mvaBlock.
getParameter<
double>(
"MVACut");
75 double pfTranslatorUndefined = -99.;
81 <<
") will have no effect on purely tracker seeded electrons." 82 <<
" It is inferior to the cut already applied by PFlow translator (" << pfTranslatorMinMva <<
").";
90 <<
"Parameter minMVA (" <<
cutsCfg_.
minMVA <<
")is inferior to the cut applied by PFlow translator (" 91 << pfTranslatorMinMva <<
")." 92 <<
" Some ecal (and eventually tracker) seeded electrons may lack their MVA value and PFlow supercluster.";
96 throw cms::Exception(
"GsfElectronAlgo|BadMvaCut") <<
"Parameter minMVA is inferior to the lowest possible value." 97 <<
" Every electron will be blessed whatever other criteria.";
105 typedef std::vector<edm::Handle<edm::ValueMap<double> > > IsolationValueMaps;
107 IsolationValueMaps edIsolationValues;
110 std::vector<edm::InputTag> inputTagIsoVals;
116 pfIsolationValues.resize(inputTagIsoVals.size());
118 for (
size_t j = 0;
j < inputTagIsoVals.size(); ++
j) {
119 event.getByLabel(inputTagIsoVals[
j], pfIsolationValues[j]);
124 inputTagIsoVals.clear();
129 edIsolationValues.resize(inputTagIsoVals.size());
131 for (
size_t j = 0;
j < inputTagIsoVals.size(); ++
j) {
132 event.getByLabel(inputTagIsoVals[
j], edIsolationValues[j]);
139 reco::GsfElectronCollection::const_iterator pfElectron, edElectron;
140 unsigned int edIndex, pfIndex;
142 for (
auto& el : electrons) {
145 for (pfIndex = 0, pfElectron =
pfElectrons->begin(); pfElectron !=
pfElectrons->end(); pfIndex++, pfElectron++) {
146 if (pfElectron->gsfTrack() == el.gsfTrack()) {
148 edm::LogWarning(
"GsfElectronProducer") <<
"associated pfGsfElectron already found";
153 if (!(pfIsolationValues).
empty()) {
159 el.setPfIsolationVariables(isoVariables);
163 el.setMvaInput(pfElectron->mvaInput());
164 el.setMvaOutput(pfElectron->mvaOutput());
165 if (el.ecalDrivenSeed()) {
166 el.setP4(GsfElectron::P4_PFLOW_COMBINATION,
167 pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),
168 pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),
171 el.setP4(GsfElectron::P4_PFLOW_COMBINATION,
172 pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),
173 pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),
176 double noCutMin = -999999999.;
177 if (el.mva_e_pi() < noCutMin) {
178 throw cms::Exception(
"GsfElectronAlgo|UnexpectedMvaValue") <<
"unexpected MVA value: " << el.mva_e_pi();
186 if (!(edIsolationValues).
empty()) {
187 edIndex = 0, edElectron = edElectrons->begin();
188 while ((found ==
false) && (edElectron != edElectrons->end())) {
189 if (edElectron->gsfTrack() == el.gsfTrack()) {
198 isoVariables.
sumPhotonEt = (*(edIsolationValues)[1])[edElectronRef];
200 el.setPfIsolationVariables(isoVariables);
216 if (ele.
core()->ecalDrivenSeed()) {
225 LogTrace(
"GsfElectronAlgo") <<
"Main mva criterion is satisfied";
T getParameter(std::string const &) const
std::unique_ptr< GsfElectronAlgo > algo_
bool pfTranslatorParametersChecked_
reco::GsfElectronCollection clonePreviousElectrons(edm::Event const &event) const
bool passingMvaPreselection() const
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
edm::ParameterSet pfIsoVals_
edm::EDGetTokenT< reco::GsfElectronCoreCollection > gsfElectronCores
edm::EDGetTokenT< reco::GsfElectronCollection > pflowGsfElectronsTag
void fillEvent(reco::GsfElectronCollection &electrons, edm::Event &event)
void checkPfTranslatorParameters(edm::ParameterSet const &)
void setPflowPreselectionFlag(reco::GsfElectron &ele) const
GsfElectronProducer(const edm::ParameterSet &, const GsfElectronAlgo::HeavyObjectCache *)
float sumPhotonEt
sum pt of PF photons // old float photonIso ;
std::vector< GsfElectronCore > GsfElectronCoreCollection
void setPassMvaPreselection(bool flag)
bool get(ProductID const &oid, Handle< PROD > &result) const
float sumNeutralHadronEt
sum pt of neutral hadrons // old float neutralHadronIso ;
void addPflowInfo(reco::GsfElectronCollection &electrons, edm::Event const &event) const
edm::ParameterSet edIsoVals_
const MvaOutput & mvaOutput() const
GsfElectronAlgo::StrategyConfiguration strategyCfg_
void beginEvent(edm::Event &, const edm::EventSetup &)
virtual GsfElectronCoreRef core() const
edm::EDGetTokenT< edm::ValueMap< float > > pfMVA_
edm::EDGetTokenT< reco::GsfElectronCollection > previousGsfElectrons
void beginEvent(edm::Event &, const edm::EventSetup &)
GsfElectronAlgo::Tokens inputCfg_
void setPassPflowPreselection(bool flag)
const GsfElectronAlgo::CutsConfiguration cutsCfgPflow_
float sumChargedHadronPt
sum-pt of charged Hadron // old float chargedHadronIso ;
ParameterSet const & parameterSet(Provenance const &provenance)
Provenance const * provenance() const
const GsfElectronAlgo::CutsConfiguration cutsCfg_
void produce(edm::Event &, const edm::EventSetup &) override