14 float phiStart = wedges.front()->position().phi();
15 float zStart = wedges.front()->position().z();
16 float wphimin, wphimax;
17 for (vector<const TECWedge*>::const_iterator
i = wedges.begin();
i != wedges.end();
i++){
18 float zdiff = (**i).surface().position().z() - zStart;
19 if ( fabs( zdiff) > 5.)
20 edm::LogError(
"TkDetLayers") <<
" ForwardDiskSectorBuilderFromWedges: Trying to build "
21 <<
"Petal from Wedges at different z ! Delta Z = " << zdiff ;
22 float wphi = (**i).surface().position().phi();
23 if (
PhiLess()( phiStart, wphi)) {
30 float phidiff = wphimax - wphimin;
31 if ( phidiff < 0.) phidiff += 2.*
Geom::pi();
33 edm::LogError(
"TkDetLayers") <<
" ForwardDiskSectorBuilderFromWedges: Trying to build "
34 <<
"Petal from Wedges at different phi ! Delta phi = "
38 auto bo = computeBounds( wedges );
42 return new BoundDiskSector( pos, rot, bo.first);
45 pair<DiskSectorBounds*, GlobalVector>
50 float rmin((**(wedges.begin())).specificSurface().innerRadius());
52 float zmin((**(wedges.begin())).surface().position().z());
54 float phimin((**(wedges.begin())).surface().position().phi());
57 for (vector<const TECWedge*>::const_iterator iw=wedges.begin();
58 iw != wedges.end(); iw++) {
61 float ri = (**iw).specificSurface().innerRadius();
62 float ro = (**iw).specificSurface().outerRadius();
63 float zmi = (**iw).surface().position().z() - (**iw).specificSurface().bounds().thickness()/2.;
64 float zma = (**iw).surface().position().z() + (**iw).specificSurface().bounds().thickness()/2.;
65 float phi1 = (**iw).surface().position().phi() - (**iw).specificSurface().phiHalfExtension();
66 float phi2 = (**iw).surface().position().phi() + (**iw).specificSurface().phiHalfExtension();
67 rmin =
min( rmin, ri);
68 rmax =
max( rmax, ro);
70 zmax =
max( zmax, zma);
72 if (
PhiLess()( phimax, phi2)) phimax = phi2;
76 edm::LogError(
"TkDetLayers") <<
" ForwardDiskSectorBuilderFromWedges : "
77 <<
"Something went wrong with Phi Sorting !";
79 float phiWin = phimax -
phimin;
80 float phiPos = (phimax+
phimin)/2.;
81 float rmed = (rmin+rmax)/2.;
84 edm::LogError(
"TkDetLayers") <<
" Debug: something strange going on, please check " ;
93 return make_pair(
new DiskSectorBounds(rmin,rmax,
zmin-zPos,zmax-zPos,phiWin), pos);
std::pair< DiskSectorBounds *, GlobalVector > computeBounds(const std::vector< const TECWedge * > &wedges) const
Sin< T >::type sin(const T &t)
double phidiff(double phi)
Normalized difference in azimuthal angles to a range between .
BoundDiskSector * operator()(const std::vector< const TECWedge * > &wedges) const
Surface::RotationType computeRotation(const std::vector< const TECWedge * > &wedges, Surface::PositionType pos) const
const T & max(const T &a, const T &b)
Vector3DBase< typename PreciseFloatType< T, U >::Type, FrameTag > cross(const Vector3DBase< U, FrameTag > &v) const
Cos< T >::type cos(const T &t)
TkRotation< float > RotationType
Global3DVector GlobalVector