25 const vector<const ForwardDetRing*>& backRings)
27 theFrontLayer(frontRings),
28 theBackLayer(backRings),
31 theBasicComponents() {
37 for (vector<const ForwardDetRing*>::const_iterator it =
theRings.begin(); it !=
theRings.end(); it++) {
38 vector<const GeomDet*> tmp2 = (*it)->basicComponents();
46 <<
" Z: " << specificSurface().position().z() <<
" R1: " << specificSurface().innerRadius()
47 <<
" R2: " << specificSurface().outerRadius();
56 float rmin =
min(frontDisk.innerRadius(), backDisk.innerRadius());
57 float rmax =
max(frontDisk.outerRadius(), backDisk.outerRadius());
58 float zmin = frontDisk.position().z();
59 float halfThickness = frontDisk.bounds().thickness() / 2.;
61 float zmax = backDisk.position().z();
62 halfThickness = backDisk.bounds().thickness() / 2.;
82 LogTrace(
"MTDDetLayers") <<
"MTDRingForwardDoubleLayer::compatible is assuming inside-out direction: " <<
insideOut;
86 return make_pair(
false, myState);
107 vector<DetWithState>
result;
108 pair<bool, TrajectoryStateOnSurface> compat =
compatible(startingState, prop, est);
111 LogTrace(
"MTDDetLayers") <<
" MTDRingForwardDoubleLayer::compatibleDets: not compatible" 112 <<
" (should not have been selected!)";
123 for (
const auto& thisDG : vectorGroups) {
124 for (
const auto& thisDGE : thisDG) {
134 vector<GeometricSearchDet::DetWithState> detWithStates1, detWithStates2;
136 LogTrace(
"MTDDetLayers") <<
"groupedCompatibleDets are currently given always in inside-out order";
144 if (!detWithStates1.empty())
146 if (!detWithStates2.empty())
148 LogTrace(
"MTDDetLayers") <<
"DoubleLayer Compatible dets: " <<
result.size();
155 double r =
gp.perp();
157 if (backRings.size() > 1) {
160 assert(innerRing && outerRing);
163 LogTrace(
"MTDDetLayers") <<
"In a crack:" << crackInner <<
" " <<
r <<
" " << crackOuter;
164 if (
r > crackInner &&
r < crackOuter)
178 for (
const auto& thisFront : frontDets) {
179 if (static_cast<ETLDetId>(thisFront->geographicalId().rawId()).mtdRR() == iring) {
180 float tmpz(
std::abs(thisFront->surface().position().z()));
186 for (
const auto& thisBack : backDets) {
187 if (static_cast<ETLDetId>(thisBack->geographicalId().rawId()).mtdRR() == iring) {
188 float tmpz(
std::abs(thisBack->surface().position().z()));
TkRotation< Scalar > RotationType
const std::vector< const GeomDet * > & basicComponents() const override
const LocalTrajectoryError & localError() const
const std::vector< const GeomDet * > & basicComponents() const override
LocalPoint localPosition() const
std::pair< bool, TrajectoryStateOnSurface > compatible(const TrajectoryStateOnSurface &, const Propagator &, const MeasurementEstimator &) const override
MTDRingForwardDoubleLayer(const std::vector< const ForwardDetRing *> &frontRings, const std::vector< const ForwardDetRing *> &backRings)
Constructor, takes ownership of pointers.
const BoundDisk & specificSurface() const
Return the ring surface as a BoundDisk.
BoundDisk * computeSurface() override
std::vector< const ForwardDetRing * > theRings
LocalError positionError() const
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
virtual const std::vector< const ForwardDetRing * > & rings() const
Return the vector of rings.
bool isCrack(const GlobalPoint &gp) const
Point3DBase< Scalar, GlobalTag > PositionType
std::vector< DetGroup > groupedCompatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
GlobalPoint globalPosition() const
std::pair< const GeomDet *, TrajectoryStateOnSurface > DetWithState
LocalVector localDirection() const
bool isInsideOut(const TrajectoryStateOnSurface &tsos) const
std::vector< const GeomDet * > theBasicComponents
Tan< T >::type tan(const T &t)
Abs< T >::type abs(const T &t)
static constexpr int kETLv1maxRing
const BasicVectorType & basicVector() const
GlobalVector globalMomentum() const
MTDRingForwardLayer theFrontLayer
std::vector< const GeometricSearchDet * > theComponents
std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
T dot(const Basic3DVector &rh) const
Scalar product, or "dot" product, with a vector of same type.
MTDRingForwardLayer theBackLayer
Geom::Theta< T > theta() const