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::stream::EDProducer<> edm::stream::EDProducerBase 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::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 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::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
 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 ()
 
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
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) 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::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
 
unsigned int m_refineJetAxis
 
const TransientTrackBuilderm_transientTrackBuilder
 
const edm::EDGetTokenT
< edm::View< reco::Electron > > 
token_electrons
 
const edm::EDGetTokenT
< edm::View< reco::GsfElectron > > 
token_gsfElectrons
 
const edm::EDGetTokenT
< edm::View< reco::Jet > > 
token_jets
 
const edm::EDGetTokenT
< reco::JetTracksAssociationCollection
token_jtas
 
const edm::EDGetTokenT
< edm::ValueMap< float > > 
token_leptonCands
 
const edm::EDGetTokenT
< edm::ValueMap< float > > 
token_leptonId
 
const edm::EDGetTokenT
< edm::View< reco::Muon > > 
token_muons
 
const edm::EDGetTokenT
< reco::PFCandidateCollection
token_pfElectrons
 
const edm::EDGetTokenT
< reco::VertexCollection
token_primaryVertex
 
const edm::EDGetTokenT
< edm::View< reco::Track > > 
token_tracks
 

Static Private Attributes

static const reco::Vertex s_nominalBeamSpot
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::stream::EDProducerBase
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 50 of file SoftLepton.h.

Member Typedef Documentation

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

Definition at line 63 of file SoftLepton.h.

Definition at line 64 of file SoftLepton.h.

Constructor & Destructor Documentation

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

Definition at line 65 of file SoftLepton.cc.

65  :
66  m_jets( iConfig.getParameter<edm::InputTag>( "jets" ) ),
67  token_jtas( mayConsume<reco::JetTracksAssociationCollection>( iConfig.getParameter<edm::InputTag>( "jets" ) ) ),
69  token_primaryVertex( consumes<reco::VertexCollection>( iConfig.getParameter<edm::InputTag>( "primaryVertex" ) ) ),
70  m_leptons( iConfig.getParameter<edm::InputTag>( "leptons" ) ),
71  token_gsfElectrons( mayConsume<GsfElectronView>( iConfig.getParameter<edm::InputTag>( "leptons" ) ) ),
72  token_electrons( mayConsume<ElectronView>( iConfig.getParameter<edm::InputTag>( "leptons" ) ) ),
73  token_pfElectrons( mayConsume<reco::PFCandidateCollection>( iConfig.getParameter<edm::InputTag>( "leptons" ) ) ),
74  token_muons( mayConsume<MuonView>( iConfig.getParameter<edm::InputTag>( "leptons" ) ) ),
76  m_leptonCands( iConfig.exists("leptonCands") ? iConfig.getParameter<edm::InputTag>( "leptonCands" ) : edm::InputTag() ),
77  token_leptonCands( mayConsume<edm::ValueMap<float> >( iConfig.exists("leptonCands") ? iConfig.getParameter<edm::InputTag>( "leptonCands" ) : edm::InputTag() ) ),
78  m_leptonId( iConfig.exists("leptonId") ? iConfig.getParameter<edm::InputTag>( "leptonId" ) : edm::InputTag() ),
79  token_leptonId( mayConsume<edm::ValueMap<float> >( iConfig.exists("leptonId") ? iConfig.getParameter<edm::InputTag>( "leptonId" ) : edm::InputTag() ) ),
81  m_refineJetAxis( iConfig.getParameter<unsigned int>( "refineJetAxis" ) ),
82  m_deltaRCut( iConfig.getParameter<double>( "leptonDeltaRCut" ) ),
83  m_chi2Cut( iConfig.getParameter<double>( "leptonChi2Cut" ) ),
84  m_muonSelection( (muon::SelectionType) iConfig.getParameter<unsigned int>( "muonSelection" ) )
85 {
86  produces<reco::SoftLeptonTagInfoCollection>();
87 }
T getParameter(std::string const &) const
const edm::EDGetTokenT< reco::PFCandidateCollection > token_pfElectrons
Definition: SoftLepton.h:104
const edm::EDGetTokenT< edm::ValueMap< float > > token_leptonCands
Definition: SoftLepton.h:108
bool exists(std::string const &parameterName) const
checks if a parameter exists
const edm::EDGetTokenT< edm::ValueMap< float > > token_leptonId
Definition: SoftLepton.h:110
const edm::EDGetTokenT< edm::View< reco::Muon > > token_muons
Definition: SoftLepton.h:105
const edm::EDGetTokenT< edm::View< reco::Electron > > token_electrons
Definition: SoftLepton.h:103
double m_chi2Cut
Definition: SoftLepton.h:118
const edm::EDGetTokenT< edm::View< reco::GsfElectron > > token_gsfElectrons
Definition: SoftLepton.h:102
SelectionType
Selector type.
Definition: MuonSelectors.h:17
const edm::InputTag m_leptons
Definition: SoftLepton.h:101
const edm::EDGetTokenT< reco::VertexCollection > token_primaryVertex
Definition: SoftLepton.h:100
const edm::InputTag m_leptonId
Definition: SoftLepton.h:109
double m_deltaRCut
Definition: SoftLepton.h:117
const edm::InputTag m_leptonCands
Definition: SoftLepton.h:107
unsigned int m_refineJetAxis
Definition: SoftLepton.h:116
const edm::EDGetTokenT< edm::View< reco::Jet > > token_jets
Definition: SoftLepton.h:99
muon::SelectionType m_muonSelection
Definition: SoftLepton.h:121
const edm::InputTag m_jets
Definition: SoftLepton.h:97
const TransientTrackBuilder * m_transientTrackBuilder
Definition: SoftLepton.h:113
const edm::EDGetTokenT< edm::View< reco::Track > > token_tracks
Definition: SoftLepton.h:106
EDGetTokenT< ProductType > mayConsume(edm::InputTag const &tag)
const edm::EDGetTokenT< reco::JetTracksAssociationCollection > token_jtas
Definition: SoftLepton.h:98
SoftLepton::~SoftLepton ( void  )

