diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ec365bb6986b52b53f05bf7c36d482d431f91bc..baeec628505e7bb3fa9b368eeddb5d392f54ac37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,6 +63,7 @@ if( DD4HEP_WITH_LCIO ) add_subdirectory(DDExamples/ILDExDet) add_subdirectory(DDExamples/ILDExReco) add_subdirectory(DDExamples/ILDExTest) +add_subdirectory(DDExamples/CaliceTbeam) endif() diff --git a/DDExamples/CaliceTbeam/CMakeLists.txt b/DDExamples/CaliceTbeam/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..0ea4c70458bdea7b1159f6c093312c688bbaeafb --- /dev/null +++ b/DDExamples/CaliceTbeam/CMakeLists.txt @@ -0,0 +1,73 @@ +cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR) + + +##----- check if LCIO is available +#find_package(LCIO QUIET) +# +#if( NOT LCIO_FOUND ) # downlaod and build LCIO +# +# INCLUDE( ExternalProject ) +# +# set( lcio_download_url SVN_REPOSITORY "svn://svn.freehep.org/lcio/trunk" ) +# +# set( lcio_cmake_args +# "-DLCIO_GENERATE_HEADERS=OFF" +# "-DINSTALL_JAR=OFF" +# "-DBUILD_LCIO_EXAMPLES=OFF" +# "-DBUILD_ROOTDICT=OFF" +# "-DBUILD_F77_TESTJOBS=OFF" +# ) +# +# ExternalProject_Add( LCIO +# ${lcio_download_url} +# CMAKE_ARGS ${lcio_cmake_args} install +# PREFIX ${DD4hep_BINARY_DIR}/dependencies +# ) +# +# MESSAGE( STATUS "=============== Adding LCIO as external project ====================" ) +# MESSAGE( STATUS " to use an existing LCIO installation please specify -D LCIO_DIR=path_to_lcio !! " ) +# MESSAGE( STATUS "======================================================================" ) +# +# set(LCIO_INCLUDE_DIRS "${DD4hep_BINARY_DIR}/dependencies/src/LCIO/include" ) +# +# set(LCIO_LIBRARIES +# "${DD4hep_BINARY_DIR}/dependencies/src/LCIO/lib/${CMAKE_SHARED_LIBRARY_PREFIX}sio${CMAKE_SHARED_LIBRARY_SUFFIX}" +# "${DD4hep_BINARY_DIR}/dependencies/src/LCIO/lib/${CMAKE_SHARED_LIBRARY_PREFIX}lcio${CMAKE_SHARED_LIBRARY_SUFFIX}" +# ) +# +#endif() +##-------------- lcio ------------------- + + + +include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/DDCore/include + ${ROOT_INCLUDE_DIR} + ${LCIO_INCLUDE_DIRS}) + +file(GLOB sources src/*.cpp src/compact/*.cpp) +file(GLOB headers include/*.h) + +include(DD4hep_XML_setup) + +if(DD4HEP_USE_PYROOT) + ROOT_GENERATE_DICTIONARY(G__CaliceTbeamEx ${headers} LINKDEF include/ROOT/LinkDef.h) + list(APPEND sources G__CaliceTbeamEx.cxx) +#fg: removing these causes undefined symbols in libILdEx.so/.dylib +# list(REMOVE_ITEM sources ${CMAKE_CURRENT_SOURCE_DIR}/src/VersatileDiskRowLayoutSeg.cpp) +# list(REMOVE_ITEM sources ${CMAKE_CURRENT_SOURCE_DIR}/src/VersatileDiskRowLayout.cpp) +endif() + +add_library(CaliceTbeamEx SHARED ${sources}) +target_link_libraries(CaliceTbeamEx DD4hepCore ${LCIO_LIBRARIES}) +#---Rootmap generation-------------------------------------------------------------- +dd4hep_generate_rootmap(CaliceTbeamEx) + +#--- install target------------------------------------- + +install(TARGETS CaliceTbeamEx + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ) +# to do: add corresponding uninstall... +#------------------------------------------------------- \ No newline at end of file diff --git a/DDExamples/CaliceTbeam/README.txt b/DDExamples/CaliceTbeam/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..1b2d49eed2d5506c99549582060e8c711915d845 --- /dev/null +++ b/DDExamples/CaliceTbeam/README.txt @@ -0,0 +1,10 @@ +A driver for CALICE tesbeam box prototype. +Examples of compact for individual SiwEcal, Ahcal, DHcal and Tcmt. +Example of compact for testbeam with SiwEcal, Ahcal and Tcmt. + + +[1] ./bin/ILDExSimu -i file:../DDExamples/CaliceTbeam/compact/Calice_testbeam.xml file:../DDExamples/CaliceTbeam/compact/geant4SD.xml + ./bin/ILDExSimu file:../DDExamples/CaliceTbeam/compact/Calice_testbeam.xml file:../DDExamples/CaliceTbeam/compact/geant4SD.xml ../DDExamples/CaliceTbeam/run_g4.mac +[2] geoConverter -compact2lcdd -input Calice_testbeam.xml -output Calice_testbeam.lcdd +[2] slic -n -g Calice_testbeam.lcdd + diff --git a/DDExamples/CaliceTbeam/compact/AHcal.xml b/DDExamples/CaliceTbeam/compact/AHcal.xml new file mode 100644 index 0000000000000000000000000000000000000000..dfd66d5a762e635f15e7fb45a82a3f7cacc6daca --- /dev/null +++ b/DDExamples/CaliceTbeam/compact/AHcal.xml @@ -0,0 +1,83 @@ +<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="CALICE_TB_Calo" + title="CALICE testbeam calo detectors model" + author="S. Lu" + url="http://ilcsoft.desy.de" + status="development" + version="$Id: CALICETb.xml Lu $"> + <comment>The compact format for the CALICE testbeam Detector - toy model </comment> + </info> + + <includes> + <gdmlFile ref="elements.xml"/> + <gdmlFile ref="materials.xml"/> + <pyBuilder ref="../drivers"/> + </includes> + + <define> + <constant name="world_side" value="10*m"/> + <constant name="world_x" value="world_side/2"/> + <constant name="world_y" value="world_side/2"/> + <constant name="world_z" value="world_side/2"/> + + <constant name="TBAHcal_cell_size" value="30*mm"/> <!-- CellSize 30*mm--> + <constant name="TBAHcal_cell_Imax" value="30"/> <!-- HBU 24 --> + <constant name="TBAHcal_cell_Jmax" value="30"/> <!-- HBU 24 --> + <constant name="TBAHcal_layers" value="38"/> <!-- Total Layers --> + <constant name="Hcal_chamber_thickness" value="17.5*mm"/> + <constant name="Hcal_radiator_thickness" value="20.0*mm"/> + <constant name="TBAHcal_layer_thickness" value="Hcal_radiator_thickness+Hcal_chamber_thickness"/> + + <constant name="TBAHcal_position" value="3000.0*mm"/> + </define> + + <limits> + <limitset name="cal_limits"> + <limit name="step_length_max" particles="*" value="30.0" unit="mm" /> + </limitset> + </limits> + + <display> + <vis name="AHcalVis" alpha="1" r="1" g="1" b="0.1" showDaughters="true" visible="false"/> + <vis name="AHcalRadiatorVis" alpha="1" r="0.69" g="0.77" b="0.87"showDaughters="true" visible="true"/> + <vis name="AHcalLayerVis" alpha="1" r="1" g="0" b="0.5" showDaughters="true" visible="true"/> + <vis name="AHcalSensorVis" alpha="1" r="0" g="1" b="1" showDaughters="true" visible="true"/> + <vis name="AHcalFR4Vis" alpha="1" r="0.44" g="0.77" b="0.44"showDaughters="true" visible="true"/> + <vis name="AHcalCuVis" alpha="1" r="0.8" g="0.4" b="0" showDaughters="true" visible="true"/> + <vis name="AHcalAirVis" alpha="1" r="1" g="1" b="1" showDaughters="true" visible="true"/> + </display> + + <detectors> + <detector id="7" name="AHcal" type="CalotbeamBox" readout="AHcalHits" vis="AHcalVis" calorimeterType="HCAL"> + <comment>Analog Hadron Calorimeter Prototype</comment> + + <!-- detector online alignment --> + <dimensions x="TBAHcal_cell_size*TBAHcal_cell_Imax" y="TBAHcal_cell_size*TBAHcal_cell_Jmax" z="TBAHcal_layer_thickness*TBAHcal_layers+20.0"/> + <position x="0" y="0" z="TBAHcal_position"/> + <rotation x="0" y="0" z="0"/> + <layers> + <layer repeat="(int) TBAHcal_layers"> + <slice material = "Steel235" thickness = "20.0*mm" vis="AHcalRadiatorVis" /> + <slice material = "Polystyrene" thickness = "3.0*mm" sensitive = "yes" limits="cal_limits" vis="AHcalSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="AHcalFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="AHcalCuVis" /> + <slice material = "Air" thickness = "7.7*mm" /> <!--vis="AHcalAirVis" /--> + </layer> + <layer repeat="(int) 1"> + <slice material = "Steel235" thickness = "20.0*mm" vis="AHcalRadiatorVis" /> + </layer> + </layers> + </detector> + </detectors> + + <readouts> + <readout name="AHcalHits"> + <segmentation type="GlobalGridXY" gridSizeX="30.0*mm" gridSizeY="30.0*mm" /> + <id>system:6,module:7,layer:8,slice:5,x:32:-16,y:-16</id> + </readout> + </readouts> + +</lccdd> diff --git a/DDExamples/CaliceTbeam/compact/Calice_testbeam.xml b/DDExamples/CaliceTbeam/compact/Calice_testbeam.xml new file mode 100644 index 0000000000000000000000000000000000000000..de0f659a15ab8bff49f392e5001424c8d1fa3f94 --- /dev/null +++ b/DDExamples/CaliceTbeam/compact/Calice_testbeam.xml @@ -0,0 +1,177 @@ +<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="CALICE_TB_Calo" + title="CALICE testbeam calo detectors model" + author="S. Lu" + url="http://ilcsoft.desy.de" + status="development" + version="$Id: CALICETb.xml Lu $"> + <comment>The compact format for the CALICE testbeam Detector - toy model </comment> + </info> + + <includes> + <gdmlFile ref="elements.xml"/> + <gdmlFile ref="materials.xml"/> + <pyBuilder ref="../drivers"/> + </includes> + + <define> + <constant name="world_side" value="10*m"/> + <constant name="world_x" value="world_side/2"/> + <constant name="world_y" value="world_side/2"/> + <constant name="world_z" value="world_side/2"/> + + <constant name="TBAHcal_cell_size" value="30*mm"/> <!-- CellSize 30*mm--> + <constant name="TBAHcal_cell_Imax" value="30"/> <!-- HBU 24 --> + <constant name="TBAHcal_cell_Jmax" value="30"/> <!-- HBU 24 --> + <constant name="TBAHcal_layers" value="38"/> <!-- Total Layers --> + <constant name="Hcal_chamber_thickness" value="17.5*mm"/> + <constant name="Hcal_radiator_thickness" value="20.0*mm"/> + <constant name="TBAHcal_layer_thickness" value="Hcal_radiator_thickness+Hcal_chamber_thickness"/> + + <constant name="TBSiWcal_position" value="2000.0*mm"/> + <constant name="TBAHcal_position" value="3000.0*mm"/> + <constant name="TBTcmt_position" value="4500.0*mm"/> + </define> + + <limits> + <limitset name="cal_limits"> + <limit name="step_length_max" particles="*" value="5.0" unit="mm" /> + </limitset> + </limits> + + <display> + <vis name="SiWEcalVis" alpha="1" r="1" g="1" b="0.1" showDaughters="true" visible="false"/> + <vis name="SiWEcalRadiatorVis" alpha="1" r="0.47" g="0.53" b="0.6" showDaughters="true" visible="true"/> + <vis name="SiWEcalLayerVis" alpha="1" r="1" g="0" b="0.5" showDaughters="true" visible="true"/> + <vis name="SiWEcalSensorVis" alpha="1" r="0.96" g="0.64" b="0.38"showDaughters="true" visible="true"/> + <vis name="SiWEcalFR4Vis" alpha="1" r="0.44" g="0.77" b="0.44"showDaughters="true" visible="true"/> + <vis name="SiWEcalCuVis" alpha="1" r="0.8" g="0.4" b="0" showDaughters="true" visible="true"/> + <vis name="SiWEcalAirVis" alpha="1" r="1" g="1" b="1" showDaughters="true" visible="true"/> + + <vis name="AHcalVis" alpha="1" r="1" g="1" b="0.1" showDaughters="true" visible="false"/> + <vis name="AHcalRadiatorVis" alpha="1" r="0.69" g="0.77" b="0.87"showDaughters="true" visible="true"/> + <vis name="AHcalLayerVis" alpha="1" r="1" g="0" b="0.5" showDaughters="true" visible="true"/> + <vis name="AHcalSensorVis" alpha="1" r="0" g="1" b="1" showDaughters="true" visible="true"/> + <vis name="AHcalFR4Vis" alpha="1" r="0.44" g="0.77" b="0.44"showDaughters="true" visible="true"/> + <vis name="AHcalCuVis" alpha="1" r="0.8" g="0.4" b="0" showDaughters="true" visible="true"/> + <vis name="AHcalAirVis" alpha="1" r="1" g="1" b="1" showDaughters="true" visible="true"/> + + <vis name="TcmtVis" alpha="1" r="1" g="1" b="0.1" showDaughters="true" visible="false"/> + <vis name="TcmtRadiatorVis" alpha="1" r="0.69" g="0.77" b="0.87"showDaughters="true" visible="true"/> + <vis name="TcmtLayerVis" alpha="1" r="1" g="0" b="0.5" showDaughters="true" visible="true"/> + <vis name="TcmtSensorVis" alpha="1" r="0" g="1" b="1" showDaughters="true" visible="true"/> + <vis name="TcmtFR4Vis" alpha="1" r="0.44" g="0.77" b="0.44"showDaughters="true" visible="true"/> + <vis name="TcmtCuVis" alpha="1" r="0.8" g="0.4" b="0" showDaughters="true" visible="true"/> + <vis name="TcmtAirVis" alpha="1" r="1" g="1" b="1" showDaughters="true" visible="true"/> + </display> + + <detectors> + <detector id="6" name="SiWEcal" type="CalotbeamBox" readout="SiWEcalHits" vis="SiWEcalVis" calorimeterType="ECAL"> + <comment>The Silicon Tungsten ECAL Calorimeter Prototype</comment> + + <!-- detector online alignment --> + <dimensions x="180.0*mm" y="180.0*mm" z="(5.0+6.4+7.8)*5.0*mm"/> + <position x="0" y="0" z="TBSiWcal_position"/> + <rotation x="0" y="0" z="0"/> + <layers> + <layer repeat="5"> + <slice material = "Tungsten" thickness = "1.4*mm" vis="SiWEcalRadiatorVis" /> + <slice material = "Silicon" thickness = "0.1*mm" sensitive = "yes" limits="cal_limits" vis="SiWEcalSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="SiWEcalFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="SiWEcalCuVis" /> + <slice material = "Air" thickness = "2.7*mm" /> <!--vis="SiWEcalAirVis" /--> + </layer> + <layer repeat="5"> + <slice material = "Tungsten" thickness = "2.8*mm" vis="SiWEcalRadiatorVis" /> + <slice material = "Silicon" thickness = "0.1*mm" sensitive = "yes" limits="cal_limits" vis="SiWEcalSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="SiWEcalFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="SiWEcalCuVis" /> + <slice material = "Air" thickness = "2.7*mm" /> <!--vis="SiWEcalAirVis" /--> + </layer> + <layer repeat="5"> + <slice material = "Tungsten" thickness = "4.2*mm" vis="SiWEcalRadiatorVis" /> + <slice material = "Silicon" thickness = "0.1*mm" sensitive = "yes" limits="cal_limits" vis="SiWEcalSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="SiWEcalFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="SiWEcalCuVis" /> + <slice material = "Air" thickness = "2.7*mm" /> <!--vis="SiWEcalAirVis" /--> + </layer> + </layers> + </detector> + + <detector id="7" name="AHcal" type="CalotbeamBox" readout="AHcalHits" vis="AHcalVis" calorimeterType="HCAL"> + <comment>Analog Hadron Calorimeter Prototype</comment> + + <!-- detector online alignment --> + <dimensions x="TBAHcal_cell_size*TBAHcal_cell_Imax" y="TBAHcal_cell_size*TBAHcal_cell_Jmax" z="TBAHcal_layer_thickness*TBAHcal_layers+20.0 +"/> + <position x="0" y="0" z="TBAHcal_position"/> + <rotation x="0" y="0" z="0"/> + <layers> + <layer repeat="(int) TBAHcal_layers"> + <slice material = "Steel235" thickness = "20.0*mm" vis="AHcalRadiatorVis" /> + <slice material = "Polystyrene" thickness = "3.0*mm" sensitive = "yes" limits="cal_limits" vis="AHcalSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="AHcalFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="AHcalCuVis" /> + <slice material = "Air" thickness = "7.7*mm" /> <!--vis="AHcalAirVis" /--> + </layer> + <layer repeat="(int) 1"> + <slice material = "Steel235" thickness = "20.0*mm" vis="AHcalRadiatorVis" /> + </layer> + </layers> + </detector> + + <detector id="8" name="Tcmt" type="CalotbeamBox" readout="TcmtHits" vis="TcmtVis" calorimeterType="TCMT"> + <comment>Analog Hadron Calorimeter Prototype</comment> + + <!-- detector online alignment --> + <dimensions x="1080" y="1080" z="(26.5+46.5+66.5+10.0)*10.0+20.0"/> + <position x="0" y="0" z="TBTcmt_position"/> + <rotation x="0" y="0" z="0"/> + <layers> + <layer repeat="10"> + <slice material = "Steel235" thickness = "20.0*mm" vis="TcmtRadiatorVis" /> + <slice material = "Polystyrene" thickness = "3.0*mm" sensitive = "yes" limits="cal_limits" vis="TcmtSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="TcmtFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="TcmtCuVis" /> + <slice material = "Air" thickness = "12.7*mm" /> <!--vis="TcmtAirVis" /--> + </layer> + <layer repeat="10"> + <slice material = "Steel235" thickness = "30.0*mm" vis="TcmtRadiatorVis" /> + <slice material = "Polystyrene" thickness = "3.0*mm" sensitive = "yes" limits="cal_limits" vis="TcmtSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="TcmtFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="TcmtCuVis" /> + <slice material = "Air" thickness = "12.7*mm" /> <!--vis="TcmtAirVis" /--> + </layer> + <layer repeat="10"> + <slice material = "Steel235" thickness = "50.0*mm" vis="TcmtRadiatorVis" /> + <slice material = "Polystyrene" thickness = "3.0*mm" sensitive = "yes" limits="cal_limits" vis="TcmtSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="TcmtFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="TcmtCuVis" /> + <slice material = "Air" thickness = "12.7*mm" /> <!--vis="TcmtAirVis" /--> + </layer> + <layer repeat="(int) 1"> + <slice material = "Steel235" thickness = "20.0*mm" vis="TcmtRadiatorVis" /> + </layer> + </layers> + </detector> + </detectors> + + <readouts> + <readout name="SiWEcalHits"> + <segmentation type="GlobalGridXY" gridSizeX="5.0*mm" gridSizeY="5.0*mm" /> + <id>system:6,module:7,layer:8,slice:5,x:32:-16,y:-16</id> + </readout> + <readout name="AHcalHits"> + <segmentation type="GlobalGridXY" gridSizeX="30.0*mm" gridSizeY="30.0*mm" /> + <id>system:6,module:7,layer:8,slice:5,x:32:-16,y:-16</id> + </readout> + <readout name="TcmtHits"> + <segmentation type="GlobalGridXY" gridSizeX="30.0*mm" gridSizeY="30.0*mm" /> + <id>system:6,module:7,layer:8,slice:5,x:32:-16,y:-16</id> + </readout> + </readouts> + +</lccdd> diff --git a/DDExamples/CaliceTbeam/compact/DHcal.xml b/DDExamples/CaliceTbeam/compact/DHcal.xml new file mode 100644 index 0000000000000000000000000000000000000000..368b22294e8279a1775d1c08fc2fba60aa43bb75 --- /dev/null +++ b/DDExamples/CaliceTbeam/compact/DHcal.xml @@ -0,0 +1,85 @@ +<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="CALICE_TB_Calo" + title="CALICE testbeam calo detectors model" + author="S. Lu" + url="http://ilcsoft.desy.de" + status="development" + version="$Id: CALICETb.xml Lu $"> + <comment>The compact format for the CALICE testbeam Detector - toy model </comment> + </info> + + <includes> + <gdmlFile ref="elements.xml"/> + <gdmlFile ref="materials.xml"/> + <pyBuilder ref="../drivers"/> + </includes> + + <define> + <constant name="world_side" value="10*m"/> + <constant name="world_x" value="world_side/2"/> + <constant name="world_y" value="world_side/2"/> + <constant name="world_z" value="world_side/2"/> + + <constant name="TBDHcal_position" value="3000.0*mm"/> + </define> + + <limits> + <limitset name="cal_limits"> + <limit name="step_length_max" particles="*" value="10.0" unit="mm" /> + </limitset> + </limits> + + <display> + <vis name="DHcalVis" alpha="1" r="1" g="1" b="0.1" showDaughters="true" visible="false"/> + <vis name="DHcalRadiatorVis" alpha="1" r="0.69" g="0.77" b="0.87"showDaughters="true" visible="true"/> + <vis name="DHcalLayerVis" alpha="1" r="1" g="0" b="0.5" showDaughters="true" visible="true"/> + <vis name="DHcalSensorVis" alpha="1" r="0" g="1" b="1" showDaughters="true" visible="true"/> + <vis name="DHcalG10Vis" alpha="1" r="0.44" g="0.77" b="0.44"showDaughters="true" visible="true"/> + <vis name="DHcalMylarVis" alpha="1" r="1" g="1" b="0" showDaughters="true" visible="true"/> + <vis name="DHcalCarbonVis" alpha="1" r="0" g="0" b="0" showDaughters="true" visible="true"/> + <vis name="DHcalGlassVis" alpha="1" r="0" g="1" b="0" showDaughters="true" visible="true"/> + <vis name="DHcalAirVis" alpha="1" r="1" g="1" b="1" showDaughters="true" visible="true"/> + </display> + + <detectors> + <detector id="7" name="DHcal" type="CalotbeamBox" readout="DHcalHits" vis="DHcalVis" calorimeterType="HCAL"> + <comment>Analog Hadron Calorimeter Prototype</comment> + + <!-- detector online alignment --> + <dimensions x="960.0*mm" y="960.0*mm" z="26.8*40+20.0"/> + <position x="0" y="0" z="TBDHcal_position"/> + <rotation x="0" y="0" z="0"/> + <layers> + <layer repeat="(int) 40"> + <slice material = "Steel235" thickness = "20.0*mm" vis="DHcalRadiatorVis" /> + <slice material = "G10" thickness = "1.6*mm" vis="DHcalG10Vis" /> <!--RPCElectronics --> + <slice material = "G10" thickness = "0.8*mm" vis="DHcalG10Vis" /> <!--RPCPCB --> + <slice material = "mylar" thickness = "0.05*mm" vis="DHcalMylarVis" /> <!--RPCmylarAnode --> + <!--slice material = "graphite" thickness = "0.05*mm" vis="DHcalCarbonVis" /--> <!--RPCGraphiteAnode --> + <slice material = "Carbon" thickness = "0.05*mm" vis="DHcalCarbonVis" /> <!--RPCGraphiteAnode --> + <slice material = "Quartz" thickness = "0.7*mm" vis="DHcalGlassVis" /> <!--RPCThinGlass --> + <slice material = "RPCGasDefault" thickness = "1.2*mm" sensitive = "yes" limits="cal_limits" vis="DHcalSensorVis"/> + <slice material = "Quartz" thickness = "1.1*mm" vis="DHcalGlassVis" /> <!--RPCThickGlass --> + <slice material = "Carbon" thickness = "0.1*mm" vis="DHcalCarbonVis" /> <!--RPCGraphiteCathode --> + <!--slice material = "graphite" thickness = "0.1*mm" vis="DHcalCarbonVis" /--> <!--RPCGraphiteCathode --> + <slice material = "mylar" thickness = "0.2*mm" vis="DHcalMylarVis" /> <!--RPCmylarCathode --> + <slice material = "Air" thickness = "1.0*mm" /> <!--vis="DHcalAirVis" /--> + </layer> + <layer repeat="(int) 1"> + <slice material = "Steel235" thickness = "20.0*mm" vis="DHcalRadiatorVis" /> + </layer> + </layers> + </detector> + </detectors> + + <readouts> + <readout name="DHcalHits"> + <segmentation type="GlobalGridXY" gridSizeX="10.0*mm" gridSizeY="10.0*mm" /> + <id>system:6,module:7,layer:8,slice:5,x:32:-16,y:-16</id> + </readout> + </readouts> + +</lccdd> diff --git a/DDExamples/CaliceTbeam/compact/SiWEcal.xml b/DDExamples/CaliceTbeam/compact/SiWEcal.xml new file mode 100644 index 0000000000000000000000000000000000000000..eb974f9b6a39794ddee4b8287d3458d0139b6555 --- /dev/null +++ b/DDExamples/CaliceTbeam/compact/SiWEcal.xml @@ -0,0 +1,86 @@ +<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="CALICE_TB_Calo" + title="CALICE testbeam calo detectors model" + author="S. Lu" + url="http://ilcsoft.desy.de" + status="development" + version="$Id: CALICETb.xml Lu $"> + <comment>The compact format for the CALICE testbeam Detector - toy model </comment> + </info> + + <includes> + <gdmlFile ref="elements.xml"/> + <gdmlFile ref="materials.xml"/> + <pyBuilder ref="../drivers"/> + </includes> + + <define> + <constant name="world_side" value="10*m"/> + <constant name="world_x" value="world_side/2"/> + <constant name="world_y" value="world_side/2"/> + <constant name="world_z" value="world_side/2"/> + + <constant name="TBSiWcal_position" value="2000.0*mm"/> + </define> + + <limits> + <limitset name="cal_limits"> + <limit name="step_length_max" particles="*" value="5.0" unit="mm" /> + </limitset> + </limits> + + <display> + <vis name="SiWEcalVis" alpha="1" r="1" g="1" b="0.1" showDaughters="true" visible="false"/> + <vis name="SiWEcalRadiatorVis" alpha="1" r="0.47" g="0.53" b="0.6" showDaughters="true" visible="true"/> + <vis name="SiWEcalLayerVis" alpha="1" r="1" g="0" b="0.5" showDaughters="true" visible="true"/> + <vis name="SiWEcalSensorVis" alpha="1" r="0.96" g="0.64" b="0.38"showDaughters="true" visible="true"/> + <vis name="SiWEcalFR4Vis" alpha="1" r="0.44" g="0.77" b="0.44"showDaughters="true" visible="true"/> + <vis name="SiWEcalCuVis" alpha="1" r="0.8" g="0.4" b="0" showDaughters="true" visible="true"/> + <vis name="SiWEcalAirVis" alpha="1" r="1" g="1" b="1" showDaughters="true" visible="true"/> + </display> + + <detectors> + <detector id="6" name="SiWEcal" type="CalotbeamBox" readout="SiWEcalHits" vis="SiWEcalVis" calorimeterType="ECAL"> + <comment>The Silicon Tungsten ECAL Calorimeter Prototype</comment> + + <!-- detector online alignment --> + <dimensions x="180.0*mm" y="180.0*mm" z="(5.0+6.4+7.8)*5.0*mm"/> + <position x="0" y="0" z="TBSiWcal_position"/> + <rotation x="0" y="0" z="0"/> + <layers> + <layer repeat="5"> + <slice material = "Tungsten" thickness = "1.4*mm" vis="SiWEcalRadiatorVis" /> + <slice material = "Silicon" thickness = "0.1*mm" sensitive = "yes" limits="cal_limits" vis="SiWEcalSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="SiWEcalFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="SiWEcalCuVis" /> + <slice material = "Air" thickness = "2.7*mm" /> <!--vis="SiWEcalAirVis" /--> + </layer> + <layer repeat="5"> + <slice material = "Tungsten" thickness = "2.8*mm" vis="SiWEcalRadiatorVis" /> + <slice material = "Silicon" thickness = "0.1*mm" sensitive = "yes" limits="cal_limits" vis="SiWEcalSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="SiWEcalFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="SiWEcalCuVis" /> + <slice material = "Air" thickness = "2.7*mm" /> <!--vis="SiWEcalAirVis" /--> + </layer> + <layer repeat="5"> + <slice material = "Tungsten" thickness = "4.2*mm" vis="SiWEcalRadiatorVis" /> + <slice material = "Silicon" thickness = "0.1*mm" sensitive = "yes" limits="cal_limits" vis="SiWEcalSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="SiWEcalFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="SiWEcalCuVis" /> + <slice material = "Air" thickness = "2.7*mm" /> <!--vis="SiWEcalAirVis" /--> + </layer> + </layers> + </detector> + </detectors> + + <readouts> + <readout name="SiWEcalHits"> + <segmentation type="GlobalGridXY" gridSizeX="5.0*mm" gridSizeY="5.0*mm" /> + <id>system:6,module:7,layer:8,slice:5,x:32:-16,y:-16</id> + </readout> + </readouts> + +</lccdd> diff --git a/DDExamples/CaliceTbeam/compact/Tcmt.xml b/DDExamples/CaliceTbeam/compact/Tcmt.xml new file mode 100644 index 0000000000000000000000000000000000000000..ae4c62f2ad7221a7fa3dba728479c5d0d4080c86 --- /dev/null +++ b/DDExamples/CaliceTbeam/compact/Tcmt.xml @@ -0,0 +1,89 @@ +<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="CALICE_TB_Calo" + title="CALICE testbeam calo detectors model" + author="S. Lu" + url="http://ilcsoft.desy.de" + status="development" + version="$Id: CALICETb.xml Lu $"> + <comment>The compact format for the CALICE testbeam Detector - toy model </comment> + </info> + + <includes> + <gdmlFile ref="elements.xml"/> + <gdmlFile ref="materials.xml"/> + <pyBuilder ref="../drivers"/> + </includes> + + <define> + <constant name="world_side" value="10*m"/> + <constant name="world_x" value="world_side/2"/> + <constant name="world_y" value="world_side/2"/> + <constant name="world_z" value="world_side/2"/> + + <constant name="TBTcmt_position" value="4500.0*mm"/> + </define> + + <limits> + <limitset name="cal_limits"> + <limit name="step_length_max" particles="*" value="30.0" unit="mm" /> + </limitset> + </limits> + + <display> + <vis name="TcmtVis" alpha="1" r="1" g="1" b="0.1" showDaughters="true" visible="false"/> + <vis name="TcmtRadiatorVis" alpha="1" r="0.69" g="0.77" b="0.87"showDaughters="true" visible="true"/> + <vis name="TcmtLayerVis" alpha="1" r="1" g="0" b="0.5" showDaughters="true" visible="true"/> + <vis name="TcmtSensorVis" alpha="1" r="0" g="1" b="1" showDaughters="true" visible="true"/> + <vis name="TcmtFR4Vis" alpha="1" r="0.44" g="0.77" b="0.44"showDaughters="true" visible="true"/> + <vis name="TcmtCuVis" alpha="1" r="0.8" g="0.4" b="0" showDaughters="true" visible="true"/> + <vis name="TcmtAirVis" alpha="1" r="1" g="1" b="1" showDaughters="true" visible="true"/> + </display> + + <detectors> + <detector id="8" name="Tcmt" type="CalotbeamBox" readout="TcmtHits" vis="TcmtVis" calorimeterType="TCMT"> + <comment>Analog Hadron Calorimeter Prototype</comment> + + <!-- detector online alignment --> + <dimensions x="1080" y="1080" z="(26.5+46.5+66.5+10.0)*10.0+20.0"/> + <position x="0" y="0" z="TBTcmt_position"/> + <rotation x="0" y="0" z="0"/> + <layers> + <layer repeat="10"> + <slice material = "Steel235" thickness = "20.0*mm" vis="TcmtRadiatorVis" /> + <slice material = "Polystyrene" thickness = "3.0*mm" sensitive = "yes" limits="cal_limits" vis="TcmtSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="TcmtFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="TcmtCuVis" /> + <slice material = "Air" thickness = "12.7*mm" /> <!--vis="TcmtAirVis" /--> + </layer> + <layer repeat="10"> + <slice material = "Steel235" thickness = "30.0*mm" vis="TcmtRadiatorVis" /> + <slice material = "Polystyrene" thickness = "3.0*mm" sensitive = "yes" limits="cal_limits" vis="TcmtSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="TcmtFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="TcmtCuVis" /> + <slice material = "Air" thickness = "12.7*mm" /> <!--vis="TcmtAirVis" /--> + </layer> + <layer repeat="10"> + <slice material = "Steel235" thickness = "50.0*mm" vis="TcmtRadiatorVis" /> + <slice material = "Polystyrene" thickness = "3.0*mm" sensitive = "yes" limits="cal_limits" vis="TcmtSensorVis"/> + <slice material = "FR4" thickness = "0.7*mm" vis="TcmtFR4Vis" /> + <slice material = "Cu" thickness = "0.1*mm" vis="TcmtCuVis" /> + <slice material = "Air" thickness = "12.7*mm" /> <!--vis="TcmtAirVis" /--> + </layer> + <layer repeat="(int) 1"> + <slice material = "Steel235" thickness = "20.0*mm" vis="TcmtRadiatorVis" /> + </layer> + </layers> + </detector> + </detectors> + + <readouts> + <readout name="TcmtHits"> + <segmentation type="GlobalGridXY" gridSizeX="30.0*mm" gridSizeY="30.0*mm" /> + <id>system:6,module:7,layer:8,slice:5,x:32:-16,y:-16</id> + </readout> + </readouts> + +</lccdd> diff --git a/DDExamples/CaliceTbeam/compact/geant4SD.xml b/DDExamples/CaliceTbeam/compact/geant4SD.xml new file mode 100644 index 0000000000000000000000000000000000000000..92395d2154e1a18e41ed2229e3df7d07390d4d9c --- /dev/null +++ b/DDExamples/CaliceTbeam/compact/geant4SD.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<geant4> + <sensitive_detectors> + <sd name="SiWEcal" + type="Geant4Calorimeter" + ecut="0.5*keV" + verbose="true" + hit_aggregation="position"> + </sd> + <sd name="AHcal" + type="Geant4Calorimeter" + ecut="0.5*keV" + verbose="true" + hit_aggregation="position"> + </sd> + <sd name="Tcmt" + type="Geant4Calorimeter" + ecut="0.5*keV" + verbose="true" + hit_aggregation="position"> + </sd> +<!-- + <sd name="DHcal" + type="Geant4Calorimeter" + ecut="0.5*keV" + verbose="true" + hit_aggregation="position"> + </sd> +--> + </sensitive_detectors> +</geant4> diff --git a/DDExamples/CaliceTbeam/compact/materials.xml b/DDExamples/CaliceTbeam/compact/materials.xml new file mode 100644 index 0000000000000000000000000000000000000000..4e7074cad598ff60680a8eddc1a072d682596140 --- /dev/null +++ b/DDExamples/CaliceTbeam/compact/materials.xml @@ -0,0 +1,156 @@ +<?xml version="1.0" encoding="UTF-8"?> +<materials> + + <!-- + Air by weight from + + http://www.engineeringtoolbox.com/air-composition-24_212.html + --> + <material name="mylar"> + <D type="density" unit="g/cm3" value="1.4"/> + <fraction n="3" ref="C"/> + <fraction n="4" ref="H"/> + <fraction n="2" ref="O"/> + </material> + + <material name="FR4"> + <D type="density" unit="g/cm3" value="1.7"/> + <fraction n="0.1808" ref="Si"/> + <fraction n="0.4056" ref="O"/> + <fraction n="0.2780" ref="C"/> + <fraction n="0.0684" ref="H"/> + <fraction n="0.0671" ref="Br"/> + </material> + + <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/DDExamples/CaliceTbeam/run_g4.mac b/DDExamples/CaliceTbeam/run_g4.mac new file mode 100644 index 0000000000000000000000000000000000000000..ee207bcca3fb361625b17f39e1c15354bb15db22 --- /dev/null +++ b/DDExamples/CaliceTbeam/run_g4.mac @@ -0,0 +1,26 @@ +# $Id:$ +# +# Macro file for CaliceTbeam example: +# +# +# + +/control/verbose 0 +/control/saveHistory +# +/run/verbose 0 +/event/verbose 0 +/tracking/verbose 2 + +# only for Slic: +#/generator/select gun + +/vis/drawTree world OGLIX +/vis/viewer/set/viewpointThetaPhi 90 180 +/vis/scene/add/trajectories +/vis/scene/add/hits + +/gun/direction 0. 0. 1. +/gun/particle pi+ +/gun/energy 10 GeV +/run/beamOn 3 diff --git a/DDExamples/CaliceTbeam/src/compact/CalotbeamBox_geo.cpp b/DDExamples/CaliceTbeam/src/compact/CalotbeamBox_geo.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4958ec034e57dfda035e7bbeb01b59ff568712d1 --- /dev/null +++ b/DDExamples/CaliceTbeam/src/compact/CalotbeamBox_geo.cpp @@ -0,0 +1,191 @@ +//==================================================================== +// AIDA Detector description implementation +// for CALICE testbeam box prototypes +// Box shape for HCAL, ECAL, trigger, Absobers +//-------------------------------------------------------------------- +// +// Author : S.Lu +// +// Basic idea: +// 1. Create the Hcal module envelope. +// Note: with default material air. +// +// 2. Create the Hcal Layer. +// Create the Layer with slices (Steel235,Polystyrene,Cu,FR4,air). +// Place each slice into the layer with the right position, +// And registry the ID for slices +// +// 3. Place the same Layer into the module envelope. +// It will be repeated, and registry the IDs for layer. +// +// 4. Place the module into the world volume, +// with the right position and rotation. +// And registry the ID for System. +// +// 5. Customer material FR4 and Steel235 defined in materials.xml +// +//==================================================================== +#include "DD4hep/DetFactoryHelper.h" +#include "XML/Layering.h" + +using namespace std; +using namespace DD4hep; +using namespace DD4hep::Geometry; + +static Ref_t create_detector(LCDD& lcdd, xml_h element, SensitiveDetector sens) { + xml_det_t x_det = element; + Layering layering(x_det.child(_U(layers))); + string det_name = x_det.nameStr(); + string det_type = x_det.typeStr(); + Material air = lcdd.air(); + xml_dim_t dim = x_det.dimensions(); + xml_dim_t x_pos (x_det.child(_U(position))); + xml_dim_t x_rot (x_det.child(_U(rotation))); + + Translation3D det_pos(x_pos.x(),x_pos.y(),x_pos.z()); + //Rotation is ROOT::Math::RotationZYX + //The input is Rotation(z,y,x) + Rotation det_rot(x_rot.z(),x_rot.y(),x_rot.x()); + + DetElement sdet(det_name,x_det.id()); + Volume motherVol = lcdd.pickMotherVolume(sdet); + + + + // ========= Create Hcal Modules envelope ============================ + // They will be the volume for palcing the Hcal Layers. + // Themself will be placed into the world volume. + // ========================================================================== + + // Hcal module shape + double box_half_x = dim.x()/2.0; + double box_half_y = dim.y()/2.0; + double box_half_z = dim.z()/2.0; + + Box BoxModule(box_half_x,box_half_y,box_half_z); + + // define the name of Module + string envelopeVol_name = det_name+_toString("_envelope"); + + Volume envelopeVol(envelopeVol_name,BoxModule,air); + + // Set envelope volume attributes. + envelopeVol.setAttributes(lcdd,x_det.regionStr(),x_det.limitsStr(),x_det.visStr()); + + + // ========= Create Hcal Layers===== ============================== + // It will be the sub volume for placing the slices. + // Itself will be placed into the Hcal modules envelope. + // ================================================================ + + // create Layer (air) and place the slices into it. + // place the Layer into the Hcal Modules envelope. + + // Hcal layer start position + double layer_pos_z = - box_half_z; + + // Create Hcal Chamber without radiator + // Place into the Hcal module envelope + int layer_num = 0; + int module_num = 0; + for(xml_coll_t c(x_det.child(_U(layers)),_U(layer)); c; ++c) { + xml_comp_t x_layer = c; + //Layering layering(x_layer); + int repeat = x_layer.repeat(); + const Layer* lay = layering.layer(layer_num); // Get the layer from the layering engine. + + string layer_name = det_name+ _toString(module_num,"_module%d_layer"); + double layer_thickness = lay->thickness(); + DetElement layer(layer_name,"layerModule",x_det.id()); + + // Layer box & volume + double layer_dim_x = box_half_x; + double layer_dim_y = box_half_y; + double layer_dim_z = layer_thickness/2.0; + + // Build chamber including air gap + // The Layer will be filled with slices, + Volume layer_vol(layer_name, Box(layer_dim_x,layer_dim_y,layer_dim_z), air); + + + // ========= Create sublayer slices ========================================= + // Create and place the slices into Layer + // ========================================================================== + + // Create the slices (sublayers) within the Hcal Chamber. + double slice_pos_z = -(layer_thickness / 2.0); + int slice_number = 0; + for(xml_coll_t k(x_layer,_U(slice)); k; ++k) { + xml_comp_t x_slice = k; + string slice_name = layer_name + _toString(slice_number,"_slice%d"); + double slice_thickness = x_slice.thickness(); + Material slice_material = lcdd.material(x_slice.materialStr()); + DetElement slice(layer,_toString(slice_number,"slice%d"),x_det.id()); + + slice_pos_z += slice_thickness / 2.0; + + // Slice volume & box + Volume slice_vol(slice_name,Box(layer_dim_x,layer_dim_y,slice_thickness/2.0),slice_material); + + if ( x_slice.isSensitive() ) { + sens.setType("calorimeter"); + slice_vol.setSensitiveDetector(sens); + } + // Set region, limitset, and vis. + slice_vol.setAttributes(lcdd,x_slice.regionStr(),x_slice.limitsStr(),x_slice.visStr()); + // slice PlacedVolume + PlacedVolume slice_phv = layer_vol.placeVolume(slice_vol,Position(0,0,slice_pos_z)); + slice_phv.addPhysVolID("slice",slice_number); + + slice.setPlacement(slice_phv); + // Increment Z position for next slice. + slice_pos_z += slice_thickness / 2.0; + // Increment slice number. + ++slice_number; + } + // Set region, limitset, and vis. + layer_vol.setAttributes(lcdd,x_layer.regionStr(),x_layer.limitsStr(),x_layer.visStr()); + + + // ========= Place the Layer (i.e. Chamber) ================================= + // Place the Layer into the Hcal module envelope. + // with the right position, and registry the ID layer + // ========================================================================== + + for (int j = 0; j < repeat; j++) { + + // Layer position in z within the Modules. + layer_pos_z += layer_thickness / 2.0; + + PlacedVolume layer_phv = envelopeVol.placeVolume(layer_vol,Position(0,0,layer_pos_z)); + + // registry the ID of Layer + layer_phv.addPhysVolID("layer",layer_num); + layer_phv.addPhysVolID("module",j); + + // then setPlacement for it. + layer.setPlacement(layer_phv); + + // Increment the layer_pos_z + layer_pos_z += layer_thickness / 2.0; + ++layer_num; + } + + module_num++; + } + + + // for the alignment in the compact XML file + Transform3D Tr3D = Transform3D(det_rot,det_pos); + PlacedVolume env_phv = motherVol.placeVolume(envelopeVol,Tr3D); + + + env_phv.addPhysVolID("system",x_det.id()); + sdet.setPlacement(env_phv); + + return sdet; +} + + + +DECLARE_DETELEMENT(CalotbeamBox, create_detector);