CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Attributes
PixelHitMatcher Class Reference

#include <PixelHitMatcher.h>

Classes

struct  BarrelMeasurementEstimator
 
struct  ForwardMeasurementEstimator
 

Public Member Functions

std::vector< SeedWithInfooperator() (const std::vector< const TrajectorySeedCollection * > &seedsV, const GlobalPoint &xmeas, const GlobalPoint &vprim, float energy, int charge) const
 
 PixelHitMatcher (float phi1min, float phi1max, float phi2minB, float phi2maxB, float phi2minF, float phi2maxF, float z2maxB, float r2maxF, float rMaxI, bool useRecoVertex)
 
void set1stLayer (float dummyphi1min, float dummyphi1max)
 
void set1stLayerZRange (float zmin1, float zmax1)
 
void set2ndLayer (float dummyphi2minB, float dummyphi2maxB, float dummyphi2minF, float dummyphi2maxF)
 
void setES (MagneticField const &, TrackerGeometry const &trackerGeometry)
 

Private Attributes

BarrelMeasurementEstimator meas1stBLayer
 
ForwardMeasurementEstimator meas1stFLayer
 
BarrelMeasurementEstimator meas2ndBLayer
 
ForwardMeasurementEstimator meas2ndFLayer
 
std::unique_ptr< PropagatorWithMaterialprop1stLayer = nullptr
 
std::unique_ptr< PropagatorWithMaterialprop2ndLayer = nullptr
 
const MagneticFieldtheMagField
 
const TrackerGeometrytheTrackerGeometry
 
const bool useRecoVertex_
 

Detailed Description

Description: Class to match an ECAL cluster to the pixel hits. Two compatible hits in the pixel layers are required.

Implementation: future redesign

Definition at line 44 of file PixelHitMatcher.h.

Constructor & Destructor Documentation

◆ PixelHitMatcher()

PixelHitMatcher::PixelHitMatcher ( float  phi1min,
float  phi1max,
float  phi2minB,
float  phi2maxB,
float  phi2minF,
float  phi2maxF,
float  z2maxB,
float  r2maxF,
float  rMaxI,
bool  useRecoVertex 
)

Definition at line 63 of file PixelHitMatcher.cc.

73  : //zmin1 and zmax1 are dummy at this moment, set from beamspot later
74  meas1stBLayer{phi1min, phi1max, 0., 0.},
75  meas2ndBLayer{phi2minB, phi2maxB, -z2maxB, z2maxB},
76  meas1stFLayer{phi1min, phi1max, 0., 0., -rMaxI, rMaxI},
77  meas2ndFLayer{phi2minF, phi2maxF, -r2maxF, r2maxF, -rMaxI, rMaxI},

Member Function Documentation

◆ operator()()

std::vector< SeedWithInfo > PixelHitMatcher::operator() ( const std::vector< const TrajectorySeedCollection * > &  seedsV,
const GlobalPoint xmeas,
const GlobalPoint vprim,
float  energy,
int  charge 
) const

Definition at line 109 of file PixelHitMatcher.cc.

