legend-pygeom-hades 0.1.0a0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. legend_pygeom_hades-0.1.0a0.dist-info/METADATA +62 -0
  2. legend_pygeom_hades-0.1.0a0.dist-info/RECORD +85 -0
  3. legend_pygeom_hades-0.1.0a0.dist-info/WHEEL +5 -0
  4. legend_pygeom_hades-0.1.0a0.dist-info/entry_points.txt +2 -0
  5. legend_pygeom_hades-0.1.0a0.dist-info/licenses/LICENSE +674 -0
  6. legend_pygeom_hades-0.1.0a0.dist-info/top_level.txt +1 -0
  7. pygeomhades/__init__.py +6 -0
  8. pygeomhades/_version.py +34 -0
  9. pygeomhades/cli.py +169 -0
  10. pygeomhades/configs/dummy_geom/B99000A.yaml +25 -0
  11. pygeomhades/configs/dummy_geom/C99000A.yaml +31 -0
  12. pygeomhades/configs/dummy_geom/P99000A.yaml +20 -0
  13. pygeomhades/configs/dummy_geom/V99000A.yaml +31 -0
  14. pygeomhades/configs/holder_wrap/B00000B.yaml +37 -0
  15. pygeomhades/configs/holder_wrap/B00000D.yaml +37 -0
  16. pygeomhades/configs/holder_wrap/B00002C.yaml +37 -0
  17. pygeomhades/configs/holder_wrap/B00032B.yaml +37 -0
  18. pygeomhades/configs/holder_wrap/B00035A.yaml +37 -0
  19. pygeomhades/configs/holder_wrap/B00035B.yaml +37 -0
  20. pygeomhades/configs/holder_wrap/B00061C.yaml +37 -0
  21. pygeomhades/configs/holder_wrap/B00076C.yaml +37 -0
  22. pygeomhades/configs/holder_wrap/B00091B.yaml +37 -0
  23. pygeomhades/configs/holder_wrap/V00048B.yaml +37 -0
  24. pygeomhades/configs/holder_wrap/V02160A.yaml +37 -0
  25. pygeomhades/configs/holder_wrap/V02160B.yaml +37 -0
  26. pygeomhades/configs/holder_wrap/V02162B.yaml +37 -0
  27. pygeomhades/configs/holder_wrap/V02166B.yaml +37 -0
  28. pygeomhades/configs/holder_wrap/V03421A.yaml +37 -0
  29. pygeomhades/configs/holder_wrap/V03422A.yaml +37 -0
  30. pygeomhades/configs/holder_wrap/V04199A.yaml +37 -0
  31. pygeomhades/configs/holder_wrap/V04545A.yaml +37 -0
  32. pygeomhades/configs/holder_wrap/V04549A.yaml +37 -0
  33. pygeomhades/configs/holder_wrap/V04549B.yaml +37 -0
  34. pygeomhades/configs/holder_wrap/V05261A.yaml +37 -0
  35. pygeomhades/configs/holder_wrap/V05261B.yaml +37 -0
  36. pygeomhades/configs/holder_wrap/V05266A.yaml +37 -0
  37. pygeomhades/configs/holder_wrap/V05266B.yaml +37 -0
  38. pygeomhades/configs/holder_wrap/V05267A.yaml +37 -0
  39. pygeomhades/configs/holder_wrap/V05267B.yaml +37 -0
  40. pygeomhades/configs/holder_wrap/V05268A.yaml +37 -0
  41. pygeomhades/configs/holder_wrap/V05268B.yaml +37 -0
  42. pygeomhades/configs/holder_wrap/V05612A.yaml +37 -0
  43. pygeomhades/configs/holder_wrap/V05612B.yaml +37 -0
  44. pygeomhades/configs/holder_wrap/V06643A.yaml +29 -0
  45. pygeomhades/configs/holder_wrap/V06649A.yaml +29 -0
  46. pygeomhades/configs/holder_wrap/V06659A.yaml +29 -0
  47. pygeomhades/configs/holder_wrap/V07298B.yaml +37 -0
  48. pygeomhades/configs/holder_wrap/V07302A.yaml +37 -0
  49. pygeomhades/configs/holder_wrap/V07302B.yaml +37 -0
  50. pygeomhades/configs/holder_wrap/V07646A.yaml +37 -0
  51. pygeomhades/configs/holder_wrap/V07647A.yaml +37 -0
  52. pygeomhades/configs/holder_wrap/V07647B.yaml +37 -0
  53. pygeomhades/configs/holder_wrap/V08682A.yaml +37 -0
  54. pygeomhades/configs/holder_wrap/V08682B.yaml +37 -0
  55. pygeomhades/configs/holder_wrap/V09372A.yaml +37 -0
  56. pygeomhades/configs/holder_wrap/V09374A.yaml +37 -0
  57. pygeomhades/configs/holder_wrap/V09724A.yaml +37 -0
  58. pygeomhades/configs/holder_wrap/V10437B.yaml +37 -0
  59. pygeomhades/configs/holder_wrap/V10447B.yaml +37 -0
  60. pygeomhades/configs/holder_wrap/V11924A.yaml +37 -0
  61. pygeomhades/configs/holder_wrap/V11925A.yaml +37 -0
  62. pygeomhades/configs/holder_wrap/V11947B.yaml +37 -0
  63. pygeomhades/configs/holder_wrap/V14673A.yaml +37 -0
  64. pygeomhades/configs/vis-scene.yaml +0 -0
  65. pygeomhades/core.py +275 -0
  66. pygeomhades/create_volumes.py +571 -0
  67. pygeomhades/dimensions.py +283 -0
  68. pygeomhades/metadata.py +28 -0
  69. pygeomhades/models/dummy/bottom_plate_dummy.gdml +44 -0
  70. pygeomhades/models/dummy/cryostat_dummy.gdml +57 -0
  71. pygeomhades/models/dummy/holder_bege_dummy.gdml +61 -0
  72. pygeomhades/models/dummy/holder_icpc_dummy.gdml +78 -0
  73. pygeomhades/models/dummy/lead_castle_table1_dummy.gdml +71 -0
  74. pygeomhades/models/dummy/lead_castle_table2_dummy.gdml +73 -0
  75. pygeomhades/models/dummy/source_am_collimated_dummy.gdml +97 -0
  76. pygeomhades/models/dummy/source_am_dummy.gdml +64 -0
  77. pygeomhades/models/dummy/source_ba_dummy.gdml +72 -0
  78. pygeomhades/models/dummy/source_co_dummy.gdml +71 -0
  79. pygeomhades/models/dummy/source_holder_am_dummy.gdml +73 -0
  80. pygeomhades/models/dummy/source_holder_dummy.gdml +61 -0
  81. pygeomhades/models/dummy/source_holder_th_lat_dummy.gdml +54 -0
  82. pygeomhades/models/dummy/source_th_dummy.gdml +134 -0
  83. pygeomhades/models/dummy/source_th_plates_dummy.gdml +36 -0
  84. pygeomhades/models/dummy/wrap_dummy.gdml +50 -0
  85. pygeomhades/utils.py +101 -0
