19 vector<const GeomDet*>& backDets):
20 theFrontDets(frontDets), theBackDets(backDets)
31 LogDebug(
"TkDetLayers") <<
"DEBUG INFO for PixelBlade" ;
32 LogDebug(
"TkDetLayers") <<
"Blade z, perp, innerRadius, outerR: "
38 for(vector<const GeomDet*>::const_iterator it=
theFrontDets.begin();
40 LogDebug(
"TkDetLayers") <<
"frontDet phi,z,r: "
41 << (*it)->position().phi() <<
" , "
42 << (*it)->position().z() <<
" , "
43 << (*it)->position().perp() ;;
46 for(vector<const GeomDet*>::const_iterator it=
theBackDets.begin();
48 LogDebug(
"TkDetLayers") <<
"backDet phi,z,r: "
49 << (*it)->position().phi() <<
" , "
50 << (*it)->position().z() <<
" , "
51 << (*it)->position().perp() ;
58 const vector<const GeometricSearchDet*>&
63 pair<bool, TrajectoryStateOnSurface>
66 edm::LogError(
"TkDetLayers") <<
"temporary dummy implementation of PixelBlade::compatible()!!" ;
67 return pair<bool,TrajectoryStateOnSurface>();
76 std::vector<DetGroup> &
result)
const{
79 if(! crossings.
isValid())
return;
81 vector<DetGroup> closestResult;
84 if (closestResult.empty()){
85 vector<DetGroup> nextResult;
87 if(nextResult.empty())
return;
100 closestResult,
false);
102 vector<DetGroup> nextResult;
125 GlobalPoint gInnerPoint( crossing.position(innerPath.second));
129 int innerIndex =
findBin(gInnerPoint.perp(),0);
130 float innerDist = fabs(
findPosition(innerIndex,0).
perp() - gInnerPoint.perp());
136 GlobalPoint gOuterPoint( crossing.position(outerPath.second));
140 int outerIndex =
findBin(gOuterPoint.perp(),1);
141 float outerDist = fabs(
findPosition(outerIndex,1).
perp() - gOuterPoint.perp());
144 if (innerDist < outerDist) {
160 vector<DetGroup>&
result)
const
186 bool checkClosest)
const
193 int negStartIndex = closestIndex-1;
194 int posStartIndex = closestIndex+1;
197 if (gCrossingPos.
perp() < sBlade[closestIndex]->surface().position().perp()) {
198 posStartIndex = closestIndex;
201 negStartIndex = closestIndex;
206 for (
int idet=negStartIndex; idet >= 0; idet--) {
207 if (!
overlap( gCrossingPos, *sBlade[idet], window))
break;
208 if (!
Adder::add( *sBlade[idet], tsos, prop, est, result))
break;
210 for (
int idet=posStartIndex; idet < static_cast<int>(sBlade.size()); idet++) {
211 if (!
overlap( gCrossingPos, *sBlade[idet], window))
break;
212 if (!
Adder::add( *sBlade[idet], tsos, prop, est, result))
break;
223 const float relativeMargin = 1.01;
231 float localX = localCrossPoint.
x();
237 if ( ( fabs(localX)-window) < relativeMargin*detHalfLength ) {
250 float rDiff = fabs( R - localDets.front()->surface().position().perp());;
251 for (vector<const GeomDet*>::const_iterator
i=localDets.begin();
i !=localDets.end();
i++){
252 float testDiff = fabs( R - (**i).surface().position().perp());
253 if ( testDiff < rDiff) {
255 theBin =
i - localDets.begin();
267 return (diskSector[index])->surface().position();
static void orderAndMergeTwoLevels(const std::vector< DetGroup > &one, const std::vector< DetGroup > &two, std::vector< DetGroup > &result, int firstIndex, int firstCrossed)
ReferenceCountingPointer< BoundDiskSector > theFrontDiskSector
virtual float length() const =0
virtual PropagationDirection propagationDirection() const
ReferenceCountingPointer< BoundDiskSector > theBackDiskSector
int closestDetIndex() const
T perp() const
Magnitude of transverse component.
GlobalPoint globalPosition() const
void add(const std::vector< const T * > &source, std::vector< const T * > &dest)
float computeWindowSize(const GeomDet *det, const TrajectoryStateOnSurface &tsos, const MeasurementEstimator &est) const
std::vector< const GeomDet * > theFrontDets
virtual Local2DVector maximalLocalDisplacement(const TrajectoryStateOnSurface &ts, const BoundPlane &plane) const
GlobalPoint findPosition(int index, int diskSectorIndex) const
SubLayerCrossings computeCrossings(const TrajectoryStateOnSurface &tsos, PropagationDirection propDir) const
std::vector< const GeomDet * > theBackDets
const std::vector< const GeomDet * > & subBlade(int ind) const
const GlobalPoint & position() const
int endcapSide(const TrajectoryStateOnSurface &startingState, const Propagator &prop) const
virtual const std::vector< const GeometricSearchDet * > & components() const
Returns basic components, if any.
bool overlap(const GlobalPoint &gpos, const GeomDet &det, float phiWin) const
int findBin(float R, int layer) const
bool addClosest(const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubLayerCrossing &crossing, std::vector< DetGroup > &result) const
void searchNeighbors(const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubLayerCrossing &crossing, float window, std::vector< DetGroup > &result, bool checkClosest) const
LocalPoint toLocal(const GlobalPoint &gp) const
int subLayerIndex() const
PixelBlade(std::vector< const GeomDet * > &frontDets, std::vector< const GeomDet * > &backDets)
const SubLayerCrossing & other() const
std::pair< bool, TrajectoryStateOnSurface > compatible(const TrajectoryStateOnSurface &ts, const Propagator &, const MeasurementEstimator &) const
const Bounds & bounds() const
virtual void groupedCompatibleDetsV(const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetGroup > &result) const
virtual const Surface::PositionType & position() const
Returns position of the surface.
static bool add(const GeometricSearchDet &det, const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetGroup > &result)
std::vector< const GeomDet * > theDets
const SubLayerCrossing & closest() const
GlobalVector globalMomentum() const
std::pair< const GeomDet *, TrajectoryStateOnSurface > DetWithState
std::pair< const GeomDet *, TrajectoryStateOnSurface > DetWithState
ReferenceCountingPointer< BoundDiskSector > theDiskSector
virtual const BoundPlane & surface() const
The nominal surface of the GeomDet.
double transverseCurvature() const