Definition at line 90 of file SoftLepton.cc.

90  {
91 }

Member Function Documentation

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

Definition at line 392 of file SoftLepton.cc.

References metsig::jet.

Referenced by tag().

392  {
393  static const double lepton_mass = 0.00; // assume a massless (ultrarelativistic) lepton
394  static const double jet_mass = 5.279; // use B±/B0 mass as the jet rest mass [PDG 2007 updates]
395  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double> > lepton(vector.Dot(axis) / axis.r(), Perp(vector, axis), 0., lepton_mass);
396  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double> > jet( axis.r(), 0., 0., jet_mass );
397  ROOT::Math::BoostX boost( -jet.Beta() );
398  return boost(lepton).x();
399 }
void SoftLepton::produce ( edm::Event event,
const edm::EventSetup setup 
)
privatevirtual

Implements edm::stream::EDProducerBase.

Definition at line 95 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_transientTrackBuilder, metsig::muon, edm::errors::NotFound, edm::ESHandle< class >::product(), query::result, s_nominalBeamSpot, findQualityFiles::size, tag(), token_electrons, token_gsfElectrons, token_jets, token_jtas, token_leptonCands, token_leptonId, token_muons, token_pfElectrons, token_primaryVertex, token_tracks, and testEve_cfg::tracks.

