CMS 3D CMS Logo

IPProducer.h
Go to the documentation of this file.
1 #ifndef RecoBTag_IPProducer
2 #define RecoBTag_IPProducer
3 
4 // system include files
5 #include <cmath>
6 #include <memory>
7 #include <iostream>
8 #include <algorithm>
9 
10 #include "boost/bind.hpp"
11 
12 // user include files
22 
28 
32 
41 
45 
46 // system include files
47 #include <memory>
48 
49 // user include files
54 
56 using boost::bind;
57 
58 namespace IPProducerHelpers {
59  class FromJTA{
60  public:
61  FromJTA(const edm::ParameterSet& iConfig, edm::ConsumesCollector && iC) : token_associator(iC.consumes<reco::JetTracksAssociationCollection>(iConfig.getParameter<edm::InputTag>("jetTracks")))
62  {}
64  {
65  return it.tracks();
66  }
67  std::vector<reco::JTATagInfo> makeBaseVector(const edm::Event& iEvent){
69  iEvent.getByToken(token_associator, jetTracksAssociation);
70  std::vector<reco::JTATagInfo> bases;
71  size_t i = 0;
73  jetTracksAssociation->begin();
74  it != jetTracksAssociation->end(); it++, i++) {
75  edm::Ref<reco::JetTracksAssociationCollection> jtaRef(jetTracksAssociation, i);
76  bases.push_back(reco::JTATagInfo(jtaRef));
77  }
78  return bases;
79  }
80 
82  };
84  public:
85  FromJetAndCands(const edm::ParameterSet& iConfig, edm::ConsumesCollector && iC, const std::string & jets = "jets"): token_jets(iC.consumes<edm::View<reco::Jet> >(iConfig.getParameter<edm::InputTag>(jets))),
86  token_cands(iC.consumes<edm::View<reco::Candidate> >(iConfig.getParameter<edm::InputTag>("candidates"))), maxDeltaR(iConfig.getParameter<double>("maxDeltaR")),
87  explicitJTA(iConfig.existsAs<bool>("explicitJTA") ? iConfig.getParameter<bool>("explicitJTA") : false) {}
88 
89  const std::vector<reco::CandidatePtr> & tracks(const reco::JetTagInfo & it)
90  {
91  return m_map[it.jet().key()];
92  }
93  std::vector<reco::JetTagInfo> makeBaseVector(const edm::Event& iEvent){
95  iEvent.getByToken(token_jets, jets);
96  std::vector<reco::JetTagInfo> bases;
97 
99  iEvent.getByToken(token_cands, cands);
100  m_map.clear();
101  m_map.resize(jets->size());
102  double maxDeltaR2 = maxDeltaR*maxDeltaR;
103  size_t i = 0;
104  for(edm::View<reco::Jet>::const_iterator it = jets->begin();
105  it != jets->end(); it++, i++) {
106  edm::RefToBase<reco::Jet> jRef(jets, i);
107  bases.push_back(reco::JetTagInfo(jRef));
108  if( explicitJTA )
109  {
110  for(size_t j=0;j<it->numberOfDaughters();++j) {
111  if( it->daughterPtr(j)->bestTrack()!=nullptr && it->daughterPtr(j)->charge() !=0 ){
112  m_map[i].push_back(it->daughterPtr(j));
113  }
114  }
115  }
116  else
117  {
118  for(size_t j=0;j<cands->size();++j) {
119  if( (*cands)[j].bestTrack()!=nullptr && (*cands)[j].charge() !=0 && (*cands)[j].pt() > 0 && Geom::deltaR2((*cands)[j],(*jets)[i]) < maxDeltaR2 ){
120  m_map[i].push_back(cands->ptrAt(j));
121  }
122  }
123  }
124  }
125  return bases;
126  }
127  std::vector<std::vector<reco::CandidatePtr> > m_map;
130  double maxDeltaR;
132  };
133 }
134 template <class Container, class Base, class Helper>
136  public:
137  typedef std::vector<reco::IPTagInfo<Container,Base> > Product;
138 
139 
140  explicit IPProducer(const edm::ParameterSet&);
141  ~IPProducer() override;
142  static void fillDescriptions(edm::ConfigurationDescriptions & descriptions);
143 
144  void produce(edm::Event&, const edm::EventSetup&) override;
145  private:
146  void checkEventSetup(const edm::EventSetup & iSetup);
147 
150 
154  std::auto_ptr<HistogramProbabilityEstimator> m_probabilityEstimator;
155  unsigned long long m_calibrationCacheId2D;
156  unsigned long long m_calibrationCacheId3D;
157  bool m_useDB;
158 
161  double m_cutMaxTIP;
162  double m_cutMinPt;
164  double m_cutMaxLIP;
168  Helper m_helper;
169 };
170 
171 // -*- C++ -*-
172 //
173 // Package: IPProducer
174 // Class: IPProducer
175 //
183 //
184 // Original Author: Andrea Rizzi
185 // Created: Thu Apr 6 09:56:23 CEST 2006
186 //
187 //
188 
189 
190 
191 
192 
193 //
194 // constructors and destructor
195 //
196 template <class Container, class Base, class Helper> IPProducer<Container,Base,Helper>::IPProducer(const edm::ParameterSet& iConfig) :
197  m_config(iConfig),m_helper(iConfig,consumesCollector())
198 {
201 
202  token_primaryVertex = consumes<reco::VertexCollection>(m_config.getParameter<edm::InputTag>("primaryVertex"));
203 
204  m_computeProbabilities = m_config.getParameter<bool>("computeProbabilities");
205  m_computeGhostTrack = m_config.getParameter<bool>("computeGhostTrack");
206  m_ghostTrackPriorDeltaR = m_config.getParameter<double>("ghostTrackPriorDeltaR");
207  m_cutPixelHits = m_config.getParameter<int>("minimumNumberOfPixelHits");
208  m_cutTotalHits = m_config.getParameter<int>("minimumNumberOfHits");
209  m_cutMaxTIP = m_config.getParameter<double>("maximumTransverseImpactParameter");
210  m_cutMinPt = m_config.getParameter<double>("minimumTransverseMomentum");
211  m_cutMaxChiSquared = m_config.getParameter<double>("maximumChiSquared");
212  m_cutMaxLIP = m_config.getParameter<double>("maximumLongitudinalImpactParameter");
213  m_directionWithTracks = m_config.getParameter<bool>("jetDirectionUsingTracks");
214  m_directionWithGhostTrack = m_config.getParameter<bool>("jetDirectionUsingGhostTrack");
215  m_useTrackQuality = m_config.getParameter<bool>("useTrackQuality");
216 
217  if (m_computeGhostTrack)
218  produces<reco::TrackCollection>("ghostTracks");
219  produces<Product>();
220 }
221 
222 template <class Container, class Base, class Helper> IPProducer<Container,Base,Helper>::~IPProducer()
223 {
224 }
225 
226 //
227 // member functions
228 //
229 // ------------ method called to produce the data ------------
230 template <class Container, class Base, class Helper> void
232 {
233  // Update probability estimator if event setup is changed
235  checkEventSetup(iSetup);
236 
237 
239  iEvent.getByToken(token_primaryVertex, primaryVertex);
240 
242  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder", builder);
243  // m_algo.setTransientTrackBuilder(builder.product());
244 
245  // output collections
246  auto result = std::make_unique<Product>();
247 
248  std::unique_ptr<reco::TrackCollection> ghostTracks;
249  reco::TrackRefProd ghostTrackRefProd;
250  if (m_computeGhostTrack) {
251  ghostTracks = std::make_unique<reco::TrackCollection>();
252  ghostTrackRefProd = iEvent.getRefBeforePut<reco::TrackCollection>("ghostTracks");
253  }
254 
255  // use first pv of the collection
257  const reco::Vertex *pv = &dummy;
259  if (!primaryVertex->empty()) {
260  pv = &*primaryVertex->begin();
261  // we always use the first vertex (at the moment)
263  } else { // create a dummy PV
265  e(0, 0) = 0.0015 * 0.0015;
266  e(1, 1) = 0.0015 * 0.0015;
267  e(2, 2) = 15. * 15.;
268  reco::Vertex::Point p(0, 0, 0);
269  dummy = reco::Vertex(p, e, 0, 0, 0);
270  }
271 
272  std::vector<Base> baseTagInfos = m_helper.makeBaseVector(iEvent);
273  for(typename std::vector<Base>::const_iterator it = baseTagInfos.begin(); it != baseTagInfos.end(); it++) {
274  Container tracks = m_helper.tracks(*it);
275  math::XYZVector jetMomentum = it->jet()->momentum();
276 
277  if (m_directionWithTracks) {
278  jetMomentum *= 0.5;
279  for(typename Container::const_iterator itTrack = tracks.begin();
280  itTrack != tracks.end(); ++itTrack)
281  if (reco::btag::toTrack(*itTrack)->numberOfValidHits() >= m_cutTotalHits) //minimal quality cuts
282  jetMomentum += (*itTrack)->momentum();
283  }
284 
286  std::vector<reco::TransientTrack> transientTracks;
287 
288  for(typename Container::const_iterator itTrack = tracks.begin();
289  itTrack != tracks.end(); ++itTrack) {
290  reco::TransientTrack transientTrack = builder->build(*itTrack);
291  const reco::Track & track = transientTrack.track(); //**itTrack;
292  /* cout << " pt " << track.pt() <<
293  " d0 " << fabs(track.d0()) <<
294  " #hit " << track.hitPattern().numberOfValidHits()<<
295  " ipZ " << fabs(track.dz()-pv->z())<<
296  " chi2 " << track.normalizedChi2()<<
297  " #pixel " << track.hitPattern().numberOfValidPixelHits()<< endl;
298 */
299  if (track.pt() > m_cutMinPt &&
300  track.hitPattern().numberOfValidHits() >= m_cutTotalHits && // min num tracker hits
303  std::abs(track.dxy(pv->position())) < m_cutMaxTIP &&
304  std::abs(track.dz(pv->position())) < m_cutMaxLIP) {
305 // std::cout << "selected" << std::endl;
306  selectedTracks.push_back(*itTrack);
307  transientTracks.push_back(transientTrack);
308  }
309  }
310 // std::cout <<"SIZE: " << transientTracks.size() << std::endl;
311  GlobalVector direction(jetMomentum.x(), jetMomentum.y(), jetMomentum.z());
312 
313  std::auto_ptr<reco::GhostTrack> ghostTrack;
314  reco::TrackRef ghostTrackRef;
315  if (m_computeGhostTrack) {
316  reco::GhostTrackFitter fitter;
319  ghostTrack.reset(new reco::GhostTrack(fitter.fit(origin, error, direction,
321  transientTracks)));
322 
323 /*
324  if (std::sqrt(jetMomentum.Perp2()) > 30) {
325  double offset = ghostTrack->prediction().lambda(origin);
326  std::cout << "------------------ jet pt " << std::sqrt(jetMomentum.Perp2()) << std::endl;
327  const std::vector<GhostTrackState> *states = &ghostTrack->states();
328  for(std::vector<GhostTrackState>::const_iterator state = states->begin();
329  state != states->end(); ++state) {
330  double dist = state->lambda() - offset;
331  double err = state->lambdaError(ghostTrack->prediction(), error);
332  double ipSig = IPTools::signedImpactParameter3D(state->track(), direction, *pv).second.significance();
333  double axisDist = state->axisDistance(ghostTrack->prediction());
334  std::cout << state->track().impactPointState().freeState()->momentum().perp()
335  << ": " << dist << "/" << err << " [" << (dist / err) << "], ipsig = " << ipSig << ", dist = " << axisDist << ", w = " << state->weight() << std::endl;
336  }
337  }
338 */
339  ghostTrackRef = reco::TrackRef(ghostTrackRefProd, ghostTracks->size());
340  ghostTracks->push_back(*ghostTrack);
341 
343  const reco::GhostTrackPrediction &pred = ghostTrack->prediction();
344  double lambda = pred.lambda(origin);
345  dummy = reco::Vertex(RecoVertex::convertPos(pred.position(lambda)),
347  0, 0, 0);
348  pv = &dummy;
349  direction = pred.direction();
350  }
351  }
352 
353  std::vector<float> prob2D, prob3D;
354  std::vector<reco::btag::TrackIPData> ipData;
355 
356  for(unsigned int ind = 0; ind < transientTracks.size(); ind++) {
357  const reco::TransientTrack &transientTrack = transientTracks[ind];
358  const reco::Track & track = transientTrack.track();
359 
360  reco::btag::TrackIPData trackIP;
361  trackIP.ip3d = IPTools::signedImpactParameter3D(transientTrack, direction, *pv).second;
362  trackIP.ip2d = IPTools::signedTransverseImpactParameter(transientTrack, direction, *pv).second;
363 
364  TrajectoryStateOnSurface closest =
366  *pv, direction,
367  transientTrack.field());
368  if (closest.isValid())
369  trackIP.closestToJetAxis = closest.globalPosition();
370 
371  // TODO: cross check if it is the same using other methods
372  trackIP.distanceToJetAxis = IPTools::jetTrackDistance(transientTrack, direction, *pv).second;
373 
374  if (ghostTrack.get()) {
375  const std::vector<reco::GhostTrackState> &states = ghostTrack->states();
376  std::vector<reco::GhostTrackState>::const_iterator pos =
377  std::find_if(states.begin(), states.end(),
378  bind(std::equal_to<reco::TransientTrack>(),
379  bind(&reco::GhostTrackState::track, _1),
380  transientTrack));
381 
382  if (pos != states.end() && pos->isValid()) {
383  VertexDistance3D dist;
384  const reco::GhostTrackPrediction &pred = ghostTrack->prediction();
385  GlobalPoint p1 = pos->tsos().globalPosition();
386  GlobalError e1 = pos->tsos().cartesianError().position();
387  GlobalPoint p2 = pred.position(pos->lambda());
388  GlobalError e2 = pred.positionError(pos->lambda());
389  trackIP.closestToGhostTrack = p1;
390  trackIP.distanceToGhostTrack = dist.distance(VertexState(p1, e1),
391  VertexState(p2, e2));
392  trackIP.ghostTrackWeight = pos->weight();
393  } else {
394  trackIP.distanceToGhostTrack = Measurement1D(-1. -1.);
395  trackIP.ghostTrackWeight = 0.;
396  }
397  } else {
398  trackIP.distanceToGhostTrack = Measurement1D(-1. -1.);
399  trackIP.ghostTrackWeight = 1.;
400  }
401 
402  ipData.push_back(trackIP);
403 
405  //probability with 3D ip
406  std::pair<bool,double> probability = m_probabilityEstimator->probability(m_useTrackQuality, 0,ipData.back().ip3d.significance(),track,*(it->jet()),*pv);
407  prob3D.push_back(probability.first ? probability.second : -1.);
408 
409  //probability with 2D ip
410  probability = m_probabilityEstimator->probability(m_useTrackQuality,1,ipData.back().ip2d.significance(),track,*(it->jet()),*pv);
411  prob2D.push_back(probability.first ? probability.second : -1.);
412  }
413  }
414 
415  result->push_back(typename Product::value_type(ipData, prob2D, prob3D, selectedTracks,
416  *it, pvRef, direction, ghostTrackRef));
417  }
418 
420  iEvent.put(std::move(ghostTracks), "ghostTracks");
421  iEvent.put(std::move(result));
422 }
423 
424 
431 
432 template <class Container, class Base, class Helper> void IPProducer<Container,Base,Helper>::checkEventSetup(const edm::EventSetup & iSetup)
433  {
434 
437  unsigned long long cacheId2D= re2D.cacheIdentifier();
438  unsigned long long cacheId3D= re3D.cacheIdentifier();
439 
440  if(cacheId2D!=m_calibrationCacheId2D || cacheId3D!=m_calibrationCacheId3D ) //Calibration changed
441  {
442  //iSetup.get<BTagTrackProbabilityRcd>().get(calib);
444  iSetup.get<BTagTrackProbability2DRcd>().get(calib2DHandle);
446  iSetup.get<BTagTrackProbability3DRcd>().get(calib3DHandle);
447 
448  const TrackProbabilityCalibration * ca2D= calib2DHandle.product();
449  const TrackProbabilityCalibration * ca3D= calib3DHandle.product();
450 
452 
453  }
454  m_calibrationCacheId3D=cacheId3D;
455  m_calibrationCacheId2D=cacheId2D;
456 }
457 
458 // Specialized templates used to fill 'descriptions'
459 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
460 template <>
462 
464  desc.add<double>("maximumTransverseImpactParameter",0.2);
465  desc.add<int>("minimumNumberOfHits",8);
466  desc.add<double>("minimumTransverseMomentum",1.0);
467  desc.add<edm::InputTag>("primaryVertex",edm::InputTag("offlinePrimaryVertices"));
468  desc.add<double>("maximumLongitudinalImpactParameter",17.0);
469  desc.add<bool>("computeGhostTrack",true);
470  desc.add<double>("ghostTrackPriorDeltaR",0.03);
471  desc.add<edm::InputTag>("jetTracks",edm::InputTag("ak4JetTracksAssociatorAtVertexPF"));
472  desc.add<bool>("jetDirectionUsingGhostTrack",false);
473  desc.add<int>("minimumNumberOfPixelHits",2);
474  desc.add<bool>("jetDirectionUsingTracks",false);
475  desc.add<bool>("computeProbabilities",true);
476  desc.add<bool>("useTrackQuality",false);
477  desc.add<double>("maximumChiSquared",5.0);
478  descriptions.addDefault(desc);
479 }
480 
481 template <>
483 
485  desc.add<double>("maximumTransverseImpactParameter",0.2);
486  desc.add<int>("minimumNumberOfHits",8);
487  desc.add<double>("minimumTransverseMomentum",1.0);
488  desc.add<edm::InputTag>("primaryVertex",edm::InputTag("offlinePrimaryVertices"));
489  desc.add<double>("maximumLongitudinalImpactParameter",17.0);
490  desc.add<bool>("computeGhostTrack",true);
491  desc.add<double>("maxDeltaR",0.4);
492  desc.add<edm::InputTag>("candidates",edm::InputTag("particleFlow"));
493  desc.add<bool>("jetDirectionUsingGhostTrack",false);
494  desc.add<int>("minimumNumberOfPixelHits",2);
495  desc.add<bool>("jetDirectionUsingTracks",false);
496  desc.add<bool>("computeProbabilities",true);
497  desc.add<bool>("useTrackQuality",false);
498  desc.add<edm::InputTag>("jets",edm::InputTag("ak4PFJetsCHS"));
499  desc.add<double>("ghostTrackPriorDeltaR",0.03);
500  desc.add<double>("maximumChiSquared",5.0);
501  desc.addOptional<bool>("explicitJTA",false);
502  descriptions.addDefault(desc);
503 }
504 
505 #endif
~IPProducer() override
Definition: IPProducer.h:222
TrackRefVector tracks(void) const override
returns a list of tracks associated to the jet
Definition: JTATagInfo.h:21
reco::Vertex::Point convertPos(const GlobalPoint &p)
T getParameter(std::string const &) const
unsigned long long cacheIdentifier() const
double m_cutMaxChiSquared
Definition: IPProducer.h:163
std::vector< reco::JTATagInfo > makeBaseVector(const edm::Event &iEvent)
Definition: IPProducer.h:67
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:137
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
bool m_directionWithGhostTrack
Definition: IPProducer.h:166
double lambda(const GlobalPoint &point) const
transient_vector_type::const_iterator const_iterator
unsigned long long m_calibrationCacheId3D
Definition: IPProducer.h:156
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
Definition: TrackBase.h:561
const TransientTrack & track() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
int numberOfValidHits() const
Definition: HitPattern.h:824
JetTracksAssociation::Container JetTracksAssociationCollection
typedefs for backward compatibility
Measurement1D ip2d
Definition: IPTagInfo.h:31
FromJetAndCands(const edm::ParameterSet &iConfig, edm::ConsumesCollector &&iC, const std::string &jets="jets")
Definition: IPProducer.h:85
double m_cutMaxTIP
Definition: IPProducer.h:161
unsigned long long m_calibrationCacheId2D
Definition: IPProducer.h:155
std::pair< bool, Measurement1D > signedTransverseImpactParameter(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:50
reco::Vertex::Error convertError(const GlobalError &ge)
Definition: ConvertError.h:8
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
reco::TransientTrack build(const reco::Track *p) const
double m_cutMinPt
Definition: IPProducer.h:162
const_iterator end() const
math::Error< dimension >::type Error
covariance error matrix (3x3)
Definition: Vertex.h:43
std::pair< bool, Measurement1D > signedImpactParameter3D(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:71
GlobalPoint globalPosition() const
bool m_useTrackQuality
Definition: IPProducer.h:167
TrajectoryStateOnSurface closestApproachToJet(const TrajectoryStateOnSurface &state, const reco::Vertex &vertex, const GlobalVector &aJetDirection, const MagneticField *field)
Definition: IPTools.cc:177
const MagneticField * field() const
std::auto_ptr< HistogramProbabilityEstimator > m_probabilityEstimator
Definition: IPProducer.h:154
const reco::Track * toTrack(const reco::TrackBaseRef &t)
Definition: IPTagInfo.h:24
const Point & position() const
position
Definition: Vertex.h:109
int m_cutTotalHits
Definition: IPProducer.h:160
std::vector< reco::IPTagInfo< Container, Base > > Product
Definition: IPProducer.h:137
std::pair< double, Measurement1D > jetTrackDistance(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:200
double m_ghostTrackPriorDeltaR
Definition: IPProducer.h:153
GhostTrack fit(const GlobalPoint &priorPosition, const GlobalError &priorError, const GlobalVector &direction, double coneRadius, const std::vector< TransientTrack > &tracks) const
std::vector< std::vector< reco::CandidatePtr > > m_map
Definition: IPProducer.h:127
edm::RefToBase< Jet > jet(void) const override
returns a polymorphic reference to the tagged jet
Definition: JetTagInfo.h:22
void checkEventSetup(const edm::EventSetup &iSetup)
Definition: IPProducer.h:432
const std::vector< reco::CandidatePtr > & tracks(const reco::JetTagInfo &it)
Definition: IPProducer.h:89
Measurement1D distance(const GlobalPoint &vtx1Position, const GlobalError &vtx1PositionError, const GlobalPoint &vtx2Position, const GlobalError &vtx2PositionError) const override
int iEvent
Definition: GenABIO.cc:230
void addDefault(ParameterSetDescription const &psetDescription)
Measurement1D distanceToGhostTrack
Definition: IPTagInfo.h:34
Definition: Jet.py:1
FromJTA(const edm::ParameterSet &iConfig, edm::ConsumesCollector &&iC)
Definition: IPProducer.h:61
size_t key() const
Definition: RefToBase.h:250
int m_cutPixelHits
Definition: IPProducer.h:159
Helper m_helper
Definition: IPProducer.h:168
vector< PseudoJet > jets
double pt() const
track transverse momentum
Definition: TrackBase.h:621
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
def pv(vc)
Definition: MetAnalyzer.py:6
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::EDGetTokenT< reco::VertexCollection > token_primaryVertex
Definition: IPProducer.h:149
reco::TrackRefVector tracks(const reco::JTATagInfo &it)
Definition: IPProducer.h:63
math::XYZPoint Point
point in the space
Definition: Vertex.h:39
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:820
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Measurement1D ip3d
Definition: IPTagInfo.h:32
double p2[4]
Definition: TauolaWrapper.h:90
edm::EDGetTokenT< reco::JetTracksAssociationCollection > token_associator
Definition: IPProducer.h:81
bool m_directionWithTracks
Definition: IPProducer.h:165
RefProd< PROD > getRefBeforePut()
Definition: Event.h:167
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
Definition: TrackBase.h:609
const edm::ParameterSet & m_config
Definition: IPProducer.h:148
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16
GlobalPoint closestToJetAxis
Definition: IPTagInfo.h:29
const Track & track() const
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:446
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
edm::EDGetTokenT< edm::View< reco::Jet > > token_jets
Definition: IPProducer.h:128
Error error() const
return SMatrix
Definition: Vertex.h:139
Measurement1D distanceToJetAxis
Definition: IPTagInfo.h:33
void produce(edm::Event &, const edm::EventSetup &) override
Definition: IPProducer.h:231
const Vector & prediction() const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
fixed size matrix
HLT enums.
double p1[4]
Definition: TauolaWrapper.h:89
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
IPProducer(const edm::ParameterSet &)
Definition: IPProducer.h:196
GlobalPoint position(double lambda=0.) const
T get() const
Definition: EventSetup.h:63
GlobalPoint closestToGhostTrack
Definition: IPTagInfo.h:30
edm::EDGetTokenT< edm::View< reco::Candidate > > token_cands
Definition: IPProducer.h:129
std::vector< reco::JetTagInfo > makeBaseVector(const edm::Event &iEvent)
Definition: IPProducer.h:93
int numberOfValidPixelHits() const
Definition: HitPattern.h:839
bool m_useDB
Definition: IPProducer.h:157
TrajectoryStateOnSurface impactPointState() const
bool m_computeProbabilities
Definition: IPProducer.h:151
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
Definition: TrackBase.h:591
bool m_computeGhostTrack
Definition: IPProducer.h:152
const_iterator begin() const
edm::AssociationVector< reco::JetRefBaseProd, Values > Container
T const * product() const
Definition: ESHandle.h:86
double m_cutMaxLIP
Definition: IPProducer.h:164
def move(src, dest)
Definition: eostools.py:510
GlobalError positionError(double lambda=0.) const
const GlobalVector direction() const