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
SoftPFMuonTagInfoProducer Class Reference

#include <SoftPFMuonTagInfoProducer.h>

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

Public Member Functions

 SoftPFMuonTagInfoProducer (const edm::ParameterSet &conf)
 
 ~SoftPFMuonTagInfoProducer ()
 
- 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

virtual float boostedPPar (const math::XYZVector &, const math::XYZVector &)
 
virtual void produce (edm::Event &, const edm::EventSetup &)
 

Private Attributes

float IPsigcut
 
edm::EDGetTokenT< edm::View
< reco::Jet > > 
jetToken
 
edm::EDGetTokenT< edm::View
< reco::Muon > > 
muonToken
 
float pTcut
 
float ratio1cut
 
float ratio2cut
 
float SIPsigcut
 
bool useFilter
 
edm::EDGetTokenT
< reco::VertexCollection
vertexToken
 

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 29 of file SoftPFMuonTagInfoProducer.h.

Constructor & Destructor Documentation

SoftPFMuonTagInfoProducer::SoftPFMuonTagInfoProducer ( const edm::ParameterSet conf)

Definition at line 36 of file SoftPFMuonTagInfoProducer.cc.

References edm::ParameterSet::getParameter(), IPsigcut, jetToken, muonToken, pTcut, ratio1cut, ratio2cut, SIPsigcut, useFilter, and vertexToken.

36  {
37  jetToken = consumes<edm::View<reco::Jet> >(conf.getParameter<edm::InputTag>("jets"));
38  muonToken = consumes<edm::View<reco::Muon> >(conf.getParameter<edm::InputTag>("muons"));
39  vertexToken = consumes<reco::VertexCollection>(conf.getParameter<edm::InputTag>("primaryVertex"));
40  pTcut = conf.getParameter<double>("muonPt");
41  SIPsigcut = conf.getParameter<double>("muonSIPsig");
42  IPsigcut = conf.getParameter<double>("filterIpsig");
43  ratio1cut = conf.getParameter<double>("filterRatio1");
44  ratio2cut = conf.getParameter<double>("filterRatio2");
45  useFilter = conf.getParameter<bool>("filterPromptMuons");
46  produces<reco::CandSoftLeptonTagInfoCollection>();
47 }
T getParameter(std::string const &) const
edm::EDGetTokenT< edm::View< reco::Jet > > jetToken
edm::EDGetTokenT< reco::VertexCollection > vertexToken
edm::EDGetTokenT< edm::View< reco::Muon > > muonToken
SoftPFMuonTagInfoProducer::~SoftPFMuonTagInfoProducer ( )

Definition at line 49 of file SoftPFMuonTagInfoProducer.cc.

49 {}

Member Function Documentation

float SoftPFMuonTagInfoProducer::boostedPPar ( const math::XYZVector vector,
const math::XYZVector axis 
)
privatevirtual

Definition at line 156 of file SoftPFMuonTagInfoProducer.cc.

References metsig::jet.

Referenced by produce().

156  {
157  static const double lepton_mass = 0.00; // assume a massless (ultrarelativistic) lepton
158  static const double jet_mass = 5.279; // use B±/B0 mass as the jet rest mass [PDG 2007 updates]
159  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double> > lepton(vector.Dot(axis) / axis.r(), ROOT::Math::VectorUtil::Perp(vector, axis), 0., lepton_mass);
160  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double> > jet( axis.r(), 0., 0., jet_mass );
161  ROOT::Math::BoostX boost( -jet.Beta() );
162  return boost(lepton).x();
163 }
void SoftPFMuonTagInfoProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
privatevirtual

Implements edm::stream::EDProducerBase.

Definition at line 51 of file SoftPFMuonTagInfoProducer.cc.

References funct::abs(), boostedPPar(), TransientTrackBuilder::build(), reco::CompositePtrCandidate::daughterPtr(), reco::deltaR(), dot(), edm::EventSetup::get(), edm::Ptr< T >::get(), edm::Ref< C, T, F >::get(), edm::Event::getByToken(), reco::Muon::innerTrack(), reco::TemplatedSoftLeptonTagInfo< REF >::insert(), IPsigcut, muon::isLooseMuon(), edm::HandleBase::isValid(), jetToken, cmsBatch::log, mag(), reco::LeafCandidate::momentum(), metsig::muon, reco::PFCandidate::muonRef(), muonToken, NULL, reco::CompositePtrCandidate::numberOfDaughters(), pat::PATObject< ObjectType >::originalObjectRef(), reco::LeafCandidate::p4(), edm::ESHandle< class >::product(), reco::LeafCandidate::pt(), pTcut, edm::Event::put(), reco::LeafCandidate::px(), reco::LeafCandidate::py(), reco::LeafCandidate::pz(), dttmaxenums::R, ratio1cut, ratio2cut, reco::JetTagInfo::setJetRef(), IPTools::signedImpactParameter3D(), IPTools::signedTransverseImpactParameter(), Measurement1D::significance(), SIPsigcut, dumpRecoGeometry_cfg::tagInfo, useFilter, Measurement1D::value(), and vertexToken.

