CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes
TIBLayer Class Referencefinal

#include <TIBLayer.h>

Inheritance diagram for TIBLayer:
TBLayer BarrelDetLayer DetLayer GeometricSearchDet

Public Member Functions

 TIBLayer (std::vector< const TIBRing * > &innerRings, std::vector< const TIBRing * > &outerRings) __attribute__((cold))
 
 ~TIBLayer () override __attribute__((cold))
 
- Public Member Functions inherited from TBLayer
const std::vector< const GeomDet * > & basicComponents () const final
 
const std::vector< const GeometricSearchDet * > & components () const final __attribute__((cold))
 Returns basic components, if any. More...
 
void groupedCompatibleDetsV (const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetGroup > &result) const override __attribute__((hot))
 
SubDetector subDetector () const final
 The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel, RPCEndcap) More...
 
template<typename TDET >
 TBLayer (std::vector< const TDET * > &inner, std::vector< const TDET * > &outer, GeomDetEnumerators::SubDetector ime)
 
 ~TBLayer () override __attribute__((cold))
 
- Public Member Functions inherited from BarrelDetLayer
 BarrelDetLayer (bool doHaveGroup)
 
std::pair< bool, TrajectoryStateOnSurfacecompatible (const TrajectoryStateOnSurface &ts, const Propagator &, const MeasurementEstimator &) const final
 
bool contains (const Local3DPoint &p) const
 
Location location () const final
 DetLayer interface. More...
 
virtual const BoundCylinderspecificSurface () const final
 Extension of the interface. More...
 
const BoundSurfacesurface () const final
 GeometricSearchDet interface. More...
 
 ~BarrelDetLayer () override
 
- Public Member Functions inherited from DetLayer
 DetLayer (bool doHaveGroup, bool ibar)
 
bool isBarrel () const
 
bool isForward () const
 
int seqNum () const
 
void setSeqNum (int sq)
 
 ~DetLayer () override
 
