From c209fecd2d5fb367fab099606bf42e8d1d55b2fc Mon Sep 17 00:00:00 2001
From: Chao Peng <cpeng@anl.gov>
Date: Mon, 21 Jun 2021 21:01:48 -0500
Subject: [PATCH] reduce number of SciGlass modules to avoid overlaps with
 barrel

---
 compact/ce_ecal_crystal_glass.xml | 18 +++++++++---------
 scripts/ce_ecal_placement.py      | 29 +++++++++++++++++------------
 2 files changed, 26 insertions(+), 21 deletions(-)

diff --git a/compact/ce_ecal_crystal_glass.xml b/compact/ce_ecal_crystal_glass.xml
index 45915ca4..cead6102 100644
--- a/compact/ce_ecal_crystal_glass.xml
+++ b/compact/ce_ecal_crystal_glass.xml
@@ -56,11 +56,11 @@
           <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*1/2." z="GlassModule_z0" begin="12" nmods="11"/>
           <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*3/2." z="GlassModule_z0" begin="12" nmods="11"/>
           <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*5/2." z="GlassModule_z0" begin="12" nmods="11"/>
-          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*7/2." z="GlassModule_z0" begin="11" nmods="12"/>
-          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*9/2." z="GlassModule_z0" begin="11" nmods="12"/>
-          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*11/2." z="GlassModule_z0" begin="11" nmods="12"/>
+          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*7/2." z="GlassModule_z0" begin="11" nmods="11"/>
+          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*9/2." z="GlassModule_z0" begin="11" nmods="11"/>
+          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*11/2." z="GlassModule_z0" begin="11" nmods="11"/>
           <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*13/2." z="GlassModule_z0" begin="10" nmods="12"/>
-          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*15/2." z="GlassModule_z0" begin="9" nmods="13"/>
+          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*15/2." z="GlassModule_z0" begin="9" nmods="12"/>
           <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*17/2." z="GlassModule_z0" begin="8" nmods="13"/>
           <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*19/2." z="GlassModule_z0" begin="7" nmods="14"/>
           <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*21/2." z="GlassModule_z0" begin="6" nmods="14"/>
@@ -68,14 +68,14 @@
           <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*25/2." z="GlassModule_z0" begin="0" nmods="19"/>
           <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*27/2." z="GlassModule_z0" begin="0" nmods="18"/>
           <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*29/2." z="GlassModule_z0" begin="0" nmods="18"/>
-          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*31/2." z="GlassModule_z0" begin="0" nmods="17"/>
-          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*33/2." z="GlassModule_z0" begin="0" nmods="17"/>
-          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*35/2." z="GlassModule_z0" begin="0" nmods="15"/>
+          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*31/2." z="GlassModule_z0" begin="0" nmods="16"/>
+          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*33/2." z="GlassModule_z0" begin="0" nmods="16"/>
+          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*35/2." z="GlassModule_z0" begin="0" nmods="14"/>
           <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*37/2." z="GlassModule_z0" begin="0" nmods="13"/>
           <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*39/2." z="GlassModule_z0" begin="0" nmods="11"/>
           <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*41/2." z="GlassModule_z0" begin="0" nmods="10"/>
-          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*43/2." z="GlassModule_z0" begin="0" nmods="8"/>
-          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*45/2." z="GlassModule_z0" begin="0" nmods="6"/>
+          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*43/2." z="GlassModule_z0" begin="0" nmods="7"/>
+          <line axis="x" x="GlassModule_dx/2." y="GlassModule_dy*45/2." z="GlassModule_z0" begin="0" nmods="3"/>
         </lines>
       </placements>
     </detector>
