From a753b36cb1e3823c238b037bdbc5638256acd7c3 Mon Sep 17 00:00:00 2001 From: Alex Jentsch Date: Wed, 16 Oct 2024 11:25:43 -0400 Subject: [PATCH] Update sensor geometry for rp (#791) ### Briefly, what does this PR introduce? This PR introduces changing RP geometry for the various beam energies, and updates the sensor size for the AC-LGADs to what we are planning to build. ### What kind of change does this PR introduce? - [ ] Bug fix (issue #__) - [ x] New feature (issue #__) - [ ] Documentation update - [ ] Other: __ ### Please check if this PR fulfills the following: - [ x] Tests for the changes have been added (see PDF) - [ x] Documentation has been added / updated - [x ] Changes have been communicated to collaborators Changes will be presented at meetings on Monday and Tuesday (Oct 14th and 15th) See slides here: https://www.dropbox.com/scl/fi/43mhwxeyvluku0w1ojqfr/new_roman_pots_geometry_10_9_2024.pdf?rlkey=w0wc0gzrk4d03e8uh9w8s0tq5&dl=0 ### Does this PR introduce breaking changes? What changes might users need to make to their code? No changes to user code needed, but users need to be careful to select the correct geometry when running dd4hep AND EICrecon. (https://chat.epic-eic.org/main/pl/rptqecge1jyctkkwa1454zy1mw) I will hopefully address this issue in a PR immediately following this one. ### Does this PR change default behavior? Yes, the low-pT acceptances at the Roman pots will be much closer to reality now, and will vary with beam energy, as they should. --------- Co-authored-by: Alexander Jentsch Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> (cherry picked from commit 21add614bd6603e3ca9b07881d245abda434789e) --- compact/display.xml | 8 +- .../far_forward/roman_pots_eRD24_design.xml | 182 +++++++++--------- compact/fields/beamline_10x100.xml | 10 + compact/fields/beamline_10x110_H2.xml | 12 ++ compact/fields/beamline_10x275.xml | 10 + compact/fields/beamline_18x110_Au.xml | 12 ++ compact/fields/beamline_18x110_H2.xml | 12 ++ compact/fields/beamline_18x110_He3.xml | 12 ++ compact/fields/beamline_18x110_Pb.xml | 12 ++ compact/fields/beamline_18x275.xml | 11 ++ compact/fields/beamline_5x100.xml | 10 + compact/fields/beamline_5x110_H2.xml | 12 ++ compact/fields/beamline_5x41.xml | 10 + compact/fields/beamline_5x41_H2.xml | 12 ++ compact/fields/beamline_5x41_He3.xml | 12 ++ compact/fields/beamline_5x41_He4.xml | 12 ++ src/ForwardRomanPot_geo.cpp | 33 +--- 17 files changed, 265 insertions(+), 117 deletions(-) diff --git a/compact/display.xml b/compact/display.xml index ea4b367e4..daf1d4898 100644 --- a/compact/display.xml +++ b/compact/display.xml @@ -50,14 +50,14 @@ - - - + + + For shielded modules by default just display to module instead of 6 layers - + Luminosity Visualisation diff --git a/compact/far_forward/roman_pots_eRD24_design.xml b/compact/far_forward/roman_pots_eRD24_design.xml index f3a393c62..ea301ec34 100644 --- a/compact/far_forward/roman_pots_eRD24_design.xml +++ b/compact/far_forward/roman_pots_eRD24_design.xml @@ -5,9 +5,10 @@ --------------------------------- - Roman Pots Implementation from eRD24 RD Effort + Roman Pots Implementation updated strawman layout (only layer materials) Author: Alex Jentsch Date of first commit: June 15th, 2021 + Last update: Oct 8th, 2024 --------------------------------- @@ -21,45 +22,31 @@ - - - - - - + - - + - + + - - + + - - + + + + - - - - - - - - - - - - + - - + + @@ -88,49 +75,60 @@ reflect="false" vis="FFTrackerVis"> - + - - - + + - - + + - + - - - - - - - - - - - - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -163,7 +161,7 @@ vis="FFTrackerVis"> - + @@ -172,38 +170,50 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -232,7 +242,7 @@ - system:8,assembly:3,layer:4,module:4,sensor:4,x:32:-16,y:-16 + system:8,assembly:3,layer:4,module:8,sensor:8,x:32:-16,y:-16 diff --git a/compact/fields/beamline_10x100.xml b/compact/fields/beamline_10x100.xml index 8d9ce5c11..174e6cbea 100644 --- a/compact/fields/beamline_10x100.xml +++ b/compact/fields/beamline_10x100.xml @@ -54,4 +54,14 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + + + + + + diff --git a/compact/fields/beamline_10x110_H2.xml b/compact/fields/beamline_10x110_H2.xml index e1fbea347..47f6eee52 100644 --- a/compact/fields/beamline_10x110_H2.xml +++ b/compact/fields/beamline_10x110_H2.xml @@ -55,4 +55,16 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine). + + + + + + + diff --git a/compact/fields/beamline_10x275.xml b/compact/fields/beamline_10x275.xml index a2d0e47f0..e8a790ecb 100644 --- a/compact/fields/beamline_10x275.xml +++ b/compact/fields/beamline_10x275.xml @@ -54,4 +54,14 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + + + + + + diff --git a/compact/fields/beamline_18x110_Au.xml b/compact/fields/beamline_18x110_Au.xml index 44725ebc8..78800577e 100644 --- a/compact/fields/beamline_18x110_Au.xml +++ b/compact/fields/beamline_18x110_Au.xml @@ -55,4 +55,16 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine). + + + + + + + diff --git a/compact/fields/beamline_18x110_H2.xml b/compact/fields/beamline_18x110_H2.xml index 7ab918a99..23c5b4c90 100644 --- a/compact/fields/beamline_18x110_H2.xml +++ b/compact/fields/beamline_18x110_H2.xml @@ -55,4 +55,16 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine). + + + + + + + diff --git a/compact/fields/beamline_18x110_He3.xml b/compact/fields/beamline_18x110_He3.xml index d1bf496f1..899b830eb 100644 --- a/compact/fields/beamline_18x110_He3.xml +++ b/compact/fields/beamline_18x110_He3.xml @@ -55,4 +55,16 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine). + + + + + + + diff --git a/compact/fields/beamline_18x110_Pb.xml b/compact/fields/beamline_18x110_Pb.xml index 9801622be..eee1d8ea4 100644 --- a/compact/fields/beamline_18x110_Pb.xml +++ b/compact/fields/beamline_18x110_Pb.xml @@ -55,4 +55,16 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine). + + + + + + + diff --git a/compact/fields/beamline_18x275.xml b/compact/fields/beamline_18x275.xml index 713ae0b2b..3e1f2c634 100644 --- a/compact/fields/beamline_18x275.xml +++ b/compact/fields/beamline_18x275.xml @@ -55,4 +55,15 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + + + + + + + diff --git a/compact/fields/beamline_5x100.xml b/compact/fields/beamline_5x100.xml index 9d8624b6e..0a35ef845 100644 --- a/compact/fields/beamline_5x100.xml +++ b/compact/fields/beamline_5x100.xml @@ -54,4 +54,14 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + + + + + + diff --git a/compact/fields/beamline_5x110_H2.xml b/compact/fields/beamline_5x110_H2.xml index 7a65b2ee3..7669f7f11 100644 --- a/compact/fields/beamline_5x110_H2.xml +++ b/compact/fields/beamline_5x110_H2.xml @@ -55,4 +55,16 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine). + + + + + + + diff --git a/compact/fields/beamline_5x41.xml b/compact/fields/beamline_5x41.xml index ca787e71b..1b8a4f0d1 100644 --- a/compact/fields/beamline_5x41.xml +++ b/compact/fields/beamline_5x41.xml @@ -54,4 +54,14 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + + + + + + diff --git a/compact/fields/beamline_5x41_H2.xml b/compact/fields/beamline_5x41_H2.xml index 7a1f415cc..101fb0ac4 100644 --- a/compact/fields/beamline_5x41_H2.xml +++ b/compact/fields/beamline_5x41_H2.xml @@ -55,4 +55,16 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine). + + + + + + + diff --git a/compact/fields/beamline_5x41_He3.xml b/compact/fields/beamline_5x41_He3.xml index d474b021f..b7ada8161 100644 --- a/compact/fields/beamline_5x41_He3.xml +++ b/compact/fields/beamline_5x41_He3.xml @@ -55,4 +55,16 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine). + + + + + + + diff --git a/compact/fields/beamline_5x41_He4.xml b/compact/fields/beamline_5x41_He4.xml index 1a2561621..21e8abf83 100644 --- a/compact/fields/beamline_5x41_He4.xml +++ b/compact/fields/beamline_5x41_He4.xml @@ -55,4 +55,16 @@ + + These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have. + They are not perfectly ten-sigma for reasons of physical geometry. + + Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine). + + + + + + + diff --git a/src/ForwardRomanPot_geo.cpp b/src/ForwardRomanPot_geo.cpp index f3e9e2b50..052178b3d 100644 --- a/src/ForwardRomanPot_geo.cpp +++ b/src/ForwardRomanPot_geo.cpp @@ -32,8 +32,8 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s for (xml_coll_t mi(x_det, _U(module)); mi; ++mi, ++m_id) { xml_comp_t x_mod = mi; string m_nam = x_mod.nameStr(); - double mod_width = getAttrOrDefault(x_mod, _U(width), 3.2 * cm); - double mod_height = getAttrOrDefault(x_mod, _U(height), 3.2 * cm); + double mod_width = getAttrOrDefault(x_mod, _U(width), 1.6 * cm); + double mod_height = getAttrOrDefault(x_mod, _U(height), 1.6 * cm); double mod_total_thickness = 0.; xml_coll_t ci(x_mod, _U(module_component)); @@ -42,9 +42,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s Box m_solid(mod_width / 2.0, mod_height / 2.0, mod_total_thickness / 2.0); Volume m_volume(m_nam, m_solid, vacuum); - //set to AnlGold temporarily for future RP troubleshooting - //m_volume.setVisAttributes(description.visAttributes(x_mod.visStr())); - m_volume.setVisAttributes(description.visAttributes("AnlGold")); + m_volume.setVisAttributes(description.visAttributes(x_mod.visStr())); double comp_z_pos = -mod_total_thickness / 2.0; int n_sensor = 1; @@ -99,8 +97,8 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s double nx = getAttrOrDefault(x_array, _Unicode(nx), 1); double ny = getAttrOrDefault(x_array, _Unicode(ny), 1); double dz = getAttrOrDefault(x_array, _Unicode(dz), 0 * mm); - double arr_width = getAttrOrDefault(x_array, _Unicode(width), 3.2 * cm); - double arr_height = getAttrOrDefault(x_array, _Unicode(height), 3.2 * cm); + double arr_width = getAttrOrDefault(x_array, _Unicode(width), 1.6 * cm); + double arr_height = getAttrOrDefault(x_array, _Unicode(height), 1.6 * cm); std::string arr_module = getAttrOrDefault(x_array, _Unicode(module), ""); // TODO: add check here auto arr_vol = modules[arr_module]; @@ -120,6 +118,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s if (x_pos) { arr_pos += Position(x_pos.x(0), x_pos.y(0), x_pos.z(0)); } + DetElement mod_de(ma_de, ma_name + std::string("_mod") + std::to_string(i_mod), i_mod); pv = ma_vol.placeVolume(arr_vol, arr_pos); pv.addPhysVolID("module", i_mod); @@ -128,12 +127,6 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s PlacedVolume sens_pv = sensVols[ic]; DetElement comp_de(mod_de, std::string("de_") + sens_pv.volume().name(), ic + 1); comp_de.setPlacement(sens_pv); - // Acts::ActsExtension* sensorExtension = new Acts::ActsExtension(); - //// sensorExtension->addType("sensor", "detector"); - // comp_de.addExtension(sensorExtension); - //// comp_de.setAttributes(description, sens_pv.volume(), - /// x_layer.regionStr(), / x_layer.limitsStr(), / - /// xml_det_t(xmleles[m_nam]).visStr()); } } } @@ -159,11 +152,9 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s xml_comp_t x_comp = ci; xml_comp_t c_pos = x_comp.position(false); - // string ma_name = x_comp.nameStr(); string comp_assembly = getAttrOrDefault(x_comp, _Unicode(assembly), ""); auto comp_vol = module_assemblies[comp_assembly]; - // auto de = ; auto comp_de = module_assembly_delements[comp_assembly].clone(comp_assembly + std::to_string(l_num)); if (c_pos) { @@ -175,25 +166,13 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s comp_de.setPlacement(pv); layer.add(comp_de); i_assembly++; - // DetElement det = module > 1 ? stave.clone(_toString(module,"stave%d")) - // : stave; Transform3D trafo(RotationZYX(0, rotY, rotX), - // Translation3D(-posX, -posY, 0)); PlacedVolume pv = - // envelopeVolume.placeVolume(sectVolume,trafo); - //// Not a valid volID: pv.addPhysVolID("stave", 0); - // pv.addPhysVolID("module", module); - // det.setPlacement(pv); - // parent.add(det); } pv = assembly.placeVolume(l_vol, l_pos); pv.addPhysVolID("layer", l_num); } - // pv = description.pickMotherVolume(sdet).placeVolume(assembly, - // Position(pos.x(), pos.y(), pos.z())); Transform3D posAndRot(RotationZYX(rot.z(), rot.y(), rot.x()), Position(pos.x(), pos.y(), pos.z())); - // pv = description.pickMotherVolume(sdet).placeVolume(assembly, - // Position(pos.x(), pos.y(), pos.z())); pv = description.pickMotherVolume(sdet).placeVolume(assembly, posAndRot); pv.addPhysVolID("system", x_det.id()); // Set the subdetector system ID. sdet.setPlacement(pv);