Skip to content
Snippets Groups Projects
Commit 9d1184d3 authored by Francesco Bossù's avatar Francesco Bossù
Browse files

MM tracker

parent 2e7fa037
No related branches found
No related tags found
No related merge requests found
...@@ -4,18 +4,108 @@ ...@@ -4,18 +4,108 @@
<define> <define>
<constant name="MMTrackerBarrel_thickness" value="TrackerBarrel_rmax - TrackerBarrel_rmax"/> <constant name="MMTrackerBarrel_thickness" value="TrackerBarrel_rmax - TrackerBarrel_rmin"/>
<constant name="MMTrackerBarrel_NLayers" value="5"/> <constant name="MMTrackerBarrel_NLayers" value="5"/>
<constant name="MMTrackerBarrel_delta" value="MMTrackerBarrel_thickness/MMTrackerBarrel_NLayers"/>
<constant name="MMTrackerBarrelLayer1_rmin" value="800.0 * mm"/> <comment> global constants </comment>
<constant name="MMTrackerBarrelLayer1_length" value="100.0 * mm"/> <constant name="MMTrackerBarrel_maxLength" value="700.0 * mm"/>
<constant name="MMTrackerBarrel_maxWidth" value="500.0 * mm"/>
<constant name="MMTrackerBarrel_spacer" value="20.0 * mm"/>
<constant name="MMTrackerBarrel_gasGap" value="3.0 * mm"/>
<constant name="MMTrackerBarrel_support" value="20.0 * mm"/>
<comment> constants per layers </comment>
<constant name="MMTrackerBarrelLayer1_rmin" value="465.0 * mm"/>
<constant name="MMTrackerBarrelLayer1_dz" value="0"/>
<constant name="MMTrackerBarrelLayer1_phi0" value="0"/>
<constant name="MMTrackerBarrelLayer1_thickness" value="10.0 * mm"/> <constant name="MMTrackerBarrelLayer1_thickness" value="10.0 * mm"/>
<constant name="MMTrackerBarrel_NZModules" value="floor(BarrelTracking_length/MMTrackerBarrelLayer1_length)"/> <constant name="MMTrackerBarrelLayer1_NTiles" value="ceil(MMTrackerBarrelLayer1_rmin * 2*pi / (MMTrackerBarrel_maxWidth + MMTrackerBarrel_spacer))"/>
<constant name="MMTrackerBarrelLayer1_TileWidth" value="(MMTrackerBarrelLayer1_rmin * 2*pi - MMTrackerBarrelLayer1_NTiles * MMTrackerBarrel_spacer) / MMTrackerBarrelLayer1_NTiles" />
<constant name="MMTrackerBarrelLayer1_length" value="MMTrackerBarrel_maxLength"/>
<constant name="MMTrackerBarrelLayer2_rmin" value="495.0 * mm"/>
<constant name="MMTrackerBarrelLayer2_dz" value="MMTrackerBarrel_support"/>
<constant name="MMTrackerBarrelLayer2_phi0" value="15*degree"/>
<constant name="MMTrackerBarrelLayer2_thickness" value="10.0 * mm"/>
<constant name="MMTrackerBarrelLayer2_NTiles" value="ceil(MMTrackerBarrelLayer2_rmin * 2*pi / (MMTrackerBarrel_maxWidth + MMTrackerBarrel_spacer))"/>
<constant name="MMTrackerBarrelLayer2_TileWidth" value="(MMTrackerBarrelLayer2_rmin * 2*pi - MMTrackerBarrelLayer2_NTiles * MMTrackerBarrel_spacer) / MMTrackerBarrelLayer2_NTiles" />
<constant name="MMTrackerBarrelLayer2_length" value="MMTrackerBarrel_maxLength"/>
<constant name="MMTrackerBarrelLayer3_rmin" value="690.0 * mm"/>
<constant name="MMTrackerBarrelLayer3_dz" value="MMTrackerBarrel_support"/>
<constant name="MMTrackerBarrelLayer3_phi0" value="30*degree"/>
<constant name="MMTrackerBarrelLayer3_thickness" value="10.0 * mm"/>
<constant name="MMTrackerBarrelLayer3_NTiles" value="ceil(MMTrackerBarrelLayer3_rmin * 2*pi / (MMTrackerBarrel_maxWidth + MMTrackerBarrel_spacer))"/>
<constant name="MMTrackerBarrelLayer3_TileWidth" value="(MMTrackerBarrelLayer3_rmin * 2*pi - MMTrackerBarrelLayer3_NTiles * MMTrackerBarrel_spacer) / MMTrackerBarrelLayer3_NTiles" />
<constant name="MMTrackerBarrelLayer3_length" value="MMTrackerBarrel_maxLength"/>
<constant name="MMTrackerBarrelLayer4_rmin" value="720.0 * mm"/>
<constant name="MMTrackerBarrelLayer4_dz" value="0"/>
<constant name="MMTrackerBarrelLayer4_phi0" value="45*degree"/>
<constant name="MMTrackerBarrelLayer4_thickness" value="10.0 * mm"/>
<constant name="MMTrackerBarrelLayer4_NTiles" value="ceil(MMTrackerBarrelLayer4_rmin * 2*pi / (MMTrackerBarrel_maxWidth + MMTrackerBarrel_spacer))"/>
<constant name="MMTrackerBarrelLayer4_TileWidth" value="(MMTrackerBarrelLayer4_rmin * 2*pi - MMTrackerBarrelLayer4_NTiles * MMTrackerBarrel_spacer) / MMTrackerBarrelLayer4_NTiles" />
<constant name="MMTrackerBarrelLayer4_length" value="MMTrackerBarrel_maxLength"/>
<constant name="MMTrackerBarrelLayer5_rmin" value="750.0 * mm"/>
<constant name="MMTrackerBarrelLayer5_dz" value="MMTrackerBarrel_support"/>
<constant name="MMTrackerBarrelLayer5_phi0" value="60*degree"/>
<constant name="MMTrackerBarrelLayer5_thickness" value="10.0 * mm"/>
<constant name="MMTrackerBarrelLayer5_NTiles" value="ceil(MMTrackerBarrelLayer5_rmin * 2*pi / (MMTrackerBarrel_maxWidth + MMTrackerBarrel_spacer))"/>
<constant name="MMTrackerBarrelLayer5_TileWidth" value="(MMTrackerBarrelLayer5_rmin * 2*pi - MMTrackerBarrelLayer5_NTiles * MMTrackerBarrel_spacer) / MMTrackerBarrelLayer5_NTiles" />
<constant name="MMTrackerBarrelLayer5_length" value="MMTrackerBarrel_maxLength"/>
<constant name="MMTrackerBarrelLayer6_rmin" value="780.0 * mm"/>
<constant name="MMTrackerBarrelLayer6_dz" value="0"/>
<constant name="MMTrackerBarrelLayer6_phi0" value="75*degree"/>
<constant name="MMTrackerBarrelLayer6_thickness" value="10.0 * mm"/>
<constant name="MMTrackerBarrelLayer6_NTiles" value="ceil(MMTrackerBarrelLayer6_rmin * 2*pi / (MMTrackerBarrel_maxWidth + MMTrackerBarrel_spacer))"/>
<constant name="MMTrackerBarrelLayer6_TileWidth" value="(MMTrackerBarrelLayer6_rmin * 2*pi - MMTrackerBarrelLayer6_NTiles * MMTrackerBarrel_spacer) / MMTrackerBarrelLayer6_NTiles" />
<constant name="MMTrackerBarrelLayer6_length" value="MMTrackerBarrel_maxLength"/>
<constant name="MMTrackerBarrel_NZModules" value="floor(BarrelTracking_length/MMTrackerBarrel_maxLength)"/>
<constant name="MMTrackerBarrelModulesTotal_length" value="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer1_length"/> <constant name="MMTrackerBarrelModulesTotal_length" value="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer1_length"/>
</define> </define>
<materials>
<material name="CopperForStrips" state="solid">
<D type="density" unit="g/cm3" value="5.248414"/>
<composite n="1" ref="Cu"/>
</material>
<material name="ResistivePaste" state="solid">
<D type="density" unit="g/cm3" value="0.77906"/>
<composite n="1" ref="C"/>
</material>
<material name="InoxForMesh" state="solid">
<D type="density" unit="g/cm3" value="2.8548"/>
<fraction n="0.19" ref="Cr"/>
<fraction n="0.68" ref="Fe"/>
<fraction n="0.02" ref="Mn"/>
<fraction n="0.10" ref="Ni"/>
<fraction n="0.01" ref="Si"/>
</material>
<material name="Ar90IsoButane" state="gas">
<D type="density" unit="g/cm3" value="0.00170335"/>
<fraction n="0.90" ref="Ar"/>
<fraction n="0.0826586" ref="C"/>
<fraction n="0.0173414" ref="H"/>
</material>
</materials>
<limits> <limits>
</limits> </limits>
...@@ -26,26 +116,81 @@ ...@@ -26,26 +116,81 @@
</display> </display>
<detectors> <detectors>
<detector id="MMTrackerBarrel_ID" name="MMTrackerBarrel" type="refdet_MMTrackerBarrel" readout="MMTrackerBarrelHits"> <detector id="MMTrackerBarrel_ID"
<module name="Module1" vis="AnlGold"> name="MMTrackerBarrel"
type="refdet_MMTrackerBarrel"
readout="MMTrackerBarrelHits"
vis="AnlRed"
>
<module name="MM_Module1" vis="AnlGold">
<module_envelope <module_envelope
rmin="TrackerBarrel_rmax" rmin="MMTrackerBarrelLayer1_rmin"
length="MMTrackerBarrelLayer1_length" length="MMTrackerBarrelLayer1_length"
thickness="MMTrackerBarrel_delta" phi="90*degree" /> thickness="10*mm"
<module_component thickness="1.0*mm" material="PEEK" sensitive="false"> phi="MMTrackerBarrelLayer1_TileWidth/(MMTrackerBarrelLayer1_rmin) * radian" />
<position x="0" /> <comment> going from the readout side to the drift cathode </comment>
</module_component> <module_component name="coverlay" thickness="0.0050000 * cm" material="Kapton"/>
<module_component thickness="1.0*mm" material="PEEK" sensitive="false" <module_component name="CuGround" thickness="0.0001580 * cm" material="Copper"/>
length="MMTrackerBarrelLayer1_length-10.0*mm" <module_component name="PCB" thickness="0.0100000 * cm" material="Fr4"/>
phi="89.0*degree" > <module_component name="CuStrips" thickness="0.0012000 * cm" material="Copper"/>
<position x="0" /> <module_component name="KaptonStrips" thickness="0.0075000 * cm" material="Kapton"/>
</module_component> <module_component name="ResistiveStrips" thickness="0.0128000 * cm" material="ResistivePaste"/>
<module_component name="Gas1" thickness="0.0020000 * cm" material="Ar90IsoButane"/>
<module_component name="Mesh" thickness="0.0018000 * cm" material="InoxForMesh"/>
<module_component name="Gas2"
thickness="MMTrackerBarrel_gasGap"
material="Ar90IsoButane"
sensitive="true"
length="MMTrackerBarrelLayer1_length - 2 * MMTrackerBarrel_gasGap"
phi="(MMTrackerBarrelLayer1_TileWidth - 2*MMTrackerBarrel_gasGap)/(MMTrackerBarrelLayer1_rmin) * radian"/>
<module_component name="DriftCuElectrode" thickness="0.0005000 * cm" material="Copper"/>
<module_component name="DriftKapton" thickness="0.0250000 * cm" material="Kapton"/>
<module_component name="DriftCuGround" thickness="0.0000410 * cm" material="Copper"/>
<frame material="CarbonFiber_50D" thickness="MMTrackerBarrel_gasGap" vis="AnlRed"
rmin="
0.0050000 +
0.0001580 +
0.0100000 +
0.0012000 +
0.0075000 +
0.0128000 +
0.0020000 +
0.0018000"
>
</frame>
</module> </module>
<layer module="Module1" id="1" vis="GreenVis">
<comment> small PCB on the side of each tile </comment>
<module name="MM_Module1_Meca" >
<module_envelope
rmin="MMTrackerBarrelLayer1_rmin"
length="MMTrackerBarrelLayer1_length"
thickness="1*mm"
phi="MMTrackerBarrel_spacer/(MMTrackerBarrelLayer1_rmin) * radian" />
<module_component name="CuMeca" thickness="60 * um" material="Copper"/>
<module_component name="PCBMeca" thickness="200 * um" material="Fr4"/>
</module>
<module name="MM_Module1_Support" >
<module_envelope
rmin="MMTrackerBarrelLayer1_rmin"
length="MMTrackerBarrel_support"
thickness="MMTrackerBarrel_support"
phi="360 * degree" />
<module_component name="Support"
thickness="MMTrackerBarrel_support"
material="CarbonFiber_50D"/>
</module>
<comment> ===================== LAYER 1 ============================== </comment>
<layer module="MM_Module1" id="1" vis="GreenVis">
<barrel_envelope <barrel_envelope
inner_r="MMTrackerBarrelLayer1_rmin-20.0*mm" inner_r="MMTrackerBarrelLayer1_rmin "
outer_r="MMTrackerBarrelLayer1_rmin + 20.0*mm" outer_r="MMTrackerBarrelLayer1_rmin + 5.0*mm"
z_length="MMTrackerBarrelModulesTotal_length" /> z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer1_length+(MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support" />
<comment> <comment>
phi0 : Starting phi of first module. phi0 : Starting phi of first module.
phi_tilt : Phi tilt of a module. phi_tilt : Phi tilt of a module.
...@@ -56,12 +201,202 @@ ...@@ -56,12 +201,202 @@
nz : Number of modules to place in z. nz : Number of modules to place in z.
dr : Radial displacement parameter, of every other module. dr : Radial displacement parameter, of every other module.
</comment> </comment>
<rphi_layout phi_tilt="0.0" nphi="4" phi0="0." rc="MMTrackerBarrelLayer1_rmin" dr="0.0 * mm"/> <rphi_layout phi_tilt="0.0" nphi="MMTrackerBarrelLayer1_NTiles" phi0="MMTrackerBarrelLayer1_phi0" rc="MMTrackerBarrelLayer1_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="-MMTrackerBarrelModulesTotal_length/2.0 + MMTrackerBarrelLayer1_length/2.0" <z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer1_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 + MMTrackerBarrelLayer1_length/2.0"
nz="MMTrackerBarrel_NZModules"/> nz="3" dz="MMTrackerBarrelLayer1_dz"/>
</layer> </layer>
</detector>
<layer module="MM_Module1_Meca" id="10" vis="RedVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer1_rmin"
outer_r="MMTrackerBarrelLayer1_rmin + 1*mm"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer1_length+(MMTrackerBarrel_NZModules)*MMTrackerBarrel_support" />
<rphi_layout phi_tilt="0.0" nphi="MMTrackerBarrelLayer1_NTiles" phi0="(MMTrackerBarrelLayer1_TileWidth+MMTrackerBarrel_spacer)/2/MMTrackerBarrelLayer1_rmin * radian + MMTrackerBarrelLayer1_phi0" rc="MMTrackerBarrelLayer1_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer1_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 + MMTrackerBarrelLayer1_length/2.0"
nz="3" dz="MMTrackerBarrelLayer1_dz"/>
</layer>
<layer module="MM_Module1_Support" id="11" vis="RedVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer1_rmin"
outer_r="MMTrackerBarrelLayer1_rmin + MMTrackerBarrel_support + 1*mm"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer1_length+(MMTrackerBarrel_NZModules+1)*MMTrackerBarrel_support" />
<rphi_layout phi_tilt="0.0" nphi="1" phi0="0" dr="0.0 * mm" rc="MMTrackerBarrelLayer1_rmin"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer1_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 - MMTrackerBarrel_support/2"
nz="4" dz="MMTrackerBarrelLayer1_dz"/>
</layer>
<comment> ===================== LAYER 2 ============================== </comment>
<layer module="MM_Module1" id="2" vis="GreenVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer2_rmin "
outer_r="MMTrackerBarrelLayer2_rmin + 5.0*mm"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer2_length+(MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support + 2*MMTrackerBarrelLayer2_dz" />
<rphi_layout phi_tilt="0.0" nphi="MMTrackerBarrelLayer2_NTiles" phi0="MMTrackerBarrelLayer2_phi0" rc="MMTrackerBarrelLayer2_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer2_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 + MMTrackerBarrelLayer2_length/2.0"
nz="3" dz="MMTrackerBarrelLayer2_dz"/>
</layer>
<layer module="MM_Module1_Meca" id="20" vis="RedVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer2_rmin"
outer_r="MMTrackerBarrelLayer2_rmin + 1*mm"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer2_length+(MMTrackerBarrel_NZModules)*MMTrackerBarrel_support + 2*MMTrackerBarrelLayer2_dz" />
<rphi_layout phi_tilt="0.0" nphi="MMTrackerBarrelLayer2_NTiles" phi0="(MMTrackerBarrelLayer2_TileWidth+MMTrackerBarrel_spacer)/2/MMTrackerBarrelLayer2_rmin * radian + MMTrackerBarrelLayer2_phi0" rc="MMTrackerBarrelLayer2_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer2_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 + MMTrackerBarrelLayer2_length/2.0"
nz="3" dz="MMTrackerBarrelLayer2_dz"/>
</layer>
<layer module="MM_Module1_Support" id="21" vis="RedVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer2_rmin"
outer_r="MMTrackerBarrelLayer2_rmin + MMTrackerBarrel_support + 1*mm"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer2_length+(MMTrackerBarrel_NZModules+1)*MMTrackerBarrel_support+ 2*MMTrackerBarrelLayer2_dz" />
<rphi_layout phi_tilt="0.0" nphi="1" phi0="0" dr="0.0 * mm" rc="MMTrackerBarrelLayer2_rmin"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer2_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 - MMTrackerBarrel_support/2"
nz="4" dz="MMTrackerBarrelLayer2_dz"/>
</layer>
<comment> ===================== LAYER 3 ============================== </comment>
<layer module="MM_Module1" id="3" vis="GreenVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer3_rmin "
outer_r="MMTrackerBarrelLayer3_rmin + MMTrackerBarrel_support"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer3_length+(MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support + 2*MMTrackerBarrelLayer3_dz" />
<rphi_layout phi_tilt="0.0" nphi="MMTrackerBarrelLayer3_NTiles" phi0="MMTrackerBarrelLayer3_phi0" rc="MMTrackerBarrelLayer3_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer3_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 + MMTrackerBarrelLayer3_length/2.0"
nz="3" dz="MMTrackerBarrelLayer3_dz"/>
</layer>
<layer module="MM_Module1_Meca" id="30" vis="RedVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer3_rmin"
outer_r="MMTrackerBarrelLayer3_rmin + 1*mm"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer3_length+(MMTrackerBarrel_NZModules)*MMTrackerBarrel_support + 2*MMTrackerBarrelLayer3_dz" />
<rphi_layout phi_tilt="0.0" nphi="MMTrackerBarrelLayer3_NTiles" phi0="(MMTrackerBarrelLayer3_TileWidth+MMTrackerBarrel_spacer)/2/MMTrackerBarrelLayer3_rmin * radian + MMTrackerBarrelLayer3_phi0" rc="MMTrackerBarrelLayer3_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer3_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 + MMTrackerBarrelLayer3_length/2.0"
nz="3" dz="MMTrackerBarrelLayer3_dz"/>
</layer>
<layer module="MM_Module1_Support" id="31" vis="RedVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer3_rmin"
outer_r="MMTrackerBarrelLayer3_rmin + MMTrackerBarrel_support + 1*mm"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer3_length+(MMTrackerBarrel_NZModules+1)*MMTrackerBarrel_support + 2*MMTrackerBarrelLayer3_dz" />
<rphi_layout phi_tilt="0.0" nphi="1" phi0="0" dr="0.0 * mm" rc="MMTrackerBarrelLayer3_rmin"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer3_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 - MMTrackerBarrel_support/2"
nz="4" dz="MMTrackerBarrelLayer3_dz"/>
</layer>
<comment> ===================== LAYER 4 ============================== </comment>
<layer module="MM_Module1" id="4" vis="GreenVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer4_rmin "
outer_r="MMTrackerBarrelLayer4_rmin + 5.0*mm"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer4_length+(MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support + 2*MMTrackerBarrelLayer4_dz" />
<rphi_layout phi_tilt="0.0" nphi="MMTrackerBarrelLayer4_NTiles" phi0="MMTrackerBarrelLayer4_phi0" rc="MMTrackerBarrelLayer4_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer4_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 + MMTrackerBarrelLayer4_length/2.0"
nz="3" dz="MMTrackerBarrelLayer4_dz"/>
</layer>
<layer module="MM_Module1_Meca" id="40" vis="RedVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer4_rmin"
outer_r="MMTrackerBarrelLayer4_rmin + 1*mm"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer4_length+(MMTrackerBarrel_NZModules)*MMTrackerBarrel_support + 2*MMTrackerBarrelLayer4_dz" />
<rphi_layout phi_tilt="0.0" nphi="MMTrackerBarrelLayer4_NTiles" phi0="(MMTrackerBarrelLayer4_TileWidth+MMTrackerBarrel_spacer)/2/MMTrackerBarrelLayer4_rmin * radian + MMTrackerBarrelLayer4_phi0" rc="MMTrackerBarrelLayer4_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer4_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 + MMTrackerBarrelLayer4_length/2.0"
nz="3" dz="MMTrackerBarrelLayer4_dz"/>
</layer>
<layer module="MM_Module1_Support" id="41" vis="RedVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer4_rmin"
outer_r="MMTrackerBarrelLayer4_rmin + MMTrackerBarrel_support"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer4_length+(MMTrackerBarrel_NZModules+1)*MMTrackerBarrel_support+ 2*MMTrackerBarrelLayer4_dz" />
<rphi_layout phi_tilt="0.0" nphi="1" phi0="0" dr="0.0 * mm" rc="MMTrackerBarrelLayer4_rmin"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer4_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 - MMTrackerBarrel_support/2"
nz="4" dz="MMTrackerBarrelLayer4_dz"/>
</layer>
<comment> ===================== LAYER 5 ============================== </comment>
<layer module="MM_Module1" id="5" vis="GreenVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer5_rmin "
outer_r="MMTrackerBarrelLayer5_rmin + MMTrackerBarrel_support + 1*mm"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer5_length+(MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support + 2*MMTrackerBarrelLayer5_dz" />
<rphi_layout phi_tilt="0.0" nphi="MMTrackerBarrelLayer5_NTiles" phi0="MMTrackerBarrelLayer5_phi0" rc="MMTrackerBarrelLayer5_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer5_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 + MMTrackerBarrelLayer5_length/2.0"
nz="3" dz="MMTrackerBarrelLayer5_dz"/>
</layer>
<layer module="MM_Module1_Meca" id="50" vis="RedVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer5_rmin"
outer_r="MMTrackerBarrelLayer5_rmin + 1*mm"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer5_length+(MMTrackerBarrel_NZModules)*MMTrackerBarrel_support + 2*MMTrackerBarrelLayer5_dz" />
<rphi_layout phi_tilt="0.0" nphi="MMTrackerBarrelLayer5_NTiles" phi0="(MMTrackerBarrelLayer5_TileWidth+MMTrackerBarrel_spacer)/2/MMTrackerBarrelLayer5_rmin * radian + MMTrackerBarrelLayer5_phi0" rc="MMTrackerBarrelLayer5_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer5_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 + MMTrackerBarrelLayer5_length/2.0"
nz="3" dz="MMTrackerBarrelLayer5_dz"/>
</layer>
<layer module="MM_Module1_Support" id="51" vis="RedVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer5_rmin"
outer_r="MMTrackerBarrelLayer5_rmin + MMTrackerBarrel_support"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer5_length+(MMTrackerBarrel_NZModules+1)*MMTrackerBarrel_support + 2*MMTrackerBarrelLayer5_dz" />
<rphi_layout phi_tilt="0.0" nphi="1" phi0="0" dr="0.0 * mm" rc="MMTrackerBarrelLayer5_rmin"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer5_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 - MMTrackerBarrel_support/2"
nz="4" dz="MMTrackerBarrelLayer5_dz"/>
</layer>
<comment> ===================== LAYER 6 ============================== </comment>
<layer module="MM_Module1" id="6" vis="GreenVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer6_rmin "
outer_r="MMTrackerBarrelLayer6_rmin + MMTrackerBarrel_support + 1*mm"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer6_length+(MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support + 2*MMTrackerBarrelLayer6_dz" />
<rphi_layout phi_tilt="0.0" nphi="MMTrackerBarrelLayer6_NTiles" phi0="MMTrackerBarrelLayer6_phi0" rc="MMTrackerBarrelLayer6_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer6_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 + MMTrackerBarrelLayer6_length/2.0"
nz="3" dz="MMTrackerBarrelLayer6_dz"/>
</layer>
<layer module="MM_Module1_Meca" id="60" vis="RedVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer6_rmin"
outer_r="MMTrackerBarrelLayer6_rmin + 1*mm"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer6_length+(MMTrackerBarrel_NZModules)*MMTrackerBarrel_support + 2*MMTrackerBarrelLayer6_dz" />
<rphi_layout phi_tilt="0.0" nphi="MMTrackerBarrelLayer6_NTiles" phi0="(MMTrackerBarrelLayer6_TileWidth+MMTrackerBarrel_spacer)/2/MMTrackerBarrelLayer6_rmin * radian + MMTrackerBarrelLayer6_phi0" rc="MMTrackerBarrelLayer6_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer6_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 + MMTrackerBarrelLayer6_length/2.0"
nz="3" dz="MMTrackerBarrelLayer6_dz"/>
</layer>
<layer module="MM_Module1_Support" id="61" vis="RedVis">
<barrel_envelope
inner_r="MMTrackerBarrelLayer6_rmin"
outer_r="MMTrackerBarrelLayer6_rmin + MMTrackerBarrel_support"
z_length="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer6_length+(MMTrackerBarrel_NZModules+1)*MMTrackerBarrel_support" />
<rphi_layout phi_tilt="0.0" nphi="1" phi0="0" dr="0.0 * mm" rc="MMTrackerBarrelLayer6_rmin"/>
<z_layout dr="0.0 * mm" z0="-(MMTrackerBarrel_NZModules*MMTrackerBarrelLayer6_length + (MMTrackerBarrel_NZModules-1)*MMTrackerBarrel_support )/2.0 - MMTrackerBarrel_support/2"
nz="4" dz="MMTrackerBarrelLayer6_dz"/>
</layer>
</detector>
</detectors> </detectors>
<readouts> <readouts>
......
...@@ -11,6 +11,9 @@ using namespace std; ...@@ -11,6 +11,9 @@ using namespace std;
using namespace dd4hep; using namespace dd4hep;
using namespace dd4hep::detail; using namespace dd4hep::detail;
Assembly getModule( string m_nam, int n, xml_det_t x_det, double module_rmin, Detector& description, SensitiveDetector sens, map<string, vector<PlacedVolume>> &sensitives);
/** A barrel tracker with a module that is curved (not flat). /** A barrel tracker with a module that is curved (not flat).
* *
* *
...@@ -32,68 +35,19 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s ...@@ -32,68 +35,19 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
Assembly assembly(det_name); Assembly assembly(det_name);
map<string, Volume> mod_volumes; map<string, Volume> mod_volumes;
map<string, Placements> sensitives; map<string, Placements> sensitives;
map<string, xml_comp_t> modules;
PlacedVolume pv; PlacedVolume pv;
sens.setType("tracker"); sens.setType("tracker");
int n_modules = 0;
for (xml_coll_t mi(x_det, _U(module)); mi; ++mi) {
n_modules++;
xml_comp_t x_mod = mi;
xml_comp_t m_env = x_mod.child(_U(module_envelope));
string m_nam = x_mod.nameStr(); // layers
// ===================
Assembly module_assembly(_toString(n_modules, "mod_assembly_%d"));
auto module_rmin = m_env.rmin();
auto module_thickness = m_env.thickness();
auto module_length = m_env.length();
auto module_phi = getAttrOrDefault(m_env, _Unicode(phi), 90.0);
Volume m_vol(m_nam, Tube(module_rmin, module_rmin + module_thickness, module_length / 2), air);
int ncomponents = 0, sensor_number = 1;
module_assembly.placeVolume(m_vol, Position(-module_rmin, 0, 0));
mod_volumes[m_nam] = module_assembly;
m_vol.setVisAttributes(description.visAttributes(x_mod.visStr()));
auto comp_rmin = module_rmin;
for (xml_coll_t ci(x_mod, _U(module_component)); ci; ++ci, ++ncomponents) {
xml_comp_t x_comp = ci;
xml_comp_t x_pos = x_comp.position(false);
xml_comp_t x_rot = x_comp.rotation(false);
string c_nam = _toString(ncomponents, "component%d");
auto comp_thickness = x_comp.thickness();
comp_rmin = getAttrOrDefault(x_comp, _Unicode(rmin), comp_rmin);
auto comp_phi = getAttrOrDefault(x_comp, _Unicode(phi), module_phi);
auto comp_phi0 = getAttrOrDefault(x_comp, _Unicode(phi0), 0.0);
auto comp_length = getAttrOrDefault(x_comp, _Unicode(length), module_length);
Tube c_tube(comp_rmin, comp_rmin + comp_thickness, comp_length / 2, -comp_phi / 2.0 + comp_phi0,
comp_phi / 2.0 + comp_phi0);
Volume c_vol(c_nam, c_tube, description.material(x_comp.materialStr()));
PlacedVolume c_pv;
if (x_pos && x_rot) {
Position c_pos(x_pos.x(0), x_pos.y(0), x_pos.z(0));
RotationZYX c_rot(x_rot.z(0), x_rot.y(0), x_rot.x(0));
c_pv = m_vol.placeVolume(c_vol, Transform3D(c_rot, c_pos));
} else if (x_rot) {
c_pv = m_vol.placeVolume(c_vol, RotationZYX(x_rot.z(0), x_rot.y(0), x_rot.x(0)));
} else if (x_pos) {
c_pv = m_vol.placeVolume(c_vol, Position(x_pos.x(0), x_pos.y(0), x_pos.z(0)));
} else {
c_pv = m_vol.placeVolume(c_vol);
}
c_vol.setRegion(description, x_comp.regionStr());
c_vol.setLimitSet(description, x_comp.limitsStr());
c_vol.setVisAttributes(description, x_comp.visStr());
if (x_comp.isSensitive()) {
c_pv.addPhysVolID(_U(sensor), sensor_number++);
c_vol.setSensitiveDetector(sens);
sensitives[m_nam].push_back(c_pv);
}
comp_rmin = comp_rmin + comp_thickness;
}
}
for (xml_coll_t li(x_det, _U(layer)); li; ++li) { for (xml_coll_t li(x_det, _U(layer)); li; ++li) {
xml_comp_t x_layer = li; xml_comp_t x_layer = li;
xml_comp_t x_barrel = x_layer.child(_U(barrel_envelope)); xml_comp_t x_barrel = x_layer.child(_U(barrel_envelope));
...@@ -115,7 +69,11 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s ...@@ -115,7 +69,11 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
double z0 = z_layout.z0(); // Z position of first module in phi. double z0 = z_layout.z0(); // Z position of first module in phi.
double nz = z_layout.nz(); // Number of modules to place in z. double nz = z_layout.nz(); // Number of modules to place in z.
double z_dr = z_layout.dr(); // Radial displacement parameter, of every other module. double z_dr = z_layout.dr(); // Radial displacement parameter, of every other module.
Volume m_env = mod_volumes[m_nam]; auto dz = getAttrOrDefault(z_layout, _Unicode(dz), 0.); // z offset
// get the module for this layer from the xml
Volume m_env = getModule( m_nam, lay_id, x_det, x_barrel.inner_r(), description, sens, sensitives ) ;
DetElement lay_elt(sdet, _toString(x_layer.id(), "layer%d"), lay_id); DetElement lay_elt(sdet, _toString(x_layer.id(), "layer%d"), lay_id);
//Acts::ActsExtension* layerExtension = new Acts::ActsExtension(); //Acts::ActsExtension* layerExtension = new Acts::ActsExtension();
...@@ -135,6 +93,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s ...@@ -135,6 +93,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
// Loop over the number of modules in phi. // Loop over the number of modules in phi.
for (int ii = 0; ii < nphi; ii++) { for (int ii = 0; ii < nphi; ii++) {
double dx = z_dr * std::cos(phic + phi_tilt); // Delta x of module position. double dx = z_dr * std::cos(phic + phi_tilt); // Delta x of module position.
double dy = z_dr * std::sin(phic + phi_tilt); // Delta y of module position. double dy = z_dr * std::sin(phic + phi_tilt); // Delta y of module position.
double x = rc * std::cos(phic); // Basic x module position. double x = rc * std::cos(phic); // Basic x module position.
...@@ -142,6 +101,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s ...@@ -142,6 +101,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
// Loop over the number of modules in z. // Loop over the number of modules in z.
for (int j = 0; j < nz; j++) { for (int j = 0; j < nz; j++) {
string module_name = _toString(module, "module%d"); string module_name = _toString(module, "module%d");
DetElement mod_elt(lay_elt, module_name, module); DetElement mod_elt(lay_elt, module_name, module);
// Module PhysicalVolume. // Module PhysicalVolume.
...@@ -149,15 +109,17 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s ...@@ -149,15 +109,17 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
// tr(RotationZYX(0,-((M_PI/2)-phic-phi_tilt),M_PI/2),Position(x,y,module_z)); // tr(RotationZYX(0,-((M_PI/2)-phic-phi_tilt),M_PI/2),Position(x,y,module_z));
// NOTE (Nikiforos, 26/08 Rotations needed to be fixed so that component1 (silicon) is on the // NOTE (Nikiforos, 26/08 Rotations needed to be fixed so that component1 (silicon) is on the
// outside // outside
Transform3D tr(RotationZYX(phic - phi_tilt, 0, 0), Position(x, y, module_z)); Transform3D tr(RotationZYX(phic - phi_tilt, 0, 0), Position(x, y, module_z + dz));
pv = lay_vol.placeVolume(m_env, tr); pv = lay_vol.placeVolume(m_env, tr);
pv.addPhysVolID("module", module); pv.addPhysVolID("module", module);
mod_elt.setPlacement(pv); mod_elt.setPlacement(pv);
for (size_t ic = 0; ic < sensVols.size(); ++ic) { for (size_t ic = 0; ic < sensVols.size(); ++ic) {
PlacedVolume sens_pv = sensVols[ic]; PlacedVolume sens_pv = sensVols[ic];
DetElement comp_elt(mod_elt, sens_pv.volume().name(), module); DetElement comp_elt(mod_elt, sens_pv.volume().name(), module);
comp_elt.setPlacement(sens_pv); comp_elt.setPlacement(sens_pv);
//Acts::ActsExtension* moduleExtension = new Acts::ActsExtension("YZX"); //Acts::ActsExtension* moduleExtension = new Acts::ActsExtension("YZX");
//comp_elt.addExtension<Acts::ActsExtension>(moduleExtension); //comp_elt.addExtension<Acts::ActsExtension>(moduleExtension);
} }
...@@ -180,6 +142,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s ...@@ -180,6 +142,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
} }
// Create the PhysicalVolume for the layer. // Create the PhysicalVolume for the layer.
pv = assembly.placeVolume(lay_vol); // Place layer in mother pv = assembly.placeVolume(lay_vol); // Place layer in mother
pv.addPhysVolID("layer", lay_id); // Set the layer ID. pv.addPhysVolID("layer", lay_id); // Set the layer ID.
lay_elt.setAttributes(description, lay_vol, x_layer.regionStr(), x_layer.limitsStr(), x_layer.visStr()); lay_elt.setAttributes(description, lay_vol, x_layer.regionStr(), x_layer.limitsStr(), x_layer.visStr());
lay_elt.setPlacement(pv); lay_elt.setPlacement(pv);
...@@ -197,3 +160,119 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s ...@@ -197,3 +160,119 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
DECLARE_DETELEMENT(refdet_CylinderTrackerBarrel, create_detector) DECLARE_DETELEMENT(refdet_CylinderTrackerBarrel, create_detector)
DECLARE_DETELEMENT(refdet_MMTrackerBarrel, create_detector) DECLARE_DETELEMENT(refdet_MMTrackerBarrel, create_detector)
DECLARE_DETELEMENT(refdet_RWellTrackerBarrel, create_detector) DECLARE_DETELEMENT(refdet_RWellTrackerBarrel, create_detector)
Assembly getModule( string m_nam, int n, xml_det_t x_det, double module_rmin, Detector& description, SensitiveDetector sens, map<string, vector<PlacedVolume>> &sensitives){
Material air = description.air();
Assembly module_assembly( _toString(n,"mod_assembly_%d"));
int n_modules = 0;
for (xml_coll_t mi(x_det, _U(module)); mi; ++mi) {
n_modules++;
xml_comp_t x_mod = mi;
if( x_mod.nameStr() == m_nam ) {
xml_comp_t m_env = x_mod.child(_U(module_envelope));
string m_nam = x_mod.nameStr();
// auto module_rmin = m_env.rmin();
auto module_length = m_env.length();
auto module_phi = getAttrOrDefault(m_env, _Unicode(phi), 90.0);
// compute thickness as the sum of all components
double total_thickness = 0.;
xml_coll_t ci(x_mod, _U(module_component));
for (ci.reset(), total_thickness = 0.0; ci; ++ci)
total_thickness += xml_comp_t(ci).thickness();
Volume m_vol(m_nam, Tube(module_rmin, module_rmin + total_thickness, module_length / 2), air);
int ncomponents = 0, sensor_number = 1;
module_assembly.placeVolume(m_vol, Position(-module_rmin, 0, 0));
// mod_volumes[m_nam] = module_assembly;
m_vol.setVisAttributes(description.visAttributes(x_mod.visStr()));
// loop over detector components
auto comp_rmin = module_rmin;
for (ci.reset(); ci; ++ci, ++ncomponents) {
xml_comp_t x_comp = ci;
xml_comp_t x_pos = x_comp.position(false);
xml_comp_t x_rot = x_comp.rotation(false);
string c_nam = _toString(ncomponents, "component%d_") + _toString(n);
auto comp_thickness = x_comp.thickness();
auto comp_phi = getAttrOrDefault(x_comp, _Unicode(phi), module_phi);
auto comp_phi0 = getAttrOrDefault(x_comp, _Unicode(phi0), 0.0);
auto comp_length = getAttrOrDefault(x_comp, _Unicode(length), module_length);
Tube c_tube(comp_rmin, comp_rmin + comp_thickness, comp_length / 2, -comp_phi / 2.0 + comp_phi0,
comp_phi / 2.0 + comp_phi0);
Volume c_vol(c_nam, c_tube, description.material(x_comp.materialStr()));
PlacedVolume c_pv;
if (x_pos && x_rot) {
Position c_pos(x_pos.x(0), x_pos.y(0), x_pos.z(0));
RotationZYX c_rot(x_rot.z(0), x_rot.y(0), x_rot.x(0));
c_pv = m_vol.placeVolume(c_vol, Transform3D(c_rot, c_pos));
} else if (x_rot) {
c_pv = m_vol.placeVolume(c_vol, RotationZYX(x_rot.z(0), x_rot.y(0), x_rot.x(0)));
} else if (x_pos) {
c_pv = m_vol.placeVolume(c_vol, Position(x_pos.x(0), x_pos.y(0), x_pos.z(0)));
} else {
c_pv = m_vol.placeVolume(c_vol);
}
c_vol.setRegion(description, x_comp.regionStr());
c_vol.setLimitSet(description, x_comp.limitsStr());
c_vol.setVisAttributes(description, x_comp.visStr());
if (x_comp.isSensitive()) {
c_pv.addPhysVolID(_U(sensor), sensor_number++);
c_vol.setSensitiveDetector(sens);
sensitives[m_nam].push_back(c_pv);
}
comp_rmin = comp_rmin + comp_thickness;
}
if( x_mod.hasChild("frame")){
// build the carbon fiber frame around the gas volume
// two bars along z and two arches at the two ends
// TODO make the frame hollow
xml_comp_t m_frame = x_mod.child(_U(frame));
auto thickness = m_frame.thickness();
// get sensitive component rmin
auto m_rmin = module_rmin + m_frame.rmin();
// bars
Tube c_tubeL(m_rmin, m_rmin + thickness, module_length / 2, -module_phi / 2.0,
-module_phi / 2.0 + thickness/m_rmin);
Volume c_volL( m_nam + "_barL", c_tubeL, description.material(m_frame.materialStr()));
Tube c_tubeR(m_rmin, m_rmin + thickness, module_length / 2, module_phi / 2.0 - thickness/m_rmin,
module_phi / 2.0 );
Volume c_volR(m_nam + "_barR", c_tubeR, description.material(m_frame.materialStr()));
//arches
Tube c_tubeN(m_rmin, m_rmin + thickness, thickness / 2, - module_phi / 2.0 + thickness/m_rmin,
module_phi / 2.0 - thickness/m_rmin );
Volume c_volN(m_nam + "_archN", c_tubeN, description.material(m_frame.materialStr()));
c_volN.setVisAttributes( description, m_frame.visStr() );
PlacedVolume c_pv;
c_pv = m_vol.placeVolume(c_volL);
c_pv = m_vol.placeVolume(c_volR);
c_pv = m_vol.placeVolume(c_volN, Position(0,0, -module_length / 2 + thickness/2) );
c_pv = m_vol.placeVolume(c_volN, Position(0,0, module_length / 2 - thickness/2) );
}
}
}
return module_assembly;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment