CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
LeptonJetVarProducer< T > Class Template Reference

#include <PhysicsTools/NanoAOD/plugins/LeptonJetVarProducer.cc>

Inheritance diagram for LeptonJetVarProducer< T >:
edm::global::EDProducer<> edm::global::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 LeptonJetVarProducer (const edm::ParameterSet &iConfig)
 
 ~LeptonJetVarProducer () override
 
- Public Member Functions inherited from edm::global::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::global::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
virtual ~ProducerBase () noexcept(false)
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::global::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Member Functions

std::tuple< float, float, float > calculatePtRatioRel (edm::Ptr< reco::Candidate > lep, edm::Ptr< pat::Jet > jet, const reco::Vertex &vtx) const
 
void produce (edm::StreamID, edm::Event &, const edm::EventSetup &) const override
 

Private Attributes

edm::EDGetTokenT< edm::View< pat::Jet > > srcJet_
 
edm::EDGetTokenT< edm::View< T > > srcLep_
 
edm::EDGetTokenT< std::vector< reco::Vertex > > srcVtx_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

template<typename T>
class LeptonJetVarProducer< T >

Description: [one line class summary]

Implementation: [Notes on implementation]

Definition at line 48 of file LeptonJetVarProducer.cc.

Constructor & Destructor Documentation

template<typename T >
LeptonJetVarProducer< T >::LeptonJetVarProducer ( const edm::ParameterSet iConfig)
inlineexplicit

Definition at line 50 of file LeptonJetVarProducer.cc.

50  :
53  srcVtx_(consumes<std::vector<reco::Vertex>>(iConfig.getParameter<edm::InputTag>("srcVtx")))
54  {
55  produces<edm::ValueMap<float>>("ptRatio");
56  produces<edm::ValueMap<float>>("ptRel");
57  produces<edm::ValueMap<float>>("jetNDauChargedMVASel");
58  produces<edm::ValueMap<reco::CandidatePtr>>("jetForLepJetVar");
59  }
T getParameter(std::string const &) const
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
edm::EDGetTokenT< std::vector< reco::Vertex > > srcVtx_
edm::EDGetTokenT< edm::View< pat::Jet > > srcJet_
edm::EDGetTokenT< edm::View< T > > srcLep_
template<typename T >
LeptonJetVarProducer< T >::~LeptonJetVarProducer ( )
inlineoverride

Member Function Documentation

template<typename T >
std::tuple< float, float, float > LeptonJetVarProducer< T >::calculatePtRatioRel ( edm::Ptr< reco::Candidate lep,
edm::Ptr< pat::Jet jet,
const reco::Vertex vtx 
) const
private

Definition at line 156 of file LeptonJetVarProducer.cc.

References pat::Jet::correctedP4(), edmIntegrityCheck::d, pat::Jet::daughterPtrVector(), deltaR(), MillePedeFileConverter_cfg::e, objects.autophobj::float, pat::Jet::jecFactor(), reco::Candidate::p4(), reco::Vertex::position(), reco::LeafCandidate::pt(), and dttmaxenums::R.

Referenced by LeptonJetVarProducer< T >::produce(), and LeptonJetVarProducer< T >::~LeptonJetVarProducer().

