CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
ValidHitPairFilter Class Reference

#include <ValidHitPairFilter.h>

Inheritance diagram for ValidHitPairFilter:
PixelTrackFilter

Public Member Functions

virtual bool operator() (const reco::Track *track, std::vector< const TrackingRecHit * > recHits) const
 
 ValidHitPairFilter (const edm::ParameterSet &ps, const edm::EventSetup &es)
 
virtual ~ValidHitPairFilter ()
 
- Public Member Functions inherited from PixelTrackFilter
virtual bool operator() (const reco::Track *) const
 
virtual bool operator() (const reco::Track *, const Hits &) const
 
virtual void update (edm::Event &ev)
 
virtual ~PixelTrackFilter ()
 

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
 

Additional Inherited Members

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

Detailed Description

Definition at line 19 of file ValidHitPairFilter.h.

Constructor & Destructor Documentation

ValidHitPairFilter::ValidHitPairFilter ( const edm::ParameterSet ps,
const edm::EventSetup es 
)

Definition at line 52 of file ValidHitPairFilter.cc.

References begin, BPix3, end, edm::EventSetup::get(), i, LogTrace, evf::utils::pid, edm::ESHandle< class >::product(), python.multivaluedict::sort(), and spin().

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

Definition at line 127 of file ValidHitPairFilter.cc.

128 {
129 }

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 202 of file ValidHitPairFilter.cc.

References BPix3, errorMatrix2Lands_multiChannel::id, and LogTrace.

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

Definition at line 131 of file ValidHitPairFilter.cc.

References BPix3, PXFDetId::disk(), TrackingRecHit::geographicalId(), errorMatrix2Lands_multiChannel::id, PXBDetId::layer(), evf::utils::pid, PixelSubdetector::PixelBarrel, and PXFDetId::side().

132 {
133  DetId id(recHit.geographicalId());
134 
135  if(id.subdetId() == int(PixelSubdetector::PixelBarrel))
136  {
137  PXBDetId pid(id);
138  return pid.layer();
139  }
140  else
141  {
142  PXFDetId pid(id);
143  return BPix3 + ((pid.side()-1) << 1) + pid.disk();
144  }
145 }
Definition: DetId.h:20
DetId geographicalId() const
vector< int > ValidHitPairFilter::getMissingLayers ( int  a,
int  b 
) const
private

Definition at line 148 of file ValidHitPairFilter.cc.

References BPix1, BPix2, BPix3, trackerHits::c, FPix1_neg, FPix1_pos, FPix2_neg, FPix2_pos, and prof2calltree::l.

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

Definition at line 182 of file ValidHitPairFilter.cc.

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

183 {
184  GlobalPoint position(track.vertex().x(),
185  track.vertex().y(),
186  track.vertex().z());
187 
188  GlobalVector momentum(track.momentum().x(),
189  track.momentum().y(),
190  track.momentum().z());
191 
192  GlobalTrajectoryParameters gtp(position, momentum,
193  track.charge(), theMagneticField);
194 
195  FreeTrajectoryState fts(gtp);
196 
197  return fts;
198 }
const Vector & momentum() const
track momentum vector
Definition: TrackBase.h:150
const Point & vertex() const
reference point on the track. This method is DEPRECATED, please use referencePoint() instead ...
Definition: TrackBase.h:156
static int position[264][3]
Definition: ReadPGInfo.cc:509
int charge() const
track electric charge
Definition: TrackBase.h:113
const MagneticField * theMagneticField
bool ValidHitPairFilter::operator() ( const reco::Track track,
std::vector< const TrackingRecHit * >  recHits 
) const
virtual

Definition at line 259 of file ValidHitPairFilter.cc.

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

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

Member Data Documentation

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

Definition at line 40 of file ValidHitPairFilter.h.

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

Definition at line 42 of file ValidHitPairFilter.h.

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

Definition at line 41 of file ValidHitPairFilter.h.

const GeometricSearchTracker* ValidHitPairFilter::theGSTracker
private

Definition at line 36 of file ValidHitPairFilter.h.

const MagneticField* ValidHitPairFilter::theMagneticField
private

Definition at line 37 of file ValidHitPairFilter.h.

const Propagator* ValidHitPairFilter::thePropagator
private

Definition at line 38 of file ValidHitPairFilter.h.

const TrackerGeometry* ValidHitPairFilter::theTracker
private

Definition at line 35 of file ValidHitPairFilter.h.