CMS 3D CMS Logo

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

#include <ValidHitPairFilter.h>

Inheritance diagram for ValidHitPairFilter:
PixelTrackFilterBase

Public Member Functions

bool operator() (const reco::Track *track, const std::vector< const TrackingRecHit * > &recHits) const override
 
 ValidHitPairFilter (const edm::EventSetup &es)
 
 ~ValidHitPairFilter () override
 
- Public Member Functions inherited from PixelTrackFilterBase
virtual bool operator() (const reco::Track *, const Hits &) const =0
 
virtual ~PixelTrackFilterBase ()
 

Private Member Functions

std::vector< const GeomDet * > getCloseDets (int il, float rz, const std::vector< float > &rzB, float ph, const std::vector< float > &phB) const
 
int getLayer (const TrackingRecHit &recHit) const
 
std::vector< int > getMissingLayers (int a, int b) const
 
FreeTrajectoryState getTrajectory (const reco::Track &track) const
 

Private Attributes

const std::vector< DetLayer * > detLayers
 
std::vector< float > phBounds [7]
 
std::vector< float > rzBounds [7]
 
const GeometricSearchTrackertheGSTracker
 
const MagneticFieldtheMagneticField
 
const PropagatorthePropagator
 
const TrackerGeometrytheTracker
 
const TrackerTopologytTopo
 

Additional Inherited Members

- Public Types inherited from PixelTrackFilterBase
typedef std::vector< const TrackingRecHit * > Hits
 

Detailed Description

Definition at line 20 of file ValidHitPairFilter.h.

Constructor & Destructor Documentation

ValidHitPairFilter::ValidHitPairFilter ( const edm::EventSetup es)

Definition at line 51 of file ValidHitPairFilter.cc.

References begin, BPix3, end, edm::EventSetup::get(), mps_fire::i, LogTrace, sysUtil::pid, edm::ESHandle< T >::product(), jetUpdater_cfi::sort, and spin().