- Public Member Functions inherited from GeometricSearchDet
virtual std::vector< DetWithStatecompatibleDets (const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
 
virtual void compatibleDetsV (const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetWithState > &result) const
 
 GeometricSearchDet (bool doHaveGroups)
 
virtual std::vector< DetGroupgroupedCompatibleDets (const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
 
bool hasGroups () const
 
virtual const Surface::PositionTypeposition () const
 Returns position of the surface. More...
 
virtual ~GeometricSearchDet ()
 

Private Member Functions

std::tuple< bool, int, int > computeIndexes (GlobalPoint gInnerPoint, GlobalPoint gOuterPoint) const override __attribute__((hot))
 
float computeWindowSize (const GeomDet *det, const TrajectoryStateOnSurface &tsos, const MeasurementEstimator &est) const override __attribute__((hot))
 
BoundCylindercylinder (const std::vector< const GeometricSearchDet * > &rings) __attribute__((cold))
 
void searchNeighbors (const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubLayerCrossing &crossing, float window, std::vector< DetGroup > &result, bool checkClosest) const override __attribute__((hot))
 

Static Private Member Functions

static bool overlap (const GlobalPoint &gpos, const GeometricSearchDet &ring, float window) __attribute__((hot))
 

Private Attributes

GeneralBinFinderInZforGeometricSearchDet< float > theInnerBinFinder
 
GeneralBinFinderInZforGeometricSearchDet< float > theOuterBinFinder
 

Additional Inherited Members

- Public Types inherited from DetLayer
typedef GeomDetEnumerators::Location Location
 
typedef GeomDetEnumerators::SubDetector SubDetector
 
- Public Types inherited from GeometricSearchDet
typedef std::pair< const GeomDet *, TrajectoryStateOnSurfaceDetWithState
 
typedef BoundSurface::PositionType PositionType
 
typedef BoundSurface::RotationType RotationType
 
typedef TrajectoryStateOnSurface TrajectoryState
 
- Protected Member Functions inherited from TBLayer
bool addClosest (const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubLayerCrossing &crossing, std::vector< DetGroup > &result) const __attribute__((hot))
 
SubLayerCrossings computeCrossings (const TrajectoryStateOnSurface &startingState, PropagationDirection propDir) const __attribute__((hot))
 
bool isPhase2OT () const
 
bool isPixel () const
 
bool isTIB () const
 
bool isTOB () const
 
const std::vector< const GeometricSearchDet * > & subLayer (int ind) const
 
- Protected Member Functions inherited from BarrelDetLayer
SimpleCylinderBounds const & bounds () const
 
virtual BoundCylindercomputeSurface ()
 
virtual void initialize ()
 
void setSurface (BoundCylinder *cp)
 
- Protected Attributes inherited from TBLayer
GeomDetEnumerators::SubDetector me
 
std::vector< const GeomDet * > theBasicComps
 
std::vector< const GeometricSearchDet * > theComps
 
std::vector< const GeometricSearchDet * > theInnerComps
 
ReferenceCountingPointer< BoundCylindertheInnerCylinder
 
std::vector< const GeometricSearchDet * > theOuterComps
 
ReferenceCountingPointer< BoundCylindertheOuterCylinder
 
- Protected Attributes inherited from GeometricSearchDet
bool haveGroups
 
GeomDetCompatibilityChecker theCompatibilityChecker
 

Detailed Description

A concrete implementation for TIB layer built out of TIBRings

Definition at line 13 of file TIBLayer.h.

Constructor & Destructor Documentation

TIBLayer::TIBLayer ( std::vector< const TIBRing * > &  innerRings,
std::vector< const TIBRing * > &  outerRings 
)

Definition at line 20 of file TIBLayer.cc.

References cylinder(), mps_fire::i, BarrelDetLayer::initialize(), LogDebug, BarrelDetLayer::specificSurface(), TBLayer::theBasicComps, TBLayer::theComps, theInnerBinFinder, TBLayer::theInnerComps, TBLayer::theInnerCylinder, theOuterBinFinder, TBLayer::theOuterComps, and TBLayer::theOuterCylinder.

21  : TBLayer(innerRings,outerRings, GeomDetEnumerators::TIB)
22 {
23  theComps.assign(theInnerComps.begin(),theInnerComps.end());
24  theComps.insert(theComps.end(),theOuterComps.begin(),theOuterComps.end());
25 
26  sort(theComps.begin(),theComps.end(),DetLessZ());
27  sort(theInnerComps.begin(),theInnerComps.end(),DetLessZ());
28  sort(theOuterComps.begin(),theOuterComps.end(),DetLessZ());
29 
30  for(vector<const GeometricSearchDet*>::const_iterator it=theComps.begin();
31  it!=theComps.end();it++){
32  theBasicComps.insert(theBasicComps.end(),
33  (**it).basicComponents().begin(),
34  (**it).basicComponents().end());
35  }
36 
37  // initialize the surface
40  initialize();
41 
42  LogDebug("TkDetLayers") << "==== DEBUG TIBLayer =====" ;
43  LogDebug("TkDetLayers") << "innerCyl radius, thickness, lenght: "
44  << theInnerCylinder->radius() << " , "
45  << theInnerCylinder->bounds().thickness() << " , "
46  << theInnerCylinder->bounds().length() ;
47 
48  LogDebug("TkDetLayers") << "outerCyl radius, thickness, lenght: "
49  << theOuterCylinder->radius() << " , "
50  << theOuterCylinder->bounds().thickness() << " , "
51  << theOuterCylinder->bounds().length() ;
52 
53  LogDebug("TkDetLayers") << "Cyl radius, thickness, lenght: "
54  << specificSurface().radius() << " , "
55  << specificSurface().bounds().thickness() << " , "
56  << specificSurface().bounds().length() ;
57 
58  for (vector<const GeometricSearchDet*>::const_iterator i=theInnerComps.begin();
59  i != theInnerComps.end(); i++){
60  LogDebug("TkDetLayers") << "inner TIBRing pos z,radius,eta,phi: "
61  << (**i).position().z() << " , "
62  << (**i).position().perp() << " , "
63  << (**i).position().eta() << " , "
64  << (**i).position().phi() ;
65  }
66 
67  for (vector<const GeometricSearchDet*>::const_iterator i=theOuterComps.begin();
68  i != theOuterComps.end(); i++){
69  LogDebug("TkDetLayers") << "outer TIBRing pos z,radius,eta,phi: "
70  << (**i).position().z() << " , "
71  << (**i).position().perp() << " , "
72  << (**i).position().eta() << " , "
73  << (**i).position().phi() ;
74  }
75 
76 
77 
78  // initialise the bin finders
79  // vector<const GeometricSearchDet*> tmpIn;
80  //for (vector<const TIBRing*>::const_iterator i=theInnerRings.begin();
81  // i != theInnerRings.end(); i++) tmpIn.push_back(*i);
83  theInnerComps.end());
84 
86  theOuterComps.end());
87 }
#define LogDebug(id)
ReferenceCountingPointer< BoundCylinder > theOuterCylinder
Definition: TBLayer.h:89
virtual void initialize()
std::vector< const GeometricSearchDet * > theInnerComps
Definition: TBLayer.h:84
std::vector< const GeometricSearchDet * > theComps
Definition: TBLayer.h:83
virtual const BoundCylinder & specificSurface() const final
Extension of the interface.
GeneralBinFinderInZforGeometricSearchDet< float > theOuterBinFinder
Definition: TIBLayer.h:43
TBLayer(std::vector< const TDET * > &inner, std::vector< const TDET * > &outer, GeomDetEnumerators::SubDetector ime)
Definition: TBLayer.h:17
BoundCylinder * cylinder(const std::vector< const GeometricSearchDet * > &rings) __attribute__((cold))
Definition: TIBLayer.cc:95
GeneralBinFinderInZforGeometricSearchDet< float > theInnerBinFinder
Definition: TIBLayer.h:42
std::vector< const GeomDet * > theBasicComps
Definition: TBLayer.h:86
std::vector< const GeometricSearchDet * > theOuterComps
Definition: TBLayer.h:85
ReferenceCountingPointer< BoundCylinder > theInnerCylinder
Definition: TBLayer.h:88
TIBLayer::~TIBLayer ( )
override

