CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes
PFCheckHitPattern Class Reference

PFCheckHitPatter. More...

#include <PFCheckHitPattern.h>

Public Types

typedef std::pair< PFTrackHitInfo, PFTrackHitInfoPFTrackHitFullInfo
 
typedef std::pair< unsigned int, unsigned int > PFTrackHitInfo
 

Public Member Functions

PFTrackHitFullInfo analyze (const TrackerTopology *tkerTopo, const TrackerGeometry *tkerGeom, const reco::TrackBaseRef track, const TransientVertex &vert)
 
 PFCheckHitPattern ()
 
void print (const reco::TrackBaseRef track) const
 Print hit pattern on track. More...
 
 ~PFCheckHitPattern ()
 

Private Types

typedef std::pair< uint32_t, uint32_t > DetInfo
 
typedef std::map< DetInfo, std::pair< double, double > > RZrangeMap
 

Private Member Functions

void init (const TrackerTopology *, const TrackerGeometry *)
 Create map indicating r/z values of all layers/disks. More...
 
void print (const reco::HitPattern::HitCategory, const reco::HitPattern &hp) const
 

Static Private Member Functions

static bool barrel (uint32_t subDet)
 Return a bool indicating if a given subdetector is in the barrel. More...
 

Private Attributes

bool geomInitDone_
 Note if geometry info is already initialized. More...
 
RZrangeMap rangeRorZ_
 

Detailed Description

PFCheckHitPatter.

Author
Ian Tomalin, modified by Maxime Gouzevitch
Date
October 2009

Definition at line 34 of file PFCheckHitPattern.h.

Member Typedef Documentation

◆ DetInfo

typedef std::pair<uint32_t, uint32_t> PFCheckHitPattern::DetInfo
private

a pair<uint32, uint32> consisting of the numbers used by HitPattern to identify subdetector and layer number respectively.

Definition at line 62 of file PFCheckHitPattern.h.

◆ PFTrackHitFullInfo

Definition at line 41 of file PFCheckHitPattern.h.

◆ PFTrackHitInfo

typedef std::pair<unsigned int, unsigned int> PFCheckHitPattern::PFTrackHitInfo

Definition at line 40 of file PFCheckHitPattern.h.

◆ RZrangeMap

typedef std::map<DetInfo, std::pair<double, double> > PFCheckHitPattern::RZrangeMap
private

For a given subdetector & layer number, this stores the minimum and maximum r (or z) values if it is barrel (or endcap) respectively.

Definition at line 75 of file PFCheckHitPattern.h.

Constructor & Destructor Documentation

◆ PFCheckHitPattern()

PFCheckHitPattern::PFCheckHitPattern ( )
inline

Definition at line 36 of file PFCheckHitPattern.h.

36 : geomInitDone_(false) {}

◆ ~PFCheckHitPattern()

PFCheckHitPattern::~PFCheckHitPattern ( )
inline

Definition at line 38 of file PFCheckHitPattern.h.

38 {}

Member Function Documentation

◆ analyze()

pair< PFCheckHitPattern::PFTrackHitInfo, PFCheckHitPattern::PFTrackHitInfo > PFCheckHitPattern::analyze ( const TrackerTopology tkerTopo,
const TrackerGeometry tkerGeom,
const reco::TrackBaseRef  track,
const TransientVertex vert 
)

PFCheck if hit pattern of this track is consistent with it being produced at given vertex. Pair.first gives number of hits on track in front of vertex. Pair.second gives number of missing hits between vertex and innermost hit on track.

Definition at line 77 of file PFCheckHitPattern.cc.