@@ -0,0 +1,283 @@
1
+ from __future__ import annotations
2
+
3
+ from dbetto import AttrsDict
4
+
5
+
6
+ def get_bottom_plate_metadata() -> AttrsDict:
7
+ """Extract the metadata describing the bottom plate."""
8
+
9
+ return AttrsDict(
10
+ {
11
+ "width": 750,
12
+ "depth": 750,
13
+ "height": 15,
14
+ "cavity": {
15
+ "width": 120,
16
+ "depth": 940, # <!--475*2-->
17
+ "height": 20,
18
+ },
19
+ }
20
+ )
21
+
22
+
23
+ def get_cryostat_metadata(det_type: str, order: int, xtal_slice: str) -> AttrsDict:
24
+ """Extract the metadata corresponding to the cryostat
25
+
26
+ In future this will be moved into external metadata.
27
+
28
+ Parameters
29
+ ----------
30
+ det_type
31
+ The detector type (should be icpc or bege).
32
+ order
33
+ The order number.
34
+ xtal_slice
35
+ The slice of the crystal (typically A or B).
36
+ """
37
+ cryostat = {
38
+ "width": 101.6,
39
+ "height": 122.2,
40
+ "thickness": 1.5,
41
+ "position_cavity_from_top": 1.5,
42
+ "position_cavity_from_bottom": 0.8,
43
+ "position_from_bottom": 250.0,
44
+ }
45
+ xl_orders = [3, 8, 9, 10]
46
+
47
+ if det_type == "bege":
48
+ cryostat["height"] = 122.2
49
+ cryostat["width"] = 101.6
50
+ elif (det_type == "icpc") and (order in xl_orders):
51
+ cryostat["width"] = 114.3
52
+ cryostat["height"] = 171.0
53
+ elif det_type == "icpc":
54
+ cryostat["width"] = 101.6
55
+ cryostat["height"] = 171.0
56
+ else:
57
+ msg = "Only detector type icpc or bege are supported."
58
+ raise ValueError(msg)
59
+
60
+ # override batch 9
61
+ if order == 9 and xtal_slice == "B":
62
+ cryostat["width"] = 107.95
63
+
64
+ return AttrsDict(cryostat)
65
+
66
+
67
+ def get_castle_dimensions(table_num: int) -> AttrsDict:
68
+ """Extract the lead castle dimensions for a given table.
69
+
70
+ Parameters
71
+ ----------
72
+ table_num
73
+ The number of the table to use, can be 1 or 2.
74
+ """
75
+
76
+ if table_num == 1:
77
+ lead_castle = {
78
+ "base": {
79
+ "width": 480,
80
+ "depth": 450,
81
+ "height": 500,
82
+ },
83
+ "inner_cavity": {
84
+ "width": 300,
85
+ "depth": 250,
86
+ "height": 500,
87
+ },
88
+ "cavity": {
89
+ "width": 120,
90
+ "depth": 100,
91
+ "height": 400,
92
+ },
93
+ "top": {
94
+ "width": 300,
95
+ "depth": 300,
96
+ "height": 90,
97
+ },
98
+ "front": {
99
+ "width": 160,
100
+ "depth": 100,
101
+ "height": 400,
102
+ },
103
+ }
104
+ elif table_num == 2:
105
+ lead_castle = {
106
+ "base": {
107
+ "width": 350,
108
+ "depth": 350,
109
+ "height": 400,
110
+ },
111
+ "inner_cavity": {
112
+ "width": 250,
113
+ "depth": 250,
114
+ "height": 400,
115
+ },
116
+ "top": {
117
+ "width": 200,
118
+ "depth": 200,
119
+ "height": 50,
120
+ },
121
+ "copper_plate": {
122
+ "width": 350,
123
+ "depth": 350,
124
+ "height": 10,
125
+ },
126
+ }
127
+
128
+ else:
129
+ msg = "Table number must be 1 or 2"
130
+ raise ValueError(msg)
131
+
132
+ return AttrsDict(lead_castle)
133
+
134
+
135
+ def get_source_metadata(source_type: str, meas_type: str = "") -> AttrsDict:
136
+ """Get the dimensions of the source and collimator.
137
+
138
+ Parameters
139
+ ----------
140
+ source_type
141
+ The type of source (am_collimated, am, ba, co or th)
142
+ meas_type
143
+ The measurement (for th only) either lat or top.
144
+ """
145
+ if source_type == "am_collimated":
146
+ source = {
147
+ "height": 2.0,
148
+ "width": 1.0,
149
+ "capsule": {
150
+ "width": 20,
151
+ "depth": None,
152
+ "height": 10,
153
+ },
154
+ "collimator": {
155
+ "width": 30,
156
+ "depth": 30,
157
+ "height": 65,
158
+ "beam_height": 25.6,
159
+ "beam_width": 1.0,
160
+ "window": 0.2,
161
+ },
162
+ }
163
+ elif source_type == "am":
164
+ source = {
165
+ "height": 0.1,
166
+ "width": 1.0,
167
+ "capsule": {
168
+ "width": 11.08,
169
+ "depth": 23.08,
170
+ "height": 2.02,
171
+ },
172
+ }
173
+ elif source_type == "co":
174
+ source = {
175
+ "height": 0.1,
176
+ "width": 5.0,
177
+ "foil": {"width": 20, "height": 0.5},
178
+ "al_ring": {"height": 3.0, "width_max": 30, "width_min": 20},
179
+ }
180
+ elif source_type == "ba":
181
+ source = {
182
+ "height": 0.1,
183
+ "width": 5.0,
184
+ "foil": {
185
+ "width": 26.0,
186
+ "height": 0.5,
187
+ },
188
+ "al_ring": {"height": 3.0, "width_max": 30, "width_min": 26},
189
+ }
190
+
191
+ elif source_type == "th":
192
+ source = {
193
+ "height": 1.0,
194
+ "width": 1.0,
195
+ "capsule": {
196
+ "height": 7.0,
197
+ "width": 2.0,
198
+ },
199
+ "epoxy": {"height": 2.2, "width": 1.6},
200
+ "plates": {"height": 2.0, "width": 8.0, "cavity_width": 2.0},
201
+ "collimator": {
202
+ "height": 30.0,
203
+ "depth": 30.0,
204
+ "width": 30.0,
205
+ "beam_height": 15.0,
206
+ "beam_width": 1.0,
207
+ },
208
+ }
209
+
210
+ if meas_type == "top":
211
+ source["offset_height"] = 0.0
212
+ elif meas_type == "lat":
213
+ source["offset_height"] = 18.0
214
+ else:
215
+ msg = "can only have top or lat measurements"
216
+ raise RuntimeError(msg)
217
+ else:
218
+ msg = f"source type can only be am_collimated, ba, co, am or th not {source_type}"
219
+ raise RuntimeError(msg)
220
+
221
+ return AttrsDict(source)
222
+
223
+
224
+ def get_source_holder_metadata(source_type: str, meas_type: str = "lat") -> AttrsDict:
225
+ """Get the dimensions of the source holder.
226
+
227
+ Parameters
228
+ ----------
229
+ source_type
230
+ The type of source (am_collimated, am, ba, co or th)
231
+ meas_type
232
+ The measurement (for th only) either lat or top.
233
+ """
234
+
235
+ if source_type in ["co", "ba", "am_collimated"]:
236
+ source_holder = {
237
+ "source": {
238
+ "top_plate_height": 3.0,
239
+ "top_plate_width": 30.0,
240
+ "top_height": 10.0,
241
+ "top_inner_width": 20.0,
242
+ "top_bottom_height": 6.1,
243
+ "bottom_inner_width": 102.0,
244
+ },
245
+ "outer_width": 108.0,
246
+ "inner_width": 87.0,
247
+ }
248
+
249
+ elif source_type == "am":
250
+ source_holder = {
251
+ "source": {
252
+ "top_height": 10.0,
253
+ "top_inner_width": 7.39,
254
+ "top_inner_depth": 15.39,
255
+ "bottom_inner_width": 102.0,
256
+ "top_bottom_height": 5.6,
257
+ "top_plate_width": 11.08,
258
+ "top_plate_depth": 23.08,
259
+ "top_plate_height": 2.0,
260
+ },
261
+ "outer_width": 108.0,
262
+ "inner_width": 87.0,
263
+ }
264
+
265
+ elif source_type == "th":
266
+ source_holder = {
267
+ "source": {
268
+ "height": 30.0,
269
+ "cavity_width": 3.0,
270
+ "bottom_height": 3.0,
271
+ "bottom_width": 50.0,
272
+ },
273
+ }
274
+
275
+ if meas_type == "lat":
276
+ source_holder["outer_width"] = 181.6
277
+ source_holder["inner_width"] = 101.6
278
+ source_holder["lat"] = {"height": 65.0, "cavity_height": 60.0, "cavity_width": 50.0}
279
+ else:
280
+ msg = f"Source must be co, ba, am_collimated, am or th not {source_type}"
281
+ raise RuntimeError(msg)
282
+
283
+ return AttrsDict(source_holder)
@@ -0,0 +1,28 @@
1
+ from __future__ import annotations
2
+
3
+ import copy
4
+ from importlib import resources
5
+
6
+ from dbetto import AttrsDict, TextDB
7
+
8
+
9
+ class PublicMetadataProxy:
10
+ """Provides proxies to transparently replace legend hardware metadata with sample data."""
11
+
12
+ def __init__(self):
13
+ dummy = TextDB(resources.files("pygeomhades") / "configs" / "dummy_geom")
14
+
15
+ self.hardware = AttrsDict({"detectors": {"germanium": {"diodes": _DiodeProxy(dummy)}}})
16
+
17
+
18
+ class _DiodeProxy:
19
+ def __init__(self, dummy_detectors: TextDB):
20
+ self.dummy_detectors = dummy_detectors
21
+
22
+ def __getitem__(self, det_name: str) -> AttrsDict:
23
+ det = self.dummy_detectors[det_name[0] + "99000A"]
24
+ m = copy.copy(det)
25
+ m.name = det_name
26
+ m.production.order = 0
27
+ m.production.slice = "A"
28
+ return m
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" ?>
2
+ <gdml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd">
3
+
4
+ <define>
5
+ <quantity name="bottom_plate_x" type="length" value="bottom_plate_width" unit="mm"/>
6
+ <quantity name="bottom_plate_y" type="length" value="bottom_plate_depth" unit="mm"/>
7
+ <quantity name="bottom_plate_z" type="length" value="bottom_plate_height" unit="mm"/>
8
+ <quantity name="cavity_bottom_plate_x" type="length" value="bottom_cavity_plate_width" unit="mm"/>
9
+ <quantity name="cavity_bottom_plate_y" type="length" value="bottom_cavity_plate_depth" unit="mm"/>
10
+ <quantity name="cavity_bottom_plate_z" type="length" value="bottom_cavity_plate_height" unit="mm"/>
11
+ <position name="pos_cavity_bottom_plate" y="(bottom_plate_y)/2"/>
12
+ </define>
13
+
14
+ <materials>
15
+ <element Z="13" formula="Al" name="Aluminium" >
16
+ <atom value="26.98" />
17
+ </element>
18
+ <material name="Al" formula="Al" >
19
+ <D value="2.7" unit="g/cm3" />
20
+ <fraction n="1" ref="Aluminium"/>
21
+ </material>
22
+ </materials>
23
+
24
+ <solids>
25
+ <box name="bottom_plate" x="bottom_plate_x" y="bottom_plate_y" z="bottom_plate_z"/>
26
+ <box name="cavity_bottom_plate" x="cavity_bottom_plate_x" y="cavity_bottom_plate_y" z="cavity_bottom_plate_z"/>
27
+ <subtraction name="final_bottom_plate" >
28
+ <first ref="bottom_plate"/> <second ref="cavity_bottom_plate"/>
29
+ <positionref ref="pos_cavity_bottom_plate" />
30
+ </subtraction>
31
+ </solids>
32
+
33
+ <structure>
34
+ <volume name="Bottom_plate">
35
+ <materialref ref="Al"/>
36
+ <solidref ref="final_bottom_plate"/>
37
+ </volume>
38
+ </structure>
39
+
40
+ <setup name="Default" version="1.0">
41
+ <world ref="Bottom_plate"/>
42
+ </setup>
43
+
44
+ </gdml>
@@ -0,0 +1,57 @@
1
+ <?xml version="1.0" ?>
2
+ <gdml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd">
3
+
4
+ <define>
5
+ <constant name="TWOPI" value="2.*pi"/>
6
+ <quantity name="cryostat_z" type="length" value="cryostat_height" unit="mm"/>
7
+ <quantity name="cryostat_radius" type="length" value="cryostat_width/2" unit="mm"/>
8
+ <quantity name="cryostat_cavity_radius" type="length" value="(cryostat_width-2*cryostat_thickness)/2" unit="mm"/>
9
+ <quantity name="start_cavity_z" type="length" value="position_cryostat_cavity_fromTop" unit="mm"/>
10
+ <quantity name="end_cavity_z" type="length" value="(cryostat_height-position_cryostat_cavity_fromBottom)" unit="mm"/>
11
+ </define>
12
+
13
+ <materials>
14
+ <element Z="13" formula="Al" name="Aluminium" >
15
+ <atom value="26.98" />
16
+ </element>
17
+ <element Z="29" formula="Cu" name="Copper" >
18
+ <atom value="63.546" />
19
+ </element>
20
+ <element Z="82" formula="Pb" name="Lead" >
21
+ <atom value="207.2" />
22
+ </element>
23
+ <element Z="83" formula="Bi" name="Bismuth" >
24
+ <atom value="208.98" />
25
+ </element>
26
+ <material name="EN_AW-2011T8" formula="Al_Cu6BiPb" >
27
+ <D value="2.84" unit="g/cm3" />
28
+ <fraction n="0.06" ref="Copper" />
29
+ <fraction n="0.004" ref="Lead" />
30
+ <fraction n="0.004" ref="Bismuth" />
31
+ <fraction n="0.932" ref="Aluminium" />
32
+ </material>
33
+ </materials>
34
+
35
+ <solids>
36
+ <polycone name="cryostat" startphi="0" deltaphi="TWOPI" aunit="rad">
37
+ <zplane rmin="0" rmax="cryostat_radius" z="0" />
38
+ <zplane rmin="0" rmax="cryostat_radius" z="start_cavity_z" />
39
+ <zplane rmin="cryostat_cavity_radius" rmax="cryostat_radius" z="start_cavity_z" />
40
+ <zplane rmin="cryostat_cavity_radius" rmax="cryostat_radius" z="end_cavity_z" />
41
+ <zplane rmin="0" rmax="cryostat_radius" z="end_cavity_z" />
42
+ <zplane rmin="0" rmax="cryostat_radius" z="cryostat_z" />
43
+ </polycone>
44
+ </solids>
45
+
46
+ <structure>
47
+ <volume name="Cryostat">
48
+ <materialref ref="EN_AW-2011T8"/>
49
+ <solidref ref="cryostat"/>
50
+ </volume>
51
+ </structure>
52
+
53
+ <setup name="Default" version="1.0">
54
+ <world ref="Cryostat"/>
55
+ </setup>
56
+
57
+ </gdml>
@@ -0,0 +1,61 @@
1
+ <?xml version="1.0" ?>
2
+ <gdml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd">
3
+
4
+ <define>
5
+ <constant name="TWOPI" value="2.*pi"/>
6
+ <quantity name="max_radius" type="length" value="max_radius_in_mm" unit="mm"/>
7
+ <quantity name="outer_height" type="length" value="outer_height_in_mm" unit="mm"/>
8
+ <quantity name="inner_height" type="length" value="inner_height_in_mm" unit="mm"/>
9
+ <quantity name="outer_radius" type="length" value="outer_radius_in_mm" unit="mm"/>
10
+ <quantity name="inner_radius" type="length" value="inner_radius_in_mm" unit="mm"/>
11
+ <quantity name="pos_top_ring_z" type="length" value="position_top_ring_in_mm" unit="mm"/>
12
+ <quantity name="end_top_ring_z" type="length" value="end_top_ring_in_mm" unit="mm"/>
13
+ </define>
14
+
15
+ <materials>
16
+ <element Z="29" formula="Cu" name="Copper" >
17
+ <atom value="63.546" />
18
+ </element>
19
+ <element Z="82" formula="Pb" name="Lead" >
20
+ <atom value="207.2" />
21
+ </element>
22
+ <element Z="83" formula="Bi" name="Bismuth" >
23
+ <atom value="208.98" />
24
+ </element>
25
+ <element Z="13" formula="Al" name="Aluminium" >
26
+ <atom value="26.98" />
27
+ </element>
28
+ <material name="EN_AW-2011T8" formula="Al_Cu6BiPb" >
29
+ <D value="2.84" unit="g/cm3" />
30
+ <fraction n="0.06" ref="Copper" />
31
+ <fraction n="0.004" ref="Lead" />
32
+ <fraction n="0.004" ref="Bismuth" />
33
+ <fraction n="0.932" ref="Aluminium" />
34
+ </material>
35
+ </materials>
36
+
37
+ <solids>
38
+ <polycone name="holder" startphi="0" deltaphi="TWOPI" aunit="rad">
39
+ <zplane rmin="inner_radius" rmax="outer_radius" z="0" />
40
+ <zplane rmin="inner_radius" rmax="outer_radius" z="pos_top_ring_z" />
41
+ <zplane rmin="inner_radius" rmax="max_radius" z="pos_top_ring_z" />
42
+ <zplane rmin="inner_radius" rmax="max_radius" z="end_top_ring_z" />
43
+ <zplane rmin="inner_radius" rmax="outer_radius" z=" end_top_ring_z" />
44
+ <zplane rmin="inner_radius" rmax="outer_radius" z="inner_height" />
45
+ <zplane rmin="0" rmax="outer_radius" z="inner_height" />
46
+ <zplane rmin="0" rmax="outer_radius" z="outer_height" />
47
+ </polycone>
48
+ </solids>
49
+
50
+ <structure>
51
+ <volume name="Holder">
52
+ <materialref ref="EN_AW-2011T8"/>
53
+ <solidref ref="holder"/>
54
+ </volume>
55
+ </structure>
56
+
57
+ <setup name="Default" version="1.0">
58
+ <world ref="Holder"/>
59
+ </setup>
60
+
61
+ </gdml>
@@ -0,0 +1,78 @@
1
+ <?xml version="1.0" ?>
2
+ <gdml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd">
3
+
4
+ <define>
5
+ <constant name="TWOPI" value="2.*pi"/>
6
+ <quantity name="max_radius" type="length" value="max_radius_in_mm" unit="mm"/>
7
+ <quantity name="outer_height" type="length" value="outer_height_in_mm" unit="mm"/>
8
+ <quantity name="inner_height" type="length" value="inner_height_in_mm" unit="mm"/>
9
+ <quantity name="outer_radius" type="length" value="outer_radius_in_mm" unit="mm"/>
10
+ <quantity name="inner_radius" type="length" value="inner_radius_in_mm" unit="mm"/>
11
+ <quantity name="bottom_cyl_inner_radius" type="length" value="inner_bottom_cyl_radius_in_mm" unit="mm"/>
12
+ <quantity name="bottom_cyl_outer_radius" type="length" value="outer_bottom_cyl_radius_in_mm" unit="mm"/>
13
+ <quantity name="edge_height" type="length" value="edge_height_in_mm" unit="mm"/>
14
+ <quantity name="pos_bottom_ring_z" type="length" value="pos_bottom_ring_in_mm" unit="mm"/>
15
+ <quantity name="pos_top_ring_z" type="length" value="pos_top_ring_in_mm" unit="mm"/>
16
+ <quantity name="end_top_ring_z" type="length" value="end_top_ring_in_mm" unit="mm"/>
17
+ <quantity name="end_bottom_ring_z" type="length" value="end_bottom_ring_in_mm" unit="mm"/>
18
+ <quantity name="end_bottom_cyl_outer_z" type="length" value="end_bottom_cyl_outer_in_mm" unit="mm" />
19
+ <quantity name="end_bottom_cyl_inner_z" type="length" value="end_bottom_cyl_inner_in_mm" unit="mm" />
20
+ </define>
21
+
22
+ <materials>
23
+ <element Z="13" formula="Al" name="Aluminium" >
24
+ <atom value="26.98" />
25
+ </element>
26
+ <element Z="29" formula="Cu" name="Copper" >
27
+ <atom value="63.546" />
28
+ </element>
29
+ <element Z="82" formula="Pb" name="Lead" >
30
+ <atom value="207.2" />
31
+ </element>
32
+ <element Z="83" formula="Bi" name="Bismuth" >
33
+ <atom value="208.98" />
34
+ </element>
35
+ <material name="EN_AW-2011T8" formula="Al_Cu6BiPb" >
36
+ <D value="2.84" unit="g/cm3" />
37
+ <fraction n="0.06" ref="Copper" />
38
+ <fraction n="0.004" ref="Lead" />
39
+ <fraction n="0.004" ref="Bismuth" />
40
+ <fraction n="0.932" ref="Aluminium" />
41
+ </material>
42
+ </materials>
43
+
44
+ <solids>
45
+ <polycone name="holder" startphi="0" deltaphi="TWOPI" aunit="rad">
46
+ <zplane rmin="inner_radius" rmax="max_radius" z="0" />
47
+ <zplane rmin="inner_radius" rmax="max_radius" z="edge_height" />
48
+ <zplane rmin="inner_radius" rmax="outer_radius" z="edge_height" />
49
+ <zplane rmin="inner_radius" rmax="outer_radius" z="pos_top_ring_z" />
50
+ <zplane rmin="inner_radius" rmax="max_radius" z="pos_top_ring_z" />
51
+ <zplane rmin="inner_radius" rmax="max_radius" z="end_top_ring_z" />
52
+ <zplane rmin="inner_radius" rmax="outer_radius" z=" end_top_ring_z" />
53
+ <zplane rmin="inner_radius" rmax="outer_radius" z="pos_bottom_ring_z" />
54
+ <zplane rmin="inner_radius" rmax="max_radius" z="pos_bottom_ring_z" />
55
+ <zplane rmin="inner_radius" rmax="max_radius" z="end_bottom_ring_z" />
56
+ <zplane rmin="inner_radius" rmax="outer_radius" z="end_bottom_ring_z" />
57
+ <zplane rmin="inner_radius" rmax="outer_radius" z="inner_height" />
58
+ <zplane rmin="bottom_cyl_inner_radius" rmax="outer_radius" z="inner_height" />
59
+ <zplane rmin="bottom_cyl_inner_radius" rmax="outer_radius" z="outer_height" />
60
+ <zplane rmin="bottom_cyl_inner_radius" rmax="bottom_cyl_outer_radius" z="outer_height" />
61
+ <zplane rmin="bottom_cyl_inner_radius" rmax="bottom_cyl_outer_radius" z="end_bottom_cyl_inner_z" />
62
+ <zplane rmin="0" rmax="bottom_cyl_outer_radius" z="end_bottom_cyl_inner_z" />
63
+ <zplane rmin="0" rmax="bottom_cyl_outer_radius" z="end_bottom_cyl_outer_z" />
64
+ </polycone>
65
+ </solids>
66
+
67
+ <structure>
68
+ <volume name="Holder">
69
+ <materialref ref="EN_AW-2011T8"/>
70
+ <solidref ref="holder"/>
71
+ </volume>
72
+ </structure>
73
+
74
+ <setup name="Default" version="1.0">
75
+ <world ref="Holder"/>
76
+ </setup>
77
+
78
+ </gdml>
@@ -0,0 +1,71 @@
1
+ <?xml version="1.0" ?>
2
+ <gdml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd">
3
+
4
+ <define>
5
+ <quantity name="base_x_1" type="length" value="base_width_1" unit="mm" />
6
+ <quantity name="base_y_1" type="length" value="base_depth_1" unit="mm"/>
7
+ <quantity name="base_z_1" type="length" value="base_height_1" unit="mm"/>
8
+ <quantity name="inner_cavity_x_1" type="length" value="inner_cavity_width_1" unit="mm"/>
9
+ <quantity name="inner_cavity_y_1" type="length" value="inner_cavity_depth_1" unit="mm"/>
10
+ <quantity name="inner_cavity_z_1" type="length" value="inner_cavity_height_1" unit="mm"/>
11
+ <quantity name="cavity_x_1" type="length" value="cavity_width_1" unit="mm"/>
12
+ <quantity name="cavity_y_1" type="length" value="cavity_depth_1" unit="mm"/>
13
+ <quantity name="cavity_z_1" type="length" value="cavity_height_1" unit="mm"/>
14
+ <quantity name="top_x_1" type="length" value="top_width_1" unit="mm"/>
15
+ <quantity name="top_y_1" type="length" value="top_depth_1" unit="mm"/>
16
+ <quantity name="top_z_1" type="length" value="top_height_1" unit="mm"/>
17
+ <quantity name="front_x_1" type="length" value="front_width_1" unit="mm"/>
18
+ <quantity name="front_y_1" type="length" value="front_depth_1" unit="mm"/>
19
+ <quantity name="front_z_1" type="length" value="front_height_1" unit="mm"/>
20
+ <position name="pos_cavity_base_1" y="(inner_cavity_y_1/2+(base_y_1-inner_cavity_y_1)/4)" z="(inner_cavity_z_1-cavity_z_1)/2" />
21
+ <position name="pos_top_1" z="-(base_z_1+top_z_1)/2 - 0.01" />
22
+ <position name="pos_front_1" y="(base_y_1+front_y_1)/2 - 0.01" z="(base_z_1-front_z_1)/2" />
23
+ <position name="center" x="0" y="0" z="0" />
24
+ </define>
25
+
26
+ <materials>
27
+ <element Z="82" formula="Pb" name="Lead" >
28
+ <atom value="207.2" />
29
+ </element>
30
+ <material name="Pb" formula="Pb" >
31
+ <D value="2.84" unit="g/cm3" />
32
+ <fraction n="1" ref="Lead"/>
33
+ </material>
34
+ </materials>
35
+
36
+ <solids>
37
+ <box name="base_lead_castle_1" x="base_x_1" y="base_y_1" z="base_z_1"/>
38
+ <box name="inner_cavity_base_1" x="inner_cavity_x_1" y="inner_cavity_y_1" z="inner_cavity_z_1"/>
39
+ <box name="cavity_base_1" x="cavity_x_1" y="cavity_y_1" z="cavity_z_1"/>
40
+ <box name="top_lead_castle_1" x="top_x_1" y="top_y_1" z="top_z_1"/>
41
+ <box name="front_1" x="front_x_1" y="front_y_1" z="front_z_1"/>
42
+ <union name="total_cavity_1" >
43
+ <first ref="inner_cavity_base_1"/> <second ref="cavity_base_1"/>
44
+ <positionref ref="pos_cavity_base_1" />
45
+ </union>
46
+ <subtraction name="base_cavity_1" >
47
+ <first ref="base_lead_castle_1"/> <second ref="total_cavity_1"/>
48
+ <positionref ref="center" />
49
+ </subtraction>
50
+ <union name="top_base_1" >
51
+ <first ref="base_cavity_1"/> <second ref="top_lead_castle_1"/>
52
+ <positionref ref="pos_top_1" />
53
+ </union>
54
+ <union name="final_lead_castle_1" >
55
+ <first ref="top_base_1"/> <second ref="front_1"/>
56
+ <positionref ref="pos_front_1" />
57
+ </union>
58
+ </solids>
59
+
60
+ <structure>
61
+ <volume name="Lead_castle">
62
+ <materialref ref="G4_Pb"/>
63
+ <solidref ref="final_lead_castle_1"/>
64
+ </volume>
65
+ </structure>
66
+
67
+ <setup name="Default" version="1.0">
68
+ <world ref="Lead_castle"/>
69
+ </setup>
70
+
71
+ </gdml>