source: trunk/documents/UserDoc/DocBookUsersGuides/ForApplicationDeveloper/xml/Detector/geomSolids.xml@ 1197

Last change on this file since 1197 was 904, checked in by garnier, 17 years ago

ajout de la doc

File size: 75.3 KB
Line 
1<!-- ******************************************************** -->
2<!-- -->
3<!-- [History] -->
4<!-- Converted to DocBook: Katsuya Amako, Aug-2006 -->
5<!-- Changed by: Gabriele Cosmo, 18-Apr-2005 -->
6<!-- -->
7<!-- ******************************************************** -->
8
9
10<!-- ******************* Section (Level#2) ****************** -->
11<sect2 id="sect.Geom.Solids">
12<title>
13Solids
14</title>
15
16<para>
17The STEP standard supports multiple solid representations.
18Constructive Solid Geometry (CSG) representations and Boundary
19Represented Solids (BREPs) are available. Different representations
20are suitable for different purposes, applications, required
21complexity, and levels of detail. CSG representations are easy to
22use and normally give superior performance, but they cannot
23reproduce complex solids such as those used in CAD systems. BREP
24representations can handle more extended topologies and reproduce
25the most complex solids.
26</para>
27
28<para>
29All constructed solids can stream out their contents via
30appropriate methods and streaming operators.
31</para>
32
33<para>
34For all solids it is possible to estimate the geometrical volume and the
35surface area by invoking the methods:
36
37<informalexample>
38<programlisting>
39 G4double GetCubicVolume()
40 G4double GetSurfaceArea()
41</programlisting>
42</informalexample>
43
44which return an estimate of the solid volume and total area in internal
45units respectively. For elementary solids the functions compute the exact
46geometrical quantities, while for composite or complex solids an estimate
47is made using Monte Carlo techniques.
48</para>
49
50<para>
51For all solids it is also possible to generate pseudo-random
52points lying on their surfaces, by invoking the method
53
54<informalexample>
55<programlisting>
56 G4ThreeVector GetPointOnSurface() const
57</programlisting>
58</informalexample>
59
60which returns the generated point in local coordinates relative to
61the solid.
62</para>
63
64
65<!-- ******************* Section (Level#3) ****************** -->
66<sect3 id="sect.Geom.Solids.CSG">
67<title>
68Constructed Solid Geometry (CSG) Solids
69</title>
70
71<para>
72CSG solids are defined directly as three-dimensional primitives.
73They are described by a minimal set of parameters necessary to
74define the shape and size of the solid. CSG solids are Boxes, Tubes
75and their sections, Cones and their sections, Spheres, Wedges, and
76Toruses.
77</para>
78
79<!-- ******* Bridgehead ******* -->
80<bridgehead renderas='sect4'>
81Box:
82</bridgehead>
83
84<para>
85To create a <emphasis role="bold">box</emphasis> one can use the constructor:
86
87<informaltable frame="none" pgwide="0">
88<tgroup cols="2" colsep="0">
89<tbody>
90<row>
91 <entry valign="top" align="left">
92 <informalexample>
93 <programlisting>
94 G4Box(const G4String&amp; pName,
95 G4double pX,
96 G4double pY,
97 G4double pZ)
98 </programlisting>
99 </informalexample>
100 </entry>
101 <entry valign="top" align="center">
102 <mediaobject>
103 <imageobject role="fo">
104 <imagedata fileref="./AllResources/Detector/geometry.src/aBox.jpg"
105 format="JPG" contentwidth="3.5cm" />
106 </imageobject>
107 <imageobject role="html">
108 <imagedata fileref="./AllResources/Detector/geometry.src/aBox.jpg"
109 format="JPG" />
110 </imageobject>
111 </mediaobject>
112
113 <?JavaScript pic1.html ?>
114 <emphasis role="underline">In the picture</emphasis>:
115 <literal>
116 <para>
117 pX = 30, pY = 40, pZ = 60
118 </para>
119 </literal>
120 </entry>
121</row>
122</tbody>
123</tgroup>
124</informaltable>
125</para>
126
127<para>
128by giving the box a name and its half-lengths along the X, Y and
129Z axis:
130<informaltable pgwide="0">
131<tgroup cols="6">
132<tbody>
133<row>
134 <entry>
135 <literal>pX</literal>
136 </entry>
137 <entry>
138 half length in X
139 </entry>
140 <entry>
141 <literal>pY</literal>
142 </entry>
143 <entry>
144 half length in Y
145 </entry>
146 <entry>
147 <literal>pZ</literal>
148 </entry>
149 <entry>
150 half length in Z
151 </entry>
152</row>
153</tbody>
154</tgroup>
155</informaltable>
156</para>
157
158<para>
159This will create a box that extends from <literal>-pX</literal> to
160<literal>+pX</literal> in X, from <literal>-pY</literal> to
161<literal>+pY</literal> in Y, and from
162<literal>-pZ</literal> to <literal>+pZ</literal> in Z.
163</para>
164
165<para>
166For example to create a box that is 2 by 6 by 10 centimeters in
167full length, and called <literal>BoxA</literal> one should use the following
168code:
169<informalexample>
170<programlisting>
171 G4Box* aBox = new G4Box("BoxA", 1.0*cm, 3.0*cm, 5.0*cm);
172</programlisting>
173</informalexample>
174</para>
175
176<!-- ******* Bridgehead ******* -->
177<bridgehead renderas='sect4'>
178Cylindrical Section or Tube:
179</bridgehead>
180
181<para>
182Similarly to create a <emphasis role="bold">cylindrical section</emphasis>
183or <emphasis role="bold">tube</emphasis>, one would use the constructor:
184
185<informaltable frame="none" pgwide="0">
186<tgroup cols="2" colsep="0">
187<tbody>
188<row>
189 <entry valign="top" align="left">
190 <informalexample>
191 <programlisting>
192 G4Tubs(const G4String&amp; pName,
193 G4double pRMin,
194 G4double pRMax,
195 G4double pDz,
196 G4double pSPhi,
197 G4double pDPhi)
198 </programlisting>
199 </informalexample>
200 </entry>
201 <entry valign="top" align="center">
202 <mediaobject>
203 <imageobject role="fo">
204 <imagedata fileref="./AllResources/Detector/geometry.src/aTubs.jpg"
205 format="JPG" contentwidth="3.5cm" />
206 </imageobject>
207 <imageobject role="html">
208 <imagedata fileref="./AllResources/Detector/geometry.src/aTubs.jpg"
209 format="JPG" />
210 </imageobject>
211 </mediaobject>
212
213 <?JavaScript pic2.html ?>
214 <emphasis role="underline">In the picture</emphasis>:
215 <literal>
216 <para>
217 pRMin = 10, pRMax = 15, pDz = 20
218 </para>
219 </literal>
220 </entry>
221</row>
222</tbody>
223</tgroup>
224</informaltable>
225</para>
226
227<para>
228giving its name <literal>pName</literal> and its parameters which are:
229<informaltable pgwide="0">
230<tgroup cols="4">
231<tbody>
232<row>
233 <entry>
234 <literal>pRMin</literal>
235 </entry>
236 <entry>
237 Inner radius
238 </entry>
239 <entry>
240 <literal>pRMax</literal>
241 </entry>
242 <entry>
243 Outer radius
244 </entry>
245</row>
246<row>
247 <entry>
248 <literal>pDz</literal>
249 </entry>
250 <entry>
251 half length in z
252 </entry>
253 <entry>
254 <literal>pSPhi</literal>
255 </entry>
256 <entry>
257 the starting phi angle in radians
258 </entry>
259</row>
260<row>
261 <entry>
262 <literal>pDPhi</literal>
263 </entry>
264 <entry>
265 the angle of the segment in radians
266 </entry>
267</row>
268</tbody>
269</tgroup>
270</informaltable>
271</para>
272
273<!-- ******* Bridgehead ******* -->
274<bridgehead renderas='sect4'>
275Cone or Conical section:
276</bridgehead>
277
278<para>
279Similarly to create a <emphasis role="bold">cone</emphasis>, or
280<emphasis role="bold">conical section</emphasis>, one would use the constructor
281
282<informaltable frame="none" pgwide="0">
283<tgroup cols="2" colsep="0">
284<tbody>
285<row>
286 <entry valign="top" align="left">
287 <informalexample>
288 <programlisting>
289 G4Cons(const G4String&amp; pName,
290 G4double pRmin1,
291 G4double pRmax1,
292 G4double pRmin2,
293 G4double pRmax2,
294 G4double pDz,
295 G4double pSPhi,
296 G4double pDPhi)
297 </programlisting>
298 </informalexample>
299 </entry>
300 <entry valign="top" align="center">
301 <mediaobject>
302 <imageobject role="fo">
303 <imagedata fileref="./AllResources/Detector/geometry.src/aCons.jpg"
304 format="JPG" contentwidth="3.5cm" />
305 </imageobject>
306 <imageobject role="html">
307 <imagedata fileref="./AllResources/Detector/geometry.src/aCons.jpg"
308 format="JPG" />
309 </imageobject>
310 </mediaobject>
311
312 <?JavaScript pic3.html ?>
313 <emphasis role="underline">In the picture</emphasis>:
314 <literal>
315 <para>
316 pRmin1 = 5, pRmax1 = 10,
317 pRmin2 = 20, pRmax2 = 25,
318 pDz = 40, pSPhi = 0, pDPhi = 4/3*Pi
319 </para>
320 </literal>
321 </entry>
322</row>
323</tbody>
324</tgroup>
325</informaltable>
326</para>
327
328<para>
329giving its name <literal>pName</literal>, and its parameters which are:
330<informaltable pgwide="0">
331<tgroup cols="4">
332<tbody>
333<row>
334 <entry>
335 <literal>pRmin1</literal>
336 </entry>
337 <entry>
338 inside radius at <literal>-pDz</literal>
339 </entry>
340 <entry>
341 <literal>pRmax1</literal>
342 </entry>
343 <entry>
344 outside radius at <literal>-pDz</literal>
345 </entry>
346</row>
347<row>
348 <entry>
349 <literal>pRmin2</literal>
350 </entry>
351 <entry>
352 inside radius at <literal>+pDz</literal>
353 </entry>
354 <entry>
355 <literal>pRmax2</literal>
356 </entry>
357 <entry>
358 outside radius at <literal>+pDz</literal>
359 </entry>
360</row>
361<row>
362 <entry>
363 <literal>pDz</literal>
364 </entry>
365 <entry>
366 half length in z
367 </entry>
368 <entry>
369 <literal>pSPhi</literal>
370 </entry>
371 <entry>
372 starting angle of the segment in radians
373 </entry>
374</row>
375<row>
376 <entry>
377 <literal>pDPhi</literal>
378 </entry>
379 <entry>
380 the angle of the segment in radians
381 </entry>
382</row>
383</tbody>
384</tgroup>
385</informaltable>
386</para>
387
388<!-- ******* Bridgehead ******* -->
389<bridgehead renderas='sect4'>
390Parallelepiped:
391</bridgehead>
392
393<para>
394A <emphasis role="bold">parallelepiped</emphasis> is constructed
395using:
396
397<informaltable frame="none" pgwide="0">
398<tgroup cols="2" colsep="0">
399<tbody>
400<row>
401 <entry valign="top" align="left">
402 <informalexample>
403 <programlisting>
404 G4Para(const G4String&amp; pName,
405 G4double dx,
406 G4double dy,
407 G4double dz,
408 G4double alpha,
409 G4double theta,
410 G4double phi)
411 </programlisting>
412 </informalexample>
413 </entry>
414 <entry valign="top" align="center">
415 <mediaobject>
416 <imageobject role="fo">
417 <imagedata fileref="./AllResources/Detector/geometry.src/aPara.jpg"
418 format="JPG" contentwidth="3.5cm" />
419 </imageobject>
420 <imageobject role="html">
421 <imagedata fileref="./AllResources/Detector/geometry.src/aPara.jpg"
422 format="JPG" />
423 </imageobject>
424 </mediaobject>
425
426 <?JavaScript pic4.html ?>
427 <emphasis role="underline">In the picture</emphasis>:
428 <literal>
429 <para>
430 dx = 30, dy = 40, dz = 60
431 </para>
432 </literal>
433 </entry>
434</row>
435</tbody>
436</tgroup>
437</informaltable>
438</para>
439
440<para>
441giving its name <literal>pName</literal> and its parameters which are:
442<informaltable pgwide="0">
443<tgroup cols="2">
444<tbody>
445<row>
446 <entry>
447 <literal>dx,dy,dz</literal>
448 </entry>
449 <entry>
450 Half-length in x,y,z
451 </entry>
452</row>
453<row>
454 <entry>
455 <literal>alpha</literal>
456 </entry>
457 <entry>
458 Angle formed by the y axis and by the plane joining the centre
459 of the faces <emphasis>parallel</emphasis> to the z-x plane at -dy and +dy
460 </entry>
461</row>
462<row>
463 <entry>
464 <literal>theta</literal>
465 </entry>
466 <entry>
467 Polar angle of the line joining the centres of the faces at -dz
468 and +dz in z
469 </entry>
470</row>
471<row>
472 <entry>
473 <literal>phi</literal>
474 </entry>
475 <entry>
476 Azimuthal angle of the line joining the centres of the faces at
477 -dz and +dz in z
478 </entry>
479</row>
480</tbody>
481</tgroup>
482</informaltable>
483</para>
484
485<!-- ******* Bridgehead ******* -->
486<bridgehead renderas='sect4'>
487Trapezoid:
488</bridgehead>
489
490<para>
491To construct a <emphasis role="bold">trapezoid</emphasis> use:
492
493<informaltable frame="none" pgwide="0">
494<tgroup cols="2" colsep="0">
495<tbody>
496<row>
497 <entry valign="top" align="left">
498 <informalexample>
499 <programlisting>
500 G4Trd(const G4String&amp; pName,
501 G4double dx1,
502 G4double dx2,
503 G4double dy1,
504 G4double dy2,
505 G4double dz)
506 </programlisting>
507 </informalexample>
508 </entry>
509 <entry valign="top" align="center">
510 <mediaobject>
511 <imageobject role="fo">
512 <imagedata fileref="./AllResources/Detector/geometry.src/aTrd.jpg"
513 format="JPG" contentwidth="3.5cm" />
514 </imageobject>
515 <imageobject role="html">
516 <imagedata fileref="./AllResources/Detector/geometry.src/aTrd.jpg"
517 format="JPG" />
518 </imageobject>
519 </mediaobject>
520
521 <?JavaScript pic5.html ?>
522 <emphasis role="underline">In the picture</emphasis>:
523 <literal>
524 <para>
525 dx1 = 30, dx2 = 10,
526 dy1 = 40, dy2 = 15,
527 dz = 60
528 </para>
529 </literal>
530 </entry>
531</row>
532</tbody>
533</tgroup>
534</informaltable>
535</para>
536
537<para>
538to obtain a solid with name <literal>pName</literal> and parameters
539
540<informaltable pgwide="0">
541<tgroup cols="2">
542<tbody>
543<row>
544 <entry>
545 <literal>dx1</literal>
546 </entry>
547 <entry>
548 Half-length along x at the surface positioned at <literal>-dz</literal>
549 </entry>
550</row>
551<row>
552 <entry>
553 <literal>dx2</literal>
554 </entry>
555 <entry>
556 Half-length along x at the surface positioned at <literal>+dz</literal>
557 </entry>
558</row>
559<row>
560 <entry>
561 <literal>dy1</literal>
562 </entry>
563 <entry>
564 Half-length along y at the surface positioned at <literal>-dz</literal>
565 </entry>
566</row>
567<row>
568 <entry>
569 <literal>dy2</literal>
570 </entry>
571 <entry>
572 Half-length along y at the surface positioned at <literal>+dz</literal>
573 </entry>
574</row>
575<row>
576 <entry>
577 <literal>dz</literal>
578 </entry>
579 <entry>
580 Half-length along z axis
581 </entry>
582</row>
583</tbody>
584</tgroup>
585</informaltable>
586</para>
587
588<!-- ******* Bridgehead ******* -->
589<bridgehead renderas='sect4'>
590Generic Trapezoid:
591</bridgehead>
592
593<para>
594To build a <emphasis role="bold">generic trapezoid</emphasis>,
595the <literal>G4Trap</literal> class is provided. Here are the two costructors
596for a Right Angular Wedge and for the general trapezoid for it:
597
598<informaltable frame="none" pgwide="0">
599<tgroup cols="2" colsep="0">
600<tbody>
601<row>
602 <entry valign="top" align="left">
603 <informalexample>
604 <programlisting>
605 G4Trap(const G4String&amp; pName,
606 G4double pZ,
607 G4double pY,
608 G4double pX,
609 G4double pLTX)
610
611 G4Trap(const G4String&amp; pName,
612 G4double pDz, G4double pTheta,
613 G4double pPhi, G4double pDy1,
614 G4double pDx1, G4double pDx2,
615 G4double pAlp1, G4double pDy2,
616 G4double pDx3, G4double pDx4,
617 G4double pAlp2)
618 </programlisting>
619 </informalexample>
620 </entry>
621 <entry valign="top" align="center">
622 <mediaobject>
623 <imageobject role="fo">
624 <imagedata fileref="./AllResources/Detector/geometry.src/aTrap.jpg"
625 format="JPG" contentwidth="3.5cm" />
626 </imageobject>
627 <imageobject role="html">
628 <imagedata fileref="./AllResources/Detector/geometry.src/aTrap.jpg"
629 format="JPG" />
630 </imageobject>
631 </mediaobject>
632
633 <?JavaScript pic6.html ?>
634 <emphasis role="underline">In the picture</emphasis>:
635 <literal>
636 <para>
637 pDx1 = 30, pDx2 = 40, pDy1 = 40,
638 pDx3 = 10, pDx4 = 14, pDy2 = 16,
639 pDz = 60, pTheta = 20*Degree,
640 pPhi = 5*Degree, pAlp1 = pAlp2 = 10*Degree
641 </para>
642 </literal>
643 </entry>
644</row>
645</tbody>
646</tgroup>
647</informaltable>
648</para>
649
650<para>
651to obtain a Right Angular Wedge with name <literal>pName</literal> and
652parameters:
653<informaltable pgwide="0">
654<tgroup cols="2">
655<tbody>
656<row>
657 <entry>
658 <literal>pZ</literal>
659 </entry>
660 <entry>
661 Length along z
662 </entry>
663</row>
664<row>
665 <entry>
666 <literal>pY</literal>
667 </entry>
668 <entry>
669 Length along y
670 </entry>
671</row>
672<row>
673 <entry>
674 <literal>pX</literal>
675 </entry>
676 <entry>
677 Length along x at the wider side
678 </entry>
679</row>
680<row>
681 <entry>
682 <literal>pLTX</literal>
683 </entry>
684 <entry>
685 Length along x at the narrower side (<literal>plTX&lt;=pX</literal>)
686 </entry>
687</row>
688</tbody>
689</tgroup>
690</informaltable>
691</para>
692
693<para>
694or to obtain the general trapezoid (see the Software Reference
695Manual):
696</para>
697
698<para>
699<informaltable pgwide="0">
700<tgroup cols="2">
701<tbody>
702<row>
703 <entry>
704 <literal>pDx1</literal>
705 </entry>
706 <entry>
707 Half x length of the side at y=-pDy1 of the face at -pDz
708 </entry>
709</row>
710<row>
711 <entry>
712 <literal>pDx2</literal>
713 </entry>
714 <entry>
715 Half x length of the side at y=+pDy1 of the face at -pDz
716 </entry>
717</row>
718<row>
719 <entry>
720 <literal>pDz</literal>
721 </entry>
722 <entry>
723 Half z length
724 </entry>
725</row>
726<row>
727 <entry>
728 <literal>pTheta</literal>
729 </entry>
730 <entry>
731 Polar angle of the line joining the centres of the faces at -/+pDz
732 </entry>
733</row>
734<row>
735 <entry>
736 <literal>pPhi</literal>
737 </entry>
738 <entry>
739 Azimuthal angle of the line joining the centre of the face at -pDz to the centre of the face at +pDz
740 </entry>
741</row>
742<row>
743 <entry>
744 <literal>pDy1</literal>
745 </entry>
746 <entry>
747 Half y length at -pDz
748 </entry>
749</row>
750<row>
751 <entry>
752 <literal>pDy2</literal>
753 </entry>
754 <entry>
755 Half y length at +pDz
756 </entry>
757</row>
758<row>
759 <entry>
760 <literal>pDx3</literal>
761 </entry>
762 <entry>
763 Half x length of the side at y=-pDy2 of the face at +pDz
764 </entry>
765</row>
766<row>
767 <entry>
768 <literal>pDx4</literal>
769 </entry>
770 <entry>
771 Half x length of the side at y=+pDy2 of the face at +pDz
772 </entry>
773</row>
774<row>
775 <entry>
776 <literal>pAlp1</literal>
777 </entry>
778 <entry>
779 Angle with respect to the y axis from the centre of the side
780 (lower endcap)
781 </entry>
782</row>
783<row>
784 <entry>
785 <literal>pAlp2</literal>
786 </entry>
787 <entry>
788 Angle with respect to the y axis from the centre of the side
789 (upper endcap)
790 </entry>
791</row>
792</tbody>
793</tgroup>
794</informaltable>
795</para>
796
797<para>
798<emphasis role="bold">Note on <literal>pAlph1/2</literal></emphasis>: the
799two angles have to be the
800same due to the planarity condition.
801</para>
802
803<!-- ******* Bridgehead ******* -->
804<bridgehead renderas='sect4'>
805Sphere or Spherical Shell Section:
806</bridgehead>
807
808<para>
809To build a <emphasis role="bold">sphere</emphasis>, or a
810<emphasis role="bold">spherical shell section</emphasis>, use:
811
812<informaltable frame="none" pgwide="0">
813<tgroup cols="2" colsep="0">
814<tbody>
815<row>
816 <entry valign="top" align="left">
817 <informalexample>
818 <programlisting>
819 G4Sphere(const G4String&amp; pName,
820 G4double pRmin,
821 G4double pRmax,
822 G4double pSPhi,
823 G4double pDPhi,
824 G4double pSTheta,
825 G4double pDTheta )
826 </programlisting>
827 </informalexample>
828 </entry>
829 <entry valign="top" align="center">
830 <mediaobject>
831 <imageobject role="fo">
832 <imagedata fileref="./AllResources/Detector/geometry.src/aSphere.jpg"
833 format="JPG" contentwidth="3.5cm" />
834 </imageobject>
835 <imageobject role="html">
836 <imagedata fileref="./AllResources/Detector/geometry.src/aSphere.jpg"
837 format="JPG" />
838 </imageobject>
839 </mediaobject>
840
841 <?JavaScript pic7.html ?>
842 <emphasis role="underline">In the picture</emphasis>:
843 <literal>
844 <para>
845 pRmin = 100, pRmax = 120,
846 pSPhi = 0*Degree, pDPhi = 180*Degree,
847 pSTheta = 0 Degree, pDTheta = 180*Degree
848 </para>
849 </literal>
850 </entry>
851</row>
852</tbody>
853</tgroup>
854</informaltable>
855</para>
856
857<para>
858to obtain a solid with name <literal>pName</literal> and parameters:
859
860<informaltable pgwide="0">
861<tgroup cols="2">
862<tbody>
863<row>
864 <entry>
865 pRmin
866 </entry>
867 <entry>
868 Inner radius
869 </entry>
870</row>
871<row>
872 <entry>
873 pRmax
874 </entry>
875 <entry>
876 Outer radius
877 </entry>
878</row>
879<row>
880 <entry>
881 pSPhi
882 </entry>
883 <entry>
884 Starting Phi angle of the segment in radians
885 </entry>
886</row>
887<row>
888 <entry>
889 pDPhi
890 </entry>
891 <entry>
892 Delta Phi angle of the segment in radians
893 </entry>
894</row>
895<row>
896 <entry>
897 pSTheta
898 </entry>
899 <entry>
900 Starting Theta angle of the segment in radians
901 </entry>
902</row>
903<row>
904 <entry>
905 pDTheta
906 </entry>
907 <entry>
908 Delta Theta angle of the segment in radians
909 </entry>
910</row>
911</tbody>
912</tgroup>
913</informaltable>
914</para>
915
916<!-- ******* Bridgehead ******* -->
917<bridgehead renderas='sect4'>
918Full Solid Sphere:
919</bridgehead>
920
921<para>
922To build a <emphasis role="bold">full solid sphere</emphasis>
923use:
924
925<informaltable frame="none" pgwide="0">
926<tgroup cols="2" colsep="0">
927<tbody>
928<row>
929 <entry valign="top" align="left">
930 <informalexample>
931 <programlisting>
932 G4Orb(const G4String&amp; pName,
933 G4double pRmax)
934 </programlisting>
935 </informalexample>
936 </entry>
937 <entry valign="top" align="center">
938 <mediaobject>
939 <imageobject role="fo">
940 <imagedata fileref="./AllResources/Detector/geometry.src/aOrb.jpg"
941 format="JPG" contentwidth="3.5cm" />
942 </imageobject>
943 <imageobject role="html">
944 <imagedata fileref="./AllResources/Detector/geometry.src/aOrb.jpg"
945 format="JPG" />
946 </imageobject>
947 </mediaobject>
948
949 <?JavaScript pic8.html ?>
950 <emphasis role="underline">In the picture</emphasis>:
951 <literal>
952 <para>
953 pRmax = 100
954 </para>
955 </literal>
956 </entry>
957</row>
958</tbody>
959</tgroup>
960</informaltable>
961</para>
962
963<para>
964The Orb can be obtained from a Sphere with:
965<literal>pRmin</literal> = 0, <literal>pSPhi</literal> = 0,
966<literal>pDPhi</literal> = 2*Pi,
967<literal>pSTheta</literal> = 0, <literal>pDTheta</literal> = Pi
968
969<informaltable pgwide="0">
970<tgroup cols="2">
971<tbody>
972<row>
973 <entry>
974 pRmax
975 </entry>
976 <entry>
977 Outer radius
978 </entry>
979</row>
980</tbody>
981</tgroup>
982</informaltable>
983</para>
984
985<!-- ******* Bridgehead ******* -->
986<bridgehead renderas='sect4'>
987Torus:
988</bridgehead>
989
990<para>
991To build a <emphasis role="bold">torus</emphasis> use:
992
993<informaltable frame="none" pgwide="0">
994<tgroup cols="2" colsep="0">
995<tbody>
996<row>
997 <entry valign="top" align="left">
998 <informalexample>
999 <programlisting>
1000 G4Torus(const G4String&amp; pName,
1001 G4double pRmin,
1002 G4double pRmax,
1003 G4double pRtor,
1004 G4double pSPhi,
1005 G4double pDPhi)
1006 </programlisting>
1007 </informalexample>
1008 </entry>
1009 <entry valign="top" align="center">
1010 <mediaobject>
1011 <imageobject role="fo">
1012 <imagedata fileref="./AllResources/Detector/geometry.src/aTorus.jpg"
1013 format="JPG" contentwidth="3.5cm" />
1014 </imageobject>
1015 <imageobject role="html">
1016 <imagedata fileref="./AllResources/Detector/geometry.src/aTorus.jpg"
1017 format="JPG" />
1018 </imageobject>
1019 </mediaobject>
1020
1021 <?JavaScript pic9.html ?>
1022 <emphasis role="underline">In the picture</emphasis>:
1023 <literal>
1024 <para>
1025 pRmin = 40, pRmax = 60, pRtor = 200,
1026 pSPhi = 0, pDPhi = 90*Degree
1027 </para>
1028 </literal>
1029 </entry>
1030</row>
1031</tbody>
1032</tgroup>
1033</informaltable>
1034</para>
1035
1036<para>
1037to obtain a solid with name <literal>pName</literal> and parameters:
1038
1039<informaltable pgwide="0">
1040<tgroup cols="2">
1041<tbody>
1042<row>
1043 <entry>
1044 pRmin
1045 </entry>
1046 <entry>
1047 Inside radius
1048 </entry>
1049</row>
1050<row>
1051 <entry>
1052 pRmax
1053 </entry>
1054 <entry>
1055 Outside radius
1056 </entry>
1057</row>
1058<row>
1059 <entry>
1060 pRtor
1061 </entry>
1062 <entry>
1063 Swept radius of torus
1064 </entry>
1065</row>
1066<row>
1067 <entry>
1068 pSPhi
1069 </entry>
1070 <entry>
1071 Starting Phi angle in radians (<literal>fSPhi+fDPhi&lt;=2PI</literal>,
1072 <literal>fSPhi&gt;-2PI</literal>)
1073 </entry>
1074</row>
1075<row>
1076 <entry>
1077 pDPhi
1078 </entry>
1079 <entry>
1080 Delta angle of the segment in radians
1081 </entry>
1082</row>
1083</tbody>
1084</tgroup>
1085</informaltable>
1086</para>
1087
1088<para>
1089In addition, the Geant4 Design Documentation shows in the Solids
1090Class Diagram the complete list of CSG classes, and the STEP
1091documentation contains a detailed EXPRESS description of each CSG
1092solid.
1093</para>
1094
1095
1096
1097<!-- ******* Bridgehead ******* -->
1098<bridgehead renderas='sect3'>
1099Specific CSG Solids
1100</bridgehead>
1101
1102<!-- ******* Bridgehead ******* -->
1103<bridgehead renderas='sect4'>
1104Polycons:
1105</bridgehead>
1106
1107<para>
1108<emphasis role="bold">Polycons</emphasis> (PCON) are implemented in Geant4 through the
1109<literal>G4Polycon</literal> class:
1110
1111<informaltable frame="none" pgwide="0">
1112<tgroup cols="2" colsep="0">
1113<tbody>
1114<row>
1115 <entry valign="top" align="left">
1116 <informalexample>
1117 <programlisting>
1118 G4Polycone(const G4String&amp; pName,
1119 G4double phiStart,
1120 G4double phiTotal,
1121 G4int numZPlanes,
1122 const G4double zPlane[],
1123 const G4double rInner[],
1124 const G4double rOuter[])
1125
1126 G4Polycone(const G4String&amp; pName,
1127 G4double phiStart,
1128 G4double phiTotal,
1129 G4int numRZ,
1130 const G4double r[],
1131 const G4double z[])
1132 </programlisting>
1133 </informalexample>
1134 </entry>
1135 <entry valign="top" align="center">
1136 <mediaobject>
1137 <imageobject role="fo">
1138 <imagedata fileref="./AllResources/Detector/geometry.src/aBREPSolidPCone.jpg"
1139 format="JPG" contentwidth="3.5cm" />
1140 </imageobject>
1141 <imageobject role="html">
1142 <imagedata fileref="./AllResources/Detector/geometry.src/aBREPSolidPCone.jpg"
1143 format="JPG" />
1144 </imageobject>
1145 </mediaobject>
1146
1147 <?JavaScript pic10.html ?>
1148 <emphasis role="underline">In the picture</emphasis>:
1149 <literal>
1150 <para>
1151 phiStart = 1/4*Pi, phiTotal = 3/2*Pi, numZPlanes = 9,
1152 rInner = { 0, 0, 0, 0, 0, 0, 0, 0, 0},
1153 rOuter = { 0, 10, 10, 5 , 5, 10 , 10 , 2, 2},
1154 z = { 5, 7, 9, 11, 25, 27, 29, 31, 35 }
1155 </para>
1156 </literal>
1157 </entry>
1158</row>
1159</tbody>
1160</tgroup>
1161</informaltable>
1162</para>
1163
1164<para>
1165where:
1166
1167<informaltable pgwide="0">
1168<tgroup cols="2">
1169<tbody>
1170<row>
1171 <entry>
1172 phiStart
1173 </entry>
1174 <entry>
1175 Initial Phi starting angle
1176 </entry>
1177</row>
1178<row>
1179 <entry>
1180 phiTotal
1181 </entry>
1182 <entry>
1183 Total Phi angle
1184 </entry>
1185</row>
1186<row>
1187 <entry>
1188 numZPlanes
1189 </entry>
1190 <entry>
1191 Number of z planes
1192 </entry>
1193</row>
1194<row>
1195 <entry>
1196 numRZ
1197 </entry>
1198 <entry>
1199 Number of corners in r,z space
1200 </entry>
1201</row>
1202<row>
1203 <entry>
1204 zPlane
1205 </entry>
1206 <entry>
1207 Position of z planes
1208 </entry>
1209</row>
1210<row>
1211 <entry>
1212 rInner
1213 </entry>
1214 <entry>
1215 Tangent distance to inner surface
1216 </entry>
1217</row>
1218<row>
1219 <entry>
1220 rOuter
1221 </entry>
1222 <entry>
1223 Tangent distance to outer surface
1224 </entry>
1225</row>
1226<row>
1227 <entry>
1228 r
1229 </entry>
1230 <entry>
1231 r coordinate of corners
1232 </entry>
1233</row>
1234<row>
1235 <entry>
1236 z
1237 </entry>
1238 <entry>
1239 z coordinate of corners
1240 </entry>
1241</row>
1242</tbody>
1243</tgroup>
1244</informaltable>
1245</para>
1246
1247<!-- ******* Bridgehead ******* -->
1248<bridgehead renderas='sect4'>
1249Polyhedra (PGON):
1250</bridgehead>
1251
1252<para>
1253<emphasis role="bold">Polyhedra</emphasis> (PGON) are implemented through
1254<literal>G4Polyhedra</literal>:
1255
1256<informaltable frame="none" pgwide="0">
1257<tgroup cols="2" colsep="0">
1258<tbody>
1259<row>
1260 <entry valign="top" align="left">
1261 <informalexample>
1262 <programlisting>
1263 G4Polyhedra(const G4String&amp; pName,
1264 G4double phiStart,
1265 G4double phiTotal,
1266 G4int numSide,
1267 G4int numZPlanes,
1268 const G4double zPlane[],
1269 const G4double rInner[],
1270 const G4double rOuter[] )
1271
1272 G4Polyhedra(const G4String&amp; pName,
1273 G4double phiStart,
1274 G4double phiTotal,
1275 G4int numSide,
1276 G4int numRZ,
1277 const G4double r[],
1278 const G4double z[] )
1279 </programlisting>
1280 </informalexample>
1281 </entry>
1282 <entry valign="top" align="center">
1283 <mediaobject>
1284 <imageobject role="fo">
1285 <imagedata fileref="./AllResources/Detector/geometry.src/aBREPSolidPolyhedra.jpg"
1286 format="JPG" contentwidth="3.5cm" />
1287 </imageobject>
1288 <imageobject role="html">
1289 <imagedata fileref="./AllResources/Detector/geometry.src/aBREPSolidPolyhedra.jpg"
1290 format="JPG" />
1291 </imageobject>
1292 </mediaobject>
1293
1294 <?JavaScript pic11.html ?>
1295 <emphasis role="underline">In the picture</emphasis>:
1296 <literal>
1297 <para>
1298 phiStart = -1/4*Pi, phiTotal= 5/4*Pi,
1299 numSide = 3, nunZPlanes = 7,
1300 rInner = { 0, 0, 0, 0, 0, 0, 0 },
1301 rOuter = { 0, 15, 15, 4, 4, 10, 10 },
1302 z = { 0, 5, 8, 13 , 30, 32, 35 }
1303 </para>
1304 </literal>
1305 </entry>
1306</row>
1307</tbody>
1308</tgroup>
1309</informaltable>
1310</para>
1311
1312<para>
1313where:
1314<informaltable pgwide="0">
1315<tgroup cols="2">
1316<tbody>
1317<row>
1318 <entry>
1319 <literal>phiStart</literal>
1320 </entry>
1321 <entry>
1322 Initial Phi starting angle
1323 </entry>
1324</row>
1325<row>
1326 <entry>
1327 <literal>phiTotal</literal>
1328 </entry>
1329 <entry>
1330 Total Phi angle
1331 </entry>
1332</row>
1333<row>
1334 <entry>
1335 <literal>numSide</literal>
1336 </entry>
1337 <entry>
1338 Number of sides
1339 </entry>
1340</row>
1341<row>
1342 <entry>
1343 <literal>numZPlanes</literal>
1344 </entry>
1345 <entry>
1346 Number of z planes
1347 </entry>
1348</row>
1349<row>
1350 <entry>
1351 <literal>numRZ</literal>
1352 </entry>
1353 <entry>
1354 Number of corners in r,z space
1355 </entry>
1356</row>
1357<row>
1358 <entry>
1359 zPlane
1360 </entry>
1361 <entry>
1362 Position of z planes
1363 </entry>
1364</row>
1365<row>
1366 <entry>
1367 <literal>rInner</literal>
1368 </entry>
1369 <entry>
1370 Tangent distance to inner surface
1371 </entry>
1372</row>
1373<row>
1374 <entry>
1375 rOuter
1376 </entry>
1377 <entry>
1378 Tangent distance to outer surface
1379 </entry>
1380</row>
1381<row>
1382 <entry>
1383 <literal>r</literal>
1384 </entry>
1385 <entry>
1386 r coordinate of corners
1387 </entry>
1388</row>
1389<row>
1390 <entry>
1391 <literal>z</literal>
1392 </entry>
1393 <entry>
1394 z coordinate of corners
1395 </entry>
1396</row>
1397</tbody>
1398</tgroup>
1399</informaltable>
1400</para>
1401
1402<!-- ******* Bridgehead ******* -->
1403<bridgehead renderas='sect4'>
1404Tube with an elliptical cross section:
1405</bridgehead>
1406
1407<para>
1408A <emphasis role="bold">tube with an elliptical cross
1409section</emphasis> (ELTU) can be defined as follows:
1410
1411<informaltable frame="none" pgwide="0">
1412<tgroup cols="2" colsep="0">
1413<tbody>
1414<row>
1415 <entry valign="top" align="left">
1416 <informalexample>
1417 <programlisting>
1418 G4EllipticalTube(const G4String&amp; pName,
1419 G4double Dx,
1420 G4double Dy,
1421 G4double Dz)
1422 </programlisting>
1423 </informalexample>
1424
1425 The equation of the surface in x/y is <literal>1.0 = (x/dx)**2 +(y/dy)**2</literal>
1426 </entry>
1427 <entry valign="top" align="center">
1428 <mediaobject>
1429 <imageobject role="fo">
1430 <imagedata fileref="./AllResources/Detector/geometry.src/aEllipticalTube.jpg"
1431 format="JPG" contentwidth="3.5cm" />
1432 </imageobject>
1433 <imageobject role="html">
1434 <imagedata fileref="./AllResources/Detector/geometry.src/aEllipticalTube.jpg"
1435 format="JPG" />
1436 </imageobject>
1437 </mediaobject>
1438
1439 <?JavaScript pic12.html ?>
1440 <emphasis role="underline">In the picture</emphasis>:
1441 <literal>
1442 <para>
1443 Dx = 5, Dy = 10, Dz = 20
1444 </para>
1445 </literal>
1446 </entry>
1447</row>
1448</tbody>
1449</tgroup>
1450</informaltable>
1451</para>
1452
1453<para>
1454<informaltable pgwide="0">
1455<tgroup cols="6">
1456<tbody>
1457<row>
1458 <entry>
1459 Dx
1460 </entry>
1461 <entry>
1462 Half length X
1463 </entry>
1464 <entry>
1465 Dy
1466 </entry>
1467 <entry>
1468 Half length Y
1469 </entry>
1470 <entry>
1471 Dz
1472 </entry>
1473 <entry>
1474 Half length Z
1475 </entry>
1476</row>
1477</tbody>
1478</tgroup>
1479</informaltable>
1480</para>
1481
1482<!-- ******* Bridgehead ******* -->
1483<bridgehead renderas='sect4'>
1484General Ellipsoid:
1485</bridgehead>
1486
1487<para>
1488The general <emphasis role="bold">ellipsoid</emphasis> with
1489possible cut in <literal>Z</literal> can be defined as follows:
1490
1491<informaltable frame="none" pgwide="0">
1492<tgroup cols="2" colsep="0">
1493<tbody>
1494<row>
1495 <entry valign="top" align="left">
1496 <informalexample>
1497 <programlisting>
1498 G4Ellipsoid(const G4String&amp; pName,
1499 G4double pxSemiAxis,
1500 G4double pySemiAxis,
1501 G4double pzSemiAxis,
1502 G4double pzBottomCut=0,
1503 G4double pzTopCut=0)
1504 </programlisting>
1505 </informalexample>
1506 </entry>
1507 <entry valign="top" align="center">
1508 <mediaobject>
1509 <imageobject role="fo">
1510 <imagedata fileref="./AllResources/Detector/geometry.src/aEllipsoid.jpg"
1511 format="JPG" contentwidth="3.5cm" />
1512 </imageobject>
1513 <imageobject role="html">
1514 <imagedata fileref="./AllResources/Detector/geometry.src/aEllipsoid.jpg"
1515 format="JPG" />
1516 </imageobject>
1517 </mediaobject>
1518
1519 <?JavaScript pic13.html ?>
1520 <emphasis role="underline">In the picture</emphasis>:
1521 <literal>
1522 <para>
1523 pxSemiAxis = 10, pySemiAxis = 20, pzSemiAxis = 50,
1524 pzBottomCut = -10, pzTopCut = 40
1525 </para>
1526 </literal>
1527 </entry>
1528</row>
1529</tbody>
1530</tgroup>
1531</informaltable>
1532</para>
1533
1534<para>
1535A general (or triaxial) ellipsoid is a quadratic surface which is
1536given in Cartesian coordinates by:
1537
1538<informalexample>
1539<programlisting>
1540 1.0 = (x/pxSemiAxis)**2 + (y/pySemiAxis)**2 + (z/pzSemiAxis)**2
1541</programlisting>
1542</informalexample>
1543
1544where:
1545
1546<informaltable pgwide="0">
1547<tgroup cols="2">
1548<tbody>
1549<row>
1550 <entry>
1551 <literal>pxSemiAxis</literal>
1552 </entry>
1553 <entry>
1554 Semiaxis in X
1555 </entry>
1556</row>
1557<row>
1558 <entry>
1559 pySemiAxis
1560 </entry>
1561 <entry>
1562 Semiaxis in Y
1563 </entry>
1564</row>
1565<row>
1566 <entry>
1567 pzSemiAxis
1568 </entry>
1569 <entry>
1570 Semiaxis in Z
1571 </entry>
1572</row>
1573<row>
1574 <entry>
1575 pzBottomCut
1576 </entry>
1577 <entry>
1578 lower cut plane level, z
1579 </entry>
1580</row>
1581<row>
1582 <entry>
1583 pzTopCut
1584 </entry>
1585 <entry>
1586 upper cut plane level, z
1587 </entry>
1588</row>
1589</tbody>
1590</tgroup>
1591</informaltable>
1592</para>
1593
1594<!-- ******* Bridgehead ******* -->
1595<bridgehead renderas='sect4'>
1596Cone with Elliptical Cross Section:
1597</bridgehead>
1598
1599<para>
1600A <emphasis role="bold">cone with an elliptical cross section</emphasis>
1601can be defined as follows:
1602
1603<informaltable frame="none" pgwide="0">
1604<tgroup cols="2" colsep="0">
1605<tbody>
1606<row>
1607 <entry valign="top" align="left">
1608 <informalexample>
1609 <programlisting>
1610 G4EllipticalCone(const G4String&amp; pName,
1611 G4double pxSemiAxis,
1612 G4double pySemiAxis,
1613 G4double zMax,
1614 G4double pzTopCut)
1615 </programlisting>
1616 </informalexample>
1617 </entry>
1618 <entry valign="top" align="center">
1619 <mediaobject>
1620 <imageobject role="fo">
1621 <imagedata fileref="./AllResources/Detector/geometry.src/aEllipticalCone.jpg"
1622 format="JPG" contentwidth="3.5cm" />
1623 </imageobject>
1624 <imageobject role="html">
1625 <imagedata fileref="./AllResources/Detector/geometry.src/aEllipticalCone.jpg"
1626 format="JPG" />
1627 </imageobject>
1628 </mediaobject>
1629
1630 <?JavaScript pic14.html ?>
1631 <emphasis role="underline">In the picture</emphasis>:
1632 <literal>
1633 <para>
1634 pxSemiAxis = 30/75, pySemiAxis = 60/75, zMax = 50, pzTopCut = 25
1635 </para>
1636 </literal>
1637 </entry>
1638</row>
1639</tbody>
1640</tgroup>
1641</informaltable>
1642</para>
1643
1644<para>
1645where:
1646
1647<informaltable pgwide="0">
1648<tgroup cols="2">
1649<tbody>
1650<row>
1651 <entry>
1652 pxSemiAxis
1653 </entry>
1654 <entry>
1655 Semiaxis in X
1656 </entry>
1657</row>
1658<row>
1659 <entry>
1660 pySemiAxis
1661 </entry>
1662 <entry>
1663 Semiaxis in Y
1664 </entry>
1665</row>
1666<row>
1667 <entry>
1668 zMax
1669 </entry>
1670 <entry>
1671 Height of elliptical cone
1672 </entry>
1673</row>
1674<row>
1675 <entry>
1676 pzTopCut
1677 </entry>
1678 <entry>
1679 upper cut plane level
1680 </entry>
1681</row>
1682</tbody>
1683</tgroup>
1684</informaltable>
1685</para>
1686
1687<para>
1688An elliptical cone of height <literal>zMax</literal>, semiaxis
1689<literal>pxSemiAxis</literal>, and semiaxis <literal>pySemiAxis</literal>
1690is given by the parametric equations:
1691
1692<informalexample>
1693<programlisting>
1694 x = pxSemiAxis * ( zMax - u ) / u * Cos(v)
1695 y = pySemiAxis * ( zMax - u ) / u * Sin(v)
1696 z = u
1697</programlisting>
1698</informalexample>
1699
1700Where <literal>v</literal> is between <literal>0</literal> and
1701<literal>2*Pi</literal>, and
1702<literal>u</literal> between <literal>0</literal> and
1703<literal>h</literal> respectively.
1704</para>
1705
1706
1707<!-- ******* Bridgehead ******* -->
1708<bridgehead renderas='sect4'>
1709Paraboloid, a solid with parabolic profile:
1710</bridgehead>
1711
1712<para>
1713A <emphasis role="bold">solid with parabolic profile</emphasis> and possible cuts along
1714the <literal>Z</literal> axis can be defined as follows:
1715
1716<informaltable frame="none" pgwide="0">
1717<tgroup cols="2" colsep="0">
1718<tbody>
1719<row>
1720 <entry valign="top" align="left">
1721 <informalexample>
1722 <programlisting>
1723 G4Paraboloid(const G4String&amp; pName,
1724 G4double Dz,
1725 G4double R1,
1726 G4double R2)
1727 </programlisting>
1728 </informalexample>
1729
1730 The equation for the solid is:
1731<informalexample>
1732<programlisting>
1733 rho**2 &lt;= k1 * z + k2;
1734 -dz &lt;= z &lt;= dz
1735 r1**2 = k1 * (-dz) + k2
1736 r2**2 = k1 * ( dz) + k2
1737</programlisting>
1738</informalexample>
1739
1740 </entry>
1741 <entry valign="top" align="center">
1742 <mediaobject>
1743 <imageobject role="fo">
1744 <imagedata fileref="./AllResources/Detector/geometry.src/aParaboloid.jpg"
1745 format="JPG" contentwidth="3.5cm" />
1746 </imageobject>
1747 <imageobject role="html">
1748 <imagedata fileref="./AllResources/Detector/geometry.src/aParaboloid.jpg"
1749 format="JPG" />
1750 </imageobject>
1751 </mediaobject>
1752
1753 <?JavaScript pic21.html ?>
1754 <emphasis role="underline">In the picture</emphasis>:
1755 <literal>
1756 <para>
1757 R1 = 20, R2 = 35, Dz = 20
1758 </para>
1759 </literal>
1760 </entry>
1761</row>
1762</tbody>
1763</tgroup>
1764</informaltable>
1765</para>
1766
1767<para>
1768<informaltable pgwide="0">
1769<tgroup cols="6">
1770<tbody>
1771<row>
1772 <entry>
1773 Dz
1774 </entry>
1775 <entry>
1776 Half length Z
1777 </entry>
1778 <entry>
1779 R1
1780 </entry>
1781 <entry>
1782 Radius at -Dz
1783 </entry>
1784 <entry>
1785 R2
1786 </entry>
1787 <entry>
1788 Radius at +Dz greater than R1
1789 </entry>
1790</row>
1791</tbody>
1792</tgroup>
1793</informaltable>
1794</para>
1795
1796<!-- ******* Bridgehead ******* -->
1797<bridgehead renderas='sect4'>
1798Tube with Hyperbolic Profile:
1799</bridgehead>
1800
1801<para>
1802A <emphasis role="bold">tube with a hyperbolic
1803profile</emphasis> (HYPE) can be defined as follows:
1804
1805<informaltable frame="none" pgwide="0">
1806<tgroup cols="2" colsep="0">
1807<tbody>
1808<row>
1809 <entry valign="top" align="left">
1810 <informalexample>
1811 <programlisting>
1812 G4Hype(const G4String&amp; pName,
1813 G4double innerRadius,
1814 G4double outerRadius,
1815 G4double innerStereo,
1816 G4double outerStereo,
1817 G4double halfLenZ)
1818 </programlisting>
1819 </informalexample>
1820 </entry>
1821 <entry valign="top" align="center">
1822 <mediaobject>
1823 <imageobject role="fo">
1824 <imagedata fileref="./AllResources/Detector/geometry.src/aHyperboloid.jpg"
1825 format="JPG" contentwidth="3.5cm" />
1826 </imageobject>
1827 <imageobject role="html">
1828 <imagedata fileref="./AllResources/Detector/geometry.src/aHyperboloid.jpg"
1829 format="JPG" />
1830 </imageobject>
1831 </mediaobject>
1832
1833 <?JavaScript pic15.html ?>
1834 <emphasis role="underline">In the picture</emphasis>:
1835 <literal>
1836 <para>
1837 innerStereo = 0.7, outerStereo = 0.7,
1838 halfLenZ = 50,
1839 innerRadius = 20, outerRadius = 30
1840 </para>
1841 </literal>
1842 </entry>
1843</row>
1844</tbody>
1845</tgroup>
1846</informaltable>
1847</para>
1848
1849<para>
1850<literal>G4Hype</literal> is shaped with curved sides parallel to the
1851<literal>z</literal>-axis, has a specified half-length along the <literal>z</literal>
1852axis about which it is centred, and a given minimum and maximum
1853radius.
1854</para>
1855
1856<para>
1857A minimum radius of <literal>0</literal> defines a filled Hype (with
1858hyperbolic inner surface), i.e. inner radius = 0 AND inner stereo
1859angle = 0.
1860</para>
1861
1862<para>
1863The inner and outer hyperbolic surfaces can have different stereo
1864angles. A stereo angle of <literal>0</literal> gives a cylindrical
1865surface:
1866
1867<informaltable pgwide="0">
1868<tgroup cols="2">
1869<tbody>
1870<row>
1871 <entry>
1872 <literal>innerRadius</literal>
1873 </entry>
1874 <entry>
1875 Inner radius
1876 </entry>
1877</row>
1878<row>
1879 <entry>
1880 <literal>outerRadius</literal>
1881 </entry>
1882 <entry>
1883 Outer radius
1884 </entry>
1885</row>
1886<row>
1887 <entry>
1888 <literal>innerStereo</literal>
1889 </entry>
1890 <entry>
1891 Inner stereo angle in radians
1892 </entry>
1893</row>
1894<row>
1895 <entry>
1896 <literal>outerStereo</literal>
1897 </entry>
1898 <entry>
1899 Outer stereo angle in radians
1900 </entry>
1901</row>
1902<row>
1903 <entry>
1904 <literal>halfLenZ</literal>
1905 </entry>
1906 <entry>
1907 Half length in Z
1908 </entry>
1909</row>
1910</tbody>
1911</tgroup>
1912</informaltable>
1913</para>
1914
1915
1916<!-- ******* Bridgehead ******* -->
1917<bridgehead renderas='sect4'>
1918Tetrahedra:
1919</bridgehead>
1920
1921<para>
1922A <emphasis role="bold">tetrahedra</emphasis> solid can be
1923defined as follows:
1924
1925<informaltable frame="none" pgwide="0">
1926<tgroup cols="2" colsep="0">
1927<tbody>
1928<row>
1929 <entry valign="top" align="left">
1930 <informalexample>
1931 <programlisting>
1932 G4Tet(const G4String&amp; pName,
1933 G4ThreeVector anchor,
1934 G4ThreeVector p2,
1935 G4ThreeVector p3,
1936 G4ThreeVector p4,
1937 G4bool *degeneracyFlag=0)
1938 </programlisting>
1939 </informalexample>
1940 </entry>
1941 <entry valign="top" align="center">
1942 <mediaobject>
1943 <imageobject role="fo">
1944 <imagedata fileref="./AllResources/Detector/geometry.src/aTet.jpg"
1945 format="JPG" contentwidth="3.5cm" />
1946 </imageobject>
1947 <imageobject role="html">
1948 <imagedata fileref="./AllResources/Detector/geometry.src/aTet.jpg"
1949 format="JPG" />
1950 </imageobject>
1951 </mediaobject>
1952
1953 <?JavaScript pic16.html ?>
1954 <emphasis role="underline">In the picture</emphasis>:
1955 <literal>
1956 <para>
1957 anchor = {0, 0, sqrt(3)},
1958 p2 = { 0, 2*sqrt(2/3), -1/sqrt(3) },
1959 p3 = { -sqrt(2), -sqrt(2/3),-1/sqrt(3) },
1960 p4 = { sqrt(2), -sqrt(2/3) , -1/sqrt(3) }
1961 </para>
1962 </literal>
1963 </entry>
1964</row>
1965</tbody>
1966</tgroup>
1967</informaltable>
1968</para>
1969
1970<para>
1971The solid is defined by 4 points in space:
1972
1973<informaltable pgwide="0">
1974<tgroup cols="2">
1975<tbody>
1976<row>
1977 <entry>
1978 <literal>anchor</literal>
1979 </entry>
1980 <entry>
1981 Anchor point
1982 </entry>
1983</row>
1984<row>
1985 <entry>
1986 <literal>p2</literal>
1987 </entry>
1988 <entry>
1989 Point 2
1990 </entry>
1991</row>
1992<row>
1993 <entry>
1994 <literal>p3</literal>
1995 </entry>
1996 <entry>
1997 Point 3
1998 </entry>
1999</row>
2000<row>
2001 <entry>
2002 <literal>p4</literal>
2003 </entry>
2004 <entry>
2005 Point 4
2006 </entry>
2007</row>
2008<row>
2009 <entry>
2010 degeneracyFlag
2011 </entry>
2012 <entry>
2013 Flag indicating degeneracy of points
2014 </entry>
2015</row>
2016<row>
2017 <entry>
2018
2019 </entry>
2020 <entry>
2021
2022 </entry>
2023</row>
2024</tbody>
2025</tgroup>
2026</informaltable>
2027</para>
2028
2029
2030<!-- ******* Bridgehead ******* -->
2031<bridgehead renderas='sect4'>
2032Extruded Polygon:
2033</bridgehead>
2034
2035<para>
2036The extrusion of an arbitrary polygon
2037(<emphasis role="bold">extruded solid</emphasis>) with fixed outline
2038in the defined <literal>Z</literal> sections can be defined as follows
2039(in a general way, or as special construct with two <literal>Z</literal>
2040sections):
2041
2042<informaltable frame="none" pgwide="0">
2043<tgroup cols="2" colsep="0">
2044<tbody>
2045<row>
2046 <entry valign="top" align="left">
2047 <informalexample>
2048 <programlisting>
2049 G4ExtrudedSolid(const G4String&amp; pName,
2050 std::vector&lt;G4TwoVector&gt; polygon,
2051 std::vector&lt;ZSection&gt; zsections)
2052
2053 G4ExtrudedSolid(const G4String&amp; pName,
2054 std::vector&lt;G4TwoVector&gt; polygon,
2055 G4double hz,
2056 G4TwoVector off1, G4double scale1,
2057 G4TwoVector off2, G4double scale2)
2058 </programlisting>
2059 </informalexample>
2060 </entry>
2061 <entry valign="top" align="center">
2062 <mediaobject>
2063 <imageobject role="fo">
2064 <imagedata fileref="./AllResources/Detector/geometry.src/aExtrudedSolid.jpg"
2065 format="JPG" contentwidth="3.5cm" />
2066 </imageobject>
2067 <imageobject role="html">
2068 <imagedata fileref="./AllResources/Detector/geometry.src/aExtrudedSolid.jpg"
2069 format="JPG" />
2070 </imageobject>
2071 </mediaobject>
2072
2073 <?JavaScript pic22.html ?>
2074 <emphasis role="underline">In the picture</emphasis>:
2075 <literal>
2076 <para>
2077 poligon = {-30,-30},{-30,30},{30,30},{30,-30},
2078 {15,-30},{15,15},{-15,15},{-15,-30}</para>
2079 <para>
2080 zsections = [-60,{0,30},0.8], [-15, {0,-30},1.],
2081 [10,{0,0},0.6], [60,{0,30},1.2]</para>
2082 </literal>
2083 </entry>
2084</row>
2085</tbody>
2086</tgroup>
2087</informaltable>
2088</para>
2089
2090<para>
2091The z-sides of the solid are the scaled versions of the same polygon.
2092
2093<informaltable pgwide="0">
2094<tgroup cols="2">
2095<tbody>
2096<row>
2097 <entry>
2098 <literal>polygon</literal>
2099 </entry>
2100 <entry>
2101 the vertices of the outlined polygon defined in clock-wise order
2102 </entry>
2103</row>
2104<row>
2105 <entry>
2106 <literal>zsections</literal>
2107 </entry>
2108 <entry>
2109 the z-sections defined by z position in increasing order
2110 </entry>
2111</row>
2112<row>
2113 <entry>
2114 <literal>hz</literal>
2115 </entry>
2116 <entry>
2117 Half length in Z
2118 </entry>
2119</row>
2120<row>
2121 <entry>
2122 <literal>off1, off2</literal>
2123 </entry>
2124 <entry>
2125 Offset of the side in -hz and +hz respectively
2126 </entry>
2127</row>
2128<row>
2129 <entry>
2130 <literal>scale1, scale2</literal>
2131 </entry>
2132 <entry>
2133 Scale of the side in -hz and +hz respectively
2134 </entry>
2135</row>
2136</tbody>
2137</tgroup>
2138</informaltable>
2139</para>
2140
2141
2142<!-- ******* Bridgehead ******* -->
2143<bridgehead renderas='sect4'>
2144Box Twisted:
2145</bridgehead>
2146
2147<para>
2148A <emphasis role="bold">box twisted</emphasis> along one axis
2149can be defined as follows:
2150
2151<informaltable frame="none" pgwide="0">
2152<tgroup cols="2" colsep="0">
2153<tbody>
2154<row>
2155 <entry valign="top" align="left">
2156 <informalexample>
2157 <programlisting>
2158 G4TwistedBox(const G4String&amp; pName,
2159 G4double twistedangle,
2160 G4double pDx,
2161 G4double pDy,
2162 G4double pDz)
2163 </programlisting>
2164 </informalexample>
2165 </entry>
2166 <entry valign="top" align="center">
2167 <mediaobject>
2168 <imageobject role="fo">
2169 <imagedata fileref="./AllResources/Detector/geometry.src/aTwistedBox.jpg"
2170 format="JPG" contentwidth="3.5cm" />
2171 </imageobject>
2172 <imageobject role="html">
2173 <imagedata fileref="./AllResources/Detector/geometry.src/aTwistedBox.jpg"
2174 format="JPG" />
2175 </imageobject>
2176 </mediaobject>
2177
2178 <?JavaScript pic17.html ?>
2179 <emphasis role="underline">In the picture</emphasis>:
2180 <literal>
2181 <para>
2182 twistedangle = 30*Degree, pDx = 30, pDy =40, pDz = 60
2183 </para>
2184 </literal>
2185 </entry>
2186</row>
2187</tbody>
2188</tgroup>
2189</informaltable>
2190</para>
2191
2192<para>
2193<literal>G4TwistedBox</literal> is a box twisted along the z-axis. The
2194twist angle cannot be greater than 90 degrees:
2195
2196<informaltable pgwide="0">
2197<tgroup cols="2">
2198<tbody>
2199<row>
2200 <entry>
2201 <literal>twistedangle</literal>
2202 </entry>
2203 <entry>
2204 Twist angle
2205 </entry>
2206</row>
2207<row>
2208 <entry>
2209 <literal>pDx</literal>
2210 </entry>
2211 <entry>
2212 Half x length
2213 </entry>
2214</row>
2215<row>
2216 <entry>
2217 <literal>pDy</literal>
2218 </entry>
2219 <entry>
2220 Half y length
2221 </entry>
2222</row>
2223<row>
2224 <entry>
2225 <literal>pDz</literal>
2226 </entry>
2227 <entry>
2228 Half z length
2229 </entry>
2230</row>
2231</tbody>
2232</tgroup>
2233</informaltable>
2234</para>
2235
2236
2237<!-- ******* Bridgehead ******* -->
2238<bridgehead renderas='sect4'>
2239Trapezoid Twisted along One Axis:
2240</bridgehead>
2241
2242<para>
2243<emphasis>trapezoid twisted</emphasis> along one axis can be defined as
2244follows:
2245
2246<informaltable frame="none" pgwide="0">
2247<tgroup cols="2" colsep="0">
2248<tbody>
2249<row>
2250 <entry valign="top" align="left">
2251 <informalexample>
2252 <programlisting>
2253 G4TwistedTrap(const G4String&amp; pName,
2254 G4double twistedangle,
2255 G4double pDxx1,
2256 G4double pDxx2,
2257 G4double pDy,
2258 G4double pDz)
2259
2260 G4TwistedTrap(const G4String&amp; pName,
2261 G4double twistedangle,
2262 G4double pDz,
2263 G4double pTheta,
2264 G4double pPhi,
2265 G4double pDy1,
2266 G4double pDx1,
2267 G4double pDx2,
2268 G4double pDy2,
2269 G4double pDx3,
2270 G4double pDx4,
2271 G4double pAlph)
2272 </programlisting>
2273 </informalexample>
2274 </entry>
2275 <entry valign="top" align="center">
2276 <mediaobject>
2277 <imageobject role="fo">
2278 <imagedata fileref="./AllResources/Detector/geometry.src/aTwistedTrap.jpg"
2279 format="JPG" contentwidth="3.5cm" />
2280 </imageobject>
2281 <imageobject role="html">
2282 <imagedata fileref="./AllResources/Detector/geometry.src/aTwistedTrap.jpg"
2283 format="JPG" />
2284 </imageobject>
2285 </mediaobject>
2286
2287 <?JavaScript pic18.html ?>
2288 <emphasis role="underline">In the picture</emphasis>:
2289 <literal>
2290 <para>
2291 pDx1 = 30, pDx2 = 40, pDy1 = 40,
2292 pDx3 = 10, pDx4 = 14, pDy2 = 16,
2293 pDz = 60,
2294 pTheta = 20*Degree, pDphi = 5*Degree,
2295 pAlph = 10*Degree, twistedangle = 30*Degree
2296 </para>
2297 </literal>
2298 </entry>
2299</row>
2300</tbody>
2301</tgroup>
2302</informaltable>
2303</para>
2304
2305<para>
2306The first constructor of <literal>G4TwistedTrap</literal> produces a
2307regular trapezoid twisted along the <literal>z</literal>-axis, where the caps
2308of the trapezoid are of the same shape and size.
2309</para>
2310
2311<para>
2312The second constructor produces a generic trapezoid with polar,
2313azimuthal and tilt angles.
2314</para>
2315
2316<para>
2317The twist angle cannot be greater than 90 degrees:
2318
2319<informaltable pgwide="0">
2320<tgroup cols="2">
2321<tbody>
2322<row>
2323 <entry>
2324 <literal>twistedangle</literal>
2325 </entry>
2326 <entry>
2327 Twisted angle
2328 </entry>
2329</row>
2330<row>
2331 <entry>
2332 <literal>pDx1</literal>
2333 </entry>
2334 <entry>
2335 Half x length at y=-pDy
2336 </entry>
2337</row>
2338<row>
2339 <entry>
2340 <literal>pDx2</literal>
2341 </entry>
2342 <entry>
2343 Half x length at y=+pDy
2344 </entry>
2345</row>
2346<row>
2347 <entry>
2348 <literal>pDy</literal>
2349 </entry>
2350 <entry>
2351 Half y length
2352 </entry>
2353</row>
2354<row>
2355 <entry>
2356 <literal>pDz</literal>
2357 </entry>
2358 <entry>
2359 Half z length
2360 </entry>
2361</row>
2362<row>
2363 <entry>
2364 <literal>pTheta</literal>
2365 </entry>
2366 <entry>
2367 Polar angle of the line joining the centres of the faces at -/+pDz
2368 </entry>
2369</row>
2370<row>
2371 <entry>
2372 <literal>pDy1</literal>
2373 </entry>
2374 <entry>
2375 Half y length at -pDz
2376 </entry>
2377</row>
2378<row>
2379 <entry>
2380 <literal>pDx1</literal>
2381 </entry>
2382 <entry>
2383 Half x length at -pDz, y=-pDy1
2384 </entry>
2385</row>
2386<row>
2387 <entry>
2388 <literal>pDx2</literal>
2389 </entry>
2390 <entry>
2391 Half x length at -pDz, y=+pDy1
2392 </entry>
2393</row>
2394<row>
2395 <entry>
2396 <literal>pDy2</literal>
2397 </entry>
2398 <entry>
2399 Half y length at +pDz
2400
2401 </entry>
2402</row>
2403<row>
2404 <entry>
2405 <literal>pDx3</literal>
2406 </entry>
2407 <entry>
2408 Half x length at +pDz, y=-pDy2
2409 </entry>
2410</row>
2411<row>
2412 <entry>
2413 <literal>pDx4</literal>
2414 </entry>
2415 <entry>
2416 Half x length at +pDz, y=+pDy2
2417 </entry>
2418</row>
2419<row>
2420 <entry>
2421 <literal>pAlph</literal>
2422 </entry>
2423 <entry>
2424 Angle with respect to the y axis from the centre of the side
2425 </entry>
2426</row>
2427</tbody>
2428</tgroup>
2429</informaltable>
2430</para>
2431
2432<!-- ******* Bridgehead ******* -->
2433<bridgehead renderas='sect4'>
2434Twisted Trapezoid with <literal>x</literal> and <literal>y</literal> dimensions
2435varying along <literal>z</literal>:
2436</bridgehead>
2437
2438<para>
2439A <emphasis role="bold">twisted trapezoid</emphasis> with the
2440<literal>x</literal> and <literal>y</literal> dimensions
2441<emphasis role="bold">varying along <literal>z</literal></emphasis> can be
2442defined as follows:
2443
2444<informaltable frame="none" pgwide="0">
2445<tgroup cols="2" colsep="0">
2446<tbody>
2447<row>
2448 <entry valign="top" align="left">
2449 <informalexample>
2450 <programlisting>
2451 G4TwistedTrd(const G4String&amp; pName,
2452 G4double pDx1,
2453 G4double pDx2,
2454 G4double pDy1,
2455 G4double pDy2,
2456 G4double pDz,
2457 G4double twistedangle)
2458 </programlisting>
2459 </informalexample>
2460 </entry>
2461 <entry valign="top" align="center">
2462 <mediaobject>
2463 <imageobject role="fo">
2464 <imagedata fileref="./AllResources/Detector/geometry.src/aTwistedTrd.jpg"
2465 format="JPG" contentwidth="3.5cm" />
2466 </imageobject>
2467 <imageobject role="html">
2468 <imagedata fileref="./AllResources/Detector/geometry.src/aTwistedTrd.jpg"
2469 format="JPG" />
2470 </imageobject>
2471 </mediaobject>
2472
2473 <?JavaScript pic19.html ?>
2474 <emphasis role="underline">In the picture</emphasis>:
2475 <literal>
2476 <para>
2477 dx1 = 30, dx2 = 10,
2478 dy1 = 40, dy2 = 15,
2479 dz = 60, twistedangle = 30*Degree
2480 </para>
2481 </literal>
2482 </entry>
2483</row>
2484</tbody>
2485</tgroup>
2486</informaltable>
2487</para>
2488
2489<para>
2490where:
2491<informaltable pgwide="0">
2492<tgroup cols="2">
2493<tbody>
2494<row>
2495 <entry>
2496 <literal>pDx1</literal>
2497 </entry>
2498 <entry>
2499 Half x length at the surface positioned at -dz
2500 </entry>
2501</row>
2502<row>
2503 <entry>
2504 <literal>pDx2</literal>
2505 </entry>
2506 <entry>
2507 Half x length at the surface positioned at +dz
2508 </entry>
2509</row>
2510<row>
2511 <entry>
2512 <literal>pDy1</literal>
2513 </entry>
2514 <entry>
2515 Half y length at the surface positioned at -dz
2516 </entry>
2517</row>
2518<row>
2519 <entry>
2520 <literal>pDy2</literal>
2521 </entry>
2522 <entry>
2523 Half y length at the surface positioned at +dz
2524 </entry>
2525</row>
2526<row>
2527 <entry>
2528 <literal>pDz</literal>
2529 </entry>
2530 <entry>
2531 Half z length
2532 </entry>
2533</row>
2534<row>
2535 <entry>
2536 <literal>twistedangle</literal>
2537 </entry>
2538 <entry>
2539 Twisted angle
2540 </entry>
2541</row>
2542</tbody>
2543</tgroup>
2544</informaltable>
2545</para>
2546
2547<!-- ******* Bridgehead ******* -->
2548<bridgehead renderas='sect4'>
2549Tube Section Twisted along Its Axis:
2550</bridgehead>
2551
2552<para>
2553A <emphasis role="bold">tube section twisted</emphasis> along
2554its axis can be defined as follows:
2555
2556<informaltable frame="none" pgwide="0">
2557<tgroup cols="2" colsep="0">
2558<tbody>
2559<row>
2560 <entry valign="top" align="left">
2561 <informalexample>
2562 <programlisting>
2563 G4TwistedTubs(const G4String&amp; pName,
2564 G4double twistedangle,
2565 G4double endinnerrad,
2566 G4double endouterrad,
2567 G4double halfzlen,
2568 G4double dphi)
2569 </programlisting>
2570 </informalexample>
2571 </entry>
2572 <entry valign="top" align="center">
2573 <mediaobject>
2574 <imageobject role="fo">
2575 <imagedata fileref="./AllResources/Detector/geometry.src/aTwistedTubs.jpg"
2576 format="JPG" contentwidth="3.5cm" />
2577 </imageobject>
2578 <imageobject role="html">
2579 <imagedata fileref="./AllResources/Detector/geometry.src/aTwistedTubs.jpg"
2580 format="JPG" />
2581 </imageobject>
2582 </mediaobject>
2583
2584 <?JavaScript pic20.html ?>
2585 <emphasis role="underline">In the picture</emphasis>:
2586 <literal>
2587 <para>
2588 endinnerrad = 10, endouterrad = 15,
2589 halfzlen = 20, dphi = 90*Degree,
2590 twistedangle = 60*Degree
2591 </para>
2592 </literal>
2593 </entry>
2594</row>
2595</tbody>
2596</tgroup>
2597</informaltable>
2598</para>
2599
2600<para>
2601<literal>G4TwistedTubs</literal> is a sort of twisted cylinder which,
2602placed along the <literal>z</literal>-axis and divided into
2603<literal>phi</literal>-segments is shaped like an hyperboloid, where each of
2604its segmented pieces can be tilted with a stereo angle.
2605</para>
2606
2607<para>
2608It can have inner and outer surfaces with the same stereo angle:
2609<informaltable pgwide="0">
2610<tgroup cols="2">
2611<tbody>
2612<row>
2613 <entry>
2614 <literal>twistedangle</literal>
2615 </entry>
2616 <entry>
2617 Twisted angle
2618 </entry>
2619</row>
2620<row>
2621 <entry>
2622 <literal>endinnerrad</literal>
2623 </entry>
2624 <entry>
2625 Inner radius at endcap
2626 </entry>
2627</row>
2628<row>
2629 <entry>
2630 <literal>endouterrad</literal>
2631 </entry>
2632 <entry>
2633 Outer radius at endcap
2634 </entry>
2635</row>
2636<row>
2637 <entry>
2638 <literal>halfzlen</literal>
2639 </entry>
2640 <entry>
2641 Half z length
2642 </entry>
2643</row>
2644<row>
2645 <entry>
2646 <literal>dphi</literal>
2647 </entry>
2648 <entry>
2649 Phi angle of a segment
2650 </entry>
2651</row>
2652</tbody>
2653</tgroup>
2654</informaltable>
2655</para>
2656
2657<para>
2658Additional constructors are provided, allowing the shape to be
2659specified either as:
2660
2661<itemizedlist spacing="compact">
2662 <listitem><para>
2663 the number of segments in <literal>phi</literal> and the total angle for
2664 all segments, or
2665 </para></listitem>
2666 <listitem><para>
2667 a combination of the above constructors providing instead the
2668 inner and outer radii at <literal>z=0</literal> with different
2669 <literal>z</literal>-lengths along negative and positive
2670 <literal>z</literal>-axis.
2671 </para></listitem>
2672</itemizedlist>
2673</para>
2674
2675</sect3>
2676
2677
2678<!-- ******************* Section (Level#3) ****************** -->
2679<sect3 id="sect.Geom.Solids.BoolOp">
2680<title>
2681Solids made by Boolean operations
2682</title>
2683
2684<para>
2685Simple solids can be combined using Boolean operations. For
2686example, a cylinder and a half-sphere can be combined with the
2687union Boolean operation.
2688</para>
2689
2690<para>
2691Creating such a new <emphasis>Boolean</emphasis> solid, requires:
2692
2693<itemizedlist spacing="compact">
2694 <listitem><para>
2695 Two solids
2696 </para></listitem>
2697 <listitem><para>
2698 A Boolean operation: union, intersection or subtraction.
2699 </para></listitem>
2700 <listitem><para>
2701 Optionally a transformation for the second solid.
2702 </para></listitem>
2703</itemizedlist>
2704</para>
2705
2706<para>
2707The solids used should be either CSG solids (for examples a box,
2708a spherical shell, or a tube) or another Boolean solid: the product
2709of a previous Boolean operation. An important purpose of Boolean
2710solids is to allow the description of solids with peculiar shapes
2711in a simple and intuitive way, still allowing an efficient
2712geometrical navigation inside them.
2713</para>
2714
2715<note><title></title>
2716<para>
2717The solids used can actually be of any type. However, in
2718order to fully support the export of a Geant4 solid model via STEP
2719to CAD systems, we restrict the use of Boolean operations to this
2720subset of solids. But this subset contains all the most interesting
2721use cases.
2722</para>
2723</note>
2724
2725<note><title></title>
2726<para>
2727The tracking cost for navigating in a Boolean solid in the
2728current implementation, is proportional to the number of
2729constituent solids. So care must be taken to avoid extensive,
2730unecessary use of Boolean solids in performance-critical areas of a
2731geometry description, where each solid is created from Boolean
2732combinations of many other solids.
2733</para>
2734</note>
2735
2736<para>
2737Examples of the creation of the simplest Boolean solids are
2738given below:
2739
2740<informalexample>
2741<programlisting>
2742 G4Box* box =
2743 new G4Box("Box",20*mm,30*mm,40*mm);
2744 G4Tubs* cyl =
2745 new G4Tubs("Cylinder",0,50*mm,50*mm,0,twopi); // r: 0 mm -&gt; 50 mm
2746 // z: -50 mm -&gt; 50 mm
2747 // phi: 0 -&gt; 2 pi
2748 G4UnionSolid* union =
2749 new G4UnionSolid("Box+Cylinder", box, cyl);
2750 G4IntersectionSolid* intersection =
2751 new G4IntersectionSolid("Box*Cylinder", box, cyl);
2752 G4SubtractionSolid* subtraction =
2753 new G4SubtractionSolid("Box-Cylinder", box, cyl);
2754 </programlisting>
2755</informalexample>
2756
2757where the union, intersection and subtraction of a box and cylinder
2758are constructed.
2759</para>
2760
2761<para>
2762The more useful case where one of the solids is displaced from
2763the origin of coordinates also exists. In this case the second
2764solid is positioned relative to the coordinate system (and thus
2765relative to the first). This can be done in two ways:
2766
2767<itemizedlist spacing="compact">
2768 <listitem><para>
2769 Either by giving a rotation matrix and translation vector that
2770 are used to transform the coordinate system of the second solid to
2771 the coordinate system of the first solid. This is called the
2772 <emphasis>passive</emphasis> method.
2773 </para></listitem>
2774 <listitem><para>
2775 Or by creating a transformation that moves the second solid
2776 from its desired position to its standard position, e.g., a box's
2777 standard position is with its centre at the origin and sides
2778 parallel to the three axes. This is called the
2779 <emphasis>active</emphasis> method.
2780 </para></listitem>
2781</itemizedlist>
2782</para>
2783
2784<para>
2785In the first case, the translation is applied first to move the
2786origin of coordinates. Then the rotation is used to rotate the
2787coordinate system of the second solid to the coordinate system of
2788the first.
2789
2790<informalexample>
2791<programlisting>
2792 G4RotationMatrix* yRot = new G4RotationMatrix; // Rotates X and Z axes only
2793 yRot-&gt;rotateY(M_PI/4.*rad); // Rotates 45 degrees
2794 G4ThreeVector zTrans(0, 0, 50);
2795
2796 G4UnionSolid* unionMoved =
2797 new G4UnionSolid("Box+CylinderMoved", box, cyl, yRot, zTrans);
2798 //
2799 // The new coordinate system of the cylinder is translated so that
2800 // its centre is at +50 on the original Z axis, and it is rotated
2801 // with its X axis halfway between the original X and Z axes.
2802
2803 // Now we build the same solid using the alternative method
2804 //
2805 G4RotationMatrix invRot = *(yRot-&gt;invert());
2806 G4Transform3D transform(invRot, zTrans);
2807 G4UnionSolid* unionMoved =
2808 new G4UnionSolid("Box+CylinderMoved", box, cyl, transform);
2809</programlisting>
2810</informalexample>
2811</para>
2812
2813<para>
2814Note that the first constructor that takes a pointer to the
2815rotation-matrix (<literal>G4RotationMatrix*</literal>), does NOT copy it.
2816Therefore once used a rotation-matrix to construct a Boolean solid,
2817it must NOT be modified.
2818</para>
2819
2820<para>
2821In contrast, with the alternative method shown, a
2822<literal>G4Transform3D</literal> is provided to the constructor by value, and
2823its transformation is stored by the Boolean solid. The user may
2824modify the <literal>G4Transform3D</literal> and eventually use it again.
2825</para>
2826
2827<para>
2828When positioning a volume associated to a Boolean solid, the
2829relative center of coordinates considered for the positioning is
2830the one related to the <emphasis>first</emphasis> of the two constituent
2831solids.
2832</para>
2833
2834</sect3>
2835
2836
2837<!-- ******************* Section (Level#3) ****************** -->
2838<sect3 id="sect.Geom.Solids.BREPS">
2839<title>
2840Boundary Represented (BREPS) Solids
2841</title>
2842
2843<para>
2844BREP solids are defined via the description of their boundaries.
2845The boundaries can be made of planar and second order surfaces.
2846Eventually these can be trimmed and have holes. The resulting
2847solids, such as polygonal, polyconical solids are known as
2848Elementary BREPS.
2849</para>
2850
2851<para>
2852In addition, the boundary surfaces can be made of Bezier
2853surfaces and B-Splines, or of NURBS
2854(Non-Uniform-Rational-B-Splines) surfaces. The resulting solids are
2855Advanced BREPS.
2856</para>
2857
2858<para>
2859
2860<note><title></title>
2861<para>
2862Currently, the implementation for surfaces
2863generated by Beziers, B-Splines or NURBS is only at the level of
2864prototype and not fully functional.
2865</para>
2866
2867<para>
2868Extensions in this area are foreseen in future.
2869</para>
2870</note>
2871
2872<para>
2873We have defined a few simple Elementary BREPS, that can be
2874instantiated simply by a user in a manner similar to the
2875construction of Constructed Solids (CSGs). We summarize their
2876capabilities in the following section.
2877</para>
2878
2879<para>
2880Most BREPS Solids are however defined by creating each surface
2881separately and tying them together.
2882</para>
2883
2884<!-- ******* Bridgehead ******* -->
2885<bridgehead renderas='sect4'>
2886Specific BREP Solids:
2887</bridgehead>
2888
2889<para>
2890We have defined one polygonal and one polyconical shape using
2891BREPS. The polycone provides a shape defined by a series of conical
2892sections with the same axis, contiguous along it.
2893</para>
2894
2895<para>
2896The polyconical solid <literal>G4BREPSolidPCone</literal> is a shape
2897defined by a set of inner and outer conical or cylindrical surface
2898sections and two planes perpendicular to the Z axis. Each conical
2899surface is defined by its radius at two different planes
2900perpendicular to the Z-axis. Inner and outer conical surfaces are
2901defined using common Z planes.
2902</para>
2903
2904<informalexample>
2905<programlisting>
2906 G4BREPSolidPCone( const G4String&amp; pName,
2907 G4double start_angle,
2908 G4double opening_angle,
2909 G4int num_z_planes, // sections,
2910 G4double z_start,
2911 const G4double z_values[],
2912 const G4double RMIN[],
2913 const G4double RMAX[] )
2914</programlisting>
2915</informalexample>
2916
2917<para>
2918The conical sections do not need to fill 360 degrees, but can have
2919a common start and opening angle.
2920</para>
2921
2922<informaltable pgwide="0">
2923<tgroup cols="2">
2924<tbody>
2925<row>
2926 <entry>
2927 <literal>start_angle</literal>
2928 </entry>
2929 <entry>
2930 starting angle
2931 </entry>
2932</row>
2933<row>
2934 <entry>
2935 <literal>opening_angle</literal>
2936 </entry>
2937 <entry>
2938 opening angle
2939 </entry>
2940</row>
2941<row>
2942 <entry>
2943 <literal>num_z_planes</literal>
2944 </entry>
2945 <entry>
2946 number of planes perpendicular to the z-axis used.
2947 </entry>
2948</row>
2949<row>
2950 <entry>
2951 <literal>z_start</literal>
2952 </entry>
2953 <entry>
2954 starting value of z
2955 </entry>
2956</row>
2957<row>
2958 <entry>
2959 <literal>z_values</literal>
2960 </entry>
2961 <entry>
2962 z coordinates of each plane
2963 </entry>
2964</row>
2965<row>
2966 <entry>
2967 <literal>RMIN</literal>
2968 </entry>
2969 <entry>
2970 radius of inner cone at each plane
2971 </entry>
2972</row>
2973<row>
2974 <entry>
2975 <literal>RMAX</literal>
2976 </entry>
2977 <entry>
2978 radius of outer cone at each plane
2979 </entry>
2980</row>
2981</tbody>
2982</tgroup>
2983</informaltable>
2984</para>
2985
2986<para>
2987The polygonal solid <literal>G4BREPSolidPolyhedra</literal> is a shape
2988defined by an inner and outer polygonal surface and two planes
2989perpendicular to the Z axis. Each polygonal surface is created by
2990linking a series of polygons created at different planes
2991perpendicular to the Z-axis. All these polygons all have the same
2992number of sides (<literal>sides</literal>) and are defined at the same Z
2993planes for both inner and outer polygonal surfaces.
2994</para>
2995
2996<para>
2997The polygons do not need to fill 360 degrees, but have a start
2998and opening angle.
2999</para>
3000
3001<para>
3002The constructor takes the following parameters:
3003
3004<informalexample>
3005<programlisting>
3006 G4BREPSolidPolyhedra( const G4String&amp; pName,
3007 G4double start_angle,
3008 G4double opening_angle,
3009 G4int sides,
3010 G4int num_z_planes,
3011 G4double z_start,
3012 const G4double z_values[],
3013 const G4double RMIN[],
3014 const G4double RMAX[] )
3015</programlisting>
3016</informalexample>
3017
3018which in addition to its name have the following meaning:
3019
3020<informaltable pgwide="0">
3021<tgroup cols="2">
3022<tbody>
3023<row>
3024 <entry>
3025 <literal>start_angle</literal>
3026 </entry>
3027 <entry>
3028 starting angle
3029 </entry>
3030</row>
3031<row>
3032 <entry>
3033 <literal>opening_angle</literal>
3034 </entry>
3035 <entry>
3036 opening angle
3037 </entry>
3038</row>
3039<row>
3040 <entry>
3041 <literal>sides</literal>
3042 </entry>
3043 <entry>
3044 number of sides of each polygon in the x-y plane
3045 </entry>
3046</row>
3047<row>
3048 <entry>
3049 <literal>num_z_planes</literal>
3050 </entry>
3051 <entry>
3052 number of planes perpendicular to the z-axis used.
3053 </entry>
3054</row>
3055<row>
3056 <entry>
3057 <literal>z_start</literal>
3058 </entry>
3059 <entry>
3060 starting value of z
3061 </entry>
3062</row>
3063<row>
3064 <entry>
3065 <literal>z_values</literal>
3066 </entry>
3067 <entry>
3068 z coordinates of each plane
3069 </entry>
3070</row>
3071<row>
3072 <entry>
3073 <literal>RMIN</literal>
3074 </entry>
3075 <entry>
3076 radius of inner polygon at each corner
3077 </entry>
3078</row>
3079<row>
3080 <entry>
3081 <literal>RMAX</literal>
3082 </entry>
3083 <entry>
3084 radius of outer polygon at each corner
3085 </entry>
3086</row>
3087</tbody>
3088</tgroup>
3089</informaltable>
3090
3091the shape is defined by the number of sides <literal>sides</literal> of
3092the polygon in the plane perpendicular to the z-axis.
3093</para>
3094
3095</sect3>
3096
3097
3098<!-- ******************* Section (Level#3) ****************** -->
3099<sect3 id="sect.Geom.Solids.Tessel">
3100<title>
3101Tessellated Solids
3102</title>
3103
3104<para>
3105In Geant4 it is also implemented a class
3106<literal>G4TessellatedSolid</literal> which can be used to generate a generic
3107solid defined by a number of facets (<literal>G4VFacet</literal>). Such
3108constructs are especially important for conversion of complex
3109geometrical shapes imported from CAD systems bounded with generic
3110surfaces into an approximate description with facets of defined
3111dimension (see <xref linkend="fig.Geom.Solid_1" />).
3112
3113<figure id="fig.Geom.Solid_1">
3114<title>
3115 Example of geometries imported from CAD system and converted to
3116 tessellated solids.
3117</title>
3118
3119<mediaobject>
3120 <imageobject role="fo">
3121 <imagedata fileref="./AllResources/Detector/geometry.src/cad-tess-combined.jpg"
3122 format="JPG" width="12.0cm" align="center" />
3123 </imageobject>
3124 <imageobject role="html">
3125 <imagedata fileref="./AllResources/Detector/geometry.src/cad-tess-combined.jpg"
3126 format="JPG" align="center" />
3127 </imageobject>
3128</mediaobject>
3129</figure>
3130</para>
3131
3132<para>
3133They can also be used to generate a solid bounded with a generic
3134surface made of planar facets. It is important that the supplied
3135facets shall form a fully enclose space to represent the solid.
3136</para>
3137
3138<para>
3139Two types of facet can be used for the construction of a
3140<literal>G4TessellatedSolid</literal>: a triangular facet
3141(<literal>G4TriangularFacet</literal>) and a quadrangular facet
3142(<literal>G4QuadrangularFacet</literal>).
3143</para>
3144
3145<para>
3146An example on how to generate a simple tessellated shape is
3147given below.
3148
3149<example id="programlist_Geom_1">
3150<title>
3151An example of a simple tessellated solid with
3152<literal>G4TessellatedSolid</literal>.
3153</title>
3154
3155<programlisting>
3156 // First declare a tessellated solid
3157 //
3158 G4TessellatedSolid solidTarget = new G4TessellatedSolid("Solid_name");
3159
3160 // Define the facets which form the solid
3161 //
3162 G4double targetSize = 10*cm ;
3163 G4TriangularFacet *facet1 = new
3164 G4TriangularFacet (G4ThreeVector(-targetSize,-targetSize, 0.0),
3165 G4ThreeVector(+targetSize,-targetSize, 0.0),
3166 G4ThreeVector( 0.0, 0.0,+targetSize),
3167 ABSOLUTE);
3168 G4TriangularFacet *facet2 = new
3169 G4TriangularFacet (G4ThreeVector(+targetSize,-targetSize, 0.0),
3170 G4ThreeVector(+targetSize,+targetSize, 0.0),
3171 G4ThreeVector( 0.0, 0.0,+targetSize),
3172 ABSOLUTE);
3173 G4TriangularFacet *facet3 = new
3174 G4TriangularFacet (G4ThreeVector(+targetSize,+targetSize, 0.0),
3175 G4ThreeVector(-targetSize,+targetSize, 0.0),
3176 G4ThreeVector( 0.0, 0.0,+targetSize),
3177 ABSOLUTE);
3178 G4TriangularFacet *facet4 = new
3179 G4TriangularFacet (G4ThreeVector(-targetSize,+targetSize, 0.0),
3180 G4ThreeVector(-targetSize,-targetSize, 0.0),
3181 G4ThreeVector( 0.0, 0.0,+targetSize),
3182 ABSOLUTE);
3183 G4QuadrangularFacet *facet5 = new
3184 G4QuadrangularFacet (G4ThreeVector(-targetSize,-targetSize, 0.0),
3185 G4ThreeVector(-targetSize,+targetSize, 0.0),
3186 G4ThreeVector(+targetSize,+targetSize, 0.0),
3187 G4ThreeVector(+targetSize,-targetSize, 0.0),
3188 ABSOLUTE);
3189
3190 // Now add the facets to the solid
3191 //
3192 solidTarget-&gt;AddFacet((G4VFacet*) facet1);
3193 solidTarget-&gt;AddFacet((G4VFacet*) facet2);
3194 solidTarget-&gt;AddFacet((G4VFacet*) facet3);
3195 solidTarget-&gt;AddFacet((G4VFacet*) facet4);
3196 solidTarget-&gt;AddFacet((G4VFacet*) facet5);
3197
3198 Finally declare the solid is complete
3199 //
3200 solidTarget-&gt;SetSolidClosed(true);
3201</programlisting>
3202</example>
3203</para>
3204
3205<para>
3206The <literal>G4TriangularFacet</literal> class is used for the contruction
3207of <literal>G4TessellatedSolid</literal>. It is defined by three vertices,
3208which shall be supplied in <emphasis>anti-clockwise order</emphasis> looking from
3209the outside of the solid where it belongs. Its constructor looks
3210like:
3211
3212<informalexample>
3213<programlisting>
3214 G4TriangularFacet ( const G4ThreeVector Pt0,
3215 const G4ThreeVector vt1,
3216 const G4ThreeVector vt2,
3217 G4FacetVertexType fType )
3218</programlisting>
3219</informalexample>
3220
3221i.e., it takes 4 parameters to define the three vertices:
3222
3223<informaltable pgwide="0">
3224<tgroup cols="2">
3225<tbody>
3226<row>
3227 <entry>
3228 <literal>G4FacetVertexType</literal>
3229 </entry>
3230 <entry>
3231 <literal>ABSOLUTE</literal> in which case <literal>Pt0</literal>,
3232 <literal>vt1</literal> and <literal>vt2</literal>
3233 are the three vertices in anti-clockwise order looking from the outside.
3234 </entry>
3235</row>
3236<row>
3237 <entry>
3238 <literal>G4FacetVertexType</literal>
3239 </entry>
3240 <entry>
3241 <literal>RELATIVE</literal> in which case the first vertex is
3242 <literal>Pt0</literal>, the second vertex is <literal>Pt0+vt1</literal> and
3243 the third vertex is <literal>Pt0+vt2</literal>, all in anti-clockwise order
3244 when looking from the outside.
3245</entry>
3246</row>
3247</tbody>
3248</tgroup>
3249</informaltable>
3250</para>
3251
3252<para>
3253The <literal>G4QuadrangularFacet</literal> class can be used for the
3254contruction of <literal>G4TessellatedSolid</literal> as well. It is defined
3255by four vertices, which shall be in the same plane and be supplied
3256in <emphasis>anti-clockwise order</emphasis> looking from the outside of the
3257solid where it belongs. Its constructor looks like:
3258
3259<informalexample>
3260<programlisting>
3261 G4QuadrangularFacet ( const G4ThreeVector Pt0,
3262 const G4ThreeVector vt1,
3263 const G4ThreeVector vt2,
3264 const G4ThreeVector vt3,
3265 G4FacetVertexType fType )
3266</programlisting>
3267</informalexample>
3268
3269i.e., it takes 5 parameters to define the four vertices:
3270
3271<informaltable pgwide="0">
3272<tgroup cols="2">
3273<tbody>
3274<row>
3275 <entry>
3276 <literal>G4FacetVertexType</literal>
3277 </entry>
3278 <entry>
3279 <literal>ABSOLUTE</literal> in which case <literal>Pt0</literal>,
3280 <literal>vt1</literal>, <literal>vt2</literal> and <literal>vt3</literal>
3281 are the four vertices required in anti-clockwise order when looking
3282 from the outside.
3283 </entry>
3284</row>
3285<row>
3286 <entry>
3287 <literal>G4FacetVertexType</literal>
3288 </entry>
3289 <entry>
3290 <literal>RELATIVE</literal> in which case the first vertex is
3291 <literal>Pt0</literal>, the second vertex is <literal>Pt0+vt</literal>,
3292 the third vertex is <literal>Pt0+vt2</literal> and the fourth vertex is
3293 <literal>Pt0+vt3</literal>, in anti-clockwise order when looking from the
3294 outside.
3295 </entry>
3296</row>
3297</tbody>
3298</tgroup>
3299</informaltable>
3300</para>
3301
3302<!-- ******* Bridgehead ******* -->
3303<bridgehead renderas='sect4'>
3304Importing CAD models as tessellated shapes
3305</bridgehead>
3306
3307<para>
3308Tessellated solids can also be used to import geometrical models from CAD
3309systems (see <xref linkend="fig.Geom.Solid_1" />). In order to do this, it
3310is required to convert first the CAD shapes into tessellated surfaces. A
3311way to do this is to save the shapes in the geometrical model as STEP files
3312and convert them using a tool like
3313<ulink url="http://www.steptools.com/products/stviewer/">STViewer</ulink> or
3314<ulink url="http://www.trad.fr/en/">FASTRAD</ulink> to
3315tessellated (faceted surfaces) solids. This strategy allows to import any shape
3316with some degree of approximation; the converted CAD models can then be
3317imported through <ulink url="http://cern.ch/gdml/">GDML (Geometry Description
3318Markup Language)</ulink> into Geant4 and be represented as
3319<literal>G4TessellatedSolid</literal> shapes.
3320</para>
3321
3322</sect3>
3323</sect2>
Note: See TracBrowser for help on using the repository browser.