113  {
114  auto xmeas_r = xmeas.perp();
115 
116  const float phicut = std::cos(2.5);
117 
118  auto fts = trackingTools::ftsFromVertexToPoint(*theMagField, xmeas, vprim, energy, charge);
120  TrajectoryStateOnSurface tsos(fts, *bpb(fts.position(), fts.momentum()));
121 
122  std::vector<SeedWithInfo> result;
123  unsigned int allSeedsSize = 0;
124  for (auto const sc : seedsV)
125  allSeedsSize += sc->size();
126 
128 
129  auto ndets = theTrackerGeometry->dets().size();
130 
131  int iTsos[ndets];
132  for (auto &i : iTsos)
133  i = -1;
134  std::vector<TrajectoryStateOnSurface> vTsos;
135  vTsos.reserve(allSeedsSize);
136 
137  std::vector<GlobalPoint> hitGpMap;
138  for (const auto seeds : seedsV) {
139  for (const auto &seed : *seeds) {
140  hitGpMap.clear();
141  if (seed.nHits() > 9) {
142  edm::LogWarning("GsfElectronAlgo|UnexpectedSeed") << "We cannot deal with seeds having more than 9 hits.";
143  continue;
144  }
145 
146  auto const &hits = seed.recHits();
147  // cache the global points
148 
149  for (auto const &hit : hits) {
150  hitGpMap.emplace_back(hit.globalPosition());
151  }
152 
153  //iterate on the hits
154  auto he = hits.end() - 1;
155  for (auto it1 = hits.begin(); it1 < he; ++it1) {
156  if (!it1->isValid())
157  continue;
158  auto idx1 = std::distance(hits.begin(), it1);
159  const DetId id1 = it1->geographicalId();
160  const GeomDet *geomdet1 = it1->det();
161 
162  auto ix1 = geomdet1->gdetIndex();
163 
164  /* VI: this generates regression (other cut is just in phi). in my opinion it is safe and makes sense
165  auto away = geomdet1->position().basicVector().dot(xmeas.basicVector()) <0;
166  if (away) continue;
167  */
168 
169  const GlobalPoint &hit1Pos = hitGpMap[idx1];
170  auto dt = hit1Pos.x() * xmeas.x() + hit1Pos.y() * xmeas.y();
171  if (dt < 0)
172  continue;
173  if (dt < phicut * (xmeas_r * hit1Pos.perp()))
174  continue;
175 
176  if (iTsos[ix1] < 0) {
177  iTsos[ix1] = vTsos.size();
178  vTsos.push_back(prop1stLayer->propagate(tsos, geomdet1->surface()));
179  }
180  auto tsos1 = &vTsos[iTsos[ix1]];
181 
182  if (!tsos1->isValid())
183  continue;
184  bool est = id1.subdetId() % 2 ? meas1stBLayer(vprim, *tsos1, hit1Pos, charge)
185  : meas1stFLayer(vprim, *tsos1, hit1Pos, charge);
186  if (!est)
187  continue;
188  EleRelPointPair pp1(hit1Pos, tsos1->globalParameters().position(), vprim);
189  const math::XYZPoint relHit1Pos(hit1Pos - vprim), relTSOSPos(tsos1->globalParameters().position() - vprim);
190  const int subDet1 = id1.subdetId();
191  const float dRz1 = (id1.subdetId() % 2 ? pp1.dZ() : pp1.dPerp());
192  const float dPhi1 = pp1.dPhi();
193  // setup our vertex
194  double zVertex;
195  if (!useRecoVertex_) {
196  // we don't know the z vertex position, get it from linear extrapolation
197  // compute the z vertex from the cluster point and the found pixel hit
198  const double pxHit1z = hit1Pos.z();
199  const double pxHit1x = hit1Pos.x();
200  const double pxHit1y = hit1Pos.y();
201  const double r1diff =
202  std::sqrt((pxHit1x - vprim.x()) * (pxHit1x - vprim.x()) + (pxHit1y - vprim.y()) * (pxHit1y - vprim.y()));
203  const double r2diff =
204  std::sqrt((xmeas.x() - pxHit1x) * (xmeas.x() - pxHit1x) + (xmeas.y() - pxHit1y) * (xmeas.y() - pxHit1y));
205  zVertex = pxHit1z - r1diff * (xmeas.z() - pxHit1z) / r2diff;
206  } else {
207  // here use rather the reco vertex z position
208  zVertex = vprim.z();
209  }
210  GlobalPoint vertex(vprim.x(), vprim.y(), zVertex);
212  // now find the matching hit
213  for (auto it2 = it1 + 1; it2 != hits.end(); ++it2) {
214  if (!it2->isValid())
215  continue;
216  auto idx2 = std::distance(hits.begin(), it2);
217  const DetId id2 = it2->geographicalId();
218  const GeomDet *geomdet2 = it2->det();
219  const auto det_key = std::make_pair(geomdet2->gdetIndex(), hit1Pos);
220  const TrajectoryStateOnSurface *tsos2;
221  auto tsos2_itr = mapTsos2Fast.find(det_key);
222  if (tsos2_itr != mapTsos2Fast.end()) {
223  tsos2 = &(tsos2_itr->second);
224  } else {
225  auto empl_result = mapTsos2Fast.emplace(det_key, prop2ndLayer->propagate(fts2, geomdet2->surface()));
226  tsos2 = &(empl_result.first->second);
227  }
228  if (!tsos2->isValid())
229  continue;
230  const GlobalPoint &hit2Pos = hitGpMap[idx2];
231  bool est2 = id2.subdetId() % 2 ? meas2ndBLayer(vertex, *tsos2, hit2Pos, charge)
232  : meas2ndFLayer(vertex, *tsos2, hit2Pos, charge);
233  if (est2) {
234  EleRelPointPair pp2(hit2Pos, tsos2->globalParameters().position(), vertex);
235  const int subDet2 = id2.subdetId();
236  const float dRz2 = (subDet2 % 2 == 1) ? pp2.dZ() : pp2.dPerp();
237  const float dPhi2 = pp2.dPhi();
238  const unsigned char hitsMask = (1 << idx1) | (1 << idx2);
239  result.push_back({seed, hitsMask, subDet2, dRz2, dPhi2, subDet1, dRz1, dPhi1});
240  }
241  } // inner loop on hits
242  } // outer loop on hits
243  } // loop on seeds
244  } //loop on vector of seeds
245 
246  return result;
247 }