95  {
96 
97  // grab a TransientTrack helper from the Event Setup
99  setup.get<TransientTrackRecord>().get( "TransientTrackBuilder", builder );
100  m_transientTrackBuilder = builder.product();
101 
102  // input objects
103 
104  // input jets (and possibly tracks)
105  ProductID jets_id;
106  std::vector<edm::RefToBase<reco::Jet> > jets;
107  std::vector<reco::TrackRefVector> tracks;
108  do { {
109  // look for a JetTracksAssociationCollection
111  event.getByToken(token_jtas, h_jtas);
112  if (h_jtas.isValid()) {
113  unsigned int size = h_jtas->size();
114  jets.resize(size);
115  tracks.resize(size);
116  for (unsigned int i = 0; i < size; ++i) {
117  jets[i] = (*h_jtas)[i].first;
118  tracks[i] = (*h_jtas)[i].second;
119  }
120  break;
121  }
122  } { // else...
123  // look for a View<Jet>
125  event.getByToken(token_jets, h_jets);
126  if (h_jets.isValid()) {
127  unsigned int size = h_jets->size();
128  jets.resize(size);
129  tracks.resize(size);
130  for (unsigned int i = 0; i < h_jets->size(); i++)
131  jets[i] = h_jets->refAt(i);
132  break;
133  }
134  } { // else...
135  throw edm::Exception(edm::errors::NotFound) << "Object " << m_jets << " of type among (\"reco::JetTracksAssociationCollection\", \"edm::View<reco::Jet>\") not found";
136  } } while (false);
137 
138  // input primary vetex
139  reco::Vertex vertex;
140  Handle<reco::VertexCollection> h_primaryVertex;
141  event.getByToken(token_primaryVertex, h_primaryVertex);
142  if (h_primaryVertex.isValid() and not h_primaryVertex->empty())
143  vertex = h_primaryVertex->front();
144  else
145  // fall back to nominal beam spot
146  vertex = s_nominalBeamSpot;
147 
148  // input leptons (can be of different types)
150 
151  Handle<edm::ValueMap<float> > h_leptonCands;
152  bool haveLeptonCands = !(m_leptonCands == edm::InputTag());
153  if (haveLeptonCands)
154  event.getByToken(token_leptonCands, h_leptonCands);
155 
156  // try to access the input collection as a collection of GsfElectrons, Muons or Tracks
157 
158  unsigned int leptonId = SoftLeptonProperties::Quality::leptonId;
159  do { {
160  // look for View<GsfElectron>
161  Handle<GsfElectronView> h_electrons;
162  event.getByToken(token_gsfElectrons, h_electrons);
163 
164  if (h_electrons.isValid()) {
165  leptonId = SoftLeptonProperties::Quality::egammaElectronId;
166  for (GsfElectronView::const_iterator electron = h_electrons->begin(); electron != h_electrons->end(); ++electron) {
167  LeptonIds &id = leptons[reco::TrackBaseRef(electron->gsfTrack())];
168  id[SoftLeptonProperties::Quality::pfElectronId] = electron->mva();
169  if (haveLeptonCands)
170  id[SoftLeptonProperties::Quality::btagElectronCands] = (*h_leptonCands)[h_electrons->refAt(electron - h_electrons->begin())];
171  }
172  break;
173  }
174  } { // else
175  // look for View<Electron>
176  // FIXME: is this obsolete?
177  Handle<ElectronView> h_electrons;
178  event.getByToken(token_electrons, h_electrons);
179  if (h_electrons.isValid()) {
180  leptonId = SoftLeptonProperties::Quality::egammaElectronId;
181  for (ElectronView::const_iterator electron = h_electrons->begin(); electron != h_electrons->end(); ++electron) {
182  LeptonIds &id = leptons[reco::TrackBaseRef(electron->track())];
183  if (haveLeptonCands)
184  id[SoftLeptonProperties::Quality::btagElectronCands] = (*h_leptonCands)[h_electrons->refAt(electron - h_electrons->begin())];
185  }
186  break;
187  }
188  } { // else
189  // look for PFElectrons
190  // FIXME: is this obsolete?
192  event.getByToken(token_pfElectrons, h_electrons);
193  if (h_electrons.isValid()) {
194  leptonId = SoftLeptonProperties::Quality::egammaElectronId;
195  for (reco::PFCandidateCollection::const_iterator electron = h_electrons->begin(); electron != h_electrons->end(); ++electron) {
196  LeptonIds *id;
197  if (electron->gsfTrackRef().isNonnull())
198  id = &leptons[reco::TrackBaseRef(electron->gsfTrackRef())];
199  else if (electron->trackRef().isNonnull())
200  id = &leptons[reco::TrackBaseRef(electron->trackRef())];
201  else
202  continue;
203  (*id)[SoftLeptonProperties::Quality::pfElectronId] = electron->mva_e_pi();
204  if (haveLeptonCands)
205  (*id)[SoftLeptonProperties::Quality::btagElectronCands] = (*h_leptonCands)[reco::PFCandidateRef(h_electrons, electron - h_electrons->begin())];
206  }
207  break;
208  }
209  } { // else
210  // look for View<Muon>
211  Handle<MuonView> h_muons;
212  event.getByToken(token_muons, h_muons);
213  if (h_muons.isValid()) {
214  for (MuonView::const_iterator muon = h_muons->begin(); muon != h_muons->end(); ++muon) {
215  // FIXME -> turn this selection into a muonCands input?
217  LeptonIds *id;
218  if (muon->globalTrack().isNonnull())
219  id = &leptons[reco::TrackBaseRef(muon->globalTrack())];
220  else if (muon->innerTrack().isNonnull())
221  id = &leptons[reco::TrackBaseRef(muon->innerTrack())];
222  else if (muon->outerTrack().isNonnull())
223  // does this makes sense ?
224  id = &leptons[reco::TrackBaseRef(muon->outerTrack())];
225  else
226  continue;
227  if (haveLeptonCands)
228  (*id)[SoftLeptonProperties::Quality::btagMuonCands] = (*h_leptonCands)[h_muons->refAt(muon - h_muons->begin())];
229  }
230  }
231  break;
232  }
233  } { // else
234  // look for edm::View<Track>
236  event.getByToken(token_tracks, h_tracks);
237  if (h_tracks.isValid()) {
238  for (unsigned int i = 0; i < h_tracks->size(); i++) {
239  LeptonIds &id = leptons[h_tracks->refAt(i)];
240  if (haveLeptonCands)
241  id[SoftLeptonProperties::Quality::btagLeptonCands] = (*h_leptonCands)[h_tracks->refAt(i)];
242  }
243  break;
244  }
245  } { // else
246  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";
247  } } while (false);
248 
249  if (!(m_leptonId == edm::InputTag())) {
250  Handle<edm::ValueMap<float> > h_leptonId;
251  event.getByToken(token_leptonId, h_leptonId);
252 
253  for (Leptons::iterator lepton = leptons.begin(); lepton != leptons.end(); ++lepton)
254  lepton->second[leptonId] = (*h_leptonId)[lepton->first];
255  }
256 
257  // output collections
258  std::auto_ptr<reco::SoftLeptonTagInfoCollection> outputCollection( new reco::SoftLeptonTagInfoCollection() );
259  for (unsigned int i = 0; i < jets.size(); ++i) {
260  reco::SoftLeptonTagInfo result = tag( jets[i], tracks[i], leptons, vertex );
261  outputCollection->push_back( result );
262  }
263  event.put( outputCollection );
264 }
int i
Definition: DBlmapReader.cc:9
const edm::EDGetTokenT< reco::PFCandidateCollection > token_pfElectrons
Definition: SoftLepton.h:104
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:81
const edm::EDGetTokenT< edm::ValueMap< float > > token_leptonCands
Definition: SoftLepton.h:108
const edm::EDGetTokenT< edm::ValueMap< float > > token_leptonId
Definition: SoftLepton.h:110
const edm::EDGetTokenT< edm::View< reco::Muon > > token_muons
Definition: SoftLepton.h:105
const edm::EDGetTokenT< edm::View< reco::Electron > > token_electrons
Definition: SoftLepton.h:103
const edm::EDGetTokenT< edm::View< reco::GsfElectron > > token_gsfElectrons
Definition: SoftLepton.h:102
std::vector< SoftLeptonTagInfo > SoftLeptonTagInfoCollection
edm::RefToBase< reco::Track > TrackBaseRef
persistent reference to a Track, using views
Definition: TrackFwd.h:22
const edm::InputTag m_leptons
Definition: SoftLepton.h:101
vector< PseudoJet > jets
tuple result
Definition: query.py:137
const edm::EDGetTokenT< reco::VertexCollection > token_primaryVertex
Definition: SoftLepton.h:100
const edm::InputTag m_leptonId
Definition: SoftLepton.h:109
edm::Ref< PFCandidateCollection > PFCandidateRef
persistent reference to a PFCandidate
bool isValid() const
Definition: HandleBase.h:76
const edm::InputTag m_leptonCands
Definition: SoftLepton.h:107
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:267
const edm::EDGetTokenT< edm::View< reco::Jet > > token_jets
Definition: SoftLepton.h:99
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:63
static const reco::Vertex s_nominalBeamSpot
Definition: SoftLepton.h:124
muon::SelectionType m_muonSelection
Definition: SoftLepton.h:121
std::map< edm::RefToBase< reco::Track >, LeptonIds, TrackCompare > Leptons
Definition: SoftLepton.h:64
const edm::InputTag m_jets
Definition: SoftLepton.h:97
const TransientTrackBuilder * m_transientTrackBuilder
Definition: SoftLepton.h:113
const edm::EDGetTokenT< edm::View< reco::Track > > token_tracks
Definition: SoftLepton.h:106
tuple size
Write out results.
const edm::EDGetTokenT< reco::JetTracksAssociationCollection > token_jtas
Definition: SoftLepton.h:98
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 309 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::TrackBase::momentum(), reco::LeafCandidate::momentum(), or, perp(), reco::TrackBase::phi(), and reco::TrackBase::pt().

