CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PATElectronSlimmer.cc
Go to the documentation of this file.
1 
8 
10 
23 
24 namespace pat {
25 
27  public:
28  explicit PATElectronSlimmer(const edm::ParameterSet & iConfig);
29  virtual ~PATElectronSlimmer() { }
30 
31  virtual void produce(edm::Event & iEvent, const edm::EventSetup & iSetup) override final;
32  virtual void beginLuminosityBlock(const edm::LuminosityBlock&, const edm::EventSetup&) override final;
33 
34  private:
35  const edm::EDGetTokenT<edm::View<pat::Electron> > src_;
36 
39 
40  const edm::EDGetTokenT<edm::ValueMap<std::vector<reco::PFCandidateRef> > > reco2pf_;
41  const edm::EDGetTokenT<edm::Association<pat::PackedCandidateCollection> > pf2pc_;
42  const edm::EDGetTokenT<pat::PackedCandidateCollection> pc_;
47  std::unique_ptr<pat::ObjectModifier<pat::Electron> > electronModifier_;
48  };
49 
50 } // namespace
51 
53  src_(consumes<edm::View<pat::Electron> >(iConfig.getParameter<edm::InputTag>("src"))),
54  dropSuperClusters_(iConfig.getParameter<std::string>("dropSuperCluster")),
55  dropBasicClusters_(iConfig.getParameter<std::string>("dropBasicClusters")),
56  dropPFlowClusters_(iConfig.getParameter<std::string>("dropPFlowClusters")),
57  dropPreshowerClusters_(iConfig.getParameter<std::string>("dropPreshowerClusters")),
58  dropSeedCluster_(iConfig.getParameter<std::string>("dropSeedCluster")),
59  dropRecHits_(iConfig.getParameter<std::string>("dropRecHits")),
60  dropCorrections_(iConfig.getParameter<std::string>("dropCorrections")),
61  dropIsolations_(iConfig.getParameter<std::string>("dropIsolations")),
62  dropShapes_(iConfig.getParameter<std::string>("dropShapes")),
63  dropExtrapolations_(iConfig.getParameter<std::string>("dropExtrapolations")),
64  dropClassifications_(iConfig.getParameter<std::string>("dropClassifications")),
65  reco2pf_(mayConsume<edm::ValueMap<std::vector<reco::PFCandidateRef>>>(iConfig.getParameter<edm::InputTag>("recoToPFMap"))),
66  pf2pc_(mayConsume<edm::Association<pat::PackedCandidateCollection>>(iConfig.getParameter<edm::InputTag>("packedPFCandidates"))),
67  pc_(mayConsume<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("packedPFCandidates"))),
68  linkToPackedPF_(iConfig.getParameter<bool>("linkToPackedPFCandidates")),
69  saveNonZSClusterShapes_(iConfig.getParameter<std::string>("saveNonZSClusterShapes")),
70  reducedBarrelRecHitCollectionToken_(consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("reducedBarrelRecHitCollection"))),
71  reducedEndcapRecHitCollectionToken_(consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("reducedEndcapRecHitCollection"))),
72  modifyElectron_(iConfig.getParameter<bool>("modifyElectrons"))
73 {
75  if( modifyElectron_ ) {
76  const edm::ParameterSet& mod_config = iConfig.getParameter<edm::ParameterSet>("modifierConfig");
77  electronModifier_.reset(new pat::ObjectModifier<pat::Electron>(mod_config) );
78  electronModifier_->setConsumes(sumes);
79  } else {
80  electronModifier_.reset(nullptr);
81  }
82 
83  mayConsume<EcalRecHitCollection>(edm::InputTag("reducedEcalRecHitsEB"));
84  mayConsume<EcalRecHitCollection>(edm::InputTag("reducedEcalRecHitsEE"));
85 
86  produces<std::vector<pat::Electron> >();
87 }
88 
89 void
91 }
92 
93 void
95  using namespace edm;
96  using namespace std;
97 
99  iEvent.getByToken(src_, src);
100 
104  if (linkToPackedPF_) {
105  iEvent.getByToken(reco2pf_, reco2pf);
106  iEvent.getByToken(pf2pc_, pf2pc);
107  iEvent.getByToken(pc_, pc);
108  }
110 
111  auto_ptr<vector<pat::Electron> > out(new vector<pat::Electron>());
112  out->reserve(src->size());
113 
114  if( modifyElectron_ ) { electronModifier_->setEvent(iEvent); }
115  if( modifyElectron_ ) electronModifier_->setEventContent(iSetup);
116 
117  std::vector<unsigned int> keys;
118  for (View<pat::Electron>::const_iterator it = src->begin(), ed = src->end(); it != ed; ++it) {
119  out->push_back(*it);
120  pat::Electron & electron = out->back();
121 
122  if( modifyElectron_ ) { electronModifier_->modify(electron); }
123 
124  if (dropSuperClusters_(electron)) { electron.superCluster_.clear(); electron.embeddedSuperCluster_ = false; }
125  if (dropBasicClusters_(electron)) { electron.basicClusters_.clear(); }
126  if (dropSuperClusters_(electron) || dropPFlowClusters_(electron)) { electron.pflowSuperCluster_.clear(); electron.embeddedPflowSuperCluster_ = false; }
127  if (dropBasicClusters_(electron) || dropPFlowClusters_(electron)) { electron.pflowBasicClusters_.clear(); }
128  if (dropPreshowerClusters_(electron)) { electron.preshowerClusters_.clear(); }
129  if (dropPreshowerClusters_(electron) || dropPFlowClusters_(electron)) { electron.pflowPreshowerClusters_.clear(); }
130  if (dropSeedCluster_(electron)) { electron.seedCluster_.clear(); electron.embeddedSeedCluster_ = false; }
131  if (dropRecHits_(electron)) { electron.recHits_ = EcalRecHitCollection(); electron.embeddedRecHits_ = false; }
132  if (dropCorrections_(electron)) { electron.setCorrections(reco::GsfElectron::Corrections()); }
134  if (dropShapes_(electron)) { electron.setShowerShape(reco::GsfElectron::ShowerShape()); }
137  if (linkToPackedPF_) {
138  //std::cout << " PAT electron in " << src.id() << " comes from " << electron.refToOrig_.id() << ", " << electron.refToOrig_.key() << std::endl;
139  keys.clear();
140  for(auto const& pf: (*reco2pf)[electron.refToOrig_]) {
141  if( pf2pc->contains(pf.id()) ) {
142  keys.push_back( (*pf2pc)[pf].key());
143  }
144  }
146  keys.begin(), keys.end());
147  //std::cout << "Electron with pt " << electron.pt() << " associated to " << electron.associatedPackedFCandidateIndices_.size() << " PF Candidates\n";
148  //if there's just one PF Cand then it's me, otherwise I have no univoque parent so my ref will be null
149  if (keys.size() == 1) {
150  electron.refToOrig_ = electron.sourceCandidatePtr(0);
151  } else {
152  electron.refToOrig_ = reco::CandidatePtr(pc.id());
153  }
154  }
155  if (saveNonZSClusterShapes_(electron)) {
156  std::vector<float> vCov = lazyToolsNoZS.localCovariances(*( electron.superCluster()->seed()));
157  electron.full5x5_setSigmaIetaIphi(vCov[1]);
158  }
159  }
160 
161  iEvent.put(out);
162 }
163 
165 using namespace pat;
void setDr04Isolation(const IsolationVariables &dr04)
Definition: GsfElectron.h:500
T getParameter(std::string const &) const
const edm::EDGetTokenT< EcalRecHitCollection > reducedEndcapRecHitCollectionToken_
const StringCutObjectSelector< pat::Electron > dropRecHits_
const StringCutObjectSelector< pat::Electron > dropIsolations_
const edm::EDGetTokenT< edm::ValueMap< std::vector< reco::PFCandidateRef > > > reco2pf_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:449
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
const StringCutObjectSelector< pat::Electron > dropSuperClusters_
std::vector< pat::PackedCandidate > PackedCandidateCollection
const StringCutObjectSelector< pat::Electron > dropCorrections_
void full5x5_setSigmaIetaIphi(float sigmaIetaIphi)
Definition: Electron.h:211
void setShowerShape(const ShowerShape &s)
Definition: GsfElectron.h:434
std::vector< reco::SuperCluster > superCluster_
Place to store electron&#39;s supercluster internally.
Definition: Electron.h:280
Slimmer of PAT Electrons.
void setHcalPFClusterIso(float hcalPFClus)
Definition: Electron.h:161
const edm::EDGetTokenT< edm::Association< pat::PackedCandidateCollection > > pf2pc_
void setPfIsolationVariables(const PflowIsolationVariables &iso)
Definition: GsfElectron.h:609
void setDr03Isolation(const IsolationVariables &dr03)
Definition: GsfElectron.h:499
std::vector< reco::CaloCluster > pflowBasicClusters_
Place to store electron&#39;s pflow basic clusters internally.
Definition: Electron.h:288
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
const edm::EDGetTokenT< EcalRecHitCollection > reducedBarrelRecHitCollectionToken_
std::unique_ptr< pat::ObjectModifier< pat::Electron > > electronModifier_
virtual void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) overridefinal
std::vector< reco::CaloCluster > basicClusters_
Place to store electron&#39;s basic clusters internally.
Definition: Electron.h:284
reco::SuperClusterRef superCluster() const
override the reco::GsfElectron::superCluster method, to access the internal storage of the superclust...
int iEvent
Definition: GenABIO.cc:230
const StringCutObjectSelector< pat::Electron > dropBasicClusters_
std::vector< reco::CaloCluster > preshowerClusters_
Place to store electron&#39;s preshower clusters internally.
Definition: Electron.h:286
PATElectronSlimmer(const edm::ParameterSet &iConfig)
bool embeddedRecHits_
True if RecHits stored internally.
Definition: Electron.h:302
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:113
const StringCutObjectSelector< pat::Electron > dropPreshowerClusters_
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
const StringCutObjectSelector< pat::Electron > dropClassifications_
const StringCutObjectSelector< pat::Electron > dropShapes_
const StringCutObjectSelector< pat::Electron > dropExtrapolations_
bool embeddedSeedCluster_
True if seed cluster is stored internally.
Definition: Electron.h:298
const StringCutObjectSelector< pat::Electron > saveNonZSClusterShapes_
edm::Ref< PFCandidateCollection > PFCandidateRef
persistent reference to a PFCandidate
tuple out
Definition: dbtoconf.py:99
EcalRecHitCollection recHits_
Place to store electron&#39;s RecHits internally (5x5 around seed+ all RecHits)
Definition: Electron.h:304
const StringCutObjectSelector< pat::Electron > dropSeedCluster_
virtual void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) overridefinal
edm::Ptr< Candidate > CandidatePtr
persistent reference to an object in a collection of Candidate objects
Definition: CandidateFwd.h:25
void setEcalPFClusterIso(float ecalPFClus)
Definition: Electron.h:160
const StringCutObjectSelector< pat::Electron > dropPFlowClusters_
void setClassification(Classification myclass)
Definition: GsfElectron.h:690
bool embeddedPflowSuperCluster_
True if electron&#39;s pflowsupercluster is stored internally.
Definition: Electron.h:278
std::vector< float > localCovariances(const reco::BasicCluster &cluster, float w0=4.7)
Analysis-level electron class.
Definition: Electron.h:52
string const
Definition: compareJSON.py:14
bool embeddedSuperCluster_
True if electron&#39;s supercluster is stored internally.
Definition: Electron.h:276
#define private
Definition: FWFileEntry.h:17
void setTrackExtrapolations(const TrackExtrapolations &te)
Definition: GsfElectron.h:297
reco::CandidatePtr sourceCandidatePtr(size_type i) const
get the source candidate pointer with index i
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:81
std::vector< reco::CaloCluster > pflowPreshowerClusters_
Place to store electron&#39;s pflow preshower clusters internally.
Definition: Electron.h:290
void setCorrections(const Corrections &c)
Definition: GsfElectron.h:767
void setAssociatedPackedPFCandidates(const edm::RefProd< pat::PackedCandidateCollection > &refprod, T beginIndexItr, T endIndexItr)
References to PFCandidates linked to this object (e.g. for isolation vetos or masking before jet recl...
Definition: Electron.h:250
void setClassificationVariables(const ClassificationVariables &cv)
Definition: GsfElectron.h:689
const edm::EDGetTokenT< edm::View< pat::Electron > > src_
const edm::EDGetTokenT< pat::PackedCandidateCollection > pc_
EDGetTokenT< ProductType > mayConsume(edm::InputTag const &tag)
edm::Ptr< reco::Candidate > refToOrig_
Definition: PATObject.h:407
std::vector< reco::SuperCluster > pflowSuperCluster_
Place to store electron&#39;s pflow supercluster internally.
Definition: Electron.h:292
edm::SortedCollection< EcalRecHit > EcalRecHitCollection
std::vector< reco::CaloCluster > seedCluster_
Place to store electron&#39;s seed cluster internally.
Definition: Electron.h:300