71 const double f = (z_mm - params.zEntrance) /
subLength(params);
72 return std::clamp(
static_cast<int>(f), 0, params.nSubFrustum - 1);
81 const double zLo =
zSubLo(s, params);
112 const double yHalf =
yHalfAt(z_mm, params);
130 return std::min(sensor, beam);
147 if (i >= 2 * params.nSubFrustum) {
148 return zExit(params);
166 constexpr double kEps = 1e-6;
167 const double lo = std::max(z_mm - kEps, params.zEntrance);
168 const double hi = std::min(z_mm + kEps,
zExit(params));
224 for (
int i = 0; i < 2 * params.nSubFrustum; ++i) {
255 "the configured SBT leaves no decay region — check containerThickness, "
256 "hbeamHeight, nSubFrustum and heliumClearance");
269 std::array<HeliumPiece, 2u * kMaxSubFrustum>
pieces{};
272 [[nodiscard]]
constexpr std::span<const HeliumPiece>
view()
const {
282 if (params.nSubFrustum <= 0 || params.nSubFrustum >
kMaxSubFrustum) {
285 slabs.
count = 2u *
static_cast<std::size_t
>(params.nSubFrustum);
286 for (std::size_t i = 0; i < slabs.
count; ++i) {
306void buildHelium(GeoPhysVol* container,
const GeoMaterial* helium,
constexpr double knotAt(int i, const SBTParams ¶ms=kSBT)
Z of envelope knot i, for 0 <= i <= 2*nSubFrustum.
Definition SBTEnvelope.h:146
constexpr int subFrustumAt(double z_mm, const SBTParams ¶ms=kSBT)
Definition SBTEnvelope.h:70
constexpr double sideTrackedXHalf(double z_mm, const SBTParams ¶ms=kSBT)
Definition SBTEnvelope.h:79
constexpr double envelopeAtKnot(double z_mm, bool isX, const SBTParams ¶ms=kSBT)
Definition SBTEnvelope.h:165
Compile-time parameters of the Surround Background Tagger (SBT).
Definition SBTConstants.h:18
constexpr double zSubLo(int s, const SBTParams ¶ms=kSBT)
Z of the start of sub-frustum s (mm).
Definition SBTConstants.h:137
constexpr auto kHeliumPieces
The helium slabs of the shipped SBT.
Definition SBTEnvelope.h:244
constexpr bool leavesDecayRegion(const SBTParams ¶ms=kSBT)
Does params leave a decay region for the helium to fill?
Definition SBTEnvelope.h:220
constexpr HeliumPiece heliumPieceAt(int i, const SBTParams ¶ms=kSBT)
Helium slab i, for 0 <= i < 2*nSubFrustum.
Definition SBTEnvelope.h:185
constexpr HeliumSlabs heliumSlabs(const SBTParams ¶ms=kSBT)
The helium stack for arbitrary params.
Definition SBTEnvelope.h:280
constexpr SBTParams kSBT
The shipped SBT.
Definition SBTConstants.h:75
void buildHelium(GeoPhysVol *container, const GeoMaterial *helium, std::span< const HeliumPiece > pieces=kHeliumPieces)
Place helium slabs into container.
Definition SBTEnvelope.cpp:19
constexpr double yHalfAt(double z_mm, const SBTParams ¶ms=kSBT)
Half-extent of the frustum envelope in Y at a given Z (mm).
Definition SBTConstants.h:133
constexpr double subLength(const SBTParams ¶ms=kSBT)
Length of one sub-frustum along Z (mm).
Definition SBTConstants.h:103
constexpr double topBottomSensorInnerY(double y_half_mm, const SBTParams ¶ms=kSBT)
|Y| of a top/bottom container's innermost face (mm).
Definition SBTConstants.h:192
constexpr double innerFreeHalfX(double z_mm, const SBTParams ¶ms=kSBT)
|X| of the innermost SBT material at z_mm (mm).
Definition SBTEnvelope.h:97
constexpr int kMaxSubFrustum
Definition SBTEnvelope.h:265
constexpr double xHalfAt(double z_mm, const SBTParams ¶ms=kSBT)
Half-extent of the frustum envelope in X at a given Z (mm).
Definition SBTConstants.h:129
constexpr bool isWellFormed(const SBTParams ¶ms=kSBT)
Are params self-consistent, before asking whether they leave a decay region? Every dimension positive...
Definition SBTConstants.h:276
constexpr double zExit(const SBTParams ¶ms=kSBT)
Exit-face Z in the DecayVolume local frame (mm).
Definition SBTConstants.h:117
constexpr double innerFreeHalfY(double z_mm, const SBTParams ¶ms=kSBT)
|Y| of the innermost SBT material at z_mm (mm).
Definition SBTEnvelope.h:111
constexpr double longBeamInnerY(double y_half_mm, const SBTParams ¶ms=kSBT)
|Y| reached by a longitudinal beam's inner flange surface (mm).
Definition SBTConstants.h:261
constexpr double sideSensorInnerX(double x_half_mm, const SBTParams ¶ms=kSBT)
|X| of a side container's innermost face (mm).
Definition SBTConstants.h:178
constexpr double zSplitOffset(const SBTParams ¶ms=kSBT)
Z offset, from the start of a sub-frustum, of the column front-flange outer edge.
Definition SBTConstants.h:164
The innermost free region of the SBT, and the helium that fills it.
Definition SBTEnvelope.h:53
double dx_hi_mm
half-width in X at z_hi
Definition SBTEnvelope.h:57
double z_lo_mm
Definition SBTEnvelope.h:54
double dx_lo_mm
half-width in X at z_lo
Definition SBTEnvelope.h:56
double dy_lo_mm
half-height in Y at z_lo
Definition SBTEnvelope.h:58
double z_hi_mm
Definition SBTEnvelope.h:55
double dy_hi_mm
half-height in Y at z_hi
Definition SBTEnvelope.h:59
Definition SBTEnvelope.h:268
constexpr std::span< const HeliumPiece > view() const
A view of the filled prefix. Borrows from *this — keep it alive.
Definition SBTEnvelope.h:272
std::size_t count
Definition SBTEnvelope.h:270
std::array< HeliumPiece, 2u *kMaxSubFrustum > pieces
Definition SBTEnvelope.h:269
Every dimension the SBT geometry is parameterised by (mm).
Definition SBTConstants.h:33
int nSubFrustum
Definition SBTConstants.h:40