Definition at line 89 of file TIBLayer.cc.

89 {}

Member Function Documentation

std::tuple< bool, int, int > TIBLayer::computeIndexes ( GlobalPoint  gInnerPoint,
GlobalPoint  gOuterPoint 
) const
overrideprivatevirtual

Implements TBLayer.

Definition at line 124 of file TIBLayer.cc.

References funct::abs(), GeneralBinFinderInZforGeometricSearchDet< T >::binIndex(), GloballyPositioned< T >::position(), GeometricSearchDet::surface(), theInnerBinFinder, TBLayer::theInnerComps, theOuterBinFinder, TBLayer::theOuterComps, and PV3DBase< T, PVType, FrameType >::z().

124  {
125 
126  int innerIndex = theInnerBinFinder.binIndex(gInnerPoint.z());
127  const GeometricSearchDet* innerRing = theInnerComps[innerIndex];
128  float innerDist = std::abs( innerRing->surface().position().z() - gInnerPoint.z());
129 
130  int outerIndex = theOuterBinFinder.binIndex(gOuterPoint.z());
131  const GeometricSearchDet* outerRing = theOuterComps[outerIndex];
132  float outerDist = std::abs( outerRing->surface().position().z() - gOuterPoint.z());
133 
134 
135  return std::make_tuple(innerDist < outerDist,innerIndex, outerIndex);
136 
137 
138 }
std::vector< const GeometricSearchDet * > theInnerComps
Definition: TBLayer.h:84
GeneralBinFinderInZforGeometricSearchDet< float > theOuterBinFinder
Definition: TIBLayer.h:43
T z() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
GeneralBinFinderInZforGeometricSearchDet< float > theInnerBinFinder
Definition: TIBLayer.h:42
std::vector< const GeometricSearchDet * > theOuterComps
Definition: TBLayer.h:85
const PositionType & position() const
virtual int binIndex(T z) const
returns an index in the valid range for the bin closest to Z
float TIBLayer::computeWindowSize ( const GeomDet det,
const TrajectoryStateOnSurface tsos,
const MeasurementEstimator est 
) const
overrideprivatevirtual

