30 LogDebug(
"TkDetLayers") <<
"DEBUG INFO for PixelBlade";
31 LogDebug(
"TkDetLayers") <<
"Blade z, perp, innerRadius, outerR: " << this->
position().
z() <<
" , "
36 LogDebug(
"TkDetLayers") <<
"frontDet phi,z,r: " << (*it)->position().phi() <<
" , " << (*it)->position().z()
37 <<
" , " << (*it)->position().perp();
42 LogDebug(
"TkDetLayers") <<
"backDet phi,z,r: " << (*it)->position().phi() <<
" , " << (*it)->position().z() <<
" , "
43 << (*it)->position().perp();
55 edm::LogError(
"TkDetLayers") <<
"temporary dummy implementation of PixelBlade::compatible()!!";
56 return pair<bool, TrajectoryStateOnSurface>();
62 std::vector<DetGroup>&
result)
const {
68 vector<DetGroup> closestResult;
71 if (closestResult.empty()) {
72 vector<DetGroup> nextResult;
74 if (nextResult.empty())
88 vector<DetGroup> nextResult;
106 if (!innerPath.first)
109 GlobalPoint gInnerPoint(crossing.position(innerPath.second));
113 int innerIndex =
findBin(gInnerPoint.perp(), 0);
118 if (!outerPath.first)
121 GlobalPoint gOuterPoint(crossing.position(outerPath.second));
125 int outerIndex =
findBin(gOuterPoint.perp(), 1);
129 if (innerDist < outerDist) {
140 vector<DetGroup>&
result)
const {
157 bool checkClosest)
const {
163 int negStartIndex = closestIndex - 1;
164 int posStartIndex = closestIndex + 1;
167 if (gCrossingPos.
perp() < sBlade[closestIndex]->surface().position().perp()) {
168 posStartIndex = closestIndex;
170 negStartIndex = closestIndex;
175 for (
int idet = negStartIndex; idet >= 0; idet--) {
176 if (!
overlap(gCrossingPos, *sBlade[idet], window))
178 if (!
Adder::add(*sBlade[idet], tsos, prop, est, result))
181 for (
int idet = posStartIndex; idet < static_cast<int>(sBlade.size()); idet++) {
182 if (!
overlap(gCrossingPos, *sBlade[idet], window))
184 if (!
Adder::add(*sBlade[idet], tsos, prop, est, result))
193 const float relativeMargin = 1.01;
201 float localX = localCrossPoint.x();
207 if ((
std::abs(localX) - window) < relativeMargin * detHalfLength) {
218 float rDiff =
std::abs(R - localDets.front()->surface().position().perp());
220 for (vector<const GeomDet*>::const_iterator
i = localDets.begin();
i != localDets.end();
i++) {
221 float testDiff =
std::abs(R - (**i).surface().position().perp());
222 if (testDiff < rDiff) {
224 theBin =
i - localDets.begin();
232 return (diskSector[index])->surface().position();
ReferenceCountingPointer< BoundDiskSector > theFrontDiskSector
virtual float length() const =0
ReferenceCountingPointer< BoundDiskSector > theBackDiskSector
void groupedCompatibleDetsV(const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetGroup > &result) const override __attribute__((hot))
int closestDetIndex() const
bool addClosest(const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubLayerCrossing &crossing, std::vector< DetGroup > &result) const __attribute__((hot))
virtual Local2DVector maximalLocalDisplacement(const TrajectoryStateOnSurface &ts, const Plane &plane) const =0
std::pair< bool, TrajectoryStateOnSurface > compatible(const TrajectoryStateOnSurface &ts, const Propagator &, const MeasurementEstimator &) const override __attribute__((cold))
GlobalPoint globalPosition() const
const Bounds & bounds() const
virtual PropagationDirection propagationDirection() const final
float computeWindowSize(const GeomDet *det, const TrajectoryStateOnSurface &tsos, const MeasurementEstimator &est) const
Log< level::Error, false > LogError
std::vector< const GeomDet * > theFrontDets
const Plane & surface() const
The nominal surface of the GeomDet.
GlobalPoint findPosition(int index, int diskSectorIndex) const
std::vector< const GeomDet * > theBackDets
const std::vector< const GeomDet * > & subBlade(int ind) const
const GlobalPoint & position() const
bool overlap(const GlobalPoint &gpos, const GeomDet &det, float phiWin) const
int findBin(float R, int layer) const
const std::vector< const GeometricSearchDet * > & components() const override __attribute__((cold))
Returns basic components, if any.
std::pair< const GeomDet *, TrajectoryStateOnSurface > DetWithState
LocalPoint toLocal(const GlobalPoint &gp) const
int subLayerIndex() const
~PixelBlade() override __attribute__((cold))
Abs< T >::type abs(const T &t)
static int endcapSide(const TrajectoryStateOnSurface &startingState, const Propagator &prop)
PixelBlade(std::vector< const GeomDet * > &frontDets, std::vector< const GeomDet * > &backDets) __attribute__((cold))
const SubLayerCrossing & other() const
static bool add(const GeometricSearchDet &det, const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetGroup > &result) __attribute__((hot))
void add(std::map< std::string, TH1 * > &h, TH1 *hist)
static BoundDiskSector * build(const std::vector< const GeomDet * > &dets) __attribute__((cold))
virtual const Surface::PositionType & position() const
Returns position of the surface.
constexpr uint16_t localX(uint16_t px)
std::vector< const GeomDet * > theDets
const SubLayerCrossing & closest() const
T perp() const
Magnitude of transverse component.
GlobalVector globalMomentum() const
static void orderAndMergeTwoLevels(std::vector< DetGroup > &&one, std::vector< DetGroup > &&two, std::vector< DetGroup > &result, int firstIndex, int firstCrossed)
std::pair< const GeomDet *, TrajectoryStateOnSurface > DetWithState
ReferenceCountingPointer< BoundDiskSector > theDiskSector
SubLayerCrossings computeCrossings(const TrajectoryStateOnSurface &tsos, PropagationDirection propDir) const __attribute__((hot))
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))
double transverseCurvature() const