Skip to content

Commit

Permalink
Merge pull request #2890 from beaudett/fix-provenance
Browse files Browse the repository at this point in the history
Reco -- Fix provenance of electrons
  • Loading branch information
ktf committed Apr 4, 2014
2 parents 733ae63 + 55d98cf commit c2ee106
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 16 deletions.
@@ -1,4 +1,4 @@
#include "RecoEgamma/EgammaElectronProducers/plugins/PFIsolationFiller.h"
#include "RecoEgamma/EgammaElectronProducers/plugins/GEDGsfElectronFinalizer.h"

#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/MakerMacros.h"
Expand All @@ -7,15 +7,17 @@
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"

#include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"

#include <iostream>
#include <string>

using namespace reco;

PFIsolationFiller::PFIsolationFiller( const edm::ParameterSet & cfg )
GEDGsfElectronFinalizer::GEDGsfElectronFinalizer( const edm::ParameterSet & cfg )
{
previousGsfElectrons_ = consumes<reco::GsfElectronCollection>(cfg.getParameter<edm::InputTag>("previousGsfElectronsTag"));
pfCandidates_ = consumes<reco::PFCandidateCollection>(cfg.getParameter<edm::InputTag>("pfCandidatesTag"));
outputCollectionLabel_ = cfg.getParameter<std::string>("outputCollectionLabel");
edm::ParameterSet pfIsoVals(cfg.getParameter<edm::ParameterSet> ("pfIsolationValues"));

Expand All @@ -35,11 +37,11 @@ PFIsolationFiller::PFIsolationFiller( const edm::ParameterSet & cfg )
produces<reco::GsfElectronCollection> (outputCollectionLabel_);
}

PFIsolationFiller::~PFIsolationFiller()
GEDGsfElectronFinalizer::~GEDGsfElectronFinalizer()
{}