Referenced by tag().

313  {
314  math::XYZVector axis = jet->momentum();
315 
318 
319  double sum_pT = 0.;
320  double sum_eta_by_pT = 0.;
321  double sum_phi_by_pT = 0.;
322 
323  double perp;
324  double phi_rel;
325  double eta_rel;
326 
327  // refine jet eta and phi with charged tracks measurements, if available
328  for (reco::TrackRefVector::const_iterator track_it = tracks.begin(); track_it != tracks.end(); ++track_it ) {
329  const reco::Track & track = **track_it;
330 
331  perp = track.pt();
332  eta_rel = (double) track.eta() - axis.eta();
333  phi_rel = (double) track.phi() - axis.phi();
334  while (phi_rel < -M_PI) phi_rel += 2*M_PI;
335  while (phi_rel > M_PI) phi_rel -= 2*M_PI;
336 
337  sum_pT += perp;
338  sum_phi_by_pT += perp * phi_rel;
339  sum_eta_by_pT += perp * eta_rel;
340  }
341 
342  // "remove" excluded track
344  const reco::Track & track = *exclude;
345 
346  perp = track.pt();
347  eta_rel = (double) track.eta() - axis.eta();
348  phi_rel = (double) track.phi() - axis.phi();
349  while (phi_rel < -M_PI) phi_rel += 2*M_PI;
350  while (phi_rel > M_PI) phi_rel -= 2*M_PI;
351 
352  sum_pT -= perp;
353  sum_phi_by_pT -= perp * phi_rel;
354  sum_eta_by_pT -= perp * eta_rel;
355  }
356 
357  if (sum_pT > 1.) // avoid the case of only the lepton-track with small rounding errors
358  axis = math::RhoEtaPhiVector( axis.rho(), axis.eta() + sum_eta_by_pT / sum_pT, axis.phi() + sum_phi_by_pT / sum_pT);
359 
360  } else if (m_refineJetAxis == AXIS_CHARGED_SUM or
362  math::XYZVector sum;
363 
364  // recalculate the jet direction as the sum of charget tracks momenta
365  for (reco::TrackRefVector::const_iterator track_it = tracks.begin(); track_it != tracks.end(); ++track_it ) {
366  const reco::Track & track = **track_it;
367  sum += track.momentum();
368  }
369 
370  // "remove" excluded track
371  if (m_refineJetAxis == AXIS_CHARGED_SUM_NOLEPTON and exclude.isNonnull()) {
372  const reco::Track & track = *exclude;
373  sum -= track.momentum();
374  }
375 
376  if (sum.R() > 1.) // avoid the case of only the lepton-track with small rounding errors
377  axis = sum;
379  axis -= exclude->momentum();
380  }
381 
382  return GlobalVector(axis.x(), axis.y(), axis.z());
383 }
const Vector & momentum() const
track momentum vector
Definition: TrackBase.h:148
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
virtual Vector momentum() const
spatial momentum vector
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:137
const_iterator end() const
Termination of iteration.
Definition: RefVector.h:249
RhoEtaPhiVectorD RhoEtaPhiVector
spatial vector with cylindrical internal representation using pseudorapidity
Definition: Vector3D.h:32
const_iterator begin() const
Initialize an iterator over the RefVector.
Definition: RefVector.h:244
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:139
double pt() const
track transverse momentum
Definition: TrackBase.h:129
#define M_PI
unsigned int m_refineJetAxis
Definition: SoftLepton.h:116
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
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 385 of file SoftLepton.cc.

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

