CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
SoftPFElectronTagInfoProducer Class Reference

#include <SoftPFElectronTagInfoProducer.h>

Inheritance diagram for SoftPFElectronTagInfoProducer:
edm::stream::EDProducer<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 SoftPFElectronTagInfoProducer (const edm::ParameterSet &conf)
 
 ~SoftPFElectronTagInfoProducer ()
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Member Functions

float boostedPPar (const math::XYZVector &, const math::XYZVector &)
 
bool isElecClean (edm::Event &, const reco::GsfElectron *)
 
virtual void produce (edm::Event &, const edm::EventSetup &)
 

Private Attributes

float DeltaRElectronJet
 
bool goodvertex
 
float MaxSip3Dsig
 
edm::EDGetTokenT
< reco::ConversionCollection
token_allConversions
 
edm::EDGetTokenT< reco::BeamSpottoken_BeamSpot
 
edm::EDGetTokenT< edm::View
< reco::GsfElectron > > 
token_elec
 
edm::EDGetTokenT< edm::View
< reco::Jet > > 
token_jets
 
edm::EDGetTokenT
< reco::VertexCollection
token_primaryVertex
 
const TransientTrackBuildertransientTrackBuilder
 
const reco::Vertexvertex
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T...> CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T...> HasAbility
 
typedef
CacheTypes::LuminosityBlockCache 
LuminosityBlockCache
 
typedef
LuminosityBlockContextT
< LuminosityBlockCache,
RunCache, GlobalCache
LuminosityBlockContext
 
typedef
CacheTypes::LuminosityBlockSummaryCache 
LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache,
GlobalCache
RunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::stream::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- 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

Definition at line 30 of file SoftPFElectronTagInfoProducer.h.

Constructor & Destructor Documentation

SoftPFElectronTagInfoProducer::SoftPFElectronTagInfoProducer ( const edm::ParameterSet conf)

Definition at line 30 of file SoftPFElectronTagInfoProducer.cc.

References DeltaRElectronJet, edm::ParameterSet::getParameter(), HLT_25ns14e33_v1_cff::InputTag, MaxSip3Dsig, token_allConversions, token_BeamSpot, token_elec, token_jets, and token_primaryVertex.

31 {
32  token_jets = consumes<edm::View<reco::Jet> >(conf.getParameter<edm::InputTag>("jets"));
33  token_elec = consumes<edm::View<reco::GsfElectron> >(conf.getParameter<edm::InputTag>("electrons"));
34  token_primaryVertex = consumes<reco::VertexCollection>(conf.getParameter<edm::InputTag>("primaryVertex"));
35  token_BeamSpot = consumes<reco::BeamSpot>(edm::InputTag("offlineBeamSpot"));
36  token_allConversions= consumes<reco::ConversionCollection>(edm::InputTag("allConversions"));
37  DeltaRElectronJet = conf.getParameter<double>("DeltaRElectronJet");
38  MaxSip3Dsig = conf.getParameter<double>("MaxSip3Dsig");
39  produces<reco::CandSoftLeptonTagInfoCollection>();
40 }
T getParameter(std::string const &) const
edm::EDGetTokenT< reco::ConversionCollection > token_allConversions
edm::EDGetTokenT< edm::View< reco::GsfElectron > > token_elec
edm::EDGetTokenT< reco::BeamSpot > token_BeamSpot
edm::EDGetTokenT< reco::VertexCollection > token_primaryVertex
edm::EDGetTokenT< edm::View< reco::Jet > > token_jets
SoftPFElectronTagInfoProducer::~SoftPFElectronTagInfoProducer ( )

Definition at line 42 of file SoftPFElectronTagInfoProducer.cc.

43 {
44 
45 }

Member Function Documentation

float SoftPFElectronTagInfoProducer::boostedPPar ( const math::XYZVector vector,
const math::XYZVector axis 
)
private

Definition at line 139 of file SoftPFElectronTagInfoProducer.cc.

References metsig::jet.

Referenced by produce().

139  {
140  static const double lepton_mass = 0.00;
141  static const double jet_mass = 5.279;
142  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double> > lepton(vector.Dot(axis) / axis.r(), ROOT::Math::VectorUtil::Perp(vector, axis), 0., lepton_mass);
143  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double> > jet( axis.r(), 0., 0., jet_mass );
144  ROOT::Math::BoostX boost( -jet.Beta() );
145  return boost(lepton).x();
146 }
bool SoftPFElectronTagInfoProducer::isElecClean ( edm::Event iEvent,
const reco::GsfElectron candidate 
)
private

