Skip to content

Commit

Permalink
Merged LowPtElectronsFull_102X_update from repository bainbrid with c…
Browse files Browse the repository at this point in the history
…ms-merge-topic
  • Loading branch information
bainbrid committed Feb 25, 2019
2 parents 99d5920 + 71cfe25 commit 1847612
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,9 @@ void LowPtGsfElectronIDProducer::fillDescriptions( edm::ConfigurationDescription
edm::ParameterSetDescription desc;
desc.add<edm::InputTag>("electrons",edm::InputTag("lowPtGsfElectrons"));
desc.add<edm::InputTag>("rho",edm::InputTag("fixedGridRhoFastjetAllTmp"));
desc.add< std::vector<std::string> >("ModelNames",std::vector<std::string>({""}));
desc.add< std::vector<std::string> >("ModelWeights",std::vector<std::string>({"RecoEgamma/ElectronIdentification/data/LowPtElectrons/RunII_Fall17_LowPtElectrons_mva_id.xml.gz"}));
desc.add< std::vector<double> >("ModelThresholds",std::vector<double>({-1.}));
desc.add< std::vector<std::string> >("ModelNames",std::vector<std::string>());
desc.add< std::vector<std::string> >("ModelWeights",std::vector<std::string>());
desc.add< std::vector<double> >("ModelThresholds",std::vector<double>());
desc.add<bool>("PassThrough",false);
desc.add<double>("MinPtThreshold",0.5);
desc.add<double>("MaxPtThreshold",15.);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,32 +61,34 @@ void LowPtGsfElectronSCProducer::produce( edm::Event& event, const edm::EventSet

// Index[GSF track][trajectory point] for "best" CaloCluster
std::vector< std::vector<int> > cluster_idx;
cluster_idx.resize( gsfPfRecTracks->size(), std::vector<int>() );
cluster_idx.reserve( gsfPfRecTracks->size());

// Index[GSF track][trajectory point] for "best" PFCluster
std::vector< std::vector<int> > pfcluster_idx;
pfcluster_idx.resize( gsfPfRecTracks->size(), std::vector<int>() );
pfcluster_idx.reserve( gsfPfRecTracks->size());

// dr2min[GSF track][trajectory point] for "best" CaloCluster
std::vector< std::vector<float> > cluster_dr2min;
cluster_dr2min.resize( gsfPfRecTracks->size(), std::vector<float>() );
cluster_dr2min.reserve( gsfPfRecTracks->size());

// Construct list of trajectory points from the GSF track and electron brems
std::vector< std::vector<const reco::PFTrajectoryPoint*> > points;
points.resize( gsfPfRecTracks->size(), std::vector<const reco::PFTrajectoryPoint*>() );
for ( size_t itrk = 0; itrk < gsfPfRecTracks->size(); ++itrk ) {
points.reserve( gsfPfRecTracks->size());
for ( auto const& trk: *gsfPfRecTracks) {
// Extrapolated track
reco::GsfPFRecTrackRef trk(gsfPfRecTracks,itrk);
points[itrk].reserve(trk->PFRecBrem().size()+1);
points[itrk].push_back( &trk->extrapolatedPoint(reco::PFTrajectoryPoint::LayerType::ECALShowerMax) );
std::vector<const reco::PFTrajectoryPoint*> traj;
traj.reserve(trk.PFRecBrem().size()+1);
traj.push_back( &trk.extrapolatedPoint(reco::PFTrajectoryPoint::LayerType::ECALShowerMax) );
// Extrapolated brem trajectories
for ( auto brem : trk->PFRecBrem() ) {
points[itrk].push_back( &brem.extrapolatedPoint(reco::PFTrajectoryPoint::LayerType::ECALShowerMax) );
for ( auto const& brem : trk.PFRecBrem() ) {
traj.push_back( &brem.extrapolatedPoint(reco::PFTrajectoryPoint::LayerType::ECALShowerMax) );
}
// Resize containers
cluster_idx[itrk].resize(points[itrk].size(),-1);
pfcluster_idx[itrk].resize(points[itrk].size(),-1);
cluster_dr2min[itrk].resize(points[itrk].size(),1.e6);
auto size = traj.size();
points.push_back(std::move(traj));
// Size containers
cluster_idx.emplace_back(size,-1);
pfcluster_idx.emplace_back(size,-1);
cluster_dr2min.emplace_back(size,1.e6);
}

// For each cluster, find closest trajectory point ("global" arbitration at event level)
Expand Down Expand Up @@ -153,8 +155,10 @@ void LowPtGsfElectronSCProducer::produce( edm::Event& event, const edm::EventSet
X += clu->position().X() * clu->correctedEnergy();
Y += clu->position().Y() * clu->correctedEnergy();
Z += clu->position().Z() * clu->correctedEnergy();
reco::PFClusterRef pfclu(ecalClusters,pfcluster_idx[itrk][ipoint]);
if ( pfclu.isNonnull() ) { barePtrs.push_back(&*pfclu); }
auto index = pfcluster_idx[itrk][ipoint];
if(index < static_cast<decltype(index)>(ecalClusters->size())) {
barePtrs.push_back(&(*ecalClusters)[index]);
}
}
X /= energy;
Y /= energy;
Expand All @@ -166,7 +170,6 @@ void LowPtGsfElectronSCProducer::produce( edm::Event& event, const edm::EventSet
sc.setCorrectedEnergy(energy);
sc.setSeed(seed);
sc.setClusters(clusters);
for ( const auto clu : clusters ) { sc.addCluster(clu); }
PFClusterWidthAlgo pfwidth(barePtrs);
sc.setEtaWidth(pfwidth.pflowEtaWidth());
sc.setPhiWidth(pfwidth.pflowPhiWidth());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
#include "DataFormats/Common/interface/Handle.h"
#include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
#include "DataFormats/EgammaCandidates/interface/GsfElectronCore.h"
#include "DataFormats/EgammaReco/interface/ElectronSeed.h"
#include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h"
#include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
#include "DataFormats/GsfTrackReco/interface/GsfTrackExtra.h"
#include "DataFormats/ParticleFlowReco/interface/PreId.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/Utilities/interface/InputTag.h"
Expand All @@ -14,7 +13,7 @@
////////////////////////////////////////////////////////////////////////////////
//
LowPtGsfElectronSeedValueMapsProducer::LowPtGsfElectronSeedValueMapsProducer( const edm::ParameterSet& conf ) :
gsfElectrons_(consumes<reco::GsfElectronCollection>(conf.getParameter<edm::InputTag>("electrons"))),
gsfTracks_(consumes<reco::GsfTrackCollection>(conf.getParameter<edm::InputTag>("gsfTracks"))),
preIdsValueMap_(consumes< edm::ValueMap<reco::PreIdRef> >(conf.getParameter<edm::InputTag>("preIdsValueMap"))),
names_(conf.getParameter< std::vector<std::string> >("ModelNames"))
{
Expand All @@ -29,33 +28,32 @@ LowPtGsfElectronSeedValueMapsProducer::~LowPtGsfElectronSeedValueMapsProducer()
//
void LowPtGsfElectronSeedValueMapsProducer::produce( edm::Event& event, const edm::EventSetup& setup ) {

// Retrieve GsfElectrons from Event
edm::Handle<reco::GsfElectronCollection> gsfElectrons;
event.getByToken(gsfElectrons_,gsfElectrons);
if ( !gsfElectrons.isValid() ) { edm::LogError("Problem with gsfElectrons handle"); }
// Retrieve GsfTracks from Event
edm::Handle<reco::GsfTrackCollection> gsfTracks;
event.getByToken(gsfTracks_,gsfTracks);
if ( !gsfTracks.isValid() ) { edm::LogError("Problem with gsfTracks handle"); }

// Retrieve PreIds from Event
edm::Handle< edm::ValueMap<reco::PreIdRef> > preIdsValueMap;
event.getByToken(preIdsValueMap_,preIdsValueMap);
if ( !preIdsValueMap.isValid() ) { edm::LogError("Problem with preIdsValueMap handle"); }

// Iterate through Electrons, extract BDT output, and store result in ValueMap for each model
// Iterate through GsfTracks, extract BDT output, and store result in ValueMap for each model
std::vector< std::vector<float> > output;
for ( unsigned int iname = 0; iname < names_.size(); ++iname ) {
output.push_back( std::vector<float>(gsfElectrons->size(),-999.) );
output.push_back( std::vector<float>(gsfTracks->size(),-999.) );
}
for ( unsigned int iele = 0; iele < gsfElectrons->size(); iele++ ) {
reco::GsfElectronRef ele(gsfElectrons,iele);
if ( ele->core().isNonnull() &&
ele->core()->gsfTrack().isNonnull() &&
ele->core()->gsfTrack()->extra().isNonnull() &&
ele->core()->gsfTrack()->extra()->seedRef().isNonnull() ) {
reco::ElectronSeedRef seed = ele->core()->gsfTrack()->extra()->seedRef().castTo<reco::ElectronSeedRef>();
for ( unsigned int igsf = 0; igsf < gsfTracks->size(); igsf++ ) {
reco::GsfTrackRef gsf(gsfTracks,igsf);
if ( gsf.isNonnull() &&
gsf->extra().isNonnull() &&
gsf->extra()->seedRef().isNonnull() ) {
reco::ElectronSeedRef seed = gsf->extra()->seedRef().castTo<reco::ElectronSeedRef>();
if ( seed.isNonnull() && seed->ctfTrack().isNonnull() ) {
const reco::PreIdRef preid = (*preIdsValueMap)[seed->ctfTrack()];
if ( preid.isNonnull() ) {
for ( unsigned int iname = 0; iname < names_.size(); ++iname ) {
output[iname][iele] = preid->mva(iname);
output[iname][igsf] = preid->mva(iname);
}
}
}
Expand All @@ -66,7 +64,7 @@ void LowPtGsfElectronSeedValueMapsProducer::produce( edm::Event& event, const ed
for ( unsigned int iname = 0; iname < names_.size(); ++iname ) {
auto ptr = std::make_unique< edm::ValueMap<float> >( edm::ValueMap<float>() );
edm::ValueMap<float>::Filler filler(*ptr);
filler.insert(gsfElectrons, output[iname].begin(), output[iname].end());
filler.insert(gsfTracks, output[iname].begin(), output[iname].end());
filler.fill();
event.put(std::move(ptr),names_[iname]);
}
Expand All @@ -78,9 +76,9 @@ void LowPtGsfElectronSeedValueMapsProducer::produce( edm::Event& event, const ed
void LowPtGsfElectronSeedValueMapsProducer::fillDescriptions( edm::ConfigurationDescriptions& descriptions )
{
edm::ParameterSetDescription desc;
desc.add<edm::InputTag>("electrons",edm::InputTag("lowPtGsfElectrons"));
desc.add<edm::InputTag>("gsfTracks",edm::InputTag("lowPtGsfEleGsfTracks"));
desc.add<edm::InputTag>("preIdsValueMap",edm::InputTag("lowPtGsfElectronSeeds"));
desc.add< std::vector<std::string> >("ModelNames",std::vector<std::string>({"default"}));
desc.add< std::vector<std::string> >("ModelNames",std::vector<std::string>());
descriptions.add("defaultLowPtGsfElectronSeedValueMaps",desc);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#define RecoEgamma_EgammaElectronProducers_LowPtGsfElectronSeedValueMapsProducer_h

#include "DataFormats/Common/interface/ValueMap.h"
#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
#include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h"
#include "DataFormats/ParticleFlowReco/interface/PreIdFwd.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/stream/EDProducer.h"
Expand All @@ -24,11 +24,10 @@ class LowPtGsfElectronSeedValueMapsProducer : public edm::stream::EDProducer<> {

private:

const edm::EDGetTokenT<reco::GsfElectronCollection> gsfElectrons_;
const edm::EDGetTokenT<reco::GsfTrackCollection> gsfTracks_;
const edm::EDGetTokenT< edm::ValueMap<reco::PreIdRef> > preIdsValueMap_;
const std::vector<std::string> names_;

};

#endif // RecoEgamma_EgammaElectronProducers_LowPtGsfElectronSeedValueMapsProducer_h

Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,10 @@

from RecoEgamma.EgammaElectronProducers.defaultLowPtGsfElectronID_cfi import defaultLowPtGsfElectronID

lowPtGsfElectronID = defaultLowPtGsfElectronID.clone()
lowPtGsfElectronID = defaultLowPtGsfElectronID.clone(
ModelNames = cms.vstring(['']),
ModelWeights = cms.vstring([
'RecoEgamma/ElectronIdentification/data/LowPtElectrons/RunII_Autumn18_LowPtElectrons_mva_id.xml.gz',
]),
ModelThresholds = cms.vdouble([-10.])
)
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import FWCore.ParameterSet.Config as cms

def thresholds( wp ) :
return cms.vdouble([{"L": 1.03,"M":1.75,"T":2.61}.get(wp,1.e6), # unbiased
{"L":-0.48,"M":0.76,"T":1.83}.get(wp,1.e6)]) # ptbiased
return cms.vdouble([{"L": 1.20,"M":2.02,"T":3.05}.get(wp,1.e6), # unbiased
{"L": 0.01,"M":1.29,"T":2.42}.get(wp,1.e6)]) # ptbiased

lowPtGsfElectronSeeds = cms.EDProducer(
"LowPtGsfElectronSeedProducer",
Expand All @@ -22,8 +22,8 @@ def thresholds( wp ) :
'ptbiased',
]),
ModelWeights = cms.vstring([
'RecoEgamma/ElectronIdentification/data/LowPtElectrons/RunII_Fall17_LowPtElectrons_unbiased.xml.gz',
'RecoEgamma/ElectronIdentification/data/LowPtElectrons/RunII_Fall17_LowPtElectrons_displaced_pt_eta_biased.xml.gz',
'RecoEgamma/ElectronIdentification/data/LowPtElectrons/RunII_Autumn18_LowPtElectrons_unbiased.xml.gz',
'RecoEgamma/ElectronIdentification/data/LowPtElectrons/RunII_Autumn18_LowPtElectrons_displaced_pt_eta_biased.xml.gz',
]),
ModelThresholds = thresholds("T"),
PassThrough = cms.bool(False),
Expand Down

0 comments on commit 1847612

Please sign in to comment.