Referenced by tag().

385  {
386  double mag = vector.r() * axis.r();
387  double dot = vector.Dot(axis);
388  return -log((mag - dot)/(mag + dot)) / 2;
389 }
static std::vector< std::string > checklist log
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 267 of file SoftLepton.cc.

References boostedPPar(), TransientTrackBuilder::build(), reco::SoftLeptonProperties::deltaR, reco::SoftLeptonProperties::etaRel, info(), reco::SoftLeptonTagInfo::insert(), getDQMSummary::iter, 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().

272  {
274  info.setJetRef( jet );
275 
276  for(Leptons::const_iterator lepton = leptons.begin(); lepton != leptons.end(); ++lepton) {
277  const math::XYZVector & lepton_momentum = lepton->first->momentum();
278  if (m_chi2Cut > 0.0 && lepton->first->normalizedChi2() > m_chi2Cut)
279  continue;
280 
281  const GlobalVector jetAxis = refineJetAxis( jet, tracks, lepton->first );
282  const math::XYZVector axis( jetAxis.x(), jetAxis.y(), jetAxis.z());
283  if (DeltaR(lepton_momentum, axis) > m_deltaRCut)
284  continue;
285 
286  reco::SoftLeptonProperties properties;
287 
288  reco::TransientTrack transientTrack = m_transientTrackBuilder->build(*lepton->first);
289  properties.sip2d = IPTools::signedTransverseImpactParameter( transientTrack, jetAxis, primaryVertex ).second.significance();
290  properties.sip3d = IPTools::signedImpactParameter3D( transientTrack, jetAxis, primaryVertex ).second.significance();
291  properties.deltaR = DeltaR( lepton_momentum, axis );
292  properties.ptRel = Perp( lepton_momentum, axis );
293  properties.p0Par = boostedPPar( lepton_momentum, axis );
294  properties.etaRel = relativeEta( lepton_momentum, axis );
295  properties.ratio = lepton_momentum.R() / axis.R();
296  properties.ratioRel = lepton_momentum.Dot(axis) / axis.Mag2();
297 
298  for(LeptonIds::const_iterator iter = lepton->second.begin(); iter != lepton->second.end(); ++iter)
299  properties.setQuality(static_cast<SoftLeptonProperties::Quality::Generic>(iter->first), iter->second);
300 
301  info.insert( lepton->first, properties );
302  }
303 
304  return info;
305 }
static const TGPicture * info(bool iBackgroundIsBlack)
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:118
void setQuality(Quality::Generic qual, float value)
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:385
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:309
T z() const
Definition: PV3DBase.h:64
double m_deltaRCut
Definition: SoftLepton.h:117
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
const TransientTrackBuilder * m_transientTrackBuilder
Definition: SoftLepton.h:113
T x() const
Definition: PV3DBase.h:62
static double boostedPPar(const math::XYZVector &vector, const math::XYZVector &axis)
Definition: SoftLepton.cc:392