Definition at line 125 of file SoftPFElectronTagInfoProducer.cc.

References edm::Ref< C, T, F >::get(), reco::GsfElectron::gsfTrack(), and dt_dqm_sourceclient_common_cff::reco.

Referenced by produce().

126 {
127  using namespace reco;
128  const HitPattern &hitPattern = candidate->gsfTrack().get()->hitPattern();
129  uint32_t hit = hitPattern.getHitPattern(HitPattern::TRACK_HITS, 0);
130  bool hitCondition = !(HitPattern::validHitFilter(hit)
131  && ((HitPattern::pixelBarrelHitFilter(hit)
132  && HitPattern::getLayer(hit) < 3)
133  || HitPattern::pixelEndcapHitFilter(hit)));
134  if(hitCondition) return false;
135 
136  return true;
137 }
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
virtual GsfTrackRef gsfTrack() const
reference to a GsfTrack
Definition: GsfElectron.h:183
void SoftPFElectronTagInfoProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
privatevirtual

Implements edm::stream::EDProducerBase.

Definition at line 47 of file SoftPFElectronTagInfoProducer.cc.

References funct::abs(), HLT_25ns14e33_v1_cff::beamspot, boostedPPar(), TransientTrackBuilder::build(), reco::SoftLeptonProperties::deltaR, reco::deltaR(), reco::deltaR2(), DeltaRElectronJet, dot(), reco::SoftLeptonProperties::elec_mva, reco::SoftLeptonProperties::etaRel, edm::EventSetup::get(), edm::Ref< C, T, F >::get(), edm::Event::getByToken(), goodvertex, reco::GsfElectron::gsfTrack(), ConversionTools::hasMatchedConversion(), i, reco::TemplatedSoftLeptonTagInfo< REF >::insert(), isElecClean(), edm::HandleBase::isValid(), cmsBatch::log, mag(), MaxSip3Dsig, reco::LeafCandidate::momentum(), reco::GsfElectron::mva_e_pi(), Vispa.Plugins.EdmBrowser.EdmDataAccessor::ne(), NULL, reco::SoftLeptonProperties::p0Par, reco::LeafCandidate::p4(), reco::GsfElectron::p4(), pat::Electron::passConversionVeto(), reco::BeamSpot::position(), edm::Handle< T >::product(), edm::ESHandle< class >::product(), reco::LeafCandidate::pt(), reco::SoftLeptonProperties::ptRel, edm::Event::put(), reco::LeafCandidate::px(), reco::LeafCandidate::py(), reco::LeafCandidate::pz(), dttmaxenums::R, reco::SoftLeptonProperties::ratio, reco::SoftLeptonProperties::ratioRel, reco::JetTagInfo::setJetRef(), IPTools::signedImpactParameter3D(), IPTools::signedTransverseImpactParameter(), Measurement1D::significance(), reco::SoftLeptonProperties::sip2d, reco::SoftLeptonProperties::sip2dsig, reco::SoftLeptonProperties::sip3d, reco::SoftLeptonProperties::sip3dsig, dumpRecoGeometry_cfg::tagInfo, token_allConversions, token_BeamSpot, token_elec, token_jets, token_primaryVertex, transientTrackBuilder, Measurement1D::value(), and vertex.

