00001 #include "RecoTracker/TkTrackingRegions/interface/GlobalDetRangeZPhi.h" 00002 #include "DataFormats/GeometrySurface/interface/BoundPlane.h" 00003 #include "DataFormats/GeometrySurface/interface/Bounds.h" 00004 #include "TrackingTools/DetLayers/interface/PhiLess.h" 00005 #include <functional> 00006 #include <cmath> 00007 #include <vector> 00008 00009 using namespace std; 00010 00011 GlobalDetRangeZPhi::GlobalDetRangeZPhi( const BoundPlane& plane) { 00012 00013 float dx = plane.bounds().width()/2.; 00014 float dy = plane.bounds().length()/2.; 00015 00016 vector<Surface::GlobalPoint> corners(4); 00017 corners[0] = plane.toGlobal( LocalPoint( -dx, -dy, 0)); 00018 corners[1] = plane.toGlobal( LocalPoint( -dx, dy, 0)); 00019 corners[2] = plane.toGlobal( LocalPoint( dx, -dy, 0)); 00020 corners[3] = plane.toGlobal( LocalPoint( dx, dy, 0)); 00021 00022 float phimin = corners[0].phi(); float phimax = phimin; 00023 float zmin = corners[0].z(); float zmax = zmin; 00024 for ( int i=1; i<4; i++) { 00025 float phi = corners[i].phi(); 00026 if ( PhiLess()( phi, phimin)) phimin = phi; 00027 if ( PhiLess()( phimax, phi)) phimax = phi; 00028 00029 float z = corners[i].z(); 00030 if ( z < zmin) zmin = z; 00031 if ( z > zmax) zmax = z; 00032 } 00033 00034 theZRange.first = zmin; 00035 theZRange.second = zmax; 00036 thePhiRange.first = phimin; 00037 thePhiRange.second = phimax; 00038 00039 }