18 const vector<const MTDDetSector*>& backSectors)
20 theFrontLayer(frontSectors),
21 theBackLayer(backSectors),
22 theSectors(frontSectors),
24 theBasicComponents() {
31 vector<const GeomDet*> tmp2 = isect->basicComponents();
37 LogTrace(
"MTDDetLayers") <<
"Constructing MTDSectorForwardDoubleLayer: " << std::fixed << std::setw(14)
38 <<
basicComponents().size() <<
" Dets " << std::setw(14) << theSectors.size() <<
" Sectors "
39 <<
" Z: " << std::setw(14) <<
specificSurface().position().z() <<
" R1: " << std::setw(14)
50 float rmin =
min(frontDisk.innerRadius(), backDisk.innerRadius());
51 float rmax =
max(frontDisk.outerRadius(), backDisk.outerRadius());
52 float zmin = frontDisk.position().z();
53 float halfThickness = frontDisk.bounds().thickness() / 2.;
54 zmin = (zmin > 0) ? zmin - halfThickness : zmin + halfThickness;
55 float zmax = backDisk.position().z();
56 halfThickness = backDisk.bounds().thickness() / 2.;
57 zmax = (zmax > 0) ? zmax + halfThickness : zmax - halfThickness;
58 float zPos = (zmax +
zmin) / 2.;
76 LogTrace(
"MTDDetLayers") <<
"MTDSectorForwardDoubleLayer::compatible is assuming inside-out direction: " <<
insideOut;
80 return make_pair(
false, myState);
86 constexpr
float nSigma = 3.;
90 deltaR += nSigma *
sqrt(err.
xx() + err.
yy());
101 vector<DetWithState>
result;
102 pair<bool, TrajectoryStateOnSurface> compat =
compatible(startingState, prop, est);
105 LogTrace(
"MTDDetLayers") <<
" MTDSectorForwardDoubleLayer::compatibleDets: not compatible"
106 <<
" (should not have been selected!)";
117 for (
const auto& thisDG : vectorGroups) {
118 for (
const auto& thisDGE : thisDG) {
119 result.emplace_back(
DetWithState(thisDGE.det(), thisDGE.trajectoryState()));
129 vector<GeometricSearchDet::DetWithState> detWithStates1, detWithStates2;
131 LogTrace(
"MTDDetLayers") <<
"groupedCompatibleDets are currently given always in inside-out order";
139 if (!detWithStates1.empty())
140 result.push_back(
DetGroup(detWithStates1));
141 if (!detWithStates2.empty())
142 result.push_back(
DetGroup(detWithStates2));
143 LogTrace(
"MTDDetLayers") <<
"DoubleLayer Compatible dets: " << result.size();
150 <<
"MTDSectorForwardDoubleLayer::isCrack kept only for backward compatibility, no real implementation";
161 for (
const auto& thisFront : frontDets) {
162 float tmpz(
std::abs(thisFront->surface().position().z()));
167 for (
const auto& thisBack : backDets) {
168 float tmpz(
std::abs(thisBack->surface().position().z()));
const std::vector< const GeomDet * > & basicComponents() const override
MTDSectorForwardLayer theFrontLayer
const BoundSurface & surface() const final
The surface of the GeometricSearchDet.
LocalVector localDirection() const
LocalPoint localPosition() const
void setSurface(BoundDisk *cp)
GlobalPoint globalPosition() const
const Bounds & bounds() const
LocalError positionError() const
std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
Geom::Theta< T > theta() const
virtual float thickness() const =0
MTDSectorForwardLayer theBackLayer
bool isCrack(const GlobalPoint &gp) const
bool inside(const Local3DPoint &p) const override
Determine if the point is inside the bounds.
Tan< T >::type tan(const T &t)
Abs< T >::type abs(const T &t)
std::pair< bool, TrajectoryStateOnSurface > compatible(const TrajectoryStateOnSurface &, const Propagator &, const MeasurementEstimator &) const override
const LocalTrajectoryError & localError() const
std::vector< const GeomDet * > theBasicComponents
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
MTDSectorForwardDoubleLayer(const std::vector< const MTDDetSector * > &frontSectors, const std::vector< const MTDDetSector * > &backSectors)
Constructor, takes ownership of pointers.
std::vector< const MTDDetSector * > theSectors
bool isInsideOut(const TrajectoryStateOnSurface &tsos) const
GlobalVector globalMomentum() const
std::vector< DetGroup > groupedCompatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
virtual const BoundDisk & specificSurface() const final
std::vector< const GeometricSearchDet * > theComponents
const std::vector< const GeomDet * > & basicComponents() const override
std::pair< const GeomDet *, TrajectoryStateOnSurface > DetWithState
BoundDisk * computeSurface() override
const BasicVectorType & basicVector() const
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.