From f645d27b55bf14bc36c03850a961ca1a5c8692f7 Mon Sep 17 00:00:00 2001 From: Chao Peng <cpeng@anl.gov> Date: Sun, 21 Nov 2021 00:37:43 +0000 Subject: [PATCH] Fix Support Frame for Barrel Ecal --- src/BarrelCalorimeterInterlayers_geo.cpp | 39 +++++++++++------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/BarrelCalorimeterInterlayers_geo.cpp b/src/BarrelCalorimeterInterlayers_geo.cpp index 92ac1d93..e5342d7c 100644 --- a/src/BarrelCalorimeterInterlayers_geo.cpp +++ b/src/BarrelCalorimeterInterlayers_geo.cpp @@ -277,25 +277,22 @@ void buildSupport(Detector& desc, Volume &mod_vol, xml_comp_t x_support, double beam_width = 2. * trd_x1_support / (n_beams + 1); // quick hack to make some gap between T beams double beam_gap = getAttrOrDefault(x_support, _Unicode(beam_gap), 3.*cm); - // build H-shape beam + // build T-shape beam double beam_space_x = beam_width + beam_gap; double beam_space_z = support_thickness - beam_thickness; - double cross_thickness = support_thickness - 2.*beam_thickness; - double beam_pos_z = -beam_thickness / 2.; - double beam_center_z = support_thickness / 2. + beam_pos_z; + double cross_thickness = support_thickness - beam_thickness; + double beam_pos_z = beam_thickness / 2.; + double beam_center_z = support_thickness / 2. - beam_pos_z; - // Box beam_vert_s(beam_thickness / 2., trd_y, cross_thickness / 2.); - Box beam_vert_s(beam_thickness / 2., trd_y, beam_space_z / 2.); + Box beam_vert_s(beam_thickness / 2., trd_y, cross_thickness / 2.); Box beam_hori_s(beam_width / 2., trd_y, beam_thickness / 2.); - // UnionSolid T_beam_s(beam_hori_s, beam_vert_s, Position(0., 0., beam_space_z / 2.)); - // UnionSolid H_beam_s(T_beam_s, beam_hori_s, Position(0., 0., support_thickness - beam_thickness)); UnionSolid T_beam_s(beam_hori_s, beam_vert_s, Position(0., 0., support_thickness / 2.)); Volume H_beam_vol("H_beam", T_beam_s, desc.material(x_support.materialStr())); H_beam_vol.setVisAttributes(desc, x_support.visStr()); // place H beams first double beam_start_x = - (n_beams - 1) * (beam_width + beam_gap) / 2.; for (int i = 0; i < n_beams; ++i) { - Position beam_pos(beam_start_x + i * (beam_width + beam_gap), 0., - support_thickness / 2. - beam_pos_z); + Position beam_pos(beam_start_x + i * (beam_width + beam_gap), 0., - support_thickness / 2. + beam_pos_z); env_vol.placeVolume(H_beam_vol, beam_pos); } @@ -305,10 +302,10 @@ void buildSupport(Detector& desc, Volume &mod_vol, xml_comp_t x_support, Volume cross_vol("cross_center_beam", cross_s, desc.material(x_support.materialStr())); cross_vol.setVisAttributes(desc, x_support.visStr()); for (int i = 0; i < n_beams - 1; ++i) { - env_vol.placeVolume(cross_vol, Position(beam_start_x + beam_space_x * (i + 0.5), 0., 0.)); + env_vol.placeVolume(cross_vol, Position(beam_start_x + beam_space_x * (i + 0.5), 0., beam_pos_z)); for (int j = 1; j < n_cross_supports; j++) { - env_vol.placeVolume(cross_vol, Position(beam_start_x + beam_space_x * (i + 0.5), -j * grid_size, 0.)); - env_vol.placeVolume(cross_vol, Position(beam_start_x + beam_space_x * (i + 0.5), j * grid_size, 0.)); + env_vol.placeVolume(cross_vol, Position(beam_start_x + beam_space_x * (i + 0.5), -j * grid_size, beam_pos_z)); + env_vol.placeVolume(cross_vol, Position(beam_start_x + beam_space_x * (i + 0.5), j * grid_size, beam_pos_z)); } } @@ -317,20 +314,20 @@ void buildSupport(Detector& desc, Volume &mod_vol, xml_comp_t x_support, double cross_edge_x = trd_x1_support + beam_start_x - beam_thickness / 2.; double cross_trd_x1 = cross_edge_x + std::tan(hphi) * beam_thickness; double cross_trd_x2 = cross_trd_x1 + 2.* std::tan(hphi) * cross_thickness; - double edge_pos_x = beam_start_x - beam_thickness / 2. - cross_trd_x1 / 2.; + double edge_pos_x = beam_start_x - cross_trd_x1 / 2. - beam_thickness / 2; Trapezoid cross_s2_trd (cross_trd_x1 / 2., cross_trd_x2 / 2., beam_thickness / 2., beam_thickness / 2., cross_thickness / 2.); - Box cross_s2_box ((cross_trd_x2 - cross_trd_x1)/2., beam_thickness / 2., cross_thickness / 2.); - SubtractionSolid cross_s2(cross_s2_trd, cross_s2_box, Position((cross_trd_x1 + cross_trd_x2) / 4., 0., 0.)); + Box cross_s2_box ((cross_trd_x2 - cross_trd_x1)/4., beam_thickness / 2., cross_thickness / 2.); + SubtractionSolid cross_s2(cross_s2_trd, cross_s2_box, Position((cross_trd_x2 + cross_trd_x1)/4., 0., 0.)); Volume cross_vol2("cross_edge_beam", cross_s2, desc.material(x_support.materialStr())); cross_vol2.setVisAttributes(desc, x_support.visStr()); - env_vol.placeVolume(cross_vol2, Position(edge_pos_x, 0., 0.)); - env_vol.placeVolume(cross_vol2, Transform3D(Translation3D(-edge_pos_x, 0., 0.) * RotationZ(M_PI))); + env_vol.placeVolume(cross_vol2, Position(edge_pos_x, 0., beam_pos_z)); + env_vol.placeVolume(cross_vol2, Transform3D(Translation3D(-edge_pos_x, 0., beam_pos_z) * RotationZ(M_PI))); for (int j = 1; j < n_cross_supports; j++) { - env_vol.placeVolume(cross_vol2, Position(edge_pos_x, -j * grid_size, 0.)); - env_vol.placeVolume(cross_vol2, Position(edge_pos_x, j * grid_size, 0.)); - env_vol.placeVolume(cross_vol2, Transform3D(Translation3D(-edge_pos_x, -j * grid_size, 0.) * RotationZ(M_PI))); - env_vol.placeVolume(cross_vol2, Transform3D(Translation3D(-edge_pos_x, j * grid_size, 0.) * RotationZ(M_PI))); + env_vol.placeVolume(cross_vol2, Position(edge_pos_x, -j * grid_size, beam_pos_z)); + env_vol.placeVolume(cross_vol2, Position(edge_pos_x, j * grid_size, beam_pos_z)); + env_vol.placeVolume(cross_vol2, Transform3D(Translation3D(-edge_pos_x, -j * grid_size, beam_pos_z) * RotationZ(M_PI))); + env_vol.placeVolume(cross_vol2, Transform3D(Translation3D(-edge_pos_x, j * grid_size, beam_pos_z) * RotationZ(M_PI))); } mod_vol.placeVolume(env_vol, Position(0.0, 0.0, l_pos_z + support_thickness/2.)); -- GitLab