Back to home page

EIC code displayed by LXR

 
 

    


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>