81  {
82  // PFCheck if hit pattern of this track is consistent with it being produced
83  // at given vertex. Pair.first gives number of hits on track in front of vertex.
84  // Pair.second gives number of missing hits between vertex and innermost hit
85  // on track.
86 
87  // Initialise geometry info if not yet done.
88  if (!geomInitDone_)
89  this->init(tkerTopo, tkerGeom);
90 
91  // Get hit patterns of this track
92  const reco::HitPattern& hp = track.get()->hitPattern();
93 
94  // Count number of valid hits on track definately in front of the vertex,
95  // taking into account finite depth of each layer.
96  unsigned int nHitBefore = 0;
97  unsigned int nHitAfter = 0;
98 
99  for (int i = 0; i < hp.numberOfAllHits(HitPattern::TRACK_HITS); i++) {
100  uint32_t hit = hp.getHitPattern(HitPattern::TRACK_HITS, i);
101  if (hp.trackerHitFilter(hit) && hp.validHitFilter(hit)) {
102  uint32_t subDet = hp.getSubStructure(hit);
103  uint32_t layer = hp.getLayer(hit);
104  DetInfo detInfo(subDet, layer);
105  double maxRZ = rangeRorZ_[detInfo].second;
106 
107  if (this->barrel(subDet)) {
108  if (vert.position().perp() > maxRZ)
109  nHitBefore++;
110  else
111  nHitAfter++;
112  } else {
113  if (fabs(vert.position().z()) > maxRZ)
114  nHitBefore++;
115  else
116  nHitAfter++;
117  }
118  }
119  }
120 
121  // Count number of missing hits before the innermost hit on the track,
122  // taking into account finite depth of each layer.
123  unsigned int nMissHitAfter = 0;
124  unsigned int nMissHitBefore = 0;
125 
126  for (int i = 0; i < hp.numberOfAllHits(HitPattern::MISSING_INNER_HITS); i++) {
127  uint32_t hit = hp.getHitPattern(HitPattern::MISSING_INNER_HITS, i);
129  uint32_t subDet = reco::HitPattern::getSubStructure(hit);
130  uint32_t layer = reco::HitPattern::getLayer(hit);
131  DetInfo detInfo(subDet, layer);
132  double minRZ = rangeRorZ_[detInfo].first;
133 
134  // cout << "subDet = " << subDet << " layer = " << layer << " minRZ = " << minRZ << endl;
135 
136  if (this->barrel(subDet)) {
137  if (vert.position().perp() < minRZ)
138  nMissHitAfter++;
139  else
140  nMissHitBefore++;
141  } else {
142  if (fabs(vert.position().z()) < minRZ)
143  nMissHitAfter++;
144  else
145  nMissHitBefore++;
146  }
147  }
148  }
149 
150  PFTrackHitInfo trackToVertex(nHitBefore, nMissHitBefore);
151  PFTrackHitInfo trackFromVertex(nHitAfter, nMissHitAfter);
152 
153  return pair<PFTrackHitInfo, PFTrackHitInfo>(trackToVertex, trackFromVertex);
154 }

