From 9379244124676f03da31dd2e4911a6ebab52ffab Mon Sep 17 00:00:00 2001
From: "jihee.kim" <jihee.kim@anl.gov>
Date: Wed, 14 Apr 2021 18:29:16 -0500
Subject: [PATCH] Added ladder

---
 compact/cb_VTX.xml      |  5 ++-
 compact/definitions.xml |  1 +
 compact/display.xml     |  1 +
 src/cb_VTX.cpp          | 67 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 73 insertions(+), 1 deletion(-)

diff --git a/compact/cb_VTX.xml b/compact/cb_VTX.xml
index 45ffee5..e3710b4 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 12df234..d5def7b 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 32523bb..91e32bd 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 768ff7f..3d58b10 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()));
-- 
GitLab