diff --git a/compact/cb_CTD_Si.xml b/compact/cb_CTD_Si.xml new file mode 100644 index 0000000000000000000000000000000000000000..06b4f825556ef7b826860bef188cdf11521ec55d --- /dev/null +++ b/compact/cb_CTD_Si.xml @@ -0,0 +1,38 @@ +<lccdd> + + <comment> Central Barrel Tracker Silicon </comment> + + <define> + </define> + + <limits> + </limits> + + <regions> + </regions> + + <display> + </display> + + <detectors> + <detector id="cb_CTD_Si_ID" name="cb_CTD_Si" type="cb_CTD_Si" readout="cb_CTD_Si_Hits" vis="cb_CTDVis" insideTrackingVloume="true"> + <dimensions rmin="cb_CTD_rmin" rmax="cb_CTD_rmax" length="cb_CTD_length" zmax="cb_CTD_zmax" gap="cb_CTD_Si_gap"/> + <layer repeat="cb_CTD_Si_layer" vis="cb_CTD_Si_layerVis"> + <slice name="Silicon_slice" material="Si" sensitive="true"/> + </layer> + </detector> + </detectors> + + <readouts> + <readout name="cb_CTD_Si_Hits"> + <segmentation type="CartesianGridXY" grid_size_x="1.0*mm" grid_size_y="1.0*mm" /> + <id>system:8,barrel:3,layer:4,x:32:-16,y:-16</id> + </readout> + </readouts> + + <plugins> + </plugins> + + <fields> + </fields> +</lccdd> diff --git a/compact/definitions.xml b/compact/definitions.xml index 7f74152af6f01554247c30385d286c661b8c9bd8..1f454dc65c626784ec861a8f1a4054df08c30999 100644 --- a/compact/definitions.xml +++ b/compact/definitions.xml @@ -122,6 +122,8 @@ <constant name="SiTrackerEndcapP_Layer5_ID" value="69"/> <constant name="SiTrackerEndcapN_Layer5_ID" value="70"/> + <constant name="cb_CTD_Si_ID" value="74"/> + <comment> =================== (75-99 Reserved IDs @@ -243,8 +245,8 @@ </comment> <constant name="cb_Solenoid_rmin" value="0.0 * cm"/> <comment> Central Barrel Solenoid Inner diameter </comment> <constant name="cb_Solenoid_rmax" value="137.0 * cm"/> <comment> Central Barrel Solenoid Outer diameter </comment> - <constant name="cb_Solenoid_z" value="400.0 * cm"/> - <constant name="cb_Solenoid_shift" value="0.0 * cm"/> <comment> Central Barrel Solenoid Size in Z direction </comment> + <constant name="cb_Solenoid_z" value="400.0 * cm"/> <comment> Central Barrel Solenoid Size in Z direction </comment> + <constant name="cb_Solenoid_shift" value="0.0 * cm"/> <constant name="Solenoid_thickness" value="400*mm"/> <constant name="Solenoid_rmin" value="2000.0*mm"/> @@ -318,6 +320,27 @@ <constant name="SiliconTrackerOuterRadius" value="Solenoid_rmax/2.0"/> <constant name="SiliconTrackerOuterBarrelLength" value="SolenoidLength/2.0"/> + <comment> + ------------------------------- + Central Barrel Tracker - Global + ------------------------------- + </comment> + <constant name="cb_CTD_rmin" value="21.0 * cm"/> + <constant name="cb_CTD_rmax" value="80.0 * cm"/> + <constant name="cb_CTD_zmax" value="200.0 * cm"/> + <comment> Original Global parameter </comment> + <!-- + <constant name="cb_CTD_zmax" value="120.0 * cm"/> + --> + <constant name="cb_CTD_length" value="SolenoidLength - cb_CTD_zmax"/> + <comment> After fix cb_Solenoid parameters </comment> + <!-- + <constant name="cb_CTD_length" value="cb_Solenoid_z - cb_CTD_zmax"/> + --> + <comment> Si layer opiton </comment> + <constant name="cb_CTD_Si_gap" value="5.0 * cm"/> + <constant name="cb_CTD_Si_layer" value="15"/> + <comment> ------------ Calorimeters diff --git a/compact/display.xml b/compact/display.xml index 7e5846d7c116a9978967203c3a11e04ea57205ac..81130895a31b7a1ae52aa2daa5af2ce38d196641 100644 --- a/compact/display.xml +++ b/compact/display.xml @@ -48,9 +48,11 @@ <vis name="RICHVis" alpha="0.5" r="1" g="0" b="1" showDaughters="false"/> <vis name="BeamPipeVis" alpha="1" r= "0.75" g="0.75" b="0.75" showDaughters="true" visible="true"/> - <vis name="cb_SolenoidVis" alpha="0.4" r= "0.1" g="0.0" b="0.1" showDaughters="true" visible="true"/> - <vis name="ffi_ZDCVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/> - <vis name="ffi_ZDCmoduleVis" alpha="1.0" r= "0.1" g="1.0" b="0.9" showDaughters="true" visible="true"/> + <vis name="cb_SolenoidVis" alpha="0.4" r= "0.1" g="0.0" b="0.1" showDaughters="true" visible="true"/> + <vis name="ffi_ZDCVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/> + <vis name="ffi_ZDCmoduleVis" alpha="1.0" r= "0.1" g="1.0" b="0.9" showDaughters="true" visible="true"/> + <vis name="cb_CTDVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/> + <vis name="cb_CTD_Si_layerVis" alpha="1.0" r= "0.9" g="1.0" b="0.1" showDaughters="true" visible="true"/> <comment> Deprecated colors. diff --git a/reference_detector.xml b/reference_detector.xml index db0a52b76c7796d6581f981be0b256404480359f..5273af7b84b6b03b87e67300717f2e01bb4d90cc 100644 --- a/reference_detector.xml +++ b/reference_detector.xml @@ -114,6 +114,7 @@ <include ref="reference_detector/vertex_tracker.xml"/> <include ref="compact/silicon_tracker.xml"/> --> + <include ref="compact/cb_CTD_Si.xml"/> <include ref="ip6/beampipe.xml"/> <include ref="compact/ffi_ZDC.xml"/> <include ref="compact/solenoid.xml"/> diff --git a/src/cb_CTD_Si.cpp b/src/cb_CTD_Si.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4aed32b4ac10437149b7555c171b3f2253c9fa31 --- /dev/null +++ b/src/cb_CTD_Si.cpp @@ -0,0 +1,68 @@ +#include <XML/Helper.h> +////////////////////////////////// +// Central Barrel Tracker Silicon +////////////////////////////////// + +using namespace std; +using namespace dd4hep; + +static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens) +{ + xml_det_t x_det = e; + string detName = x_det.nameStr(); + int detID = x_det.id(); + + xml_dim_t dim = x_det.dimensions(); + double RIn = dim.rmin(); + double ROut = dim.rmax(); + double SizeZ = dim.length(); + double SizeZCut = dim.zmax(); + double SiLayerGap = dim.gap(); + + Material Vacuum = desc.material("Vacuum"); + + // Create Global Volume + Tube cb_CTD_GVol_Solid(RIn, ROut, SizeZ / 2.0, 0., 360.0 * deg); + Volume detVol("cb_CTD_GVol_Logic", cb_CTD_GVol_Solid, Vacuum); + detVol.setVisAttributes(desc.visAttributes(x_det.visStr())); + + // Construct Silicon Layers + xml_comp_t x_layer = x_det.child(_U(layer)); + const int repeat = x_layer.repeat(); + + xml_comp_t x_slice = x_layer.child(_U(slice)); + Material slice_mat = desc.material(x_slice.materialStr()); + + double layerRIn[100]; + double layerROut[100]; + + // Loop over layers + for(int i = 0; i < repeat; i++) { + layerRIn[i] = RIn + (SiLayerGap * i); + layerROut[i] = RIn + (0.01 + SiLayerGap * i); + + if (layerROut[i] > ROut) + continue; + + string logic_layer_name = detName + _toString(i, "_Logic_lay_%d"); + Volume layerVol(logic_layer_name,Tube(layerRIn[i], layerROut[i], SizeZ / 2.0, 0.0, 360.0 * deg), slice_mat); + layerVol.setVisAttributes(desc,x_layer.visStr()); + sens.setType("tracker"); + layerVol.setSensitiveDetector(sens); + + Position layer_pos = Position(0.0, 0.0, 0.0); + PlacedVolume layerPV = detVol.placeVolume(layerVol, layer_pos); + layerPV.addPhysVolID("layer", i+1); + } + + DetElement det(detName, detID); + Volume motherVol = desc.pickMotherVolume(det); + Transform3D tr(RotationZYX(0.0, 0.0, 0.0), Position(0.0, 0.0, 0.0)); + PlacedVolume detPV = motherVol.placeVolume(detVol, tr); + detPV.addPhysVolID("system", detID); + detPV.addPhysVolID("barrel", 1); + det.setPlacement(detPV); + return det; +} + +DECLARE_DETELEMENT(cb_CTD_Si, createDetector)