References Reference_intrackfit_cff::barrel, reco::HitPattern::getLayer(), reco::HitPattern::getSubStructure(), trackingPlots::hp, mps_fire::i, init, reco::HitPattern::MISSING_INNER_HITS, reco::HitPattern::missingHitFilter(), PV3DBase< T, PVType, FrameType >::perp(), TransientVertex::position(), HLT_FULL_cff::track, reco::HitPattern::TRACK_HITS, reco::HitPattern::trackerHitFilter(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by PFDisplacedVertexFinder::fitVertexFromSeed().

◆ barrel()

bool PFCheckHitPattern::barrel ( uint32_t  subDet)
staticprivate

Return a bool indicating if a given subdetector is in the barrel.

Definition at line 71 of file PFCheckHitPattern.cc.

71  {
72  // Determines if given sub-detector is in the barrel.
73  return (subDet == StripSubdetector::TIB || subDet == StripSubdetector::TOB ||
75 }

References PixelSubdetector::PixelBarrel, StripSubdetector::TIB, and StripSubdetector::TOB.

◆ init()

void PFCheckHitPattern::init ( const TrackerTopology tkerTopo,
const TrackerGeometry tkerGeom 
)
private

Create map indicating r/z values of all layers/disks.

Definition at line 20 of file PFCheckHitPattern.cc.

20  {
21  //
22  // Note min/max radius (z) of each barrel layer (endcap disk).
23  //
24 
25  geomInitDone_ = true;
26 
27  // Get Tracker geometry
28  const TrackingGeometry::DetContainer& dets = tkerGeom->dets();
29 
30  // Loop over all modules in the Tracker.
31  for (unsigned int i = 0; i < dets.size(); i++) {
32  // Get subdet and layer of this module
33  auto detId = dets[i]->geographicalId();
34  auto detInfo = DetInfo(detId.subdetId(), tkerTopo->layer(detId));
35  uint32_t subDet = detInfo.first;
36 
37  // Note r (or z) of module if barrel (or endcap).
38  double r_or_z;
39  if (this->barrel(subDet)) {
40  r_or_z = dets[i]->position().perp();
41  } else {
42  r_or_z = fabs(dets[i]->position().z());
43  }
44 
45  // Recover min/max r/z value of this layer/disk found so far.
46  double minRZ = 999.;
47  double maxRZ = 0.;
48  if (rangeRorZ_.find(detInfo) != rangeRorZ_.end()) {
49  minRZ = rangeRorZ_[detInfo].first;
50  maxRZ = rangeRorZ_[detInfo].second;
51  }
52 
53  // Update with those of this module if it exceeds them.
54  if (minRZ > r_or_z)
55  minRZ = r_or_z;
56  if (maxRZ < r_or_z)
57  maxRZ = r_or_z;
58  rangeRorZ_[detInfo] = pair<double, double>(minRZ, maxRZ);
59  }
60 
61 #if 0
62  //def DEBUG_CHECKHITPATTERN
63  RZrangeMap::const_iterator d;
64  for (d = rangeRorZ_.begin(); d != rangeRorZ_.end(); d++) {
65  DetInfo detInfo = d->first;
66  pair<double, double> rangeRZ = d->second;
67  }
68 #endif
69 }

References Reference_intrackfit_cff::barrel, ztail::d, TrackerGeometry::dets(), mps_fire::i, TrackerTopology::layer(), and position.

◆ print() [1/2]

void PFCheckHitPattern::print ( const reco::HitPattern::HitCategory  category,
const reco::HitPattern hp 
) const
private

Definition at line 166 of file PFCheckHitPattern.cc.

166  {
167  for (int i = 0; i < hp.numberOfAllHits(category); i++) {
168  uint32_t hit = hp.getHitPattern(category, i);
169  if (hp.trackerHitFilter(hit)) {
170  uint32_t subdet = hp.getSubStructure(hit);
171  uint32_t layer = hp.getLayer(hit);
172  cout << "hit " << i << " subdet=" << subdet << " layer=" << layer << " type " << hp.getHitType(hit) << endl;
173  }
174  }
175 }

References taus_updatedMVAIds_cff::category, gather_cfg::cout, trackingPlots::hp, and mps_fire::i.

◆ print() [2/2]

void PFCheckHitPattern::print ( const reco::TrackBaseRef  track) const

Print hit pattern on track.

Definition at line 156 of file PFCheckHitPattern.cc.

156  {
157  // Get hit patterns of this track
158  const reco::HitPattern& hp = track.get()->hitPattern();
159 
160  cout << "=== Hits on Track ===" << endl;
162  cout << "=== Hits before track ===" << endl;
164 }

References gather_cfg::cout, trackingPlots::hp, reco::HitPattern::MISSING_INNER_HITS, print(), HLT_FULL_cff::track, and reco::HitPattern::TRACK_HITS.

Member Data Documentation

◆ geomInitDone_

bool PFCheckHitPattern::geomInitDone_
private

Note if geometry info is already initialized.

Definition at line 71 of file PFCheckHitPattern.h.

◆ rangeRorZ_

RZrangeMap PFCheckHitPattern::rangeRorZ_
private

Definition at line 76 of file PFCheckHitPattern.h.

reco::HitPattern::getSubStructure
static uint32_t getSubStructure(uint16_t pattern)
Definition: HitPattern.h:695
taus_updatedMVAIds_cff.category
category
Definition: taus_updatedMVAIds_cff.py:31
mps_fire.i
i
Definition: mps_fire.py:428
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11779
PixelSubdetector::PixelBarrel
Definition: PixelSubdetector.h:11
PFCheckHitPattern::print
void print(const reco::TrackBaseRef track) const
Print hit pattern on track.
Definition: PFCheckHitPattern.cc:156
gather_cfg.cout
cout
Definition: gather_cfg.py:144
reco::HitPattern::trackerHitFilter
static bool trackerHitFilter(uint16_t pattern)
Definition: HitPattern.h:663
TransientVertex::position
GlobalPoint position() const
Definition: TransientVertex.h:169
TrackerTopology::layer
unsigned int layer(const DetId &id) const
Definition: TrackerTopology.cc:47
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
reco::HitPattern
Definition: HitPattern.h:147
trackingPlots.hp
hp
Definition: trackingPlots.py:1248
DDAxes::z
PFCheckHitPattern::init
void init(const TrackerTopology *, const TrackerGeometry *)
Create map indicating r/z values of all layers/disks.
Definition: PFCheckHitPattern.cc:20
StripSubdetector::TIB
static constexpr auto TIB
Definition: StripSubdetector.h:16
reco::HitPattern::missingHitFilter
static bool missingHitFilter(uint16_t pattern)
Definition: HitPattern.h:767
reco::HitPattern::getLayer
static uint32_t getLayer(uint16_t pattern)
Definition: HitPattern.h:702
PFCheckHitPattern::PFTrackHitInfo
std::pair< unsigned int, unsigned int > PFTrackHitInfo
Definition: PFCheckHitPattern.h:40
TrackingGeometry::DetContainer
std::vector< const GeomDet * > DetContainer
Definition: TrackingGeometry.h:29
position
static int position[264][3]
Definition: ReadPGInfo.cc:289
PFCheckHitPattern::DetInfo
std::pair< uint32_t, uint32_t > DetInfo
Definition: PFCheckHitPattern.h:62
TrackerGeometry::dets
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
Definition: TrackerGeometry.h:62
reco::HitPattern::TRACK_HITS
Definition: HitPattern.h:155
reco::HitPattern::MISSING_INNER_HITS
Definition: HitPattern.h:155
StripSubdetector::TOB
static constexpr auto TOB
Definition: StripSubdetector.h:18
ztail.d
d
Definition: ztail.py:151
PFCheckHitPattern::geomInitDone_
bool geomInitDone_
Note if geometry info is already initialized.
Definition: PFCheckHitPattern.h:71
PFCheckHitPattern::barrel
static bool barrel(uint32_t subDet)
Return a bool indicating if a given subdetector is in the barrel.
Definition: PFCheckHitPattern.cc:71
PV3DBase::perp
T perp() const
Definition: PV3DBase.h:69
PFCheckHitPattern::rangeRorZ_
RZrangeMap rangeRorZ_
Definition: PFCheckHitPattern.h:76
hit
Definition: SiStripHitEffFromCalibTree.cc:88