Implements TBLayer.

Definition at line 189 of file TIBLayer.cc.

References funct::abs(), Surface::bounds(), TrajectoryStateOnSurface::globalMomentum(), MeasurementEstimator::maximalLocalDisplacement(), GeomDet::surface(), Bounds::thickness(), PV2DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

192 {
193  // we assume the outer and inner rings have about same thickness...
194 
195 // edm::LogInfo(TkDetLayers) << "TIBLayer::computeWindowSize: Y axis of tangent plane is"
196 // << plane.toGlobal( LocalVector(0,1,0)) ;
197 
199  float yError = localError.y();
200 
201  // float tanTheta = std::tan( tsos.globalMomentum().theta());
202  auto gm = tsos.globalMomentum();
203  auto cotanTheta = gm.z()/gm.perp();
204  float thickCorrection = 0.5f*det->surface().bounds().thickness()*std::abs( cotanTheta);
205 
206  // FIXME: correct this in case of wide phi window !
207 
208  return yError + thickCorrection;
209 }
const Bounds & bounds() const
Definition: Surface.h:120
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
T z() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual float thickness() const =0
GlobalVector globalMomentum() const
virtual Local2DVector maximalLocalDisplacement(const TrajectoryStateOnSurface &ts, const Plane &plane) const =0
BoundCylinder * TIBLayer::cylinder ( const std::vector< const GeometricSearchDet * > &  rings)
private

Definition at line 95 of file TIBLayer.cc.

References Bounds::length(), alignCSCRings::r, and Bounds::thickness().

Referenced by TIBLayer().

96 {
97  float leftPos = rings.front()->surface().position().z();
98  float rightPos = rings.back()->surface().position().z();
99 
100  const BoundCylinder & frontRing = static_cast<const BoundCylinder &>(rings.front()->surface());
101  const BoundCylinder & backRing = static_cast<const BoundCylinder &>(rings.back()->surface());
102  float r = frontRing.radius();
103  const Bounds& leftBounds = frontRing.bounds();
104  const Bounds& rightBounds = backRing.bounds();
105 
106  //float r = rings.front()->specificSurface().radius();
107  //const Bounds& leftBounds = rings.front()->specificSurface().bounds();
108  //const Bounds& rightBounds = rings.back()->specificSurface().bounds();
109 
110  float thick = leftBounds.thickness() / 2;
111  float zmin = leftPos - leftBounds.length() / 2;
112  float zmax = rightPos + rightBounds.length() / 2;
113  float rmin = r-thick;
114  float rmax = r+thick;
115  float zpos = 0.5*(leftPos+rightPos);
116 
117  auto scp = new SimpleCylinderBounds(rmin, rmax, zmin-zpos, zmax-zpos);
118  return new Cylinder(r, Surface::PositionType( 0, 0, zpos),
119  rings.front()->surface().rotation(), scp);
120 
121 }
virtual float length() const =0
virtual float thickness() const =0
Definition: Bounds.h:22
bool TIBLayer::overlap ( const GlobalPoint gpos,
const GeometricSearchDet ring,
float  window 
)
staticprivate

