Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:48:51

0001 #!/usr/bin/env python
0002 #
0003 # Copyright (c) 2019 Opticks Team. All Rights Reserved.
0004 #
0005 # This file is part of Opticks
0006 # (see https://bitbucket.org/simoncblyth/opticks).
0007 #
0008 # Licensed under the Apache License, Version 2.0 (the "License"); 
0009 # you may not use this file except in compliance with the License.  
0010 # You may obtain a copy of the License at
0011 #
0012 #   http://www.apache.org/licenses/LICENSE-2.0
0013 #
0014 # Unless required by applicable law or agreed to in writing, software 
0015 # distributed under the License is distributed on an "AS IS" BASIS, 
0016 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
0017 # See the License for the specific language governing permissions and 
0018 # limitations under the License.
0019 #
0020 
0021 """
0022 
0023 http://lxml.de/tutorial.html#the-e-factory
0024 
0025 """
0026 
0027 import os, re, logging, math, collections
0028 
0029 log = logging.getLogger(__name__)
0030 
0031 from opticks.ana.base import opticks_main
0032 
0033 import numpy as np
0034 import lxml.etree as ET
0035 import lxml.html as HT
0036 from lxml.builder import E
0037 
0038 
0039 tostring_ = lambda _:ET.tostring(_,pretty_print=True)
0040 exists_ = lambda _:os.path.exists(os.path.expandvars(_))
0041 parse_ = lambda _:ET.parse(os.path.expandvars(_)).getroot()
0042 fparse_ = lambda _:HT.fragments_fromstring(file(os.path.expandvars(_)).read())
0043 pp_ = lambda d:"\n".join([" %30s : %f " % (k,d[k]) for k in sorted(d.keys())])
0044 
0045 
0046 materials=ET.fromstring(r"""
0047   <materials>
0048     <material name="/dd/Materials/Pyrex0xc1005e0" state="solid">
0049     </material>
0050     <material name="/dd/Materials/MineralOil0xbf5c830" state="solid">
0051     </material>
0052     <material name="/dd/Materials/UnstStainlessSteel0xc5c11e8" state="solid">
0053     </material>
0054   </materials>
0055 """)
0056 
0057 
0058 solids=ET.fromstring(r"""
0059   <solids>
0060 
0061     <sphere aunit="deg" deltaphi="360" deltatheta="180" lunit="mm" name="pmt-hemi-face-glass0xc0fde80" rmax="131" rmin="0" startphi="0" starttheta="0"/>
0062     <sphere aunit="deg" deltaphi="360" deltatheta="180" lunit="mm" name="pmt-hemi-top-glass0xc0fdef0" rmax="102" rmin="0" startphi="0" starttheta="0"/>
0063     <intersection name="pmt-hemi-face-glass*ChildForpmt-hemi-glass-bulb0xbf1f8d0">
0064       <first ref="pmt-hemi-face-glass0xc0fde80"/>
0065       <second ref="pmt-hemi-top-glass0xc0fdef0"/>
0066       <position name="pmt-hemi-face-glass*ChildForpmt-hemi-glass-bulb0xbf1f8d0_pos" unit="mm" x="0" y="0" z="43"/>
0067     </intersection>
0068 
0069      <sphere aunit="deg" deltaphi="360" deltatheta="180" lunit="mm" name="pmt-hemi-bot-glass0xc0feac8" rmax="102" rmin="0" startphi="0" starttheta="0"/>
0070 
0071     <intersection name="pmt-hemi-glass-bulb0xc0feb98">
0072       <first ref="pmt-hemi-face-glass*ChildForpmt-hemi-glass-bulb0xbf1f8d0"/>
0073       <second ref="pmt-hemi-bot-glass0xc0feac8"/>
0074       <position name="pmt-hemi-glass-bulb0xc0feb98_pos" unit="mm" x="0" y="0" z="69"/>
0075     </intersection>
0076 
0077     <tube aunit="deg" deltaphi="360" lunit="mm" name="pmt-hemi-base0xc0fecb0" rmax="42.25" rmin="0" startphi="0" z="169"/>
0078 
0079     <union name="pmt-hemi0xc0fed90">
0080       <first ref="pmt-hemi-glass-bulb0xc0feb98"/>
0081       <second ref="pmt-hemi-base0xc0fecb0"/>
0082       <position name="pmt-hemi0xc0fed90_pos" unit="mm" x="0" y="0" z="-84.5"/>
0083     </union>
0084 
0085     <tube aunit="deg" deltaphi="360" lunit="mm" name="AdPmtCollar0xc2c5260" rmax="106" rmin="105" startphi="0" z="12.7"/>
0086 
0087     <tube aunit="deg" deltaphi="360" lunit="mm" name="oil0xbf5ed48" rmax="2488" rmin="0" startphi="0" z="4955"/>
0088 
0089 
0090    </solids>
0091 """)
0092 
0093 
0094 """
0095       <physvol name="/dd/Geometry/AD/lvOIL#pvOAV0xbf8f638">
0096         <volumeref ref="/dd/Geometry/AD/lvOAV0xbf1c760"/>
0097         <position name="/dd/Geometry/AD/lvOIL#pvOAV0xbf8f638_pos" unit="mm" x="0" y="0" z="-49"/>
0098         <rotation name="/dd/Geometry/AD/lvOIL#pvOAV0xbf8f638_rot" unit="deg" x="0" y="0" z="-180"/>
0099       </physvol>
0100 
0101 
0102 """
0103 
0104 structure={}
0105 
0106 structure["collar"]=ET.fromstring(r"""
0107 
0108    <structure>
0109 
0110     <volume name="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0">
0111       <materialref ref="/dd/Materials/UnstStainlessSteel0xc5c11e8"/>
0112       <solidref ref="AdPmtCollar0xc2c5260"/>
0113     </volume>
0114  
0115     <volume name="/dd/Geometry/AD/lvOIL0xbf5e0b8">
0116       <materialref ref="/dd/Materials/MineralOil0xbf5c830"/>
0117       <solidref ref="oil0xbf5ed48"/>
0118 
0119       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmtCollar0xc569920">
0120         <volumeref ref="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0"/>
0121         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmtCollar0xc569920_pos" unit="mm" x="-2249.09266802649" y="-296.098667051187" z="-1750"/>
0122         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmtCollar0xc569920_rot" unit="deg" x="90" y="-82.5" z="90"/>
0123       </physvol>
0124 
0125  
0126     </volume>
0127   </structure>
0128 """)
0129 
0130 
0131 structure["collar2"]=ET.fromstring(r"""
0132 
0133    <structure>
0134 
0135     <volume name="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0">
0136       <materialref ref="/dd/Materials/UnstStainlessSteel0xc5c11e8"/>
0137       <solidref ref="AdPmtCollar0xc2c5260"/>
0138     </volume>
0139  
0140     <volume name="/dd/Geometry/AD/lvOIL0xbf5e0b8">
0141       <materialref ref="/dd/Materials/MineralOil0xbf5c830"/>
0142       <solidref ref="oil0xbf5ed48"/>
0143 
0144       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmtCollar0xc569920">
0145         <volumeref ref="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0"/>
0146         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmtCollar0xc569920_pos" unit="mm" x="-2249.09266802649" y="-296.098667051187" z="-1750"/>
0147         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmtCollar0xc569920_rot" unit="deg" x="90" y="-82.5" z="90"/>
0148       </physvol>
0149 
0150 
0151       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:2#pvAdPmtUnit#pvAdPmtCollar0xc25dce8">
0152         <volumeref ref="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0"/>
0153         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:2#pvAdPmtUnit#pvAdPmtCollar0xc25dce8_pos" unit="mm" x="-2095.82071950185" y="-868.117366320206" z="-1750"/>
0154         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:2#pvAdPmtUnit#pvAdPmtCollar0xc25dce8_rot" unit="deg" x="90" y="-67.5" z="90"/>
0155       </physvol>
0156 
0157 
0158 
0159  
0160     </volume>
0161   </structure>
0162 """)
0163 
0164 
0165 
0166 
0167 
0168 
0169 
0170 structure["pmt1"]=ET.fromstring(r"""
0171    <structure>
0172     <volume name="/dd/Geometry/PMT/lvPmtHemi0xc133740">
0173       <materialref ref="/dd/Materials/Pyrex0xc1005e0"/>
0174       <solidref ref="pmt-hemi0xc0fed90"/>
0175     </volume>
0176 
0177     <volume name="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0">
0178       <materialref ref="/dd/Materials/UnstStainlessSteel0xc5c11e8"/>
0179       <solidref ref="AdPmtCollar0xc2c5260"/>
0180     </volume>
0181  
0182     <volume name="/dd/Geometry/AD/lvOIL0xbf5e0b8">
0183       <materialref ref="/dd/Materials/MineralOil0xbf5c830"/>
0184       <solidref ref="oil0xbf5ed48"/>
0185 
0186       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmt0xc2a6b40">
0187         <volumeref ref="/dd/Geometry/PMT/lvPmtHemi0xc133740"/>
0188         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmt0xc2a6b40_pos" unit="mm" x="-2304.61358026342" y="-303.40813381551" z="-1750"/>
0189         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmt0xc2a6b40_rot" unit="deg" x="90" y="-82.5" z="90"/>
0190       </physvol>
0191 
0192     </volume>
0193   </structure>
0194 """)
0195 
0196 r"""
0197         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmt0xc2a6b40_rot" unit="deg" x="90" y="0" z="90"/>
0198 
0199 """
0200 
0201 
0202 
0203 
0204 
0205 structure["pmt2"]=ET.fromstring(r"""
0206    <structure>
0207     <volume name="/dd/Geometry/PMT/lvPmtHemi0xc133740">
0208       <materialref ref="/dd/Materials/Pyrex0xc1005e0"/>
0209       <solidref ref="pmt-hemi0xc0fed90"/>
0210     </volume>
0211 
0212     <volume name="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0">
0213       <materialref ref="/dd/Materials/UnstStainlessSteel0xc5c11e8"/>
0214       <solidref ref="AdPmtCollar0xc2c5260"/>
0215     </volume>
0216  
0217     <volume name="/dd/Geometry/AD/lvOIL0xbf5e0b8">
0218       <materialref ref="/dd/Materials/MineralOil0xbf5c830"/>
0219       <solidref ref="oil0xbf5ed48"/>
0220 
0221       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmt0xc2a6b40">
0222         <volumeref ref="/dd/Geometry/PMT/lvPmtHemi0xc133740"/>
0223         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmt0xc2a6b40_pos" unit="mm" x="-2304.61358026342" y="-303.40813381551" z="-1750"/>
0224         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmt0xc2a6b40_rot" unit="deg" x="90" y="-82.5" z="90"/>
0225       </physvol>
0226 
0227       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmtCollar0xc569920">
0228         <volumeref ref="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0"/>
0229         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmtCollar0xc569920_pos" unit="mm" x="-2249.09266802649" y="-296.098667051187" z="-1750"/>
0230         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmtCollar0xc569920_rot" unit="deg" x="90" y="-82.5" z="90"/>
0231       </physvol>
0232 
0233       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:2#pvAdPmtUnit#pvAdPmt0xc25dc28">
0234         <volumeref ref="/dd/Geometry/PMT/lvPmtHemi0xc133740"/>
0235         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:2#pvAdPmtUnit#pvAdPmt0xc25dc28_pos" unit="mm" x="-2147.55797332249" y="-889.547638532651" z="-1750"/>
0236         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:2#pvAdPmtUnit#pvAdPmt0xc25dc28_rot" unit="deg" x="90" y="-67.5" z="90"/>
0237       </physvol>
0238  
0239     </volume>
0240   </structure>
0241 """)
0242 
0243 
0244 
0245 structure["pmt5"]=ET.fromstring(r"""
0246    <structure>
0247     <volume name="/dd/Geometry/PMT/lvPmtHemi0xc133740">
0248       <materialref ref="/dd/Materials/Pyrex0xc1005e0"/>
0249       <solidref ref="pmt-hemi0xc0fed90"/>
0250     </volume>
0251 
0252     <volume name="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0">
0253       <materialref ref="/dd/Materials/UnstStainlessSteel0xc5c11e8"/>
0254       <solidref ref="AdPmtCollar0xc2c5260"/>
0255     </volume>
0256  
0257 
0258     <volume name="/dd/Geometry/AD/lvOIL0xbf5e0b8">
0259       <materialref ref="/dd/Materials/MineralOil0xbf5c830"/>
0260       <solidref ref="oil0xbf5ed48"/>
0261 
0262 
0263       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmt0xc2a6b40">
0264         <volumeref ref="/dd/Geometry/PMT/lvPmtHemi0xc133740"/>
0265         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmt0xc2a6b40_pos" unit="mm" x="-2304.61358026342" y="-303.40813381551" z="-1750"/>
0266         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmt0xc2a6b40_rot" unit="deg" x="90" y="-82.5" z="90"/>
0267       </physvol>
0268 
0269       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmtCollar0xc569920">
0270         <volumeref ref="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0"/>
0271         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmtCollar0xc569920_pos" unit="mm" x="-2249.09266802649" y="-296.098667051187" z="-1750"/>
0272         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:1#pvAdPmtUnit#pvAdPmtCollar0xc569920_rot" unit="deg" x="90" y="-82.5" z="90"/>
0273       </physvol>
0274 
0275       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:2#pvAdPmtUnit#pvAdPmt0xc25dc28">
0276         <volumeref ref="/dd/Geometry/PMT/lvPmtHemi0xc133740"/>
0277         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:2#pvAdPmtUnit#pvAdPmt0xc25dc28_pos" unit="mm" x="-2147.55797332249" y="-889.547638532651" z="-1750"/>
0278         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:2#pvAdPmtUnit#pvAdPmt0xc25dc28_rot" unit="deg" x="90" y="-67.5" z="90"/>
0279       </physvol>
0280 
0281       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:2#pvAdPmtUnit#pvAdPmtCollar0xc25dce8">
0282         <volumeref ref="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0"/>
0283         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:2#pvAdPmtUnit#pvAdPmtCollar0xc25dce8_pos" unit="mm" x="-2095.82071950185" y="-868.117366320206" z="-1750"/>
0284         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:2#pvAdPmtUnit#pvAdPmtCollar0xc25dce8_rot" unit="deg" x="90" y="-67.5" z="90"/>
0285       </physvol>
0286 
0287       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:3#pvAdPmtUnit#pvAdPmt0xc25dda0">
0288         <volumeref ref="/dd/Geometry/PMT/lvPmtHemi0xc133740"/>
0289         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:3#pvAdPmtUnit#pvAdPmt0xc25dda0_pos" unit="mm" x="-1844.14983950698" y="-1415.06594173077" z="-1750"/>
0290         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:3#pvAdPmtUnit#pvAdPmt0xc25dda0_rot" unit="deg" x="90" y="-52.5" z="90"/>
0291       </physvol>
0292 
0293       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:3#pvAdPmtUnit#pvAdPmtCollar0xc25de60">
0294         <volumeref ref="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0"/>
0295         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:3#pvAdPmtUnit#pvAdPmtCollar0xc25de60_pos" unit="mm" x="-1799.72205245067" y="-1380.97530170628" z="-1750"/>
0296         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:3#pvAdPmtUnit#pvAdPmtCollar0xc25de60_rot" unit="deg" x="90" y="-52.5" z="90"/>
0297       </physvol>
0298 
0299       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:4#pvAdPmtUnit#pvAdPmt0xc25df68">
0300         <volumeref ref="/dd/Geometry/PMT/lvPmtHemi0xc133740"/>
0301         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:4#pvAdPmtUnit#pvAdPmt0xc25df68_pos" unit="mm" x="-1415.06594173077" y="-1844.14983950698" z="-1750"/>
0302         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:4#pvAdPmtUnit#pvAdPmt0xc25df68_rot" unit="deg" x="90" y="-37.5" z="90"/>
0303       </physvol>
0304 
0305       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:4#pvAdPmtUnit#pvAdPmtCollar0xc25e078">
0306         <volumeref ref="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0"/>
0307         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:4#pvAdPmtUnit#pvAdPmtCollar0xc25e078_pos" unit="mm" x="-1380.97530170628" y="-1799.72205245067" z="-1750"/>
0308         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:4#pvAdPmtUnit#pvAdPmtCollar0xc25e078_rot" unit="deg" x="90" y="-37.5" z="90"/>
0309       </physvol>
0310 
0311       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:5#pvAdPmtUnit#pvAdPmt0xc25e180">
0312         <volumeref ref="/dd/Geometry/PMT/lvPmtHemi0xc133740"/>
0313         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:5#pvAdPmtUnit#pvAdPmt0xc25e180_pos" unit="mm" x="-889.547638532652" y="-2147.55797332249" z="-1750"/>
0314         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:5#pvAdPmtUnit#pvAdPmt0xc25e180_rot" unit="deg" x="90" y="-22.5" z="90"/>
0315       </physvol>
0316 
0317 
0318       <physvol name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:5#pvAdPmtUnit#pvAdPmtCollar0xc25e290">
0319         <volumeref ref="/dd/Geometry/PMT/lvAdPmtCollar0xbf21fb0"/>
0320         <position name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:5#pvAdPmtUnit#pvAdPmtCollar0xc25e290_pos" unit="mm" x="-868.117366320207" y="-2095.82071950185" z="-1750"/>
0321         <rotation name="/dd/Geometry/AD/lvOIL#pvAdPmtArray#pvAdPmtArrayRotated#pvAdPmtRingInCyl:1#pvAdPmtInRing:5#pvAdPmtUnit#pvAdPmtCollar0xc25e290_rot" unit="deg" x="90" y="-22.5" z="90"/>
0322       </physvol>
0323  
0324     </volume>
0325   </structure>
0326 """)
0327 
0328 
0329 def make_gdml(worldref="/dd/Geometry/PMT/lvPmtHemi0xc133740", structure_key="pmt5"):
0330    doc = E.gdml(
0331              materials,
0332              solids,
0333              structure.get(structure_key),
0334              E.setup(E.world(ref=worldref), name="Default", version="1.0")
0335              )
0336    return doc
0337 
0338 
0339 
0340 
0341 
0342 if __name__ == '__main__':
0343    gg = make_gdml()
0344    print tostring_(gg)
0345 
0346