Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • EIC/detectors/athena
  • zwzhao/athena
  • FernandoTA/athena
  • palspeic/athena
4 results
Show changes
Showing
with 1417 additions and 325 deletions
<lccdd>
<define>
<constant name="CrystalModule_sx" value="20.00*mm"/>
<constant name="CrystalModule_sy" value="20.00*mm"/>
<constant name="CrystalModule_sz" value="200.00*mm"/>
<constant name="CrystalModule_wrap" value="0.50*mm"/>
<constant name="GlassModule_sx" value="40.00*mm"/>
<constant name="GlassModule_sy" value="40.00*mm"/>
<constant name="GlassModule_sz" value="400.00*mm"/>
<constant name="GlassModule_wrap" value="1.00*mm"/>
<constant name="CrystalModule_z0" value="10.*cm"/>
<constant name="GlassModule_z0" value="0.0*cm"/>
<constant name="EcalEndcapN_z0" value="-EcalEndcapN_zmin-max(CrystalModule_sz,GlassModule_sz)/2."/>
<constant name="CrystalModule_dx" value="CrystalModule_sx + CrystalModule_wrap"/>
<constant name="CrystalModule_dy" value="CrystalModule_sy + CrystalModule_wrap"/>
<constant name="GlassModule_dx" value="GlassModule_sx + GlassModule_wrap"/>
<constant name="GlassModule_dy" value="GlassModule_sy + GlassModule_wrap"/>
</define>
<detectors>
<comment> </comment>
<documentation level="10">
#### Backwards Endcap EM Calorimeter
Backwards Endcap EM Calorimeter, placements generated by script
</documentation>
<detector id="ECalEndcapN_ID" name="EcalEndcapN" type="HomogeneousCalorimeter" readout="EcalEndcapNHits">
<position x="0" y="0" z="EcalEndcapN_z0"/>
<rotation x="0" y="0" z="0"/>
<placements>
<lines sector="1" mirrorx="true" mirrory="true">
<module sizex="CrystalModule_sx" sizey="CrystalModule_sy" sizez="CrystalModule_sz" material="PbWO4" vis="EcalEndcapNModuleVis"/>
<wrapper thickness="CrystalModule_wrap" material="Epoxy" vis="InvisibleWithDaughters"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*1/2." z="CrystalModule_z0" begin="5" nmods="21"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*3/2." z="CrystalModule_z0" begin="5" nmods="21"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*5/2." z="CrystalModule_z0" begin="5" nmods="21"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*7/2." z="CrystalModule_z0" begin="4" nmods="22"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*9/2." z="CrystalModule_z0" begin="3" nmods="23"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*11/2." z="CrystalModule_z0" begin="0" nmods="26"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*13/2." z="CrystalModule_z0" begin="0" nmods="24"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*15/2." z="CrystalModule_z0" begin="0" nmods="24"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*17/2." z="CrystalModule_z0" begin="0" nmods="24"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*19/2." z="CrystalModule_z0" begin="0" nmods="24"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*21/2." z="CrystalModule_z0" begin="0" nmods="24"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*23/2." z="CrystalModule_z0" begin="0" nmods="24"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*25/2." z="CrystalModule_z0" begin="0" nmods="22"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*27/2." z="CrystalModule_z0" begin="0" nmods="22"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*29/2." z="CrystalModule_z0" begin="0" nmods="20"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*31/2." z="CrystalModule_z0" begin="0" nmods="20"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*33/2." z="CrystalModule_z0" begin="0" nmods="18"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*35/2." z="CrystalModule_z0" begin="0" nmods="18"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*37/2." z="CrystalModule_z0" begin="0" nmods="16"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*39/2." z="CrystalModule_z0" begin="0" nmods="16"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*41/2." z="CrystalModule_z0" begin="0" nmods="14"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*43/2." z="CrystalModule_z0" begin="0" nmods="14"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*45/2." z="CrystalModule_z0" begin="0" nmods="12"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*47/2." z="CrystalModule_z0" begin="0" nmods="12"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*49/2." z="CrystalModule_z0" begin="0" nmods="6"/>
<line axis="x" x="CrystalModule_dx/2." y="CrystalModule_dy*51/2." z="CrystalModule_z0" begin="0" nmods="6"/>
</lines>
<lines sector="2" mirrorx="true" mirrory="true">
<module sizex="GlassModule_sx" sizey="GlassModule_sy" sizez="GlassModule_sz" material="PbGlass" vis="EcalEndcapNModuleVis"/>
<wrapper thickness="GlassModule_wrap" material="Epoxy" vis="InvisibleWithDaughters"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*1/2." z="GlassModule_z0" begin="13" nmods="10"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*3/2." z="GlassModule_z0" begin="13" nmods="10"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*5/2." z="GlassModule_z0" begin="13" nmods="10"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*7/2." z="GlassModule_z0" begin="12" nmods="10"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*9/2." z="GlassModule_z0" begin="12" nmods="10"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*11/2." z="GlassModule_z0" begin="12" nmods="10"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*13/2." z="GlassModule_z0" begin="11" nmods="11"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*15/2." z="GlassModule_z0" begin="10" nmods="11"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*17/2." z="GlassModule_z0" begin="9" nmods="12"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*19/2." z="GlassModule_z0" begin="8" nmods="13"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*21/2." z="GlassModule_z0" begin="7" nmods="13"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*23/2." z="GlassModule_z0" begin="6" nmods="14"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*25/2." z="GlassModule_z0" begin="3" nmods="16"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*27/2." z="GlassModule_z0" begin="0" nmods="18"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*29/2." z="GlassModule_z0" begin="0" nmods="18"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*31/2." z="GlassModule_z0" begin="0" nmods="16"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*33/2." z="GlassModule_z0" begin="0" nmods="16"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*35/2." z="GlassModule_z0" begin="0" nmods="14"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*37/2." z="GlassModule_z0" begin="0" nmods="13"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*39/2." z="GlassModule_z0" begin="0" nmods="11"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*41/2." z="GlassModule_z0" begin="0" nmods="10"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*43/2." z="GlassModule_z0" begin="0" nmods="7"/>
<line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*45/2." z="GlassModule_z0" begin="0" nmods="3"/>
</lines>
</placements>
</detector>
</detectors>
<readouts>
<comment>Effectively no segmentation, the segmentation is used to provide cell dimension info</comment>
<readout name="EcalEndcapNHits">
<segmentation type="MultiSegmentation" key="sector">
<segmentation name="CrystalSeg" key_value="1" type="CartesianGridXY" grid_size_x="CrystalModule_dx" grid_size_y="CrystalModule_dy"/>
<segmentation name="GlassSeg" key_value="2" type="CartesianGridXY" grid_size_x="GlassModule_dx" grid_size_y="GlassModule_dy"/>
</segmentation>
<id>system:8,sector:4,module:20,x:32:-16,y:-16</id>
</readout>
</readouts>
</lccdd>
<lccdd>
<display>
<vis name="EcalBarrelEnvelope_vis" alpha="0.9" r="0.99" g="0.5" b="0" showDaughters="true" visible="false" />
<vis name="EcalBarrelStave_vis" alpha="0.9" r="0.99" g="0.5" b="0" showDaughters="true" visible="false" />
<vis name="EcalBarrelFiberLayerVis" alpha="1.0" r="102/256" g="102/256" b="102/256" showDaughters="false" visible="true" />
<vis name="EcalBarrelFiberVis" alpha="1.0" r="0/256" g="130/256" b="202/256" showDaughters="false" visible="false" />
</display>
<define>
<comment>
---------------------------------------
EM Calorimeter Parameters with AstroPix
---------------------------------------
</comment>
<constant name="EcalBarrel_Support_thickness" value="5*cm"/>
<constant name="EcalBarrel_SiliconThickness" value="500*um"/>
<constant name="EcalBarrel_ElectronicsThickness" value="150*um"/>
<constant name="EcalBarrel_CopperThickness" value="100*um"/>
<constant name="EcalBarrel_KaptonThickness" value="200*um"/>
<constant name="EcalBarrel_EpoxyThickness" value="100*um"/>
<constant name="EcalBarrel_CarbonThickness" value="0.5*mm"/>
<constant name="EcalBarrel_CarbonSpacerWidth" value="4*mm"/>
<constant name="EcalBarrel_LayerSpacing" value="6.0*mm"/>
<constant name="EcalBarrel_FiberRadius" value="0.5*mm"/>
<constant name="EcalBarrel_FiberXSpacing" value="1.34*mm"/>
<constant name="EcalBarrel_FiberZSpacing" value="1.22*mm"/>
<comment>
For Pb/SiFi (GlueX): X0 ~ 1.45 cm
For W/SiFi (sPHENIX): X0 ~ 0.7 cm (but different fiber orientation)
</comment>
<constant name="EcalBarrel_RadiatorThickness" value="EcalBarrel_FiberZSpacing*12"/>
<constant name="EcalBarrel_ModRepeat" value="CaloSides"/>
<constant name="EcalBarrel_ModLength" value="0.5*m"/>
<constant name="EcalBarrel_ModWidth" value="0.5*m"/>
<constant name="EcalBarrel_AvailThickness" value="EcalBarrelEnvelope_thickness-EcalBarrel_Support_thickness"/>
<constant name="EcalBarrel_ImagingLayerThickness"
value="EcalBarrel_SiliconThickness
+ EcalBarrel_ElectronicsThickness
+ EcalBarrel_CopperThickness
+ EcalBarrel_KaptonThickness
+ EcalBarrel_EpoxyThickness
+ EcalBarrel_CarbonThickness
+ EcalBarrel_LayerSpacing
+ EcalBarrel_RadiatorThickness"/>
<constant name="EcalBarrelImagingLayers_max" value="6"/>
<constant name="EcalBarrelImagingLayers" value="min(EcalBarrelImagingLayers_max, floor(EcalBarrel_AvailThickness/EcalBarrel_ImagingLayerThickness))"/>
<constant name="EcalBarrel_FiberLayerThickness_max" value="max(0, EcalBarrel_AvailThickness-(EcalBarrelImagingLayers*EcalBarrel_ImagingLayerThickness-EcalBarrel_RadiatorThickness))"/>
<constant name="EcalBarrel_FiberLayerThickness" value="EcalBarrel_FiberZSpacing*12*15"/>
</define>
<limits>
</limits>
<regions>
</regions>
<display>
</display>
<detectors>
<comment>
---------------------
Barrel EM Calorimeter
---------------------
A layered EM calorimeter with tungsten and silicon (AstroPix)
</comment>
<detector
id="ECalBarrel_ID"
name="EcalBarrel"
type="athena_EcalBarrelHybrid"
readout="EcalBarrelHits"
calorimeterType="EM_BARREL"
vis="EcalBarrelEnvelope_vis"
offset="EcalBarrel_offset">
<dimensions numsides="EcalBarrel_ModRepeat"
rmin="EcalBarrel_rmin"
z="EcalBarrel_length"/>
<staves vis="EcalBarrelStave_vis">
<support inside="true" material="Steel235" vis="AnlOrange"
thickness="EcalBarrel_Support_thickness"
n_beams="3" grid_size="25.0*cm" >
</support>
</staves>
<comment>
---------------------------
Imaging layers with silicon
---------------------------
</comment>
<layer repeat="EcalBarrelImagingLayers-1" vis="AnlBlue">
<slice material="Silicon" thickness="EcalBarrel_SiliconThickness" sensitive="yes" limits="cal_limits" vis="AnlGray"/>
<slice material="Silicon" thickness="EcalBarrel_ElectronicsThickness" vis="AnlGold"/>
<slice material="Copper" thickness="EcalBarrel_CopperThickness" vis="AnlGray"/>
<slice material="Kapton" thickness="EcalBarrel_KaptonThickness" vis="AnlGold"/>
<slice material="Epoxy" thickness="EcalBarrel_EpoxyThickness" vis="AnlGray"/>
<slice material="CarbonFiber" thickness="EcalBarrel_CarbonThickness" vis="AnlGold"/>
<slice material="Lead" thickness="EcalBarrel_RadiatorThickness" vis="EcalBarrelFibersVis">
<fiber material="PlasticScint"
sensitive="yes"
vis="EcalBarrelFiberVis"
radius="EcalBarrel_FiberRadius"
spacing_x="EcalBarrel_FiberXSpacing"
spacing_z="EcalBarrel_FiberZSpacing"/>
</slice>
<slice material="CarbonFiber" thickness="EcalBarrel_CarbonThickness" vis="AnlGold"/>
<slice material="Air" thickness="EcalBarrel_LayerSpacing" vis="AnlGold"/>
</layer>
<comment>
---------------------------
Last imiging layer with thick scint fiber layer
---------------------------
</comment>
<layer repeat="1" vis="AnlBlue">
<slice material="Silicon" thickness="EcalBarrel_SiliconThickness" sensitive="yes" limits="cal_limits" vis="AnlGray"/>
<slice material="Silicon" thickness="EcalBarrel_ElectronicsThickness" vis="AnlGold"/>
<slice material="Copper" thickness="EcalBarrel_CopperThickness" vis="AnlGray"/>
<slice material="Kapton" thickness="EcalBarrel_KaptonThickness" vis="AnlGold"/>
<slice material="Epoxy" thickness="EcalBarrel_EpoxyThickness" vis="AnlGray"/>
<slice material="CarbonFiber" thickness="EcalBarrel_CarbonThickness" vis="AnlGold"/>
<slice material="Lead" thickness="min(EcalBarrel_FiberLayerThickness_max, EcalBarrel_FiberLayerThickness)"
vis="EcalBarrelFiberLayerVis">
<fiber material="PlasticScint"
sensitive="yes"
vis="EcalBarrelFiberVis"
radius="EcalBarrel_FiberRadius"
spacing_x="EcalBarrel_FiberXSpacing"
spacing_z="EcalBarrel_FiberZSpacing">
</fiber>
</slice>
</layer>
</detector>
</detectors>
<readouts>
<readout name="EcalBarrelHits">
<segmentation type="MultiSegmentation" key="fiber">
<segmentation name="LongiSeg" key_value="0x0" type="CartesianGridXY" grid_size_x="0.5*mm" grid_size_y="0.5*mm"/>
<segmentation name="RadialSeg" key_min="0x1" key_max="0xffffffff" type="NoSegmentation"/>
</segmentation>
<hits_collections>
<hits_collection name="EcalBarrelHits" key="fiber" key_value="0x0"/>
<hits_collection name="EcalBarrelScFiHits" key="fiber" key_min="0x1" key_max="0xffffffff"/>
</hits_collections>
<id>system:8,module:5,layer:4,slice:4,grid:9,fiber:9,x:39:-11,y:-14</id>
</readout>
</readouts>
</lccdd>
<lccdd>
<define>
</define>
<limits>
</limits>
<regions>
</regions>
<!-- Common Generic visualization attributes -->
<comment>Common Generic visualization attributes</comment>
<display>
</display>
<detectors>
<comment>
------------------------------------------
Forward (Positive Z) Endcap EM Calorimeter
------------------------------------------
An EM calorimeter with shashlik hexagon modules
</comment>
<detector id="ECalEndcapP_ID"
name="EcalEndcapP"
type="ShashlikCalorimeter"
readout="EcalEndcapPHits">
<position x="0" y="0" z="EcalEndcapP_zmin"/>
<placements>
<disk rmin="EcalEndcapP_rmin" rmax = "EcalEndcapP_rmax" sector="1">
<wrapper thickness="2*mm" material="Epoxy" vis="WhiteVis"/>
<module shape="square" side_length="50*mm" vis="EcalEndcapVis">
<layer repeat="EcalEndcapPLayer1_NRepeat" vis="EcalEndcapVis">
<slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
<slice material="Copper" thickness="EcalCopperThickness"/>
<slice material="Kapton" thickness="EcalKaptonThickness"/>
<slice material="Air" thickness="EcalAir1Thickness"/>
</layer>
<layer repeat="EcalEndcapPLayer2_NRepeat">
<slice material="TungstenDens24" thickness="EcalThinTungstenThickness"/>
<slice material="Air" thickness="EcalAir2Thickness"/>
<slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
<slice material="Copper" thickness="EcalCopperThickness"/>
<slice material="Kapton" thickness="EcalKaptonThickness"/>
<slice material="Air" thickness="EcalAir1Thickness"/>
</layer>
<layer repeat="EcalEndcapPLayer3_NRepeat">
<slice material="TungstenDens24" thickness="EcalThickTungstenThickness"/>
<slice material="Air" thickness="EcalAir2Thickness"/>
<slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
<slice material="Copper" thickness="EcalCopperThickness"/>
<slice material="Kapton" thickness="EcalKaptonThickness"/>
<slice material="Air" thickness="EcalAir1Thickness"/>
</layer>
</module>
</disk>
</placements>
</detector>
</detectors>
<!-- Definition of the readout segmentation/definition -->
<readouts>
<readout name="EcalEndcapPHits">
<segmentation type="NoSegmentation"/>
<id>system:8,sector:4,module:24,layer:8,slice:8</id>
</readout>
</readouts>
<plugins>
</plugins>
</lccdd>
<?xml version="1.0" encoding="UTF-8"?>
<lccdd>
<define>
<constant name="ForwardRICH_zmin" value="BarrelTracking_length/2.0 + ForwardTracking_length "/>
<constant name="ForwardRICH_rmin" value="ForwardPID_rmin1"/>
<constant name="ForwardRICH_rmax0" value="TrackerBarrel_rmax"/>
<constant name="ForwardRICH_rmax1" value="EcalBarrel_rmin"/>
<constant name="ForwardRICH_rmax2" value="Solenoid_rmin-6*cm"/>
<constant name="ForwardRICHDepth" value="0.9*m"/>
<constant name="ForwardRICH_sensor_rmin" value="ForwardRICH_rmax1 - 40.*cm"/>
<constant name="ForwardRICH_sensor_rmax" value="ForwardRICH_rmax2"/>
</define>
<detectors>
<detector
id="ForwardRICH_ID"
name="GaseousRICH"
type="athena_GaseousRICH"
readout="ForwardRICHHits"
gas="N2cherenkov"
vis="RICHVis">
<dimensions
z0="ForwardRICH_zmin"
snout_length="ForwardRICH_length - ForwardRICHDepth"
length="ForwardRICH_length"
rmin="ForwardRICH_rmin"
rmax0="ForwardRICH_rmax0"
rmax1="ForwardRICH_rmax1"
rmax2="ForwardRICH_rmax2"/>
<mirrors thickness="1*mm" material="PyrexGlass" vis="GrayVis">
<position z="ForwardRICH_length - 13*cm"/>
<mirror curve="300*cm" rmin="ForwardRICH_rmin+5*mm" rmax="ForwardRICH_rmax1" phiw="58*degree"
rotz="0*degree" roty="-15*degree" rotx="0"/>
<mirror curve="300*cm" rmin="ForwardRICH_rmin+5*mm" rmax="ForwardRICH_rmax1" phiw="58*degree"
rotz="60*degree" roty="-15*degree" rotx="0"/>
<mirror curve="300*cm" rmin="ForwardRICH_rmin+5*mm" rmax="ForwardRICH_rmax1" phiw="58*degree"
rotz="120*degree" roty="-15*degree" rotx="0"/>
<mirror curve="300*cm" rmin="ForwardRICH_rmin+5*mm" rmax="ForwardRICH_rmax1" phiw="58*degree"
rotz="180*degree" roty="-15*degree" rotx="0"/>
<mirror curve="300*cm" rmin="ForwardRICH_rmin+5*mm" rmax="ForwardRICH_rmax1" phiw="58*degree"
rotz="240*degree" roty="-15*degree" rotx="0"/>
<mirror curve="300*cm" rmin="ForwardRICH_rmin+5*mm" rmax="ForwardRICH_rmax1" phiw="58*degree"
rotz="300*degree" roty="-15*degree" rotx="0"/>
</mirrors>
<sensors>
<module sx="10*cm" sy="10*cm" sz="1.0*cm" gap="0.2*cm" material="Quartz" vis="AnlGold"/>
<comment>A thin optical material to accept optical photon in simulation</comment>
<optical material="AirOptical" thickness="0.1*mm"/>
<position z="8.*cm"/>
<sector rmin="ForwardRICH_sensor_rmin" rmax="ForwardRICH_sensor_rmax" phiw="58*degree"
rotz="0*degree" roty="-15*degree" rotx="0"/>
<sector rmin="ForwardRICH_sensor_rmin" rmax="ForwardRICH_sensor_rmax" phiw="58*degree"
rotz="60*degree" roty="-15*degree" rotx="0"/>
<sector rmin="ForwardRICH_sensor_rmin" rmax="ForwardRICH_sensor_rmax" phiw="58*degree"
rotz="120*degree" roty="-15*degree" rotx="0"/>
<sector rmin="ForwardRICH_sensor_rmin" rmax="ForwardRICH_sensor_rmax" phiw="58*degree"
rotz="180*degree" roty="-15*degree" rotx="0"/>
<sector rmin="ForwardRICH_sensor_rmin" rmax="ForwardRICH_sensor_rmax" phiw="58*degree"
rotz="240*degree" roty="-15*degree" rotx="0"/>
<sector rmin="ForwardRICH_sensor_rmin" rmax="ForwardRICH_sensor_rmax" phiw="58*degree"
rotz="300*degree" roty="-15*degree" rotx="0"/>
</sensors>
</detector>
</detectors>
<readouts>
<readout name="ForwardRICHHits">
<segmentation type="CartesianGridXY" grid_size_x="3*mm" grid_size_y="3*mm" />
<id>system:8,sector:8,module:16,x:32:-16,y:-16</id>
</readout>
</readouts>
</lccdd>
...@@ -26,12 +26,10 @@ ...@@ -26,12 +26,10 @@
</display> </display>
<detectors> <detectors>
<detector id="MMTrackerBarrel_ID" name="MMTrackerBarrel" type="refdet_MMTrackerBarrel" readout="MMTrackerBarrelHits"> <detector id="MMTrackerBarrel_ID" name="MMTrackerBarrel" type="athena_MMTrackerBarrel" readout="MMTrackerBarrelHits">
<module name="Module1" vis="AnlGold"> <module name="Module1" vis="AnlGold">
<module_envelope <module_envelope rmin="TrackerBarrel_rmax" length="MMTrackerBarrelLayer1_length" thickness="MMTrackerBarrel_delta"
rmin="TrackerBarrel_rmax" phi="90*degree" />
length="MMTrackerBarrelLayer1_length"
thickness="MMTrackerBarrel_delta" phi="90*degree" />
<module_component thickness="1.0*mm" material="PEEK" sensitive="false"> <module_component thickness="1.0*mm" material="PEEK" sensitive="false">
<position x="0" /> <position x="0" />
</module_component> </module_component>
......
<lccdd>
<comment> MRICH (alternative design) </comment>
<define>
<constant name="MRICH_rmin" value="10*cm"/>
<constant name="MRICH_rmax" value="BackwardPIDRegion_rmax"/>
<constant name="MRICH_length" value="BackwardPIDRegion_length"/>
<constant name="MRICH_zmin" value="BackwardPIDRegion_zmin"/>
<constant name="MRICHAerogel_thickness" value="30.0*mm"/>
<constant name="MRICHAerogel_width" value="126.5*mm"/>
<constant name="MRICHFoam_thickness" value="2*mm"/>
<constant name="MRICHFresnelLens_thickness" value="0.06*inch"/>
<constant name="MRICHAerogelLensGap_thickness" value="2*mm"/>
<constant name="MRICHPhotoDet_thickness" value="1.5*mm"/>
<constant name="MRICHPhotoDet_length" value="48.5*mm"/>
<constant name="MRICHGlassWindow_width" value="103.5*mm"/>
<constant name="MRICHGlassPhotoDet_thickness" value="5.0*mm"/>
<constant name="MRICHPhotoDetMCPlate_thickness" value="0.3*mm"/> <!-- FIXME: should be 1.2*mm with PyrexGlass25 -->
<constant name="MRICHPhotoDetAnode_thickness" value="3.8*mm"/>
<constant name="MRICHPhotoDetPCB_thickness" value="2.0*mm"/>
<constant name="MRICHPhotoDetCopper_thickness" value="0.1*mm"/>
<constant name="MRICHPhotoDetKapton_thickness" value="0.2*mm"/>
<constant name="MRICHRearExtraSpace_thickness" value="0.3*mm"/>
<constant name="MRICHLensPhotoDet_length" value="136.4*mm"/>
<constant name="MRICHFresnelLensEffectiveDiameter" value="6.0*inch"/>
<constant name="MRICHFresnelLensGroove_pitch" value="inch/125"/>
<constant name="MRICHCarbonFrame_thickness" value="1.0*mm"/>
<constant name="MRICHCarbonFrame_width" value="MRICHAerogel_width+2.0*MRICHFoam_thickness + 2.0*MRICHCarbonFrame_thickness"/>
<constant name="MRICHModules_nx" value="floor((MRICH_rmax-MRICH_rmin)/MRICHCarbonFrame_width)"/>
<constant name="MRICHModules_ny" value="floor((MRICH_rmax-MRICH_rmin)/MRICHCarbonFrame_width)"/>
<constant name="MRICHCarbonFrame_length"
value="MRICHAerogel_thickness
+ 2.0*MRICHCarbonFrame_thickness
+ 2.0*MRICHFoam_thickness
+ MRICHAerogelLensGap_thickness
+ MRICHFresnelLens_thickness
+ MRICHLensPhotoDet_length
+ MRICHGlassPhotoDet_thickness
+ 2.0*MRICHPhotoDetMCPlate_thickness
+ MRICHPhotoDetAnode_thickness
+ MRICHPhotoDetPCB_thickness
+ MRICHPhotoDetCopper_thickness
+ MRICHPhotoDetKapton_thickness
+ MRICHRearExtraSpace_thickness "/>
</define>
<limits>
</limits>
<regions>
</regions>
<display>
</display>
<detectors>
<detector id="MRICH_ID" name="MRICH" type="athena_MRICH"
readout="MRICHHits"
reflect="true"
projective="false"
vis="InvisibleWithDaughters"
material="Air">
<dimensions rmin="MRICH_rmin" rmax="MRICH_rmax" length="abs(MRICH_length)" zmin="MRICH_zmin"/>
<envelope thickness="MRICHCarbonFrame_thickness" material="CarbonFiber"/>
<module name="MRICH_module1"
vis="InvisibleWithDaughters"
width="MRICHCarbonFrame_width"
height="MRICHCarbonFrame_width"
length="MRICHCarbonFrame_length">
<aerogel vis="MRICH_aerogel_vis"
length="MRICHAerogel_thickness"
width="MRICHAerogel_width"
material="AerogelOptical">
<frame vis="MRICH_frame_vis" thickness="MRICHFoam_thickness" material="PolystyreneFoam" />
</aerogel>
<lens vis="MRICH_lens_vis" thickness="MRICHFresnelLens_thickness"
pitch="MRICHFresnelLensGroove_pitch" focal_length="6.0*inch"
effective_diameter="MRICHFresnelLensEffectiveDiameter"
width="MRICHAerogel_width"
material="AcrylicOptical"/>
<space thickness="MRICHLensPhotoDet_length"/>
<photodet width="MRICHGlassWindow_width" thickness="MRICHGlassPhotoDet_thickness" material="PyrexGlassOptical">
<sensor nx="2" ny="2" thickness="MRICHPhotoDet_thickness" width="MRICHPhotoDet_length" material="SiliconOxide"/>
<layer thickness="MRICHPhotoDetMCPlate_thickness" material="PyrexGlass"/> <!-- FIXME: should be PyrexGlass25 with 1.2*mm thickness -->
<layer thickness="MRICHPhotoDetMCPlate_thickness" material="PyrexGlass"/> <!-- FIXME: should be PyrexGlass25 with 1.2*mm thickness -->
<layer thickness="MRICHPhotoDetAnode_thickness" material="AluminumOxide"/>
<layer thickness="MRICHPhotoDetPCB_thickness" material="Fr4"/>
<layer thickness="MRICHPhotoDetCopper_thickness" material="Copper"/>
<layer thickness="MRICHPhotoDetKapton_thickness" material="Kapton"/>
</photodet>
</module>
</detector>
</detectors>
<readouts>
<readout name="MRICHHits">
<segmentation type="CartesianGridXY" grid_size_x="3*mm" grid_size_y="3*mm" />
<id>system:8,module:14,sensor:8,x:32:-16,y:-16</id>
</readout>
</readouts>
<!--Globals>
<Parameter Name="mrichInfo" Value="mrichmod/mrich_1_geoparams-0-0-4294967295-1527211159.xml"/>
</Globals-->
</lccdd>
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
</display> </display>
<detectors> <detectors>
<detector id="RWellTrackerBarrel_ID" name="RWellTrackerBarrel" type="refdet_RWellTrackerBarrel" readout="RWellTrackerBarrelHits"> <detector id="RWellTrackerBarrel_ID" name="RWellTrackerBarrel" type="athena_RWellTrackerBarrel" readout="RWellTrackerBarrelHits">
<module name="Module1" vis="GreenVis"> <module name="Module1" vis="GreenVis">
<module_envelope <module_envelope
......
<lccdd>
<display>
</display>
<define>
</define>
<documentation level="10">
### Mixed tracking configuration
This configuration needs attention!
</documentation>
<include ref="rwell_tracker_barrel.xml">
<!--include ref="compact/ce_GEM.xml"/-->
<!--include ref="compact/mm_tracker_barrel.xml"/-->
<!--include ref="compact/cb_VTX_Barrel.xml"/-->
<!--include ref="compact/gem_tracker_endcap.xml"/-->
</lccdd>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<lccdd> <lccdd>
<define> <define>
<comment>
THis value probably can live in the file that includes this one.
</comment>
<constant name="ITS3Thickness" value="40*um"/>
<constant name="VertexCarbon_thickness" value="0.12*mm"/>
<constant name="VertexEndcapAluminumThickness" value="0.15*mm"/>
<constant name="VertexTrackerRadius1" value="46*mm"/> <documentation>
<constant name="VertexTrackerRadius2" value="54*mm"/> #### Vertex Tracker Barrel Parameters
<constant name="VertexTrackerRadius3" value="62*mm"/>
<constant name="VertexTrackerRadius4" value="70*mm"/>
<constant name="VertexTrackerRadius5" value="80*mm"/>
<constant name="VertexTrackerRadius6" value="95*mm"/>
<constant name="VertexTrackerRadius7" value="110*mm"/>
<constant name="VertexTrackerRadius8" value="125*mm"/>
<constant name="VertexTrackerNModules1" value="14"/>
<constant name="VertexTrackerNModules2" value="18"/>
<constant name="VertexTrackerNModules3" value="22"/>
<constant name="VertexTrackerNModules4" value="24"/>
<constant name="VertexTrackerNModules5" value="28"/>
<constant name="VertexTrackerNModules6" value="32"/>
<constant name="VertexTrackerNModules7" value="36"/>
<constant name="VertexTrackerNModules8" value="40"/>
<!--
<constant name="VertexTrackerEndcapP_rmin" value="VertexTrackerInnerRadius"/>
<constant name="VertexTrackerEndcapP_rmax" value="VertexTrackerOuterRadius"/>
<constant name="VertexTrackerEndcapP_zmin" value="VertexTrackerBarrel_length + 5*mm"/>
<constant name="VertexTrackerEndcapN_rmin" value="VertexTrackerInnerRadius"/>
<constant name="VertexTrackerEndcapN_rmax" value="VertexTrackerOuterRadius"/>
<constant name="VertexTrackerEndcapN_zmin" value="VertexTrackerBarrelLength + 5*mm"/>
-->
<constant name="VertexTrackerEndcapN_zmin" value="VertexTrackerBarrel_zmax"/>
<constant name="VertexTrackerEndcapP_zmin" value="VertexTrackerBarrel_zmax"/>
<constant name="VertexEndcap_NLayers" value="5"/>
<constant name="VertexTrackerEndcap_delta" value="(VertexTrackerEndcapP_zmax - VertexTrackerEndcapP_zmin)/VertexEndcap_NLayers"/>
</define>
- The sensor modules are 2 half-cylinders.
- There are 2 sensitive layers
- Each sensor has a thickness is 40um
- There is an outer shell for structural support 300um thick.
- The ID of this shell is set (arbitrarily) to 10 cm.
<display> ##### Sensor layers
</display>
Currently there are 2 sensor layers. Each is composed of 2 half-cylinders modules with only 40um of silicon thickness.
<detectors> ##### Support shell
<detector id="SiVertexSubAssembly_ID" Simple carbon fiber support shell.
name="SiVertexSubAssembly"
type="DD4hep_SubdetectorAssembly"
vis="SiTrackerSubAssemblyVis">
<composite name="VertexTrackerEndcapN"/>
<composite name="VertexTrackerEndcapP"/>
<composite name="SiVertexBarrel"/>
</detector>
</documentation>
<detector id="SiVertexBarrel_ID" name="SiVertexBarrel" type="refdet_SiVertexBarrel" <constant name="VertexBarrel_length" value="300.0*mm"/>
readout="SiVertexBarrelHits" insideTrackingVolume="true" > <constant name="VertexTrackerEndcapP_rmin" value="VertexTrackingRegion_rmin"/>
<dimensions rmin="VertexTrackerBarrel_rmin" rmax="VertexTrackerBarrel_rmax" length="VertexTrackerBarrel_length"/> <constant name="VertexTrackerEndcapN_rmin" value="VertexTrackingRegion_rmin"/>
<constant name="VertexTrackerEndcapP_rmax" value="VertexTrackingRegion_rmax"/>
<constant name="VertexTrackerEndcapN_rmax" value="VertexTrackingRegion_rmax"/>
<constant name="VertexTrackerEndcapP_zmax" value="VertexTrackingRegionP_zmax"/>
<constant name="VertexTrackerEndcapN_zmax" value="VertexTrackingRegionN_zmax"/>
<comment> Define available modules </comment> <constant name="VertexBarrelLayer_length" value="VertexBarrel_length - 1*mm"/>
<module name="SOIPIXD" vis="PurpleVis"> <constant name="VertexBarrelMod_length" value="VertexBarrel_length - 2*mm"/>
<frame width="15*mm" height="3.0*mm" length="VertexTrackerBarrel_length" thickness="0.1 * mm" material="CarbonFiber_25percent" vis="BlueGreenVis" />
<module_component name="silicon" width="14.0*mm" length="VertexTrackerBarrel_length-0.1*mm"
thickness="0.05*mm" material="Silicon" sensitive="true">
<position z="-0.025*mm" y="0*mm"/>
</module_component>
</module>
<module name="UFSD"> <constant name="VertexBarrelSensor_thickness" value="ITS3Thickness"/>
<frame width="15*mm" height="3.0*mm" length="VertexTrackerBarrel_length" thickness="0.1 * mm" material="CarbonFiber_25percent" vis="BlueGreenVis" /> <constant name="VertexBarrelLayer_thickness" value="0.2*cm"/>
<module_component name="silicon" width="14.0*mm" length="VertexTrackerBarrel_length-0.1*mm" <constant name="VertexBarrelMod_thickness" value="0.1*cm"/>
thickness="0.05*mm" material="Silicon" sensitive="true"> <constant name="VertexBarrelMod1_rmin" value="3.4*cm"/>
<position z="-0.025*mm" y="0*mm"/> <constant name="VertexBarrelMod2_rmin" value="5.7*cm"/>
</module_component> <constant name="VertexBarrelLayer_rmin1" value="VertexBarrelMod1_rmin - VertexBarrelLayer_thickness/2.0"/>
</module> <constant name="VertexBarrelLayer_rmin2" value="VertexBarrelMod2_rmin - VertexBarrelLayer_thickness/2.0"/>
<constant name="VertexBarrelLayer_rmax1" value="VertexBarrelLayer_rmin1 + VertexBarrelLayer_thickness"/>
<constant name="VertexBarrelLayer_rmax2" value="VertexBarrelLayer_rmin2 + VertexBarrelLayer_thickness"/>
<comment>
"Support" is to "shell" like "layer" is to "module", and is need for the flat stave barrel implementation.
</comment>
<constant name="VertexBarrelShell_rmin" value="10.0*cm"/>
<constant name="VertexBarrelShell_thickness" value="300*um"/>
<constant name="VertexBarrelShell_rmax" value="VertexBarrelShell_rmin + VertexBarrelShell_thickness"/>
<constant name="VertexBarrelShell_length" value="VertexBarrelLayer_length-VertexBarrelShell_thickness"/>
<constant name="VertexBarrelSupport_thickness" value="1.0*cm"/>
<constant name="VertexBarrelSupport_rmin" value="VertexBarrelShell_rmin-VertexBarrelSupport_thickness/2.0"/>
<constant name="VertexBarrelSupport_rmax" value="VertexBarrelSupport_rmin + VertexBarrelSupport_thickness"/>
<constant name="VertexBarrelSupport_length" value="VertexBarrelLayer_length"/>
<constant name="VertexTrackerEndcapN_zmin" value="25*cm"/>
<constant name="VertexTrackerEndcapP_zmin" value="25*cm"/>
<constant name="VertexEndcap_NLayers" value="1"/>
<constant name="VertexTrackerEndcap_delta" value="(VertexTrackerEndcapP_zmax - VertexTrackerEndcapP_zmin)/VertexEndcap_NLayers"/>
<constant name="VertexEndcapLayer_dz" value="2*cm"/>
<constant name="VertexEndcapLayer_thickness" value="min(3*cm,VertexEndcapLayer_dz-0.5*cm)"/>
<constant name="VertexEndcap_NModules" value="12"/>
<constant name="VertexEndcapMod_dz" value="2.5*mm"/>
<constant name="VertexEndcapModOpeningAngle" value="360.0/VertexEndcap_NModules*degree + 0.5*degree"/>
<constant name="VertexEndcapMod1_x1" value="2.0*VertexTrackerEndcapP_rmin*sin(VertexEndcapModOpeningAngle/2.0)"/>
<constant name="VertexEndcapMod1_x2" value="2.0*VertexTrackerEndcapP_rmax*sin(VertexEndcapModOpeningAngle/2.0)"/>
<constant name="VertexEndcapMod1_y" value="VertexTrackerEndcapP_rmax*cos(VertexEndcapModOpeningAngle/2.0) - VertexTrackerEndcapP_rmin"/>
<comment> cone connecting vertex barrel to endcap </comment>
<!-- <constant name="VertexEndcapCone_zmax" value="VertexEndcapShell_zmin-0.2*cm"/> -->
<constant name="VertexSupportCarbon_thickness" value="2*mm"/>
<constant name="VertexEndcapCone_zmin" value="VertexBarrelLayer_length/2.0 + 0.1*cm"/>
<constant name="VertexEndcapCone_zmax" value="VertexTrackerEndcapN_zmin - 0.1*cm"/>
<constant name="VertexEndcapCone_rmin1" value="VertexEndcapCone_zmin * 36.26/49"/>
<!-- <constant name="VertexEndcapCone_rmin1" value="TrackerEndcapInner_rmax1"/> -->
<constant name="VertexEndcapCone_rmin2" value="VertexTrackerEndcapP_rmax"/>
<constant name="VertexEndcapConeService_rmin1" value="VertexEndcapCone_rmin1+VertexSupportCarbon_thickness+0.1*mm"/>
<constant name="VertexEndcapConeService_rmin2" value="VertexEndcapCone_rmin2+VertexSupportCarbon_thickness+0.1*mm"/>
<constant name="VertexEndcapConeService_thickness" value="0.6*mm"/>
<constant name="VertexEndcapCone_length" value="VertexEndcapCone_zmax - VertexEndcapCone_zmin"/>
<comment>
Extra parameters to approximate a cylinder as a set of skinny staves
due to ACTS limitations.
</comment>
<constant name="VertexBarrelStave_count" value="128"/>
<constant name="VertexBarrelStave1_width" value="2*VertexBarrelMod1_rmin * tan(180*degree/VertexBarrelStave_count)"/>
<constant name="VertexBarrelStave2_width" value="2*VertexBarrelMod2_rmin * tan(180*degree/VertexBarrelStave_count)"/>
<constant name="VertexBarrelShellStave_width" value="2*VertexBarrelShell_rmin * tan(180*degree/VertexBarrelStave_count)"/>
</define>
<display>
</display>
<detectors>
<documentation level="5">
### Actual detectors
</documentation>
<detector
id="VertexBarrel_0_ID"
name="VertexBarrel"
type="athena_VertexBarrel"
readout="VertexBarrelHits"
insideTrackingVolume="true">
<dimensions
rmin="VertexBarrelLayer_rmin1"
rmax="VertexBarrelSupport_rmax"
length="VertexBarrel_length" />
<comment>Vertex Barrel Modules</comment>
<module name="Module1" vis="VertexLayerVis">
<module_component name="ITS3"
material="Silicon"
sensitive="true"
width="VertexBarrelStave1_width"
length="VertexBarrelMod_length"
thickness="VertexBarrelSensor_thickness"
vis="VertexLayerVis" />
</module>
<module name="Module2" vis="VertexLayerVis">
<module_component name="ITS3"
material="Silicon"
sensitive="true"
width="VertexBarrelStave2_width"
length="VertexBarrelMod_length"
thickness="VertexBarrelSensor_thickness"
vis="VertexLayerVis" />
</module>
<module name="SupportShell" vis="VertexSupportVis">
<module_component name="CF Shell"
material="CarbonFiber"
sensitive="false"
width="VertexBarrelShellStave_width"
length="VertexBarrelShell_length"
thickness="VertexBarrelShell_thickness"
vis="VertexSupportVis" />
</module>
<comment> Layers composed of many arrayed modules </comment> <comment> Layers composed of many arrayed modules </comment>
<layer module="SOIPIXD" id="2" vis="SiVertexVis"> <layer module="Module1" id="1" vis="VertexLayerVis">
<barrel_envelope inner_r="(VertexTrackerRadius1+VertexTrackerRadius2)/2" <barrel_envelope
outer_r="(VertexTrackerRadius2+VertexTrackerRadius3)/2" z_length="VertexTrackerBarrel_length"/> inner_r="VertexBarrelLayer_rmin1"
<rphi_layout phi_tilt="10.0*degree" nphi="VertexTrackerNModules2" phi0="0.0" rc="VertexTrackerRadius2" dr="0.0 * mm"/> outer_r="VertexBarrelLayer_rmax1"
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/> z_length="VertexBarrelLayer_length" />
</layer> <layer_material surface="outer" binning="binPhi,binZ" bins0="VertexBarrelStave_count" bins1="100" />
<layer module="UFSD" id="3" vis="SiVertexVis"> <comment>
<barrel_envelope inner_r="(VertexTrackerRadius2+VertexTrackerRadius3)/2" phi0 : Starting phi of first module.
outer_r="(VertexTrackerRadius3+VertexTrackerRadius4)/2" z_length="VertexTrackerBarrel_length"/> phi_tilt : Phi tilt of a module.
<rphi_layout phi_tilt="10.0*degree" nphi="VertexTrackerNModules3" phi0="0.0" rc="VertexTrackerRadius3" dr="0.0 * mm"/> rc : Radius of the module center.
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/> nphi : Number of modules in phi.
</layer> rphi_dr : The delta radius of every other module.
<layer module="UFSD" id="4" vis="SiVertexVis"> z0 : Z position of first module in phi.
<barrel_envelope inner_r="(VertexTrackerRadius3+VertexTrackerRadius4)/2" nz : Number of modules to place in z.
outer_r="(VertexTrackerRadius4+VertexTrackerRadius5)/2" z_length="VertexTrackerBarrel_length"/> dr : Radial displacement parameter, of every other module.
<rphi_layout phi_tilt="10.0*degree" nphi="VertexTrackerNModules4" phi0="0.0" rc="VertexTrackerRadius4" dr="0.0 * mm"/> </comment>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/> <rphi_layout phi_tilt="0.0*degree" nphi="VertexBarrelStave_count" phi0="0.0" rc="VertexBarrelMod1_rmin" dr="0.0 * mm"/>
</layer>
<layer module="UFSD" id="5" vis="SiVertexVis">
<barrel_envelope inner_r="(VertexTrackerRadius4+VertexTrackerRadius5)/2"
outer_r="(VertexTrackerRadius5+VertexTrackerRadius6)/2" z_length="VertexTrackerBarrel_length"/>
<rphi_layout phi_tilt="10.0*degree" nphi="VertexTrackerNModules5" phi0="0.0" rc="VertexTrackerRadius5" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer>
<layer module="UFSD" id="6" vis="SiVertexVis">
<barrel_envelope inner_r="(VertexTrackerRadius5+VertexTrackerRadius6)/2"
outer_r="(VertexTrackerRadius6+VertexTrackerRadius7)/2" z_length="VertexTrackerBarrel_length"/>
<rphi_layout phi_tilt="10.0*degree" nphi="VertexTrackerNModules6" phi0="0.0" rc="VertexTrackerRadius6" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/> <z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer> </layer>
<layer module="SOIPIXD" id="7" vis="SiVertexVis"> <layer module="Module2" id="2" vis="VertexLayerVis">
<barrel_envelope inner_r="(VertexTrackerRadius6+VertexTrackerRadius7)/2" <barrel_envelope
outer_r="(VertexTrackerRadius7+VertexTrackerRadius8)/2" z_length="VertexTrackerBarrel_length"/> inner_r="VertexBarrelLayer_rmin2"
<rphi_layout phi_tilt="10.0*degree" nphi="VertexTrackerNModules7" phi0="0.0" rc="VertexTrackerRadius7" dr="0.0 * mm"/> outer_r="VertexBarrelLayer_rmax2"
z_length="VertexBarrelLayer_length" />
<layer_material surface="outer" binning="binPhi,binZ" bins0="VertexBarrelStave_count" bins1="100" />
<rphi_layout phi_tilt="0.0*degree" nphi="VertexBarrelStave_count" phi0="0.0" rc="VertexBarrelMod2_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/> <z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer> </layer>
<layer module="SOIPIXD" id="8" vis="SiVertexVis"> <layer module="SupportShell" id="3" vis="VertexSupportVis">
<barrel_envelope inner_r="(VertexTrackerRadius7+VertexTrackerRadius8)/2" <barrel_envelope
outer_r="VertexTrackerRadius8+5*mm" z_length="VertexTrackerBarrel_length"/> inner_r="VertexBarrelSupport_rmin"
<rphi_layout phi_tilt="10.0*degree" nphi="VertexTrackerNModules8" phi0="0.0" rc="VertexTrackerRadius8" dr="0.0 * mm"/> outer_r="VertexBarrelSupport_rmax"
z_length="VertexBarrelSupport_length" />
<layer_material surface="outer" binning="binPhi,binZ" bins0="VertexBarrelStave_count" bins1="100" />
<rphi_layout phi_tilt="0.0*degree" nphi="VertexBarrelStave_count" phi0="0.0" rc="VertexBarrelShell_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/> <z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer> </layer>
</detector> </detector>
<detector id="SiVertexEndcapP_ID" name="VertexTrackerEndcapP" type="ref_DiskTracker" <detector
insideTrackingVolume="true" reflect="false" vis="AnlRed"> id="VertexEndcapP_0_ID"
<position x="0" y="0" z="0"/> name="VertexEndcapP"
<layer id="1" vis="AnlOrange" type="athena_TrapEndcapTracker"
inner_z="VertexTrackerEndcapP_zmin + 0*VertexTrackerEndcap_delta" readout="VertexEndcapHits"
inner_r="VertexTrackerEndcapP_rmin" vis="TrackerVis"
outer_r="VertexTrackerEndcapP_rmax"> reflect="false">
<slice material="Air" thickness="1.0*mm" vis="AnlOrange" />
</layer> <support material="CarbonFiber" name="sup_cone" vis="TrackerSupportVis">
<layer id="2" vis="AnlOrange" <shape type="Cone"
inner_z="VertexTrackerEndcapP_zmin + 1*VertexTrackerEndcap_delta" rmin1="VertexEndcapCone_rmin1" rmax1="VertexEndcapCone_rmin1+VertexSupportCarbon_thickness"
inner_r="VertexTrackerEndcapP_rmin" rmin2="VertexEndcapCone_rmin2" rmax2="VertexEndcapCone_rmin2+VertexSupportCarbon_thickness" z="VertexEndcapCone_length/2.0"/>
outer_r="VertexTrackerEndcapP_rmax"> <position x="0*cm" y="0*cm" z="(VertexEndcapCone_zmin+VertexEndcapCone_zmax)/2.0"/>
<slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </support>
</layer> <support material="Aluminum" name="sup_cone_service" vis="TrackerSupportVis">
<layer id="3" vis="AnlOrange" <shape type="Cone"
inner_z="VertexTrackerEndcapP_zmin + 2*VertexTrackerEndcap_delta" rmin1="VertexEndcapConeService_rmin1" rmax1="VertexEndcapConeService_rmin1+VertexEndcapConeService_thickness"
inner_r="VertexTrackerEndcapP_rmin" rmin2="VertexEndcapConeService_rmin2" rmax2="VertexEndcapConeService_rmin2+VertexEndcapConeService_thickness" z="VertexEndcapCone_length/2.0"/>
outer_r="VertexTrackerEndcapP_rmax"> <position x="0*cm" y="0*cm" z="(VertexEndcapCone_zmin+VertexEndcapCone_zmax)/2.0"/>
<slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </support>
</layer>
<layer id="4" vis="AnlOrange"
inner_z="VertexTrackerEndcapP_zmin + 3*VertexTrackerEndcap_delta" <module name="Module1" vis="AnlProcess_Blue">
inner_r="VertexTrackerEndcapP_rmin" <trd x1="VertexEndcapMod1_x1/2.0" x2="VertexEndcapMod1_x2/2.0" z="VertexEndcapMod1_y/2"/>
outer_r="VertexTrackerEndcapP_rmax"> <module_component thickness="ITS3Thickness" material="Silicon" sensitive="true"/>
<slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <module_component thickness="VertexEndcapAluminumThickness" material="Aluminum"/>
</layer> <module_component thickness="VertexCarbon_thickness" material="CarbonFiber"/>
<layer id="5" vis="AnlOrange" </module>
inner_z="VertexTrackerEndcapP_zmin + 4*VertexTrackerEndcap_delta" <layer id="1">
inner_r="VertexTrackerEndcapP_rmin" <envelope vis="TrackerVis"
outer_r="VertexTrackerEndcapP_rmax"> rmin="VertexTrackerEndcapP_rmin"
<slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> rmax="VertexTrackerEndcapP_rmax"
length="VertexEndcapLayer_thickness"
zstart="VertexTrackerEndcapP_zmin + VertexEndcapLayer_dz/2.0" />
<layer_material surface="representing" binning="binPhi,binR" bins0="20*VertexEndcap_NModules" bins1="256"/>
<ring vis="TrackerVis"
r="VertexTrackerEndcapP_rmin+VertexEndcapMod1_y/2.0"
zstart="0.0"
nmodules="VertexEndcap_NModules" dz="VertexEndcapMod_dz" module="Module1" />
</layer> </layer>
</detector> </detector>
<detector id="SiVertexEndcapN_ID" name="VertexTrackerEndcapN" type="ref_DiskTracker"
insideTrackingVolume="true" reflect="true" vis="AnlRed"> <detector
<position x="0" y="0" z="0"/> id="VertexEndcapN_0_ID"
<layer id="1" vis="AnlOrange" name="VertexEndcapN"
inner_z="VertexTrackerEndcapN_zmin + 0*VertexTrackerEndcap_delta" type="athena_TrapEndcapTracker"
inner_r="VertexTrackerEndcapN_rmin" readout="VertexEndcapHits"
outer_r="VertexTrackerEndcapN_rmax"> vis="TrackerVis"
<slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> reflect="true">
</layer>
<layer id="2" vis="AnlOrange" <support material="CarbonFiber" name="sup_cone" vis="TrackerSupportVis">
inner_z="VertexTrackerEndcapN_zmin + 1*VertexTrackerEndcap_delta" <shape type="Cone"
inner_r="VertexTrackerEndcapN_rmin" rmin2="VertexEndcapCone_rmin1" rmax2="VertexEndcapCone_rmin1+VertexSupportCarbon_thickness"
outer_r="VertexTrackerEndcapN_rmax"> rmin1="VertexEndcapCone_rmin2" rmax1="VertexEndcapCone_rmin2+VertexSupportCarbon_thickness" z="VertexEndcapCone_length/2.0"/>
<slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <position x="0*cm" y="0*cm" z="-1.0*(VertexEndcapCone_zmin+VertexEndcapCone_zmax)/2.0"/>
</layer> </support>
<layer id="3" vis="AnlOrange" <support material="Aluminum" name="sup_cone_service" vis="TrackerSupportVis">
inner_z="VertexTrackerEndcapN_zmin + 2*VertexTrackerEndcap_delta" <shape type="Cone"
inner_r="VertexTrackerEndcapN_rmin" rmin2="VertexEndcapConeService_rmin1" rmax2="VertexEndcapConeService_rmin1+VertexEndcapConeService_thickness"
outer_r="VertexTrackerEndcapN_rmax"> rmin1="VertexEndcapConeService_rmin2" rmax1="VertexEndcapConeService_rmin2+VertexEndcapConeService_thickness" z="VertexEndcapCone_length/2.0"/>
<slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <position x="0*cm" y="0*cm" z="-1.0*(VertexEndcapCone_zmin+VertexEndcapCone_zmax)/2.0"/>
</layer> </support>
<layer id="4" vis="AnlOrange"
inner_z="VertexTrackerEndcapN_zmin + 3*VertexTrackerEndcap_delta" <module name="Module1" vis="AnlProcess_Blue">
inner_r="VertexTrackerEndcapN_rmin" <trd x1="VertexEndcapMod1_x1/2.0" x2="VertexEndcapMod1_x2/2.0" z="VertexEndcapMod1_y/2"/>
outer_r="VertexTrackerEndcapN_rmax"> <module_component thickness="ITS3Thickness" material="Silicon" sensitive="true"/>
<slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <module_component thickness="VertexEndcapAluminumThickness" material="Aluminum"/>
</layer> <module_component thickness="VertexCarbon_thickness" material="CarbonFiber"/>
<layer id="5" vis="AnlOrange" </module>
inner_z="VertexTrackerEndcapN_zmin + 4*VertexTrackerEndcap_delta" <layer id="1">
inner_r="VertexTrackerEndcapN_rmin" <envelope vis="TrackerVis"
outer_r="VertexTrackerEndcapN_rmax"> rmin="VertexTrackerEndcapN_rmin"
<slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> rmax="VertexTrackerEndcapN_rmax"
length="VertexEndcapLayer_thickness"
zstart="VertexTrackerEndcapN_zmin + VertexEndcapLayer_dz/2.0" />
<layer_material surface="representing" binning="binPhi,binR" bins0="20*VertexEndcap_NModules" bins1="256"/>
<ring vis="TrackerVis"
r="VertexTrackerEndcapN_rmin+VertexEndcapMod1_y/2.0"
zstart="0.0"
nmodules="VertexEndcap_NModules" dz="VertexEndcapMod_dz" module="Module1" />
</layer> </layer>
</detector> </detector>
</detectors> </detectors>
<readouts> <readouts>
<readout name="SiVertexBarrelHits"> <readout name="VertexBarrelHits">
<segmentation type="CartesianGridXY" grid_size_x="0.20*mm" grid_size_y="0.20*mm" /> <segmentation type="CartesianGridXY" grid_size_x="0.010*mm" grid_size_y="0.010*mm" />
<id>system:8,barrel:2,layer:4,module:12,sensor:2,x:32:-16,y:-16</id> <id>system:8,layer:4,module:12,sensor:2,x:32:-16,y:-16</id>
</readout> </readout>
<readout name="VertexTrackerEndcapHits"> <readout name="VertexEndcapHits">
<segmentation type="CartesianGridXY" grid_size_x="0.20*mm" grid_size_y="0.20*mm" /> <segmentation type="CartesianGridXZ" grid_size_x="0.010*mm" grid_size_z="0.010*mm" />
<id>system:8,barrel:2,layer:4,module:12,sensor:2,x:32:-16,y:-16</id> <id>system:8,layer:4,module:12,sensor:2,x:32:-16,z:-16</id>
</readout> </readout>
</readouts> </readouts>
......
<?xml version="1.0" encoding="UTF-8"?>
<lccdd>
<define>
<comment>
Main parameters
</comment>
<constant name="SiVertexSensor_thickness" value="40*um"/>
<constant name="VertexBarrelMod_length" value="280.0*mm"/>
<constant name="VertexBarrelMod_rmin" value="3.3*cm"/>
<constant name="VertexBarrelMod_offset" value="1.05*cm"/>
<constant name="VertexBarrelMod_count" value="3"/>
<constant name="VertexBarrelShell_thickness" value="300.0*um"/>
<documentation>
#### Vertex Tracker Barrel Parameters
- The sensor modules are 2 half-cylinders.
- There are 2 sensitive layers
- Each sensor has a thickness is 40um
- There is an outer shell for structural support 300um thick.
- The ID of this shell is set (arbitrarily) to 10 cm.
##### Sensor layers
Currently there are 2 sensor layers. Each is composed of 2 half-cylinders modules with only 40um of silicon thickness.
##### Support shell
Simple carbon fiber support shell.
</documentation>
<constant name="VertexBarrelEnvelope_length" value="VertexTrackingRegion_length"/>
<constant name="VertexBarrelLayer_length" value="VertexBarrelMod_length + 1*um"/>
<constant name="VertexBarrelLayer_thickness" value="0.2*cm"/>
<constant name="VertexBarrelMod_thickness" value="0.1*cm"/>
<constant name="VertexBarrelMod1_rmin" value="VertexBarrelMod_rmin"/>
<constant name="VertexBarrelMod2_rmin" value="VertexBarrelMod_rmin + 1 * VertexBarrelMod_offset"/>
<constant name="VertexBarrelMod3_rmin" value="VertexBarrelMod_rmin + 2 * VertexBarrelMod_offset"/>
<constant name="VertexBarrelLayer1_rmin" value="VertexBarrelMod_rmin - VertexBarrelLayer_thickness/2.0"/>
<constant name="VertexBarrelLayer1_rmax" value="VertexBarrelLayer1_rmin + VertexBarrelLayer_thickness"/>
<constant name="VertexBarrelLayer2_rmin" value="VertexBarrelLayer1_rmin + 1 * VertexBarrelMod_offset"/>
<constant name="VertexBarrelLayer2_rmax" value="VertexBarrelLayer2_rmin + VertexBarrelLayer_thickness"/>
<constant name="VertexBarrelLayer3_rmin" value="VertexBarrelLayer1_rmin + 2 * VertexBarrelMod_offset"/>
<constant name="VertexBarrelLayer3_rmax" value="VertexBarrelLayer3_rmin + VertexBarrelLayer_thickness"/>
<comment>
"Support" is to "shell" like "layer" is to "module", and is need for the flat stave barrel implementation.
</comment>
<constant name="VertexBarrelShell_rmin" value="VertexBarrelMod_rmin + VertexBarrelMod_count * VertexBarrelMod_offset"/>
<constant name="VertexBarrelShell_rmax" value="VertexBarrelShell_rmin + VertexBarrelShell_thickness"/>
<constant name="VertexBarrelShell_length" value="VertexBarrelMod_length"/>
<constant name="VertexBarrelSupport_thickness" value="0.1*cm"/>
<constant name="VertexBarrelSupport_rmin" value="VertexBarrelShell_rmin-VertexBarrelSupport_thickness/2.0"/>
<constant name="VertexBarrelSupport_rmax" value="VertexBarrelSupport_rmin + VertexBarrelSupport_thickness"/>
<constant name="VertexBarrelSupport_length" value="VertexBarrelLayer_length"/>
<comment>
Extra parameters to approximate a cylinder as a set of skinny staves
due to ACTS limitations.
</comment>
<constant name="VertexBarrelStave_count" value="128"/>
<constant name="VertexBarrelStave1_width" value="2*VertexBarrelMod1_rmin * tan(180*degree/VertexBarrelStave_count)"/>
<constant name="VertexBarrelStave2_width" value="2*VertexBarrelMod2_rmin * tan(180*degree/VertexBarrelStave_count)"/>
<constant name="VertexBarrelStave3_width" value="2*VertexBarrelMod3_rmin * tan(180*degree/VertexBarrelStave_count)"/>
<constant name="VertexBarrelShellStave_width" value="2*VertexBarrelShell_rmin * tan(180*degree/VertexBarrelStave_count)"/>
</define>
<display>
</display>
<detectors>
<documentation level="5">
### Actual detectors
</documentation>
<detector
id="VertexBarrel_0_ID"
name="VertexBarrel"
type="athena_VertexBarrel"
readout="VertexBarrelHits"
insideTrackingVolume="true">
<dimensions
rmin="VertexBarrelLayer1_rmin"
rmax="VertexBarrelSupport_rmax"
length="VertexBarrelEnvelope_length" />
<comment>Vertex Barrel Modules</comment>
<module name="Module1" vis="VertexLayerVis">
<module_component name="ITS3"
material="Silicon"
sensitive="true"
width="VertexBarrelStave1_width"
length="VertexBarrelMod_length"
thickness="SiVertexSensor_thickness"
vis="VertexLayerVis" />
</module>
<module name="Module2" vis="VertexLayerVis">
<module_component name="ITS3"
material="Silicon"
sensitive="true"
width="VertexBarrelStave2_width"
length="VertexBarrelMod_length"
thickness="SiVertexSensor_thickness"
vis="VertexLayerVis" />
</module>
<module name="Module3" vis="VertexLayerVis">
<module_component name="ITS3"
material="Silicon"
sensitive="true"
width="VertexBarrelStave3_width"
length="VertexBarrelMod_length"
thickness="SiVertexSensor_thickness"
vis="VertexLayerVis" />
</module>
<module name="SupportShell" vis="VertexSupportVis">
<module_component name="CF Shell"
material="CarbonFiber"
sensitive="false"
width="VertexBarrelShellStave_width"
length="VertexBarrelShell_length"
thickness="VertexBarrelShell_thickness"
vis="VertexSupportVis" />
</module>
<comment> Layers composed of many arrayed modules </comment>
<layer module="Module1" id="1" vis="VertexLayerVis">
<barrel_envelope
inner_r="VertexBarrelLayer1_rmin"
outer_r="VertexBarrelLayer1_rmax"
z_length="VertexBarrelLayer_length" />
<layer_material surface="outer" binning="binPhi,binZ" bins0="VertexBarrelStave_count" bins1="100" />
<comment>
phi0 : Starting phi of first module.
phi_tilt : Phi tilt of a module.
rc : Radius of the module center.
nphi : Number of modules in phi.
rphi_dr : The delta radius of every other module.
z0 : Z position of first module in phi.
nz : Number of modules to place in z.
dr : Radial displacement parameter, of every other module.
</comment>
<rphi_layout phi_tilt="0.0*degree" nphi="VertexBarrelStave_count" phi0="0.0" rc="VertexBarrelMod1_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer>
<layer module="Module2" id="2" vis="VertexLayerVis">
<barrel_envelope
inner_r="VertexBarrelLayer2_rmin"
outer_r="VertexBarrelLayer2_rmax"
z_length="VertexBarrelLayer_length" />
<layer_material surface="outer" binning="binPhi,binZ" bins0="VertexBarrelStave_count" bins1="100" />
<rphi_layout phi_tilt="0.0*degree" nphi="VertexBarrelStave_count" phi0="0.0" rc="VertexBarrelMod2_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer>
<layer module="Module3" id="3" vis="VertexLayerVis">
<barrel_envelope
inner_r="VertexBarrelLayer3_rmin"
outer_r="VertexBarrelLayer3_rmax"
z_length="VertexBarrelLayer_length" />
<layer_material surface="outer" binning="binPhi,binZ" bins0="VertexBarrelStave_count" bins1="100" />
<rphi_layout phi_tilt="0.0*degree" nphi="VertexBarrelStave_count" phi0="0.0" rc="VertexBarrelMod3_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer>
<layer module="SupportShell" id="VertexBarrelMod_count + 1" vis="VertexSupportLayerVis">
<barrel_envelope
inner_r="VertexBarrelSupport_rmin"
outer_r="VertexBarrelSupport_rmax"
z_length="VertexBarrelSupport_length" />
<layer_material surface="outer" binning="binPhi,binZ" bins0="VertexBarrelStave_count" bins1="100" />
<rphi_layout phi_tilt="0.0*degree" nphi="VertexBarrelStave_count" phi0="0.0" rc="VertexBarrelShell_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer>
</detector>
</detectors>
<readouts>
<readout name="VertexBarrelHits">
<segmentation type="CartesianGridXY" grid_size_x="0.010*mm" grid_size_y="0.010*mm" />
<id>system:8,layer:4,module:12,sensor:2,x:32:-16,y:-16</id>
</readout>
</readouts>
</lccdd>
# npsim --runType vis --compactFile athena.xml --random.seed 1 --enableGun --gun.energy 2*GeV --gun.thetaMin 90*deg --gun.thetaMax 90*deg --gun.distribution uniform --macro macro/dirc_vis.mac --outputFile dirc_vis.root
/vis/list
# Use this open statement to create an OpenGL view:
/vis/open OGL 600x600-0+0
#
# Use this open statement to create a .prim file suitable for
# viewing in DAWN:
#/vis/open DAWNFILE
#
# Use this open statement to create a .heprep file suitable for
# viewing in HepRApp:
#/vis/open HepRepFile
#
# Use this open statement to create a .wrl file suitable for
# viewing in a VRML viewer:
#/vis/open VRML2FILE
#
# Disable auto refresh and quieten vis messages whilst scene and
# trajectories are established:
/vis/viewer/set/autoRefresh false
/vis/viewer/set/rotationStyle freeRotation
/vis/verbose errors
#
# Draw geometry:
/vis/drawVolume
# Specify zoom value:
/vis/viewer/zoom 1.4
# Specify style (surface or wireframe):
#/vis/viewer/set/style wireframe
#top
# /vis/viewer/set/viewpointThetaPhi -90. 0.
# /vis/viewer/set/viewpointVector 0 1 0.00000001
# /vis/viewer/set/upVector 1 0 0
#mcp
#/vis/viewer/set/viewpointVector -1 0 0.00000001
#/vis/viewer/set/upVector 0 1 0
#side
# /vis/viewer/set/viewpointVector 0 1 0.00000001
# /vis/viewer/set/upVector 0 -1 0
#lenses
#/vis/viewer/set/viewpointThetaPhi 30 30
#
#/vis/viewer/set/projection orthogonal
#/vis/viewer/zoomTo 4.5
#/vis/viewer/set/targetPoint -110 20 -10 cm
#/vis/viewer/set/background white
# Draw coordinate axes:
/vis/scene/add/axes 0 0 0 1 m
#
# Draw smooth trajectories at end of event, showing trajectory points
# as markers 2 pixels wide:
/vis/scene/add/trajectories smooth
#/vis/modeling/trajectories/create/drawByCharge
#/vis/modeling/trajectories/drawByCharge-0/default/setDrawStepPts true
#/vis/modeling/trajectories/drawByCharge-0/default/setStepPtsSize 2
/vis/modeling/trajectories/create/drawByParticleID
/vis/modeling/trajectories/drawByParticleID-0/set opticalphoton yellow
/vis/modeling/trajectories/drawByParticleID-0/setRGBA opticalphoton 1 0.8 0 0.3
/vis/modeling/trajectories/drawByParticleID-0/setRGBA e+ 1 0 1 1
/vis/modeling/trajectories/drawByParticleID-0/default/setDrawStepPts true
/vis/modeling/trajectories/drawByParticleID-0/default/setStepPtsSize 2
# (if too many tracks cause core dump => /tracking/storeTrajectory 0)
#
# Draw hits at end of event:
#/vis/scene/add/hits
#
# To draw only gammas:
#/vis/filtering/trajectories/create/particleFilter
#/vis/filtering/trajectories/particleFilter-0/add gamma
#
# To invert the above, drawing all particles except gammas,
# keep the above two lines but also add:
#/vis/filtering/trajectories/particleFilter-0/invert true
#
# Many other options are available with /vis/modeling and /vis/filtering.
# For example, to select colour by particle ID:
#/vis/modeling/trajectories/create/drawByParticleID
#/vis/modeling/trajectories/drawByParticleID-0/set e- blue
#
# To superimpose all of the events from a given run:
/vis/scene/endOfEventAction accumulate
# Re-establish auto refreshing and verbosity:
/vis/viewer/set/autoRefresh true
/vis/verbose warnings
#
# For file-based drivers, use this to create an empty detector view:
#/vis/viewer/flush
/vis/viewer/set/projection p 40 deg
/vis/viewer/set/style s
/vis/viewer/set/hiddenEdge true
#/vis/viewer/set/background 1 1 1 0
#/vis/viewer/set/background 0 0 0 0
/vis/viewer/set/hiddenMarker
/vis/geometry/set/forceLineSegmentsPerCircle all 0 50
# /vis/viewer/set/globalLineWidthScale 1.5
# /vis/geometry/set/lineWidth all 0 1
/vis/ogl/set/displayListLimit 500000
#fp
#/vis/viewer/save
# #mcp
# /vis/viewer/set/viewpointVector -1 0 0.00000001
# /vis/viewer/set/upVector 0 1
# /vis/viewer/set/viewpointThetaPhi 9 41 deg
# /vis/viewer/zoomTo 6
# /vis/viewer/set/targetPoint 88.5358 -17.0546 18.8692 cm
# lens
# /vis/viewer/zoomTo 20
# /vis/viewer/set/viewpointThetaPhi 129.792 1.39204 deg
# /vis/viewer/set/targetPoint 100 20 210 cm
# # #lens side
# /vis/viewer/set/viewpointVector 1.31839e-16 -1 -6.93889e-18
# /vis/viewer/set/upVector 0 1 0
# /vis/viewer/set/projection orthogonal
# /vis/viewer/zoomTo 11
# /vis/viewer/scaleTo 1 1 1
# /vis/viewer/set/targetPoint 1.01299 -0.569503 2.15227 m
# side wedge
# /vis/viewer/set/viewpointVector -5.20417e-17 1 -3.46945e-18
# /vis/viewer/set/upVector 0 1 0
# /vis/viewer/set/projection orthogonal
# /vis/viewer/zoomTo 13.4
# /vis/viewer/scaleTo 1 1 1
# /vis/viewer/set/targetPoint 1.0404 -0.128502 2.17344 m
# whole length
# /vis/viewer/zoomTo 7.0883
# /vis/viewer/set/targetPoint 1.11348 -0.128502 0.164898 m
#/vis/ogl/export ev_1.png
# draw field
#/vis/scene/add/magneticField 10
#/vis/scene/create
#/vis/scene/add/volume
#
#/vis/sceneHandler/create VRML2FILE
#
#/vis/viewer/create
#
#/tracking/storeTrajectory 1
#/vis/scene/add/trajectories
#/vis/scene/endOfEventAction accumulate
/vis/viewer/refresh
/gps/verbose 2
/gps/particle pi-
/gps/number 1
#/gps/ene/type Gauss
/gps/ene/mono 6.0 GeV
#/gps/ene/sigma 3.0 GeV
#/gps/pos/type Volume
#/gps/pos/shape Cylinder
#/gps/pos/centre 0.0 0.0 0.0 cm
#/gps/pos/radius 0.01 cm
#/gps/pos/halfz 10 cm
/gps/position 0 0 0 cm
#/gps/direction 1 0 0
/gps/direction -1 0 0
#/gps/ang/type iso
#/gps/ang/mintheta 10 degree
#/gps/ang/maxtheta 170 degree
/vis/viewer/set/viewpointVector 0 -1 0
/vis/viewer/set/upVector -1 0 0
/vis/viewer/set/projection orthogonal
/vis/viewer/zoomTo 6.8984
/vis/viewer/scaleTo 1 1 1
/vis/viewer/set/targetPoint -0.987804 0.579407 2.01758 m
/run/beamOn 1
\ No newline at end of file
/control/verbose 2
/run/initialize
/gps/verbose 2
/gps/particle pi-
/gps/number 1
/gps/ene/type Gauss
/gps/ene/mono 10.0 GeV
/gps/ene/sigma 3.0 GeV
/gps/pos/type Volume
/gps/pos/shape Cylinder
/gps/pos/centre 0.0 0.0 0.0 cm
/gps/pos/radius 0.01 cm
/gps/pos/halfz 10 cm
/gps/position 0 0 0 cm
#/gps/direction 0 0.1 1.0
/gps/ang/type iso
/gps/ang/mintheta 10 degree
/gps/ang/maxtheta 170 degree
/run/beamOn 100
/run/initialize
#/vis/open OGL 800x800-0+0
/vis/open OGLIQt 800x800-0+0
#
/vis/drawVolume
/vis/viewer/set/viewpointThetaPhi 20 30
/vis/viewer/zoom 1.1
#/vis/viewer/set/style wireframe
#/vis/scene/add/axes 0 0 0 1 m
/vis/scene/add/trajectories rich smooth
/vis/modeling/trajectories/create/drawByCharge
#/vis/modeling/trajectories/drawByCharge-0/default/setDrawStepPts true
#/vis/modeling/trajectories/drawByCharge-0/default/setStepPtsSize 2
/vis/scene/add/hits
/vis/scene/endOfEventAction accumulate 2
#/vis/filtering/trajectories/create/particleFilter
#/vis/filtering/trajectories/particleFilter-0/add gamma
#/vis/filtering/trajectories/particleFilter-0/invert true
#/vis/filtering/trajectories/particleFilter-0/verbose true
#/vis/filtering/trajectories/particleFilter-0/active true
/vis/ogl/set/displayListLimit 50000
/vis/viewer/flush
/gps/verbose 2
/gps/particle pi-
/gps/number 1
/gps/ene/type Gauss
/gps/ene/mono 8.0 GeV
/gps/ene/sigma 1.0 GeV
/gps/pos/type Volume
/gps/pos/shape Cylinder
/gps/pos/centre 0.0 0.0 0.0 cm
/gps/pos/radius 0.001 cm
/gps/pos/halfz 1 cm
/gps/position 0 0 0 cm
#/gps/direction 0 0.1 1.0
/gps/ang/type iso
/gps/ang/mintheta 10 degree
/gps/ang/maxtheta 20 degree
/run/beamOn 1
/vis/open OGL 800x800-0+0
/vis/drawVolume
/vis/viewer/set/viewpointThetaPhi 30 30
#/vis/viewer/zoom 30.
#/vis/viewer/set/style wireframe
#/vis/scene/add/axes 0 0 0 1 m
/vis/scene/add/trajectories rich smooth
/vis/modeling/trajectories/create/drawByCharge
#/vis/modeling/trajectories/drawByCharge-0/default/setDrawStepPts true
#/vis/modeling/trajectories/drawByCharge-0/default/setStepPtsSize 2
/vis/scene/add/hits
/vis/scene/endOfEventAction accumulate 2
#/vis/filtering/trajectories/create/particleFilter
#/vis/filtering/trajectories/particleFilter-0/add gamma
#/vis/filtering/trajectories/particleFilter-0/invert true
#/vis/filtering/trajectories/particleFilter-0/verbose true
#/vis/filtering/trajectories/particleFilter-0/active true
/vis/ogl/set/displayListLimit 500000
/vis/viewer/flush
/run/beamOn 1
#/control/execute macro/gun.mac
# Usage example:
# npsim --runType vis --compactFile athena.xml --random.seed 1 --enableGun --gun.energy 2*GeV --gun.thetaMin 90*deg --gun.thetaMax 90*deg --gun.distribution uniform --macro macro/vis_OGL_along_z_beamOn_1.mac --outputFile test.root
/vis/open OGL 1920x1080
/vis/scene/create
/vis/scene/add/volume
/vis/sceneHandler/attach
/vis/viewer/zoom 10
/vis/viewer/flush
/vis/scene/add/trajectories
/vis/scene/add/hits
/run/beamOn 1
<lccdd xmlns:compact="http://www.lcsim.org/schemas/compact/1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/compact/1.0/compact.xsd">
<!-- Some information about detector -->
<info name="Reference Detector" title="Reference Detector"
author="Jihee Kim, Whitney Armstrong"
url="https://eicweb.phy.anl.gov/EIC/detectors/reference_detector.git"
status="development"
version="v1 2021-03-16">
<comment>Reference Detector</comment>
</info>
<define>
<include ref="ip6/ip6_defs.xml" /> <comment> IP definitions should be first</comment>
<include ref="compact/definitions.xml" />
<!--
<include ref="eic/eic_defs.xml" />
-->
</define>
<properties>
<matrix name="RINDEX__Vacuum" coldim="2" values="
1.0*eV 1.0
5.1*eV 1.0
"/>
<matrix name="RINDEX__Air" coldim="2" values="
1.0*eV 1.00029
5.1*eV 1.00029
"/>
<matrix name="RINDEX__Quartz" coldim="2" values="
1.0*eV 1.46
5.1*eV 1.46
"/>
<matrix name="RINDEX__N2" coldim="2" values="
1.0*eV 1.00033
4.0*eV 1.00033
5.1*eV 1.00033
"/>
<matrix name="RINDEX__Pyrex" coldim="2" values="
1.0*eV 1.5
4.0*eV 1.5
5.1*eV 1.5
"/>
<matrix name= "REFLECTIVITY_mirror" coldim="2" values="
1.0*eV 0.9
4.0*eV 0.9
5.1*eV 0.9
"/>
</properties>
<includes>
<gdmlFile ref="compact/elements.xml"/>
<gdmlFile ref="compact/materials.xml"/>
</includes>
<materials>
<material name="AirOptical">
<D type="density" unit="g/cm3" value="0.0012"/>
<fraction n="0.754" ref="N"/>
<fraction n="0.234" ref="O"/>
<fraction n="0.012" ref="Ar"/>
<property name="RINDEX" ref="RINDEX__Vacuum"/>
</material>
<material name="N2cherenkov">
<D type="density" value="0.00125" unit="g/cm3"/>
<composite n="1" ref="N"/>
<property name="RINDEX" ref="RINDEX__N2"/>
</material>
<material name="PyrexGlass">
<D type="density" value="2.23" unit="g/cm3"/>
<fraction n="0.806" ref="SiliconOxide"/>
<fraction n="0.130" ref="BoronOxide"/>
<fraction n="0.040" ref="SodiumOxide"/>
<fraction n="0.023" ref="AluminumOxide"/>
<property name="RINDEX" ref="RINDEX__Pyrex"/>
</material>
</materials>
<surfaces>
<comment> For the values of "finish", model and type, see TGeoOpticalSurface.h !
</comment>
<opticalsurface finish="polished" model="glisur" name="MirrorOpticalSurface" type="dielectric_metal" value="0">
<property name="REFLECTIVITY" ref="REFLECTIVITY_mirror"/>
<property name="RINDEX" coldim="2" values="1.034*eV 1.5 4.136*eV 1.5"/>
<!--<property name="EFFICIENCY" ref="EFFICIENCY0x8b77240"/>-->
</opticalsurface>
<opticalsurface name="mirror2" finish="polished" model="glisur" type="dielectric_dielectric">
<property name="REFLECTIVITY" coldim="2" values="1.034*eV 0.8 4.136*eV 0.9"/>
<property name="EFFICIENCY" coldim="2" values="2.034*eV 0.8 4.136*eV 1.0"/>
<property name="RINDEX" coldim="2" values="1.034*eV 1.5 4.136*eV 1.5"/>
</opticalsurface>
<!-- Define the dimensions of the world volume -->
</surfaces>
<limits>
<limitset name="EICBeamlineLimits">
<limit name="step_length_max" particles="*" value="1.0" unit="mm" />
<limit name="track_length_max" particles="*" value="1.0" unit="mm" />
<limit name="time_max" particles="*" value="0.1" unit="ns" />
<limit name="ekin_min" particles="*" value="0.001" unit="MeV" />
<limit name="range_min" particles="*" value="0.1" unit="mm" />
</limitset>
<limitset name="cal_limits">
<limit name="step_length_max" particles="*" value="5.0" unit="mm"/>
</limitset>
</limits>
<display>
<include ref="compact/display.xml" />
</display>
<comment> Include the IP components first </comment>
<include ref="eic/forward_ion_beamline.xml"/>
<include ref="ip6/beampipe.xml"/>
<include ref="compact/solenoid.xml"/>
<include ref="compact/ecal.xml"/>
<include ref="compact/hcal.xml"/>
<!--include ref="compact/ce_GEM.xml"/-->
<!--include ref="compact/vertex_tracker.xml"/-->
<include ref="compact/allsilicon_simplified.xml"/>
<!--include ref="compact/gem_tracker_endcap.xml"/-->
<include ref="compact/ce_mrich.xml"/>
<include ref="compact/tof_endcap.xml"/>
<include ref="compact/forward_trd.xml"/>
<include ref="compact/forward_rich.xml"/>
<include ref="compact/B0_tracker.xml"/>
<include ref="compact/far_forward_offM_tracker.xml"/>
<include ref="compact/far_forward_romanpots.xml"/>
<include ref="compact/far_forward_detectors.xml"/>
<!--
<include ref="compact/mm_tracker_barrel.xml"/>
<include ref="compact/cb_VTX_Barrel.xml"/>
-->
<include ref="compact/rwell_tracker_barrel.xml"/>
<include ref="compact/cb_DIRC.xml"/>
<detectors>
</detectors>
<readouts>
</readouts>
</lccdd>
#ReferenceDetector #AthenaDetector
{% for image_path in images %} {% for image_path in images %}
......
from __future__ import absolute_import, unicode_literals
import os
import time
import logging
import argparse
parser = argparse.ArgumentParser(
prog='checkOverlaps.py',
description='''Check for overlaps using Geant4''',
epilog='''
This program checks the compact detector file for overlaps using Geant4.
''')
parser.add_argument("-c", "--compact", help="compact detector file",default="athena.xml")
parser.add_argument("-r", "--resolution", help="number of points on surface",default="10000")
parser.add_argument("-t", "--tolerance", help="minimum distance (in mm) to report overlaps",default="0.1")
parser.add_argument("-v", "--verbose", help="print output", action='store_true')
args = parser.parse_args()
import DDG4
from g4units import keV, GeV, mm, ns, MeV
def run():
kernel = DDG4.Kernel()
description = kernel.detectorDescription()
kernel.loadGeometry(str("file:" + args.compact))
DDG4.importConstants(description)
geant4 = DDG4.Geant4(kernel)
ui = geant4.setupCshUI(ui=None)
ui.Commands = [
'/geometry/test/resolution {}'.format(args.resolution),
'/geometry/test/tolerance {}'.format(args.tolerance),
'/geometry/test/verbosity {}'.format(1 if args.verbose else 0),
'/geometry/test/run'
]
kernel.configure()
kernel.initialize()
kernel.run()
kernel.terminate()
if __name__ == "__main__":
run()
from __future__ import absolute_import, unicode_literals
import os
import time
import logging
import argparse
parser = argparse.ArgumentParser(
prog='convert_to_gdml.py',
description='''Convert DD4Hep description to GDML''',
epilog='''
This program converts the compact detector file to a single GDML file.
''')
parser.add_argument("-c", "--compact", help="compact detector file",default="athena.xml")
parser.add_argument("-o", "--output", help="gdml detector file",default="athena.gdml")
args = parser.parse_args()
import DDG4
from g4units import keV, GeV, mm, ns, MeV
def run():
kernel = DDG4.Kernel()
description = kernel.detectorDescription()
kernel.loadGeometry(str("file:" + args.compact))
DDG4.importConstants(description)
geant4 = DDG4.Geant4(kernel)
ui = geant4.setupCshUI(ui=None)
#
# Setup the GDML writer action
writer = DDG4.Action(kernel, 'Geant4GDMLWriteAction/Writer')
writer.enableUI()
kernel.registerGlobalAction(writer)
ui.Commands = [
'/ddg4/Writer/Output {}'.format(args.output),
'/ddg4/Writer/OverWrite 1',
'/ddg4/Writer/write'
]
kernel.configure()
kernel.initialize()
kernel.run()
kernel.terminate()
if __name__ == "__main__":
run()
#include "DD4hep/Detector.h"
#include "DDG4/Geant4Data.h"
#include "DDRec/CellIDPositionConverter.h"
#include "DDRec/SurfaceManager.h"
#include "DDRec/Surface.h"
#include "fmt/core.h"
/** Example using dd4hep
*/
void example_dd4hep(const char* fname = "test_tracker_disc.root"){
using namespace ROOT::Math;
// -------------------------
// Get the DD4hep instance
// Load the compact XML file
// Initialize the position converter tool
dd4hep::Detector& detector = dd4hep::Detector::getInstance();
detector.fromCompact("athena.xml");
dd4hep::rec::CellIDPositionConverter cellid_converter(detector);
fmt::print("Detector Types:\n");
for(const auto& dtype : detector.detectorTypes() ) {
fmt::print(" {}\n", dtype);
}
fmt::print("\n");
fmt::print("All detector subsystem names:\n");
for(const auto& d : detector.detectors() ) {
fmt::print(" {}\n", d.first);
}
}