22 const vector<const ForwardDetRing*>& backRings)
24 theFrontLayer(frontRings),
25 theBackLayer(backRings),
28 theBasicComponents() {
29 const std::string metname =
"Muon|RecoMuon|RecoMuonDetLayers|MuRingForwardDoubleLayer";
37 vector<const GeomDet*> tmp2 = (*it)->basicComponents();
45 <<
" Z: " << specificSurface().position().z() <<
" R1: " << specificSurface().innerRadius()
46 <<
" R2: " << specificSurface().outerRadius();
55 float rmin =
min(frontDisk.innerRadius(), backDisk.innerRadius());
56 float rmax =
max(frontDisk.outerRadius(), backDisk.outerRadius());
57 float zmin = frontDisk.position().z();
58 float halfThickness = frontDisk.bounds().thickness() / 2.;
60 float zmax = backDisk.position().z();
61 halfThickness = backDisk.bounds().thickness() / 2.;
78 const std::string metname =
"Muon|RecoMuon|RecoMuonDetLayers|MuRingForwardDoubleLayer";
82 LogTrace(
"Muon|RecoMuon|RecoMuonDetLayers|MuRingForwardDoubleLayer")
83 <<
"MuRingForwardDoubleLayer::compatible is assuming inside-out direction: " <<
insideOut;
94 return make_pair(
false, myState);
107 float zPos = (
zmax() +
zmin()) / 2.;
115 vector<DetWithState>
result;
116 const std::string metname =
"Muon|RecoMuon|RecoMuonDetLayers|MuRingForwardDoubleLayer";
117 pair<bool, TrajectoryStateOnSurface> compat =
compatible(startingState, prop, est);
120 LogTrace(
metname) <<
" MuRingForwardDoubleLayer::compatibleDets: not compatible" 121 <<
" (should not have been selected!)";
132 for (vector<DetGroup>::const_iterator itDG = vectorGroups.begin(); itDG != vectorGroups.end(); itDG++) {
133 for (vector<DetGroupElement>::const_iterator itDGE = itDG->begin(); itDGE != itDG->end(); itDGE++) {
143 const std::string metname =
"Muon|RecoMuon|RecoMuonDetLayers|MuRingForwardDoubleLayer";
144 vector<GeometricSearchDet::DetWithState> detWithStates1, detWithStates2;
146 LogTrace(
metname) <<
"groupedCompatibleDets are currently given always in inside-out order";
155 if (!detWithStates1.empty())
157 if (!detWithStates2.empty())
164 const std::string metname =
"Muon|RecoMuon|RecoMuonDetLayers|MuRingForwardDoubleLayer";
167 double r =
gp.perp();
169 if (backRings.size() > 1) {
172 assert(innerRing && outerRing);
175 LogTrace(
metname) <<
"In a crack:" << crackInner <<
" " <<
r <<
" " << crackOuter;
176 if (
r > crackInner &&
r < crackOuter)
188 std::vector<const GeomDet*>::const_iterator frontItr = frontDets.begin(), lastFront = frontDets.end(),
189 backItr = backDets.begin(), lastBack = backDets.end();
192 for (; frontItr != lastFront; ++frontItr) {
193 float frontz = fabs((**frontItr).surface().position().z());
194 for (; backItr != lastBack; ++backItr) {
195 float backz = fabs((**backItr).surface().position().z());
TkRotation< Scalar > RotationType
const LocalTrajectoryError & localError() const
LocalPoint localPosition() const
const std::string metname
std::pair< bool, TrajectoryStateOnSurface > compatible(const TrajectoryStateOnSurface &, const Propagator &, const MeasurementEstimator &) const override
std::vector< const GeomDet * > theBasicComponents
bool isInsideOut(const TrajectoryStateOnSurface &tsos) const
const BoundDisk & specificSurface() const
Return the ring surface as a BoundDisk.
LocalError positionError() const
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
std::vector< const ForwardDetRing * > theRings
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
Tan< T >::type tan(const T &t)
const std::vector< const GeomDet * > & basicComponents() const override
const BasicVectorType & basicVector() const
MuRingForwardLayer theFrontLayer
const std::vector< const GeomDet * > & basicComponents() const override
BoundDisk * computeSurface() override
MuRingForwardDoubleLayer(const std::vector< const ForwardDetRing *> &frontRings, const std::vector< const ForwardDetRing *> &backRings)
Constructor, takes ownership of pointers.
GlobalVector globalMomentum() const
std::vector< const GeometricSearchDet * > theComponents
virtual const std::vector< const ForwardDetRing * > & rings() const
Return the vector of rings.
MuRingForwardLayer theBackLayer
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.
std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
Geom::Theta< T > theta() const
bool isCrack(const GlobalPoint &gp) const