diff --git a/compact/materials.xml b/compact/materials.xml index 7cafe677e..2f5757490 100644 --- a/compact/materials.xml +++ b/compact/materials.xml @@ -571,4 +571,12 @@ + + + + + + + + diff --git a/compact/tracking/support_service_craterlake.xml b/compact/tracking/support_service_craterlake.xml index 89a6af051..3f9e51818 100644 --- a/compact/tracking/support_service_craterlake.xml +++ b/compact/tracking/support_service_craterlake.xml @@ -34,6 +34,644 @@ + PST thermal membrane + Specifications are from SVT PST Drawing PACKET SEP 2025.pdf + + + + + + + + + + (Negative) SVT PST Fingure + Specifications are from SVT PST Drawing PACKET SEP 2025.pdf + + + + + + + + + + + + + + (Positive) SVT PST Fingure + Specifications are from SVT PST Drawing PACKET SEP 2025.pdf + + + + + + + + + + + + + + SVT PST Feet + Specifications are from SVT PST Drawing PACKET SEP 2025.pdf + + + + + 190.9 mm per drawing. But modifying to avoid conflict! + + + + + + + + + + + + + + + + + + + + + + + + From the STP file. + + + From the STP file. + + + + + (Negative) Service Passthrough Plate + + Specifications are from SVT PST Drawing PACKET SEP 2025.pdf + General dimensions (we assume hole-specs are the same for top and bottom half) + + + Gap between two holes + + + + + + + + + + + + half-width of beampipe support plate cutout + Top half ring holes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bottom half ring holes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + rectangular cutout in the middle + + + + + + (Positive) Service Passthrough Plate + + Specifications are from SVT PST Drawing PACKET SEP 2025.pdf + General dimensions (we assume hole-specs are the same for top and bottom half) + + + Gap between two holes + + + + + + + + + + + + half-width of beampipe support plate cutout + Top half ring holes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bottom half ring holes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + rectangular cutout in the middle + + + + + + (Negative) beampipe Support Plate + + Specifications are from SVT PST Drawing PACKET SEP 2025.pdf + General dimensions + + + Absolute value + + + dimensions of the ring shaped sheet in the middle + + + + dimensions of the rectangular sheet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (Positive) beampipe Support Plate + + Specifications are from SVT PST Drawing PACKET SEP 2025.pdf + General dimensions + + + + + + dimensions of the ring shaped sheet in the middle + + + + + dimensions of the rectangular sheet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (Positive) beampipe support mechanism + + Specifications are from SVT PST Drawing PACKET SEP 2025.pdf + central ring + + + + + + + + From SVT PST Drawing PACKET SEP 2025 STP File + + + + + + + + + + + + + + + + + + + + + + peripheral half-central ring + + + + + from SVT PST Drawing PACKET SEP 2025 STP file + + + + + beampipe support clamp + + + + + an approximation + + + + + + (Negative) beampipe support mechanism + + Specifications are from SVT PST Drawing PACKET SEP 2025.pdf + central ring + + + + + + + + From SVT PST Drawing PACKET SEP 2025 STP File + + + + + + + + + From SVT PST Drawing PACKET SEP 2025 STP File + From SVT PST Drawing PACKET SEP 2025 STP File + + + + + + + + + + + + + + + + + + peripheral half-central ring + + + + + No info! Assuming same as the positive side! + + + + beampipe support clamp + + + + + No info! Assuming same as the positive side! + + + + Inner tracker service/support cones, symmetric Effective Aluminum for services for now @@ -67,17 +705,21 @@ + - Ref: SVT PST Drawing PACKET SEP 2025.pdf + Ref: SVT PST Drawing PACKET SEP 2025.pdf + Ref: SVT PST Drawing PACKET SEP 2025.pdf. Crude measure to avoid overlap! + + Ref: WP9: 20251003 - services by E. Sichtermann Ref: WP9: 20251003 - services by E. Sichtermann @@ -90,18 +732,22 @@ + - Ref: SVT PST Drawing PACKET SEP 2025.pdf + Ref: SVT PST Drawing PACKET SEP 2025.pdf + Ref: SVT PST Drawing PACKET SEP 2025.pdf. Crude measure to avoid overlap! + + Ref: WP9: 20251003 - services by E. Sichtermann Ref: WP9: 20251003 - services by E. Sichtermann @@ -110,6 +756,43 @@ + Services Routing Flange (WIP) for SVT : 1 Cylinder + 1 Cone + Specifications are from SVT PST Drawing PACKET SEP 2025.pdf + Cylinder dimensions + + + + + + + Cone dimensions + + + + + + From SVT PST Drawing PACKET SEP 2025.pdf + + + SVT Support Tube Joints + Specifications are from SVT PST Drawing PACKET SEP 2025.pdf + INPORTANT NOTEs: + 1. Putting the joint outside of PST instead of inside to avoid re-writing existing support-service code. + 2. On the negative side, extending it up to the service routing flange to avoid operlap. + 3. On the positive side, extending it up to the base of PST fingure to avoid operlap with PST feet. + + + + + + + + + + + + Outer tracker service/support cones, asymmetric @@ -324,6 +1007,1950 @@ id="TrackerSupport_0_ID" > + PST thermal membrane implementation + + + + + + + + + + + (Positive) Service passthrough plate implementation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Making holes in the bottom half-ring + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Making rectangular cut in the center + + + + + + + (Positive) Beampipe Support Plate + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (Positive) Beampipe Support Mechanism Implemeantion + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (Negative) Beampipe Support Plate + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (Negative) Beampipe Support Mechanism Implemeantion + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (Negative) Service passthrough plate implementation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Making holes in the bottom half-ring + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Making rectangular cut in the center + + + + + + + Support routing flange + + + + + + + + + + + SVT Support Tube Joint Implementation + INPORTANT NOTEs: + 1. Putting the joint outside of PST instead of inside to avoid re-writing existing support-service code. + 2. On the negative side, extending it up to the service routing flange to avoid operlap. + + + + + + + + + + PST Feet implementation + Positive left side (while looking downstream) + + + + + + + + + + + + + + + + + + + + + + + + + + + + Positive right side (while looking downstream) + + + + + + + + + + + + + + + + + + + + + + + + + + + + Negative left side (while looking downstream) + + + + + + + + + + + + + + + + + + + + + + + + + + + + Negative right side (while looking downstream) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (Negative) SVT PST 2452plementation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (Positive) SVT PST Fingure implementation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -372,27 +2999,45 @@ - + --> + + + + + + + @@ -402,25 +3047,44 @@ - + --> + + + + + + + - - - --> + outer barrel build_shape(const Detector& descr, const xml_det_ return {vol, tr}; } -// Function to create a subtraction of two shapes +// Function to create a subtraction of multiple shapes std::pair build_subtraction(const Detector& descr, const xml_det_t& x_det, const xml_comp_t& x_subtraction) { - // Get the two shapes to subtract - xml_comp_t x_shape1 = x_subtraction.child(_Unicode(shape1)); - xml_comp_t x_shape2 = x_subtraction.child(_Unicode(shape2)); - - // Build the primary shape (without transformation) - auto [vol1, tr1_unused] = build_shape(descr, x_det, x_shape1, x_shape1); - Solid solid1 = vol1.solid(); - - // Build the shape to subtract (without transformation) - auto [vol2, tr2_unused] = build_shape(descr, x_det, x_shape2, x_shape2); - Solid solid2 = vol2.solid(); - - // Get relative transformation for shape2 (relative to shape1's center) - xml_dim_t x_pos2(x_shape2.child(_U(position), false)); - xml_dim_t x_rot2(x_shape2.child(_U(rotation), false)); - Position pos2{0, 0, 0}; - Rotation3D rot2; - - if (x_rot2) { - rot2 = RotationZYX(x_rot2.z(0), x_rot2.y(0), x_rot2.x(0)); + + // Try generic multi-shape schema: + N x + Solid baseSolid; + bool baseSet = false; + bool haveGenericShapes = false; + std::vector> holes; + + for (xml_coll_t s{x_subtraction, _U(shape)}; s; ++s) { + haveGenericShapes = true; + xml_comp_t x_s = s; + + // Build solid for this child + auto [v, tr_unused] = build_shape(descr, x_det, x_s, x_s); + Solid sld = v.solid(); + + // Relative transform (default identity) for this child + xml_dim_t x_pos(x_s.child(_U(position), false)); + xml_dim_t x_rot(x_s.child(_U(rotation), false)); + Position pos{0, 0, 0}; + Rotation3D rot; + if (x_rot) + rot = RotationZYX(x_rot.z(0), x_rot.y(0), x_rot.x(0)); + if (x_pos) + pos = Position(x_pos.x(0), x_pos.y(0), x_pos.z(0)); + Transform3D tr_rel(rot, pos); + + const std::string role = getAttrOrDefault(x_s, _Unicode(role), "hole"); + if (role == "base" || role == "primary") { + baseSolid = sld; + baseSet = true; + } else { + holes.emplace_back(sld, tr_rel); + } + } + + // Backward compatibility: if no generic elements, use / + if (!haveGenericShapes) { + xml_comp_t x_shape1 = x_subtraction.child(_Unicode(shape1)); + xml_comp_t x_shape2 = x_subtraction.child(_Unicode(shape2)); + if (!x_shape1 || !x_shape2) { + printout(ERROR, x_det.nameStr(), + "Subtraction %s: expected shape1/shape2 or generic children.", + x_subtraction.nameStr().c_str()); + std::exit(1); + } + auto [vol1, tr1_unused] = build_shape(descr, x_det, x_shape1, x_shape1); + auto [vol2, tr2_unused] = build_shape(descr, x_det, x_shape2, x_shape2); + baseSolid = vol1.solid(); + baseSet = true; + + // Relative transform for shape2 + xml_dim_t x_pos2(x_shape2.child(_U(position), false)); + xml_dim_t x_rot2(x_shape2.child(_U(rotation), false)); + Position pos2{0, 0, 0}; + Rotation3D rot2; + if (x_rot2) + rot2 = RotationZYX(x_rot2.z(0), x_rot2.y(0), x_rot2.x(0)); + if (x_pos2) + pos2 = Position(x_pos2.x(0), x_pos2.y(0), x_pos2.z(0)); + holes.emplace_back(vol2.solid(), Transform3D(rot2, pos2)); } - if (x_pos2) { - pos2 = Position(x_pos2.x(0), x_pos2.y(0), x_pos2.z(0)); + + if (!baseSet) { + printout(ERROR, x_det.nameStr(), "Subtraction %s: no base shape found (role=\"base\").", + x_subtraction.nameStr().c_str()); + std::exit(1); } - // Create the subtraction solid - Transform3D tr_relative(rot2, pos2); - SubtractionSolid subtracted_solid(solid1, solid2, tr_relative); + // Chain subtractions: base − hole1 − hole2 − ... + Solid current = baseSolid; + for (auto& h : holes) { + current = SubtractionSolid(current, h.first, h.second); + } - // Create volume with the subtracted solid - Material mat = descr.material(getAttrOrDefault(x_subtraction, _U(material), "Air")); - std::string vol_name = getAttrOrDefault(x_subtraction, _U(name), "subtraction_vol"); - Volume vol{vol_name, subtracted_solid, mat}; + // Create the resulting volume + Material mat = + descr.material(getAttrOrDefault(x_subtraction, _Unicode(material), "Air")); + std::string vol_name = + getAttrOrDefault(x_subtraction, _Unicode(name), "subtraction_vol"); + Volume vol{vol_name, current, mat}; - // Get overall position/rotation for the subtracted volume + // Overall placement of the resulting volume xml_dim_t x_pos(x_subtraction.child(_U(position), false)); xml_dim_t x_rot(x_subtraction.child(_U(rotation), false)); Position pos3D{0, 0, 0}; Rotation3D rot3D; - - if (x_rot) { + if (x_rot) rot3D = RotationZYX(x_rot.z(0), x_rot.y(0), x_rot.x(0)); - } - if (x_pos) { + if (x_pos) pos3D = Position(x_pos.x(0), x_pos.y(0), x_pos.z(0)); - } - Transform3D tr(rot3D, pos3D); // Set visualization if specified @@ -219,7 +262,8 @@ std::pair build_subtraction(const Detector& descr, const xm } // Debug output - printout(DEBUG, "SupportServiceMaterial", "Created subtraction volume: %s", vol_name.c_str()); + printout(DEBUG, "SupportServiceMaterial", "Created subtraction volume: %s (holes=%d)", + vol_name.c_str(), int(holes.size())); return {vol, tr}; }