51  {
52  //Retrieve tracker topology from geometry
54  es.get<TrackerTopologyRcd>().get(tTopoHand);
55  tTopo = tTopoHand.product();
56 
57 
58  // Get tracker
59  edm::ESHandle<TrackerGeometry> trackerHandle;
60  es.get<TrackerDigiGeometryRecord>().get(trackerHandle);
61  theTracker = trackerHandle.product();
62 
63  // Get geometric search tracker
64  edm::ESHandle<GeometricSearchTracker> geometricSearchTrackerHandle;
65  es.get<TrackerRecoGeometryRecord>().get(geometricSearchTrackerHandle);
66  theGSTracker = geometricSearchTrackerHandle.product();
67 
68  // Get magnetic field
69  edm::ESHandle<MagneticField> magneticFieldHandle;
70  es.get<IdealMagneticFieldRecord>().get(magneticFieldHandle);
71  theMagneticField = magneticFieldHandle.product();
72 
73  // Get propagator
74  edm::ESHandle<Propagator> thePropagatorHandle;
75  es.get<TrackingComponentsRecord>().get("AnalyticalPropagator",
76  thePropagatorHandle);
77  thePropagator = thePropagatorHandle.product();
78 
79  // Bounds, hardwired FIXME
80  rzBounds[0].resize(8); phBounds[0].resize(20);
81  rzBounds[1].resize(8); phBounds[1].resize(32);
82  rzBounds[2].resize(8); phBounds[2].resize(44);
83 
84  rzBounds[3].resize(7); phBounds[3].resize(24);
85  rzBounds[4].resize(7); phBounds[4].resize(24);
86  rzBounds[5].resize(7); phBounds[5].resize(24);
87  rzBounds[6].resize(7); phBounds[6].resize(24);
88 
89  LogTrace("MinBiasTracking")
90  << " [ValidHitPairFilter] initializing pixel barrel";
91 
92  for(TrackerGeometry::DetContainer::const_iterator
93  det = theTracker->detsPXB().begin();
94  det!= theTracker->detsPXB().end(); det++)
95  {
96 
97  DetId pid=(*det)->geographicalId();
98  int il = tTopo->pxbLayer(pid) - 1;
99  int irz = tTopo->pxbModule(pid) - 1;
100  int iph = tTopo->pxbLadder(pid) - 1;
101 
102  rzBounds[il][irz] = (*det)->position().z();
103  phBounds[il][iph] = spin((*det)->position().phi());
104  }
105 
106  LogTrace("MinBiasTracking")
107  << " [ValidHitPairFilter] initializing pixel endcap";
108 
109  for(TrackerGeometry::DetContainer::const_iterator
110  det = theTracker->detsPXF().begin();
111  det!= theTracker->detsPXF().end(); det++)
112  {
113 
114 
115  DetId pid=(*det)->geographicalId();
116  int il = BPix3 + ((tTopo->pxfSide(pid) -1) << 1) + (tTopo->pxfDisk(pid) -1);
117  int irz = ((tTopo->pxfModule(pid)-1) << 1) + (tTopo->pxfPanel(pid)-1);
118  int iph = (tTopo->pxfBlade(pid) -1);
119 
120  rzBounds[il][irz] = (*det)->position().perp();
121  phBounds[il][iph] = spin((*det)->position().phi());
122  }
123 
124  for(int i = 0; i < 7; i++)
125  {
126  sort(rzBounds[i].begin(), rzBounds[i].end());
127  sort(phBounds[i].begin(), phBounds[i].end());
128  }
129 }
const Propagator * thePropagator
unsigned int pxfDisk(const DetId &id) const
unsigned int pxbLadder(const DetId &id) const
const TrackerTopology * tTopo
unsigned int pxbModule(const DetId &id) const
const TrackerGeometry * theTracker
const DetContainer & detsPXB() const
std::vector< float > phBounds[7]
const GeometricSearchTracker * theGSTracker
#define end
Definition: vmac.h:39
#define LogTrace(id)
unsigned int pxfModule(const DetId &id) const
unsigned int pxbLayer(const DetId &id) const
Definition: DetId.h:18
#define begin
Definition: vmac.h:32
std::vector< float > rzBounds[7]
T get() const
Definition: EventSetup.h:71
const DetContainer & detsPXF() const
unsigned int pxfSide(const DetId &id) const
T const * product() const
Definition: ESHandle.h:86
const MagneticField * theMagneticField
unsigned int pxfPanel(const DetId &id) const
unsigned int pxfBlade(const DetId &id) const
float spin(float ph)
ValidHitPairFilter::~ValidHitPairFilter ( )
override

Definition at line 132 of file ValidHitPairFilter.cc.

133 {
134 }

Member Function Documentation

vector< const GeomDet * > ValidHitPairFilter::getCloseDets ( int  il,
float  rz,
const std::vector< float > &  rzB,
float  ph,
const std::vector< float > &  phB 
) const
private

Definition at line 208 of file ValidHitPairFilter.cc.

References BPix3, PVValHelper::ladder, LogTrace, pfDeepBoostedJetPreprocessParams_cfi::lower_bound, and Utilities::operator.

Referenced by getTrajectory().

