[1208] | 1 | <html> |
---|
| 2 | <head> |
---|
| 3 | <title>ADG: Geometry</title> |
---|
| 4 | </head> |
---|
| 5 | |
---|
| 6 | <!-- Changed by: Gabriele Cosmo, 18-Apr-2005 --> |
---|
| 7 | <!-- $Id: geomOverlap.html,v 1.4 2006/06/09 13:58:38 gcosmo Exp $ --> |
---|
| 8 | <!-- $Name: $ --> |
---|
| 9 | <body> |
---|
| 10 | <table WIDTH="100%"><TR> |
---|
| 11 | <td> |
---|
| 12 | <a href="../../../../Overview/html/index.html"> |
---|
| 13 | <IMG SRC="../../../../resources/html/IconsGIF/Overview.gif" ALT="Overview"></a> |
---|
| 14 | <a href="geometry.html"> |
---|
| 15 | <IMG SRC="../../../../resources/html/IconsGIF/Contents.gif" ALT="Contents"></a> |
---|
| 16 | <a href="geomG3toG4.html"> |
---|
| 17 | <IMG SRC="../../../../resources/html/IconsGIF/Previous.gif" ALT="Previous"></a> |
---|
| 18 | <a href="geomDynamic.html"> |
---|
| 19 | <IMG SRC="../../../../resources/html/IconsGIF/Next.gif" ALT="Next"></a> |
---|
| 20 | </td> |
---|
| 21 | <td ALIGN="Right"> |
---|
| 22 | <font SIZE="-1" COLOR="#238E23"> |
---|
| 23 | <b>Geant4 User's Guide</b> |
---|
| 24 | <br> |
---|
| 25 | <b>For Application Developers</b> |
---|
| 26 | <br> |
---|
| 27 | <b>Geometry</b> |
---|
| 28 | </font> |
---|
| 29 | </td> |
---|
| 30 | </tr></table> |
---|
| 31 | <br><br> |
---|
| 32 | |
---|
| 33 | <a name="4.1.11"> |
---|
| 34 | <h2>4.1.11 Detecting Overlapping Volumes</h2></a> |
---|
| 35 | |
---|
| 36 | <b>The problem of overlapping volumes</b> |
---|
| 37 | <p> |
---|
| 38 | Volumes are often positioned within other volumes with the intent that |
---|
| 39 | one is fully contained within the other. If, however, a volume extends |
---|
| 40 | beyond the boundaries of its mother volume, it is defined as overlapping. |
---|
| 41 | It may also be intended that volumes are positioned within the same mother |
---|
| 42 | volume such that they do not intersect one another. When such volumes do |
---|
| 43 | intersect, they are also defined as overlapping. |
---|
| 44 | </p> |
---|
| 45 | |
---|
| 46 | <p> |
---|
| 47 | The problem of detecting overlaps between volumes is bounded by the |
---|
| 48 | complexity of the solid model description. Hence it requires the same |
---|
| 49 | mathematical sophistication which is needed to describe the most complex |
---|
| 50 | solid topology, in general. However, a tunable accuracy can be obtained |
---|
| 51 | by approximating the solids via first and/or second order surfaces and |
---|
| 52 | checking their intersections. |
---|
| 53 | </p> |
---|
| 54 | |
---|
| 55 | <P> </P> |
---|
| 56 | |
---|
| 57 | <b>Detecting overlaps: built-in kernel commands</b> |
---|
| 58 | |
---|
| 59 | <p> |
---|
| 60 | In general, the most powerful clash detection algorithms are provided by |
---|
| 61 | CAD systems, treating the intersection between the solids in their topological |
---|
| 62 | form. |
---|
| 63 | </p> |
---|
| 64 | |
---|
| 65 | <p> |
---|
| 66 | Geant4 provides some built-in run-time commands to activate |
---|
| 67 | verification tests for the user-defined geometry: |
---|
| 68 | <PRE> |
---|
| 69 | geometry/test/grid_test [recursion_flag] |
---|
| 70 | --> to start verification of geometry for overlapping regions |
---|
| 71 | based on standard lines grid setup. If the "recursion_flag" is |
---|
| 72 | set to 'false' (the default), the check is limited to the first |
---|
| 73 | depth level of the geometry tree; otherwise it visits recursively |
---|
| 74 | the whole geometry tree. In the latter case, it may take a long |
---|
| 75 | time, depending on the complexity of the geometry. |
---|
| 76 | geometry/test/cylinder_test [recursion_flag] |
---|
| 77 | --> shoots lines according to a cylindrical pattern. If the |
---|
| 78 | "recursion_flag" is set to 'false' (the default), the check is |
---|
| 79 | limited to the first depth level of the geometry tree; otherwise |
---|
| 80 | it visits recursively the whole geometry tree. In the latter case, |
---|
| 81 | it may take a long time, depending on the complexity of the geometry. |
---|
| 82 | geometry/test/line_test [recursion_flag] |
---|
| 83 | --> shoots a line according to a specified direction and position |
---|
| 84 | defined by the user. If the "recursion_flag" is set to 'false' |
---|
| 85 | (the default), the check is limited to the first depth level of the |
---|
| 86 | geometry tree; otherwise it visits recursively the whole geometry |
---|
| 87 | tree. |
---|
| 88 | geometry/test/position |
---|
| 89 | --> to specify position for the line_test. |
---|
| 90 | geometry/test/direction |
---|
| 91 | --> to specify direction for the line_test. |
---|
| 92 | geometry/test/grid_cells |
---|
| 93 | --> to define the resolution of the lines in the grid test as number |
---|
| 94 | of cells, specifying them for each dimension, X, Y and Z. |
---|
| 95 | The new settings will be applied to the grid_test command. |
---|
| 96 | geometry/test/cylinder_geometry |
---|
| 97 | --> to define the details of the cylinder geometry, by specifying: |
---|
| 98 | nPhi - number of lines per Phi |
---|
| 99 | nZ - number of Z points |
---|
| 100 | nRho - number of Rho points |
---|
| 101 | The new settings will be applied to the cylinder_test command. |
---|
| 102 | geometry/test/cylinder_scaleZ |
---|
| 103 | --> to define the resolution of the cylinder geometry, by specifying |
---|
| 104 | the fraction scale for points along Z. |
---|
| 105 | The new settings will be applied to the cylinder_test command. |
---|
| 106 | geometry/test/cylinder_scaleRho |
---|
| 107 | --> to define the resolution of the cylinder geometry, by specifying |
---|
| 108 | the fraction scale for points along Rho. |
---|
| 109 | The new settings will be applied to the cylinder_test command. |
---|
| 110 | geometry/test/recursion_start |
---|
| 111 | --> to set the initial level in the geometry tree for starting the |
---|
| 112 | recursion (default value being zero, i.e. the world volume). |
---|
| 113 | The new settings will then be applied to any recursive test. |
---|
| 114 | geometry/test/recursion_depth |
---|
| 115 | --> to set the depth in the geometry tree for recursion, so that |
---|
| 116 | recursion will stop after having reached the specified depth (the |
---|
| 117 | default being the full depth of the geometry tree). |
---|
| 118 | The new settings will then be applied to any recursive test. |
---|
| 119 | </PRE> |
---|
| 120 | </P> |
---|
| 121 | |
---|
| 122 | To detect overlapping volumes, the built-in test uses the intersection |
---|
| 123 | of solids with linear trajectories. For example, consider figure 4.1.4:</P> |
---|
| 124 | |
---|
| 125 | <center> |
---|
| 126 | <table BORDER=1 CELLPADDING=8> |
---|
| 127 | <tr><td> |
---|
| 128 | <IMG SRC="geometry.src/geomtest.gif" ALT="|Geometry Test|" HEIGHT=162 WIDTH=402> |
---|
| 129 | </td></tr> |
---|
| 130 | <tr> |
---|
| 131 | <td ALIGN=center> |
---|
| 132 | Figure 4.1.4<BR> |
---|
| 133 | Different cases of placed volumes overlapping each other. |
---|
| 134 | </td></tr> |
---|
| 135 | </table> |
---|
| 136 | </center> |
---|
| 137 | |
---|
| 138 | <p> |
---|
| 139 | Here we have a line intersecting some physical volume (large, black rectangle). |
---|
| 140 | Belonging to the volume are four daughters: A, B, C, and D. |
---|
| 141 | Indicated by the dots are the intersections of the line with the |
---|
| 142 | mother volume and the four daughters. |
---|
| 143 | </p> |
---|
| 144 | |
---|
| 145 | <p> |
---|
| 146 | This example has two geometry errors. First, volume A sticks outside its |
---|
| 147 | mother volume (this practice, sometimes used in GEANT3.21, is not allowed |
---|
| 148 | in Geant4). This can be noticed because the intersection point (leftmost |
---|
| 149 | magenta dot) lies outside the mother volume, as defined by the space |
---|
| 150 | between the two black dots. |
---|
| 151 | </p> |
---|
| 152 | |
---|
| 153 | <p> |
---|
| 154 | The second error is that daughter volumes A and B overlap. This is noticeable |
---|
| 155 | because one of the intersections with A (rightmost magenta dot) is |
---|
| 156 | inside the volume B, as defined as the space between the red dots. |
---|
| 157 | Alternatively, one of the intersections with B (leftmost red dot) is |
---|
| 158 | inside the volume A, as defined as the space between the magenta dots. |
---|
| 159 | </p> |
---|
| 160 | |
---|
| 161 | <p> |
---|
| 162 | Each of these two types of errors is represented by a line segment, |
---|
| 163 | which has a start point, an end point, and, a length. |
---|
| 164 | Depending on the type of error, the points are most clearly recognized in |
---|
| 165 | either the coordinate system of the volume, the global coordinate |
---|
| 166 | system, or the coordinate system of the daughters involved.</P> |
---|
| 167 | |
---|
| 168 | <P> |
---|
| 169 | Also notice that certain errors will be missed unless a line |
---|
| 170 | is supplied in precisely the correct path. Unfortunately, it is hard to |
---|
| 171 | predict which lines are best at uncovering potential geometry errors. |
---|
| 172 | Instead, the geometry testing code uses a grid of lines, in the hope of |
---|
| 173 | at least uncovering gross geometry errors. |
---|
| 174 | More subtle errors could easily be missed.</P> |
---|
| 175 | |
---|
| 176 | <P> |
---|
| 177 | Another difficult issue is roundoff error. For example, daughters C and D |
---|
| 178 | lie precisely next to each other. It is possible, due to roundoff, |
---|
| 179 | that one of the intersections points will lie just slightly inside the |
---|
| 180 | space of the other. In addition, a volume that lies tightly up against |
---|
| 181 | the outside of its mother may have an intersection point that just slightly |
---|
| 182 | lies outside the mother.</P> |
---|
| 183 | |
---|
| 184 | <P> |
---|
| 185 | To avoid spurious errors caused by roundoff, a rather generous tolerance |
---|
| 186 | of 0.1 micron is used by default. This tolerance can be adjusted as |
---|
| 187 | needed by the application through the run-time command: |
---|
| 188 | <PRE> |
---|
| 189 | geometry/test/tolerance <new-value> |
---|
| 190 | </PRE> |
---|
| 191 | </P> |
---|
| 192 | |
---|
| 193 | <P> |
---|
| 194 | Finally, notice that no mention is made of the possible daughter volumes |
---|
| 195 | of A, B, C, and D. To keep the code simple, only the immediate daughters |
---|
| 196 | of a volume are checked at one pass. To test these "granddaughter" volumes, |
---|
| 197 | the daughters A, B, C, and D each have to be tested themselves in turn. |
---|
| 198 | To make this more automatic, an optional recursive algorithm is included; |
---|
| 199 | it first tests a target volume, then it loops over all |
---|
| 200 | daughter volumes and calls itself.</P> |
---|
| 201 | |
---|
| 202 | <P>Pay attention! For a complex geometry, checking the entire volume |
---|
| 203 | hierarchy can be extremely time consuming.</P> |
---|
| 204 | |
---|
| 205 | <P> </P> |
---|
| 206 | |
---|
| 207 | <b>Detecting overlaps at construction</b> |
---|
| 208 | |
---|
| 209 | <P> |
---|
| 210 | Since release 8.0, the Geant4 geometry modeler provides the ability to |
---|
| 211 | detect overlaps of placed volumes (normal placements or parameterised) |
---|
| 212 | at the time of construction. This check is optional and can be activated |
---|
| 213 | when instantiating a placement (see <tt>G4PVPlacement</tt> constructor in |
---|
| 214 | <a href="geomPhysical.html#4.1.4.1">Section 4.1.4.1</a>) or a parameterised |
---|
| 215 | volume (see <tt>G4PVParameterised</tt> constructor in |
---|
| 216 | <a href="geomPhysical.html#4.1.4.2">Section 4.1.4.2</a>).<br> |
---|
| 217 | The positioning of that specific volume will be checked against all volumes |
---|
| 218 | in the same hierarchy level and its mother volume. |
---|
| 219 | Depending on the complexity of the geometry being checked, the check may |
---|
| 220 | require considerable CPU time; it is therefore suggested to use it only |
---|
| 221 | for debugging the geometry setup and to apply it only to the part of the |
---|
| 222 | geometry setup which requires debugging.</P> |
---|
| 223 | <P> |
---|
| 224 | The classes <tt>G4PVPlacement</tt> and <tt>G4PVParameterised</tt> also |
---|
| 225 | provide a method: |
---|
| 226 | <pre> |
---|
| 227 | G4bool CheckOverlaps(G4int res=1000) |
---|
| 228 | </pre> |
---|
| 229 | which will force the check for the specified volume. The check verifies |
---|
| 230 | if each placed or parameterised instance is overlapping with other instances |
---|
| 231 | or with its mother volume. A default resolution for the number of points to |
---|
| 232 | be generated and verified is provided. The method returns <tt>true</tt> if |
---|
| 233 | an overlap occurs.</P> |
---|
| 234 | |
---|
| 235 | <P> </P> |
---|
| 236 | |
---|
| 237 | <B>Using the visualization driver: DAVID</B> |
---|
| 238 | |
---|
| 239 | <p> |
---|
| 240 | The Geant4 visualization offers a powerful debugging tool for detecting |
---|
| 241 | potential intersections of physical volumes. The Geant4 DAVID visualization |
---|
| 242 | tool <a href="#DAVID">[2]</a> can infact automatically detect the overlaps |
---|
| 243 | between the volumes defined in Geant4 and converted to a graphical |
---|
| 244 | representation for visualization purposes. The accuracy of the graphical |
---|
| 245 | representation can be tuned onto the exact geometrical description. In the |
---|
| 246 | debugging, physical-volume surfaces are automatically decomposed into 3D |
---|
| 247 | polygons, and intersections of the generated polygons are investigated. If a |
---|
| 248 | polygon intersects with another one, physical volumes which these polygons |
---|
| 249 | belong to are visualized in color (red is the default). The figure 4.1.5 below |
---|
| 250 | is a sample visualization of a detector geometry with intersecting physical |
---|
| 251 | volumes highlighted: |
---|
| 252 | </p> |
---|
| 253 | |
---|
| 254 | <center> |
---|
| 255 | <table BORDER=1 CELLPADDING=8> |
---|
| 256 | <tr><td> |
---|
| 257 | <IMG SRC="geometry.src/DAVID_SAMPLE.gif" ALT="|DAVID Geometry Test|" HEIGHT=567 WIDTH=322></P> |
---|
| 258 | </td></tr> |
---|
| 259 | <tr> |
---|
| 260 | <td ALIGN=center> |
---|
| 261 | Figure 4.1.5<BR> |
---|
| 262 | A geometry with overlapping volumes highlighted by DAVID. |
---|
| 263 | </td></tr> |
---|
| 264 | </table> |
---|
| 265 | </center> |
---|
| 266 | |
---|
| 267 | <p> |
---|
| 268 | At present physical volumes made of the following solids are able to |
---|
| 269 | be debugged: <tt>G4Box</tt>, <tt>G4Cons</tt>, <tt>G4Para</tt>, |
---|
| 270 | <tt>G4Sphere</tt>, <tt>G4Trd</tt>, <tt>G4Trap</tt>, <tt>G4Tubs</tt>. |
---|
| 271 | (Existence of other solids is harmless.) |
---|
| 272 | </p> |
---|
| 273 | |
---|
| 274 | <p> |
---|
| 275 | Visual debugging of physical-volume surfaces is performed with the DAWNFILE |
---|
| 276 | driver defined in the visualization category and with the two application |
---|
| 277 | packages, i.e. Fukui Renderer "DAWN" and a visual intersection |
---|
| 278 | debugger "DAVID". DAWN <a href="#DAWN">[1]</a> and |
---|
| 279 | DAVID <a href="#DAVID">[2]</a> can be downloaded from the Web. |
---|
| 280 | </p> |
---|
| 281 | |
---|
| 282 | <p> |
---|
| 283 | How to compile Geant4 with the DAWNFILE driver incorporated is described |
---|
| 284 | in <A HREF="../Visualization/visdrivers.html"> Section 8.3</A>. |
---|
| 285 | </p> |
---|
| 286 | |
---|
| 287 | <p> |
---|
| 288 | If the DAWNFILE driver, DAWN and DAVID are all working well in your |
---|
| 289 | host machine, the visual intersection debugging of physical-volume surfaces |
---|
| 290 | can be performed as follows:</P> |
---|
| 291 | |
---|
| 292 | <P> |
---|
| 293 | Run your Geant4 executable, invoke the DAWNFILE driver, and execute |
---|
| 294 | visualization commands to visualize your detector geometry: |
---|
| 295 | |
---|
| 296 | <PRE> |
---|
| 297 | Idle> /vis/open DAWNFILE |
---|
| 298 | .....(setting camera etc)... |
---|
| 299 | Idle> /vis/drawVolume |
---|
| 300 | Idle> /vis/viewer/update |
---|
| 301 | </PRE></P> |
---|
| 302 | |
---|
| 303 | <P> |
---|
| 304 | Then a file "g4.prim", which describes the detector geometry, |
---|
| 305 | is generated in the current directory and DAVID is invoked to read it. |
---|
| 306 | (The description of the format of the file g4.prim can be found from the |
---|
| 307 | <a href="http://geant4.kek.jp/GEANT4/vis/DAWN/G4PRIM_FORMAT_24/">DAWN web |
---|
| 308 | site documentation</a>.)</P> |
---|
| 309 | |
---|
| 310 | <P> |
---|
| 311 | If DAVID detects intersection of physical-volume surfaces, it automatically |
---|
| 312 | invokes DAWN to visualize the detector geometry with the intersected physical |
---|
| 313 | volumes highlighted (See the above sample visualization).</P> |
---|
| 314 | |
---|
| 315 | <P> |
---|
| 316 | If no intersection is detected, visualization is skipped and the following |
---|
| 317 | message is displayed on the console: |
---|
| 318 | |
---|
| 319 | <PRE> |
---|
| 320 | ------------------------------------------------------ |
---|
| 321 | !!! Number of intersected volumes : 0 !!! |
---|
| 322 | !!! Congratulations ! \(^o^)/ !!! |
---|
| 323 | ------------------------------------------------------ |
---|
| 324 | </PRE></P> |
---|
| 325 | |
---|
| 326 | <P> |
---|
| 327 | If you always want to skip visualization, set an environmental variable |
---|
| 328 | as follows beforehand: |
---|
| 329 | |
---|
| 330 | <PRE> |
---|
| 331 | % setenv DAVID_NO_VIEW 1 |
---|
| 332 | </PRE></P> |
---|
| 333 | |
---|
| 334 | <P> |
---|
| 335 | To control the precision associated to computation of intersections (default |
---|
| 336 | precision is set to 9), it is possible to use the environmental variable for |
---|
| 337 | the DAWNFILE graphics driver, as follows: |
---|
| 338 | |
---|
| 339 | <PRE> |
---|
| 340 | % setenv G4DAWNFILE_PRECISION 10 |
---|
| 341 | </PRE></P> |
---|
| 342 | |
---|
| 343 | <P> |
---|
| 344 | If necessary, re-visualize the detector geometry with intersected parts |
---|
| 345 | highlighted. The data are saved in a file "g4david.prim" in the |
---|
| 346 | current directory. This file can be re-visualized with DAWN as follows: |
---|
| 347 | |
---|
| 348 | <PRE> |
---|
| 349 | % dawn g4david.prim |
---|
| 350 | </PRE></P> |
---|
| 351 | |
---|
| 352 | <P> |
---|
| 353 | It is also helpful to convert the generated file g4david.prim into a |
---|
| 354 | VRML-formatted file and perform interactive visualization of it with your |
---|
| 355 | WWW browser. The file conversion tool <tt>prim2wrml</tt> can be downloaded |
---|
| 356 | from the <A HREF="http://geant4.kek.jp/GEANT4/vis/DAWN/About_prim2vrml1.html">DAWN |
---|
| 357 | web site download pages</A>.</P> |
---|
| 358 | </OL> |
---|
| 359 | |
---|
| 360 | <P> |
---|
| 361 | For more details, see the <A HREF="http://geant4.kek.jp/GEANT4/vis/DAWN/About_DAVID.html">document |
---|
| 362 | of DAVID</A> mentioned above.</P> |
---|
| 363 | |
---|
| 364 | <P> </P> |
---|
| 365 | |
---|
| 366 | <b>Using the geometry debugging tool OLAP</b> |
---|
| 367 | |
---|
| 368 | <p> |
---|
| 369 | <b>OLAP</b> is a tool developed in the CMS experiment at CERN to help in |
---|
| 370 | identifying ovelapping volumes in a detector geometry. It is placed in the |
---|
| 371 | area for specific tools/examples, in |
---|
| 372 | <tt>geant4/examples/extended/geometry</tt>. The technique consists in |
---|
| 373 | shooting <tt>geantinos</tt> particles in one direction and the opposite one, |
---|
| 374 | and verifying that the boundary crossings are the same. |
---|
| 375 | <br> |
---|
| 376 | The tool can be used for any Geant4 geometry, provided that the user |
---|
| 377 | geometry to be debugged is available as a subclass of |
---|
| 378 | <tt>G4VUserDetectorConstruction</tt> and is used to construct the |
---|
| 379 | <tt>OlapDetConstr</tt> class of the tool. A dummy class |
---|
| 380 | <tt>RandomDetector</tt> is provided for this purpose in the tool itself.<BR> |
---|
| 381 | Run-time commands are provided by the tool to navigate in the geometry tree. |
---|
| 382 | UNIX like navigation of the logical volume hierarchy is provided by the |
---|
| 383 | <tt>/olap/cd</tt> command. The root of the logical volume tree can be accessed |
---|
| 384 | by the character '/'. Any node in the volume tree can be accessed by a '/' |
---|
| 385 | separated string of regular expressions. If '/' is at the beginning of the |
---|
| 386 | string, the tree hierarchy is transversed from the root, otherwise from the |
---|
| 387 | currently chosen logical volume. Further the command |
---|
| 388 | <tt>/olap/goto [regexp]</tt> can be used to jump to the first logical volume |
---|
| 389 | matching the expression <tt>[regexp]</tt>. |
---|
| 390 | Every successful navigation command (<tt>/olap/cd</tt>, <tt>olap/goto</tt>) |
---|
| 391 | results in the construction of a <tt>NewWorld</tt>, the mother volume being |
---|
| 392 | the argument of the command and the daughter volumes being the direct |
---|
| 393 | daughters of the mother volume.<BR> |
---|
| 394 | <tt>/olap/pwd</tt> always shows where in the full geometrical hierarchy the |
---|
| 395 | current <tt>NewWorld</tt> and mother volume are located.<BR> |
---|
| 396 | For more detailed information, view the <tt>README</tt> file provided with |
---|
| 397 | the tool. |
---|
| 398 | </p> |
---|
| 399 | <br> |
---|
| 400 | <hr> |
---|
| 401 | <p> |
---|
| 402 | <table> |
---|
| 403 | <tr><td valign=top><a name="DAWN">[1]</a> |
---|
| 404 | <td><a href="http://geant4.kek.jp/GEANT4/vis/DAWN/About_DAWN.html">http://geant4.kek.jp/GEANT4/vis/DAWN/About_DAWN.html</a> |
---|
| 405 | <tr><td valign=top><a name="DAVID">[2]</a> |
---|
| 406 | <td><a href="http://geant4.kek.jp/GEANT4/vis/DAWN/About_DAVID.html">http://geant4.kek.jp/GEANT4/vis/DAWN/About_DAVID.html</a> |
---|
| 407 | </table> |
---|
| 408 | </p> |
---|
| 409 | |
---|
| 410 | <hr><a href="../../../../Authors/html/subjectsToAuthors.html"> |
---|
| 411 | <i>About the authors</a></i> </P> |
---|
| 412 | |
---|
| 413 | </body> |
---|
| 414 | </html> |
---|