Newer
Older
<?xml version="1.0" encoding="UTF-8"?>
<lccdd>
<define>
<!-- vessel (=snout+tank) geometry -->
<constant name="DRICH_zmin" value="ForwardPIDRegion_zmin"/> <!-- vessel front -->
<constant name="DRICH_Length" value="ForwardPIDRegion_length"/> <!-- overall vessel length (including snout) -->
<constant name="DRICH_rmin0" value="ForwardPIDRegion_zmin * ForwardPIDRegion_tan1"/> <!-- bore radius at dRICh vessel frontplane -->
<constant name="DRICH_rmin1" value="(ForwardPIDRegion_zmin + ForwardPIDRegion_length) * ForwardPIDRegion_tan2"/> <!-- bore radius at dRICh vessel backplane -->
<constant name="DRICH_wall_thickness" value="0.5*cm"/> <!-- thickness of radial walls -->
<constant name="DRICH_window_thickness" value="0.1*cm"/> <!-- thickness of entrance and exit walls -->
<!-- tank geometry: cylinder, holding the majority of detector components -->
<constant name="DRICH_rmax2" value="HcalBarrel_rmin-10*cm"/> <!-- cylinder radius, near maximal to fit HCal barrel inner polygon -->
<!-- snout geometry: cone with front radius rmax0 and back radius of rmax1 -->
<constant name="DRICH_SnoutLength" value="4.0*cm"/>
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<constant name="DRICH_SnoutSlope" value="DRICH_rmax2 / (DRICH_zmin + DRICH_Length)"/>
<constant name="DRICH_rmax0" value="DRICH_SnoutSlope * DRICH_zmin"/>
<constant name="DRICH_rmax1" value="DRICH_SnoutSlope * ( DRICH_zmin + DRICH_SnoutLength)"/>
<!-- additional parameters -->
<constant name="DRICH_aerogel_thickness" value="4.0*cm"/> <!-- aerogel thickness -->
<constant name="DRICH_sensor_size" value="48.0*mm"/> <!-- sensor side length -->
<constant name="DRICH_sensor_thickness" value="35.0*mm"/> <!-- sensor thickness -->
<constant name="DRICH_num_px" value="16"/> <!-- number of pixels along one side of the sensor -->
<!-- debugging switches -->
<comment>
- `DRICH_debug_optics`: 1 = all components become vacuum, except for mirrors; test opticalphotons from IP
2 = all components become vacuum, except for mirrors and `gasvol`, test charged particles from IP
0 = off
- `DRICH_debug_mirror`: 1 = draw full mirror shape for single sector; 0 = off
- `DRICH_debug_sensors`: 1 = draw full sensor sphere for a single sector; 0 = off
</comment>
<constant name="DRICH_debug_optics" value="0"/>
<constant name="DRICH_debug_mirror" value="0"/>
<constant name="DRICH_debug_sensors" value="0"/>
</define>
<detectors>
<!-- /detectors/detector -->
<documentation level="10">
### dRICh: ***d***ual ***R***ing ***I***maging ***Ch***erenkov detector
</documentation>
<detector
id="ForwardRICH_ID"
name="DRICH"
type="athena_DRICH"
readout="DRICHHits"
gas="C2F6_DRICH"
material="Aluminum"
vis_vessel="DRICH_vessel_vis"
vis_gas="DRICH_gas_vis"
debug_optics="DRICH_debug_optics"
>
<!-- /detectors/detector/dimensions -->
<documentation level="10">
#### Vessel
- the dRICh vessel is composed of two parts:
- tank: cylindrical region containing most of the detector components
- snout: conical region at the front of the vessel, containing the aerogel
- dimensions:
- `zmin`: z-position of vessel front plane
- `length`: overall z-length of the full vessel
- `snout_length`: length of cone-shaped snout region, housing aerogel
- `rmin0` and `rmin1`: bore radius at front plane and back plane, respectively
- `rmax0` and `rmax1`: outer radius of snout at front plane and snout-back (tank-front) plane, respectively
- `rmax2`: outer radius of tank, the main cylindrical vessel volume
- `nsectors`: number of azimuthal sectors
- `wall_thickness`: thickness of radial walls
- `window_thickness`: thickness of entrance and exit disks
</documentation>
<dimensions
zmin="DRICH_zmin"
length="DRICH_Length"
snout_length="DRICH_SnoutLength"
rmin0="DRICH_rmin0"
rmin1="DRICH_rmin1"
rmax0="DRICH_rmax0"
rmax1="DRICH_rmax1"
rmax2="DRICH_rmax2"
nsectors="6"
wall_thickness="DRICH_wall_thickness"
window_thickness="DRICH_window_thickness"
/>
<!-- /detectors/detector/radiator -->
<documentation level="10">
#### Radiator
- radiator is defined in a wedge of azimuthal space, composed of aerogel and a
filter; the filter is applied to the back of the aerogel, so that it separates
the aerogel and gas radiators
- dimensions:
- `phiw`: azimuthal width of wedge
- `thickness`: radiator thickness, defined separately for aerogel and filter
- `frontplane`: front of the aerogel, w.r.t. front plane of the vessel envelope
- `pitch`: controls the angle of the radiator (0=vertical)
</documentation>
<radiator
rmin="DRICH_rmin0 + DRICH_wall_thickness + 2.0*cm"
rmax="DRICH_rmax0 - DRICH_wall_thickness - 0.2*cm"
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
phiw="60*degree"
frontplane="DRICH_window_thickness + 0.5*DRICH_aerogel_thickness"
pitch="0*degree"
>
<aerogel
material="Aerogel_DRICH"
vis="DRICH_aerogel_vis"
thickness="DRICH_aerogel_thickness"
/>
<filter
material="Acrylic_DRICH"
vis="DRICH_filter_vis"
thickness="0.3*mm"
/>
</radiator>
<!-- /detectors/detector/mirror -->
<documentation level="10">
#### Spherical mirror
- spherical mirrors are built from spherical patches, and positioned near the
vessel back plane, separately for each sector
- dimensions:
- `backplane`: the position of the maximum z-plane intersected by the sphere,
w.r.t. the back plane of vessel envelope
- `rmin` and `rmax`: polar angle boundaries
- `phiw`: azimuthal width of one sector
- `thickness` is the radial thickness of the mirror; note that `backplane` is given for the
reflective mirror surface, the inner radius of the sphere
- `focus_tune*` are tuning parameters for the focal region:
- `focus_tune_z` and `focus_tune_x` will move the focal region, with respect
to the sensor sphere center (i.e., set both to zero for focus at the sensor sphere center
(ignoring spherical aberrations effects))
- other settings:
- `debug`: set to 1 so draw reference sphere instead, view with y-clipping
</documentation>
<mirror
material="Acrylic_DRICH"
surface="MirrorSurface_DRICH"
vis="DRICH_mirror_vis"
backplane="DRICH_window_thickness + 5.0*cm"
rmin="DRICH_rmin1 + DRICH_wall_thickness - 1.0*cm"
rmax="DRICH_rmax2 - DRICH_wall_thickness - 5.0*cm"
phiw="59.5*degree"
thickness="0.2*cm"
focus_tune_x="40.0*cm"
focus_tune_z="-30.0*cm"
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
debug="DRICH_debug_mirror"
/>
<!-- /detectors/detector/sensors -->
<documentation level="10">
#### Sensors
</documentation>
<sensors>
<!-- /detectors/detector/sensors/module -->
<documentation level="10">
##### Sensor module
- based on [Hamamatsu H13700 MAPMT](https://www.hamamatsu.com/us/en/product/type/H13700/index.html):
- not ideal for a magnetic field, SiPM matrix would be better
- effective area: 48.5x48.5 mm
- enclosure size: 52x52 mm
- 16x16 channel matrix (cf. readout segmentation below)
- pixel size: 3x3 mm
- dimensions:
- `side`: side length of the square module
- `thickness`: thickness of the sensor module
- `gap`: provides room between the squares, to help prevent them from overlapping
- note: the value of `side` will determine how many sensors there are, since the
sensor placement algorithm will try to place as many as it can in the specified
spherical patch below
</documentation>
<module
material="Silicon"
surface="SensorSurface_DRICH"
vis="DRICH_sensor_vis"
side="DRICH_sensor_size"
thickness="DRICH_sensor_thickness"
gap="0.5*(52-48)*mm + 2*mm"
/>
<!-- /detectors/detector/sensors/{sphere,sphericalpatch} -->
<documentation level="10">
##### Sensor sphere
- sensors will be placed on a sphere, using a "disco ball" tiling algorithm; each
sector has its own sensor sphere
- sphere dimensions:
- `centerx` and `centerz`: sphere center, defined w.r.t. vessel front plane,
for the sector on +x axis
- `radius`: radius of the sensor sphere
- other settings:
- `debug`: set to 1 so draw reference sphere instead, view with y-clipping
- sensors will be limited to a patch of the sphere
- patch dimensions:
- `phiw`: defines half the angle between the azimuthal boundaries
- `rmin` and `rmax`: radial cut boundaries
- `zmin`: z-plane cut
</documentation>
<sphere
centerz="-80.0 * cm"
debug="DRICH_debug_sensors"
/>
<sphericalpatch
phiw="18*degree"
rmin="DRICH_rmax1 + 0.0*cm"
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
rmax="DRICH_rmax2 - 5.0*cm"
zmin="DRICH_SnoutLength + 5.0*cm"
/>
</sensors>
</detector>
</detectors>
<documentation level="10">
#### Readout
- segmentation: square matrix of pixels
- `grid_size_x,y`: size of each sensor, but note we must divide sensor size
by 1 less than the number of pixels, to account for fenceposting
- `offset_x,y`: specified such that the `x` and `y` indicators are unsigned
- indicators and `cellID` bits:
| indicator | offset | length |
|-----------|--------|--------|
| dRICh ID | 0 | 8 |
| sector | 8 | 3 |
| sensor | 11 | 12 |
| x pixel | 23 | 16 |
| y pixel | 39 | 16 |
</documentation>
<readouts>
<readout name="DRICHHits">
<segmentation
type="CartesianGridXY"
grid_size_x="DRICH_sensor_size/(DRICH_num_px-1)"
grid_size_y="DRICH_sensor_size/(DRICH_num_px-1)"
offset_x="-DRICH_sensor_size/2.0"
offset_y="-DRICH_sensor_size/2.0"
/>
<id>system:8,sector:3,module:12,x:23:16,y:16</id>
</readout>
</readouts>