diff --git a/scripts/ce_ecal_placement.py b/scripts/ce_ecal_placement.py
index b06f2ee4..642181dd 100644
--- a/scripts/ce_ecal_placement.py
+++ b/scripts/ce_ecal_placement.py
@@ -29,12 +29,12 @@ CRYSTAL_ALIGNMENT = [
 GLASS_SIZE = (40., 40., 400.) # mm
 GLASS_GAP = 1.0 # mm
 GLASS_ALIGNMENT = [
-    (12, 11), (12, 11), (12, 11), (11, 12),
-    (11, 12), (11, 12), (10, 12), (9, 13),
+    (12, 11), (12, 11), (12, 11), (11, 11),
+    (11, 11), (11, 11), (10, 12), (9, 12),
     (8, 13),  (7, 14),  (6, 14),  (3, 16),
-    (0, 19),  (0, 18),  (0, 18),  (0, 17),
-    (0, 17),  (0, 15),  (0, 13),  (0, 11),
-    (0, 10),  (0, 8),   (0, 6),
+    (0, 19),  (0, 18),  (0, 18),  (0, 16),
+    (0, 16),  (0, 14),  (0, 13),  (0, 11),
+    (0, 10),  (0, 7),   (0, 3),
 ]
 
 # calculate positions of modules with a quad-alignment and module size
@@ -52,22 +52,26 @@ def individual_placement(alignment, module_x, module_y, gap=0.):
 
 def draw_placement(axis, colors=('teal'), module_alignment=((CRYSTAL_SIZE, CRYSTAL_GAP, CRYSTAL_ALIGNMENT))):
     xmin, ymin, xmax, ymax = 0., 0., 0., 0.
+    patches = []
+    numbers = []
     for color, (mod_size, mod_gap, alignment) in zip(colors, module_alignment):
         placements = individual_placement(alignment, *mod_size[:2], mod_gap)
         boxes = [Rectangle((x - (mod_size[0] + mod_gap)/2., y - (mod_size[1] + mod_gap)/2.), mod_size[0], mod_size[1])
                  for x, y in placements]
+        patches.append(Rectangle((0., 0.), *mod_size[:2], facecolor=color, alpha=0.5, edgecolor='k'))
+        numbers.append(len(placements))
         pc = PatchCollection(boxes, facecolor=color, alpha=0.5, edgecolor='k')
 
-        xmin = min(xmin, placements.T[0].min() - 3.*(mod_size[0] + mod_gap))
-        ymin = min(ymin, placements.T[1].min() - 3.*(mod_size[1] + mod_gap))
-        xmax = max(xmax, placements.T[0].max() + 3.*(mod_size[0] + mod_gap))
-        ymax = max(ymax, placements.T[1].max() + 3.*(mod_size[1] + mod_gap))
+        xmin = min(xmin, placements.T[0].min() - 8.*(mod_size[0] + mod_gap))
+        ymin = min(ymin, placements.T[1].min() - 8.*(mod_size[1] + mod_gap))
+        xmax = max(xmax, placements.T[0].max() + 8.*(mod_size[0] + mod_gap))
+        ymax = max(ymax, placements.T[1].max() + 8.*(mod_size[1] + mod_gap))
 
         # Add collection to axes
         axis.add_collection(pc)
     axis.set_xlim(xmin, xmax)
     axis.set_ylim(ymin, ymax)
-    return axis
+    return axis, patches, numbers
 
 
 def compact_constants(path, names):
@@ -261,13 +265,14 @@ if __name__ == '__main__':
 
 
     fig, ax = plt.subplots(figsize=(12, 12), dpi=160)
-    ax = draw_placement(ax, ['teal', 'royalblue'], [(CRYSTAL_SIZE, CRYSTAL_GAP, CRYSTAL_ALIGNMENT),
-                                                    (GLASS_SIZE, GLASS_GAP, GLASS_ALIGNMENT)])
+    ax, patches, nblocks = draw_placement(ax, ['teal', 'royalblue'],
+            [(CRYSTAL_SIZE, CRYSTAL_GAP, CRYSTAL_ALIGNMENT), (GLASS_SIZE, GLASS_GAP, GLASS_ALIGNMENT)])
     ax.set_xlabel('x (mm)', fontsize=24)
     ax.set_ylabel('y (mm)', fontsize=24)
     ax.tick_params(direction='in', labelsize=22, which='both')
     ax.set_axisbelow(True)
     ax.grid(linestyle=':', which='both')
+    ax.legend(patches, ['{} {}'.format(num, name) for num, name in zip(nblocks, ['PbWO$_4$', 'SciGlass'])], fontsize=24)
 
     if args.compact and args.radii:
         names = [c.strip() for c in args.radii.split(',')]
-- 
GitLab