211 {
212  vector<int> rzVec, phVec;
213 
214  // Radius or z
215  vector<float>::const_iterator irz = lower_bound(rzB.begin(),rzB.end(), rz);
216  if(irz > rzB.begin()) rzVec.push_back(irz - rzB.begin() - 1);
217  if(irz < rzB.end() ) rzVec.push_back(irz - rzB.begin() );
218 
219  // Phi, circular
220  vector<float>::const_iterator iph = lower_bound(phB.begin(),phB.end(), ph);
221  if(iph > phB.begin()) phVec.push_back(iph - phB.begin() - 1);
222  else phVec.push_back(phB.end() - phB.begin() - 1);
223  if(iph < phB.end() ) phVec.push_back(iph - phB.begin() );
224  else phVec.push_back(phB.begin() - phB.begin() );
225 
226  // Detectors
227  vector<const GeomDet *> dets;
228 
229  for(vector<int>::const_iterator irz = rzVec.begin(); irz!= rzVec.end(); irz++)
230  for(vector<int>::const_iterator iph = phVec.begin(); iph!= phVec.end(); iph++)
231  {
232  if(il+1 <= BPix3)
233  {
234  int layer = il + 1;
235  int ladder = *iph + 1;
236  int module = *irz + 1;
237 
238  LogTrace("MinBiasTracking")
239  << " [ValidHitPairFilter] third ("<<layer<< "|"<<ladder<<"|"<<module<<")";
240 
241  DetId id=tTopo->pxbDetId(layer,ladder,module);
242  dets.push_back(theTracker->idToDet(id));
243  }
244  else
245  {
246  int side = (il - BPix3) / 2 +1;
247  int disk = (il - BPix3) % 2 + 1;
248  int blade = *iph + 1;
249  int panel = (*irz) % 2 + 1;
250  int module = (*irz) / 2 + 1;
251 
252  LogTrace("MinBiasTracking")
253  << " [ValidHitPairFilter] third ("<<side<<"|"<<disk<<"|"<<blade<<"|"<<panel<<"|"<<module<<")";
254 
255 
256  DetId id=tTopo->pxfDetId(side,disk,blade,panel,module);
257  dets.push_back(theTracker->idToDet(id));
258 
259  }
260  }
261 
262  return dets;
263 }
const TrackerTopology * tTopo
DetId pxfDetId(uint32_t side, uint32_t disk, uint32_t blade, uint32_t panel, uint32_t module) const
const TrackerGeometry * theTracker
#define LogTrace(id)
Definition: DetId.h:18
const TrackerGeomDet * idToDet(DetId) const override
DetId pxbDetId(uint32_t layer, uint32_t ladder, uint32_t module) const
Definition: vlib.h:208
int ValidHitPairFilter::getLayer ( const TrackingRecHit recHit) const
private

Definition at line 137 of file ValidHitPairFilter.cc.

References BPix3, TrackingRecHit::geographicalId(), triggerObjects_cff::id, createfilelist::int, and PixelSubdetector::PixelBarrel.

138 {
139  DetId id(recHit.geographicalId());
140 
141  if(id.subdetId() == int(PixelSubdetector::PixelBarrel))
142  {
143 
144  return tTopo->pxbLayer(id);
145  }
146  else
147  {
148 
149  return BPix3 + ((tTopo->pxfSide(id)-1) << 1) + tTopo->pxfDisk(id);
150  }
151 }
unsigned int pxfDisk(const DetId &id) const
const TrackerTopology * tTopo
unsigned int pxbLayer(const DetId &id) const
Definition: DetId.h:18
unsigned int pxfSide(const DetId &id) const
DetId geographicalId() const
vector< int > ValidHitPairFilter::getMissingLayers ( int  a,
int  b 
) const
private

Definition at line 154 of file ValidHitPairFilter.cc.

References BPix1, BPix2, BPix3, EnergyCorrector::c, FPix1_neg, FPix1_pos, FPix2_neg, FPix2_pos, getTrajectory(), and checklumidiff::l.

