CMS 3D CMS Logo

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

#include <RecoBTag/SoftLepton/plugin/SoftLepton.h>

Inheritance diagram for SoftLepton:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Classes

struct  TrackCompare
 

Public Types

typedef std::map< unsigned int,
float > 
LeptonIds
 
typedef std::map
< edm::RefToBase< reco::Track >
, LeptonIds, TrackCompare
Leptons
 
- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 

Public Member Functions

 SoftLepton (const edm::ParameterSet &iConfig)
 
reco::SoftLeptonTagInfo tag (const edm::RefToBase< reco::Jet > &jet, const reco::TrackRefVector &tracks, const Leptons &leptons, const reco::Vertex &primaryVertex) const
 
 ~SoftLepton ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 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
 EDConsumerBase ()
 
ProductHolderIndex indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndex > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndex > &) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Protected Member Functions

GlobalVector refineJetAxis (const edm::RefToBase< reco::Jet > &jet, const reco::TrackRefVector &tracks, const edm::RefToBase< reco::Track > &exclude=edm::RefToBase< reco::Track >()) const
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- 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)
 

Static Protected Member Functions

static double boostedPPar (const math::XYZVector &vector, const math::XYZVector &axis)
 
static double relativeEta (const math::XYZVector &vector, const math::XYZVector &axis)
 

Private Member Functions

virtual void produce (edm::Event &event, const edm::EventSetup &setup)
 

Private Attributes

double m_chi2Cut
 
double m_deltaRCut
 
const edm::InputTag m_jets
 
const edm::InputTag m_leptonCands
 
const edm::InputTag m_leptonId
 
const edm::InputTag m_leptons
 
muon::SelectionType m_muonSelection
 
const edm::InputTag m_primaryVertex
 
unsigned int m_refineJetAxis
 
const TransientTrackBuilderm_transientTrackBuilder
 

Static Private Attributes

static const reco::Vertex s_nominalBeamSpot
 

Additional Inherited Members

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

Detailed Description

Description: CMSSW EDProducer for soft lepton b tagging.

Implementation:

Description: CMSSW EDProducer wrapper for sot lepton b tagging.

Implementation: The actual tagging is performed by SoftLeptonAlgorithm.

Definition at line 44 of file SoftLepton.h.

Member Typedef Documentation

typedef std::map<unsigned int, float> SoftLepton::LeptonIds

Definition at line 57 of file SoftLepton.h.

Definition at line 58 of file SoftLepton.h.

Constructor & Destructor Documentation

SoftLepton::SoftLepton ( const edm::ParameterSet iConfig)
explicit

Definition at line 94 of file SoftLepton.cc.

94  :
95  m_jets( iConfig.getParameter<edm::InputTag>( "jets" ) ),
96  m_primaryVertex( iConfig.getParameter<edm::InputTag>( "primaryVertex" ) ),
97  m_leptons( iConfig.getParameter<edm::InputTag>( "leptons" ) ),
98  m_leptonCands( iConfig.exists("leptonCands") ? iConfig.getParameter<edm::InputTag>( "leptonCands" ) : edm::InputTag() ),
99  m_leptonId( iConfig.exists("leptonId") ? iConfig.getParameter<edm::InputTag>( "leptonId" ) : edm::InputTag() ),
101  m_refineJetAxis( iConfig.getParameter<unsigned int>( "refineJetAxis" ) ),
102  m_deltaRCut( iConfig.getParameter<double>( "leptonDeltaRCut" ) ),
103  m_chi2Cut( iConfig.getParameter<double>( "leptonChi2Cut" ) ),
104  m_muonSelection( (muon::SelectionType) iConfig.getParameter<unsigned int>( "muonSelection" ) )
105 {
106  produces<reco::SoftLeptonTagInfoCollection>();
107 }
T getParameter(std::string const &) const
bool exists(std::string const &parameterName) const
checks if a parameter exists
double m_chi2Cut
Definition: SoftLepton.h:103
SelectionType
Selector type.
Definition: MuonSelectors.h:18
const edm::InputTag m_leptons
Definition: SoftLepton.h:93
const edm::InputTag m_primaryVertex
Definition: SoftLepton.h:92
const edm::InputTag m_leptonId
Definition: SoftLepton.h:95
double m_deltaRCut
Definition: SoftLepton.h:102
const edm::InputTag m_leptonCands
Definition: SoftLepton.h:94
unsigned int m_refineJetAxis
Definition: SoftLepton.h:101
muon::SelectionType m_muonSelection
Definition: SoftLepton.h:106
const edm::InputTag m_jets
Definition: SoftLepton.h:91
const TransientTrackBuilder * m_transientTrackBuilder
Definition: SoftLepton.h:98
SoftLepton::~SoftLepton ( void  )

