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
0047
0048 <constant name="DRICH_corona_thickness" value="1*mm"/>
0049
0050
0051 <comment>
0052 - `DRICH_debug_optics`: 1 = all components become vacuum, except for mirrors; test opticalphotons from IP
0053 2 = all components become vacuum, except for mirrors and `gasvol`, test charged particles from IP
0054 3 = all components become vacuum, except for mirrors and sensors, test reflected trajectories' hits
0055 0 = off
0056 - `DRICH_debug_sector`: 1 = only include one sector (will be set automatically when `DRICH_debug_optics>0`)
0057 - `DRICH_debug_mirror`: 1 = draw full mirror shape for single sector; 0 = off
0058 - `DRICH_debug_sensors`: 1 = draw full sensor sphere for a single sector; 0 = off
0059 </comment>
0060 <constant name="DRICH_debug_optics" value="0"/>
0061 <constant name="DRICH_debug_sector" value="0"/>
0062 <constant name="DRICH_debug_mirror" value="0"/>
0063 <constant name="DRICH_debug_sensors" value="0"/>
0064 </define>
0065
0066 <regions>
0067 <region name="DRICHRegion"/>
0068 </regions>
0069
0070
0071 <detectors>
0072
0073
0074 <!-- /detectors/detector -->
0075 <documentation level="10">
0076 ### dRICH: ***d***ual ***R***ing ***I***maging ***Ch***erenkov detector
0077 </documentation>
0078 <detector
0079 id="ForwardRICH_ID"
0080 name="DRICH"
0081 type="epic_DRICH"
0082 region="DRICHRegion"
0083 readout="DRICHHits"
0084 gas="C2F6_DRICH"
0085 material="Aluminum"
0086 vis_vessel="DRICH_vessel_vis"
0087 vis_gas="DRICH_gas_vis"
0088 >
0089
0090
0091 <!-- /detectors/detector/dimensions -->
0092 <documentation level="10">
0093 #### Vessel
0094 - the dRICH vessel is composed of two parts:
0095 - tank: cylindrical region containing most of the detector components
0096 - snout: conical region at the front of the vessel, containing the aerogel
0097 - dimensions:
0098 - `zmin`: z-position of vessel front plane
0099 - `length`: overall z-length of the full vessel
0100 - `snout_length`: length of cone-shaped snout region, housing aerogel
0101 - `rmin0` and `rmin1`: bore radius at front plane and back plane, respectively
0102 - `rmax0` and `rmax1`: outer radius of snout at front plane and snout-back (tank-front) plane, respectively
0103 - `rmax2`: outer radius of tank, the main cylindrical vessel volume
0104 - `nsectors`: number of azimuthal sectors
0105 - `wall_thickness`: thickness of radial walls
0106 - `window_thickness`: thickness of entrance and exit disks
0107 </documentation>
0108 <dimensions
0109 zmin="DRICH_zmin"
0110 length="DRICH_length"
0111 snout_length="DRICH_snout_length"
0112 rmin0="DRICH_rmin0"
0113 rmin1="DRICH_rmin1"
0114 rmax0="DRICH_rmax0"
0115 rmax1="DRICH_rmax1"
0116 rmax2="DRICH_rmax2"
0117 nsectors="DRICH_num_sectors"
0118 wall_thickness="DRICH_wall_thickness"
0119 window_thickness="DRICH_window_thickness"
0120 />
0121
0122
0123 <!-- /detectors/detector/radiator -->
0124 <documentation level="10">
0125 #### Radiator
0126 - radiator is defined in a wedge of azimuthal space, composed of aerogel and a
0127 filter; the filter is applied to the back of the aerogel, so that it separates
0128 the aerogel and gas radiators; an airgap is defined between the aerogel and filter
0129 - dimensions:
0130 - `frontplane`: front of the aerogel, w.r.t. front plane of the vessel envelope
0131 - `rmin` and `rmax`: inner and outer radius (at the front plane; radial bounds are conical)
0132 - `thickness`: radiator thickness, defined separately for aerogel and filter
0133 - `pitch`: controls the angle of the radiator (0=vertical)
0134 - `segmentations`:controls tiling method. They can be "trapezoidal" or "unique".
0135 A unique segmentation means, no tiling of aerogel.
0136
0137 </documentation>
0138 <radiator
0139 rmin="DRICH_rmin0 + DRICH_wall_thickness + 0.2*cm"
0140 rmax="DRICH_rmax0 - DRICH_wall_thickness - 0.2*cm"
0141 frontplane="DRICH_window_thickness"
0142 pitch="0*degree"
0143 >
0144 <aerogel
0145 material="Aerogel_DRICH"
0146 vis="DRICH_aerogel_vis"
0147 thickness="DRICH_aerogel_thickness"
0148 />
0149 <coronas
0150 segmentation="trapezoidal"
0151 thickness="DRICH_corona_thickness"
0152 material="CarbonFiber_15percent"
0153 vis="DRICH_Corona_vis"
0154 >
0155 <crown radius="12.9596*cm" num_segments="10"/>
0156 <crown radius="31.8*cm" num_segments="18"/>
0157 <crown radius="51.0*cm" num_segments="24"/>
0158 <crown radius="70.5*cm" num_segments="30"/>
0159 <crown radius="88.7962*cm"/>
0160 </coronas>
0161 <airgap
0162 material="AirOptical"
0163 vis="DRICH_gas_vis"
0164 thickness="DRICH_airgap_thickness"
0165 />
0166 <filter
0167 material="Acrylic_DRICH"
0168 vis="DRICH_filter_vis"
0169 thickness="DRICH_filter_thickness"
0170 />
0171 </radiator>
0172
0173
0174 <!-- /detectors/detector/mirror -->
0175 <documentation level="10">
0176 #### Spherical mirror
0177 - spherical mirrors are built from spherical patches, and positioned near the
0178 vessel back plane, separately for each sector
0179 - dimensions:
0180 - `backplane`: the position of the maximum z-plane intersected by the sphere,
0181 w.r.t. the back plane of vessel envelope
0182 - `rmin` and `rmax`: polar angle boundaries
0183 - `phiw`: azimuthal width of one sector
0184 - `thickness` is the radial thickness of the mirror; note that `backplane` is given for the
0185 reflective mirror surface, the inner radius of the sphere
0186 - `focus_tune*` are tuning parameters for the focal region:
0187 - `focus_tune_z` and `focus_tune_x` will move the focal region, with respect
0188 to the sensor sphere center (i.e., set both to zero for focus at the sensor sphere center
0189 (ignoring spherical aberrations effects))
0190 </documentation>
0191 <mirror
0192 material="Acrylic_DRICH"
0193 surface="MirrorSurface_DRICH"
0194 vis="DRICH_mirror_vis"
0195 backplane="DRICH_window_thickness + 1.0*cm"
0196 rmin="DRICH_rmin1 + DRICH_wall_thickness - 1.0*cm"
0197 rmax="DRICH_rmax2 - DRICH_wall_thickness - 3.0*cm"
0198 phiw="59.5*degree"
0199 thickness="0.2*cm"
0200 focus_tune_x="-7.00*cm"
0201 focus_tune_z="6.15*cm"
0202 />
0203
0204 <!-- /detectors/detector/sensors -->
0205 <documentation level="10">
0206 #### Sensors
0207 </documentation>
0208 <sensors>
0209
0210
0211 <documentation level="10">
0212 ##### Sensor modules: photosensitive surface (pss) + resin base
0213 - SiPM: Silicon Photomultiplier
0214 - PSS: photosensitive surface
0215 - resin: resin substrate (holds the PSS)
0216 - dimensions:
0217 - `side`: side length
0218 - `thickness`: thickness
0219 - PDU: Photodetector Unit (dimensions defined as constants above)
0220 - note: the PDU pitch will determine how many PDUs there are, since the
0221 sensor placement algorithm will try to place as many as it can in the specified
0222 spherical patch below
0223 - Front Services: cooling, heat exchange, etc.
0224 - so far just a box with `side` and `thickness` dimensions
0225 - includes a unique `name`, and `material` and `vis`
0226 - if more than one is defined, they will be layered, in order
0227 - Board: a circuit board (front end board, readout board, etc.)
0228 - dimensions:
0229 - `width`: board side length, paralell to PSS
0230 - `length`: board side length, perpendicular to PSS
0231 - `thickness: board thickness
0232 - `offset`: positioning, with respect to PDU central axis
0233 - Back Services: sockets, cooling, etc.
0234 - so far just a box with `side` and `thickness` dimensions
0235 - includes a unique `name`, and `material` and `vis`
0236 - if more than one is defined, they will be layered, in order
0237
0238 ###### Diagrams
0239 ```
0240 sensor assembly diagram:, where '0' denotes the origin:
0241
0242 axes: z
0243 +-+--------0--------+-+ |
0244 | | pss | | 0--x
0245 | +-----------------+ |
0246 | resin |
0247 +---------------------+
0248
0249 ```
0250 ```
0251 photodetector unit (PDU) assembly diagram: matrix of SiPMs with services
0252
0253 Top view: 2x2 matrix of SiPMs (2 PDU units shown side-by-side)
0254 =============================
0255
0256 -: :- PDU gap size
0257 : :
0258 +-----------+ +-----------+
0259 | +--+ +--+ | | +--+ +--+ |
0260 | | | | | | | | | | | |
0261 | +--+ +--+ | | +--+ +--+ |
0262 | +--+ +--+ | | +--+ +--+ |
0263 | | | | | | | | | | | |
0264 | +--+ +--+ | | +--+ +--+ |
0265 +-----------+ +-----------+
0266 : : : :
0267 : : -: :- sensor gap size
0268 : :
0269 -: :- sensor gap size (same)
0270
0271 Side view:
0272 ==========
0273
0274 +--------------------+
0275 | SiPM Matrix |
0276 +--------------------+
0277 | Cooling, heat | frontservices
0278 | exchange, etc. |
0279 +--------------------+
0280 || || || || ||
0281 || || || || || front-end and
0282 || || || || || readout boards
0283 || || || || ||
0284 || || || || ||
0285 ||
0286 ||
0287 +----------------+
0288 | Sockets, etc. | backservices
0289 +----------------+
0290
0291 ```
0292 </documentation>
0293 <pss
0294 material="AirOptical"
0295 surface="SensorSurface_DRICH"
0296 vis="DRICH_sensor_vis"
0297 side="DRICH_sensor_size"
0298 thickness="DRICH_sensor_thickness"
0299 />
0300 <resin
0301 material="Epoxy"
0302 vis="DRICH_vessel_vis"
0303 side="DRICH_sensor_resin_size"
0304 thickness="DRICH_sensor_resin_thickness"
0305 />
0306 <pdu>
0307 <frontservices>
0308 <service
0309 name="cooling"
0310 side="DRICH_pdu_num_sensors * (DRICH_sensor_resin_size + DRICH_pdu_sensor_gap) + DRICH_pdu_sensor_gap"
0311 thickness="2.0*cm"
0312 material="Aluminum"
0313 vis="DRICH_aerogel_vis"
0314 />
0315 </frontservices>
0316 <boards material="Aluminum" vis="DRICH_service_vis">
0317 <board name="FEB0" width="4.2*cm" length="6.0*cm" thickness="0.2*cm" offset="-2.0*cm" />
0318 <board name="FEB1" width="4.2*cm" length="6.0*cm" thickness="0.2*cm" offset="-1.0*cm" />
0319 <board name="RDO" width="4.2*cm" length="9.0*cm" thickness="0.2*cm" offset="0.0*cm" />
0320 <board name="FEB2" width="4.2*cm" length="6.0*cm" thickness="0.2*cm" offset="1.0*cm" />
0321 <board name="FEB3" width="4.2*cm" length="6.0*cm" thickness="0.2*cm" offset="2.0*cm" />
0322 </boards>
0323 <backservices>
0324 <service
0325 name="socket"
0326 side="4.5*cm"
0327 thickness="2.0*cm"
0328 material="Aluminum"
0329 vis="DRICH_aerogel_vis"
0330 />
0331 </backservices>
0332 </pdu>
0333
0334
0335 <!-- /detectors/detector/sensors/{sphere,sphericalpatch} -->
0336 <documentation level="10">
0337 ##### Sensor sphere
0338 - sensors will be placed on a sphere, using a "disco ball" tiling algorithm; each
0339 sector has its own sensor sphere
0340 - sphere dimensions:
0341 - `centerx` and `centerz`: sphere center, defined w.r.t. vessel front plane,
0342 for the sector on +x axis
0343 - `radius`: radius of the sensor sphere
0344 - sensors will be limited to a patch of the sphere
0345 - patch dimensions:
0346 - `phiw`: defines half the angle between the azimuthal boundaries
0347 - `rmin` and `rmax`: radial cut boundaries
0348 - `zmin`: z-plane cut
0349 </documentation>
0350 <sphere
0351 centerz="138.4*cm - DRICH_zmin"
0352 centerx="183.4*cm"
0353 radius="110.0*cm"
0354 />
0355 <sphericalpatch
0356 phiw="18*degree"
0357 rmin="111.0*cm"
0358 rmax="179.0*cm"
0359 zmin="DRICH_snout_length + 4.0*cm"
0360 />
0361
0362
0363 </sensors>
0364 </detector>
0365 </detectors>
0366
0367
0368 <documentation level="10">
0369 #### Readout
0370 - segmentation: square matrix of pixels
0371 - `grid_size_x,y`: size of each sensor pixel
0372 - `offset_x,y`: specified such that the `x` and `y` values are unsigned
0373 (except for very rare hits on the sensor sides)
0374 </documentation>
0375 <readouts>
0376 <readout name="DRICHHits">
0377 <segmentation
0378 type="CartesianGridXY"
0379 grid_size_x="DRICH_pixel_pitch"
0380 grid_size_y="DRICH_pixel_pitch"
0381 offset_x="-0.5*(DRICH_num_px-1)*DRICH_pixel_pitch"
0382 offset_y="-0.5*(DRICH_num_px-1)*DRICH_pixel_pitch"
0383 />
0384 <id>system:8,sector:3,pdu:12,sipm:6,x:32:-16,y:-16</id>
0385 </readout>
0386 </readouts>
0387 </lccdd>