Definition at line 178 of file TIBLayer.cc.

References funct::abs(), Surface::bounds(), Bounds::length(), GeometricSearchDet::position(), GeometricSearchDet::surface(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by searchNeighbors().

181 {
182  float halfLength = 0.5f*det.surface().bounds().length();
183 
184 // edm::LogInfo(TkDetLayers) << " TIBLayer: checking ring with z " << det.position().z();
185 
186  return std::abs( crossPoint.z()-det.position().z()) < (halfLength + window);
187 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
def window(xmin, xmax, ymin, ymax, x=0, y=0, width=100, height=100, xlogbase=None, ylogbase=None, minusInfinity=-1000, flipx=False, flipy=True)
Definition: svgfig.py:642
void TIBLayer::searchNeighbors ( const TrajectoryStateOnSurface tsos,
const Propagator prop,
const MeasurementEstimator est,
const SubLayerCrossing crossing,
float  window,
std::vector< DetGroup > &  result,
bool  checkClosest 
) const
overrideprivatevirtual

Implements TBLayer.

Definition at line 140 of file TIBLayer.cc.

References PVValHelper::add(), SubLayerCrossing::closestDetIndex(), overlap(), SubLayerCrossing::position(), TBLayer::subLayer(), SubLayerCrossing::subLayerIndex(), and PV3DBase< T, PVType, FrameType >::z().

147 {
148  const GlobalPoint& gCrossingPos = crossing.position();
149 
150  const vector<const GeometricSearchDet*>& sLayer( subLayer( crossing.subLayerIndex()));
151 
152  int closestIndex = crossing.closestDetIndex();
153  int negStartIndex = closestIndex-1;
154  int posStartIndex = closestIndex+1;
155 
156  if (checkClosest) { // must decide if the closest is on the neg or pos side
157  if (gCrossingPos.z() < sLayer[closestIndex]->surface().position().z()) {
158  posStartIndex = closestIndex;
159  }
160  else {
161  negStartIndex = closestIndex;
162  }
163  }
164 
165  typedef CompatibleDetToGroupAdder Adder;
166  for (int idet=negStartIndex; idet >= 0; idet--) {
167  const GeometricSearchDet* neighborRing = sLayer[idet];
168  if (!overlap( gCrossingPos, *neighborRing, window)) break;
169  if (!Adder::add( *neighborRing, tsos, prop, est, result)) break;
170  }
171  for (int idet=posStartIndex; idet < static_cast<int>(sLayer.size()); idet++) {
172  const GeometricSearchDet* neighborRing = sLayer[idet];
173  if (!overlap( gCrossingPos, *neighborRing, window)) break;
174  if (!Adder::add( *neighborRing, tsos, prop, est, result)) break;
175  }
176 }
static bool overlap(const GlobalPoint &gpos, const GeometricSearchDet &ring, float window) __attribute__((hot))
Definition: TIBLayer.cc:178
int closestDetIndex() const
const GlobalPoint & position() const
int subLayerIndex() const
T z() const
Definition: PV3DBase.h:64
def window(xmin, xmax, ymin, ymax, x=0, y=0, width=100, height=100, xlogbase=None, ylogbase=None, minusInfinity=-1000, flipx=False, flipy=True)
Definition: svgfig.py:642
void add(std::map< std::string, TH1 * > &h, TH1 *hist)
const std::vector< const GeometricSearchDet * > & subLayer(int ind) const
Definition: TBLayer.h:64

Member Data Documentation

GeneralBinFinderInZforGeometricSearchDet<float> TIBLayer::theInnerBinFinder
private

Definition at line 42 of file TIBLayer.h.

Referenced by computeIndexes(), and TIBLayer().

GeneralBinFinderInZforGeometricSearchDet<float> TIBLayer::theOuterBinFinder
private

Definition at line 43 of file TIBLayer.h.

Referenced by computeIndexes(), and TIBLayer().