156  {
157 
158  auto rawp4 = jet->correctedP4("Uncorrected");
159  auto lepp4 = lep->p4();
160 
161  if ((rawp4-lepp4).R()<1e-4) return std::tuple<float,float,float>(1.0,0.0,0.0);
162 
163  auto l1corrFactor = jet->jecFactor("L1FastJet")/jet->jecFactor("Uncorrected");
164 
165  auto jetp4 = (rawp4 - lepp4*(1.0/l1corrFactor))*(jet->pt()/rawp4.pt())+lepp4;
166  auto ptratio = lepp4.pt()/jetp4.pt();
167  auto ptrel = lepp4.Vect().Cross((jetp4-lepp4).Vect().Unit()).R();
168 
169  unsigned int jndau = 0;
170  for(const auto _d : jet->daughterPtrVector()) {
171  const auto d = dynamic_cast<const pat::PackedCandidate*>(_d.get());
172  if (d->charge()==0) continue;
173  if (d->fromPV()<=1) continue;
174  if (deltaR(*d,*lep)>0.4) continue;
175  if (!(d->hasTrackDetails())) continue;
176  auto tk = d->pseudoTrack();
177  if(tk.pt()>1 &&
178  tk.hitPattern().numberOfValidHits()>=8 &&
179  tk.hitPattern().numberOfValidPixelHits()>=2 &&
180  tk.normalizedChi2()<5 &&
181  fabs(tk.dxy(vtx.position()))<0.2 &&
182  fabs(tk.dz(vtx.position()))<17
183  ) jndau++;
184  }
185 
186  return std::tuple<float,float,float>(ptratio,ptrel,float(jndau));
187 }
const LorentzVector correctedP4(const std::string &level, const std::string &flavor="none", const std::string &set="") const
Definition: Jet.h:158
double pt() const final
transverse momentum
const Point & position() const
position
Definition: Vertex.h:109
virtual const LorentzVector & p4() const =0
four-momentum Lorentz vector
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
float jecFactor(const std::string &level, const std::string &flavor="none", const std::string &set="") const
const reco::CompositePtrCandidate::daughters & daughterPtrVector() const override
references to daughtes
template<typename T >
void LeptonJetVarProducer< T >::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 192 of file LeptonJetVarProducer.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by LeptonJetVarProducer< T >::~LeptonJetVarProducer().

