Warning, /epic/compact/pid/drich.xml is written in an unsupported language. File is not indexed.
0001 <!-- SPDX-License-Identifier: LGPL-3.0-or-later -->
0002 <!-- Copyright (C) 2022, 2023 Christopher Dilks, Chandradoy Chatterjee, Junhuai Xu -->
0003
0004 <lccdd>
0005
0006 <define>
0007 <!-- vessel (=snout+tank) geometry -->
0008 <constant name="DRICH_length" value="ForwardRICHRegion_length"/> <!-- overall vessel length -->
0009 <constant name="DRICH_zmin" value="ForwardRICHRegion_zmin + 3.*cm"/> <!-- 3cm spacing since https://indico.bnl.gov/event/22417/ -->
0010 <constant name="DRICH_zmax" value="DRICH_zmin + DRICH_length"/>
0011 <constant name="DRICH_rmin0" value="DRICH_zmin * ForwardRICHRegion_tan1"/> <!-- bore radius at dRICH entrance -->
0012 <constant name="DRICH_rmin1" value="DRICH_zmax * ForwardRICHRegion_tan2"/> <!-- bore radius at dRICH exit -->
0013 <constant name="DRICH_bore_slope" value="(DRICH_rmin1 - DRICH_rmin0) / DRICH_length"/> <!-- slope of bore radius -->
0014 <constant name="DRICH_wall_thickness" value="1.0*cm"/> <!-- thickness of radial walls -->
0015 <constant name="DRICH_window_thickness" value="0.3*cm"/> <!-- thickness of entrance and exit walls -->
0016 <constant name="DRICH_num_sectors" value="6"/> <!-- number of azimuthal sectors -->
0017 <!-- snout geometry: cone with front radius rmax0 and back radius of rmax1 -->
0018 <constant name="DRICH_rmax0" value="90.0*cm"/>
0019 <constant name="DRICH_snout_length" value="20.0*cm"/>
0020 <constant name="DRICH_rmax1" value="DRICH_rmax0 + DRICH_snout_length * (tan(0.200+atan(DRICH_rmax0/DRICH_zmin))) "/> <!--extra 0.200 takes into account the saturated cone of light from aerogel-->
0021 <!-- tank geometry: cylinder, holding the majority of detector components -->
0022 <constant name="DRICH_rmax2" value="ForwardPIDRegion_rmax"/> <!-- cylinder radius -->
0023 <!-- sensor boxes: extrusions of the tank, to hold the sensors and their services -->
0024 <constant name="DRICH_sensorbox_length" value="50.0*cm"/> <!-- z-length of the extrusion -->
0025 <constant name="DRICH_sensorbox_rmin" value="108*cm"/> <!-- lower radial limit of the extrusion -->
0026 <constant name="DRICH_sensorbox_rmax" value="DRICH_rmax2 + 5*cm"/> <!-- upper radial limit of the extrusion -->
0027 <constant name="DRICH_sensorbox_dphi" value="42*degree"/> <!-- azimuthal width of the extrusion -->
0028 <!-- aerogel+filter geometry -->
0029 <constant name="DRICH_aerogel_thickness" value="4.0*cm"/> <!-- aerogel thickness -->
0030 <constant name="DRICH_airgap_thickness" value="0.01*mm"/> <!-- air gap between aerogel and filter -->
0031 <constant name="DRICH_filter_thickness" value="3.0*mm"/> <!-- filter thickness -->
0032 <!-- sensor geometry; model = S13361-3050NE-08 SiPM -->
0033 <constant name="DRICH_pixel_gap" value="0.2*mm"/> <!-- size of gaps between adjacent pixels AND gaps between edge pixels and sensor side -->
0034 <constant name="DRICH_sensor_resin_size" value="25.8*mm"/> <!-- full length of the sensor+resin side -->
0035 <constant name="DRICH_sensor_size" value="DRICH_sensor_resin_size - DRICH_pixel_gap"/> <!-- side length of photosensitive surface (to be segmented) -->
0036 <constant name="DRICH_sensor_thickness" value="0.1*mm"/> <!-- photosensitive surface thickness -->
0037 <constant name="DRICH_sensor_resin_thickness" value="1.35*mm"/> <!-- resin thickness -->
0038 <constant name="DRICH_num_px" value="8"/> <!-- number of pixels along one side of the sensor -->
0039 <constant name="DRICH_pixel_size" value="3.0*mm"/> <!-- a single SiPM pixel size -->
0040 <constant name="DRICH_pixel_pitch" value="DRICH_pixel_size + DRICH_pixel_gap"/> <!-- center-to-center distance between SiPMs in a 8x8 panel -->
0041 <!-- photodetector unit (PDU) geometry -->
0042 <constant name="DRICH_pdu_num_sensors" value="2"/> <!-- number of sensors along one side of a PDU -->
0043 <constant name="DRICH_pdu_sensor_gap" value="0.2*mm"/> <!-- gap between adjacent sensors -->
0044 <constant name="DRICH_pdu_gap" value="3.0*mm"/> <!-- gap between adjacent PDUs -->
0045 <!-- settings and switches -->
0046 <comment>
0047 - `DRICH_debug_optics`: 1 = all components become vacuum, except for mirrors; test opticalphotons from IP
0048 2 = all components become vacuum, except for mirrors and `gasvol`, test charged particles from IP
0049 3 = all components become vacuum, except for mirrors and sensors, test reflected trajectories' hits
0050 0 = off
0051 - `DRICH_debug_sector`: 1 = only include one sector (will be set automatically when `DRICH_debug_optics>0`)
0052 - `DRICH_debug_mirror`: 1 = draw full mirror shape for single sector; 0 = off
0053 - `DRICH_debug_sensors`: 1 = draw full sensor sphere for a single sector; 0 = off
0054 </comment>
0055 <constant name="DRICH_debug_optics" value="0"/>
0056 <constant name="DRICH_debug_sector" value="0"/>
0057 <constant name="DRICH_debug_mirror" value="0"/>
0058 <constant name="DRICH_debug_sensors" value="0"/>
0059 </define>
0060
0061
0062 <detectors>
0063
0064
0065 <!-- /detectors/detector -->
0066 <documentation level="10">
0067 ### dRICH: ***d***ual ***R***ing ***I***maging ***Ch***erenkov detector
0068 </documentation>
0069 <detector
0070 id="ForwardRICH_ID"
0071 name="DRICH"
0072 type="epic_DRICH"
0073 readout="DRICHHits"
0074 gas="C2F6_DRICH"
0075 material="Aluminum"
0076 vis_vessel="DRICH_vessel_vis"
0077 vis_gas="DRICH_gas_vis"
0078 >
0079
0080
0081 <!-- /detectors/detector/dimensions -->
0082 <documentation level="10">
0083 #### Vessel
0084 - the dRICH vessel is composed of two parts:
0085 - tank: cylindrical region containing most of the detector components
0086 - snout: conical region at the front of the vessel, containing the aerogel
0087 - dimensions:
0088 - `zmin`: z-position of vessel front plane
0089 - `length`: overall z-length of the full vessel
0090 - `snout_length`: length of cone-shaped snout region, housing aerogel
0091 - `rmin0` and `rmin1`: bore radius at front plane and back plane, respectively
0092 - `rmax0` and `rmax1`: outer radius of snout at front plane and snout-back (tank-front) plane, respectively
0093 - `rmax2`: outer radius of tank, the main cylindrical vessel volume
0094 - `nsectors`: number of azimuthal sectors
0095 - `wall_thickness`: thickness of radial walls
0096 - `window_thickness`: thickness of entrance and exit disks
0097 </documentation>
0098 <dimensions
0099 zmin="DRICH_zmin"
0100 length="DRICH_length"
0101 snout_length="DRICH_snout_length"
0102 rmin0="DRICH_rmin0"
0103 rmin1="DRICH_rmin1"
0104 rmax0="DRICH_rmax0"
0105 rmax1="DRICH_rmax1"
0106 rmax2="DRICH_rmax2"
0107 nsectors="DRICH_num_sectors"
0108 wall_thickness="DRICH_wall_thickness"
0109 window_thickness="DRICH_window_thickness"
0110 />
0111
0112
0113 <!-- /detectors/detector/radiator -->
0114 <documentation level="10">
0115 #### Radiator
0116 - radiator is defined in a wedge of azimuthal space, composed of aerogel and a
0117 filter; the filter is applied to the back of the aerogel, so that it separates
0118 the aerogel and gas radiators; an airgap is defined between the aerogel and filter
0119 - dimensions:
0120 - `frontplane`: front of the aerogel, w.r.t. front plane of the vessel envelope
0121 - `rmin` and `rmax`: inner and outer radius (at the front plane; radial bounds are conical)
0122 - `thickness`: radiator thickness, defined separately for aerogel and filter
0123 - `pitch`: controls the angle of the radiator (0=vertical)
0124 </documentation>
0125 <radiator
0126 rmin="DRICH_rmin0 + DRICH_wall_thickness + 0.2*cm"
0127 rmax="DRICH_rmax0 - DRICH_wall_thickness - 0.2*cm"
0128 frontplane="DRICH_window_thickness"
0129 pitch="0*degree"
0130 >
0131 <aerogel
0132 material="Aerogel_DRICH"
0133 vis="DRICH_aerogel_vis"
0134 thickness="DRICH_aerogel_thickness"
0135 />
0136 <airgap
0137 material="AirOptical"
0138 vis="DRICH_gas_vis"
0139 thickness="DRICH_airgap_thickness"
0140 />
0141 <filter
0142 material="Acrylic_DRICH"
0143 vis="DRICH_filter_vis"
0144 thickness="DRICH_filter_thickness"
0145 />
0146 </radiator>
0147
0148
0149 <!-- /detectors/detector/mirror -->
0150 <documentation level="10">
0151 #### Spherical mirror
0152 - spherical mirrors are built from spherical patches, and positioned near the
0153 vessel back plane, separately for each sector
0154 - dimensions:
0155 - `backplane`: the position of the maximum z-plane intersected by the sphere,
0156 w.r.t. the back plane of vessel envelope
0157 - `rmin` and `rmax`: polar angle boundaries
0158 - `phiw`: azimuthal width of one sector
0159 - `thickness` is the radial thickness of the mirror; note that `backplane` is given for the
0160 reflective mirror surface, the inner radius of the sphere
0161 - `focus_tune*` are tuning parameters for the focal region:
0162 - `focus_tune_z` and `focus_tune_x` will move the focal region, with respect
0163 to the sensor sphere center (i.e., set both to zero for focus at the sensor sphere center
0164 (ignoring spherical aberrations effects))
0165 </documentation>
0166 <mirror
0167 material="Acrylic_DRICH"
0168 surface="MirrorSurface_DRICH"
0169 vis="DRICH_mirror_vis"
0170 backplane="DRICH_window_thickness + 1.0*cm"
0171 rmin="DRICH_rmin1 + DRICH_wall_thickness - 1.0*cm"
0172 rmax="DRICH_rmax2 - DRICH_wall_thickness - 3.0*cm"
0173 phiw="59.5*degree"
0174 thickness="0.2*cm"
0175 focus_tune_x="-7.00*cm"
0176 focus_tune_z="6.15*cm"
0177 />
0178
0179 <!-- /detectors/detector/sensors -->
0180 <documentation level="10">
0181 #### Sensors
0182 </documentation>
0183 <sensors>
0184
0185
0186 <documentation level="10">
0187 ##### Sensor modules: photosensitive surface (pss) + resin base
0188 - SiPM: Silicon Photomultiplier
0189 - PSS: photosensitive surface
0190 - resin: resin substrate (holds the PSS)
0191 - dimensions:
0192 - `side`: side length
0193 - `thickness`: thickness
0194 - PDU: Photodetector Unit (dimensions defined as constants above)
0195 - note: the PDU pitch will determine how many PDUs there are, since the
0196 sensor placement algorithm will try to place as many as it can in the specified
0197 spherical patch below
0198 - Front Services: cooling, heat exchange, etc.
0199 - so far just a box with `side` and `thickness` dimensions
0200 - includes a unique `name`, and `material` and `vis`
0201 - if more than one is defined, they will be layered, in order
0202 - Board: a circuit board (front end board, readout board, etc.)
0203 - dimensions:
0204 - `width`: board side length, paralell to PSS
0205 - `length`: board side length, perpendicular to PSS
0206 - `thickness: board thickness
0207 - `offset`: positioning, with respect to PDU central axis
0208 - Back Services: sockets, cooling, etc.
0209 - so far just a box with `side` and `thickness` dimensions
0210 - includes a unique `name`, and `material` and `vis`
0211 - if more than one is defined, they will be layered, in order
0212
0213 ###### Diagrams
0214 ```
0215 sensor assembly diagram:, where '0' denotes the origin:
0216
0217 axes: z
0218 +-+--------0--------+-+ |
0219 | | pss | | 0--x
0220 | +-----------------+ |
0221 | resin |
0222 +---------------------+
0223
0224 ```
0225 ```
0226 photodetector unit (PDU) assembly diagram: matrix of SiPMs with services
0227
0228 Top view: 2x2 matrix of SiPMs (2 PDU units shown side-by-side)
0229 =============================
0230
0231 -: :- PDU gap size
0232 : :
0233 +-----------+ +-----------+
0234 | +--+ +--+ | | +--+ +--+ |
0235 | | | | | | | | | | | |
0236 | +--+ +--+ | | +--+ +--+ |
0237 | +--+ +--+ | | +--+ +--+ |
0238 | | | | | | | | | | | |
0239 | +--+ +--+ | | +--+ +--+ |
0240 +-----------+ +-----------+
0241 : : : :
0242 : : -: :- sensor gap size
0243 : :
0244 -: :- sensor gap size (same)
0245
0246 Side view:
0247 ==========
0248
0249 +--------------------+
0250 | SiPM Matrix |
0251 +--------------------+
0252 | Cooling, heat | frontservices
0253 | exchange, etc. |
0254 +--------------------+
0255 || || || || ||
0256 || || || || || front-end and
0257 || || || || || readout boards
0258 || || || || ||
0259 || || || || ||
0260 ||
0261 ||
0262 +----------------+
0263 | Sockets, etc. | backservices
0264 +----------------+
0265
0266 ```
0267 </documentation>
0268 <pss
0269 material="AirOptical"
0270 surface="SensorSurface_DRICH"
0271 vis="DRICH_sensor_vis"
0272 side="DRICH_sensor_size"
0273 thickness="DRICH_sensor_thickness"
0274 />
0275 <resin
0276 material="Epoxy"
0277 vis="DRICH_vessel_vis"
0278 side="DRICH_sensor_resin_size"
0279 thickness="DRICH_sensor_resin_thickness"
0280 />
0281 <pdu>
0282 <frontservices>
0283 <service
0284 name="cooling"
0285 side="DRICH_pdu_num_sensors * (DRICH_sensor_resin_size + DRICH_pdu_sensor_gap) + DRICH_pdu_sensor_gap"
0286 thickness="2.0*cm"
0287 material="Aluminum"
0288 vis="DRICH_aerogel_vis"
0289 />
0290 </frontservices>
0291 <boards material="Aluminum" vis="DRICH_service_vis">
0292 <board name="FEB0" width="4.2*cm" length="6.0*cm" thickness="0.2*cm" offset="-2.0*cm" />
0293 <board name="FEB1" width="4.2*cm" length="6.0*cm" thickness="0.2*cm" offset="-1.0*cm" />
0294 <board name="RDO" width="4.2*cm" length="9.0*cm" thickness="0.2*cm" offset="0.0*cm" />
0295 <board name="FEB2" width="4.2*cm" length="6.0*cm" thickness="0.2*cm" offset="1.0*cm" />
0296 <board name="FEB3" width="4.2*cm" length="6.0*cm" thickness="0.2*cm" offset="2.0*cm" />
0297 </boards>
0298 <backservices>
0299 <service
0300 name="socket"
0301 side="4.5*cm"
0302 thickness="2.0*cm"
0303 material="Aluminum"
0304 vis="DRICH_aerogel_vis"
0305 />
0306 </backservices>
0307 </pdu>
0308
0309
0310 <!-- /detectors/detector/sensors/{sphere,sphericalpatch} -->
0311 <documentation level="10">
0312 ##### Sensor sphere
0313 - sensors will be placed on a sphere, using a "disco ball" tiling algorithm; each
0314 sector has its own sensor sphere
0315 - sphere dimensions:
0316 - `centerx` and `centerz`: sphere center, defined w.r.t. vessel front plane,
0317 for the sector on +x axis
0318 - `radius`: radius of the sensor sphere
0319 - sensors will be limited to a patch of the sphere
0320 - patch dimensions:
0321 - `phiw`: defines half the angle between the azimuthal boundaries
0322 - `rmin` and `rmax`: radial cut boundaries
0323 - `zmin`: z-plane cut
0324 </documentation>
0325 <sphere
0326 centerz="138.4*cm - DRICH_zmin"
0327 centerx="183.4*cm"
0328 radius="110.0*cm"
0329 />
0330 <sphericalpatch
0331 phiw="18*degree"
0332 rmin="111.0*cm"
0333 rmax="179.0*cm"
0334 zmin="DRICH_snout_length + 4.0*cm"
0335 />
0336
0337
0338 </sensors>
0339 </detector>
0340 </detectors>
0341
0342
0343 <documentation level="10">
0344 #### Readout
0345 - segmentation: square matrix of pixels
0346 - `grid_size_x,y`: size of each sensor pixel
0347 - `offset_x,y`: specified such that the `x` and `y` values are unsigned
0348 (except for very rare hits on the sensor sides)
0349 </documentation>
0350 <readouts>
0351 <readout name="DRICHHits">
0352 <segmentation
0353 type="CartesianGridXY"
0354 grid_size_x="DRICH_pixel_pitch"
0355 grid_size_y="DRICH_pixel_pitch"
0356 offset_x="-0.5*(DRICH_num_px-1)*DRICH_pixel_pitch"
0357 offset_y="-0.5*(DRICH_num_px-1)*DRICH_pixel_pitch"
0358 />
0359 <id>system:8,sector:3,pdu:12,sipm:6,x:32:-16,y:-16</id>
0360 </readout>
0361 </readouts>
0362 </lccdd>