Definition at line 110 of file SoftLepton.cc.

110  {
111 }

Member Function Documentation

double SoftLepton::boostedPPar ( const math::XYZVector vector,
const math::XYZVector axis 
)
staticprotected

Definition at line 412 of file SoftLepton.cc.

References metsig::jet.

Referenced by tag().

412  {
413  static const double lepton_mass = 0.00; // assume a massless (ultrarelativistic) lepton
414  static const double jet_mass = 5.279; // use B±/B0 mass as the jet rest mass [PDG 2007 updates]
415  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double> > lepton(vector.Dot(axis) / axis.r(), Perp(vector, axis), 0., lepton_mass);
416  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double> > jet( axis.r(), 0., 0., jet_mass );
417  ROOT::Math::BoostX boost( -jet.Beta() );
418  return boost(lepton).x();
419 }
void SoftLepton::produce ( edm::Event event,
const edm::EventSetup setup 
)
privatevirtual

Implements edm::EDProducer.

Definition at line 115 of file SoftLepton.cc.

References metsig::electron, edm::hlt::Exception, edm::EventSetup::get(), i, muon::isGoodMuon(), edm::HandleBase::isValid(), fwrapper::jets, EgammaValidation_Wenu_cff::leptons, m_jets, m_leptonCands, m_leptonId, m_leptons, m_muonSelection, m_primaryVertex, m_transientTrackBuilder, metsig::muon, edm::errors::NotFound, edm::ESHandle< class >::product(), query::result, s_nominalBeamSpot, findQualityFiles::size, tag(), and testEve_cfg::tracks.

