Newer
Older
<?xml version="1.0" encoding="UTF-8"?>
<lccdd>
<define>
<!-- TODO [low priority]: some of these, viz. radii, could be parameterized
with respect to other variables; for now they are hard coded in case
other detectors' parameters are changing -->
<!-- parameters for re-scaling fun4all design to ATHENA -->
<constant name="DRICH_scale" value="0.963"/> <!-- overall scale factor from fun4all to ATHENA -->
<constant name="DRICH_f4a_length" value="161.0*cm"/> <!-- z-length of fun4all design -->
<!-- vessel (=snout+tank) geometry -->
<constant name="DRICH_zmin" value="ForwardPID_zmin"/> <!-- vessel front -->
<constant name="DRICH_Length" value="ForwardPID_length"/> <!-- overall vessel length (including snout) -->
<constant name="DRICH_rmin0" value="ForwardPID_rmin1"/> <!-- bore radius at dRICh vessel frontplane -->
<constant name="DRICH_rmin1" value="19.0*cm"/> <!-- 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="200*cm"/> <!-- cylinder radius; 20 cm gap between dRICh and HCalBarrel -->
<!-- snout geometry: cone with front radius rmax0 and back radius of rmax1 -->
<constant name="DRICH_SnoutLength" value="50.0*cm"/>
<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 -->
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
104
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
</define>
<detectors>
<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"
>
<!-- envelope dimensions (see above)
- `wall_thickness`: thickness of radial walls
- `window_thickness`: thickness of entrance and exit disks
-->
<dimensions
z0="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"
/>
<!-- radiator defined in a wedge of azimuthal space
- `phiw` is phi width of wedge
- `thickness` defined separately for aerogel and filter
- `frontplane` is the front of the aerogel, w.r.t. front plane of vessel envelope
- `pitch` controls the angle of the radiator (0=vertical)
- filter is applied to backplane of aerogel
-->
<radiator
rmin="DRICH_rmin0 + DRICH_wall_thickness + 2.0*cm"
rmax="DRICH_rmax0 - DRICH_wall_thickness - 2.0*cm"
phiw="56*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>
<!-- spherical mirror is part of a sphere
- `rmin` and `rmax` provide polar angle boundaries
- `phiw` is the azimuthal width
- `radius` is the radius of the sphere
- `centerx` is the transverse position of the center
of the sphere, for the sector on the +x axis
- the back of the mirror will pass through `backplane`
- set `debug` to 1 so draw reference sphere instead, view with y-clipping
-->
<mirror
material="Acrylic_DRICH"
surface="MirrorSurface_DRICH"
vis="DRICH_mirror_vis"
backplane="DRICH_Length-2.0*cm"
thickness="0.2*cm"
radius="290*DRICH_scale*cm"
centerx="145*DRICH_scale*cm"
rmin="DRICH_rmin1 + DRICH_wall_thickness + 0.0*cm"
rmax="DRICH_rmax2 - DRICH_wall_thickness - 2.0*cm"
phiw="54*degree"
debug="0"
/>
<sensors>
<!-- geometry for a single square sensor
- based on Hamamatsu H13700 MAPMT
(https://www.hamamatsu.com/us/en/product/type/H13700/index.html)
- N.B. not ideal for a magnetic field, SiPM matrix would be better
- effective area: 48.5x48.5mm
- enclosure size: 52x52mm
- 16x16 channel matrix (see readout segmentation below)
- pixel size: 3x3mm
- `side` is the side length of the square
- `thickness` is the depth of the sensor
- `gap` provides room between the squares, to help
prevent them from overlapping
- 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 patch below
-->
<module
material="Silicon"
surface="SensorSurface_DRICH"
vis="DRICH_sensor_vis"
side="DRICH_sensor_size"
thickness="DRICH_sensor_thickness"
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
gap="0.5*(52-48)*mm + 2*mm"
/>
<!-- sensors will be tiled on this sphere
- `center{x,y,z} is defined for sector on +x axis, defined w.r.t. snout frontplane,
and `radius` is the sphere radius; the first term of each of these comes from
the fun4all design
- these attributes were determined from a spherical fit to the
sensor placement in the fun4all port
- set `debug` to 1 so draw reference sphere instead, view with y-clipping
-->
<sphere
radius="159.76*DRICH_scale*cm"
centerx="144.91*DRICH_scale*cm"
centery="0*DRICH_scale*cm"
centerz="-197.25*DRICH_scale*cm + DRICH_Length - 0.5*DRICH_scale*DRICH_f4a_length"
debug="0"
/>
<!-- sensors will be limited to a patch of the sphere
- `thetamin` and `thetamax` define pseudorapidity coverage
- `widthfactor` controls the azimuthal coverage, where lower=wider
- `taper` defines half the angle between the azimuthal boundaries
- the size of the sensor controls how many sensors are placed
-->
<sphericalpatch
thetamin="-10*degree"
thetamax="22*degree"
widthfactor="1.8"
taper="56*degree"
/>
</sensors>
</detector>
</detectors>
<readouts>
<readout name="DRICHHits">
<!-- segmentation: square matrix of pixels
- note: for `grid_size`, divide sensor size by 1 less than the
number of pixels, to account for fenceposting
-->
<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"
/>
- offset 0, length 8: dRICh ID
- offset 8, length 3: sector number
- offset 11, length 12: photosensor number
- offset 23, length 16: x pixel
- offset 39, length 16: y pixel
<id>system:8,sector:3,module:12,x:23:16,y:16</id>
</readout>
</readouts>
</lccdd>