CMS 3D CMS Logo

SoftLepton.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: SoftLepton
4 // Class: SoftLepton
5 //
13 // Original Author: fwyzard
14 // Created: Wed Oct 18 18:02:07 CEST 2006
15 
16 
17 #include <memory>
18 #include <string>
19 #include <utility>
20 #include <cmath>
21 
24 
25 // ROOT::Math vectors (aka math::XYZVector)
27 #include "Math/GenVector/PxPyPzM4D.h"
28 #include "Math/GenVector/VectorUtil.h"
29 #include "Math/GenVector/Boost.h"
30 
32 
37 #include "SoftLepton.h"
38 
39 enum AxisType {
40  AXIS_CALORIMETRIC = 0, // use the calorimietric jet axis
41  AXIS_CHARGED_AVERAGE = 1, // refine jet axis using charged tracks: use a pT-weighted average of (eta, phi)
42  AXIS_CHARGED_AVERAGE_NOLEPTON = 2, // as above, without the tagging lepton track
43  AXIS_CHARGED_SUM = 3, // refine jet axis using charged tracks: use the sum of tracks momentum
44  AXIS_CHARGED_SUM_NOLEPTON = 4, // as above, without the tagging lepton track
45  AXIS_CALORIMETRIC_NOLEPTON = 5 // use the calorimetric jet axis minus the lepton momentum
46 };
47 
48 using namespace std;
49 using namespace edm;
50 using namespace reco;
51 using namespace ROOT::Math::VectorUtil;
52 
56 
57 // ------------ static copy of the nominal beamspot --------------------------------------
59  reco::Vertex::Point( 0, 0, 0 ),
60  reco::Vertex::Error( ROOT::Math::SVector<double,6>( 0.0015 * 0.0015, // 0.0, 0.0
61  0.0, 0.0015 * 0.0015, // 0.0
62  0.0, 0.0, 15. * 15. ) ),
63  1, 1, 0 );
64 
65 // ------------ c'tor --------------------------------------------------------------------
67  m_jets( iConfig.getParameter<edm::InputTag>( "jets" ) ),
68  token_jtas( mayConsume<reco::JetTracksAssociationCollection>( iConfig.getParameter<edm::InputTag>( "jets" ) ) ),
69  token_jets( mayConsume<edm::View<reco::Jet> >( iConfig.getParameter<edm::InputTag>( "jets" ) ) ),
70  token_primaryVertex( consumes<reco::VertexCollection>( iConfig.getParameter<edm::InputTag>( "primaryVertex" ) ) ),
71  m_leptons( iConfig.getParameter<edm::InputTag>( "leptons" ) ),
72  token_gsfElectrons( mayConsume<GsfElectronView>( iConfig.getParameter<edm::InputTag>( "leptons" ) ) ),
73  token_electrons( mayConsume<ElectronView>( iConfig.getParameter<edm::InputTag>( "leptons" ) ) ),
74  token_pfElectrons( mayConsume<reco::PFCandidateCollection>( iConfig.getParameter<edm::InputTag>( "leptons" ) ) ),
75  token_muons( mayConsume<MuonView>( iConfig.getParameter<edm::InputTag>( "leptons" ) ) ),
76  token_tracks( mayConsume<edm::View<reco::Track> >( iConfig.getParameter<edm::InputTag>( "leptons" ) ) ),
77  m_leptonCands( iConfig.exists("leptonCands") ? iConfig.getParameter<edm::InputTag>( "leptonCands" ) : edm::InputTag() ),
78  token_leptonCands( mayConsume<edm::ValueMap<float> >( iConfig.exists("leptonCands") ? iConfig.getParameter<edm::InputTag>( "leptonCands" ) : edm::InputTag() ) ),
79  m_leptonId( iConfig.exists("leptonId") ? iConfig.getParameter<edm::InputTag>( "leptonId" ) : edm::InputTag() ),
80  token_leptonId( mayConsume<edm::ValueMap<float> >( iConfig.exists("leptonId") ? iConfig.getParameter<edm::InputTag>( "leptonId" ) : edm::InputTag() ) ),
81  m_transientTrackBuilder( nullptr ),
82  m_refineJetAxis( iConfig.getParameter<unsigned int>( "refineJetAxis" ) ),
83  m_deltaRCut( iConfig.getParameter<double>( "leptonDeltaRCut" ) ),
84  m_chi2Cut( iConfig.getParameter<double>( "leptonChi2Cut" ) ),
85  m_muonSelection( (muon::SelectionType) iConfig.getParameter<unsigned int>( "muonSelection" ) )
86 {
87  produces<reco::SoftLeptonTagInfoCollection>();
88 }
89 
90 // ------------ d'tor --------------------------------------------------------------------
92 }
93 
94 // ------------ method called once per event during the event loop -----------------------
95 void
97 
98  // grab a TransientTrack helper from the Event Setup
100  setup.get<TransientTrackRecord>().get( "TransientTrackBuilder", builder );
101  m_transientTrackBuilder = builder.product();
102 
103  // input objects
104 
105  // input jets (and possibly tracks)
106  ProductID jets_id;
107  std::vector<edm::RefToBase<reco::Jet> > jets;
108  std::vector<reco::TrackRefVector> tracks;
109  do { {
110  // look for a JetTracksAssociationCollection
112  event.getByToken(token_jtas, h_jtas);
113  if (h_jtas.isValid()) {
114  unsigned int size = h_jtas->size();
115  jets.resize(size);
116  tracks.resize(size);
117  for (unsigned int i = 0; i < size; ++i) {
118  jets[i] = (*h_jtas)[i].first;
119  tracks[i] = (*h_jtas)[i].second;
120  }
121  break;
122  }
123  } { // else...
124  // look for a View<Jet>
126  event.getByToken(token_jets, h_jets);
127  if (h_jets.isValid()) {
128  unsigned int size = h_jets->size();
129  jets.resize(size);
130  tracks.resize(size);
131  for (unsigned int i = 0; i < h_jets->size(); i++)
132  jets[i] = h_jets->refAt(i);
133  break;
134  }
135  } { // else...
136  throw edm::Exception(edm::errors::NotFound) << "Object " << m_jets << " of type among (\"reco::JetTracksAssociationCollection\", \"edm::View<reco::Jet>\") not found";
137  } } while (false);
138 
139  // input primary vetex
140  reco::Vertex vertex;
141  Handle<reco::VertexCollection> h_primaryVertex;
142  event.getByToken(token_primaryVertex, h_primaryVertex);
143  if (h_primaryVertex.isValid() and not h_primaryVertex->empty())
144  vertex = h_primaryVertex->front();
145  else
146  // fall back to nominal beam spot
147  vertex = s_nominalBeamSpot;
148 
149  // input leptons (can be of different types)
151 
152  Handle<edm::ValueMap<float> > h_leptonCands;
153  bool haveLeptonCands = !(m_leptonCands == edm::InputTag());
154  if (haveLeptonCands)
155  event.getByToken(token_leptonCands, h_leptonCands);
156 
157  // try to access the input collection as a collection of GsfElectrons, Muons or Tracks
158 
160  do { {
161  // look for View<GsfElectron>
162  Handle<GsfElectronView> h_electrons;
163  event.getByToken(token_gsfElectrons, h_electrons);
164 
165  if (h_electrons.isValid()) {
166  leptonId = SoftLeptonProperties::Quality::egammaElectronId;
167  for (GsfElectronView::const_iterator electron = h_electrons->begin(); electron != h_electrons->end(); ++electron) {
168  LeptonIds &id = leptons[reco::TrackBaseRef(electron->gsfTrack())];
169  id[SoftLeptonProperties::Quality::pfElectronId] = electron->mva_e_pi();
170  if (haveLeptonCands)
171  id[SoftLeptonProperties::Quality::btagElectronCands] = (*h_leptonCands)[h_electrons->refAt(electron - h_electrons->begin())];
172  }
173  break;
174  }
175  } { // else
176  // look for View<Electron>
177  // FIXME: is this obsolete?
178  Handle<ElectronView> h_electrons;
179  event.getByToken(token_electrons, h_electrons);
180  if (h_electrons.isValid()) {
181  leptonId = SoftLeptonProperties::Quality::egammaElectronId;
182  for (ElectronView::const_iterator electron = h_electrons->begin(); electron != h_electrons->end(); ++electron) {
183  LeptonIds &id = leptons[reco::TrackBaseRef(electron->track())];
184  if (haveLeptonCands)
185  id[SoftLeptonProperties::Quality::btagElectronCands] = (*h_leptonCands)[h_electrons->refAt(electron - h_electrons->begin())];
186  }
187  break;
188  }
189  } { // else
190  // look for PFElectrons
191  // FIXME: is this obsolete?
193  event.getByToken(token_pfElectrons, h_electrons);
194  if (h_electrons.isValid()) {
195  leptonId = SoftLeptonProperties::Quality::egammaElectronId;
196  for (reco::PFCandidateCollection::const_iterator electron = h_electrons->begin(); electron != h_electrons->end(); ++electron) {
197  LeptonIds *id;
198  if (electron->gsfTrackRef().isNonnull())
199  id = &leptons[reco::TrackBaseRef(electron->gsfTrackRef())];
200  else if (electron->trackRef().isNonnull())
201  id = &leptons[reco::TrackBaseRef(electron->trackRef())];
202  else
203  continue;
204  (*id)[SoftLeptonProperties::Quality::pfElectronId] = electron->mva_e_pi();
205  if (haveLeptonCands)
206  (*id)[SoftLeptonProperties::Quality::btagElectronCands] = (*h_leptonCands)[reco::PFCandidateRef(h_electrons, electron - h_electrons->begin())];
207  }
208  break;
209  }
210  } { // else
211  // look for View<Muon>
212  Handle<MuonView> h_muons;
213  event.getByToken(token_muons, h_muons);
214  if (h_muons.isValid()) {
215  for (MuonView::const_iterator muon = h_muons->begin(); muon != h_muons->end(); ++muon) {
216  // FIXME -> turn this selection into a muonCands input?
218  LeptonIds *id;
219  if (muon->globalTrack().isNonnull())
220  id = &leptons[reco::TrackBaseRef(muon->globalTrack())];
221  else if (muon->innerTrack().isNonnull())
222  id = &leptons[reco::TrackBaseRef(muon->innerTrack())];
223  else if (muon->outerTrack().isNonnull())
224  // does this makes sense ?
225  id = &leptons[reco::TrackBaseRef(muon->outerTrack())];
226  else
227  continue;
228  if (haveLeptonCands)
229  (*id)[SoftLeptonProperties::Quality::btagMuonCands] = (*h_leptonCands)[h_muons->refAt(muon - h_muons->begin())];
230  }
231  }
232  break;
233  }
234  } { // else
235  // look for edm::View<Track>
237  event.getByToken(token_tracks, h_tracks);
238  if (h_tracks.isValid()) {
239  for (unsigned int i = 0; i < h_tracks->size(); i++) {
240  LeptonIds &id = leptons[h_tracks->refAt(i)];
241  if (haveLeptonCands)
242  id[SoftLeptonProperties::Quality::btagLeptonCands] = (*h_leptonCands)[h_tracks->refAt(i)];
243  }
244  break;
245  }
246  } { // else
247  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";
248  } } while (false);
249 
250  if (!(m_leptonId == edm::InputTag())) {
251  Handle<edm::ValueMap<float> > h_leptonId;
252  event.getByToken(token_leptonId, h_leptonId);
253 
254  for (Leptons::iterator lepton = leptons.begin(); lepton != leptons.end(); ++lepton)
255  lepton->second[leptonId] = (*h_leptonId)[lepton->first];
256  }
257 
258  // output collections
259  auto outputCollection = std::make_unique<reco::SoftLeptonTagInfoCollection>();
260  for (unsigned int i = 0; i < jets.size(); ++i) {
261  reco::SoftLeptonTagInfo result = tag( jets[i], tracks[i], leptons, vertex );
262  outputCollection->push_back( result );
263  }
264  event.put(std::move(outputCollection));
265 }
266 
267 // ---------------------------------------------------------------------------------------
271  const Leptons & leptons,
273 ) const {
275  info.setJetRef( jet );
276 
277  for(Leptons::const_iterator lepton = leptons.begin(); lepton != leptons.end(); ++lepton) {
278  const math::XYZVector & lepton_momentum = lepton->first->momentum();
279  if (m_chi2Cut > 0.0 && lepton->first->normalizedChi2() > m_chi2Cut)
280  continue;
281 
282  const GlobalVector jetAxis = refineJetAxis( jet, tracks, lepton->first );
283  const math::XYZVector axis( jetAxis.x(), jetAxis.y(), jetAxis.z());
284  float deltaR = Geom::deltaR(lepton_momentum, axis);
285  if (deltaR > m_deltaRCut)
286  continue;
287 
288  reco::SoftLeptonProperties properties;
289 
290  reco::TransientTrack transientTrack = m_transientTrackBuilder->build(*lepton->first);
291  Measurement1D ip2d = IPTools::signedTransverseImpactParameter( transientTrack, jetAxis, primaryVertex ).second;
292  Measurement1D ip3d = IPTools::signedImpactParameter3D( transientTrack, jetAxis, primaryVertex ).second;
293  properties.sip2dsig = ip2d.significance();
294  properties.sip3dsig = ip3d.significance();
295  properties.sip2d = ip2d.value();
296  properties.sip3d = ip3d.value();
297  properties.deltaR = deltaR;
298  properties.ptRel = Perp( lepton_momentum, axis );
299  properties.p0Par = boostedPPar( lepton_momentum, axis );
300  properties.etaRel = relativeEta( lepton_momentum, axis );
301  properties.ratio = lepton_momentum.R() / axis.R();
302  properties.ratioRel = lepton_momentum.Dot(axis) / axis.Mag2();
303 
304  for(LeptonIds::const_iterator iter = lepton->second.begin(); iter != lepton->second.end(); ++iter)
305  properties.setQuality(static_cast<SoftLeptonProperties::Quality::Generic>(iter->first), iter->second);
306 
307  info.insert( lepton->first, properties );
308  }
309 
310  return info;
311 }
312 
313 
314 // ---------------------------------------------------------------------------------------
318  const reco::TrackBaseRef & exclude /* = reco::TrackBaseRef() */
319 ) const {
320  math::XYZVector axis = jet->momentum();
321 
324 
325  double sum_pT = 0.;
326  double sum_eta_by_pT = 0.;
327  double sum_phi_by_pT = 0.;
328 
329  double perp;
330  double phi_rel;
331  double eta_rel;
332 
333  // refine jet eta and phi with charged tracks measurements, if available
334  for (reco::TrackRefVector::const_iterator track_it = tracks.begin(); track_it != tracks.end(); ++track_it ) {
335  const reco::Track & track = **track_it;
336 
337  perp = track.pt();
338  eta_rel = (double) track.eta() - axis.eta();
339  phi_rel = (double) track.phi() - axis.phi();
340  while (phi_rel < -M_PI) phi_rel += 2*M_PI;
341  while (phi_rel > M_PI) phi_rel -= 2*M_PI;
342 
343  sum_pT += perp;
344  sum_phi_by_pT += perp * phi_rel;
345  sum_eta_by_pT += perp * eta_rel;
346  }
347 
348  // "remove" excluded track
350  const reco::Track & track = *exclude;
351 
352  perp = track.pt();
353  eta_rel = (double) track.eta() - axis.eta();
354  phi_rel = (double) track.phi() - axis.phi();
355  while (phi_rel < -M_PI) phi_rel += 2*M_PI;
356  while (phi_rel > M_PI) phi_rel -= 2*M_PI;
357 
358  sum_pT -= perp;
359  sum_phi_by_pT -= perp * phi_rel;
360  sum_eta_by_pT -= perp * eta_rel;
361  }
362 
363  if (sum_pT > 1.) // avoid the case of only the lepton-track with small rounding errors
364  axis = math::RhoEtaPhiVector( axis.rho(), axis.eta() + sum_eta_by_pT / sum_pT, axis.phi() + sum_phi_by_pT / sum_pT);
365 
366  } else if (m_refineJetAxis == AXIS_CHARGED_SUM or
368  math::XYZVector sum;
369 
370  // recalculate the jet direction as the sum of charget tracks momenta
371  for (reco::TrackRefVector::const_iterator track_it = tracks.begin(); track_it != tracks.end(); ++track_it ) {
372  const reco::Track & track = **track_it;
373  sum += track.momentum();
374  }
375 
376  // "remove" excluded track
377  if (m_refineJetAxis == AXIS_CHARGED_SUM_NOLEPTON and exclude.isNonnull()) {
378  const reco::Track & track = *exclude;
379  sum -= track.momentum();
380  }
381 
382  if (sum.R() > 1.) // avoid the case of only the lepton-track with small rounding errors
383  axis = sum;
385  axis -= exclude->momentum();
386  }
387 
388  return GlobalVector(axis.x(), axis.y(), axis.z());
389 }
390 
391 double SoftLepton::relativeEta(const math::XYZVector& vector, const math::XYZVector& axis) {
392  double mag = vector.r() * axis.r();
393  double dot = vector.Dot(axis);
394  return -log((mag - dot)/(mag + dot)) / 2;
395 }
396 
397 // compute the lepton momentum along the jet axis, in the jet rest frame
398 double SoftLepton::boostedPPar(const math::XYZVector& vector, const math::XYZVector& axis) {
399  static const double lepton_mass = 0.00; // assume a massless (ultrarelativistic) lepton
400  static const double jet_mass = 5.279; // use B±/B0 mass as the jet rest mass [PDG 2007 updates]
401  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double> > lepton(vector.Dot(axis) / axis.r(), Perp(vector, axis), 0., lepton_mass);
402  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double> > jet( axis.r(), 0., 0., jet_mass );
403  ROOT::Math::BoostX boost( -jet.Beta() );
404  return boost(lepton).x();
405 }
406 
407 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
408 void
410 
412  desc.add<unsigned int>("muonSelection",1);
413  desc.add<edm::InputTag>("leptons",edm::InputTag("muons"));
414  desc.add<edm::InputTag>("primaryVertex",edm::InputTag("offlinePrimaryVertices"));
415  desc.add<edm::InputTag>("leptonCands",edm::InputTag(""));
416  desc.add<edm::InputTag>("leptonId",edm::InputTag(""));
417  desc.add<unsigned int>("refineJetAxis",0);
418  desc.add<edm::InputTag>("jets",edm::InputTag("ak4PFJetsCHS"));
419  desc.add<double>("leptonDeltaRCut",0.4);
420  desc.add<double>("leptonChi2Cut",9999.0);
421  descriptions.addDefault(desc);
422 }
size
Write out results.
const edm::EDGetTokenT< reco::PFCandidateCollection > token_pfElectrons
Definition: SoftLepton.h:106
static const TGPicture * info(bool iBackgroundIsBlack)
edm::View< reco::Muon > MuonView
Definition: SoftLepton.cc:55
Definition: CLHEP.h:16
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
const edm::EDGetTokenT< edm::ValueMap< float > > token_leptonCands
Definition: SoftLepton.h:110
reco::TransientTrack build(const reco::Track *p) const
T y() const
Definition: PV3DBase.h:63
math::Error< dimension >::type Error
covariance error matrix (3x3)
Definition: Vertex.h:43
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:1
std::pair< bool, Measurement1D > signedImpactParameter3D(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:71
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:645
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
const edm::EDGetTokenT< edm::ValueMap< float > > token_leptonId
Definition: SoftLepton.h:112
bool isNonnull() const
Checks for non-null.
Definition: RefToBase.h:337
const edm::EDGetTokenT< edm::View< reco::Muon > > token_muons
Definition: SoftLepton.h:107
void setJetRef(const edm::Ref< T > &jetRef)
Definition: JetTagInfo.h:25
const Vector & momentum() const
track momentum vector
Definition: TrackBase.h:675
#define nullptr
const_iterator end() const
Termination of iteration.
Definition: RefVector.h:253
const edm::EDGetTokenT< edm::View< reco::Electron > > token_electrons
Definition: SoftLepton.h:105
RhoEtaPhiVectorD RhoEtaPhiVector
spatial vector with cylindrical internal representation using pseudorapidity
Definition: Vector3D.h:32
double m_chi2Cut
Definition: SoftLepton.h:120
const_iterator begin() const
Initialize an iterator over the RefVector.
Definition: RefVector.h:248
const edm::EDGetTokenT< edm::View< reco::GsfElectron > > token_gsfElectrons
Definition: SoftLepton.h:104
SelectionType
Selector type.
Definition: MuonSelectors.h:17
void setQuality(Quality::Generic qual, float value)
RefToBase< value_type > refAt(size_type i) const
void produce(edm::Event &event, const edm::EventSetup &setup) override
Definition: SoftLepton.cc:96
Vector momentum() const final
spatial momentum vector
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:651
void addDefault(ParameterSetDescription const &psetDescription)
const_iterator begin() const
edm::RefToBase< reco::Track > TrackBaseRef
persistent reference to a Track, using views
Definition: TrackFwd.h:32
Definition: Jet.py:1
const edm::InputTag m_leptons
Definition: SoftLepton.h:103
static double relativeEta(const math::XYZVector &vector, const math::XYZVector &axis)
Definition: SoftLepton.cc:391
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:315
vector< PseudoJet > jets
double pt() const
track transverse momentum
Definition: TrackBase.h:621
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::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
T z() const
Definition: PV3DBase.h:64
math::XYZPoint Point
point in the space
Definition: Vertex.h:39
const edm::EDGetTokenT< reco::VertexCollection > token_primaryVertex
Definition: SoftLepton.h:102
~SoftLepton() override
Definition: SoftLepton.cc:91
AxisType
Definition: SoftLepton.cc:39
const edm::InputTag m_leptonId
Definition: SoftLepton.h:111
edm::Ref< PFCandidateCollection > PFCandidateRef
persistent reference to a PFCandidate
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool isValid() const
Definition: HandleBase.h:74
double m_deltaRCut
Definition: SoftLepton.h:119
const edm::InputTag m_leptonCands
Definition: SoftLepton.h:109
bool isGoodMuon(const reco::Muon &muon, SelectionType type, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
main GoodMuon wrapper call
#define M_PI
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
unsigned int m_refineJetAxis
Definition: SoftLepton.h:118
void insert(const REF &lepton, const SoftLeptonProperties &properties)
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
double significance() const
Definition: Measurement1D.h:32
reco::SoftLeptonTagInfo tag(const edm::RefToBase< reco::Jet > &jet, const reco::TrackRefVector &tracks, const Leptons &leptons, const reco::Vertex &primaryVertex) const
Definition: SoftLepton.cc:268
const edm::EDGetTokenT< edm::View< reco::Jet > > token_jets
Definition: SoftLepton.h:101
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
const T & get() const
Definition: EventSetup.h:58
SoftLepton(const edm::ParameterSet &iConfig)
Definition: SoftLepton.cc:66
std::map< unsigned int, float > LeptonIds
Definition: SoftLepton.h:65
edm::View< reco::GsfElectron > GsfElectronView
Definition: SoftLepton.cc:53
double value() const
Definition: Measurement1D.h:28
static const reco::Vertex s_nominalBeamSpot
Definition: SoftLepton.h:126
muon::SelectionType m_muonSelection
Definition: SoftLepton.h:123
T perp() const
Magnitude of transverse component.
fixed size matrix
HLT enums.
T dot(const Basic3DVector &v) const
Scalar product, or "dot" product, with a vector of same type.
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
std::map< edm::RefToBase< reco::Track >, LeptonIds, TrackCompare > Leptons
Definition: SoftLepton.h:66
const edm::InputTag m_jets
Definition: SoftLepton.h:99
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: SoftLepton.cc:409
const_iterator end() const
const TransientTrackBuilder * m_transientTrackBuilder
Definition: SoftLepton.h:115
const edm::EDGetTokenT< edm::View< reco::Track > > token_tracks
Definition: SoftLepton.h:108
edm::View< reco::Electron > ElectronView
Definition: SoftLepton.cc:54
T x() const
Definition: PV3DBase.h:62
T const * product() const
Definition: ESHandle.h:86
def move(src, dest)
Definition: eostools.py:510
const edm::EDGetTokenT< reco::JetTracksAssociationCollection > token_jtas
Definition: SoftLepton.h:100
Definition: event.py:1
size_type size() const
Global3DVector GlobalVector
Definition: GlobalVector.h:10
static double boostedPPar(const math::XYZVector &vector, const math::XYZVector &axis)
Definition: SoftLepton.cc:398