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