192  {
193  //The following says we do not know what parameters are allowed so do no validation
194  // Please change this to state exactly what you do use, even if it is no parameters
196  desc.add<edm::InputTag>("srcJet")->setComment("jet input collection");
197  desc.add<edm::InputTag>("srcLep")->setComment("lepton input collection");
198  desc.add<edm::InputTag>("srcVtx")->setComment("primary vertex input collection");
199  std::string modname;
200  if (typeid(T) == typeid(pat::Muon)) modname+="Muon";
201  else if (typeid(T) == typeid(pat::Electron)) modname+="Electron";
202  modname+="JetVarProducer";
203  descriptions.add(modname,desc);
204 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Analysis-level electron class.
Definition: Electron.h:52
void add(std::string const &label, ParameterSetDescription const &psetDescription)
long double T
Analysis-level muon class.
Definition: Muon.h:50
template<typename T >
void LeptonJetVarProducer< T >::produce ( edm::StreamID  streamID,
edm::Event iEvent,
const edm::EventSetup iSetup 
) const
overrideprivate

Definition at line 92 of file LeptonJetVarProducer.cc.

References LeptonJetVarProducer< T >::calculatePtRatioRel(), edm::helper::Filler< Map >::fill(), edm::Event::getByToken(), edm::helper::Filler< Map >::insert(), metsig::jet, electrons_cff::jetForLepJetVar, electrons_cff::jetNDauChargedMVASel, matchByCommonSourceCandidatePtr(), eostools::move(), electrons_cff::ptRatio, ptRel(), edm::Event::put(), MetAnalyzer::pv(), electrons_cff::srcJet, LeptonJetVarProducer< T >::srcJet_, electrons_cff::srcLep, LeptonJetVarProducer< T >::srcLep_, electrons_cff::srcVtx, and LeptonJetVarProducer< T >::srcVtx_.

Referenced by LeptonJetVarProducer< T >::~LeptonJetVarProducer().

93 {
94 
96  iEvent.getByToken(srcJet_, srcJet);
98  iEvent.getByToken(srcLep_, srcLep);
100  iEvent.getByToken(srcVtx_, srcVtx);
101 
102  unsigned int nJet = srcJet->size();
103  unsigned int nLep = srcLep->size();
104 
105  std::vector<float> ptRatio(nLep,-1);
106  std::vector<float> ptRel(nLep,-1);
107  std::vector<float> jetNDauChargedMVASel(nLep,0);
108  std::vector<reco::CandidatePtr> jetForLepJetVar(nLep,reco::CandidatePtr());
109 
110  const auto & pv = (*srcVtx)[0];
111 
112  for (unsigned int il = 0; il<nLep; il++){
113  for (unsigned int ij = 0; ij<nJet; ij++){
114  auto lep = srcLep->ptrAt(il);
115  auto jet = srcJet->ptrAt(ij);
117  auto res = calculatePtRatioRel(lep,jet,pv);
118  ptRatio[il] = std::get<0>(res);
119  ptRel[il] = std::get<1>(res);
120  jetNDauChargedMVASel[il] = std::get<2>(res);
121  jetForLepJetVar[il] = jet;
122  break; // take leading jet with shared source candidates
123  }
124  }
125  }
126 
127  std::unique_ptr<edm::ValueMap<float>> ptRatioV(new edm::ValueMap<float>());
128  edm::ValueMap<float>::Filler fillerRatio(*ptRatioV);
129  fillerRatio.insert(srcLep,ptRatio.begin(),ptRatio.end());
130  fillerRatio.fill();
131  iEvent.put(std::move(ptRatioV),"ptRatio");
132 
133  std::unique_ptr<edm::ValueMap<float>> ptRelV(new edm::ValueMap<float>());
134  edm::ValueMap<float>::Filler fillerRel(*ptRelV);
135  fillerRel.insert(srcLep,ptRel.begin(),ptRel.end());
136  fillerRel.fill();
137  iEvent.put(std::move(ptRelV),"ptRel");
138 
139  std::unique_ptr<edm::ValueMap<float>> jetNDauChargedMVASelV(new edm::ValueMap<float>());
140  edm::ValueMap<float>::Filler fillerNDau(*jetNDauChargedMVASelV);
141  fillerNDau.insert(srcLep,jetNDauChargedMVASel.begin(),jetNDauChargedMVASel.end());
142  fillerNDau.fill();
143  iEvent.put(std::move(jetNDauChargedMVASelV),"jetNDauChargedMVASel");
144 
145  std::unique_ptr<edm::ValueMap<reco::CandidatePtr>> jetForLepJetVarV(new edm::ValueMap<reco::CandidatePtr>());
146  edm::ValueMap<reco::CandidatePtr>::Filler fillerjetForLepJetVar(*jetForLepJetVarV);
147  fillerjetForLepJetVar.insert(srcLep,jetForLepJetVar.begin(),jetForLepJetVar.end());
148  fillerjetForLepJetVar.fill();
149  iEvent.put(std::move(jetForLepJetVarV),"jetForLepJetVar");
150 
151 
152 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:127
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:508
std::tuple< float, float, float > calculatePtRatioRel(edm::Ptr< reco::Candidate > lep, edm::Ptr< pat::Jet > jet, const reco::Vertex &vtx) const
Definition: Electron.h:4
edm::EDGetTokenT< std::vector< reco::Vertex > > srcVtx_
bool matchByCommonSourceCandidatePtr(const C1 &c1, const C2 &c2)
Definition: MatchingUtils.h:9
def pv(vc)
Definition: MetAnalyzer.py:6
float ptRel(const reco::Candidate::LorentzVector &muP4, const reco::Candidate::LorentzVector &jetP4, bool subtractMuon=true)
edm::EDGetTokenT< edm::View< pat::Jet > > srcJet_
def move(src, dest)
Definition: eostools.py:510
edm::EDGetTokenT< edm::View< T > > srcLep_

Member Data Documentation

template<typename T >
edm::EDGetTokenT<edm::View<pat::Jet> > LeptonJetVarProducer< T >::srcJet_
private

Definition at line 71 of file LeptonJetVarProducer.cc.

Referenced by LeptonJetVarProducer< T >::produce().

template<typename T >
edm::EDGetTokenT<edm::View<T> > LeptonJetVarProducer< T >::srcLep_
private

Definition at line 72 of file LeptonJetVarProducer.cc.

Referenced by LeptonJetVarProducer< T >::produce().

template<typename T >
edm::EDGetTokenT<std::vector<reco::Vertex> > LeptonJetVarProducer< T >::srcVtx_
private

Definition at line 73 of file LeptonJetVarProducer.cc.

Referenced by LeptonJetVarProducer< T >::produce().