diff --git a/athena.xml b/athena.xml index a4c3f87d95a196b3cd7c96d8c10d2e6820426ecf..25eff83ad9b360d30c06ee4fd18d639859677211 100644 --- a/athena.xml +++ b/athena.xml @@ -192,8 +192,9 @@ <!--include ref="compact/rwell_tracker_barrel.xml"/--> <include ref="compact/cb_DIRC.xml"/> - + <!-- When changing magnet, also select dimensions in definitions.xml. --> <include ref="compact/solenoid.xml"/> + <include ref="compact/ecal.xml"/> <include ref="compact/hcal.xml"/> <!--include ref="compact/ce_GEM.xml"/--> diff --git a/compact/definitions.xml b/compact/definitions.xml index 38960a5901ea9f4e6140dece1a590d8ab7aac2f7..829c323624190c5074824133f0cfc6f5dff15ec4 100644 --- a/compact/definitions.xml +++ b/compact/definitions.xml @@ -309,13 +309,23 @@ ========================== Solenoid Magnet Parameters ========================== + When changing here, also change the include file in athena.xml. </comment> + <comment>Solenoid option</comment> <constant name="Solenoid_length" value="3840.0*mm"/> <constant name="Solenoid_rmin" value="1600.0*mm"/> <constant name="Solenoid_thickness" value="640*mm"/> <constant name="Solenoid_offset" value="10*mm"/> + <comment>Helmholtz option</comment> + <comment> + <constant name="Solenoid_length" value="3840.0*mm"/> + <constant name="Solenoid_rmin" value="1665.0*mm"/> <!-- Larger inner bore radius --> + <constant name="Solenoid_thickness" value="640*mm"/> + <constant name="Solenoid_offset" value="10*mm"/> + </comment> + <constant name="Solenoid_rmax" value="Solenoid_rmin + Solenoid_thickness"/> <constant name="SolenoidBarrel_rmin" value="Solenoid_rmin"/> <constant name="SolenoidBarrel_length" value="Solenoid_length"/> diff --git a/compact/helmholtz.xml b/compact/helmholtz.xml new file mode 100644 index 0000000000000000000000000000000000000000..91afb0facee0d9b5a21b808da42dfa4d54627ac7 --- /dev/null +++ b/compact/helmholtz.xml @@ -0,0 +1,337 @@ +<?xml version="1.0" encoding="UTF-8"?> +<lccdd> + <define> + <comment> + -------------------------- + Solenoid Magnet Parameters + -------------------------- + </comment> + <comment>Solenoid Barrel Parameters</comment> + <constant name="SolenoidBarrelInnerVacuumVesselThickness" value=" 20.0 * mm"/> + <constant name="SolenoidBarrelInnerSecondMLILayerThickness" value=" 20.0 * mm"/> + <constant name="SolenoidBarrelInnerThermalShieldThickness" value=" 10.0 * mm"/> + <constant name="SolenoidBarrelInnerFirstMLILayerThickness" value=" 15.0 * mm"/> + <constant name="SolenoidBarrelInnerHeliumVesselThickness" value=" 20.0 * mm"/> + <constant name="SolenoidBarrelInnerHeliumThickness" value=" 0.0 * mm"/> <!-- modification --> + <constant name="SolenoidBarrelCoilFormerThickness" value=" 50.0 * mm"/> + <constant name="SolenoidBarrelCoilThickness" value="210.0 * mm"/> <!-- modification --> + <constant name="SolenoidBarrelBlockThickness" value="210.0 * mm"/> <!-- addition --> + <constant name="SolenoidBarrelCoilOverbindThickness" value="200.0 * mm"/> + <constant name="SolenoidBarrelOuterHeliumThickness" value=" 15.0 * mm"/> + <constant name="SolenoidBarrelOuterHeliumVesselThickness" value=" 10.0 * mm"/> + <constant name="SolenoidBarrelOuterFirstMLILayerThickness" value=" 15.0 * mm"/> + <constant name="SolenoidBarrelOuterThermalShieldThickness" value=" 10.0 * mm"/> + <constant name="SolenoidBarrelOuterSecondMLILayerThickness" value=" 20.0 * mm"/> + <constant name="SolenoidBarrelOuterVacuumVesselThickness" value=" 25.0 * mm"/> + + <constant name="SolenoidBarrelInnerVacuumVessel_zmax" value="1920.0 * mm"/> + <constant name="SolenoidBarrelInnerSecondMLILayer_zmax" value="1895.0 * mm"/> + <constant name="SolenoidBarrelInnerThermalShield_zmax" value="1875.0 * mm"/> + <constant name="SolenoidBarrelInnerFirstMLILayer_zmax" value="1855.0 * mm"/> + <constant name="SolenoidBarrelInnerHeliumVessel_zmax" value="1840.0 * mm"/> + <constant name="SolenoidBarrelInnerHelium_zmax" value="1820.0 * mm"/> + <constant name="SolenoidBarrelCoilFormer_zmax" value="1800.0 * mm"/> + <constant name="SolenoidBarrelCoil_zmax" value="1800.0 * mm"/> + <constant name="SolenoidBarrelBlock_zmax" value=" 545.0 * mm"/> <!-- addition --> + <constant name="SolenoidBarrelCoilOverbind_zmax" value="1800.0 * mm"/> + <constant name="SolenoidBarrelOuterHelium_zmax" value="1820.0 * mm"/> + <constant name="SolenoidBarrelOuterHeliumVessel_zmax" value="1840.0 * mm"/> + <constant name="SolenoidBarrelOuterFirstMLILayer_zmax" value="1855.0 * mm"/> + <constant name="SolenoidBarrelOuterThermalShield_zmax" value="1875.0 * mm"/> + <constant name="SolenoidBarrelOuterSecondMLILayer_zmax" value="1895.0 * mm"/> + <constant name="SolenoidBarrelOuterVacuumVessel_zmax" value="1920.0 * mm"/> + + <constant name="SolenoidBarrelInnerVacuumVessel_rmin" value="SolenoidBarrel_rmin"/> + <constant name="SolenoidBarrelInnerVacuumVessel_rmax" value="SolenoidBarrelInnerVacuumVessel_rmin + SolenoidBarrelInnerVacuumVesselThickness"/> + <constant name="SolenoidBarrelInnerSecondMLILayer_rmin" value="SolenoidBarrelInnerVacuumVessel_rmax"/> + <constant name="SolenoidBarrelInnerSecondMLILayer_rmax" value="SolenoidBarrelInnerSecondMLILayer_rmin + SolenoidBarrelInnerSecondMLILayerThickness"/> + <constant name="SolenoidBarrelInnerThermalShield_rmin" value="SolenoidBarrelInnerSecondMLILayer_rmax"/> + <constant name="SolenoidBarrelInnerThermalShield_rmax" value="SolenoidBarrelInnerThermalShield_rmin + SolenoidBarrelInnerThermalShieldThickness"/> + <constant name="SolenoidBarrelInnerFirstMLILayer_rmin" value="SolenoidBarrelInnerThermalShield_rmax"/> + <constant name="SolenoidBarrelInnerFirstMLILayer_rmax" value="SolenoidBarrelInnerFirstMLILayer_rmin + SolenoidBarrelInnerFirstMLILayerThickness"/> + <constant name="SolenoidBarrelInnerHeliumVessel_rmin" value="SolenoidBarrelInnerFirstMLILayer_rmax"/> + <constant name="SolenoidBarrelInnerHeliumVessel_rmax" value="SolenoidBarrelInnerHeliumVessel_rmin + SolenoidBarrelInnerHeliumVesselThickness"/> + <constant name="SolenoidBarrelInnerHelium_rmin" value="SolenoidBarrelInnerHeliumVessel_rmax"/> + <constant name="SolenoidBarrelInnerHelium_rmax" value="SolenoidBarrelInnerHelium_rmin + SolenoidBarrelInnerHeliumThickness"/> + <constant name="SolenoidBarrelCoilFormer_rmin" value="SolenoidBarrelInnerHelium_rmax"/> + <constant name="SolenoidBarrelCoilFormer_rmax" value="SolenoidBarrelCoilFormer_rmin + SolenoidBarrelCoilFormerThickness"/> + <constant name="SolenoidBarrelCoil_rmin" value="SolenoidBarrelCoilFormer_rmax"/> + <constant name="SolenoidBarrelCoil_rmax" value="SolenoidBarrelCoil_rmin + SolenoidBarrelCoilThickness"/> + <constant name="SolenoidBarrelBlock_rmin" value="SolenoidBarrelCoilFormer_rmax"/> <!-- addition --> + <constant name="SolenoidBarrelBlock_rmax" value="SolenoidBarrelBlock_rmin + SolenoidBarrelBlockThickness"/> <!-- addition --> + <constant name="SolenoidBarrelCoilOverbind_rmin" value="max(SolenoidBarrelCoil_rmax,SolenoidBarrelBlock_rmax)"/> <!-- modification --> + <constant name="SolenoidBarrelCoilOverbind_rmax" value="SolenoidBarrelCoilOverbind_rmin + SolenoidBarrelCoilOverbindThickness"/> + <constant name="SolenoidBarrelOuterHelium_rmin" value="SolenoidBarrelCoilOverbind_rmax"/> + <constant name="SolenoidBarrelOuterHelium_rmax" value="SolenoidBarrelOuterHelium_rmin + SolenoidBarrelOuterHeliumThickness"/> + <constant name="SolenoidBarrelOuterHeliumVessel_rmin" value="SolenoidBarrelOuterHelium_rmax"/> + <constant name="SolenoidBarrelOuterHeliumVessel_rmax" value="SolenoidBarrelOuterHeliumVessel_rmin + SolenoidBarrelOuterHeliumVesselThickness"/> + <constant name="SolenoidBarrelOuterFirstMLILayer_rmin" value="SolenoidBarrelOuterHeliumVessel_rmax"/> + <constant name="SolenoidBarrelOuterFirstMLILayer_rmax" value="SolenoidBarrelOuterFirstMLILayer_rmin + SolenoidBarrelOuterFirstMLILayerThickness"/> + <constant name="SolenoidBarrelOuterThermalShield_rmin" value="SolenoidBarrelOuterFirstMLILayer_rmax"/> + <constant name="SolenoidBarrelOuterThermalShield_rmax" value="SolenoidBarrelOuterThermalShield_rmin + SolenoidBarrelOuterThermalShieldThickness"/> + <constant name="SolenoidBarrelOuterSecondMLILayer_rmin" value="SolenoidBarrelOuterThermalShield_rmax"/> + <constant name="SolenoidBarrelOuterSecondMLILayer_rmax" value="SolenoidBarrelOuterSecondMLILayer_rmin + SolenoidBarrelOuterSecondMLILayerThickness"/> + <constant name="SolenoidBarrelOuterVacuumVessel_rmin" value="SolenoidBarrelOuterSecondMLILayer_rmax"/> + <constant name="SolenoidBarrelOuterVacuumVessel_rmax" value="SolenoidBarrelOuterVacuumVessel_rmin + SolenoidBarrelOuterVacuumVesselThickness"/> + + <constant name="SolenoidalFieldRadius" + value="(SolenoidBarrelCoil_rmin + SolenoidBarrelCoil_rmax) / 2.0"/> + + <comment> Solenoid Endcap </comment> + <comment>At the center, the end caps are outside the barrels</comment> + <constant name="SolenoidEndcapCoilEndSupport_rmin" value="SolenoidBarrelCoilFormer_rmin"/> + <constant name="SolenoidEndcapCoilEndSupport_rmax" value="SolenoidBarrelCoilOverbind_rmax"/> + <constant name="SolenoidEndcapHelium_rmin" value="SolenoidBarrelInnerHelium_rmin"/> + <constant name="SolenoidEndcapHelium_rmax" value="SolenoidBarrelOuterHelium_rmax"/> + <constant name="SolenoidEndcapHeliumVessel_rmin" value="SolenoidBarrelInnerHeliumVessel_rmin"/> + <constant name="SolenoidEndcapHeliumVessel_rmax" value="SolenoidBarrelOuterHeliumVessel_rmax"/> + <constant name="SolenoidEndcapFirstMLILayer_rmin" value="SolenoidBarrelInnerFirstMLILayer_rmin"/> + <constant name="SolenoidEndcapFirstMLILayer_rmax" value="SolenoidBarrelOuterFirstMLILayer_rmax"/> + <comment>Below here, the end caps are inside the barrels</comment> + <constant name="SolenoidEndcapThermalShield_rmin" value="SolenoidBarrelInnerThermalShield_rmax"/> + <constant name="SolenoidEndcapThermalShield_rmax" value="SolenoidBarrelOuterThermalShield_rmin"/> + <constant name="SolenoidEndcapSecondMLILayer_rmin" value="SolenoidBarrelInnerSecondMLILayer_rmax"/> + <constant name="SolenoidEndcapSecondMLILayer_rmax" value="SolenoidBarrelOuterSecondMLILayer_rmin"/> + <constant name="SolenoidEndcapVacuumVessel_rmin" value="SolenoidBarrelInnerVacuumVessel_rmax"/> + <constant name="SolenoidEndcapVacuumVessel_rmax" value="SolenoidBarrelOuterVacuumVessel_rmin"/> + + <constant name="SolenoidEndcapCoilEndSupport_zmin" value="1800.0 * mm"/> + <constant name="SolenoidEndcapHelium_zmin" value="1820.0 * mm"/> + <constant name="SolenoidEndcapHeliumVessel_zmin" value="1840.0 * mm"/> + <constant name="SolenoidEndcapFirstMLILayer_zmin" value="1855.0 * mm"/> + <constant name="SolenoidEndcapThermalShield_zmin" value="1865.0 * mm"/> + <constant name="SolenoidEndcapSecondMLILayer_zmin" value="1875.0 * mm"/> + <constant name="SolenoidEndcapVacuumVessel_zmin" value="1895.0 * mm"/> + <constant name="SolenoidEndcapCoilEndSupportThickness" value="20.0 * mm"/> + <constant name="SolenoidEndcapHeliumThickness" value="20.0 * mm"/> + <constant name="SolenoidEndcapHeliumVesselThickness" value="10.0 * mm"/> + <constant name="SolenoidEndcapFirstMLILayerThickness" value="10.0 * mm"/> + <constant name="SolenoidEndcapThermalShieldThickness" value="10.0 * mm"/> + <constant name="SolenoidEndcapSecondMLILayerThickness" value="20.0 * mm"/> + <constant name="SolenoidEndcapVacuumVesselThickness" value="25.0 * mm"/> + </define> + + <detectors> + <comment> + --------------- + Solenoid Magnet + --------------- + The solenoid superconducting magnet and surrounding cryostat and + yoke endcaps. + </comment> + <detector + id="Solenoid_ID" + name="SolenoidCoilBarrel" + type="refdet_SolenoidCoil" + insideTrackingVolume="false"> + <position x="0" y="0" z="Solenoid_offset"/> + <layer id="1" + inner_r="SolenoidBarrelInnerVacuumVessel_rmin" + outer_z="SolenoidBarrelInnerVacuumVessel_zmax" + vis="SolenoidCryostatVis"> + <slice material="Steel235" thickness="SolenoidBarrelInnerVacuumVesselThickness"/> + </layer> + <layer id="2" + inner_r="SolenoidBarrelInnerSecondMLILayer_rmin" + outer_z="SolenoidBarrelInnerSecondMLILayer_zmax" + vis="SolenoidCryostatVis"> + <slice material="Vacuum" thickness="SolenoidBarrelInnerSecondMLILayerThickness"/> + </layer> + <layer id="3" + inner_r="SolenoidBarrelInnerThermalShield_rmin" + outer_z="SolenoidBarrelInnerThermalShield_zmax" + vis="SolenoidCryostatVis"> + <slice material="Copper" thickness="SolenoidBarrelInnerThermalShieldThickness"/> + </layer> + <layer id="4" + inner_r="SolenoidBarrelInnerFirstMLILayer_rmin" + outer_z="SolenoidBarrelInnerFirstMLILayer_zmax" + vis="SolenoidCryostatVis"> + <slice material="Vacuum" thickness="SolenoidBarrelInnerFirstMLILayerThickness"/> + </layer> + <layer id="5" + inner_r="SolenoidBarrelInnerHeliumVessel_rmin" + outer_z="SolenoidBarrelInnerHeliumVessel_zmax" + vis="SolenoidCryostatVis"> + <slice material="Steel235" thickness="SolenoidBarrelInnerHeliumVesselThickness"/> + </layer> + + <layer id="6" + inner_r="SolenoidBarrelInnerHelium_rmin" + outer_z="SolenoidBarrelInnerHelium_zmax" + vis="SolenoidCryostatVis"> + <slice material="Helium" thickness="SolenoidBarrelInnerHeliumThickness"/> + </layer> + + <layer id="7" + inner_r="SolenoidBarrelCoilFormer_rmin" + outer_z="SolenoidBarrelCoilFormer_zmax" + vis="SolenoidCryostatVis"> + <slice material="Steel235" thickness="SolenoidBarrelCoilFormerThickness"/> + </layer> + <layer id="8" + inner_r="SolenoidBarrelCoil_rmin" + outer_z="max(SolenoidBarrelCoil_zmax,SolenoidBarrelBlock_zmax)" + vis="SolenoidCryostatVis"> + <slice material="Copper" thickness="SolenoidBarrelCoilThickness" outer_z="SolenoidBarrelCoil_zmax" inner_z="SolenoidBarrelBlock_zmax"/> + <slice material="Steel235" thickness="SolenoidBarrelBlockThickness" outer_z="SolenoidBarrelBlock_zmax"/> + </layer> + <layer id="9" + inner_r="SolenoidBarrelCoilOverbind_rmin" + outer_z="SolenoidBarrelCoilOverbind_zmax" + vis="SolenoidCryostatVis"> + <slice material="Steel235" thickness="SolenoidBarrelCoilOverbindThickness"/> + </layer> + + <layer id="10" + inner_r="SolenoidBarrelOuterHelium_rmin" + outer_z="SolenoidBarrelOuterHelium_zmax" + vis="SolenoidCryostatVis"> + <slice material="Helium" thickness="SolenoidBarrelOuterHeliumThickness"/> + </layer> + + <layer id="11" + inner_r="SolenoidBarrelOuterHeliumVessel_rmin" + outer_z="SolenoidBarrelOuterHeliumVessel_zmax" + vis="SolenoidCryostatVis"> + <slice material="Steel235" thickness="SolenoidBarrelOuterHeliumVesselThickness"/> + </layer> + <layer id="12" + inner_r="SolenoidBarrelOuterFirstMLILayer_rmin" + outer_z="SolenoidBarrelOuterFirstMLILayer_zmax" + vis="SolenoidCryostatVis"> + <slice material="Vacuum" thickness="SolenoidBarrelOuterFirstMLILayerThickness"/> + </layer> + <layer id="13" + inner_r="SolenoidBarrelOuterThermalShield_rmin" + outer_z="SolenoidBarrelOuterThermalShield_zmax" + vis="SolenoidCryostatVis"> + <slice material="Copper" thickness="SolenoidBarrelOuterThermalShieldThickness"/> + </layer> + <layer id="14" + inner_r="SolenoidBarrelOuterSecondMLILayer_rmin" + outer_z="SolenoidBarrelOuterSecondMLILayer_zmax" + vis="SolenoidCryostatVis"> + <slice material="Vacuum" thickness="SolenoidBarrelOuterSecondMLILayerThickness"/> + </layer> + <layer id="15" + inner_r="SolenoidBarrelOuterVacuumVessel_rmin" + outer_z="SolenoidBarrelOuterVacuumVessel_zmax" + vis="SolenoidCryostatVis"> + <slice material="Steel235" thickness="SolenoidBarrelOuterVacuumVesselThickness"/> + </layer> + </detector> + + <detector + id="Solenoid_ID" + name="SolenoidCoilEndcapP" + type="ref_SolenoidEndcap" + insideTrackingVolume="false" + reflect="false" + vis="SolenoidCryostatVis"> + <position x="0" y="0" z="Solenoid_offset"/> + <layer id="1" + inner_z="SolenoidEndcapCoilEndSupport_zmin" + inner_r="SolenoidEndcapCoilEndSupport_rmin" + outer_r="SolenoidEndcapCoilEndSupport_rmax"> + <slice material="Steel235" thickness="SolenoidEndcapCoilEndSupportThickness"/> + </layer> + <layer id="2" + inner_z="SolenoidEndcapHelium_zmin" + inner_r="SolenoidEndcapHelium_rmin" + outer_r="SolenoidEndcapHelium_rmax"> + <slice material="Helium" thickness="SolenoidEndcapHeliumThickness"/> + </layer> + <layer id="3" + inner_z="SolenoidEndcapHeliumVessel_zmin" + inner_r="SolenoidEndcapHeliumVessel_rmin" + outer_r="SolenoidEndcapHeliumVessel_rmax"> + <slice material="Steel235" thickness="SolenoidEndcapHeliumVesselThickness"/> + </layer> + <layer id="4" + inner_z="SolenoidEndcapFirstMLILayer_zmin" + inner_r="SolenoidEndcapFirstMLILayer_rmin" + outer_r="SolenoidEndcapFirstMLILayer_rmax"> + <slice material="Vacuum" thickness="SolenoidEndcapFirstMLILayerThickness"/> + </layer> + <layer id="5" + inner_z="SolenoidEndcapThermalShield_zmin" + inner_r="SolenoidEndcapThermalShield_rmin" + outer_r="SolenoidEndcapThermalShield_rmax"> + <slice material="Copper" thickness="SolenoidEndcapThermalShieldThickness"/> + </layer> + <layer id="6" + inner_z="SolenoidEndcapSecondMLILayer_zmin" + inner_r="SolenoidEndcapSecondMLILayer_rmin" + outer_r="SolenoidEndcapSecondMLILayer_rmax"> + <slice material="Vacuum" thickness="SolenoidEndcapSecondMLILayerThickness"/> + </layer> + <layer id="7" + inner_z="SolenoidEndcapVacuumVessel_zmin" + inner_r="SolenoidEndcapVacuumVessel_rmin" + outer_r="SolenoidEndcapVacuumVessel_rmax"> + <slice material="Steel235" thickness="SolenoidEndcapVacuumVesselThickness"/> + </layer> + </detector> + + <detector + id="Solenoid_ID" + name="SolenoidCoilEndcapN" + type="ref_SolenoidEndcap" + insideTrackingVolume="false" + reflect="true" + vis="SolenoidCryostatVis"> + <position x="0" y="0" z="Solenoid_offset"/> + <layer id="1" + inner_z="SolenoidEndcapCoilEndSupport_zmin" + inner_r="SolenoidEndcapCoilEndSupport_rmin" + outer_r="SolenoidEndcapCoilEndSupport_rmax"> + <slice material="Steel235" thickness="SolenoidEndcapCoilEndSupportThickness"/> + </layer> + <layer id="2" + inner_z="SolenoidEndcapHelium_zmin" + inner_r="SolenoidEndcapHelium_rmin" + outer_r="SolenoidEndcapHelium_rmax"> + <slice material="Helium" thickness="SolenoidEndcapHeliumThickness"/> + </layer> + <layer id="3" + inner_z="SolenoidEndcapHeliumVessel_zmin" + inner_r="SolenoidEndcapHeliumVessel_rmin" + outer_r="SolenoidEndcapHeliumVessel_rmax"> + <slice material="Steel235" thickness="SolenoidEndcapHeliumVesselThickness"/> + </layer> + <layer id="4" + inner_z="SolenoidEndcapFirstMLILayer_zmin" + inner_r="SolenoidEndcapFirstMLILayer_rmin" + outer_r="SolenoidEndcapFirstMLILayer_rmax"> + <slice material="Vacuum" thickness="SolenoidEndcapFirstMLILayerThickness"/> + </layer> + <layer id="5" + inner_z="SolenoidEndcapThermalShield_zmin" + inner_r="SolenoidEndcapThermalShield_rmin" + outer_r="SolenoidEndcapThermalShield_rmax"> + <slice material="Copper" thickness="SolenoidEndcapThermalShieldThickness"/> + </layer> + <layer id="6" + inner_z="SolenoidEndcapSecondMLILayer_zmin" + inner_r="SolenoidEndcapSecondMLILayer_rmin" + outer_r="SolenoidEndcapSecondMLILayer_rmax"> + <slice material="Vacuum" thickness="SolenoidEndcapSecondMLILayerThickness"/> + </layer> + <layer id="7" + inner_z="SolenoidEndcapVacuumVessel_zmin" + inner_r="SolenoidEndcapVacuumVessel_rmin" + outer_r="SolenoidEndcapVacuumVessel_rmax"> + <slice material="Steel235" thickness="SolenoidEndcapVacuumVesselThickness"/> + </layer> + </detector> + + </detectors> + + <fields> + <field type="solenoid" name="GlobalSolenoid" inner_field="3.0 * tesla" outer_field="0.5*tesla" + zmin="-SolenoidBarrelCoil_zmax" zmax="SolenoidBarrelCoil_zmax" + inner_radius="SolenoidalFieldRadius" outer_radius="SolenoidalFieldRadius+20*cm"/> + </fields> + +</lccdd> diff --git a/src/ref_SolenoidCoil_geo.cpp b/src/ref_SolenoidCoil_geo.cpp index d4cdb6ddba7d6da4edc60fe7ebd976ece64d4550..91b94a2b9b6968390ad837b96de5fbca32bd5586 100644 --- a/src/ref_SolenoidCoil_geo.cpp +++ b/src/ref_SolenoidCoil_geo.cpp @@ -33,34 +33,45 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s for(xml_coll_t i(x_det,_U(layer)); i; ++i, ++n) { xml_comp_t x_layer = i; string l_name = det_name+_toString(n,"_layer%d"); - double z = x_layer.outer_z(); + double outer_z = x_layer.outer_z(); double rmin = x_layer.inner_r(); double r = rmin; DetElement layer(sdet,_toString(n,"layer%d"),x_layer.id()); - Tube l_tub (rmin,2*rmin,z); + Tube l_tub (rmin,2*rmin,outer_z); Volume l_vol(l_name,l_tub,air); int im = 0; for(xml_coll_t j(x_layer,_U(slice)); j; ++j, ++im) { + // If slices are only given a thickness attribute, they are radially concentric slices + // If slices are given an inner_z attribute, they are longitudinal slices with equal rmin xml_comp_t x_slice = j; Material mat = description.material(x_slice.materialStr()); string s_name= l_name+_toString(im,"_slice%d"); double thickness = x_slice.thickness(); - Tube s_tub(r,r+thickness,z,2*M_PI); + double s_outer_z = dd4hep::getAttrOrDefault(x_slice, _Unicode(outer_z), outer_z); + double s_inner_z = dd4hep::getAttrOrDefault(x_slice, _Unicode(inner_z), 0.0*dd4hep::cm); + Tube s_tub(r,r+thickness,(s_inner_z > 0? 0.5*(s_outer_z-s_inner_z): s_outer_z),2*M_PI); Volume s_vol(s_name, s_tub, mat); - r += thickness; if ( x_slice.isSensitive() ) { sens.setType("tracker"); s_vol.setSensitiveDetector(sens); } // Set Attributes s_vol.setAttributes(description,x_slice.regionStr(),x_slice.limitsStr(),x_slice.visStr()); - pv = l_vol.placeVolume(s_vol); + if (s_inner_z > 0) { + // Place off-center volumes twice + Position s_pos(0, 0, 0.5*(s_outer_z+s_inner_z)); + pv = l_vol.placeVolume(s_vol, -s_pos); + pv = l_vol.placeVolume(s_vol, +s_pos); + } else { + r += thickness; + pv = l_vol.placeVolume(s_vol); + } // Slices have no extra id. Take the ID of the layer! pv.addPhysVolID("slice",im); } - l_tub.setDimensions(rmin,r,z); + l_tub.setDimensions(rmin,r,outer_z); //cout << l_name << " " << rmin << " " << r << " " << z << endl; l_vol.setVisAttributes(description,x_layer.visStr());