115  {
116 
117  // grab a TransientTrack helper from the Event Setup
119  setup.get<TransientTrackRecord>().get( "TransientTrackBuilder", builder );
120  m_transientTrackBuilder = builder.product();
121 
122  // input objects
123 
124  // input jets (and possibly tracks)
125  ProductID jets_id;
126  std::vector<edm::RefToBase<reco::Jet> > jets;
127  std::vector<reco::TrackRefVector> tracks;
128  do { {
129  // look for a JetTracksAssociationCollection
131  event.getByLabel(m_jets, h_jtas);
132  if (h_jtas.isValid()) {
133  unsigned int size = h_jtas->size();
134  jets.resize(size);
135  tracks.resize(size);
136  for (unsigned int i = 0; i < size; ++i) {
137  jets[i] = (*h_jtas)[i].first;
138  tracks[i] = (*h_jtas)[i].second;
139  }
140  break;
141  }
142  } { // else...
143  // look for a View<Jet>
145  event.getByLabel(m_jets, h_jets);
146  if (h_jets.isValid()) {
147  unsigned int size = h_jets->size();
148  jets.resize(size);
149  tracks.resize(size);
150  for (unsigned int i = 0; i < h_jets->size(); i++)
151  jets[i] = h_jets->refAt(i);
152  break;
153  }
154  } { // else...
155  throw edm::Exception(edm::errors::NotFound) << "Object " << m_jets << " of type among (\"reco::JetTracksAssociationCollection\", \"edm::View<reco::Jet>\") not found";
156  } } while (false);
157 
158  // input primary vetex
159  reco::Vertex vertex;
160  Handle<reco::VertexCollection> h_primaryVertex;
161  event.getByLabel(m_primaryVertex, h_primaryVertex);
162  if (h_primaryVertex.isValid() and not h_primaryVertex->empty())
163  vertex = h_primaryVertex->front();
164  else
165  // fall back to nominal beam spot
166  vertex = s_nominalBeamSpot;
167 
168  // input leptons (can be of different types)
170 
171  Handle< ValueMap<float> > h_leptonCands;
172  bool haveLeptonCands = !(m_leptonCands == edm::InputTag());
173  if (haveLeptonCands)
174  event.getByLabel(m_leptonCands, h_leptonCands);
175 
176  // try to access the input collection as a collection of GsfElectrons, Muons or Tracks
177 
178  unsigned int leptonId = SoftLeptonProperties::quality::leptonId;
179  do { {
180  // look for View<GsfElectron>
181  Handle<GsfElectronView> h_electrons;
182  event.getByLabel(m_leptons, h_electrons);
183 
184  if (h_electrons.isValid()) {
185  leptonId = SoftLeptonProperties::quality::egammaElectronId;
186  for (GsfElectronView::const_iterator electron = h_electrons->begin(); electron != h_electrons->end(); ++electron) {
187  LeptonIds &id = leptons[reco::TrackBaseRef(electron->gsfTrack())];
188  id[SoftLeptonProperties::quality::pfElectronId] = electron->mva();
189  if (haveLeptonCands)
190  id[SoftLeptonProperties::quality::btagElectronCands] = (*h_leptonCands)[h_electrons->refAt(electron - h_electrons->begin())];
191  }
192  break;
193  }
194  } { // else
195  // look for View<Electron>
196  // FIXME: is this obsolete?
197  Handle<ElectronView> h_electrons;
198  event.getByLabel(m_leptons, h_electrons);
199  if (h_electrons.isValid()) {
200  leptonId = SoftLeptonProperties::quality::egammaElectronId;
201  for (ElectronView::const_iterator electron = h_electrons->begin(); electron != h_electrons->end(); ++electron) {
202  LeptonIds &id = leptons[reco::TrackBaseRef(electron->track())];
203  if (haveLeptonCands)
204  id[SoftLeptonProperties::quality::btagElectronCands] = (*h_leptonCands)[h_electrons->refAt(electron - h_electrons->begin())];
205  }
206  break;
207  }
208  } { // else
209  // look for PFElectrons
210  // FIXME: is this obsolete?
212  event.getByLabel(m_leptons, h_electrons);
213  if (h_electrons.isValid()) {
214  leptonId = SoftLeptonProperties::quality::egammaElectronId;
215  for (reco::PFCandidateCollection::const_iterator electron = h_electrons->begin(); electron != h_electrons->end(); ++electron) {
216  LeptonIds *id;
217  if (electron->gsfTrackRef().isNonnull())
218  id = &leptons[reco::TrackBaseRef(electron->gsfTrackRef())];
219  else if (electron->trackRef().isNonnull())
220  id = &leptons[reco::TrackBaseRef(electron->trackRef())];
221  else
222  continue;
223  (*id)[SoftLeptonProperties::quality::pfElectronId] = electron->mva_e_pi();
224  if (haveLeptonCands)
225  (*id)[SoftLeptonProperties::quality::btagElectronCands] = (*h_leptonCands)[reco::PFCandidateRef(h_electrons, electron - h_electrons->begin())];
226  }
227  break;
228  }
229  } { // else
230  // look for View<Muon>
231  Handle<MuonView> h_muons;
232  event.getByLabel(m_leptons, h_muons);
233  if (h_muons.isValid()) {
234  for (MuonView::const_iterator muon = h_muons->begin(); muon != h_muons->end(); ++muon) {
235  // FIXME -> turn this selection into a muonCands input?
237  LeptonIds *id;
238  if (muon->globalTrack().isNonnull())
239  id = &leptons[reco::TrackBaseRef(muon->globalTrack())];
240  else if (muon->innerTrack().isNonnull())
241  id = &leptons[reco::TrackBaseRef(muon->innerTrack())];
242  else if (muon->outerTrack().isNonnull())
243  // does this makes sense ?
244  id = &leptons[reco::TrackBaseRef(muon->outerTrack())];
245  else
246  continue;
247  if (haveLeptonCands)
248  (*id)[SoftLeptonProperties::quality::btagMuonCands] = (*h_leptonCands)[h_muons->refAt(muon - h_muons->begin())];
249  }
250  }
251  break;
252  }
253  } { // else
254  // look for edm::View<Track>
256  event.getByLabel(m_leptons, h_tracks);
257  if (h_tracks.isValid()) {
258  for (unsigned int i = 0; i < h_tracks->size(); i++) {
259  LeptonIds &id = leptons[h_tracks->refAt(i)];
260  if (haveLeptonCands)
261  id[SoftLeptonProperties::quality::btagLeptonCands] = (*h_leptonCands)[h_tracks->refAt(i)];
262  }
263  break;
264  }
265  } { // else
266  throw edm::Exception(edm::errors::NotFound) << "Object " << m_leptons << " of type among (\"edm::View<reco::GsfElectron>\", \"edm::View<reco::Muon>\", \"edm::View<reco::Track>\") !found";
267  } } while (false);
268 
269  if (!(m_leptonId == edm::InputTag())) {
270  Handle< ValueMap<float> > h_leptonId;
271  event.getByLabel(m_leptonId, h_leptonId);
272 
273  for (Leptons::iterator lepton = leptons.begin(); lepton != leptons.end(); ++lepton)
274  lepton->second[leptonId] = (*h_leptonId)[lepton->first];
275  }
276 
277  // output collections
278  std::auto_ptr<reco::SoftLeptonTagInfoCollection> outputCollection( new reco::SoftLeptonTagInfoCollection() );
279  for (unsigned int i = 0; i < jets.size(); ++i) {
280  reco::SoftLeptonTagInfo result = tag( jets[i], tracks[i], leptons, vertex );
281  outputCollection->push_back( result );
282  }
283  event.put( outputCollection );
284 }
int i
Definition: DBlmapReader.cc:9
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:81
edm::RefToBase< reco::Track > TrackBaseRef
persistent reference to a Track, using views
Definition: TrackFwd.h:22
const edm::InputTag m_leptons
Definition: SoftLepton.h:93
vector< PseudoJet > jets
tuple result
Definition: query.py:137
const edm::InputTag m_primaryVertex
Definition: SoftLepton.h:92
const edm::InputTag m_leptonId
Definition: SoftLepton.h:95
edm::Ref< PFCandidateCollection > PFCandidateRef
persistent reference to a PFCandidate
bool isValid() const
Definition: HandleBase.h:76
const edm::InputTag m_leptonCands
Definition: SoftLepton.h:94
bool isGoodMuon(const reco::Muon &muon, SelectionType type, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
main GoodMuon wrapper call
reco::SoftLeptonTagInfo tag(const edm::RefToBase< reco::Jet > &jet, const reco::TrackRefVector &tracks, const Leptons &leptons, const reco::Vertex &primaryVertex) const
Definition: SoftLepton.cc:287
tuple tracks
Definition: testEve_cfg.py:39
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
std::map< unsigned int, float > LeptonIds
Definition: SoftLepton.h:57
static const reco::Vertex s_nominalBeamSpot
Definition: SoftLepton.h:109
muon::SelectionType m_muonSelection
Definition: SoftLepton.h:106
std::map< edm::RefToBase< reco::Track >, LeptonIds, TrackCompare > Leptons
Definition: SoftLepton.h:58
const edm::InputTag m_jets
Definition: SoftLepton.h:91
const TransientTrackBuilder * m_transientTrackBuilder
Definition: SoftLepton.h:98
tuple size
Write out results.
GlobalVector SoftLepton::refineJetAxis ( const edm::RefToBase< reco::Jet > &  jet,
const reco::TrackRefVector tracks,
const edm::RefToBase< reco::Track > &  exclude = edm::RefToBase<reco::Track>() 
) const
protected

Definition at line 329 of file SoftLepton.cc.

References AXIS_CALORIMETRIC_NOLEPTON, AXIS_CHARGED_AVERAGE, AXIS_CHARGED_AVERAGE_NOLEPTON, AXIS_CHARGED_SUM, AXIS_CHARGED_SUM_NOLEPTON, edm::RefVector< C, T, F >::begin(), edm::RefVector< C, T, F >::end(), reco::TrackBase::eta(), edm::RefToBase< T >::isNonnull(), M_PI, m_refineJetAxis, reco::LeafCandidate::momentum(), reco::TrackBase::momentum(), or, perp(), reco::TrackBase::phi(), and reco::TrackBase::pt().

Referenced by tag().

333  {
334  math::XYZVector axis = jet->momentum();
335 
338 
339  double sum_pT = 0.;
340  double sum_eta_by_pT = 0.;
341  double sum_phi_by_pT = 0.;
342 
343  double perp;
344  double phi_rel;
345  double eta_rel;
346 
347  // refine jet eta and phi with charged tracks measurements, if available
348  for (reco::TrackRefVector::const_iterator track_it = tracks.begin(); track_it != tracks.end(); ++track_it ) {
349  const reco::Track & track = **track_it;
350 
351  perp = track.pt();
352  eta_rel = (double) track.eta() - axis.eta();
353  phi_rel = (double) track.phi() - axis.phi();
354  while (phi_rel < -M_PI) phi_rel += 2*M_PI;
355  while (phi_rel > M_PI) phi_rel -= 2*M_PI;
356 
357  sum_pT += perp;
358  sum_phi_by_pT += perp * phi_rel;
359  sum_eta_by_pT += perp * eta_rel;
360  }
361 
362  // "remove" excluded track
364  const reco::Track & track = *exclude;
365 
366  perp = track.pt();
367  eta_rel = (double) track.eta() - axis.eta();
368  phi_rel = (double) track.phi() - axis.phi();
369  while (phi_rel < -M_PI) phi_rel += 2*M_PI;
370  while (phi_rel > M_PI) phi_rel -= 2*M_PI;
371 
372  sum_pT -= perp;
373  sum_phi_by_pT -= perp * phi_rel;
374  sum_eta_by_pT -= perp * eta_rel;
375  }
376 
377  if (sum_pT > 1.) // avoid the case of only the lepton-track with small rounding errors
378  axis = math::RhoEtaPhiVector( axis.rho(), axis.eta() + sum_eta_by_pT / sum_pT, axis.phi() + sum_phi_by_pT / sum_pT);
379 
380  } else if (m_refineJetAxis == AXIS_CHARGED_SUM or
382  math::XYZVector sum;
383 
384  // recalculate the jet direction as the sum of charget tracks momenta
385  for (reco::TrackRefVector::const_iterator track_it = tracks.begin(); track_it != tracks.end(); ++track_it ) {
386  const reco::Track & track = **track_it;
387  sum += track.momentum();
388  }
389 
390  // "remove" excluded track
391  if (m_refineJetAxis == AXIS_CHARGED_SUM_NOLEPTON and exclude.isNonnull()) {
392  const reco::Track & track = *exclude;
393  sum -= track.momentum();
394  }
395 
396  if (sum.R() > 1.) // avoid the case of only the lepton-track with small rounding errors
397  axis = sum;
399  axis -= exclude->momentum();
400  }
401 
402  return GlobalVector(axis.x(), axis.y(), axis.z());
403 }
const Vector & momentum() const
track momentum vector
Definition: TrackBase.h:150
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:139
const_iterator end() const
Termination of iteration.
Definition: RefVector.h:249
RhoEtaPhiVectorD RhoEtaPhiVector
spatial vector with cylindrical internal representation using pseudorapidity
Definition: Vector3D.h:33
const_iterator begin() const
Initialize an iterator over the RefVector.
Definition: RefVector.h:244
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:141
double pt() const
track transverse momentum
Definition: TrackBase.h:131
unsigned int m_refineJetAxis
Definition: SoftLepton.h:101
#define M_PI
Definition: BFit3D.cc:3
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
virtual Vector momentum() const GCC11_FINAL
spatial momentum vector
T perp() const
Magnitude of transverse component.
bool isNonnull() const
Checks for non-null.
Definition: RefToBase.h:279
Global3DVector GlobalVector
Definition: GlobalVector.h:10
double SoftLepton::relativeEta ( const math::XYZVector vector,
const math::XYZVector axis 
)
staticprotected

Definition at line 405 of file SoftLepton.cc.

References dot(), create_public_lumi_plots::log, and mag().

Referenced by tag().

405  {
406  double mag = vector.r() * axis.r();
407  double dot = vector.Dot(axis);
408  return -log((mag - dot)/(mag + dot)) / 2;
409 }
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
T dot(const Basic3DVector &v) const
Scalar product, or &quot;dot&quot; product, with a vector of same type.
reco::SoftLeptonTagInfo SoftLepton::tag ( const edm::RefToBase< reco::Jet > &  jet,
const reco::TrackRefVector tracks,
const Leptons leptons,
const reco::Vertex primaryVertex 
) const

Definition at line 287 of file SoftLepton.cc.

References boostedPPar(), TransientTrackBuilder::build(), reco::SoftLeptonProperties::deltaR, reco::SoftLeptonProperties::etaRel, info, reco::SoftLeptonTagInfo::insert(), m_chi2Cut, m_deltaRCut, m_transientTrackBuilder, reco::SoftLeptonProperties::p0Par, reco::SoftLeptonProperties::ptRel, reco::SoftLeptonProperties::ratio, reco::SoftLeptonProperties::ratioRel, refineJetAxis(), relativeEta(), reco::JetTagInfo::setJetRef(), reco::SoftLeptonProperties::setQuality(), IPTools::signedImpactParameter3D(), IPTools::signedTransverseImpactParameter(), reco::SoftLeptonProperties::sip2d, reco::SoftLeptonProperties::sip3d, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by produce(), and Inspector.Inspector::SetTag().

