CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
TrackingRecHitLessFromGlobalPosition.cc
Go to the documentation of this file.
2 #include <cmath>
12 
14  DetId ida(a.geographicalId());
15  DetId idb(b.geographicalId());
16 
17  unsigned int idetA = static_cast<unsigned int>(ida.subdetId());
18  unsigned int idetB = static_cast<unsigned int>(idb.subdetId());
19 
20  //check for mixed case...
21  bool same_det = ((idetA == StripSubdetector::TIB && idetB == StripSubdetector::TIB) ||
22  (idetA == StripSubdetector::TID && idetB == StripSubdetector::TID) ||
23  (idetA == StripSubdetector::TIB && idetB == StripSubdetector::TID) ||
24  (idetA == StripSubdetector::TID && idetB == StripSubdetector::TIB) ||
25 
26  (idetA == StripSubdetector::TOB && idetB == StripSubdetector::TOB) ||
27  (idetA == StripSubdetector::TEC && idetB == StripSubdetector::TEC) ||
28  (idetA == StripSubdetector::TOB && idetB == StripSubdetector::TEC) ||
29  (idetA == StripSubdetector::TEC && idetB == StripSubdetector::TOB) ||
30 
35 
36  if (!same_det)
37  return (idetA < idetB);
38 
39  if ((idetA == StripSubdetector::TIB || idetA == StripSubdetector::TOB || idetA == PixelSubdetector::PixelBarrel) &&
41  return static_cast<unsigned int>(geometry->idToDet(ida)->surface().toGlobal(a.localPosition()).perp() * 1E7) <
42  static_cast<unsigned int>(geometry->idToDet(idb)->surface().toGlobal(b.localPosition()).perp() * 1E7);
43  }
44 
45  if ((idetA == StripSubdetector::TEC || idetA == StripSubdetector::TID || idetA == PixelSubdetector::PixelEndcap) &&
47  return static_cast<unsigned int>(std::abs(geometry->idToDet(ida)->surface().toGlobal(a.localPosition()).z()) *
48  1E7) <
49  static_cast<unsigned int>(std::abs(geometry->idToDet(idb)->surface().toGlobal(b.localPosition()).z()) * 1E7);
50  }
51 
52  //
53  // here I have 1 barrel against one forward
54  //
55 
56  if ((idetA == StripSubdetector::TIB || idetA == StripSubdetector::TOB || idetA == PixelSubdetector::PixelBarrel) &&
58  return barrelForwardLess(a, b);
59  } else {
60  return !barrelForwardLess(b, a);
61  }
62 
63  throw cms::Exception("TrackingRecHitLessFromGlobalPosition", "Arguments are not Ok");
64 }
65 
67  //
68  // for the moment sort again in z, but since the z in the barrel is wrong (it is in the centre of the module)
69  // add the semi length
70  //
71  DetId ida(a.geographicalId());
72  DetId idb(b.geographicalId());
73  return static_cast<unsigned int>(std::abs(geometry->idToDet(ida)->surface().toGlobal(a.localPosition()).z()) * 1E7) <
74  static_cast<unsigned int>(std::abs(geometry->idToDet(idb)->surface().toGlobal(b.localPosition()).z()) * 1E7);
75 }
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:79
static constexpr auto TEC
bool barrelForwardLess(const TrackingRecHit &a, const TrackingRecHit &b) const
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool insideOutLess(const TrackingRecHit &a, const TrackingRecHit &b) const
static constexpr auto TOB
Definition: DetId.h:17
static constexpr auto TIB
virtual const GeomDet * idToDet(DetId) const =0
double b
Definition: hdecay.h:118
T perp() const
Magnitude of transverse component.
double a
Definition: hdecay.h:119
DetId geographicalId() const
virtual LocalPoint localPosition() const =0
static constexpr auto TID