155 {
156  vector<int> l;
157  pair<int,int> c(a,b);
158 
159  if(c == pair<int,int>(BPix1,BPix2)) { l.push_back(int(BPix3));
160  l.push_back(int(FPix1_pos));
161  l.push_back(int(FPix1_neg)); return l; }
162  if(c == pair<int,int>(BPix1,BPix3)) { l.push_back(int(BPix2)); return l; }
163  if(c == pair<int,int>(BPix2,BPix3)) { l.push_back(int(BPix1)); return l; }
164  if(c == pair<int,int>(BPix1,FPix1_pos)) { l.push_back(int(BPix2));
165  l.push_back(int(FPix2_pos)); return l; }
166  if(c == pair<int,int>(BPix1,FPix1_neg)) { l.push_back(int(BPix2));
167  l.push_back(int(FPix2_neg)); return l; }
168  if(c == pair<int,int>(BPix1,FPix2_pos)) { l.push_back(int(BPix2));
169  l.push_back(int(FPix1_pos)); return l; }
170  if(c == pair<int,int>(BPix1,FPix2_neg)) { l.push_back(int(BPix2));
171  l.push_back(int(FPix1_neg)); return l; }
172  if(c == pair<int,int>(BPix2,FPix1_pos)) { l.push_back(int(BPix1));
173  l.push_back(int(FPix2_pos)); return l; }
174  if(c == pair<int,int>(BPix2,FPix1_neg)) { l.push_back(int(BPix1));
175  l.push_back(int(FPix2_neg)); return l; }
176  if(c == pair<int,int>(BPix2,FPix2_pos)) { l.push_back(int(BPix1));
177  l.push_back(int(FPix1_pos)); return l; }
178  if(c == pair<int,int>(BPix2,FPix2_neg)) { l.push_back(int(BPix1));
179  l.push_back(int(FPix1_neg)); return l; }
180  if(c == pair<int,int>(FPix1_pos,FPix2_pos)) { l.push_back(int(BPix1)); return l; }
181  if(c == pair<int,int>(FPix1_neg,FPix2_neg)) { l.push_back(int(BPix1)); return l; }
182 
183  return l;
184 }
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
FreeTrajectoryState ValidHitPairFilter::getTrajectory ( const reco::Track track) const
private

Definition at line 188 of file ValidHitPairFilter.cc.

References reco::TrackBase::charge(), getCloseDets(), reco::TrackBase::momentum(), position, and reco::TrackBase::vertex().

Referenced by getMissingLayers().

189 {
190  GlobalPoint position(track.vertex().x(),
191  track.vertex().y(),
192  track.vertex().z());
193 
194  GlobalVector momentum(track.momentum().x(),
195  track.momentum().y(),
196  track.momentum().z());
197 
198  GlobalTrajectoryParameters gtp(position, momentum,
199  track.charge(), theMagneticField);
200 
201  FreeTrajectoryState fts(gtp);
202 
203  return fts;
204 }
const Vector & momentum() const
track momentum vector
Definition: TrackBase.h:714
const Point & vertex() const
reference point on the track. This method is DEPRECATED, please use referencePoint() instead ...
Definition: TrackBase.h:738
static int position[264][3]
Definition: ReadPGInfo.cc:509
int charge() const
track electric charge
Definition: TrackBase.h:606
const MagneticField * theMagneticField
bool ValidHitPairFilter::operator() ( const reco::Track track,
const std::vector< const TrackingRecHit * > &  recHits 
) const
override

Definition at line 267 of file ValidHitPairFilter.cc.

References BPix3, HitInfo::getInfo(), TrajectoryStateOnSurface::globalPosition(), TrajectoryStateOnSurface::isValid(), TrajectoryStateOnSurface::localPosition(), LogTrace, PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::phi(), SimDataFormats::CaloAnalysis::sc, spin(), ForwardDetLayer::surface(), BarrelDetLayer::surface(), and PV3DBase< T, PVType, FrameType >::z().

