diff --git a/examples/AlignDet/CMakeLists.txt b/examples/AlignDet/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..59ba50119f79604368761adbb8ef11f04740f3f9 --- /dev/null +++ b/examples/AlignDet/CMakeLists.txt @@ -0,0 +1,33 @@ +cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR) +#--------------------------- +set( PackageName AlignDet ) +#--------------------------- + +project(${PackageName}) + +find_package( DD4hep ) + +include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/DDCore/include + ${CMAKE_SOURCE_DIR}/DDSegmentation/include + ${ROOT_INCLUDE_DIR}) + +include(DD4hep_XML_setup) +file(GLOB sources src/*.cpp) + +add_library(AlignDet SHARED ${sources}) +target_link_libraries(AlignDet DD4hepCore ${ROOT_LIBRARIES} Rint Reflex) +dd4hep_generate_rootmap(AlignDet) + +#--- install target------------------------------------- + +install(TARGETS ${PackageName} + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ) +install(DIRECTORY compact + DESTINATION examples/${PackageName} + PATTERN ".svn" EXCLUDE ) + +# to do: add corresponding uninstall... +#------------------------------------------------------- diff --git a/examples/AlignDet/compact/AlephTPC.xml b/examples/AlignDet/compact/AlephTPC.xml new file mode 100644 index 0000000000000000000000000000000000000000..eafd9fccbdd71fe089a1af3a104567c387737ecc --- /dev/null +++ b/examples/AlignDet/compact/AlephTPC.xml @@ -0,0 +1,116 @@ +<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"> + + <info name="Alignment_aleph_tpc" + title="Alignment test detector with ALPEH TPC like sectors" + author="Markus Frank" + url="http://www.cern.ch/lhcb" + status="development" + version="$Id: compact.xml 513 2013-04-05 14:31:53Z gaede $"> + <comment>Alignment test detector with ALPEH TPC like sectors</comment> + </info> + + <includes> + <gdmlFile ref="elements.xml"/> + <gdmlFile ref="materials.xml"/> + <pyBuilder ref="../drivers"/> + + <!-- + <xml ref="file:../DD4hep.trunk/DDExamples/AlignDet/compact/AlephTPC_alignment.xml"/> + --> + </includes> + + <define> + <constant name="world_side" value="30000"/> + <constant name="world_x" value="world_side"/> + <constant name="world_y" value="world_side"/> + <constant name="world_z" value="world_side"/> + + <constant name="tracking_region_radius" value="10000"/> + <constant name="tracking_region_zmax" value="10000"/> + + <!-- Parameters for the ALEPH TPC 90 model --> + <constant name="TPC_outer_radius" value="1800*mm"/> + <constant name="TPC_inner_radius" value="310*mm"/> + <constant name="TPC_length" value="4700*mm"/> + <constant name="TPC_inner_wall_thickness" value="2*mm"/> + <constant name="TPC_outer_wall_thickness" value="5*mm"/> + </define> + + <materials> + <material name="CH4"> + <D type="density" value="0.000656" unit="g/cm3"/> + <composite n="1" ref="C"/> + <composite n="4" ref="H"/> + </material> + <material name="ArCH4_90"> + <D value="1.0015614" unit="g/cm3"/> + <fraction n="0.9" ref="Ar"/> + <fraction n="0.1" ref="CH4"/> + </material> + + <!-- This is wrong!!!! --> + <material name="Mylar"> + <D value="1.43" unit="g/cm3" /> + <composite n="22" ref="C"/> + <composite n="10" ref="H" /> + <composite n="2" ref="N" /> + <composite n="5" ref="O" /> + </material> + + </materials> + + <limits> + <limitset name="cal_limits"> + <limit name="step_length_max" particles="*" value="5.0" unit="mm" /> + </limitset> + </limits> + + <display> + <!-- Aleph TPC visualization parameters --> + <vis name="TPCVis" alpha="1.0" r="1" g="1" b="0.6" drawingStyle="solid" showDaughters="true" visible="false" top="true"/> + <vis name="TPCInnerWallVis" alpha="1.0" r="0" g="0" b="0.5" drawingStyle="solid" showDaughters="true" visible="true"/> + <vis name="TPCOuterWallVis" alpha="1.0" r="0" g="0.5" b="0" drawingStyle="solid" lineStyle="broken" showDaughters="true" visible="true"/> + <vis name="TPCEndcapVis" alpha="1.0" r="1" g="1" b="0" drawingStyle="solid" showDaughters="true" visible="true"/> + <vis name="TPCSectorKVis" alpha="1.0" r="1" g="0" b="0" drawingStyle="solid" showDaughters="true" visible="true"/> + <vis name="TPCSectorMVis" alpha="1.0" r="0" g="1" b="0" drawingStyle="solid" showDaughters="true" visible="true"/> + <vis name="TPCSectorWVis" alpha="1.0" r="0" g="0" b="1" drawingStyle="solid" showDaughters="true" visible="true"/> + <vis name="TPCGasVis" alpha="1.0" r="1" g="1" b="1" drawingStyle="solid" showDaughters="false" visible="true"/> + <vis name="TPCCathodeVis" alpha="1.0" r="1" g="0.1" b="0.1" drawingStyle="solid" showDaughters="false" visible="true"/> + <vis name="TPCCopperVis" alpha="1.0" r="1" g="0.3" b="0.1" drawingStyle="solid" showDaughters="true" visible="true"/> + <vis name="TPCAluminumVis" alpha="1.0" r="0.9" g="0.9" b="0.9" drawingStyle="solid" showDaughters="true" visible="true"/> + <vis name="TPCGreenVis" alpha="1.0" r="0" g="1" b="0" drawingStyle="solid" showDaughters="true" visible="true"/> + </display> + + <detectors> + <comment>ALEPH TPC example</comment> + <detector id="7" name="TPC" type="AlephTPC" limits="TPCLimits" readout="TPCHits" vis="TPCVis"> + <envelope inner_r="TPC_inner_radius" outer_r="TPC_outer_radius" zhalf="TPC_length/2" vis="invisible"/> + <inner_wall inner_r="TPC_inner_radius" thickness="5*mm" material="Mylar" vis="TPCInnerWallVis"/> + <outer_wall outer_r="TPC_outer_radius" thickness="5*mm" material="Mylar" vis="TPCOuterWallVis"/> + <gas zhalf="2.2*m" material="ArCH4_90" vis="invisible"/> + <pads height="30*mm" width="6.2*mm" pitch="0.5*mm"/> + <trigger_pads height="6.8*mm" width="15*degree" pitch="0.5*mm"/> + <sectors> + <layers> + <layer material="Copper" thickness="0.1*cm" vis="TPCCopperVis" sensitive="true"/> + <layer material="Kapton" thickness="0.03*cm" vis="TPCGreenVis"/> + <layer material="Copper" thickness="0.1*cm" vis="TPCAluminumVis"/> + <layer material="Aluminum" thickness="3*cm"/> + </layers> + <sector type="K" rmin="38*cm" rmax="91*cm" padrows="9" trgrows="8" numwires="148" vis="TPCSectorKVis"/> + <sector type="M" rmin="100*cm" rmax="170*cm" padrows="12" trgrows="11" numwires="196" vis="TPCSectorMVis"/> + <sector type="W" rmin="100*cm" rmax="170*cm" padrows="12" trgrows="11" numwires="196" vis="TPCSectorWVis"/> + </sectors> + <cathode material="Mylar" thickness="0.05*mm" vis="TPCCathodeVis"/> + </detector> + </detectors> + + <readouts> + <readout name="TPCHits"> + <!-- |+++ Detector identifier ++++| |+++loc.coord++++| --> + <id>system:8,side:1,type:2,sector:5,padrow:4,padnum:12</id> + </readout> + </readouts> +</lccdd> diff --git a/examples/AlignDet/compact/AlephTPC_alignment.xml b/examples/AlignDet/compact/AlephTPC_alignment.xml new file mode 100644 index 0000000000000000000000000000000000000000..c7181f69d141adcfa21e2a5752d89c380da3f72f --- /dev/null +++ b/examples/AlignDet/compact/AlephTPC_alignment.xml @@ -0,0 +1,79 @@ +<alignment> + + <open_transaction/> + <subdetectors> + <!-- + Note: The subdetector name MUST be in the list of top level + detector elements attached to the LCDD structure. + +A generic alignment transformation is defined by +- a translation in 3D space identified in XML as a +<position/> element +- a rotation in 3D space around a pivot point specified in XML by +2 elements: the <rotation/> and the <pivot/> element. +The specification of any of the elements is optional: +- The absence of a translation implies the origin (0,0,0) +- The absence of a pivot point implies the origin (0,0,0) +- The absence of a rotation implies the identity rotation. +Any supplied pivot point in this case is ignored. + +<position x="30" y="30" z="80"/> + + --> + + <detelement path="TPC" reset="true" reset_children="true"> + <comment ref="Move the entire TPC in the world volume."/> + <position x="0" y="0" z="0*mm"/> + <rotation x="0" y="0" z="0"/> + + <comment ref="Twist a bit the entire endcap A"/> + <detelement path="/world/TPC/TPC_SideA" check_overlaps="false"> + <position x="0" y="0" z="-500*mm"/> + <rotation x="-0.2" y="-0.2" z="0"/> + + <comment ref="A detector element relative to the parent"/> + <detelement path="TPC_SideA_sector02" check_overlaps="true"> + <position x="0" y="0" z="0"/> + <rotation x="0.5" y="0.1" z="0.2"/> + </detelement> + </detelement> + + <detelement path="TPC_SideA/TPC_SideA_sector03" check_overlaps="true"> + <position x="0" y="0" z="290.0*mm"/> + <rotation x="0" y="pi/2" z="0"/> + <pivot x="0" y="0" z="100"/> + <volume path="TPC_sector_K_layer2_2"> + <position x="0" y="0" z="0.0001*mm"/> + <rotation x="0" y="0.5" z="0"/> + </volume> + </detelement> + + <detelement path="TPC_SideA/TPC_SideA_sector05" check_overlaps="false"> + <position x="0" y="0" z="150.0*mm"/> + <rotation x="0" y="0" z="0"/> + </detelement> + + <detelement path="TPC_SideA/TPC_SideA_sector10" check_overlaps="false"> + <position x="0" y="0" z="450.0*mm"/> + <rotation x="0" y="0" z="pi/4"/> + </detelement> + + <comment ref="Twist a bit the entire endcap B"/> + <detelement path="TPC_SideB" check_overlaps="false"> + <position x="0" y="0" z="0"/> + <rotation x="0" y="0" z="0"/> + + <comment ref="A detector element relative to the parent"/> + <detelement path="TPC_SideB_sector02" check_overlaps="true"> + <position x="0" y="0" z="0"/> + <rotation x="0.5" y="0.1" z="0.2"/> + </detelement> + </detelement> <comment ref="end: TPC side B"/> +<!-- +--> + </detelement> <!-- end: TPC --> + + </subdetectors> + + <close_transaction/> +</alignment> diff --git a/examples/AlignDet/compact/AlephTPC_reset.xml b/examples/AlignDet/compact/AlephTPC_reset.xml new file mode 100644 index 0000000000000000000000000000000000000000..ed5d594c07d8f9e124348a7d3cf864423f60a05b --- /dev/null +++ b/examples/AlignDet/compact/AlephTPC_reset.xml @@ -0,0 +1,26 @@ +<alignment print="true"> + <open_transaction/> + <subdetectors> + <!-- + Note: The subdetector name MUST be in the list of top level + detector elements attached to the LCDD structure. + + --> + <detelement path="TPC" reset="false"> + <detelement path="/world/TPC/TPC_SideA" reset="true" reset_children="false"> + <position x="0" y="0" z="0"/> + <rotation x="-0.25" y="0" z="0"/> + </detelement> +<!-- + <detelement path="/world/TPC/TPC_SideA/TPC_SideA_sector05" reset="true"/> + <detelement path="/world/TPC/TPC_SideA/TPC_SideA_sector02" reset="true"/> + <detelement path="TPC_SideA/TPC_SideA_sector03" reset="true"> + <volume path="layer4_0" reset="true"/> + </detelement> + <detelement path="TPC_SideA/TPC_SideA_sector10" reset="true"/> +--> + <detelement path="/world/TPC/TPC_SideB" reset="true" reset_children="false"/> + </detelement> + </subdetectors> + <close_transaction/> +</alignment> diff --git a/examples/AlignDet/compact/compact.xml b/examples/AlignDet/compact/compact.xml new file mode 100644 index 0000000000000000000000000000000000000000..44ff59cbeaf5980bbca6d450e811bc5698a69e3a --- /dev/null +++ b/examples/AlignDet/compact/compact.xml @@ -0,0 +1,72 @@ +<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"> + + <info name="alignment_boxes" + title="Alignment test with 2 simple boxes" + author="Markus Frank" + url="http://www.cern.ch/lhcb" + status="development" + version="$Id: compact.xml 513 2013-04-05 14:31:53Z gaede $"> + <comment>Alignment test with 2 simple boxes</comment> + </info> + + <includes> + <gdmlFile ref="elements.xml"/> + <gdmlFile ref="materials.xml"/> + <pyBuilder ref="../drivers"/> + </includes> + + <define> + <constant name="world_side" value="30000"/> + <constant name="world_x" value="world_side"/> + <constant name="world_y" value="world_side"/> + <constant name="world_z" value="world_side"/> + + <constant name="tracking_region_radius" value="10000"/> + <constant name="tracking_region_zmax" value="10000"/> + + </define> + + <display> + <vis name="InvisibleNoDaughters" showDaughters="false" visible="false"/> + <vis name="InvisibleWithDaughters" showDaughters="true" visible="false"/> + <vis name="B1_vis" alpha="1.0" r="1" g="0" b="0" showDaughters="true" visible="true"/> + <vis name="B2_vis" alpha="1.0" r="0" g="1" b="0" showDaughters="true" visible="true"/> + </display> + + <!-- detectors> + <comment>Library</comment> + <detector id="1" name="S1" type="Shelf" > + <material name="Steel235"/> + <planes number="2" x="11*cm" y="2*cm" dy="50*cm" z="40*cm" vis="B1_vis" /> + <books number="10" x="10*cm" y="15*cm" z="3*cm" dz="0.2*cm" vis="B2_vis"/> + </detector> + </detectors --> + + <detectors> + <comment>Boxes</comment> + <detector id="1" name="B1" type="BoxSegment" vis="B1_vis"> + <comment>Horizontal box</comment> + <material name="Steel235"/> + <box x="20" y="0.1" z="5"/> + <position x="20" y="10" z="10"/> + <rotation x="1" y="0" z="0"/> + </detector> + <detector id="2" name="B2" type="BoxSegment" vis="B2_vis"> + <comment>Vertical box</comment> + <material name="Steel235"/> + <box x="0.1" y="20" z="5"/> + <position x="0" y="30" z="10"/> + <rotation x="0" y="0" z="0"/> + </detector> + </detectors> + + <alignments> + <alignment name="/world_volume_1/B1_vol_0" shortcut="Box1"> + <position x="0" y="0" z="0"/> + <rotation x="0.5" y="0" z="0"/> + </alignment> + </alignments> + +</lccdd> diff --git a/examples/AlignDet/compact/elements.xml b/examples/AlignDet/compact/elements.xml new file mode 100644 index 0000000000000000000000000000000000000000..e714c3a5cd544e748dd2941967cff515c0b77efc --- /dev/null +++ b/examples/AlignDet/compact/elements.xml @@ -0,0 +1,884 @@ +<materials> + <element Z="89" formula="Ac" name="Ac" > + <atom type="A" unit="g/mol" value="227.028" /> + </element> + <material formula="Ac" name="Actinium" state="solid" > + <RL type="X0" unit="cm" value="0.601558" /> + <NIL type="lambda" unit="cm" value="21.2048" /> + <D type="density" unit="g/cm3" value="10.07" /> + <composite n="1" ref="Ac" /> + </material> + <element Z="47" formula="Ag" name="Ag" > + <atom type="A" unit="g/mol" value="107.868" /> + </element> + <material formula="Ag" name="Silver" state="solid" > + <RL type="X0" unit="cm" value="0.854292" /> + <NIL type="lambda" unit="cm" value="15.8546" /> + <D type="density" unit="g/cm3" value="10.5" /> + <composite n="1" ref="Ag" /> + </material> + <element Z="13" formula="Al" name="Al" > + <atom type="A" unit="g/mol" value="26.9815" /> + </element> + <material formula="Al" name="Aluminum" state="solid" > + <RL type="X0" unit="cm" value="8.89632" /> + <NIL type="lambda" unit="cm" value="38.8766" /> + <D type="density" unit="g/cm3" value="2.699" /> + <composite n="1" ref="Al" /> + </material> + <element Z="95" formula="Am" name="Am" > + <atom type="A" unit="g/mol" value="243.061" /> + </element> + <material formula="Am" name="Americium" state="solid" > + <RL type="X0" unit="cm" value="0.42431" /> + <NIL type="lambda" unit="cm" value="15.9812" /> + <D type="density" unit="g/cm3" value="13.67" /> + <composite n="1" ref="Am" /> + </material> + <element Z="18" formula="Ar" name="Ar" > + <atom type="A" unit="g/mol" value="39.9477" /> + </element> + <material formula="Ar" name="Argon" state="gas" > + <RL type="X0" unit="cm" value="11762.1" /> + <NIL type="lambda" unit="cm" value="71926" /> + <D type="density" unit="g/cm3" value="0.00166201" /> + <composite n="1" ref="Ar" /> + </material> + <element Z="33" formula="As" name="As" > + <atom type="A" unit="g/mol" value="74.9216" /> + </element> + <material formula="As" name="Arsenic" state="solid" > + <RL type="X0" unit="cm" value="2.0838" /> + <NIL type="lambda" unit="cm" value="25.7324" /> + <D type="density" unit="g/cm3" value="5.73" /> + <composite n="1" ref="As" /> + </material> + <element Z="85" formula="At" name="At" > + <atom type="A" unit="g/mol" value="209.987" /> + </element> + <material formula="At" name="Astatine" state="solid" > + <RL type="X0" unit="cm" value="0.650799" /> + <NIL type="lambda" unit="cm" value="22.3202" /> + <D type="density" unit="g/cm3" value="9.32" /> + <composite n="1" ref="At" /> + </material> + <element Z="79" formula="Au" name="Au" > + <atom type="A" unit="g/mol" value="196.967" /> + </element> + <material formula="Au" name="Gold" state="solid" > + <RL type="X0" unit="cm" value="0.334436" /> + <NIL type="lambda" unit="cm" value="10.5393" /> + <D type="density" unit="g/cm3" value="19.32" /> + <composite n="1" ref="Au" /> + </material> + <element Z="5" formula="B" name="B" > + <atom type="A" unit="g/mol" value="10.811" /> + </element> + <material formula="B" name="Boron" state="solid" > + <RL type="X0" unit="cm" value="22.2307" /> + <NIL type="lambda" unit="cm" value="32.2793" /> + <D type="density" unit="g/cm3" value="2.37" /> + <composite n="1" ref="B" /> + </material> + <element Z="56" formula="Ba" name="Ba" > + <atom type="A" unit="g/mol" value="137.327" /> + </element> + <material formula="Ba" name="Barium" state="solid" > + <RL type="X0" unit="cm" value="2.37332" /> + <NIL type="lambda" unit="cm" value="51.6743" /> + <D type="density" unit="g/cm3" value="3.5" /> + <composite n="1" ref="Ba" /> + </material> + <element Z="4" formula="Be" name="Be" > + <atom type="A" unit="g/mol" value="9.01218" /> + </element> + <material formula="Be" name="Beryllium" state="solid" > + <RL type="X0" unit="cm" value="35.276" /> + <NIL type="lambda" unit="cm" value="39.4488" /> + <D type="density" unit="g/cm3" value="1.848" /> + <composite n="1" ref="Be" /> + </material> + <element Z="83" formula="Bi" name="Bi" > + <atom type="A" unit="g/mol" value="208.98" /> + </element> + <material formula="Bi" name="Bismuth" state="solid" > + <RL type="X0" unit="cm" value="0.645388" /> + <NIL type="lambda" unit="cm" value="21.3078" /> + <D type="density" unit="g/cm3" value="9.747" /> + <composite n="1" ref="Bi" /> + </material> + <element Z="97" formula="Bk" name="Bk" > + <atom type="A" unit="g/mol" value="247.07" /> + </element> + <material formula="Bk" name="Berkelium" state="solid" > + <RL type="X0" unit="cm" value="0.406479" /> + <NIL type="lambda" unit="cm" value="15.6902" /> + <D type="density" unit="g/cm3" value="14" /> + <composite n="1" ref="Bk" /> + </material> + <element Z="35" formula="Br" name="Br" > + <atom type="A" unit="g/mol" value="79.9035" /> + </element> + <material formula="Br" name="Bromine" state="gas" > + <RL type="X0" unit="cm" value="1615.12" /> + <NIL type="lambda" unit="cm" value="21299" /> + <D type="density" unit="g/cm3" value="0.0070721" /> + <composite n="1" ref="Br" /> + </material> + <element Z="6" formula="C" name="C" > + <atom type="A" unit="g/mol" value="12.0107" /> + </element> + <material formula="C" name="Carbon" state="solid" > + <RL type="X0" unit="cm" value="21.3485" /> + <NIL type="lambda" unit="cm" value="40.1008" /> + <D type="density" unit="g/cm3" value="2" /> + <composite n="1" ref="C" /> + </material> + <element Z="20" formula="Ca" name="Ca" > + <atom type="A" unit="g/mol" value="40.078" /> + </element> + <material formula="Ca" name="Calcium" state="solid" > + <RL type="X0" unit="cm" value="10.4151" /> + <NIL type="lambda" unit="cm" value="77.3754" /> + <D type="density" unit="g/cm3" value="1.55" /> + <composite n="1" ref="Ca" /> + </material> + <element Z="48" formula="Cd" name="Cd" > + <atom type="A" unit="g/mol" value="112.411" /> + </element> + <material formula="Cd" name="Cadmium" state="solid" > + <RL type="X0" unit="cm" value="1.03994" /> + <NIL type="lambda" unit="cm" value="19.46" /> + <D type="density" unit="g/cm3" value="8.65" /> + <composite n="1" ref="Cd" /> + </material> + <element Z="58" formula="Ce" name="Ce" > + <atom type="A" unit="g/mol" value="140.115" /> + </element> + <material formula="Ce" name="Cerium" state="solid" > + <RL type="X0" unit="cm" value="1.19506" /> + <NIL type="lambda" unit="cm" value="27.3227" /> + <D type="density" unit="g/cm3" value="6.657" /> + <composite n="1" ref="Ce" /> + </material> + <element Z="98" formula="Cf" name="Cf" > + <atom type="A" unit="g/mol" value="251.08" /> + </element> + <material formula="Cf" name="Californium" state="solid" > + <RL type="X0" unit="cm" value="0.568328" /> + <NIL type="lambda" unit="cm" value="22.085" /> + <D type="density" unit="g/cm3" value="10" /> + <composite n="1" ref="Cf" /> + </material> + <element Z="17" formula="Cl" name="Cl" > + <atom type="A" unit="g/mol" value="35.4526" /> + </element> + <material formula="Cl" name="Chlorine" state="gas" > + <RL type="X0" unit="cm" value="6437.34" /> + <NIL type="lambda" unit="cm" value="38723.9" /> + <D type="density" unit="g/cm3" value="0.00299473" /> + <composite n="1" ref="Cl" /> + </material> + <element Z="96" formula="Cm" name="Cm" > + <atom type="A" unit="g/mol" value="247.07" /> + </element> + <material formula="Cm" name="Curium" state="solid" > + <RL type="X0" unit="cm" value="0.428706" /> + <NIL type="lambda" unit="cm" value="16.2593" /> + <D type="density" unit="g/cm3" value="13.51" /> + <composite n="1" ref="Cm" /> + </material> + <element Z="27" formula="Co" name="Co" > + <atom type="A" unit="g/mol" value="58.9332" /> + </element> + <material formula="Co" name="Cobalt" state="solid" > + <RL type="X0" unit="cm" value="1.53005" /> + <NIL type="lambda" unit="cm" value="15.2922" /> + <D type="density" unit="g/cm3" value="8.9" /> + <composite n="1" ref="Co" /> + </material> + <element Z="24" formula="Cr" name="Cr" > + <atom type="A" unit="g/mol" value="51.9961" /> + </element> + <material formula="Cr" name="Chromium" state="solid" > + <RL type="X0" unit="cm" value="2.0814" /> + <NIL type="lambda" unit="cm" value="18.1933" /> + <D type="density" unit="g/cm3" value="7.18" /> + <composite n="1" ref="Cr" /> + </material> + <element Z="55" formula="Cs" name="Cs" > + <atom type="A" unit="g/mol" value="132.905" /> + </element> + <material formula="Cs" name="Cesium" state="solid" > + <RL type="X0" unit="cm" value="4.4342" /> + <NIL type="lambda" unit="cm" value="95.317" /> + <D type="density" unit="g/cm3" value="1.873" /> + <composite n="1" ref="Cs" /> + </material> + <element Z="29" formula="Cu" name="Cu" > + <atom type="A" unit="g/mol" value="63.5456" /> + </element> + <material formula="Cu" name="Copper" state="solid" > + <RL type="X0" unit="cm" value="1.43558" /> + <NIL type="lambda" unit="cm" value="15.5141" /> + <D type="density" unit="g/cm3" value="8.96" /> + <composite n="1" ref="Cu" /> + </material> + <element Z="66" formula="Dy" name="Dy" > + <atom type="A" unit="g/mol" value="162.497" /> + </element> + <material formula="Dy" name="Dysprosium" state="solid" > + <RL type="X0" unit="cm" value="0.85614" /> + <NIL type="lambda" unit="cm" value="22.2923" /> + <D type="density" unit="g/cm3" value="8.55" /> + <composite n="1" ref="Dy" /> + </material> + <element Z="68" formula="Er" name="Er" > + <atom type="A" unit="g/mol" value="167.256" /> + </element> + <material formula="Er" name="Erbium" state="solid" > + <RL type="X0" unit="cm" value="0.788094" /> + <NIL type="lambda" unit="cm" value="21.2923" /> + <D type="density" unit="g/cm3" value="9.066" /> + <composite n="1" ref="Er" /> + </material> + <element Z="63" formula="Eu" name="Eu" > + <atom type="A" unit="g/mol" value="151.964" /> + </element> + <material formula="Eu" name="Europium" state="solid" > + <RL type="X0" unit="cm" value="1.41868" /> + <NIL type="lambda" unit="cm" value="35.6178" /> + <D type="density" unit="g/cm3" value="5.243" /> + <composite n="1" ref="Eu" /> + </material> + <element Z="9" formula="F" name="F" > + <atom type="A" unit="g/mol" value="18.9984" /> + </element> + <material formula="F" name="Fluorine" state="gas" > + <RL type="X0" unit="cm" value="20838.2" /> + <NIL type="lambda" unit="cm" value="59094.3" /> + <D type="density" unit="g/cm3" value="0.00158029" /> + <composite n="1" ref="F" /> + </material> + <element Z="26" formula="Fe" name="Fe" > + <atom type="A" unit="g/mol" value="55.8451" /> + </element> + <material formula="Fe" name="Iron" state="solid" > + <RL type="X0" unit="cm" value="1.75749" /> + <NIL type="lambda" unit="cm" value="16.959" /> + <D type="density" unit="g/cm3" value="7.874" /> + <composite n="1" ref="Fe" /> + </material> + <element Z="87" formula="Fr" name="Fr" > + <atom type="A" unit="g/mol" value="223.02" /> + </element> + <material formula="Fr" name="Francium" state="solid" > + <RL type="X0" unit="cm" value="6.18826" /> + <NIL type="lambda" unit="cm" value="212.263" /> + <D type="density" unit="g/cm3" value="1" /> + <composite n="1" ref="Fr" /> + </material> + <element Z="31" formula="Ga" name="Ga" > + <atom type="A" unit="g/mol" value="69.7231" /> + </element> + <material formula="Ga" name="Gallium" state="solid" > + <RL type="X0" unit="cm" value="2.1128" /> + <NIL type="lambda" unit="cm" value="24.3351" /> + <D type="density" unit="g/cm3" value="5.904" /> + <composite n="1" ref="Ga" /> + </material> + <element Z="64" formula="Gd" name="Gd" > + <atom type="A" unit="g/mol" value="157.252" /> + </element> + <material formula="Gd" name="Gadolinium" state="solid" > + <RL type="X0" unit="cm" value="0.947208" /> + <NIL type="lambda" unit="cm" value="23.9377" /> + <D type="density" unit="g/cm3" value="7.9004" /> + <composite n="1" ref="Gd" /> + </material> + <element Z="32" formula="Ge" name="Ge" > + <atom type="A" unit="g/mol" value="72.6128" /> + </element> + <material formula="Ge" name="Germanium" state="solid" > + <RL type="X0" unit="cm" value="2.3013" /> + <NIL type="lambda" unit="cm" value="27.3344" /> + <D type="density" unit="g/cm3" value="5.323" /> + <composite n="1" ref="Ge" /> + </material> + <element Z="1" formula="H" name="H" > + <atom type="A" unit="g/mol" value="1.00794" /> + </element> + <material formula="H" name="Hydrogen" state="gas" > + <RL type="X0" unit="cm" value="752776" /> + <NIL type="lambda" unit="cm" value="421239" /> + <D type="density" unit="g/cm3" value="8.3748e-05" /> + <composite n="1" ref="H" /> + </material> + <element Z="2" formula="He" name="He" > + <atom type="A" unit="g/mol" value="4.00264" /> + </element> + <material formula="He" name="Helium" state="gas" > + <RL type="X0" unit="cm" value="567113" /> + <NIL type="lambda" unit="cm" value="334266" /> + <D type="density" unit="g/cm3" value="0.000166322" /> + <composite n="1" ref="He" /> + </material> + <element Z="72" formula="Hf" name="Hf" > + <atom type="A" unit="g/mol" value="178.485" /> + </element> + <material formula="Hf" name="Hafnium" state="solid" > + <RL type="X0" unit="cm" value="0.517717" /> + <NIL type="lambda" unit="cm" value="14.7771" /> + <D type="density" unit="g/cm3" value="13.31" /> + <composite n="1" ref="Hf" /> + </material> + <element Z="80" formula="Hg" name="Hg" > + <atom type="A" unit="g/mol" value="200.599" /> + </element> + <material formula="Hg" name="Mercury" state="solid" > + <RL type="X0" unit="cm" value="0.475241" /> + <NIL type="lambda" unit="cm" value="15.105" /> + <D type="density" unit="g/cm3" value="13.546" /> + <composite n="1" ref="Hg" /> + </material> + <element Z="67" formula="Ho" name="Ho" > + <atom type="A" unit="g/mol" value="164.93" /> + </element> + <material formula="Ho" name="Holmium" state="solid" > + <RL type="X0" unit="cm" value="0.822447" /> + <NIL type="lambda" unit="cm" value="21.8177" /> + <D type="density" unit="g/cm3" value="8.795" /> + <composite n="1" ref="Ho" /> + </material> + <element Z="53" formula="I" name="I" > + <atom type="A" unit="g/mol" value="126.904" /> + </element> + <material formula="I" name="Iodine" state="solid" > + <RL type="X0" unit="cm" value="1.72016" /> + <NIL type="lambda" unit="cm" value="35.6583" /> + <D type="density" unit="g/cm3" value="4.93" /> + <composite n="1" ref="I" /> + </material> + <element Z="49" formula="In" name="In" > + <atom type="A" unit="g/mol" value="114.818" /> + </element> + <material formula="In" name="Indium" state="solid" > + <RL type="X0" unit="cm" value="1.21055" /> + <NIL type="lambda" unit="cm" value="23.2468" /> + <D type="density" unit="g/cm3" value="7.31" /> + <composite n="1" ref="In" /> + </material> + <element Z="77" formula="Ir" name="Ir" > + <atom type="A" unit="g/mol" value="192.216" /> + </element> + <material formula="Ir" name="Iridium" state="solid" > + <RL type="X0" unit="cm" value="0.294142" /> + <NIL type="lambda" unit="cm" value="9.01616" /> + <D type="density" unit="g/cm3" value="22.42" /> + <composite n="1" ref="Ir" /> + </material> + <element Z="19" formula="K" name="K" > + <atom type="A" unit="g/mol" value="39.0983" /> + </element> + <material formula="K" name="Potassium" state="solid" > + <RL type="X0" unit="cm" value="20.0871" /> + <NIL type="lambda" unit="cm" value="138.041" /> + <D type="density" unit="g/cm3" value="0.862" /> + <composite n="1" ref="K" /> + </material> + <element Z="36" formula="Kr" name="Kr" > + <atom type="A" unit="g/mol" value="83.7993" /> + </element> + <material formula="Kr" name="Krypton" state="gas" > + <RL type="X0" unit="cm" value="3269.44" /> + <NIL type="lambda" unit="cm" value="43962.9" /> + <D type="density" unit="g/cm3" value="0.00347832" /> + <composite n="1" ref="Kr" /> + </material> + <element Z="57" formula="La" name="La" > + <atom type="A" unit="g/mol" value="138.905" /> + </element> + <material formula="La" name="Lanthanum" state="solid" > + <RL type="X0" unit="cm" value="1.32238" /> + <NIL type="lambda" unit="cm" value="29.441" /> + <D type="density" unit="g/cm3" value="6.154" /> + <composite n="1" ref="La" /> + </material> + <element Z="3" formula="Li" name="Li" > + <atom type="A" unit="g/mol" value="6.94003" /> + </element> + <material formula="Li" name="Lithium" state="solid" > + <RL type="X0" unit="cm" value="154.997" /> + <NIL type="lambda" unit="cm" value="124.305" /> + <D type="density" unit="g/cm3" value="0.534" /> + <composite n="1" ref="Li" /> + </material> + <element Z="71" formula="Lu" name="Lu" > + <atom type="A" unit="g/mol" value="174.967" /> + </element> + <material formula="Lu" name="Lutetium" state="solid" > + <RL type="X0" unit="cm" value="0.703651" /> + <NIL type="lambda" unit="cm" value="19.8916" /> + <D type="density" unit="g/cm3" value="9.84" /> + <composite n="1" ref="Lu" /> + </material> + <element Z="12" formula="Mg" name="Mg" > + <atom type="A" unit="g/mol" value="24.305" /> + </element> + <material formula="Mg" name="Magnesium" state="solid" > + <RL type="X0" unit="cm" value="14.3859" /> + <NIL type="lambda" unit="cm" value="58.7589" /> + <D type="density" unit="g/cm3" value="1.74" /> + <composite n="1" ref="Mg" /> + </material> + <element Z="25" formula="Mn" name="Mn" > + <atom type="A" unit="g/mol" value="54.938" /> + </element> + <material formula="Mn" name="Manganese" state="solid" > + <RL type="X0" unit="cm" value="1.96772" /> + <NIL type="lambda" unit="cm" value="17.8701" /> + <D type="density" unit="g/cm3" value="7.44" /> + <composite n="1" ref="Mn" /> + </material> + <element Z="42" formula="Mo" name="Mo" > + <atom type="A" unit="g/mol" value="95.9313" /> + </element> + <material formula="Mo" name="Molybdenum" state="solid" > + <RL type="X0" unit="cm" value="0.959107" /> + <NIL type="lambda" unit="cm" value="15.6698" /> + <D type="density" unit="g/cm3" value="10.22" /> + <composite n="1" ref="Mo" /> + </material> + <element Z="7" formula="N" name="N" > + <atom type="A" unit="g/mol" value="14.0068" /> + </element> + <material formula="N" name="Nitrogen" state="gas" > + <RL type="X0" unit="cm" value="32602.2" /> + <NIL type="lambda" unit="cm" value="72430.3" /> + <D type="density" unit="g/cm3" value="0.0011652" /> + <composite n="1" ref="N" /> + </material> + <element Z="11" formula="Na" name="Na" > + <atom type="A" unit="g/mol" value="22.9898" /> + </element> + <material formula="Na" name="Sodium" state="solid" > + <RL type="X0" unit="cm" value="28.5646" /> + <NIL type="lambda" unit="cm" value="102.463" /> + <D type="density" unit="g/cm3" value="0.971" /> + <composite n="1" ref="Na" /> + </material> + <element Z="41" formula="Nb" name="Nb" > + <atom type="A" unit="g/mol" value="92.9064" /> + </element> + <material formula="Nb" name="Niobium" state="solid" > + <RL type="X0" unit="cm" value="1.15783" /> + <NIL type="lambda" unit="cm" value="18.4846" /> + <D type="density" unit="g/cm3" value="8.57" /> + <composite n="1" ref="Nb" /> + </material> + <element Z="60" formula="Nd" name="Nd" > + <atom type="A" unit="g/mol" value="144.236" /> + </element> + <material formula="Nd" name="Neodymium" state="solid" > + <RL type="X0" unit="cm" value="1.11667" /> + <NIL type="lambda" unit="cm" value="26.6308" /> + <D type="density" unit="g/cm3" value="6.9" /> + <composite n="1" ref="Nd" /> + </material> + <element Z="10" formula="Ne" name="Ne" > + <atom type="A" unit="g/mol" value="20.18" /> + </element> + <material formula="Ne" name="Neon" state="gas" > + <RL type="X0" unit="cm" value="34504.8" /> + <NIL type="lambda" unit="cm" value="114322" /> + <D type="density" unit="g/cm3" value="0.000838505" /> + <composite n="1" ref="Ne" /> + </material> + <element Z="28" formula="Ni" name="Ni" > + <atom type="A" unit="g/mol" value="58.6933" /> + </element> + <material formula="Ni" name="Nickel" state="solid" > + <RL type="X0" unit="cm" value="1.42422" /> + <NIL type="lambda" unit="cm" value="15.2265" /> + <D type="density" unit="g/cm3" value="8.902" /> + <composite n="1" ref="Ni" /> + </material> + <element Z="93" formula="Np" name="Np" > + <atom type="A" unit="g/mol" value="237.048" /> + </element> + <material formula="Np" name="Neptunium" state="solid" > + <RL type="X0" unit="cm" value="0.289676" /> + <NIL type="lambda" unit="cm" value="10.6983" /> + <D type="density" unit="g/cm3" value="20.25" /> + <composite n="1" ref="Np" /> + </material> + <element Z="8" formula="O" name="O" > + <atom type="A" unit="g/mol" value="15.9994" /> + </element> + <material formula="O" name="Oxygen" state="gas" > + <RL type="X0" unit="cm" value="25713.8" /> + <NIL type="lambda" unit="cm" value="66233.9" /> + <D type="density" unit="g/cm3" value="0.00133151" /> + <composite n="1" ref="O" /> + </material> + <element Z="76" formula="Os" name="Os" > + <atom type="A" unit="g/mol" value="190.225" /> + </element> + <material formula="Os" name="Osmium" state="solid" > + <RL type="X0" unit="cm" value="0.295861" /> + <NIL type="lambda" unit="cm" value="8.92553" /> + <D type="density" unit="g/cm3" value="22.57" /> + <composite n="1" ref="Os" /> + </material> + <element Z="15" formula="P" name="P" > + <atom type="A" unit="g/mol" value="30.9738" /> + </element> + <material formula="P" name="Phosphorus" state="solid" > + <RL type="X0" unit="cm" value="9.63879" /> + <NIL type="lambda" unit="cm" value="49.9343" /> + <D type="density" unit="g/cm3" value="2.2" /> + <composite n="1" ref="P" /> + </material> + <element Z="91" formula="Pa" name="Pa" > + <atom type="A" unit="g/mol" value="231.036" /> + </element> + <material formula="Pa" name="Protactinium" state="solid" > + <RL type="X0" unit="cm" value="0.38607" /> + <NIL type="lambda" unit="cm" value="13.9744" /> + <D type="density" unit="g/cm3" value="15.37" /> + <composite n="1" ref="Pa" /> + </material> + <element Z="82" formula="Pb" name="Pb" > + <atom type="A" unit="g/mol" value="207.217" /> + </element> + <material formula="Pb" name="Lead" state="solid" > + <RL type="X0" unit="cm" value="0.561253" /> + <NIL type="lambda" unit="cm" value="18.2607" /> + <D type="density" unit="g/cm3" value="11.35" /> + <composite n="1" ref="Pb" /> + </material> + <element Z="46" formula="Pd" name="Pd" > + <atom type="A" unit="g/mol" value="106.415" /> + </element> + <material formula="Pd" name="Palladium" state="solid" > + <RL type="X0" unit="cm" value="0.765717" /> + <NIL type="lambda" unit="cm" value="13.7482" /> + <D type="density" unit="g/cm3" value="12.02" /> + <composite n="1" ref="Pd" /> + </material> + <element Z="61" formula="Pm" name="Pm" > + <atom type="A" unit="g/mol" value="144.913" /> + </element> + <material formula="Pm" name="Promethium" state="solid" > + <RL type="X0" unit="cm" value="1.04085" /> + <NIL type="lambda" unit="cm" value="25.4523" /> + <D type="density" unit="g/cm3" value="7.22" /> + <composite n="1" ref="Pm" /> + </material> + <element Z="84" formula="Po" name="Po" > + <atom type="A" unit="g/mol" value="208.982" /> + </element> + <material formula="Po" name="Polonium" state="solid" > + <RL type="X0" unit="cm" value="0.661092" /> + <NIL type="lambda" unit="cm" value="22.2842" /> + <D type="density" unit="g/cm3" value="9.32" /> + <composite n="1" ref="Po" /> + </material> + <element Z="59" formula="Pr" name="Pr" > + <atom type="A" unit="g/mol" value="140.908" /> + </element> + <material formula="Pr" name="Praseodymium" state="solid" > + <RL type="X0" unit="cm" value="1.1562" /> + <NIL type="lambda" unit="cm" value="27.1312" /> + <D type="density" unit="g/cm3" value="6.71" /> + <composite n="1" ref="Pr" /> + </material> + <element Z="78" formula="Pt" name="Pt" > + <atom type="A" unit="g/mol" value="195.078" /> + </element> + <material formula="Pt" name="Platinum" state="solid" > + <RL type="X0" unit="cm" value="0.305053" /> + <NIL type="lambda" unit="cm" value="9.46584" /> + <D type="density" unit="g/cm3" value="21.45" /> + <composite n="1" ref="Pt" /> + </material> + <element Z="94" formula="Pu" name="Pu" > + <atom type="A" unit="g/mol" value="244.064" /> + </element> + <material formula="Pu" name="Plutonium" state="solid" > + <RL type="X0" unit="cm" value="0.298905" /> + <NIL type="lambda" unit="cm" value="11.0265" /> + <D type="density" unit="g/cm3" value="19.84" /> + <composite n="1" ref="Pu" /> + </material> + <element Z="88" formula="Ra" name="Ra" > + <atom type="A" unit="g/mol" value="226.025" /> + </element> + <material formula="Ra" name="Radium" state="solid" > + <RL type="X0" unit="cm" value="1.22987" /> + <NIL type="lambda" unit="cm" value="42.6431" /> + <D type="density" unit="g/cm3" value="5" /> + <composite n="1" ref="Ra" /> + </material> + <element Z="37" formula="Rb" name="Rb" > + <atom type="A" unit="g/mol" value="85.4677" /> + </element> + <material formula="Rb" name="Rubidium" state="solid" > + <RL type="X0" unit="cm" value="7.19774" /> + <NIL type="lambda" unit="cm" value="100.218" /> + <D type="density" unit="g/cm3" value="1.532" /> + <composite n="1" ref="Rb" /> + </material> + <element Z="75" formula="Re" name="Re" > + <atom type="A" unit="g/mol" value="186.207" /> + </element> + <material formula="Re" name="Rhenium" state="solid" > + <RL type="X0" unit="cm" value="0.318283" /> + <NIL type="lambda" unit="cm" value="9.5153" /> + <D type="density" unit="g/cm3" value="21.02" /> + <composite n="1" ref="Re" /> + </material> + <element Z="45" formula="Rh" name="Rh" > + <atom type="A" unit="g/mol" value="102.906" /> + </element> + <material formula="Rh" name="Rhodium" state="solid" > + <RL type="X0" unit="cm" value="0.746619" /> + <NIL type="lambda" unit="cm" value="13.2083" /> + <D type="density" unit="g/cm3" value="12.41" /> + <composite n="1" ref="Rh" /> + </material> + <element Z="86" formula="Rn" name="Rn" > + <atom type="A" unit="g/mol" value="222.018" /> + </element> + <material formula="Rn" name="Radon" state="gas" > + <RL type="X0" unit="cm" value="697.777" /> + <NIL type="lambda" unit="cm" value="23532" /> + <D type="density" unit="g/cm3" value="0.00900662" /> + <composite n="1" ref="Rn" /> + </material> + <element Z="44" formula="Ru" name="Ru" > + <atom type="A" unit="g/mol" value="101.065" /> + </element> + <material formula="Ru" name="Ruthenium" state="solid" > + <RL type="X0" unit="cm" value="0.764067" /> + <NIL type="lambda" unit="cm" value="13.1426" /> + <D type="density" unit="g/cm3" value="12.41" /> + <composite n="1" ref="Ru" /> + </material> + <element Z="16" formula="S" name="S" > + <atom type="A" unit="g/mol" value="32.0661" /> + </element> + <material formula="S" name="Sulfur" state="solid" > + <RL type="X0" unit="cm" value="9.74829" /> + <NIL type="lambda" unit="cm" value="55.6738" /> + <D type="density" unit="g/cm3" value="2" /> + <composite n="1" ref="S" /> + </material> + <element Z="51" formula="Sb" name="Sb" > + <atom type="A" unit="g/mol" value="121.76" /> + </element> + <material formula="Sb" name="Antimony" state="solid" > + <RL type="X0" unit="cm" value="1.30401" /> + <NIL type="lambda" unit="cm" value="25.8925" /> + <D type="density" unit="g/cm3" value="6.691" /> + <composite n="1" ref="Sb" /> + </material> + <element Z="21" formula="Sc" name="Sc" > + <atom type="A" unit="g/mol" value="44.9559" /> + </element> + <material formula="Sc" name="Scandium" state="solid" > + <RL type="X0" unit="cm" value="5.53545" /> + <NIL type="lambda" unit="cm" value="41.609" /> + <D type="density" unit="g/cm3" value="2.989" /> + <composite n="1" ref="Sc" /> + </material> + <element Z="34" formula="Se" name="Se" > + <atom type="A" unit="g/mol" value="78.9594" /> + </element> + <material formula="Se" name="Selenium" state="solid" > + <RL type="X0" unit="cm" value="2.64625" /> + <NIL type="lambda" unit="cm" value="33.356" /> + <D type="density" unit="g/cm3" value="4.5" /> + <composite n="1" ref="Se" /> + </material> + <element Z="14" formula="Si" name="Si" > + <atom type="A" unit="g/mol" value="28.0854" /> + </element> + <material formula="Si" name="Silicon" state="solid" > + <RL type="X0" unit="cm" value="9.36607" /> + <NIL type="lambda" unit="cm" value="45.7531" /> + <D type="density" unit="g/cm3" value="2.33" /> + <composite n="1" ref="Si" /> + </material> + <element Z="62" formula="Sm" name="Sm" > + <atom type="A" unit="g/mol" value="150.366" /> + </element> + <material formula="Sm" name="Samarium" state="solid" > + <RL type="X0" unit="cm" value="1.01524" /> + <NIL type="lambda" unit="cm" value="24.9892" /> + <D type="density" unit="g/cm3" value="7.46" /> + <composite n="1" ref="Sm" /> + </material> + <element Z="50" formula="Sn" name="Sn" > + <atom type="A" unit="g/mol" value="118.71" /> + </element> + <material formula="Sn" name="Tin" state="solid" > + <RL type="X0" unit="cm" value="1.20637" /> + <NIL type="lambda" unit="cm" value="23.4931" /> + <D type="density" unit="g/cm3" value="7.31" /> + <composite n="1" ref="Sn" /> + </material> + <element Z="38" formula="Sr" name="Sr" > + <atom type="A" unit="g/mol" value="87.6166" /> + </element> + <material formula="Sr" name="Strontium" state="solid" > + <RL type="X0" unit="cm" value="4.237" /> + <NIL type="lambda" unit="cm" value="61.0238" /> + <D type="density" unit="g/cm3" value="2.54" /> + <composite n="1" ref="Sr" /> + </material> + <element Z="73" formula="Ta" name="Ta" > + <atom type="A" unit="g/mol" value="180.948" /> + </element> + <material formula="Ta" name="Tantalum" state="solid" > + <RL type="X0" unit="cm" value="0.409392" /> + <NIL type="lambda" unit="cm" value="11.8846" /> + <D type="density" unit="g/cm3" value="16.654" /> + <composite n="1" ref="Ta" /> + </material> + <element Z="65" formula="Tb" name="Tb" > + <atom type="A" unit="g/mol" value="158.925" /> + </element> + <material formula="Tb" name="Terbium" state="solid" > + <RL type="X0" unit="cm" value="0.893977" /> + <NIL type="lambda" unit="cm" value="23.0311" /> + <D type="density" unit="g/cm3" value="8.229" /> + <composite n="1" ref="Tb" /> + </material> + <element Z="43" formula="Tc" name="Tc" > + <atom type="A" unit="g/mol" value="97.9072" /> + </element> + <material formula="Tc" name="Technetium" state="solid" > + <RL type="X0" unit="cm" value="0.833149" /> + <NIL type="lambda" unit="cm" value="14.0185" /> + <D type="density" unit="g/cm3" value="11.5" /> + <composite n="1" ref="Tc" /> + </material> + <element Z="52" formula="Te" name="Te" > + <atom type="A" unit="g/mol" value="127.603" /> + </element> + <material formula="Te" name="Tellurium" state="solid" > + <RL type="X0" unit="cm" value="1.41457" /> + <NIL type="lambda" unit="cm" value="28.1797" /> + <D type="density" unit="g/cm3" value="6.24" /> + <composite n="1" ref="Te" /> + </material> + <element Z="90" formula="Th" name="Th" > + <atom type="A" unit="g/mol" value="232.038" /> + </element> + <material formula="Th" name="Thorium" state="solid" > + <RL type="X0" unit="cm" value="0.51823" /> + <NIL type="lambda" unit="cm" value="18.353" /> + <D type="density" unit="g/cm3" value="11.72" /> + <composite n="1" ref="Th" /> + </material> + <element Z="22" formula="Ti" name="Ti" > + <atom type="A" unit="g/mol" value="47.8667" /> + </element> + <material formula="Ti" name="Titanium" state="solid" > + <RL type="X0" unit="cm" value="3.5602" /> + <NIL type="lambda" unit="cm" value="27.9395" /> + <D type="density" unit="g/cm3" value="4.54" /> + <composite n="1" ref="Ti" /> + </material> + <element Z="81" formula="Tl" name="Tl" > + <atom type="A" unit="g/mol" value="204.383" /> + </element> + <material formula="Tl" name="Thallium" state="solid" > + <RL type="X0" unit="cm" value="0.547665" /> + <NIL type="lambda" unit="cm" value="17.6129" /> + <D type="density" unit="g/cm3" value="11.72" /> + <composite n="1" ref="Tl" /> + </material> + <element Z="69" formula="Tm" name="Tm" > + <atom type="A" unit="g/mol" value="168.934" /> + </element> + <material formula="Tm" name="Thulium" state="solid" > + <RL type="X0" unit="cm" value="0.754428" /> + <NIL type="lambda" unit="cm" value="20.7522" /> + <D type="density" unit="g/cm3" value="9.321" /> + <composite n="1" ref="Tm" /> + </material> + <element Z="92" formula="U" name="U" > + <atom type="A" unit="g/mol" value="238.029" /> + </element> + <material formula="U" name="Uranium" state="solid" > + <RL type="X0" unit="cm" value="0.31663" /> + <NIL type="lambda" unit="cm" value="11.4473" /> + <D type="density" unit="g/cm3" value="18.95" /> + <composite n="1" ref="U" /> + </material> + <element Z="23" formula="V" name="V" > + <atom type="A" unit="g/mol" value="50.9415" /> + </element> + <material formula="V" name="Vanadium" state="solid" > + <RL type="X0" unit="cm" value="2.59285" /> + <NIL type="lambda" unit="cm" value="21.2187" /> + <D type="density" unit="g/cm3" value="6.11" /> + <composite n="1" ref="V" /> + </material> + <element Z="74" formula="W" name="W" > + <atom type="A" unit="g/mol" value="183.842" /> + </element> + <material formula="W" name="Tungsten" state="solid" > + <RL type="X0" unit="cm" value="0.350418" /> + <NIL type="lambda" unit="cm" value="10.3057" /> + <D type="density" unit="g/cm3" value="19.3" /> + <composite n="1" ref="W" /> + </material> + <element Z="54" formula="Xe" name="Xe" > + <atom type="A" unit="g/mol" value="131.292" /> + </element> + <material formula="Xe" name="Xenon" state="gas" > + <RL type="X0" unit="cm" value="1546.2" /> + <NIL type="lambda" unit="cm" value="32477.9" /> + <D type="density" unit="g/cm3" value="0.00548536" /> + <composite n="1" ref="Xe" /> + </material> + <element Z="39" formula="Y" name="Y" > + <atom type="A" unit="g/mol" value="88.9058" /> + </element> + <material formula="Y" name="Yttrium" state="solid" > + <RL type="X0" unit="cm" value="2.32943" /> + <NIL type="lambda" unit="cm" value="34.9297" /> + <D type="density" unit="g/cm3" value="4.469" /> + <composite n="1" ref="Y" /> + </material> + <element Z="70" formula="Yb" name="Yb" > + <atom type="A" unit="g/mol" value="173.038" /> + </element> + <material formula="Yb" name="Ytterbium" state="solid" > + <RL type="X0" unit="cm" value="1.04332" /> + <NIL type="lambda" unit="cm" value="28.9843" /> + <D type="density" unit="g/cm3" value="6.73" /> + <composite n="1" ref="Yb" /> + </material> + <element Z="30" formula="Zn" name="Zn" > + <atom type="A" unit="g/mol" value="65.3955" /> + </element> + <material formula="Zn" name="Zinc" state="solid" > + <RL type="X0" unit="cm" value="1.74286" /> + <NIL type="lambda" unit="cm" value="19.8488" /> + <D type="density" unit="g/cm3" value="7.133" /> + <composite n="1" ref="Zn" /> + </material> + <element Z="40" formula="Zr" name="Zr" > + <atom type="A" unit="g/mol" value="91.2236" /> + </element> + <material formula="Zr" name="Zirconium" state="solid" > + <RL type="X0" unit="cm" value="1.56707" /> + <NIL type="lambda" unit="cm" value="24.2568" /> + <D type="density" unit="g/cm3" value="6.506" /> + <composite n="1" ref="Zr" /> + </material> +</materials> \ No newline at end of file diff --git a/examples/AlignDet/compact/materials.xml b/examples/AlignDet/compact/materials.xml new file mode 100644 index 0000000000000000000000000000000000000000..12107bafc23a2b39c32e457b34ec7568e5139993 --- /dev/null +++ b/examples/AlignDet/compact/materials.xml @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="UTF-8"?> +<materials> + + <!-- + Air by weight from + + http://www.engineeringtoolbox.com/air-composition-24_212.html + --> + <material name="Air"> + <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"/> + </material> + + <material name="Vacuum"> + <D type="density" unit="g/cm3" value="0.00000001" /> + <fraction n="1" ref="H" /> + </material> + + <material name="Epoxy"> + <D type="density" value="1.3" unit="g/cm3"/> + <composite n="44" ref="H"/> + <composite n="15" ref="C"/> + <composite n="7" ref="O"/> + </material> + + <material name="Quartz"> + <D type="density" value="2.2" unit="g/cm3"/> + <composite n="1" ref="Si"/> + <composite n="2" ref="O"/> + </material> + + <material name="G10"> + <D type="density" value="1.7" unit="g/cm3"/> + <fraction n="0.08" ref="Cl"/> + <fraction n="0.773" ref="Quartz"/> + <fraction n="0.147" ref="Epoxy"/> + </material> + + <material name="Polystyrene"> + <D value="1.032" unit="g/cm3"/> + <composite n="19" ref="C"/> + <composite n="21" ref="H"/> + </material> + + <material name="Steel235"> + <D value="7.85" unit="g/cm3"/> + <fraction n="0.998" ref="Fe"/> + <fraction n=".002" ref="C"/> + </material> + + <material name="SiliconOxide"> + <D type="density" value="2.65" unit="g/cm3"/> + <composite n="1" ref="Si"/> + <composite n="2" ref="O"/> + </material> + + <material name="BoronOxide"> + <D type="density" value="2.46" unit="g/cm3"/> + <composite n="2" ref="B"/> + <composite n="3" ref="O"/> + </material> + + <material name="SodiumOxide"> + <D type="density" value="2.65" unit="g/cm3"/> + <composite n="2" ref="Na"/> + <composite n="1" ref="O"/> + </material> + + <material name="AluminumOxide"> + <D type="density" value="3.89" unit="g/cm3"/> + <composite n="2" ref="Al"/> + <composite n="3" ref="O"/> + </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"/> + </material> + + <material name="CarbonFiber"> + <D type="density" value="1.5" unit="g/cm3"/> + <fraction n="0.65" ref="C"/> + <fraction n="0.35" ref="Epoxy"/> + </material> + + <material name="CarbonFiber_50D"> + <D type="density" value="0.75" unit="g/cm3"/> + <fraction n="0.65" ref="C"/> + <fraction n="0.35" ref="Epoxy"/> + </material> + + <material name="Rohacell31"> + <D type="density" value="0.032" unit="g/cm3"/> + <composite n="9" ref="C"/> + <composite n="13" ref="H"/> + <composite n="2" ref="O"/> + <composite n="1" ref="N"/> + </material> + + <material name="Rohacell31_50D"> + <D type="density" value="0.016" unit="g/cm3"/> + <composite n="9" ref="C"/> + <composite n="13" ref="H"/> + <composite n="2" ref="O"/> + <composite n="1" ref="N"/> + </material> + + <material name="RPCGasDefault" state="gas"> + <D type="density" value="0.0037" unit="g/cm3"/> + <composite n="209" ref="C"/> + <composite n="239" ref="H"/> + <composite n="381" ref="F"/> + </material> + + <material name="PolystyreneFoam"> + <D type="density" value="0.0056" unit="g/cm3"/> + <fraction n="1.0" ref="Polystyrene"/> + </material> + + <material name="Kapton"> + <D value="1.43" unit="g/cm3" /> + <composite n="22" ref="C"/> + <composite n="10" ref="H" /> + <composite n="2" ref="N" /> + <composite n="5" ref="O" /> + </material> + + <material name="PEEK"> + <D value="1.37" unit="g/cm3" /> + <composite n="19" ref="C"/> + <composite n="12" ref="H" /> + <composite n="3" ref="O" /> + </material> + +</materials> diff --git a/examples/AlignDet/drivers/BoxSegment.py b/examples/AlignDet/drivers/BoxSegment.py new file mode 100644 index 0000000000000000000000000000000000000000..2e4e6e6eb1b8153ad87892e5968378fc25df6275 --- /dev/null +++ b/examples/AlignDet/drivers/BoxSegment.py @@ -0,0 +1,15 @@ +def detector_BoxSegment(lcdd, det): + box = det.find('box') + mat = det.find('material') + pos = det.find('position') + rot = det.find('rotation') + mother = lcdd.worldVolume() + de = DetElement(lcdd, det.name, det.type, det.id) + sha = Box(lcdd, det.name+'_envelope', box.x, box.y, box.z) + vol = Volume(lcdd, det.name+'_envelope_volume', sha, lcdd.material(mat.name)) + phv = mother.placeVolume(vol, Position(pos.x, pos.y, pos.z), + Rotation(rot.x, rot.y, rot.z)) + vol.setVisAttributes(lcdd, det.vis) + phv.addPhysVolID('id',det.id) + de.addPlacement(phv) + return de diff --git a/examples/AlignDet/drivers/Shelf.py b/examples/AlignDet/drivers/Shelf.py new file mode 100644 index 0000000000000000000000000000000000000000..d221cc1aa1e24db5f96e3c48aa68d8f4874b2dda --- /dev/null +++ b/examples/AlignDet/drivers/Shelf.py @@ -0,0 +1,39 @@ +def detector_Shelf(lcdd, det): + + plane = det.find('planes') + mat = det.find('material') + #pos = det.find('position') + #rot = det.find('rotation') + book = det.find('books') + + #---Construct the ensamble plane+books volume------------------------------------------------------------- + e_vol = Volume(lcdd, 'ensemble', Box(lcdd,'box', plane.x, plane.y+book.y, plane.z), lcdd.material('Air')) + e_vol.setVisAttributes(lcdd,'InvisibleWithDaughters') + + #---Construct the plane and place it---------------------------------------------------------------------- + p_vol = Volume(lcdd, 'plane', Box(lcdd, 'plane', plane.x, plane.y, plane.z), lcdd.material(mat.name)) + p_vol.setVisAttributes(lcdd, plane.vis) + e_vol.placeVolume(p_vol, Position(0,-book.y,0)) + + #---Construct a book and place it number of times--------------------------------------------------------- + b_vol = Volume(lcdd, 'book',Box(lcdd, 'book', book.x, book.y, book.z), lcdd.material('Carbon')) + b_vol.setVisAttributes(lcdd, book.vis) + x,y,z = plane.x-book.x, plane.y, -plane.z+book.z + for n in range(book.number): + e_vol.placeVolume(b_vol, Position(x,y,z)) + z += 2*book.z + book.getF('dz') + + #--Construct the overal envelope and Detector element----------------------------------------------------- + g_x, g_y, g_z = plane.x, plane.number*plane.getF('dy'), plane.z + g_vol = Volume(lcdd, det.name, Box(lcdd,'box', g_x, g_y, g_z), lcdd.material('Air')) + g_vol.setVisAttributes(lcdd,'InvisibleWithDaughters') + de = DetElement(lcdd, det.name, det.type, det.id) + phv = lcdd.worldVolume().placeVolume(g_vol, Position(g_x,g_y,g_z)) + phv.addPhysVolID('id',det.id) + de.addPlacement(phv) + x,y,z = 0,book.y+plane.y-2*plane.getF('dy'),0 + for n in range(plane.number): + g_vol.placeVolume(e_vol, Position(x,y,z)) + y += plane.getF('dy') + #---Return detector element--------------------------------------------------------------------------------- + return de diff --git a/examples/AlignDet/src/AlephTPC_geo.cpp b/examples/AlignDet/src/AlephTPC_geo.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b77552aaa591198639d9d3c74cb05a5534f9170b --- /dev/null +++ b/examples/AlignDet/src/AlephTPC_geo.cpp @@ -0,0 +1,322 @@ +// $Id: Tesla_tpc02_geo.cpp 581 2013-05-30 21:05:58Z markus.frank $ +//==================================================================== +// AIDA Detector description implementation for LCD +//-------------------------------------------------------------------- +// +// Author : M.Frank +// +//==================================================================== +#include "DD4hep/DetFactoryHelper.h" +#include "TGeoArb8.h" +#include <iomanip> + +using namespace std; +using namespace DD4hep; +using namespace DD4hep::Geometry; + +static void printCoordinates(char sector_type, const char* volume, double v[8][2]) { +#if 0 + cout << "Sector type " << sector_type << " Volume " << volume << endl; + cout << "Coordinate 1: x:" << setw(10) << v[0][0] << " y:" << setw(10) << v[0][1] << endl; + cout << "Coordinate 2: x:" << setw(10) << v[1][0] << " y:" << setw(10) << v[1][1] << endl; + cout << "Coordinate 3: x:" << setw(10) << v[2][0] << " y:" << setw(10) << v[2][1] << endl; + cout << "Coordinate 4: x:" << setw(10) << v[3][0] << " y:" << setw(10) << v[3][1] << endl; +#endif +} + +static Ref_t create_element(LCDD& lcdd, xml_h e, SensitiveDetector sens_det) { + xml_det_t x_det = e; + string name = x_det.nameStr(); + DetElement sdet(name,x_det.id()); + Volume motherVol = lcdd.pickMotherVolume(sdet); + xml_comp_t x_envelope = x_det.child(_Unicode(envelope)); + xml_comp_t x_sectors = x_det.child(_Unicode(sectors)); + xml_comp_t x_inner = x_det.child(_Unicode(inner_wall)); + xml_comp_t x_outer = x_det.child(_Unicode(outer_wall)); + xml_comp_t x_gas = x_det.child(_Unicode(gas)); + xml_comp_t x_cathode = x_det.child(_Unicode(cathode)); + + Material gasMat = lcdd.material(x_gas.materialStr()); + PlacedVolume pv; + + struct cylinder_t { double inner, outer, zhalf; }; + cylinder_t env = { x_envelope.inner_r(), x_envelope.outer_r(), x_envelope.zhalf() }; + cylinder_t inner_wall = { x_inner.inner_r(), x_inner.inner_r()+x_inner.thickness(), env.zhalf }; + cylinder_t outer_wall = { x_outer.outer_r()-x_outer.thickness(), x_outer.outer_r(), env.zhalf }; + cylinder_t gas = { inner_wall.outer, outer_wall.inner, x_gas.zhalf() }; + + // TPC sensitive detector + sens_det.setType("tracker"); + + // the TPC mother volume + //Tube envTub(env.inner,env.outer,env.zhalf); + //Volume envVol(name+"_envelope",envTub,lcdd.air()); + Assembly envVol(name+"_envelope"); + //envVol.setVisAttributes(lcdd.visAttributes(x_envelope.visStr())); + //envVol.setVisAttributes(lcdd.invisible()); + //envVol->SetVisibility(kFALSE); + //envVol->SetVisDaughters(kTRUE); + + pv = motherVol.placeVolume(envVol); + pv.addPhysVolID("system",x_det.id()); + sdet.setPlacement(pv); + + // TPC Al inner shield + Tube innerTub(inner_wall.inner, inner_wall.outer, inner_wall.zhalf); + Volume innerVol(name+"_inner",innerTub,lcdd.material(x_inner.materialStr())); + innerVol.setVisAttributes(lcdd.visAttributes(x_inner.visStr())); + envVol.placeVolume(innerVol); + + // TPC outer shield + Tube outerTub(outer_wall.inner, outer_wall.outer, outer_wall.zhalf); + Volume outerVol(name+"_outer",outerTub,lcdd.material(x_outer.materialStr())); + outerVol.setVisAttributes(lcdd.visAttributes(x_outer.visStr())); + envVol.placeVolume(outerVol); + +#if 0 + // TPC gas chamber envelope + Tube gasTub(gas.inner,gas.outer,gas.zhalf); + Volume gasVol(name+"_chamber",gasTub,gasMat); + gasVol.setVisAttributes(lcdd.visAttributes(x_gas.visStr())); + //gasVol.setVisAttributes(lcdd.invisible()); + envVol.placeVolume(gasVol); +#endif + + // TPC HV plane + Tube hvTub(gas.inner,gas.outer,x_cathode.thickness()/2); + Volume hvVol(name+"_cathode",hvTub,lcdd.material(x_cathode.materialStr())); + hvVol.setVisAttributes(lcdd.visAttributes(x_cathode.visStr())); + envVol.placeVolume(hvVol); + + // TPC Endcap plane to see sectors and misalignments betters + Tube endCapPlane(env.inner,env.outer,0.0001); + Volume endCapPlaneVol(name+"_plane",endCapPlane,lcdd.material("Copper")); + endCapPlaneVol.setVisAttributes(lcdd.visAttributes("TPCEndcapVis")); + + double endcap_thickness = 0; + for(xml_coll_t c(x_sectors,_Unicode(sector)); c; ++c) { + xml_comp_t x_sector = c; + double thickness = endCapPlane->GetDz(); + for(xml_coll_t l(x_sectors.child(_Unicode(layers)),_Unicode(layer)); l; ++l) { + xml_comp_t x_layer = l; + thickness += 2*x_layer.thickness(); + } + if ( thickness > endcap_thickness ) endcap_thickness = thickness; + } + + Tube endCapTub(env.inner,env.outer,endcap_thickness/2); + Volume endCapAVol(name+"_end_A",endCapTub,lcdd.material("Copper")); + endCapAVol.setVisAttributes(lcdd.invisible()); + //endCapAVol.setVisAttributes(lcdd.visAttributes(x_outer.visStr())); + endCapAVol.placeVolume(endCapPlaneVol,Position(0,0,-endcap_thickness/2)); + pv = envVol.placeVolume(endCapAVol,Position(0,0,env.zhalf+endcap_thickness/2)); + pv.addPhysVolID("side",1); + DetElement detA(sdet,name+"_SideA",1); + detA.setPlacement(pv); + + Volume endCapBVol(name+"_end_B",endCapTub,lcdd.material("Copper")); + endCapBVol.setVisAttributes(lcdd.invisible()); + //endCapBVol.setVisAttributes(lcdd.visAttributes(x_outer.visStr())); + endCapBVol.placeVolume(endCapPlaneVol,Position(0,0,-endcap_thickness/2)); + + Transform3D trEndB(RotationY(M_PI),Position(0,0,-env.zhalf-endcap_thickness/2)); + pv = envVol.placeVolume(endCapBVol, trEndB); + pv.addPhysVolID("side",2); + DetElement detB(sdet,name+"_SideB",2); + detB.setPlacement(pv); + + //envVol.setVisAttributes(lcdd.invisible()); + + int sector_count = 0; + for(xml_coll_t c(x_sectors,_Unicode(sector)); c; ++c) { + xml_comp_t x_sector = c; + const char sector_type = x_sector.typeStr()[0]; + const double rmin0 = x_sector.rmin(); + const double rmax0 = x_sector.rmax(); + const int padrows = x_sector.attr<int>(_Unicode(padrows)); + const int trgrows = x_sector.attr<int>(_Unicode(trgrows)); + const int nwires = x_sector.attr<int>(_Unicode(numwires)); + const int num_sectors = sector_type == 'K' ? 6 : 12; + const double shift = sector_type == 'K' ? 0 : M_PI/num_sectors; + const double dphi = 2*M_PI/double(num_sectors); + string sector_vis = x_sector.visStr(); + Solid tm; + double z_start = 0.0; + Assembly sector(name+"_sector_"+sector_type); + int i_layer = 0; + for(xml_coll_t l(x_sectors.child(_Unicode(layers)),_Unicode(layer)); l; ++l, ++i_layer) { + xml_comp_t x_layer = l; + double layer_thickness = x_layer.thickness(); + string layer_vis = x_layer.visStr(); + string layer_mat = x_layer.materialStr(); + double gap_half = 1; + double rmin = rmin0; + double rmax = rmax0; + + if ( layer_vis.empty() ) layer_vis = sector_vis; + + if ( sector_type == 'K' ) { + double angle = M_PI/12.0; + double angle1 = std::tan(angle); + double v[8][2]; + v[0][0] = rmin; + v[0][1] = 0; + v[1][0] = rmin; + v[1][1] = rmin*angle1; + v[2][0] = rmax; + v[2][1] = rmax*angle1; + v[3][0] = rmax; + v[3][1] = 0; + ::memcpy(&v[4][0],&v[0][0],8*sizeof(double)); + EightPointSolid upper(layer_thickness/2,&v[0][0]); + + v[0][0] = rmin; + v[0][1] = 0; + v[1][0] = rmax; + v[1][1] = 0; + v[2][0] = rmax; + v[2][1] = -rmax*angle1; + v[3][0] = rmin; + v[3][1] = -rmin*angle1; + ::memcpy(&v[4][0],&v[0][0],8*sizeof(double)); + EightPointSolid lower(layer_thickness/2,&v[0][0]); + + v[0][0] = rmin; + v[0][1] = gap_half; + v[1][0] = rmin; + v[1][1] = rmin*angle1; + v[2][0] = rmax; + v[2][1] = rmax*angle1; + v[3][0] = rmax; + v[3][1] = gap_half; + ::memcpy(&v[4][0],&v[0][0],8*sizeof(double)); + EightPointSolid top(layer_thickness/2,&v[0][0]); + + v[0][0] = rmin; + v[0][1] = -gap_half; + v[1][0] = rmax; + v[1][1] = -gap_half; + v[2][0] = rmax; + v[2][1] = -rmax*angle1; + v[3][0] = rmin; + v[3][1] = -rmin*angle1; + ::memcpy(&v[4][0],&v[0][0],8*sizeof(double)); + EightPointSolid bottom(layer_thickness/2,&v[0][0]); + + UnionSolid u(UnionSolid(upper,lower),top,Rotation3D(RotationZ(2*(angle)))); + tm = UnionSolid(u,bottom,Rotation3D(RotationZ(-2*(angle)))); + } + else { + double overlap = sector_type=='W' ? 20 : -20; + double dist = -gap_half; + double angle = M_PI/12.0; + double angle1 = std::tan(angle); + double v[8][2], dr = 0, droff=0; + + if ( sector_type == 'W' ) { + rmax += overlap*std::tan(angle/2); + dr = overlap*std::tan(angle/2); + } + + v[0][0] = rmin; + v[0][1] = -rmin*angle1+gap_half; + v[1][0] = rmin; + v[1][1] = rmin*angle1-gap_half; + v[2][0] = rmax; + v[2][1] = rmax*angle1-gap_half; + v[3][0] = rmax; + v[3][1] = -rmax*angle1+gap_half; + ::memcpy(&v[4][0],&v[0][0],8*sizeof(double)); + printCoordinates(sector_type,"t2:",v); + EightPointSolid sectorSolid(layer_thickness/2,&v[0][0]); + + if ( sector_type=='W' ) { + v[0][0] = (rmax+rmin)/2-dr; + v[0][1] = (rmax+rmin)/2*angle1-gap_half; + v[1][0] = rmax+0.0001; + v[1][1] = rmax*angle1-gap_half; + v[2][0] = rmax+0.0001; + v[2][1] = (rmax-overlap)*angle1-gap_half; + v[3][0] = (rmax+rmin)/2-dr; + v[3][1] = (rmax+rmin-overlap)/2*angle1-gap_half; + } + else { + v[0][0] = (rmax+rmin)/2-dr; + v[0][1] = (rmax+rmin)/2*angle1-gap_half; + v[3][0] = rmax+0.0001; + v[3][1] = rmax*angle1-gap_half; + v[2][0] = rmax+0.0001; + v[2][1] = (rmax-overlap)*angle1-gap_half; + v[1][0] = (rmax+rmin)/2-dr; + v[1][1] = (rmax+rmin-overlap)/2*angle1-gap_half; + } + printCoordinates(sector_type,"upper_boolean:",v); + ::memcpy(&v[4][0],&v[0][0],8*sizeof(double)); + EightPointSolid upper_boolean((sector_type == 'W' ? 1.1 : 1.0) * layer_thickness/2,&v[0][0]); + + if ( sector_type=='W' ) { + v[0][0] = (rmax+rmin)/2-dr; + v[0][1] = -((rmax+rmin)/2*angle1-gap_half); + v[1][0] = (rmax+rmin)/2-dr; + v[1][1] = -((rmax+rmin-overlap)/2*angle1-gap_half); + v[2][0] = rmax+0.0001; + v[2][1] = -((rmax-overlap)*angle1-gap_half); + v[3][0] = rmax+0.0001; + v[3][1] = -(rmax*angle1-gap_half); + } + else { + v[0][0] = (rmax+rmin)/2-dr; + v[0][1] = -((rmax+rmin)/2*angle1-gap_half); + v[3][0] = (rmax+rmin)/2-dr; + v[3][1] = -((rmax+rmin-overlap)/2*angle1-gap_half); + v[2][0] = rmax+0.0001; + v[2][1] = -((rmax-overlap)*angle1-gap_half); + v[1][0] = rmax+0.0001; + v[1][1] = -(rmax*angle1-gap_half); + } + printCoordinates(sector_type,"lower_boolean:",v); + ::memcpy(&v[4][0],&v[0][0],8*sizeof(double)); + + // For W sectors make the subtraction solid slightly thicker to ensure everything is cut off + // and no left-overs from numerical precision are left. + EightPointSolid lower_boolean((sector_type == 'W' ? 1.1 : 1.0) * layer_thickness/2,&v[0][0]); + if ( sector_type == 'W' ) + tm = SubtractionSolid(SubtractionSolid(sectorSolid,upper_boolean),lower_boolean); + else + tm = UnionSolid(UnionSolid(sectorSolid,upper_boolean),lower_boolean); + } + + Volume secVol(name+"_sector_"+sector_type+_toString(i_layer,"_layer%d"),tm,lcdd.material(layer_mat)); + secVol.setVisAttributes(lcdd.visAttributes(layer_vis)); + if ( x_layer.isSensitive() ) secVol.setSensitiveDetector(sens_det); + + sector.placeVolume(secVol,Position(0,0,z_start+layer_thickness/2)); + z_start += layer_thickness; + } + for(int i=0; i<num_sectors;++i) { + int j = i + (sector_type=='W' ? 1 : 0); + double phi = dphi*j+shift + (sector_type=='K' ? 0 : M_PI/12.0); + if ( sector_type == 'K' || (i%2)==0 ) { + Transform3D trA(RotationZYX(phi,0,0),Position(0,0,0.00001)); + Transform3D trB(RotationZYX(phi,0,0),Position(0,0,0.00001)); + + pv = endCapAVol.placeVolume(sector,trA); + pv.addPhysVolID("type", sector_type=='K' ? 1 : sector_type=='M' ? 2 : 3); + pv.addPhysVolID("sector",j); + DetElement sectorA(detA,detA.name()+_toString(sector_count,"_sector%02d"),1); + sectorA.setPlacement(pv); + + pv = endCapBVol.placeVolume(sector,trB); + pv.addPhysVolID("type", sector_type=='K' ? 1 : sector_type=='M' ? 2 : 3); + pv.addPhysVolID("sector",j); + DetElement sectorB(detB,detB.name()+_toString(sector_count,"_sector%02d"),1); + sectorB.setPlacement(pv); + cout << "Placed " << sector_type << " sector at phi=" << phi << endl; + ++sector_count; + } + } + } + return sdet; +} + +DECLARE_SUBDETECTOR(AlephTPC,create_element); diff --git a/examples/AlignDet/src/BoxDetector_geo.cpp b/examples/AlignDet/src/BoxDetector_geo.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0afc8cbb470b8557fb9fc8cebc4524cf877c93ff --- /dev/null +++ b/examples/AlignDet/src/BoxDetector_geo.cpp @@ -0,0 +1,34 @@ +// $Id: BoxDetector_geo.cpp 633 2013-06-21 13:50:50Z markus.frank $ +//==================================================================== +// AIDA Detector description implementation for LCD +//-------------------------------------------------------------------- +// +// Author : M.Frank +// +//==================================================================== +#include "DD4hep/DetFactoryHelper.h" + +using namespace std; +using namespace DD4hep; +using namespace DD4hep::Geometry; + +static Ref_t create_element(LCDD& lcdd, xml_h e, Ref_t) { + xml_det_t x_det = e; + string name = x_det.nameStr(); + xml_comp_t box (x_det.child(_U(box))); + xml_dim_t pos (x_det.child(_U(position))); + xml_dim_t rot (x_det.child(_U(rotation))); + Material mat (lcdd.material(x_det.materialStr())); + DetElement det (name,x_det.id()); + Volume det_vol(name+"_vol",Box(box.x(),box.y(),box.z()), mat); + Volume mother = lcdd.pickMotherVolume(det); + Transform3D transform(Rotation3D(RotationZYX(rot.z(),rot.y(),rot.x())),Position(pos.x(),pos.y(),pos.z())); + det_vol.setVisAttributes(lcdd, x_det.visStr()); + PlacedVolume phv = mother.placeVolume(det_vol,transform); + phv.addPhysVolID("id",x_det.id()); + det.setPlacement(phv); + return det; +} + +// first argument is the type from the xml file +DECLARE_DETELEMENT(BoxSegment,create_element)