48 {
49  std::auto_ptr<reco::CandSoftLeptonTagInfoCollection> theElecTagInfo(new reco::CandSoftLeptonTagInfoCollection);
51  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder", builder);
53 
55  iEvent.getByToken(token_primaryVertex, PVCollection);
56  if(!PVCollection.isValid()) return;
57  if(!PVCollection->empty()){
58  goodvertex = true;
59  vertex=&PVCollection->front();
60  }else goodvertex = false;
62  iEvent.getByToken(token_allConversions, hConversions);
63 
64  edm::Handle<edm::View<reco::Jet> > theJetCollection;
65  iEvent.getByToken(token_jets, theJetCollection);
66 
67  edm::Handle<edm::View<reco::GsfElectron > > theGEDGsfElectronCollection;
68  iEvent.getByToken(token_elec, theGEDGsfElectronCollection);
69 
71  iEvent.getByToken(token_BeamSpot, bsHandle);
72  const reco::BeamSpot &beamspot = *bsHandle.product();
73 
74  for (unsigned int i = 0; i < theJetCollection->size(); i++){
75  edm::RefToBase<reco::Jet> jetRef = theJetCollection->refAt(i);
77  tagInfo.setJetRef(jetRef);
78  std::vector<const reco::GsfElectron *> Elec;
79  for(unsigned int ie=0, ne=theGEDGsfElectronCollection->size(); ie<ne; ++ie){
80  //Get the edm::Ptr and the GsfElectron
81  edm::Ptr<reco::Candidate> lepPtr=theGEDGsfElectronCollection->ptrAt(ie);
82  const reco::GsfElectron* recoelectron=theGEDGsfElectronCollection->refAt(ie).get();
83  const pat::Electron* patelec=dynamic_cast<const pat::Electron*>(recoelectron);
84  if(patelec){
85  if(!patelec->passConversionVeto()) continue;
86  }
87  else{
88  if(ConversionTools::hasMatchedConversion(*(recoelectron),hConversions,beamspot.position())) continue;
89  }
90  //Make sure that the electron is inside the jet
91  if(reco::deltaR2((*recoelectron),(*jetRef))>DeltaRElectronJet*DeltaRElectronJet) continue;
92  // Need a gsfTrack
93  if(recoelectron->gsfTrack().get()==NULL) continue;
94  reco::SoftLeptonProperties properties;
95  // reject if it has issues with the track
96  if(!isElecClean(iEvent,recoelectron) ) continue;
97  //Compute the TagInfos members
98  math::XYZVector pel=recoelectron->p4().Vect();
99  math::XYZVector pjet=jetRef->p4().Vect();
100  reco::TransientTrack transientTrack=transientTrackBuilder->build(recoelectron->gsfTrack());
101  Measurement1D ip2d = IPTools::signedTransverseImpactParameter(transientTrack, GlobalVector(jetRef->px(), jetRef->py(), jetRef->pz()), *vertex).second;
102  Measurement1D ip3d = IPTools::signedImpactParameter3D(transientTrack, GlobalVector(jetRef->px(), jetRef->py(), jetRef->pz()), *vertex).second;
103  properties.sip2dsig = ip2d.significance();
104  properties.sip3dsig = ip3d.significance();
105  properties.sip2d = ip2d.value();
106  properties.sip3d = ip3d.value();
107  properties.deltaR = reco::deltaR((*jetRef), (*recoelectron));
108  properties.ptRel = ( (pjet-pel).Cross(pel) ).R() / pjet.R();
109  float mag = pel.R()*pjet.R();
110  float dot = recoelectron->p4().Dot(jetRef->p4());
111  properties.etaRel = -log((mag - dot)/(mag + dot)) / 2.;
112  properties.ratio = recoelectron->pt() / jetRef->pt();
113  properties.ratioRel = recoelectron->p4().Dot(jetRef->p4()) / pjet.Mag2();
114  properties.p0Par = boostedPPar(recoelectron->momentum(), jetRef->momentum());
115  properties.elec_mva = recoelectron->mva_e_pi();
116  if(std::abs(properties.sip3dsig)>MaxSip3Dsig) continue;
117  // Fill the TagInfos
118  tagInfo.insert(lepPtr, properties );
119  }
120  theElecTagInfo->push_back(tagInfo);
121  }
122  iEvent.put(theElecTagInfo);
123 }
int i
Definition: DBlmapReader.cc:9
float boostedPPar(const math::XYZVector &, const math::XYZVector &)
edm::EDGetTokenT< reco::ConversionCollection > token_allConversions
edm::EDGetTokenT< edm::View< reco::GsfElectron > > token_elec
const LorentzVector & p4(P4Kind kind) const
Definition: GsfElectron.cc:223
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
std::pair< bool, Measurement1D > signedTransverseImpactParameter(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:50
edm::EDGetTokenT< reco::BeamSpot > token_BeamSpot
virtual Vector momentum() const
spatial momentum vector
reco::TransientTrack build(const reco::Track *p) const
std::pair< bool, Measurement1D > signedImpactParameter3D(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:71
#define NULL
Definition: scimark2.h:8
double deltaR(const T1 &t1, const T2 &t2)
Definition: deltaR.h:48
void setJetRef(const edm::Ref< T > &jetRef)
Definition: JetTagInfo.h:25
virtual double pt() const
transverse momentum
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:120
std::vector< CandSoftLeptonTagInfo > CandSoftLeptonTagInfoCollection
bool isElecClean(edm::Event &, const reco::GsfElectron *)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double deltaR2(const T1 &t1, const T2 &t2)
Definition: deltaR.h:36
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
bool isValid() const
Definition: HandleBase.h:75
static bool hasMatchedConversion(const reco::GsfElectron &ele, const edm::Handle< reco::ConversionCollection > &convCol, const math::XYZPoint &beamspot, bool allowCkfMatch=true, float lxyMin=2.0, float probMin=1e-6, unsigned int nHitsBeforeVtxMax=0)
void insert(const REF &lepton, const SoftLeptonProperties &properties)
double significance() const
Definition: Measurement1D.h:32
T const * product() const
Definition: Handle.h:81
virtual double px() const
x coordinate of momentum vector
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
edm::EDGetTokenT< reco::VertexCollection > token_primaryVertex
Analysis-level electron class.
Definition: Electron.h:52
double value() const
Definition: Measurement1D.h:28
bool passConversionVeto() const
vertex fit combined with missing number of hits method
Definition: Electron.h:243
virtual double pz() const
z coordinate of momentum vector
float mva_e_pi() const
Definition: GsfElectron.h:629
T dot(const Basic3DVector &v) const
Scalar product, or &quot;dot&quot; product, with a vector of same type.
const Point & position() const
position
Definition: BeamSpot.h:62
virtual const LorentzVector & p4() const
four-momentum Lorentz vector
Definition: LeafCandidate.h:99
edm::EDGetTokenT< edm::View< reco::Jet > > token_jets
virtual double py() const
y coordinate of momentum vector
const TransientTrackBuilder * transientTrackBuilder
Global3DVector GlobalVector
Definition: GlobalVector.h:10
virtual GsfTrackRef gsfTrack() const
reference to a GsfTrack
Definition: GsfElectron.h:183
tuple log
Definition: cmsBatch.py:341

Member Data Documentation

float SoftPFElectronTagInfoProducer::DeltaRElectronJet
private

Definition at line 50 of file SoftPFElectronTagInfoProducer.h.

Referenced by produce(), and SoftPFElectronTagInfoProducer().

bool SoftPFElectronTagInfoProducer::goodvertex
private

Definition at line 51 of file SoftPFElectronTagInfoProducer.h.

Referenced by produce().

float SoftPFElectronTagInfoProducer::MaxSip3Dsig
private

Definition at line 50 of file SoftPFElectronTagInfoProducer.h.

Referenced by produce(), and SoftPFElectronTagInfoProducer().

edm::EDGetTokenT<reco::ConversionCollection> SoftPFElectronTagInfoProducer::token_allConversions
private

Definition at line 49 of file SoftPFElectronTagInfoProducer.h.

Referenced by produce(), and SoftPFElectronTagInfoProducer().

edm::EDGetTokenT<reco::BeamSpot> SoftPFElectronTagInfoProducer::token_BeamSpot
private

Definition at line 48 of file SoftPFElectronTagInfoProducer.h.

Referenced by produce(), and SoftPFElectronTagInfoProducer().

edm::EDGetTokenT<edm::View<reco::GsfElectron> > SoftPFElectronTagInfoProducer::token_elec
private

Definition at line 47 of file SoftPFElectronTagInfoProducer.h.

Referenced by produce(), and SoftPFElectronTagInfoProducer().

edm::EDGetTokenT<edm::View<reco::Jet> > SoftPFElectronTagInfoProducer::token_jets
private

Definition at line 46 of file SoftPFElectronTagInfoProducer.h.

Referenced by produce(), and SoftPFElectronTagInfoProducer().

edm::EDGetTokenT<reco::VertexCollection> SoftPFElectronTagInfoProducer::token_primaryVertex
private

Definition at line 45 of file SoftPFElectronTagInfoProducer.h.

Referenced by produce(), and SoftPFElectronTagInfoProducer().

const TransientTrackBuilder* SoftPFElectronTagInfoProducer::transientTrackBuilder
private

Definition at line 44 of file SoftPFElectronTagInfoProducer.h.

Referenced by produce().

const reco::Vertex* SoftPFElectronTagInfoProducer::vertex
private

Definition at line 53 of file SoftPFElectronTagInfoProducer.h.

Referenced by Tau.Tau::dxy(), and produce().