Member Data Documentation

double SoftLepton::m_chi2Cut
private

Definition at line 118 of file SoftLepton.h.

Referenced by tag().

double SoftLepton::m_deltaRCut
private

Definition at line 117 of file SoftLepton.h.

Referenced by tag().

const edm::InputTag SoftLepton::m_jets
private

Definition at line 97 of file SoftLepton.h.

Referenced by produce().

const edm::InputTag SoftLepton::m_leptonCands
private

Definition at line 107 of file SoftLepton.h.

Referenced by produce().

const edm::InputTag SoftLepton::m_leptonId
private

Definition at line 109 of file SoftLepton.h.

Referenced by produce().

const edm::InputTag SoftLepton::m_leptons
private

Definition at line 101 of file SoftLepton.h.

Referenced by produce().

muon::SelectionType SoftLepton::m_muonSelection
private

Definition at line 121 of file SoftLepton.h.

Referenced by produce().

unsigned int SoftLepton::m_refineJetAxis
private

Definition at line 116 of file SoftLepton.h.

Referenced by refineJetAxis().

const TransientTrackBuilder* SoftLepton::m_transientTrackBuilder
private

Definition at line 113 of file SoftLepton.h.

Referenced by produce(), and tag().

const reco::Vertex SoftLepton::s_nominalBeamSpot
staticprivate

