Designing an experiment before there is any data · step 3 of 6
What shape to cut the aperture
Same solid angle, same counts — does the shape matter?
A counter needs a hole to look through, and a bigger hole means more counts. The obvious hole is round. The scattering does not depend on azimuth, though, which means the two directions of a hole are not equivalent at all.
Only the radial half-width smears the angle; azimuth is free resolution. So hold the radial width at the workshop's floor and take every extra steradian out in arc. A round hole of the same area at 90 degrees would have to be many degrees wide and would report a rate belonging to no angle in particular — the same counts, at a fraction of the resolution.
what an annular slot subtends
half, arc = s.slit_for(theta, omega) # omega is fixed by the counter's rate cap; only the # split between radial half-width and arc is yours
the aperture enters the model as a column
expected = Mul(factors=(
rate,
Data(name="omega", dimension=dimensionless()),
Data(name="exposure", dimension=BASES.time),
))
# geometry and exposure are data, not parameters
print(f"{'angle':>7} {'radial':>9} {'arc':>9} {'slot bias':>11} {'hole bias':>11}")
for theta in (5.0, 45.0, 90.0, 150.0):
omega_here = float(s.widest_aperture([theta], s.HARD_CENTRE)[0])
half, arc = s.slit_for(theta, omega_here)
slot = 100.0 * s.aperture_bias(theta, half, arc, s.HARD_CENTRE)
# a round hole of the same solid angle: equal in both directions
hole = np.degrees(np.sqrt(omega_here / np.pi))
hole_bias = 100.0 * s.aperture_bias(theta, hole, 2 * hole, s.HARD_CENTRE)
print(f"{theta:6.1f}d {half:8.2f}d {arc:8.1f}d "
f"{slot:10.3f}% {hole_bias:10.2f}%")
print()
print("same solid angle, same counts. the slot reports the angle it is at;")
print("the hole reports an average over everything it can see.")
# the 90 degree station, which the diagram on this page draws
theta = 90.0
omega90 = float(s.widest_aperture([theta], s.HARD_CENTRE)[0])
half90, arc90 = s.slit_for(theta, omega90)
hole90 = float(np.degrees(np.sqrt(omega90 / np.pi)))
slit_geometry = {
"theta": theta,
"omega": omega90,
"half": half90,
"arc": arc90,
"hole_radius": hole90,
"slot_bias_pct": 100.0 * s.aperture_bias(theta, half90, arc90, s.HARD_CENTRE),
"hole_bias_pct": 100.0
* s.aperture_bias(theta, hole90, 2 * hole90, s.HARD_CENTRE),
}
angle radial arc slot bias hole bias 5.0d 0.05d 2.0d 0.020% 0.04% 45.0d 0.20d 360.0d 0.004% 3.46% 90.0d 0.91d 360.0d 0.025% 6.64% 150.0d 1.82d 360.0d 0.054% 3.48% same solid angle, same counts. the slot reports the angle it is at; the hole reports an average over everything it can see.
Every line above was captured by running this code at build time. The steps share one namespace, so the code on this page is the code you would type after the steps before it.