References ALCARECOTkAlJpsiMuMu_cff::charge, funct::cos(), TrackerGeometry::dets(), HLT_FULL_cff::distance, dt, HCALHighEnergyHPDFilter_cfi::energy, trackingTools::ftsFromVertexToPoint(), GeomDet::gdetIndex(), hcalSimParameters_cfi::he, hfClusterShapes_cfi::hits, mps_fire::i, globals_cff::id1, globals_cff::id2, meas1stBLayer, meas1stFLayer, meas2ndBLayer, meas2ndFLayer, PV3DBase< T, PVType, FrameType >::perp(), prop1stLayer, prop2ndLayer, mps_fire::result, fileCollector::seed, DetachedQuadStep_cff::seeds, mathSSE::sqrt(), GeomDet::surface(), theMagField, theTrackerGeometry, useRecoVertex_, bphysicsOniaDQM_cfi::vertex, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), and HLT_FULL_cff::zVertex.

◆ set1stLayer()

void PixelHitMatcher::set1stLayer ( float  dummyphi1min,
float  dummyphi1max 
)

◆ set1stLayerZRange()

void PixelHitMatcher::set1stLayerZRange ( float  zmin1,
float  zmax1 
)

◆ set2ndLayer()

void PixelHitMatcher::set2ndLayer ( float  dummyphi2minB,
float  dummyphi2maxB,
float  dummyphi2minF,
float  dummyphi2maxF 
)

◆ setES()

void PixelHitMatcher::setES ( MagneticField const &  magField,
TrackerGeometry const &  trackerGeometry 
)

Definition at line 101 of file PixelHitMatcher.cc.

101  {
102  theMagField = &magField;
103  theTrackerGeometry = &trackerGeometry;
104  constexpr float mass = .000511; // electron propagation
105  prop1stLayer = std::make_unique<PropagatorWithMaterial>(oppositeToMomentum, mass, theMagField);
106  prop2ndLayer = std::make_unique<PropagatorWithMaterial>(alongMomentum, mass, theMagField);
107 }

References alongMomentum, EgHLTOffHistBins_cfi::mass, oppositeToMomentum, prop1stLayer, prop2ndLayer, theMagField, and theTrackerGeometry.

Referenced by ElectronSeedGenerator::setupES().

Member Data Documentation

◆ meas1stBLayer

BarrelMeasurementEstimator PixelHitMatcher::meas1stBLayer
private

Definition at line 90 of file PixelHitMatcher.h.

Referenced by operator()(), set1stLayer(), and set1stLayerZRange().

◆ meas1stFLayer

ForwardMeasurementEstimator PixelHitMatcher::meas1stFLayer
private

Definition at line 92 of file PixelHitMatcher.h.

Referenced by operator()(), set1stLayer(), and set1stLayerZRange().

◆ meas2ndBLayer

BarrelMeasurementEstimator PixelHitMatcher::meas2ndBLayer
private

Definition at line 91 of file PixelHitMatcher.h.

Referenced by operator()(), and set2ndLayer().

◆ meas2ndFLayer

ForwardMeasurementEstimator PixelHitMatcher::meas2ndFLayer
private

Definition at line 93 of file PixelHitMatcher.h.

Referenced by operator()(), and set2ndLayer().

◆ prop1stLayer

std::unique_ptr<PropagatorWithMaterial> PixelHitMatcher::prop1stLayer = nullptr
private

Definition at line 94 of file PixelHitMatcher.h.

Referenced by operator()(), and setES().

◆ prop2ndLayer

std::unique_ptr<PropagatorWithMaterial> PixelHitMatcher::prop2ndLayer = nullptr
private

Definition at line 95 of file PixelHitMatcher.h.

Referenced by operator()(), and setES().

◆ theMagField

const MagneticField* PixelHitMatcher::theMagField
private

Definition at line 96 of file PixelHitMatcher.h.

Referenced by operator()(), and setES().

◆ theTrackerGeometry

const TrackerGeometry* PixelHitMatcher::theTrackerGeometry
private

Definition at line 97 of file PixelHitMatcher.h.

Referenced by operator()(), and setES().

◆ useRecoVertex_

const bool PixelHitMatcher::useRecoVertex_
private

Definition at line 98 of file PixelHitMatcher.h.

Referenced by operator()().

