34 edm::LogError(
"MTDDetLayers") <<
"temporary dummy implementation of MTDDetRing::components()!!";
35 static const vector<const GeometricSearchDet*>
result;
52 LogTrace(
"MTDDetLayers") <<
" DEST: not valid";
67 vector<DetWithState>
result;
70 pair<bool, TrajectoryStateOnSurface> compat =
compatible(startingState, prop, est);
72 LogTrace(
"MTDDetLayers") <<
" MTDDetRing::compatibleDets: not compatible"
73 <<
" (should not have been selected!)";
82 LogTrace(
"MTDDetLayers") <<
" MTDDetRing::compatibleDets, closest det: " << closest
83 <<
" Phi: " << dets[closest]->surface().position().phi() <<
" impactPhi " << startPos.
phi();
87 add(closest, result, tsos, prop, est);
90 int nclosest = result.size();
95 if (!result.empty()) {
97 if (result.back().second.hasError()) {
98 dphi = nSigmas * atan(
sqrt(result.back().second.localError().positionError().xx()) /
99 result.back().second.globalPosition().perp());
102 LogTrace(
"MTDDetLayers") <<
" MTDDetRing::compatibleDets, closest not compatible!";
107 for (
int idet = closest + 1; idet < closest + int(dets.size()) / 4 + 1; idet++) {
113 LogTrace(
"MTDDetLayers") <<
" next det:" << idetp <<
" at Z: " << dets[idetp]->position().z()
114 <<
" phi: " << dets[idetp]->position().phi() <<
" FTS phi " << startPos.
phi()
115 <<
" max dphi " << dphi;
118 if (!
add(idetp, result, tsos, prop, est))
123 for (
int idet = closest - 1; idet > closest - int(dets.size()) / 4 - 1; idet--) {
129 LogTrace(
"MTDDetLayers") <<
" previous det:" << idetp <<
" " << idet <<
" " << closest - dets.size() / 4 - 1
130 <<
" at Z: " << dets[idetp]->position().z() <<
" phi: " << dets[idetp]->position().phi()
131 <<
" FTS phi " << startPos.
phi() <<
" max dphi" << dphi;
134 if (!
add(idetp, result, tsos, prop, est))
140 LogTrace(
"MTDDetLayers") <<
" MTDDetRing::compatibleDets, size: " << result.size() <<
" on closest: " << nclosest
141 <<
" # checked dets: " << nnextdet + 1;
143 if (result.empty()) {
144 LogTrace(
"MTDDetLayers") <<
" ***Ring not compatible,should have been discarded before!!!";
156 edm::LogError(
"MTDDetLayers") <<
"dummy implementation of MTDDetRing::groupedCompatibleDets()";
BinFinderType theBinFinder
std::pair< bool, TrajectoryStateOnSurface > compatible(const TrajectoryStateOnSurface &ts, const Propagator &prop, const MeasurementEstimator &est) const override
int binIndex(T phi) const override
returns an index in the valid range for the bin that contains phi
const std::vector< const GeomDet * > & basicComponents() const override
LocalPoint localPosition() const
Geom::Phi< T > phi() const
GlobalPoint globalPosition() const
MTDDetRing(std::vector< const GeomDet * >::const_iterator first, std::vector< const GeomDet * >::const_iterator last)
Construct from iterators on GeomDet*.
const std::vector< const GeometricSearchDet * > & components() const override
Returns basic components, if any.
Log< level::Error, false > LogError
std::vector< DetGroup > groupedCompatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
virtual HitReturnType estimate(const TrajectoryStateOnSurface &ts, const TrackingRecHit &hit) const =0
std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
virtual const Surface::PositionType & position() const
Returns position of the surface.
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
PeriodicBinFinderInPhi< float > BinFinderType
const BoundSurface & surface() const final
The surface of the GeometricSearchDet.
bool add(int idet, std::vector< DetWithState > &result, const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est) const
const PositionType & position() const
const BoundDisk & specificSurface() const
Return the ring surface as a BoundDisk.
tuple size
Write out results.