21 vector<const PixelRod*>& outerRods) :
22 theInnerComps(innerRods.
begin(),innerRods.
end()),
23 theOuterComps(outerRods.
begin(),outerRods.
end())
28 for(vector<const GeometricSearchDet*>::const_iterator it=
theComps.begin();
31 (**it).basicComponents().begin(),
32 (**it).basicComponents().end());
48 LogDebug(
"TkDetLayers") <<
"==== DEBUG PixelBarrelLayer =====" ;
49 LogDebug(
"TkDetLayers") <<
"PixelBarrelLayer innerCyl r,lenght: "
53 LogDebug(
"TkDetLayers") <<
"PixelBarrelLayer outerCyl r,lenght: "
58 for (vector<const GeometricSearchDet*>::const_iterator
i=
theInnerComps.begin();
60 LogDebug(
"TkDetLayers") <<
"inner PixelRod pos z,perp,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 PixelRod pos z,perp,eta,phi: "
70 << (**i).position().z() <<
" , "
71 << (**i).position().perp() <<
" , "
72 << (**i).position().eta() <<
" , "
73 << (**i).position().phi() ;
75 LogDebug(
"TkDetLayers") <<
"==== end DEBUG PixelBarrelLayer =====" ;
80 vector<const GeometricSearchDet*>::const_iterator
i;
91 std::vector<DetGroup> &
result)
const {
92 vector<DetGroup> closestResult;
95 if(! crossings.
isValid())
return;
98 if (closestResult.empty()) {
107 closestResult,
false);
109 vector<DetGroup> nextResult;
137 GlobalPoint gInnerPoint( innerCrossing.position());
157 if (innerDist < 0.) { innerDist += 2.*
Geom::pi();}
158 if (outerDist < 0.) { outerDist += 2.*
Geom::pi();}
161 if (innerDist < outerDist) {
173 vector<DetGroup>&
result)
const
204 double phiWin =
min(fabs(phiStart-phi1),fabs(phiStart-phi2));
216 bool checkClosest)
const
223 int negStartIndex = closestIndex-1;
224 int posStartIndex = closestIndex+1;
227 if (
PhiLess()( gCrossingPos.
phi(), sLayer[closestIndex]->position().phi())) {
228 posStartIndex = closestIndex;
231 negStartIndex = closestIndex;
238 int quarter = sLayer.size()/4;
239 for (
int idet=negStartIndex; idet >= negStartIndex - quarter; idet--) {
241 if (!
overlap( gCrossingPos, *neighborRod, window))
break;
242 if (!adder.
add( *neighborRod, tsos, prop, est, result))
break;
245 for (
int idet=posStartIndex; idet < posStartIndex + quarter; idet++) {
247 if (!
overlap( gCrossingPos, *neighborRod, window))
break;
248 if (!adder.
add( *neighborRod, tsos, prop, est, result))
break;
259 const float phiOffset = 0.00034;
264 pair<float,float> phiRange(crossPoint.
phi()-phiWin, crossPoint.
phi()+phiWin);
273 vector<const GeomDet*>
tmp;
274 for (vector<const GeometricSearchDet*>::const_iterator it=rods.begin(); it!=rods.end(); it++) {
275 tmp.insert(tmp.end(),(*it)->basicComponents().begin(),(*it)->basicComponents().end());
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
static void orderAndMergeTwoLevels(const std::vector< DetGroup > &one, const std::vector< DetGroup > &two, std::vector< DetGroup > &result, int firstIndex, int firstCrossed)
const std::vector< const GeometricSearchDet * > & subLayer(int ind) const
virtual PropagationDirection propagationDirection() const
virtual void initialize()
int closestDetIndex() const
ReferenceCountingPointer< BoundCylinder > theInnerCylinder
std::pair< float, float > const & phiSpan() const
LocalPoint localPosition() const
Geom::Phi< T > phi() const
bool overlap(const GlobalPoint &gpos, const GeometricSearchDet &rod, float phiWin) const
PositionType position() const
GlobalPoint globalPosition() const
virtual Local2DVector maximalLocalDisplacement(const TrajectoryStateOnSurface &ts, const BoundPlane &plane) const
double calculatePhiWindow(double Xmax, const GeomDet &det, const TrajectoryStateOnSurface &state) const
virtual int binIndex(T phi) const
returns an index in the valid range for the bin that contains phi
void searchNeighbors(const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubLayerCrossing &crossing, float window, std::vector< DetGroup > &result, bool checkClosest) const
std::vector< const GeometricSearchDet * > theInnerComps
const GlobalPoint & position() const
ReferenceCountingPointer< BoundCylinder > theOuterCylinder
BoundCylinder * cylinder(const std::vector< const GeometricSearchDet * > &rods) const
bool rangesIntersect(const Range &a, const Range &b)
int subLayerIndex() const
std::vector< const GeomDet * > theBasicComps
BinFinderType theOuterBinFinder
virtual T binPosition(int ind) const
the middle of the bin in radians
float computeWindowSize(const GeomDet *det, const TrajectoryStateOnSurface &tsos, const MeasurementEstimator &est) const
BinFinderType theInnerBinFinder
PixelBarrelLayer(std::vector< const PixelRod * > &innerRods, std::vector< const PixelRod * > &outerRods)
PeriodicBinFinderInPhi< double > BinFinderType
const SubLayerCrossing & other() const
std::vector< const GeometricSearchDet * > theComps
SubLayerCrossings computeCrossings(const TrajectoryStateOnSurface &tsos, PropagationDirection propDir) const
void groupedCompatibleDetsV(const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetGroup > &result) const
bool addClosest(const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubLayerCrossing &crossing, std::vector< DetGroup > &result) const
static bool add(const GeometricSearchDet &det, const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetGroup > &result)
int barrelSide(const TrajectoryStateOnSurface &startingState, const Propagator &prop) const
returns 0 if barrel layer crossed from inside, 1 if from outside
std::vector< std::vector< double > > tmp
const SubLayerCrossing & closest() const
GlobalVector globalMomentum() const
static unsigned int const shift
std::pair< const GeomDet *, TrajectoryStateOnSurface > DetWithState
std::pair< const GeomDet *, TrajectoryStateOnSurface > DetWithState
std::vector< const GeometricSearchDet * > theOuterComps
virtual const BoundPlane & surface() const
The nominal surface of the GeomDet.
double transverseCurvature() const