51  {
52  // Declare produced collection
53  std::auto_ptr<reco::CandSoftLeptonTagInfoCollection> theMuonTagInfo(new reco::CandSoftLeptonTagInfoCollection);
54 
55  // Declare and open Jet collection
56  edm::Handle<edm::View<reco::Jet> > theJetCollection;
57  iEvent.getByToken(jetToken, theJetCollection);
58 
59  // Declare Muon collection
60  edm::Handle<edm::View<reco::Muon> > theMuonCollection;
61  iEvent.getByToken(muonToken, theMuonCollection);
62 
63  // Declare and open Vertex collection
64  edm::Handle<reco::VertexCollection> theVertexCollection;
65  iEvent.getByToken(vertexToken, theVertexCollection);
66  if(!theVertexCollection.isValid() || theVertexCollection->empty()) return;
67  const reco::Vertex* vertex=&theVertexCollection->front();
68 
69  // Biult TransientTrackBuilder
71  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder", theTrackBuilder);
72  const TransientTrackBuilder* transientTrackBuilder=theTrackBuilder.product();
73 
74  // Loop on jets
75  for(unsigned int ij=0, nj=theJetCollection->size(); ij<nj; ij++) {
76  edm::RefToBase<reco::Jet> jetRef = theJetCollection->refAt(ij);
77  // Build TagInfo object
79  tagInfo.setJetRef(jetRef);
80  // Loop on jet daughters
81  for(unsigned int id=0, nd=jetRef->numberOfDaughters(); id<nd; ++id) {
82  edm::Ptr<reco::Candidate> lepPtr = jetRef->daughterPtr(id);
83  if(std::abs(lepPtr->pdgId())!=13) continue;
84 
85  const reco::Muon* muon(NULL);
86  // Step 1: try to access the muon from reco::PFCandidate
87  const reco::PFCandidate* pfcand=dynamic_cast<const reco::PFCandidate*>(lepPtr.get());
88  if(pfcand) {
89  muon=pfcand->muonRef().get();
90  }
91  // If not PFCandidate is available, find a match looping on the muon collection
92  else {
93  for(unsigned int im=0, nm=theMuonCollection->size(); im<nm; ++im) { // --- Begin loop on muons
94  const reco::Muon* recomuon=&theMuonCollection->at(im);
95  const pat::Muon* patmuon=dynamic_cast<const pat::Muon*>(recomuon);
96  // Step 2: try a match between reco::Candidate
97  if(patmuon) {
98  if(patmuon->originalObjectRef()==lepPtr) {
99  muon=theMuonCollection->refAt(im).get();
100  break;
101  }
102  }
103  // Step 3: try a match with dR and dpT if pat::Muon casting fails
104  else {
105  if(reco::deltaR(*recomuon, *lepPtr)<0.01 && std::abs(recomuon->pt()-lepPtr->pt())/lepPtr->pt()<0.1) {
106  muon=theMuonCollection->refAt(im).get();
107  break;
108  }
109  }
110  } // --- End loop on muons
111  }
112  if(!muon || !muon::isLooseMuon(*muon) || muon->pt()<pTcut) continue;
113  reco::TrackRef trkRef( muon->innerTrack() );
114  reco::TrackBaseRef trkBaseRef( trkRef );
115  // Build Transient Track
116  reco::TransientTrack transientTrack=transientTrackBuilder->build(trkRef);
117  // Define jet and muon vectors
118  reco::Candidate::Vector jetvect(jetRef->p4().Vect()), muonvect(muon->p4().Vect());
119  // Calculate variables
120  reco::SoftLeptonProperties properties;
121  Measurement1D ip2d = IPTools::signedTransverseImpactParameter(transientTrack, GlobalVector(jetRef->px(), jetRef->py(), jetRef->pz()), *vertex).second;
122  Measurement1D ip3d = IPTools::signedImpactParameter3D(transientTrack, GlobalVector(jetRef->px(), jetRef->py(), jetRef->pz()), *vertex).second;
123  properties.sip2dsig = ip2d.significance();
124  properties.sip3dsig = ip3d.significance();
125  properties.sip2d = ip2d.value();
126  properties.sip3d = ip3d.value();
127  properties.deltaR = reco::deltaR(*jetRef, *muon);
128  properties.ptRel = ( (jetvect-muonvect).Cross(muonvect) ).R() / jetvect.R(); // | (Pj-Pu) X Pu | / | Pj |
129  float mag = muonvect.R()*jetvect.R();
130  float dot = muon->p4().Dot(jetRef->p4());
131  properties.etaRel = -log((mag - dot)/(mag + dot)) / 2.;
132  properties.ratio = muon->pt() / jetRef->pt();
133  properties.ratioRel = muon->p4().Dot(jetRef->p4()) / jetvect.Mag2();
134  properties.p0Par = boostedPPar(muon->momentum(), jetRef->momentum());
135 
136  if(std::abs(properties.sip3dsig)>SIPsigcut) continue;
137 
138  // Filter leptons from W, Z decays
139  if(useFilter && ((std::abs(properties.sip3dsig)<IPsigcut && properties.ratio>ratio1cut) || properties.ratio>ratio2cut)) continue;
140 
141  // Insert lepton properties
142  tagInfo.insert(lepPtr, properties);
143 
144  } // --- End loop on daughters
145 
146  // Fill the TagInfo collection
147  theMuonTagInfo->push_back(tagInfo);
148  } // --- End loop on jets
149 
150  // Put the TagInfo collection in the event
151  iEvent.put(theMuonTagInfo);
152 }
math::XYZVector Vector
point in the space
Definition: Candidate.h:43
CandidatePtr daughterPtr(size_type i) const
reference to daughter at given position
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
T const * get() const
Returns C++ pointer to the item.
Definition: Ptr.h:160
std::pair< bool, Measurement1D > signedTransverseImpactParameter(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:50
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
bool isLooseMuon(const reco::Muon &)
virtual size_t numberOfDaughters() const
number of daughters
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:120
std::vector< CandSoftLeptonTagInfo > CandSoftLeptonTagInfoCollection
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::EDGetTokenT< edm::View< reco::Jet > > jetToken
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
const edm::Ptr< reco::Candidate > & originalObjectRef() const
reference to original object. Returns a null reference if not available
Definition: PATObject.h:498
bool isValid() const
Definition: HandleBase.h:75
virtual float boostedPPar(const math::XYZVector &, const math::XYZVector &)
reco::MuonRef muonRef() const
Definition: PFCandidate.cc:450
void insert(const REF &lepton, const SoftLeptonProperties &properties)
double significance() const
Definition: Measurement1D.h:32
virtual double px() const
x coordinate of momentum vector
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
double value() const
Definition: Measurement1D.h:28
virtual double pz() const
z coordinate of momentum vector
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:39
edm::EDGetTokenT< reco::VertexCollection > vertexToken
T dot(const Basic3DVector &v) const
Scalar product, or &quot;dot&quot; product, with a vector of same type.
edm::EDGetTokenT< edm::View< reco::Muon > > muonToken
virtual const LorentzVector & p4() const
four-momentum Lorentz vector
Definition: LeafCandidate.h:99
Analysis-level muon class.
Definition: Muon.h:49
virtual double py() const
y coordinate of momentum vector
Global3DVector GlobalVector
Definition: GlobalVector.h:10
tuple log
Definition: cmsBatch.py:341

Member Data Documentation

float SoftPFMuonTagInfoProducer::IPsigcut
private

Definition at line 44 of file SoftPFMuonTagInfoProducer.h.

Referenced by produce(), and SoftPFMuonTagInfoProducer().

edm::EDGetTokenT<edm::View<reco::Jet> > SoftPFMuonTagInfoProducer::jetToken
private

Definition at line 41 of file SoftPFMuonTagInfoProducer.h.

Referenced by produce(), and SoftPFMuonTagInfoProducer().

edm::EDGetTokenT<edm::View<reco::Muon> > SoftPFMuonTagInfoProducer::muonToken
private

Definition at line 42 of file SoftPFMuonTagInfoProducer.h.

Referenced by produce(), and SoftPFMuonTagInfoProducer().

float SoftPFMuonTagInfoProducer::pTcut
private

Definition at line 44 of file SoftPFMuonTagInfoProducer.h.

Referenced by produce(), and SoftPFMuonTagInfoProducer().

float SoftPFMuonTagInfoProducer::ratio1cut
private

Definition at line 44 of file SoftPFMuonTagInfoProducer.h.

Referenced by produce(), and SoftPFMuonTagInfoProducer().

float SoftPFMuonTagInfoProducer::ratio2cut
private

Definition at line 44 of file SoftPFMuonTagInfoProducer.h.

Referenced by produce(), and SoftPFMuonTagInfoProducer().

float SoftPFMuonTagInfoProducer::SIPsigcut
private

Definition at line 44 of file SoftPFMuonTagInfoProducer.h.

Referenced by produce(), and SoftPFMuonTagInfoProducer().

bool SoftPFMuonTagInfoProducer::useFilter
private

Definition at line 45 of file SoftPFMuonTagInfoProducer.h.

Referenced by produce(), and SoftPFMuonTagInfoProducer().

edm::EDGetTokenT<reco::VertexCollection> SoftPFMuonTagInfoProducer::vertexToken
private

Definition at line 43 of file SoftPFMuonTagInfoProducer.h.

Referenced by produce(), and SoftPFMuonTagInfoProducer().