292  {
294  info.setJetRef( jet );
295 
296  for(Leptons::const_iterator lepton = leptons.begin(); lepton != leptons.end(); ++lepton) {
297  const math::XYZVector & lepton_momentum = lepton->first->momentum();
298  if (m_chi2Cut > 0.0 && lepton->first->normalizedChi2() > m_chi2Cut)
299  continue;
300 
301  const GlobalVector jetAxis = refineJetAxis( jet, tracks, lepton->first );
302  const math::XYZVector axis( jetAxis.x(), jetAxis.y(), jetAxis.z());
303  if (DeltaR(lepton_momentum, axis) > m_deltaRCut)
304  continue;
305 
306  reco::SoftLeptonProperties properties;
307 
308  reco::TransientTrack transientTrack = m_transientTrackBuilder->build(*lepton->first);
309  properties.sip2d = IPTools::signedTransverseImpactParameter( transientTrack, jetAxis, primaryVertex ).second.significance();
310  properties.sip3d = IPTools::signedImpactParameter3D( transientTrack, jetAxis, primaryVertex ).second.significance();
311  properties.deltaR = DeltaR( lepton_momentum, axis );
312  properties.ptRel = Perp( lepton_momentum, axis );
313  properties.p0Par = boostedPPar( lepton_momentum, axis );
314  properties.etaRel = relativeEta( lepton_momentum, axis );
315  properties.ratio = lepton_momentum.R() / axis.R();
316  properties.ratioRel = lepton_momentum.Dot(axis) / axis.Mag2();
317 
318  for(LeptonIds::const_iterator iter = lepton->second.begin(); iter != lepton->second.end(); ++iter)
319  properties.setQuality(static_cast<SoftLeptonProperties::quality::Generic>(iter->first), iter->second);
320 
321  info.insert( lepton->first, properties );
322  }
323 
324  return info;
325 }
Definition: deltaR.h:79
std::pair< bool, Measurement1D > signedTransverseImpactParameter(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:50
reco::TransientTrack build(const reco::Track *p) const
T y() const
Definition: PV3DBase.h:63
std::pair< bool, Measurement1D > signedImpactParameter3D(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:71
void setJetRef(const edm::Ref< T > &jetRef)
Definition: JetTagInfo.h:25
double m_chi2Cut
Definition: SoftLepton.h:103
void insert(const edm::RefToBase< reco::Track > &lepton, const SoftLeptonProperties &properties)
static double relativeEta(const math::XYZVector &vector, const math::XYZVector &axis)
Definition: SoftLepton.cc:405
GlobalVector refineJetAxis(const edm::RefToBase< reco::Jet > &jet, const reco::TrackRefVector &tracks, const edm::RefToBase< reco::Track > &exclude=edm::RefToBase< reco::Track >()) const
Definition: SoftLepton.cc:329
T z() const
Definition: PV3DBase.h:64
double m_deltaRCut
Definition: SoftLepton.h:102
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
void setQuality(quality::Generic qual, float value)
const TransientTrackBuilder * m_transientTrackBuilder
Definition: SoftLepton.h:98
T x() const
Definition: PV3DBase.h:62
static double boostedPPar(const math::XYZVector &vector, const math::XYZVector &axis)
Definition: SoftLepton.cc:412

Member Data Documentation

double SoftLepton::m_chi2Cut
private

Definition at line 103 of file SoftLepton.h.

Referenced by tag().

double SoftLepton::m_deltaRCut
private

Definition at line 102 of file SoftLepton.h.

Referenced by tag().

const edm::InputTag SoftLepton::m_jets
private

Definition at line 91 of file SoftLepton.h.

Referenced by produce().

const edm::InputTag SoftLepton::m_leptonCands
private

Definition at line 94 of file SoftLepton.h.

Referenced by produce().

const edm::InputTag SoftLepton::m_leptonId
private

Definition at line 95 of file SoftLepton.h.

Referenced by produce().

const edm::InputTag SoftLepton::m_leptons
private

Definition at line 93 of file SoftLepton.h.

Referenced by produce().

muon::SelectionType SoftLepton::m_muonSelection
private

Definition at line 106 of file SoftLepton.h.

Referenced by produce().

const edm::InputTag SoftLepton::m_primaryVertex
private

Definition at line 92 of file SoftLepton.h.

Referenced by produce().

unsigned int SoftLepton::m_refineJetAxis
private

Definition at line 101 of file SoftLepton.h.

Referenced by refineJetAxis().

const TransientTrackBuilder* SoftLepton::m_transientTrackBuilder
private

Definition at line 98 of file SoftLepton.h.

Referenced by produce(), and tag().

const reco::Vertex SoftLepton::s_nominalBeamSpot
staticprivate

Definition at line 109 of file SoftLepton.h.

Referenced by produce().