1 #include "gearimpl/ZPlanarLayerLayoutImpl.h"
8 double ladderDistance,
double ladderOffset,
double ladderThickness,
9 double ladderLength,
double ladderWidth,
double ladderRadLength,
11 double sensitiveDistance,
double sensitiveOffset,
double sensitiveThickness,
12 double sensitiveLength,
double sensitiveWidth,
double sensitiveRadLength )
25 lL.NLadders = nLadders ;
26 lL.internalPhi0 = M_PI/2. - phi0 ;
27 lL.Distance = ladderDistance ;
28 lL.Offset = ladderOffset ;
29 lL.Thickness = ladderThickness ;
30 lL.Length = ladderLength ;
31 lL.Width = ladderWidth ;
32 lL.RadLength = ladderRadLength ;
34 sL.NLadders = nLadders ;
35 sL.internalPhi0 = M_PI/2. - phi0 ;
36 sL.Distance = sensitiveDistance ;
37 sL.Offset = sensitiveOffset ;
38 sL.Thickness = sensitiveThickness ;
39 sL.Length = sensitiveLength ;
40 sL.Width = sensitiveWidth ;
41 sL.RadLength = sensitiveRadLength ;
43 _lVec.push_back( lL ) ;
44 _sVec.push_back( sL ) ;
53 l = _lVec.at( layerIndex ) ;
56 l = _sVec.at( layerIndex ) ;
59 float d = l.Distance + l.Thickness ;
60 float w = l.Width / 2 + fabs( l.Offset ) ;
62 double max = sqrt( d*d + w*w ) ;
72 l = _lVec.at( layerIndex ) ;
75 l = _sVec.at( layerIndex ) ;
77 return ( l.internalPhi0 + atan( (-l.Width /2 - l.Offset) / l.Distance) ) ;
85 l = _lVec.at( layerIndex ) ;
88 l = _sVec.at( layerIndex ) ;
90 return ( l.internalPhi0 + atan( (l.Width/2 - l.Offset) / l.Distance ) ) ;
99 l = _lVec.at( layerIndex ) ;
102 l = _sVec.at( layerIndex ) ;
104 return ( l.internalPhi0 - atan( (l.Width /2 + l.Offset) / (l.Distance + l.Thickness) ) ) ;
112 l = _lVec.at( layerIndex ) ;
115 l = _sVec.at( layerIndex ) ;
117 return ( l.internalPhi0 + atan( (l.Width/2 - l.Offset) / (l.Distance + l.Thickness) ) ) ;
125 l = _lVec.at( layerIndex ) ;
128 l = _sVec.at( layerIndex ) ;
131 double angularThickness ;
140 return ( l.Thickness / cos( phi ) ) ;
146 double distanceSpacePoint = l.Distance * tan( phi ) ;
149 double cutAwayLength = l.Width/2 - l.Offset - distanceSpacePoint ;
152 angularThickness = cutAwayLength / sin( phi ) ;
154 return angularThickness ;
virtual double getMaxRadius(int layerIndex, bool sensitive=false) const
returns maximum radius for a given layer
virtual double getStartOuterPhi(int layerIndex, bool sensitive=false) const
returns starting phi for first ladder in layer layerIndex (on side away from IP)
virtual double getThicknessForPhi(int layerIndex, double phi, bool sensitive=false) const
returns thickness as viewed under the angle phi only for the first ladder in layer layerIndex...
virtual void addLayer(int nLadders, double phi0, double ladderDistance, double ladderOffset, double ladderThickness, double ladderLength, double ladderWidth, double ladderRadLength, double sensitiveDistance, double sensitiveOffset, double sensitiveThickness, double sensitiveLength, double sensitiveWidth, double sensitiveRadLength)
Add a new layer at the given positon.
virtual double getEndOuterPhi(int layerIndex, bool sensitive=false) const
returns ending phi for first ladder in layer layerIndex (on side away from IP)
virtual double getEndInnerPhi(int layerIndex, bool sensitive=false) const
returns ending phi for first ladder in layer layerIndex (on side facing IP)
Helper class for layer properties.
virtual double getStartInnerPhi(int layerIndex, bool sensitive=false) const
returns starting phi for first ladder in layer layerIndex (on side facing IP)