diff --git a/compact/cb_VTX.xml b/compact/cb_VTX.xml index 45ffee548023dc5e524f7c7e8d93f2b9731a6b28..e3710b48a1bab94788682adfa332a6fbc2b8834f 100644 --- a/compact/cb_VTX.xml +++ b/compact/cb_VTX.xml @@ -18,13 +18,16 @@ <detector id="cb_VTX_ID" name="cb_VTX" type="cb_VTX" readout="cb_VTX_Hits" vis="cb_VTXVis" insideTrackingVloume="true"> <dimensions rmin="cb_VTX_rmin" rmax="cb_VTX_rmax" length="cb_VTX_length"/> <position x="cb_VTX_x_pos" y="cb_VTX_y_pos" z="cb_VTX_z_pos"/> + <layer repeat="cb_VTX_layer" vis="cb_VTX_layerVis"> + <slice name="Silicon_slice" material="Si" sensitive="true"/> + </layer> </detector> </detectors> <readouts> <readout name="cb_VTX_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> + <id>system:8,barrel:3,layer:4,module:8,x:32:-16,y:-16</id> </readout> </readouts> diff --git a/compact/definitions.xml b/compact/definitions.xml index 12df234af9dcda430656cec2c6c5371d0cbd756c..d5def7b5cc2c042981c194a369c5d2f07f518cad 100644 --- a/compact/definitions.xml +++ b/compact/definitions.xml @@ -346,6 +346,7 @@ <constant name="cb_VTX_y_pos" value="0.0*mm"/> <constant name="cb_VTX_z_pos" value="0.0*mm"/> + <constant name="cb_VTX_layer" value="6"/> <comment> -------------------------- Silicon Tracker Parameters diff --git a/compact/display.xml b/compact/display.xml index 32523bbae5f79e1607f445be1fca9e64463cc7d8..91e32bd2ac903ee605cfa2b6afa05326b4c0cf71 100644 --- a/compact/display.xml +++ b/compact/display.xml @@ -56,6 +56,7 @@ <vis name="ce_GEMVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/> <vis name="cb_GEM_layerVis" alpha="0.8" r= "0.8" g="0.4" b="0.3" showDaughters="true" visible="true"/> <vis name="cb_VTXVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/> + <vis name="cb_VTX_layerVis" alpha="2.0" r= "0.0" g="0.2" b="0.8" showDaughters="true" visible="true"/> <vis name="ci_GEMVis" r= "0.8" g="0.4" b="0.3" alpha="0.8" showDaughters="true" visible="true"/> <vis name="ci_HCALVis" r= "0.6" g="0" b="0.6" alpha="1.0" showDaughters="true" visible="true"/> diff --git a/src/cb_VTX.cpp b/src/cb_VTX.cpp index 768ff7f9e0d2282490ba3bffe730bfb20afcc9dd..3d58b109e0983f485b1bab8b2f0d203ac1723d73 100644 --- a/src/cb_VTX.cpp +++ b/src/cb_VTX.cpp @@ -31,6 +31,73 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens) Volume detVol("cb_VTX_GVol_Logic", cb_VTX_GVol_Solid, Vacuum); detVol.setVisAttributes(desc.visAttributes(x_det.visStr())); + // Barrel Ladder + 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 x = 0.0 * cm; + double y = 0.0 * cm; + double z = 0.0 * cm; + int FDIV = 0; + double dR = 0.0; + double length = 0.0; + double phi = 0.0; + // Ladder Layer Parameters + double lay_Dx[6]; + double lay_Dy[6]; + double lay_Dz[6]; + double lay_Rin[6]; + lay_Dx[0] = 0.050 * mm; lay_Dy[0] = 2.0 * cm; lay_Dz[0] = 10.0 * cm; lay_Rin[0] = 3.5 * cm; + lay_Dx[1] = 0.050 * mm; lay_Dy[1] = 2.0 * cm; lay_Dz[1] = 11.0 * cm; lay_Rin[1] = 4.5 * cm; + lay_Dx[2] = 0.150 * mm; lay_Dy[2] = 4.0 * cm; lay_Dz[2] = 18.0 * cm; lay_Rin[2] = 6.5 * cm; + lay_Dx[3] = 0.150 * mm; lay_Dy[3] = 4.0 * cm; lay_Dz[3] = 24.0 * cm; lay_Rin[3] = 10.5 * cm; + lay_Dx[4] = 0.150 * mm; lay_Dy[4] = 4.0 * cm; lay_Dz[4] = 36.0 * cm; lay_Rin[4] = 13.5 * cm; + lay_Dx[5] = 0.150 * mm; lay_Dy[5] = 4.0 * cm; lay_Dz[5] = 48.0 * cm; lay_Rin[5] = 15.5 * cm; + + int i_module = 0.0; + // Loop over layers + for(int i = 0; i < repeat; i++) { + double cb_VTX_ladder_DZ = lay_Dz[i]; + double cb_VTX_ladder_DY = lay_Dy[i]; + double cb_VTX_ladder_Thickness = lay_Dx[i]; + dR = lay_Rin[i]; + length = 2.0 * 3.1415 * dR; + int laddersCount = length / cb_VTX_ladder_DY; + + for (int i = 0; i < 2; i++) { + double LN = cb_VTX_ladder_DY * laddersCount; + double LN1 = cb_VTX_ladder_DY * (laddersCount + 1.0 + i); + + if (LN/LN1 > 0.8) + laddersCount = laddersCount + 1; + } + + double cb_VTX_ladder_deltaphi = 2.0 * 3.1415926 / laddersCount; + + string ladderBoxName = detName + _toString(i, "_ladder_Solid_%d"); + string ladderName = detName + _toString(i, "_ladder_Logic_%d"); + Volume ladderVol(ladderName, Box(cb_VTX_ladder_Thickness * 0.5, cb_VTX_ladder_DY * 0.5, cb_VTX_ladder_DZ * 0.5), slice_mat); + ladderVol.setVisAttributes(desc,x_layer.visStr()); + sens.setType("tracker"); + ladderVol.setSensitiveDetector(sens); + + for (int ia = 0; ia < laddersCount; ia++) { + phi = (ia * (cb_VTX_ladder_deltaphi)); + x = - dR * cos(phi); + y = - dR * sin(phi); + + RotationZYX ladder_rot = RotationZYX(cb_VTX_ladder_deltaphi * ia, 0.0, 0.0); + Position ladder_pos = Position(x, y, z); + string ladderName = detName + _toString(i, "_ladder_Phys_%d") + _toString(ia, "_%d"); + PlacedVolume ladderPV = detVol.placeVolume(ladderVol, Transform3D(ladder_rot, ladder_pos)); + i_module++; + ladderPV.addPhysVolID("layer", i+1).addPhysVolID("module", i_module); + } + } + DetElement det(detName, detID); Volume motherVol = desc.pickMotherVolume(det); Transform3D tr(RotationZYX(0.0, 0.0, 0.0), Position(0.0, 0.0, pos.z()));