268 {
269  bool hasGap = true;
270 
271  if(recHits.size() == 2)
272  {
273  LogTrace("MinBiasTracking")
274  << " [ValidHitPairFilter] pair" << HitInfo::getInfo(*(recHits[0]),tTopo)
275  << HitInfo::getInfo(*(recHits[1]),tTopo);
276 
277  float tol = 0.1; // cm
278  float sc = -1.; // scale, allow 'tol' of edge to count as outside
279  LocalError le(tol*tol, tol*tol, tol*tol);
280 
281  // determine missing layers
282  vector<int> missingLayers = getMissingLayers(getLayer(*(recHits[0])),
283  getLayer(*(recHits[1])));
284 
285  for(vector<int>::const_iterator missingLayer = missingLayers.begin();
286  missingLayer!= missingLayers.end();
287  missingLayer++)
288  {
289  int il = *missingLayer - 1;
290 
291  // propagate to missing layer
292  FreeTrajectoryState fts = getTrajectory(*track);
294  float rz = 0.;
295 
296  if(il < BPix3)
297  { // barrel
298  const BarrelDetLayer * layer =
300 
301  tsos = thePropagator->propagate(fts, layer->surface());
302 
303  if(tsos.isValid())
304  rz = tsos.globalPosition().z();
305  }
306  else
307  { // endcap
308  const ForwardDetLayer * layer;
309  if(il - BPix3 < 2)
310  layer = (theGSTracker->negPixelForwardLayers())[il - BPix3 ];
311  else
312  layer = (theGSTracker->posPixelForwardLayers())[il - BPix3 - 2];
313 
314  tsos = thePropagator->propagate(fts, layer->surface());
315 
316  if(tsos.isValid())
317  rz = tsos.globalPosition().perp();
318  }
319 
320  if(tsos.isValid())
321  {
322  float phi = spin(tsos.globalPosition().phi());
323 
324  // check close dets
325  vector<const GeomDet *> closeDets =
326  getCloseDets(il, rz ,rzBounds[il], phi,phBounds[il]);
327 
328  for(vector<const GeomDet *>::const_iterator det = closeDets.begin();
329  det!= closeDets.end();
330  det++)
331  {
333  thePropagator->propagate(fts, (*det)->surface());
334 
335  if(tsos.isValid())
336  if((*det)->surface().bounds().inside(tsos.localPosition(), le, sc))
337  hasGap = false;
338  }
339  }
340  }
341  }
342 
343 
344  if(hasGap)
345  LogTrace("MinBiasTracking") << " [ValidHitPairFilter] has gap --> good";
346  else
347  LogTrace("MinBiasTracking") << " [ValidHitPairFilter] no gap --> rejected";
348 
349  return hasGap;
350 }
T perp() const
Definition: PV3DBase.h:72
int getLayer(const TrackingRecHit &recHit) const
const Propagator * thePropagator
std::vector< ForwardDetLayer const * > const & posPixelForwardLayers() const
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
const TrackerTopology * tTopo
GlobalPoint globalPosition() const
std::vector< ForwardDetLayer const * > const & negPixelForwardLayers() const
T z() const
Definition: PV3DBase.h:64
std::vector< float > phBounds[7]
const GeometricSearchTracker * theGSTracker
std::vector< int > getMissingLayers(int a, int b) const
std::vector< BarrelDetLayer const * > const & pixelBarrelLayers() const
#define LogTrace(id)
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:53
const BoundSurface & surface() const final
The surface of the GeometricSearchDet.
std::vector< float > rzBounds[7]
static std::string getInfo(const DetId &id, const TrackerTopology *tTopo)
Definition: HitInfo.cc:23
const BoundSurface & surface() const final
GeometricSearchDet interface.
float spin(float ph)
FreeTrajectoryState getTrajectory(const reco::Track &track) const
std::vector< const GeomDet * > getCloseDets(int il, float rz, const std::vector< float > &rzB, float ph, const std::vector< float > &phB) const

Member Data Documentation

const std::vector<DetLayer *> ValidHitPairFilter::detLayers
private

Definition at line 42 of file ValidHitPairFilter.h.

std::vector<float> ValidHitPairFilter::phBounds[7]
private

Definition at line 44 of file ValidHitPairFilter.h.

std::vector<float> ValidHitPairFilter::rzBounds[7]
private

Definition at line 43 of file ValidHitPairFilter.h.

const GeometricSearchTracker* ValidHitPairFilter::theGSTracker
private

Definition at line 37 of file ValidHitPairFilter.h.

const MagneticField* ValidHitPairFilter::theMagneticField
private

Definition at line 38 of file ValidHitPairFilter.h.

const Propagator* ValidHitPairFilter::thePropagator
private

Definition at line 39 of file ValidHitPairFilter.h.

const TrackerGeometry* ValidHitPairFilter::theTracker
private

Definition at line 36 of file ValidHitPairFilter.h.

const TrackerTopology* ValidHitPairFilter::tTopo
private

Definition at line 40 of file ValidHitPairFilter.h.