PixelHitMatcher::useRecoVertex_
const bool useRecoVertex_
Definition: PixelHitMatcher.h:98
mps_fire.i
i
Definition: mps_fire.py:428
GeomDet
Definition: GeomDet.h:27
HLT_FULL_cff.useRecoVertex
useRecoVertex
Definition: HLT_FULL_cff.py:15277
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
PixelHitMatcher::theMagField
const MagneticField * theMagField
Definition: PixelHitMatcher.h:96
globals_cff.id1
id1
Definition: globals_cff.py:33
oppositeToMomentum
Definition: PropagationDirection.h:4
PixelHitMatcher::ForwardMeasurementEstimator::thePhiMax
float thePhiMax
Definition: PixelHitMatcher.h:83
PixelHitMatcher::meas1stFLayer
ForwardMeasurementEstimator meas1stFLayer
Definition: PixelHitMatcher.h:92
PixelHitMatcher::BarrelMeasurementEstimator::theZMin
float theZMin
Definition: PixelHitMatcher.h:75
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
HLT_FULL_cff.zVertex
zVertex
Definition: HLT_FULL_cff.py:113803
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
dt
float dt
Definition: AMPTWrapper.h:136
fileCollector.seed
seed
Definition: fileCollector.py:127
DetId
Definition: DetId.h:17
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
trackingTools::ftsFromVertexToPoint
FreeTrajectoryState ftsFromVertexToPoint(MagneticField const &magField, GlobalPoint const &xmeas, GlobalPoint const &xvert, float momentum, TrackCharge charge)
Definition: ftsFromVertexToPoint.cc:17
funct::cos
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
PixelHitMatcher::ForwardMeasurementEstimator::theRMin
float theRMin
Definition: PixelHitMatcher.h:84
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
HCALHighEnergyHPDFilter_cfi.energy
energy
Definition: HCALHighEnergyHPDFilter_cfi.py:5
Point3DBase< float, GlobalTag >
PixelHitMatcher::prop1stLayer
std::unique_ptr< PropagatorWithMaterial > prop1stLayer
Definition: PixelHitMatcher.h:94
PixelHitMatcher::BarrelMeasurementEstimator::theZMax
float theZMax
Definition: PixelHitMatcher.h:76
ALCARECOTkAlJpsiMuMu_cff.charge
charge
Definition: ALCARECOTkAlJpsiMuMu_cff.py:47
PixelHitMatcher::BarrelMeasurementEstimator::thePhiMax
float thePhiMax
Definition: PixelHitMatcher.h:74
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
math::XYZPoint
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
IntGlobalPointPairUnorderedMap
std::unordered_map< std::pair< int, GlobalPoint >, T, HashIntGlobalPointPair > IntGlobalPointPairUnorderedMap
Definition: utils.h:20
PixelHitMatcher::ForwardMeasurementEstimator::thePhiMin
float thePhiMin
Definition: PixelHitMatcher.h:82
TrackerGeometry::dets
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
Definition: TrackerGeometry.h:62
EleRelPointPair
Definition: ElectronUtilities.h:43
PixelHitMatcher::meas2ndFLayer
ForwardMeasurementEstimator meas2ndFLayer
Definition: PixelHitMatcher.h:93
PixelHitMatcher::ForwardMeasurementEstimator::theRMax
float theRMax
Definition: PixelHitMatcher.h:85
GeomDet::gdetIndex
int gdetIndex() const
Definition: GeomDet.h:87
DetachedQuadStep_cff.seeds
seeds
Definition: DetachedQuadStep_cff.py:195
hcalSimParameters_cfi.he
he
Definition: hcalSimParameters_cfi.py:79
PerpendicularBoundPlaneBuilder
Definition: PerpendicularBoundPlaneBuilder.h:11
EgHLTOffHistBins_cfi.mass
mass
Definition: EgHLTOffHistBins_cfi.py:34
PixelHitMatcher::prop2ndLayer
std::unique_ptr< PropagatorWithMaterial > prop2ndLayer
Definition: PixelHitMatcher.h:95
PixelHitMatcher::theTrackerGeometry
const TrackerGeometry * theTrackerGeometry
Definition: PixelHitMatcher.h:97
mps_fire.result
result
Definition: mps_fire.py:311
PixelHitMatcher::BarrelMeasurementEstimator::thePhiMin
float thePhiMin
Definition: PixelHitMatcher.h:73
globals_cff.id2
id2
Definition: globals_cff.py:34
HLT_FULL_cff.distance
distance
Definition: HLT_FULL_cff.py:7746
PixelHitMatcher::meas2ndBLayer
BarrelMeasurementEstimator meas2ndBLayer
Definition: PixelHitMatcher.h:91
PixelHitMatcher::meas1stBLayer
BarrelMeasurementEstimator meas1stBLayer
Definition: PixelHitMatcher.h:90
PV3DBase::perp
T perp() const
Definition: PV3DBase.h:69
alongMomentum
Definition: PropagationDirection.h:4
hit
Definition: SiStripHitEffFromCalibTree.cc:88