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 33 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 61 of file PFCheckHitPattern.h.

◆ PFTrackHitFullInfo

Definition at line 40 of file PFCheckHitPattern.h.

◆ PFTrackHitInfo

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

Definition at line 39 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 74 of file PFCheckHitPattern.h.

Constructor & Destructor Documentation

◆ PFCheckHitPattern()

PFCheckHitPattern::PFCheckHitPattern ( )
inline

Definition at line 35 of file PFCheckHitPattern.h.

35 : geomInitDone_(false) {}
bool geomInitDone_
Note if geometry info is already initialized.

◆ ~PFCheckHitPattern()

PFCheckHitPattern::~PFCheckHitPattern ( )
inline

Definition at line 37 of file PFCheckHitPattern.h.

37 {}

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.

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_2023v12_cff::track, reco::HitPattern::TRACK_HITS, reco::HitPattern::trackerHitFilter(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by PFDisplacedVertexFinder::fitVertexFromSeed().

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);
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 }
bool geomInitDone_
Note if geometry info is already initialized.
static uint32_t getLayer(uint16_t pattern)
Definition: HitPattern.h:721
T perp() const
Definition: PV3DBase.h:69
GlobalPoint position() const
T z() const
Definition: PV3DBase.h:61
static bool missingHitFilter(uint16_t pattern)
Definition: HitPattern.h:798
std::pair< unsigned int, unsigned int > PFTrackHitInfo
void init(const TrackerTopology *, const TrackerGeometry *)
Create map indicating r/z values of all layers/disks.
static uint32_t getSubStructure(uint16_t pattern)
Definition: HitPattern.h:713
static bool trackerHitFilter(uint16_t pattern)
Definition: HitPattern.h:679
std::pair< uint32_t, uint32_t > DetInfo
static bool barrel(uint32_t subDet)
Return a bool indicating if a given subdetector is in the barrel.

◆ 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.

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

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

◆ 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.

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

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 }
bool geomInitDone_
Note if geometry info is already initialized.
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
unsigned int layer(const DetId &id) const
std::vector< const GeomDet * > DetContainer
d
Definition: ztail.py:151
std::pair< uint32_t, uint32_t > DetInfo
static int position[264][3]
Definition: ReadPGInfo.cc:289
static bool barrel(uint32_t subDet)
Return a bool indicating if a given subdetector is in the barrel.

◆ print() [1/2]

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

Print hit pattern on track.

Definition at line 156 of file PFCheckHitPattern.cc.

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

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 }
void print(const reco::TrackBaseRef track) const
Print hit pattern on track.

◆ print() [2/2]

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

Definition at line 166 of file PFCheckHitPattern.cc.

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

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 }

Member Data Documentation

◆ geomInitDone_

bool PFCheckHitPattern::geomInitDone_
private

Note if geometry info is already initialized.

Definition at line 70 of file PFCheckHitPattern.h.

◆ rangeRorZ_

RZrangeMap PFCheckHitPattern::rangeRorZ_
private

Definition at line 75 of file PFCheckHitPattern.h.