Antenna 3-DOF gain surface g(az, el | roll)

Channel: Method: Roll:   Cut pitch (plane; cones about it):
Cut axis roll (rotate the pitch pivot about boresight):

Radial lobe over the swept band of directions: radius, colour & labels are all power dB (= −rssi when detector_inverted; max power is the largest value, e.g. −48 dB), semi-transparent surface. Raw detector samples are overlaid as points (filtered to the selected roll band); hover any point or the surface for az/el/roll/dB. The faint −3 / −10 dB shells gauge beamwidth (toggle in the legend). The roll selector conditions on a roll band ("all roll" marginalises) — the 3rd DOF, the antenna roll vs gravity when an antenna frame is set (see antenna_frame.roll_reference), else the raw camera-pose roll. The boresight is placed from the calibration/mount (antenna↔camera), so the lobe sits about boresight; poorly-sampled cells are dropped. The lower panel is a genuine cut: the slider pitches (inclines) a cut plane about the lateral axis (pitch 0 = horizontal through boresight), and a second slider rolls that pivot about the boresight so the cut can align with a tilted measurement great circle (both default to the pitch + roll that capture the most samples). The cut keeps every direction within ± the template's effective smoothing width of that plane. The two lower panels show that cut both cartesian (power vs in-plane angle) and polar (power = radius, angle = in-plane angle), each overlaying both Σ (blue) and Δ (red) — fitted pattern, shaded CI band (the surface's q25–q75 / random-effects SE), and the raw samples in the band (each channel's Σ/Δ samples are a toggleable legend entry — hide them to read the fit alone). The fitted curve and its CI break across direction sectors with no sample support (the same data-support gate that trims the 3D surface), rather than bridging them. On the 3D the band is bounded by two orange cones symmetric about the plane (axis = plane normal, half-angle 90°±width) — the area between them is the cut, not a projection over all directions. Tick “Show only the cut area” to hide the surface and samples that fall outside those cones. The black boresight locus on the 3D traces the selected channel's Σ peak (Δ: the null) per pitch cut across elevation, with a shaded 95% CI ribbon. The two cut plots mark all three boresights at the current pitch — Σ (blue), Δ (red) and the inverse-variance combined (black) — each a dashed line with its shaded 95% CI; the Σ/Δ gap is the boresight squint. The Method selector switches the estimator; the pooled-median default rounds off a sharp Δ null (a local-constant smoother is biased upward at a cusp), so pick deep_envelope — the lower-power-side pooled quantile — to read the true Δ null depth down toward the noise floor. The monopulse overlay (toggle above) shows u = Σ − Δ (power dB — the repo's phase contrast) as raw points on the cartesian cut (right-hand axis; each Σ sample with Δ linearly interpolated to its time). Its asymmetric two-line flank fit (each flank fitted over its own data-driven angular range, out to the foot of the lobe) and apex — the monopulse boresight — are computed in Python per pitch cut (trace_phase_contrast_locus), so they form a green boresight locus on the 3-D sphere and a 4th green boresight (with CI) on both cut plots, beside the Σ / Δ / combined boresights. The monopulse u = Σ−Δ is also drawn as its own translucent green gain surface on the 3-D sphere — built on Σ's grid with Δ interpolated onto it, normalised to its own power range and gated to where both channels have data — a third lobe beside the Σ and Δ surfaces that peaks sharply at boresight; toggle it from the legend.