// ------------ method called to produce the data ------------
void PFIsolationFiller::produce( edm::Event & event, const edm::EventSetup & setup )
void GEDGsfElectronFinalizer::produce( edm::Event & event, const edm::EventSetup & setup )
{

// Output collection
Expand All @@ -50,13 +52,28 @@ void PFIsolationFiller::produce( edm::Event & event, const edm::EventSetup & set
edm::Handle<reco::GsfElectronCollection> gedElectronHandle;
event.getByToken(previousGsfElectrons_,gedElectronHandle);

// PFCandidates
edm::Handle<reco::PFCandidateCollection> pfCandidateHandle;
event.getByToken(pfCandidates_,pfCandidateHandle);
// value maps

std::vector< edm::Handle< edm::ValueMap<double> > > isolationValueMaps(nDeps_);

for(unsigned i=0; i < nDeps_ ; ++i) {
event.getByToken(tokenElectronIsoVals_[i],isolationValueMaps[i]);
}

// prepare a map of PFCandidates having a valid GsfTrackRef to save time
std::map<reco::GsfTrackRef, const reco::PFCandidate* > gsfPFMap;
reco::PFCandidateCollection::const_iterator it = pfCandidateHandle->begin();
reco::PFCandidateCollection::const_iterator itend = pfCandidateHandle->end() ;
for(;it!=itend;++it) {
// First check that the GsfTrack is non null
if( it->gsfTrackRef().isNonnull()) {
if(abs(it->pdgId())==11) // consider only the electrons
gsfPFMap[it->gsfTrackRef()]=&(*it);
}
}


// Now loop on the electrons
unsigned nele=gedElectronHandle->size();
Expand All @@ -71,6 +88,20 @@ void PFIsolationFiller::produce( edm::Event & event, const edm::EventSetup & set
isoVariables.sumPUPt = (*(isolationValueMaps)[3])[myElectronRef];
newElectron.setPfIsolationVariables(isoVariables);

// now set a status if not already done (in GEDGsfElectronProducer.cc)
// std::cout << " previous status " << newElectron.mvaOutput().status << std::endl;
if(newElectron.mvaOutput().status<=0) {
std::map<reco::GsfTrackRef, const reco::PFCandidate * >::const_iterator itcheck=gsfPFMap.find(newElectron.gsfTrack());
reco::GsfElectron::MvaOutput myMvaOutput(newElectron.mvaOutput());
if(itcheck!=gsfPFMap.end()) {
// it means that there is a PFCandidate with the same GsfTrack
myMvaOutput.status = 3; //as defined in PFCandidateEGammaExtra.h
}
else
myMvaOutput.status = 4 ; //

newElectron.setMvaOutput(myMvaOutput);
}
outputElectrons_p->push_back(newElectron);
}

Expand Down
@@ -1,27 +1,29 @@

#ifndef PFIsolationFiller_h
#define PFIsolationFiller_h
#ifndef GEDGsfElectronFinalizer_h
#define GEDGsfElectronFinalizer_h

#include "FWCore/Framework/interface/EDProducer.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"

#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
#include "DataFormats/Common/interface/ValueMap.h"

#include <string>
#include <vector>

class PFIsolationFiller : public edm::EDProducer
class GEDGsfElectronFinalizer : public edm::EDProducer
{
public:
explicit PFIsolationFiller (const edm::ParameterSet &);
~PFIsolationFiller();
explicit GEDGsfElectronFinalizer (const edm::ParameterSet &);
~GEDGsfElectronFinalizer();

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

private:
edm::EDGetTokenT<reco::GsfElectronCollection> previousGsfElectrons_;
edm::EDGetTokenT<reco::PFCandidateCollection> pfCandidates_;
std::string outputCollectionLabel_;
std::vector<edm::EDGetTokenT<edm::ValueMap<double> > > tokenElectronIsoVals_;
unsigned nDeps_;
Expand Down
Expand Up @@ -125,7 +125,7 @@ void GEDGsfElectronProducer::matchWithPFCandidates(edm::Event & event)
reco::GsfElectron::MvaOutput myMvaOutput;
myMvaOutput.mva = it->mva_e_pi();
// at the moment, undefined
myMvaOutput.status = 0;
myMvaOutput.status = it->egammaExtraRef()->electronStatus() ;
gsfMVAOutputMap_[it->gsfTrackRef()] = myMvaOutput;

reco::GsfElectron::MvaInput myMvaInput;
Expand Down
4 changes: 2 additions & 2 deletions RecoEgamma/EgammaElectronProducers/plugins/SealModule.cc
Expand Up @@ -16,7 +16,7 @@

#include "GEDGsfElectronCoreProducer.h"
#include "GEDGsfElectronProducer.h"
#include "PFIsolationFiller.h"
#include "GEDGsfElectronFinalizer.h"

DEFINE_FWK_MODULE(SiStripElectronProducer);
DEFINE_FWK_MODULE(SiStripElectronAssociator);
Expand All @@ -30,4 +30,4 @@ DEFINE_FWK_MODULE(GsfElectronProducer);
DEFINE_FWK_MODULE(SiStripElectronSeedProducer);
DEFINE_FWK_MODULE(GEDGsfElectronCoreProducer);
DEFINE_FWK_MODULE(GEDGsfElectronProducer);
DEFINE_FWK_MODULE(PFIsolationFiller);
DEFINE_FWK_MODULE(GEDGsfElectronFinalizer);
@@ -1,7 +1,8 @@
import FWCore.ParameterSet.Config as cms

gedGsfElectrons = cms.EDProducer("PFIsolationFiller",
gedGsfElectrons = cms.EDProducer("GEDGsfElectronFinalizer",
previousGsfElectronsTag = cms.InputTag("gedGsfElectronsTmp"),
pfCandidatesTag = cms.InputTag("particleFlowTmp"),
pfIsolationValues = cms.PSet(
pfSumChargedHadronPt = cms.InputTag('gedElPFIsoValueCharged03'),
pfSumPhotonEt = cms.InputTag('gedElPFIsoValueGamma03'),
Expand Down
Expand Up @@ -3,7 +3,7 @@
from CommonTools.ParticleFlow.pfParticleSelection_cff import *
from RecoEgamma.EgammaElectronProducers.electronPFIsolationDeposits_cff import *
from RecoEgamma.EgammaElectronProducers.electronPFIsolationValues_cff import *
from RecoEgamma.EgammaElectronProducers.pfIsolationFiller_cfi import *
from RecoEgamma.EgammaElectronProducers.gedGsfElectronFinalizer_cfi import *

# The following should be removed up to <--- when moving to GED only
pfBasedElectronIsoSequence = cms.Sequence(
Expand Down

0 comments on commit c2ee106

Please sign in to comment.