CMS 3D CMS Logo

List of all members | Public Member Functions
ConversionHitChecker Class Reference

#include <ConversionHitChecker.h>

Public Member Functions

 ConversionHitChecker ()
 
std::pair< uint8_t, Measurement1DFloatnHitsBeforeVtx (const reco::TrackExtra &track, const reco::Vertex &vtx, float sigmaTolerance=3.0) const
 
uint8_t nSharedHits (const reco::Track &trk1, const reco::Track &trk2) const
 
 ~ConversionHitChecker ()
 

Detailed Description

Author
J.Bendavid
Version
Check hits along a Trajectory and count how many are before the vertex position. (taking into account the uncertainty in the vertex and hit positions. Also returns a the signed decay length and uncertainty from the closest hit on the track to the vertex position.

Definition at line 31 of file ConversionHitChecker.h.

Constructor & Destructor Documentation

ConversionHitChecker::ConversionHitChecker ( )
inline

Definition at line 35 of file ConversionHitChecker.h.

35 {}
ConversionHitChecker::~ConversionHitChecker ( )
inline

Member Function Documentation

std::pair< uint8_t, Measurement1DFloat > ConversionHitChecker::nHitsBeforeVtx ( const reco::TrackExtra track,
const reco::Vertex vtx,
float  sigmaTolerance = 3.0 
) const

Definition at line 9 of file ConversionHitChecker.cc.

References reco::Vertex::covariance(), listHistos::decayLength, dot(), edm::Ref< C, T, F >::get(), h, mag2(), nhits, position, rpcPointValidation_cfi::recHit, reco::TrackExtraBase::recHit(), reco::TrackExtraBase::recHits(), reco::TrackExtraBase::recHitsSize(), Measurement1DFloat::significance(), mathSSE::sqrt(), TrackingRecHit::surface(), Surface::toGlobal(), reco::TrackExtraBase::trajParams(), reco::Vertex::x(), reco::Vertex::y(), and reco::Vertex::z().

Referenced by ConversionProducer::buildCollection(), and ~ConversionHitChecker().

9  {
10 
11  // track hits are always inout
12 
13  GlobalPoint vtxPos(vtx.x(),vtx.y(),vtx.z());
14 
15  auto const & trajParams = track.trajParams();
16 
17  //iterate inside out, when distance to vertex starts increasing, we are at the closest hit
18  // the first (and last, btw) hit is always valid... (apparntly not..., conversion is different????)
19  TrackingRecHit const* recHit = *track.recHits().begin();
20  unsigned int closest = 0;
21  for(auto const& hit : track.recHits()) {
22  if (hit->isValid()) {
23  recHit = hit;
24  break;
25  }
26  ++closest;
27  }
28  auto globalPosition = recHit->surface()->toGlobal(trajParams[0].position());
29  auto distance2 = (vtxPos - globalPosition).mag2();
30  int nhits = 1;
31  for(unsigned int h=closest+1;h<track.recHitsSize();++h){
32 
33  //check if next valid hit is farther away from vertex than existing closest
34  auto nextHit = track.recHit(h);
35  if (!nextHit->isValid() ) continue;
36  globalPosition = nextHit->surface()->toGlobal(trajParams[h].position());
37  auto nextDistance2 = (vtxPos - globalPosition).mag2();
38  if (nextDistance2 > distance2) break;
39 
40  distance2=nextDistance2;
41  ++nhits;
42  closest=h;
43  }
44 
45  //compute signed decaylength significance for closest hit and check if it is before the vertex
46  //if not then we need to subtract it from the count of hits before the vertex, since it has been implicitly included
47  recHit = track.recHit(closest).get();
48  auto momDir = recHit->surface()->toGlobal(trajParams[closest].direction());
49  globalPosition = recHit->surface()->toGlobal(trajParams[closest].position());
50  float decayLengthHitToVtx = (vtxPos - globalPosition).dot(momDir);
51 
53  j[0] = momDir.x();
54  j[1] = momDir.y();
55  j[2] = momDir.z();
56  float vertexError2 = ROOT::Math::Similarity(j,vtx.covariance());
57  auto decayLenError = std::sqrt(vertexError2);
58 
59  Measurement1DFloat decayLength(decayLengthHitToVtx,decayLenError);
60 
61  if (decayLength.significance() < sigmaTolerance) { //decay length is not (significantly) positive, so hit is consistent with the vertex position or late
62  //subtract it from wrong hits count
63  --nhits;
64  }
65 
66  return std::pair<unsigned int,Measurement1DFloat>(nhits,decayLength);
67 
68 }
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:106
virtual const Surface * surface() const
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
double y() const
y coordinate
Definition: Vertex.h:113
double covariance(int i, int j) const
(i, j)-th element of error matrix, i, j = 0, ... 2
Definition: Vertex.h:130
TrackingRecHitRef recHit(unsigned int i) const
get i-th recHit
unsigned int recHitsSize() const
number of RecHits
T sqrt(T t)
Definition: SSEVec.h:18
TrajParams const & trajParams() const
auto recHits() const
accessor to RecHits
T mag2() const
The vector magnitude squared. Equivalent to vec.dot(vec)
ROOT::Math::SVector< double, 3 > AlgebraicVector3
double z() const
z coordinate
Definition: Vertex.h:115
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:243
double x() const
x coordinate
Definition: Vertex.h:111
T dot(const Basic3DVector &v) const
Scalar product, or "dot" product, with a vector of same type.
static int position[264][3]
Definition: ReadPGInfo.cc:509
uint8_t ConversionHitChecker::nSharedHits ( const reco::Track trk1,
const reco::Track trk2 
) const

Definition at line 70 of file ConversionHitChecker.cc.

References TrackingRecHit::isValid(), reco::Track::recHitsBegin(), reco::Track::recHitsEnd(), TrackingRecHit::sharesInput(), and TrackingRecHit::some.

Referenced by ConversionProducer::buildCollection(), and ~ConversionHitChecker().

70  {
71 
72  uint8_t nShared = 0;
73 
74  for (trackingRecHit_iterator iHit1 = trk1.recHitsBegin(); iHit1 != trk1.recHitsEnd(); ++iHit1) {
75  const TrackingRecHit *hit1 = (*iHit1);
76  if (hit1->isValid()) {
77  for (trackingRecHit_iterator iHit2 = trk2.recHitsBegin(); iHit2 != trk2.recHitsEnd(); ++iHit2) {
78  const TrackingRecHit *hit2 = (*iHit2);
79  if (hit2->isValid() && hit1->sharesInput(hit2,TrackingRecHit::some)) {
80  ++nShared;
81  }
82  }
83  }
84  }
85 
86  return nShared;
87 
88 }
virtual bool sharesInput(const TrackingRecHit *other, SharedInputType what) const
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
Definition: Track.h:109
bool isValid() const
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.
Definition: Track.h:114