#include <RecoTracker/TkMSParametrization/interface/MultipleScatteringGeometry.h>
Public Member Functions | |
std::vector< MSLayer > | detLayers (const edm::EventSetup &iSetup) const |
std::vector< MSLayer > | detLayers (float eta, float z, const edm::EventSetup &iSetup) const |
MultipleScatteringGeometry (const edm::EventSetup &iSetup) | |
std::vector< MSLayer > | otherLayers (float eta, const edm::EventSetup &iSetup) const |
Protected Attributes | |
std::vector< const DetLayer * > | theLayers |
Static Protected Attributes | |
static const float | beamPipeR = 2.94 |
static const float | endflangesZ = 30 |
static const float | supportR = 19. |
Definition at line 9 of file MultipleScatteringGeometry.h.
MultipleScatteringGeometry::MultipleScatteringGeometry | ( | const edm::EventSetup & | iSetup | ) |
Definition at line 22 of file MultipleScatteringGeometry.cc.
References edm::EventSetup::get(), theLayers, and track.
00023 { 00024 00025 edm::ESHandle<GeometricSearchTracker> track; 00026 iSetup.get<TrackerRecoGeometryRecord>().get( track ); 00027 00028 vector<BarrelDetLayer*> barrelLayers=track->barrelLayers(); 00029 vector<BarrelDetLayer*>::const_iterator ib; 00030 vector<ForwardDetLayer*> forwardPosLayers=track->posForwardLayers(); 00031 vector<ForwardDetLayer*> forwardNegLayers=track->negForwardLayers(); 00032 vector<ForwardDetLayer*>::const_iterator ie; 00033 // barrelLayers = accessor.barrelLayers(); 00034 for (ib = barrelLayers.begin(); ib != barrelLayers.end(); ib++) 00035 theLayers.push_back(*ib); 00036 00037 // forwardLayers = accessor.negativeEndcapLayers(); 00038 for (ie = forwardPosLayers.begin(); ie != forwardPosLayers.end(); ie++) 00039 theLayers.push_back(*ie); 00040 for (ie = forwardNegLayers.begin(); ie != forwardNegLayers.end(); ie++) 00041 theLayers.push_back(*ie); 00042 00043 }
vector< MSLayer > MultipleScatteringGeometry::detLayers | ( | const edm::EventSetup & | iSetup | ) | const |
Definition at line 46 of file MultipleScatteringGeometry.cc.
References HLT_VtxMuL3::result, and theLayers.
00047 { 00048 vector<MSLayer> result; 00049 vector<const DetLayer*>::const_iterator il; 00050 for (il=theLayers.begin();il!=theLayers.end();il++) result.push_back(MSLayer(*il)); 00051 return result; 00052 }
vector< MSLayer > MultipleScatteringGeometry::detLayers | ( | float | eta, | |
float | z, | |||
const edm::EventSetup & | iSetup | |||
) | const |
Definition at line 55 of file MultipleScatteringGeometry.cc.
References alongMomentum, GeomDetEnumerators::barrel, BoundSurface::bounds(), dir, muonGeometry::disk, GeomDetEnumerators::endcap, edm::EventSetup::get(), TrajectoryStateOnSurface::globalPosition(), BoundDisk::innerRadius(), PixelRecoRange< T >::inside(), TrajectoryStateOnSurface::isValid(), Bounds::length(), BoundDisk::outerRadius(), PV3DBase< T, PVType, FrameType >::perp(), GeometricSearchDet::position(), GloballyPositioned< T >::position(), StraightLinePropagator::propagate(), r, Cylinder::radius(), HLT_VtxMuL3::result, ForwardDetLayer::specificSurface(), BarrelDetLayer::specificSurface(), theLayers, Bounds::thickness(), and PV3DBase< T, PVType, FrameType >::z().
Referenced by MSLayersKeeperX0Averaged::init().
00056 { 00057 vector<MSLayer> result; 00058 GlobalPoint zero(0,0,z); 00059 float r=1; float dirZ = r*sinh(eta); 00060 GlobalVector dir(r,0.,dirZ); 00061 edm::ESHandle<MagneticField> pSetup; 00062 iSetup.get<IdealMagneticFieldRecord>().get(pSetup); 00063 FreeTrajectoryState fts( GlobalTrajectoryParameters(zero,dir,1,&(*pSetup)) ); 00064 StraightLinePropagator propagator(&(*pSetup),alongMomentum); 00065 vector<const DetLayer*>::const_iterator il; 00066 TrajectoryStateOnSurface tsos; 00067 for (il = theLayers.begin(); il != theLayers.end(); il++) { 00068 bool contains=false; 00069 // if ((*il)->subDetector() != PixelBarrel && (*il)->subDetector()!= PixelEndcap) continue; 00070 00071 if ( (*il)->location() == barrel ) { 00072 const BarrelDetLayer * bl = dynamic_cast<const BarrelDetLayer*>(*il); 00073 if (!bl) continue; 00074 tsos = propagator.propagate(fts, bl->specificSurface()); 00075 if (!tsos.isValid()) continue; 00076 float r=bl->specificSurface().radius(); 00077 float dr = bl->specificSurface().bounds().thickness(); 00078 float z=bl->position().z(); 00079 float dz = bl->specificSurface().bounds().length(); 00080 PixelRecoRange<float> rRange(r-dr/2., r+dr/2.); 00081 PixelRecoRange<float> zRange(z-dz/2., z+dz/2.); 00082 contains = rRange.inside(tsos.globalPosition().perp()) 00083 && zRange.inside(tsos.globalPosition().z()); 00084 // contains = bl->contains((*il)->toLocal(tsos.globalPosition())); 00085 } 00086 else if ((*il)->location() == endcap) { 00087 const ForwardDetLayer * fl = dynamic_cast<const ForwardDetLayer*>(*il); 00088 if (!fl) continue; 00089 if (fl->position().z() * eta < 0) continue; 00090 const BoundDisk & disk = fl->specificSurface(); 00091 tsos = propagator.propagate(fts, disk); 00092 if (!tsos.isValid()) continue; 00093 float zMin = disk.position().z()-disk.bounds().thickness()/2; 00094 float zMax = disk.position().z()+disk.bounds().thickness()/2; 00095 PixelRecoRange<float> rRange(disk.innerRadius(), disk.outerRadius()); 00096 PixelRecoRange<float> zRange(zMin, zMax); 00097 contains = rRange.inside(tsos.globalPosition().perp()) 00098 && zRange.inside(tsos.globalPosition().z()); 00099 // contains = fl->contains(fl->toLocal(tsos.globalPosition())); 00100 } 00101 if (contains) result.push_back(MSLayer(*il)); 00102 } 00103 return result; 00104 }
vector< MSLayer > MultipleScatteringGeometry::otherLayers | ( | float | eta, | |
const edm::EventSetup & | iSetup | |||
) | const |
Definition at line 106 of file MultipleScatteringGeometry.cc.
References GeomDetEnumerators::barrel, beamPipeR, GeomDetEnumerators::endcap, endflangesZ, PixelRecoPointRZ::r(), HLT_VtxMuL3::result, supportR, and PixelRecoPointRZ::z().
Referenced by MSLayersKeeperX0Averaged::init().
00107 { 00108 vector<MSLayer> result; 00109 // zero 00110 // MSLayer zero(barrel, 0., MSLayer::Range(-15,15)); 00111 // result.push_back(zero); 00112 00113 // beampipe 00114 MSLayer beampipe(barrel, beamPipeR, MSLayer::Range(-100,100)); 00115 00116 result.push_back(beampipe); 00117 00118 // endflanges 00119 PixelRecoPointRZ endfPoint = (eta > 0) ? 00120 PixelRecoPointRZ(endflangesZ/sinh(eta), endflangesZ) 00121 : PixelRecoPointRZ(-endflangesZ/sinh(eta), -endflangesZ); 00122 if (0 < endfPoint.r() && endfPoint.r() < supportR) { 00123 MSLayer endflanges(endcap,endfPoint.z(),MSLayer::Range(0.1,supportR-0.1)); 00124 result.push_back(endflanges); 00125 } 00126 00127 // support 00128 MSLayer support( barrel,supportR, MSLayer::Range(-280,280)); 00129 result.push_back(support); 00130 00131 return result; 00132 }
const float MultipleScatteringGeometry::beamPipeR = 2.94 [static, protected] |
const float MultipleScatteringGeometry::endflangesZ = 30 [static, protected] |
const float MultipleScatteringGeometry::supportR = 19. [static, protected] |
std::vector<const DetLayer*> MultipleScatteringGeometry::theLayers [protected] |
Definition at line 19 of file MultipleScatteringGeometry.h.
Referenced by detLayers(), and MultipleScatteringGeometry().