6 #include "GeoModelKernel/GeoBox.h"
7 #include "GeoModelKernel/GeoCons.h"
8 #include "GeoModelKernel/GeoPcon.h"
9 #include "GeoModelKernel/GeoTrap.h"
10 #include "GeoModelKernel/GeoTrd.h"
11 #include "GeoModelKernel/GeoTube.h"
12 #include "GeoModelKernel/GeoTubs.h"
13 #include "GeoModelKernel/GeoSimplePolygonBrep.h"
14 #include "GeoModelKernel/GeoTessellatedSolid.h"
15 #include "GeoModelKernel/GeoFacet.h"
16 #include "GeoModelKernel/GeoGenericTrap.h"
17 #include "GeoModelKernel/GeoUnidentifiedShape.h"
31 #include "GeoModelKernel/Units.h"
32 #define SYSTEM_OF_UNITS GeoModelKernelUnits // --> 'GeoModelKernelUnits::cm'
34 #include "GaudiKernel/SystemOfUnits.h"
35 #define SYSTEM_OF_UNITS Gaudi::Units // --> 'Gaudi::Units::cm'
55 const GeoUnidentifiedShape* custom =
dynamic_cast< const GeoUnidentifiedShape*
>( shape );
57 std::string customName = custom->name();
58 static const double eta_hi = 3.2;
59 static const double eta_mid = 2.5;
60 static const double eta_low = 1.375;
67 static const double wheelThickness = activeLength+2*straightStartSection;
71 if (customName.find(
"Inner")!=std::string::npos) {
72 float zPlane[2],rInner[2],rOuter[2];
74 zPlane[1]=wheelThickness;
76 double tanThetaInner = 2. *
exp(-eta_hi ) / (1. -
exp(2.*-eta_hi ));
77 double tanThetaMid = 2. *
exp(-eta_mid) / (1. -
exp(2.*-eta_mid));
78 double zWheelFrontFace = dMechFocaltoWRP + dWRPtoFrontFace;
79 double zWheelBackFace = zWheelFrontFace + wheelThickness;
80 rInner[0] = zWheelFrontFace * tanThetaInner;
81 rInner[1] = zWheelBackFace * tanThetaInner;
85 rOuter[0] = zWheelFrontFace * tanThetaMid - HalfGapBetweenWheels;
86 rOuter[1] = zWheelBackFace * tanThetaMid - HalfGapBetweenWheels;
87 solar->
fRmin.setValues(0,2,rInner);
88 solar->
fRmax.setValues(0,2,rOuter);
89 solar->
fDz.setValues (0,2,zPlane);
91 else if (customName.find(
"Outer")!=std::string::npos) {
92 float zPlane[3], rInner[3], rOuter[3];
94 zPlane[2] = wheelThickness;
95 double tanThetaMid = 2. *
exp(-eta_mid) / (1. -
exp(2.*-eta_mid));
96 double tanThetaOuter = 2. *
exp(-eta_low) / (1. -
exp(2.*-eta_low));
97 double zWheelFrontFace = dMechFocaltoWRP + dWRPtoFrontFace;
98 double zWheelBackFace = zWheelFrontFace + wheelThickness;
102 rInner[0] = zWheelFrontFace * tanThetaMid + HalfGapBetweenWheels;
103 rInner[2] = zWheelBackFace * tanThetaMid + HalfGapBetweenWheels;
104 rOuter[0] = zWheelFrontFace * tanThetaOuter;
105 rOuter[2] = zWheelBackFace * tanThetaOuter;
112 double slopeMin = (rInner[2] - rInner[0]) / (zPlane[2] - zPlane[0]);
113 double slopeMax = (rOuter[2] - rOuter[0]) / (zPlane[2] - zPlane[0]);
114 double interceptMin = rInner[0] - slopeMin * zPlane[0];
115 double interceptMax = rOuter[0] - slopeMax * zPlane[0];
117 zPlane[1] = (rOuterCutoff - interceptMax) / slopeMax;
119 rInner[1] = slopeMin * zPlane[1] + interceptMin;
120 rOuter[1] = rOuterCutoff;
122 rOuter[2] = rOuterCutoff;
123 solar->
fRmin.setValues(0,3,rInner);
124 solar->
fRmax.setValues(0,3,rOuter);
125 solar->
fDz.setValues (0,3,zPlane);
132 #endif // not BUILDVP1LIGHT
141 #ifndef BUILDVP1LIGHT
143 #endif // not BUILDVP1LIGHT
150 gb->
setParametersForBox( box->getXHalfLength(),box->getYHalfLength(),box->getZHalfLength() );
159 socons->
fRmin1 =cons->getRMin1();
160 socons->
fRmin2 =cons->getRMin2();
161 socons->
fRmax1 =cons->getRMax1();
162 socons->
fRmax2 =cons->getRMax2();
163 socons->
fDz =cons->getDZ();
164 socons->
fSPhi =cons->getSPhi();
165 socons->
fDPhi =cons->getDPhi();
176 float *
z =
new float[pcon->getNPlanes()];
177 float *rmn=
new float[pcon->getNPlanes()];
178 float *rmx=
new float[pcon->getNPlanes()];
180 for (
unsigned s=0;
s<pcon->getNPlanes();++
s) {
181 z[
s]=pcon->getZPlane(
s);
182 rmn[
s]=pcon->getRMinPlane(
s);
183 rmx[
s]=pcon->getRMaxPlane(
s);
188 sopcons->
fSPhi = pcon->getSPhi();
189 sopcons->
fDPhi = pcon->getDPhi();
190 sopcons->
fRmin.setValues(0,pcon->getNPlanes(),rmn);
191 sopcons->
fRmax.setValues(0,pcon->getNPlanes(),rmx);
192 sopcons->
fDz.setValues (0,pcon->getNPlanes(),
z);
208 trap->getDydzn(), trap->getDxdyndzn(), trap->getDxdypdzn(),
209 trap->getDydzp(), trap->getDxdyndzp(), trap->getDxdypdzp(),
210 trap->getAngleydzn(), trap->getAngleydzp());
219 trd->getYHalfLength1(), trd->getYHalfLength2(),
220 trd->getZHalfLength() );
230 sotubs->
pDz =
tube->getZHalfLength();
240 sotubs->
pRMin= tubs->getRMin();
241 sotubs->
pRMax= tubs->getRMax();
242 sotubs->
pDz = tubs->getZHalfLength();
243 sotubs->
pSPhi= tubs->getSPhi();
244 sotubs->
pDPhi= tubs->getDPhi();
253 double dz = brep->getDZ();
254 std::vector<double>
x,
y;
255 for(
unsigned int i=0;
i<brep->getNVertices(); ++
i)
257 x.push_back(brep->getXVertex(
i));
258 y.push_back(brep->getYVertex(
i));
271 for(
size_t i=0;
i<geoTessellated->getNumberOfFacets();++
i) {
272 GeoFacet* facet = geoTessellated->getFacet(
i);
273 if(facet->getNumberOfVertices()==3) {
274 if(facet->getVertexType()==GeoFacet::ABSOLUTE)
275 soTessellated->
addTriangularFacet(facet->getVertex(0).x(),facet->getVertex(0).y(),facet->getVertex(0).z(),
276 facet->getVertex(1).x(),facet->getVertex(1).y(),facet->getVertex(1).z(),
277 facet->getVertex(2).x(),facet->getVertex(2).y(),facet->getVertex(2).z());
279 soTessellated->
addTriangularFacet(facet->getVertex(0).x(),facet->getVertex(0).y(),facet->getVertex(0).z(),
280 facet->getVertex(0).x()+facet->getVertex(1).x(),
281 facet->getVertex(0).y()+facet->getVertex(1).y(),
282 facet->getVertex(0).z()+facet->getVertex(1).z(),
283 facet->getVertex(0).x()+facet->getVertex(2).x(),
284 facet->getVertex(0).y()+facet->getVertex(2).y(),
285 facet->getVertex(0).z()+facet->getVertex(2).z());
288 if(facet->getVertexType()==GeoFacet::ABSOLUTE)
289 soTessellated->
addQuadrangularFacet(facet->getVertex(0).x(),facet->getVertex(0).y(),facet->getVertex(0).z(),
290 facet->getVertex(1).x(),facet->getVertex(1).y(),facet->getVertex(1).z(),
291 facet->getVertex(2).x(),facet->getVertex(2).y(),facet->getVertex(2).z(),
292 facet->getVertex(3).x(),facet->getVertex(3).y(),facet->getVertex(3).z());
294 soTessellated->
addQuadrangularFacet(facet->getVertex(0).x(),facet->getVertex(0).y(),facet->getVertex(0).z(),
295 facet->getVertex(0).x()+facet->getVertex(1).x(),
296 facet->getVertex(0).y()+facet->getVertex(1).y(),
297 facet->getVertex(0).z()+facet->getVertex(1).z(),
298 facet->getVertex(0).x()+facet->getVertex(2).x(),
299 facet->getVertex(0).y()+facet->getVertex(2).y(),
300 facet->getVertex(0).z()+facet->getVertex(2).z(),
301 facet->getVertex(0).x()+facet->getVertex(3).x(),
302 facet->getVertex(0).y()+facet->getVertex(3).y(),
303 facet->getVertex(0).z()+facet->getVertex(3).z());
315 const GeoGenericTrapVertices& trapVertices = gentrap->getVertices();
316 double dZ = gentrap->getZHalfLength();
318 trapVertices[1].
x(),trapVertices[1].
y(),-dZ,
319 trapVertices[2].
x(),trapVertices[2].
y(),-dZ,
320 trapVertices[3].
x(),trapVertices[3].
y(),-dZ,
321 trapVertices[4].
x(),trapVertices[4].
y(),dZ,
322 trapVertices[5].
x(),trapVertices[5].
y(),dZ,
323 trapVertices[6].
x(),trapVertices[6].
y(),dZ,
324 trapVertices[7].
x(),trapVertices[7].
y(),dZ);