#include <BarrelDetLayer.h>
Public Member Functions | |
BarrelDetLayer () | |
virtual std::pair< bool, TrajectoryStateOnSurface > | compatible (const TrajectoryStateOnSurface &ts, const Propagator &, const MeasurementEstimator &) const GCC11_FINAL |
bool | contains (const Local3DPoint &p) const |
virtual Location | location () const GCC11_FINAL |
DetLayer interface. | |
virtual const BoundCylinder & | specificSurface () const GCC11_FINAL |
Extension of the interface. | |
virtual const BoundSurface & | surface () const GCC11_FINAL |
GeometricSearchDet interface. | |
virtual | ~BarrelDetLayer () |
Protected Member Functions | |
virtual BoundCylinder * | computeSurface () |
virtual void | initialize () |
void | setSurface (BoundCylinder *cp) |
Private Attributes | |
ReferenceCountingPointer < BoundCylinder > | theCylinder |
A specialization of the DetLayer interface for barrel layers. Barrel layers are cylinders with their axes parallel to the global Z axis. The methods that have a common implementation for all BarrelDetLayers are implemented in this class, but some methods are left abstract.
Definition at line 25 of file BarrelDetLayer.h.
BarrelDetLayer::BarrelDetLayer | ( | ) | [inline] |
Definition at line 28 of file BarrelDetLayer.h.
: DetLayer(true), theCylinder(0){}
BarrelDetLayer::~BarrelDetLayer | ( | ) | [virtual] |
Definition at line 10 of file BarrelDetLayer.cc.
{}
pair< bool, TrajectoryStateOnSurface > BarrelDetLayer::compatible | ( | const TrajectoryStateOnSurface & | ts, |
const Propagator & | , | ||
const MeasurementEstimator & | |||
) | const [virtual] |
tests the geometrical compatibility of the Det with the predicted state. The FreeTrajectoryState argument is propagated to the Det surface using the Propagator argument. The resulting TrajectoryStateOnSurface is tested for compatibility with the surface bounds. If compatible, a std::pair< true, propagatedState> is returned. If the propagation fails, or if the state is not compatible, a std::pair< false, propagatedState> is returned.
Implements GeometricSearchDet.
Reimplemented in GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, and GCC11_FINAL< T, TOPO >.
Definition at line 74 of file BarrelDetLayer.cc.
References abs, TrajectoryStateOnSurface::cartesianError(), GlobalErrorBase< T, ErrorWeightType >::czz(), TrajectoryStateOnSurface::globalDirection(), TrajectoryStateOnSurface::globalPosition(), TrajectoryStateOnSurface::hasError(), TrajectoryStateOnSurface::isValid(), PV3DBase< T, PVType, FrameType >::perp(), CartesianTrajectoryError::position(), Propagator::propagate(), mathSSE::sqrt(), unlikely, and PV3DBase< T, PVType, FrameType >::z().
Referenced by MuRodBarrelLayer::compatibleDets().
{ if unlikely(theCylinder == 0) edm::LogError("DetLayers") << "ERROR: BarrelDetLayer::compatible() is used before the layer surface is initialized" ; // throw an exception? which one? TrajectoryStateOnSurface myState = prop.propagate( ts, specificSurface()); if unlikely(!myState.isValid()) return make_pair( false, myState); // take into account the thickness of the layer float deltaZ = 0.5f* surface().bounds().thickness() * std::abs(myState.globalDirection().z())/myState.globalDirection().perp(); // take into account the error on the predicted state const float nSigma = 3.; if (myState.hasError()) { deltaZ += nSigma * sqrt( myState.cartesianError().position().czz()); } // // check z assuming symmetric bounds around position().z() // deltaZ += 0.5f*surface().bounds().length(); return make_pair(fabs(myState.globalPosition().z()-surface().position().z())<deltaZ, myState); }
BoundCylinder * BarrelDetLayer::computeSurface | ( | ) | [protected, virtual] |
Definition at line 31 of file BarrelDetLayer.cc.
References BoundingBox::corners(), F(), max(), min, pos, alignCSCRings::r, makeMuonMisalignmentScenario::rot, and z.
{ vector< const GeomDet*> comps = basicComponents(); // Find extension in Z float theRmin = comps.front()->position().perp(); float theRmax = theRmin; float theZmin = comps.front()->position().z(); float theZmax = theZmin; for ( vector< const GeomDet*>::const_iterator deti = comps.begin(); deti != comps.end(); deti++) { vector<GlobalPoint> corners = BoundingBox().corners( dynamic_cast<const Plane&>((*deti)->surface())); for (vector<GlobalPoint>::const_iterator ic = corners.begin(); ic != corners.end(); ic++) { float r = ic->perp(); float z = ic->z(); theRmin = min( theRmin, r); theRmax = max( theRmax, r); theZmin = min( theZmin, z); theZmax = max( theZmax, z); } // in addition to the corners we have to check the middle of the // det +/- thickness/2 // , since the min radius for some barrel dets is reached there float rdet = (**deti).position().perp(); float thick = (**deti).surface().bounds().thickness(); theRmin = min( theRmin, rdet-thick/2.F); theRmax = max( theRmax, rdet+thick/2.F); } // By default the barrel layers are positioned at the center of the // global frame, and the axes of their local frame coincide with // those of the global grame (z along the cylinder axis) PositionType pos(0.,0.,0.); RotationType rot; auto scp = new SimpleCylinderBounds( theRmin, theRmax, theZmin, theZmax); return new Cylinder(Cylinder::computeRadius(*scp), pos, rot, scp); }
bool BarrelDetLayer::contains | ( | const Local3DPoint & | p | ) | const |
Definition at line 19 of file BarrelDetLayer.cc.
{ return surface().bounds().inside(p); }
void BarrelDetLayer::initialize | ( | ) | [protected, virtual] |
Definition at line 23 of file BarrelDetLayer.cc.
Referenced by MuRodBarrelLayer::MuRodBarrelLayer().
{ setSurface( computeSurface()); }
virtual Location BarrelDetLayer::location | ( | ) | const [inline, virtual] |
DetLayer interface.
Implements DetLayer.
Definition at line 41 of file BarrelDetLayer.h.
References Reference_intrackfit_cff::barrel.
{return GeomDetEnumerators::barrel;}
void BarrelDetLayer::setSurface | ( | BoundCylinder * | cp | ) | [protected] |
Definition at line 15 of file BarrelDetLayer.cc.
References CommonMethods::cp().
{ theCylinder = cp; }
virtual const BoundCylinder& BarrelDetLayer::specificSurface | ( | ) | const [inline, virtual] |
Extension of the interface.
Reimplemented in GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, and GCC11_FINAL< T, TOPO >.
Definition at line 45 of file BarrelDetLayer.h.
References theCylinder.
Referenced by MuonNavigationSchool::addBarrelLayer(), GroupedCkfTrajectoryBuilder::advanceOneLayer(), CkfDebugger::analyseRecHitNotFound(), DirectTrackerNavigation::checkCompatible(), DirectMuonNavigation::checkCompatible(), MuRodBarrelLayer::compatibleDets(), PixelHitMatcher::compatibleHits(), MuonShowerInformationFiller::crossingPoint(), MultipleScatteringGeometry::detLayers(), HitPairGeneratorFromLayerPairForPhotonConversion::getLayerRadius(), PixelTripletNoTipGenerator::hitTriplets(), InnerDeltaPhi::initBarrelLayer(), ThirdHitRZPredictionBase::initLayer(), ThirdHitPrediction::initLayer(), TkLayerLess::insideOutLess(), TkLayerLess::insideOutLessSigned(), SimpleNavigationSchool::linkNextForwardLayer(), OutInConversionSeedFinder::makeEstimator(), MSLayer::MSLayer(), MuRodBarrelLayer::MuRodBarrelLayer(), ExtractBarrelDetLayerR::operator()(), MuonDetLayerComp::operator()(), MuonNavigationPrinter::printLayers(), and SimpleNavigableLayer::wellInside().
{ return *theCylinder;}
virtual const BoundSurface& BarrelDetLayer::surface | ( | ) | const [inline, virtual] |
GeometricSearchDet interface.
Implements GeometricSearchDet.
Reimplemented in GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, GCC11_FINAL< T, TOPO >, and GCC11_FINAL< T, TOPO >.
Definition at line 34 of file BarrelDetLayer.h.
References theCylinder.
Referenced by TkLayerLess::barrelForwardLess(), PixelTripletNoTipGenerator::hitTriplets(), ThirdHitRZPredictionBase::initLayer(), ThirdHitPrediction::initLayer(), SimpleNavigationSchool::linkNextForwardLayer(), and MSLayer::MSLayer().
{ return *theCylinder;}
Reimplemented in GCC11_FINAL< T, TOPO >.
Definition at line 61 of file BarrelDetLayer.h.
Referenced by specificSurface(), and surface().