21 vector<const TIBRing*>& outerRings) :
TBLayer(innerRings,outerRings, GeomDetEnumerators::
TIB)
30 for(vector<const GeometricSearchDet*>::const_iterator it=
theComps.begin();
33 (**it).basicComponents().begin(),
34 (**it).basicComponents().end());
42 LogDebug(
"TkDetLayers") <<
"==== DEBUG TIBLayer =====" ;
43 LogDebug(
"TkDetLayers") <<
"innerCyl radius, thickness, lenght: "
48 LogDebug(
"TkDetLayers") <<
"outerCyl radius, thickness, lenght: "
53 LogDebug(
"TkDetLayers") <<
"Cyl radius, thickness, lenght: "
58 for (vector<const GeometricSearchDet*>::const_iterator
i=
theInnerComps.begin();
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() ;
67 for (vector<const GeometricSearchDet*>::const_iterator
i=
theOuterComps.begin();
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() ;
97 float leftPos = rings.front()->surface().position().z();
98 float rightPos = rings.back()->surface().position().z();
102 float r = frontRing.radius();
103 const Bounds& leftBounds = frontRing.bounds();
104 const Bounds& rightBounds = backRing.bounds();
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);
119 rings.front()->surface().rotation(), scp);
135 return std::make_tuple(innerDist < outerDist,innerIndex, outerIndex);
146 bool checkClosest)
const
153 int negStartIndex = closestIndex-1;
154 int posStartIndex = closestIndex+1;
157 if (gCrossingPos.
z() < sLayer[closestIndex]->surface().position().z()) {
158 posStartIndex = closestIndex;
161 negStartIndex = closestIndex;
166 for (
int idet=negStartIndex; idet >= 0; idet--) {
168 if (!
overlap( gCrossingPos, *neighborRing, window))
break;
169 if (!
Adder::add( *neighborRing, tsos, prop, est, result))
break;
171 for (
int idet=posStartIndex; idet < static_cast<int>(sLayer.size()); idet++) {
173 if (!
overlap( gCrossingPos, *neighborRing, window))
break;
174 if (!
Adder::add( *neighborRing, tsos, prop, est, result))
break;
199 float yError = localError.
y();
203 auto cotanTheta = gm.
z()/gm.perp();
208 return yError + thickCorrection;
ReferenceCountingPointer< BoundCylinder > theOuterCylinder
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
std::tuple< bool, int, int > computeIndexes(GlobalPoint gInnerPoint, GlobalPoint gOuterPoint) const __attribute__((hot))
virtual float length() const =0
static bool overlap(const GlobalPoint &gpos, const GeometricSearchDet &ring, float window) __attribute__((hot))
virtual void initialize()
std::vector< const GeometricSearchDet * > theInnerComps
int closestDetIndex() const
std::vector< const GeometricSearchDet * > theComps
void searchNeighbors(const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubLayerCrossing &crossing, float window, std::vector< DetGroup > &result, bool checkClosest) const __attribute__((hot))
virtual Local2DVector maximalLocalDisplacement(const TrajectoryStateOnSurface &ts, const Plane &plane) const =0
void add(const std::vector< const T * > &source, std::vector< const T * > &dest)
const Bounds & bounds() const
TIBLayer(std::vector< const TIBRing * > &innerRings, std::vector< const TIBRing * > &outerRings) __attribute__((cold))
~TIBLayer() __attribute__((cold))
const Plane & surface() const
The nominal surface of the GeomDet.
GeneralBinFinderInZforGeometricSearchDet< float > theOuterBinFinder
const GlobalPoint & position() const
virtual float thickness() const =0
int subLayerIndex() const
Abs< T >::type abs(const T &t)
std::pair< const GeomDet *, TrajectoryStateOnSurface > DetWithState
BoundCylinder * cylinder(const std::vector< const GeometricSearchDet * > &rings) __attribute__((cold))
GeneralBinFinderInZforGeometricSearchDet< float > theInnerBinFinder
virtual const Surface::PositionType & position() const
Returns position of the surface.
const std::vector< const GeometricSearchDet * > & subLayer(int ind) const
virtual const BoundCylinder & specificSurface() const final
Extension of the interface.
float computeWindowSize(const GeomDet *det, const TrajectoryStateOnSurface &tsos, const MeasurementEstimator &est) const __attribute__((hot))
GlobalVector globalMomentum() const
std::pair< const GeomDet *, TrajectoryStateOnSurface > DetWithState
std::vector< const GeomDet * > theBasicComps
std::vector< const GeometricSearchDet * > theOuterComps
const PositionType & position() const
virtual int binIndex(T z) const
returns an index in the valid range for the bin closest to Z
ReferenceCountingPointer< BoundCylinder > theInnerCylinder