Definition at line 124 of file SoftLepton.h.

Referenced by produce().

const edm::EDGetTokenT<edm::View<reco::Electron> > SoftLepton::token_electrons
private

Definition at line 103 of file SoftLepton.h.

Referenced by produce().

const edm::EDGetTokenT<edm::View<reco::GsfElectron> > SoftLepton::token_gsfElectrons
private

Definition at line 102 of file SoftLepton.h.

Referenced by produce().

const edm::EDGetTokenT<edm::View<reco::Jet> > SoftLepton::token_jets
private

Definition at line 99 of file SoftLepton.h.

Referenced by produce().

const edm::EDGetTokenT<reco::JetTracksAssociationCollection> SoftLepton::token_jtas
private

Definition at line 98 of file SoftLepton.h.

Referenced by produce().

const edm::EDGetTokenT<edm::ValueMap<float> > SoftLepton::token_leptonCands
private

Definition at line 108 of file SoftLepton.h.

Referenced by produce().

const edm::EDGetTokenT<edm::ValueMap<float> > SoftLepton::token_leptonId
private

Definition at line 110 of file SoftLepton.h.

Referenced by produce().

const edm::EDGetTokenT<edm::View<reco::Muon> > SoftLepton::token_muons
private

Definition at line 105 of file SoftLepton.h.

Referenced by produce().

const edm::EDGetTokenT<reco::PFCandidateCollection> SoftLepton::token_pfElectrons
private

Definition at line 104 of file SoftLepton.h.

Referenced by produce().

const edm::EDGetTokenT<reco::VertexCollection> SoftLepton::token_primaryVertex
private

Definition at line 100 of file SoftLepton.h.

Referenced by produce().

const edm::EDGetTokenT<edm::View<reco::Track> > SoftLepton::token_tracks
private

Definition at line 106 of file SoftLepton.h.

Referenced by produce().