CMS 3D CMS Logo

TrackWithVertexSelector.cc
Go to the documentation of this file.
3 //
4 // constructors and destructor
5 //
6 
7 namespace {
8  constexpr float fakeBeamSpotTimeWidth = 0.175f;
9 }
10 
12  numberOfValidHits_(iConfig.getParameter<uint32_t>("numberOfValidHits")),
13  numberOfValidPixelHits_(iConfig.getParameter<uint32_t>("numberOfValidPixelHits")),
14  numberOfLostHits_(iConfig.getParameter<uint32_t>("numberOfLostHits")),
15  normalizedChi2_(iConfig.getParameter<double>("normalizedChi2")),
16  ptMin_(iConfig.getParameter<double>("ptMin")),
17  ptMax_(iConfig.getParameter<double>("ptMax")),
18  etaMin_(iConfig.getParameter<double>("etaMin")),
19  etaMax_(iConfig.getParameter<double>("etaMax")),
20  dzMax_(iConfig.getParameter<double>("dzMax")),
21  d0Max_(iConfig.getParameter<double>("d0Max")),
22  ptErrorCut_(iConfig.getParameter<double>("ptErrorCut")),
23  quality_(iConfig.getParameter<std::string>("quality")),
24  nVertices_(iConfig.getParameter<bool>("useVtx") ? iConfig.getParameter<uint32_t>("nVertices") : 0),
25  vertexToken_(iC.consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("vertexTag"))),
26  timesToken_(iC.consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("timesTag"))),
27  timeResosToken_(iC.consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("timeResosTag"))),
28  vtxFallback_(iConfig.getParameter<bool>("vtxFallback")),
29  zetaVtx_(iConfig.getParameter<double>("zetaVtx")),
30  rhoVtx_(iConfig.getParameter<double>("rhoVtx")),
31  nSigmaDtVertex_(iConfig.getParameter<double>("nSigmaDtVertex")) {
32 }
33 
35 
36 
39  event.getByToken(vertexToken_, hVtx);
40  vcoll_ = hVtx.product();
41 
43  event.getByToken(timesToken_, hTimes);
44  timescoll_ = hTimes.isValid() ? hTimes.product() : nullptr;
45 
47  event.getByToken(timeResosToken_, hTimeResos);
48  timeresoscoll_ = hTimeResos.isValid() ? hTimeResos.product() : nullptr;
49 }
50 
52  using std::abs;
54  (static_cast<unsigned int>(t.hitPattern().numberOfValidPixelHits()) >= numberOfValidPixelHits_) &&
57  (t.ptError()/t.pt()*std::max(1.,t.normalizedChi2()) <= ptErrorCut_) &&
58  (t.quality(t.qualityByName(quality_))) &&
59  (t.pt() >= ptMin_) &&
60  (t.pt() <= ptMax_) &&
61  (abs(t.eta()) <= etaMax_) &&
62  (abs(t.eta()) >= etaMin_) &&
63  (abs(t.dz()) <= dzMax_) &&
64  (abs(t.d0()) <= d0Max_) ) {
65  return true;
66  }
67  return false;
68 }
69 
71  return testTrack(*tref);
72 }
73 
75  bool ok = false;
76  if (!vtxs.empty()) {
77  unsigned int tested = 1;
78  for (reco::VertexCollection::const_iterator it = vtxs.begin(), ed = vtxs.end();
79  it != ed; ++it) {
80  if ( (std::abs(t.dxy(it->position())) < rhoVtx_) &&
81  (std::abs(t.dz(it->position())) < zetaVtx_) ) {
82  ok = true; break;
83  }
84  if (tested++ >= nVertices_) break;
85  }
86  } else if (vtxFallback_) {
87  return ( (std::abs(t.vertex().z()) < 15.9) && (t.vertex().Rho() < 0.2) );
88  }
89  return ok;
90 }
91 
93  const auto& t = *tref;
94  const bool timeAvailable = timescoll_ != nullptr && timeresoscoll_ != nullptr;
95  bool ok = false;
96  if (!vtxs.empty()) {
97  unsigned int tested = 1;
98  for (reco::VertexCollection::const_iterator it = vtxs.begin(), ed = vtxs.end();
99  it != ed; ++it) {
100  const bool useTime = timeAvailable && it->t() != 0.;
101  float time = useTime ? (*timescoll_)[tref] : -1.f;
102  float timeReso = useTime ? (*timeresoscoll_)[tref] : -1.f;
103  timeReso = ( timeReso > 1e-6 ? timeReso : fakeBeamSpotTimeWidth );
104 
105  if( edm::isNotFinite(time) ) {
106  time = 0.0;
107  timeReso = 2.0*fakeBeamSpotTimeWidth;
108  }
109 
110  const double vtxSigmaT2 = it->tError() * it->tError();
111  const double vtxTrackErr = std::sqrt( vtxSigmaT2 + timeReso*timeReso );
112 
113  if ( (std::abs(t.dxy(it->position())) < rhoVtx_) &&
114  (std::abs(t.dz(it->position())) < zetaVtx_) &&
115  ( !useTime || (std::abs(time - it->t())/vtxTrackErr < nSigmaDtVertex_) ) ) {
116  ok = true; break;
117  }
118  if (tested++ >= nVertices_) break;
119  }
120  } else if (vtxFallback_) {
121  return ( (std::abs(t.vertex().z()) < 15.9) && (t.vertex().Rho() < 0.2) );
122  }
123  return ok;
124 }
125 
127  if (!testTrack(t)) return false;
128  if (nVertices_ == 0) return true;
129  return testVertices(t, *vcoll_);
130 }
131 
133  if (!testTrack(tref)) return false;
134  if (nVertices_ == 0) return true;
135  return testVertices(tref, *vcoll_);
136 }
137 
bool testTrack(const reco::Track &t) const
double d0() const
dxy parameter in perigee convention (d0 = -dxy)
Definition: TrackBase.h:636
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:600
constexpr bool isNotFinite(T x)
Definition: isFinite.h:9
bool testVertices(const reco::Track &t, const reco::VertexCollection &vtxs) const
reco::VertexCollection const * vcoll_
unsigned short numberOfLostHits() const
number of cases where track crossed a layer without getting a hit.
Definition: TrackBase.h:907
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
edm::EDGetTokenT< reco::VertexCollection > vertexToken_
void init(const edm::Event &event, const edm::EventSetup &)
bool operator()(const reco::Track &t) const
const Point & vertex() const
reference point on the track. This method is DEPRECATED, please use referencePoint() instead ...
Definition: TrackBase.h:738
edm::EDGetTokenT< edm::ValueMap< float > > timesToken_
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:690
T sqrt(T t)
Definition: SSEVec.h:18
edm::EDGetTokenT< edm::ValueMap< float > > timeResosToken_
double pt() const
track transverse momentum
Definition: TrackBase.h:660
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Definition: TrackBase.h:814
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:901
bool isValid() const
Definition: HandleBase.h:74
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:648
static TrackQuality qualityByName(const std::string &name)
Definition: TrackBase.cc:134
T const * product() const
Definition: Handle.h:74
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:485
edm::ValueMap< float > const * timeresoscoll_
bool quality(const TrackQuality) const
Track quality.
Definition: TrackBase.h:549
fixed size matrix
HLT enums.
int numberOfValidPixelHits() const
Definition: HitPattern.h:916
TrackWithVertexSelector(const edm::ParameterSet &iConfig, edm::ConsumesCollector &&iC)
edm::ValueMap< float > const * timescoll_
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:630
#define constexpr
Definition: event.py:1