Skip to content

Commit

Permalink
Inner mpgd barrel geo update (#732)
Browse files Browse the repository at this point in the history
### Briefly, what does this PR introduce?
Update the MPGD inner barrel, making it a set of cylindrical, as opposed
to flat, tiles.

### What kind of change does this PR introduce?
- [x] New feature (issue #730 )

### Please check if this PR fulfills the following:
- [x] Changes have been communicated to collaborators

### Does this PR introduce breaking changes? What changes might users
need to make to their code?
Yes. Users need to update their DD4hep private repository to revision
#c3b305ce of the AIDASoft/DD4hep github, see
"AIDASoft/DD4hep@c3b305ce".

### Does this PR change default behavior?
Yes.

---------

Co-authored-by: Matthew Posik <[email protected]>
Co-authored-by: ybedfer <[email protected]>
Co-authored-by: Matt Posik <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Wouter Deconinck <[email protected]>
  • Loading branch information
6 people authored Jul 30, 2024
1 parent e1dfc99 commit 7e32143
Show file tree
Hide file tree
Showing 3 changed files with 635 additions and 42 deletions.
2 changes: 1 addition & 1 deletion compact/tracking/mpgd_backward_endcap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
<constant name="BackwardMPGDMod2_y" value="BackwardMPGDMod2_rmax * cos(BackwardMPGDEndcapMod_angle/2) - BackwardMPGDMod2_rmin" />
</define>

<detectors>
<detectors>
<detector
id="TrackerEndcapN_4_ID"
name="BackwardMPGD"
Expand Down
111 changes: 70 additions & 41 deletions compact/tracking/mpgd_barrel.xml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<!-- SPDX-License-Identifier: LGPL-3.0-or-later -->
<!-- Copyright (C) 2022 Sylvester Joosten, Wouter Deconinck, Matt Posik -->
<!-- Copyright (C) 2022 Sylvester Joosten, Wouter Deconinck, Matt Posik, Yann Bedfer -->

<lccdd>
<info name="mpgd_barrel.xml"
title="Micro Pattern Gas Detectors"
author="mposik1983"
url="https://github.com/mposik1983"
status="development"
version="1.0"
version="2.0"
><comment/>
</info>

Expand All @@ -21,70 +21,91 @@
</comment>

<constant name="InnerMPGDBarrelLayer_length" value="InnerMPGDBarrel_length" />
<constant name="InnerMPGDBarrelLayer_thickness" value="5*cm" />
<constant name="InnerMPGDBarrelLayer_rmin" value="InnerMPGDBarrel_rmin"/>
<constant name="InnerMPGDBarrelLayer_rmax" value="InnerMPGDBarrelLayer_rmin + InnerMPGDBarrelLayer_thickness"/>

<comment> Intrinsic parameters... </comment>
<comment> ...Thicknesses </comment>
<constant name="MMKaptonOverlay_thickness" value="50*um"/>
<constant name="MMCuGround_thickness" value="1.58*um"/>
<constant name="MMPCB_thickness" value="100*um"/>
<constant name="MMCuStrip_thickness" value="12*um"/>
<constant name="MMKaptonStrip_thickness" value="75*um"/>
<constant name="MMResistiveStrip_thickness" value="128*um"/>
<constant name="MMGas_thickness" value="20*um"/>
<constant name="MMResistiveStrip_thickness" value="20*um"/>
<constant name="MMGas_thickness" value="128*um"/>
<constant name="MMMesh_thickness" value="18*um"/>
<constant name="MMGasGap_thickness" value="3000*um"/>
<constant name="MMDriftCuElectrode_thickness" value="5*um"/>
<constant name="MMDriftKapton_thickness" value="250*um"/>
<constant name="MMDriftCuGround_thickness" value="0.41*um"/>

<comment> FIXME: No support material is here, so fudge factor used to bring material budget to ~0.5% for barrel </comment>
<constant name="MMFudgeInnerMPGDBarrel_thickness" value="570*um"/>
<constant name="MMFudgeInnerMPGDBarrel_thickness" value="570*um"/>
<comment> FIXME: No definite plan for connections/services to the inner sectors yet, so guess value </comment>
<constant name="MMInnerService_thickness" value="0.05*cm"/>
<comment> ...Dimensions </comment>
<constant name="MMModuleWidth" value="46.0*cm"/>
<constant name="MMModuleLength" value="61.0*cm"/>
<constant name="MMFrameWidth" value="1.0*cm"/>
<constant name="MMOutwardFrameWidth" value="5.0*cm"/>
<constant name="MMOuterSector_R" value="57.7*cm"/>
<constant name="MMInnerSector_R" value="55.5*cm"/>
<comment> ...Positioning </comment>
<constant name="MMRadial_offset" value="1.0*cm"/>
<constant name="MMCentral_gap" value="0.2*cm"/>


<comment>
Extra parameters to approximate a cylinder as a set of skinny staves
due to ACTS limitations.
FIXME: this shouldn't be needed anymore, need to update the cylindrical plugin.
</comment>
<constant name="MPGDBarrelStave_count" value="128"/>
<constant name="InnerMPGDBarrelStave_width" value="2*(InnerMPGDBarrelLayer_rmin) * tan(180*degree/MPGDBarrelStave_count)"/>
<comment> In principle, stave count should not be independenty specified: it is fixed by above intrinsic parameters </comment>
<constant name="MPGDBarrelStave_count" value="8"/>
<constant name="InnerMPGDBarrelLayer_rmin" value="InnerMPGDBarrel_rmin"/>
<constant name="InnerMPGDBarrelLayer_rmax" value="MMOuterSector_R + MMRadial_offset / 2 + 1*cm"/>
<constant name="rmin2Sensor" value="MMDriftCuGround_thickness + MMDriftKapton_thickness + MMDriftCuElectrode_thickness + MMGasGap_thickness / 2" />
<constant name="MMInnerSensor_R" value="MMInnerSector_R + rmin2Sensor" />
<constant name="MMOuterSensor_R" value="MMOuterSector_R + rmin2Sensor" />
</define>

<detectors>
<detector
id="TrackerBarrel_2_ID"
name="InnerMPGDBarrel"
type="epic_TrackerBarrel"
type="epic_CylinderMPGDBarrel"
readout="MPGDBarrelHits"
insideTrackingVolume="true">
<type_flags type="DetType_TRACKER + DetType_BARREL"/>
<module name="InnerMPGDBarrel_Mod1" vis="TrackerMPGDVis">
insideTrackingVolume="true"
vis="TrackerVis">
<type_flags type="DetType_TRACKER + DetType_BARREL"/>
<dimensions
width="MMModuleWidth"
length="MMModuleLength"/>

<module name="InnerMPGDBarrel_Mod1" vis="TrackerLayerVis" >
<comment> Models describe the overlapping of staves along phi, either (I) via offsets or (II) via distinct radii ("rmin1/2"). Solution (II) is only partially implemented: would require FOUR distinct "radius" in the readout segmentation. Note that in any case "rsensor" must be set equal the "radius" of the corresponding segmentation and is used internally to double-check the consistency between the stack of "module_component" and the segmentation "radius". </comment>
<model name="MMInnerSector" rmin1="MMInnerSector_R" rmin2="MMInnerSector_R" offset="MMRadial_offset" rsensor="MMInnerSensor_R"/>
<model name="MMOuterSector" rmin1="MMOuterSector_R" rmin2="MMOuterSector_R" offset="MMRadial_offset" rsensor="MMOuterSensor_R"/>
<frame name="MMFrame" material="CarbonFiber" width="MMFrameWidth" vis="TrackerSupportVis" />
<frame name="MMOutwardFrame" material="CarbonFiber" width="MMOutwardFrameWidth" vis="TrackerServiceVis" />
<service name="MMInnerService" material="Kapton" thickness="MMInnerService_thickness" vis="TrackerServiceVis" /> <comment> This includes cables => Kapton as a material is overoptimistic. </comment>
<comment> Going from the inside (sensitive) side to the readout side </comment>
<module_component name="DriftCuGround" thickness="MMDriftCuGround_thickness" material="Copper" vis="TrackerMPGDVis" width="InnerMPGDBarrelStave_width" length="InnerMPGDBarrel_length"/>
<module_component name="DriftKapton" thickness="MMDriftKapton_thickness" material="Kapton" width="InnerMPGDBarrelStave_width" length="InnerMPGDBarrel_length"/>
<module_component name="DriftCuElectrode" thickness="MMDriftCuElectrode_thickness" material="Copper" width="InnerMPGDBarrelStave_width" length="InnerMPGDBarrel_length"/>
<module_component name="GasGap" thickness="MMGasGap_thickness" material="Ar90IsoButane" sensitive="True" width="InnerMPGDBarrelStave_width" length="InnerMPGDBarrel_length"/>
<module_component name="Mesh" thickness="MMMesh_thickness" material="MMGAS_InoxForMesh" width="InnerMPGDBarrelStave_width" length="InnerMPGDBarrel_length"/>
<module_component name="Fudge" thickness="MMFudgeInnerMPGDBarrel_thickness" material="Kapton" width="InnerMPGDBarrelStave_width" length="InnerMPGDBarrel_length"/>
<module_component name="Gas" thickness="MMGas_thickness" material="Ar90IsoButane" width="InnerMPGDBarrelStave_width" length="InnerMPGDBarrel_length"/>
<module_component name="ResistiveStrips" thickness="MMResistiveStrip_thickness" material="MMGAS_ResistivePaste" width="InnerMPGDBarrelStave_width" length="InnerMPGDBarrel_length"/>
<module_component name="KaptonStrips" thickness="MMKaptonStrip_thickness" material="Kapton" width="InnerMPGDBarrelStave_width" length="InnerMPGDBarrel_length"/>
<module_component name="CuStrips" thickness="MMCuStrip_thickness" material="Copper" width="InnerMPGDBarrelStave_width" length="InnerMPGDBarrel_length"/>
<module_component name="PCB" thickness="MMPCB_thickness" material="Fr4" width="InnerMPGDBarrelStave_width" length="InnerMPGDBarrel_length"/>
<module_component name="CuGround" thickness="MMCuGround_thickness" material="Copper" width="InnerMPGDBarrelStave_width" length="InnerMPGDBarrel_length"/>
<module_component name="KaptonOverlay" thickness="MMKaptonOverlay_thickness" material="Kapton" vis="TrackerSupportVis" width="InnerMPGDBarrelStave_width" length="InnerMPGDBarrel_length"/>
<module_component name="DriftCuGround" thickness="MMDriftCuGround_thickness" material="Copper" vis="TrackerModuleVis"/>
<module_component name="DriftKapton" thickness="MMDriftKapton_thickness" material="Kapton" vis="TrackerVis" />
<module_component name="DriftCuElectrode" thickness="MMDriftCuElectrode_thickness" material="Copper" vis="TrackerVis"/>
<module_component name="GasGap" thickness="MMGasGap_thickness" material="Ar90IsoButane" sensitive="True" vis="TrackerMPGDGasVis" />
<module_component name="Mesh" thickness="MMMesh_thickness" material="MMGAS_InoxForMesh" vis="TrackerVis"/>
<module_component name="Fudge" thickness="MMFudgeInnerMPGDBarrel_thickness" material="Kapton" vis="TrackerVis"/>
<module_component name="Gas" thickness="MMGas_thickness" material="Ar90IsoButane" vis="TrackerMPGDGasVis"/>
<module_component name="ResistiveStrips" thickness="MMResistiveStrip_thickness" material="MMGAS_ResistivePaste" vis="TrackerVis"/>
<module_component name="KaptonStrips" thickness="MMKaptonStrip_thickness" material="Kapton" vis="TrackerVis" />
<module_component name="CuStrips" thickness="MMCuStrip_thickness" material="Copper" vis="TrackerVis" />
<module_component name="PCB" thickness="MMPCB_thickness" material="Fr4" vis="TrackerVis"/>
<module_component name="CuGround" thickness="MMCuGround_thickness" material="Copper" vis="TrackerVis"/>
<module_component name="KaptonOverlay" thickness="MMKaptonOverlay_thickness" material="Kapton" vis="TrackerMPGDVis"/> <!-- Instead of "TrackerSupportVis" in order to highligh frames -->
</module>
<layer module="InnerMPGDBarrel_Mod1" id="1" vis="TrackerMMGASLayerVis">

<layer module="InnerMPGDBarrel_Mod1" id="1" vis="InvisibleWithDaughters">
<barrel_envelope
inner_r="InnerMPGDBarrelLayer_rmin"
outer_r="InnerMPGDBarrelLayer_rmax"
z_length="InnerMPGDBarrelLayer_length"
z0="InnerMPGDBarrel_zoffset"/>
<layer_material surface="inner" binning="binPhi,binZ" bins0="MPGDBarrelStave_count" bins1="100" />
<layer_material surface="outer" binning="binPhi,binZ" bins0="MPGDBarrelStave_count" bins1="100" />
<rphi_layout phi_tilt="0" nphi="MPGDBarrelStave_count" phi0="0.0" rc="(InnerMPGDBarrelLayer_rmin + InnerMPGDBarrelLayer_rmax)/2.0" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
<layer_material surface="inner" binning="binPhi,binZ" bins0="MPGDBarrelStave_count*24" bins1="100" />
<layer_material surface="outer" binning="binPhi,binZ" bins0="MPGDBarrelStave_count*24" bins1="100" />
<rphi_layout phi0="0.0"/>
<z_layout gap="MMCentral_gap"/>
</layer>
</detector>
</detectors>
Expand All @@ -98,8 +119,16 @@

<readouts>
<readout name="MPGDBarrelHits">
<segmentation type="CartesianGridXY" grid_size_x="0.150*mm*sqrt(12)" grid_size_y="0.150*mm*sqrt(12)" />
<id>system:8,layer:4,module:12,sensor:2,x:32:-14,y:-18</id>
<comment> 768 strips in phi yield a segmentation of 2pi/8/768 ~= 1mrad. Which in turn, yields ~160 um in resolution.
</comment>
<segmentation type="MultiSegmentation" key="sensor">
<comment> In preparation for a 2-sensors-w/-strip setup. Presently sensors w/ odd key values do not exist. </comment>
<segmentation name="InnerPhi" type="CylindricalGridPhiZ" key_value="0" grid_size_phi="1*mrad" grid_size_z="0.150*mm*sqrt(12)" radius="MMInnerSensor_R" />
<segmentation name="InnerZ" type="CylindricalGridPhiZ" key_value="1" grid_size_phi="1*mrad" grid_size_z="0.150*mm*sqrt(12)" radius="MMInnerSensor_R" />
<segmentation name="OuterPhi" type="CylindricalGridPhiZ" key_value="2" grid_size_phi="1*mrad" grid_size_z="0.150*mm*sqrt(12)" radius="MMOuterSensor_R" />
<segmentation name="OuterZ" type="CylindricalGridPhiZ" key_value="3" grid_size_phi="1*mrad" grid_size_z="0.150*mm*sqrt(12)" radius="MMOuterSensor_R" />
</segmentation>
<id>system:8,layer:4,module:12,sensor:2,phi:32:-16,z:-16</id>
</readout>
</readouts>

Expand Down
Loading

0 comments on commit 7e32143

Please sign in to comment.