Skip to content

HW Verify Issue 36 SSA Gain Calibration

Benjamin Reese edited this page Aug 14, 2026 · 2 revisions

HW Verify — Issue #36: SSA-curve discontinuities from front-end gain model

Item: Issue #36 (Discontinuities in SSA curves due to error in front-end gain calibration for standard column-module loading). Board status: Needs HW Test · Track: Software · Priority: P1.

← back to Hardware Verification

What we are verifying

For the standard front-end loading, the software gain model appears slightly wrong, producing a glitch/discontinuity in some SSA (SQUID Series Array) curves. The issue points at the gain application in _Tuning.py (the current/voltage conversion for the amplifier chain). The task: do a careful gain calibration on the bench and compare it against the software model, so the discontinuity can be root-caused and the model corrected.

This is a calibration measurement, not a fix-confirmation — the deliverable is quantitative evidence of where the software model diverges from the measured front-end gain.

You will need

  • A column module with SSAs (SLAC-cryostat testing is where it was seen; a representative front-end with the standard loading is the point).
  • The ability to sweep SA bias/feedback and record the resulting SSA response — i.e. run an SA tune and inspect the raw curve for the discontinuity.
  • The relevant front-end amplifier model nodes so you can compare measured vs. modeled gain.

Procedure

Setup

  1. Start the server, connect, choose an enabled set, and do the analog setup for your cryostat (see Common bench setup). In particular set the cable resistance used by the AFE amp models:

    ops.set_cryo_resistance(Rcryo_Ohm=250.0)   # roundtrip cable R (your value) → all AFE amps

Part 1 — reproduce the discontinuity

  1. Zero the setpoints, null the SA offset, and run an SA tune with enough steps to resolve the curve shape:

    ncol = len(sess.group.ColTuneEnable.get())
    sess.group.SaFbForceCurrent.set([0.0] * ncol)
    ops.sa_offset()
    sa_out = ops.sa_tune(SaBiasLowOffset=0.0, SaBiasHighOffset=1.0, SaBiasNumSteps=5)
  2. Plot the SSA curves per column and look for the glitch/discontinuity described in the issue (a kink where the curve should be smooth):

    # inspect the tune process plots, e.g.:
    sess.group.SaTuneProcess.PlotColumn.set(<col>)

    Record which columns/loadings show it and where on the curve it sits.

Part 2 — measured vs. modeled gain

  1. Read the front-end amplifier model's gain-related nodes (the ones _Tuning.py uses to convert between DAC current and referred SSA voltage/current) and note the modeled gain for the affected channels.
  2. Measure the actual front-end gain independently: apply known SA feedback / input steps and record the measured output response (DMM/scope on the module output, or the ADC readback SaOutAdc), to get gain in physical units at several points across the curve — especially spanning the discontinuity.
  3. Compare measured gain vs. the software model across the sweep. The discontinuity in the SSA curve should line up with where the modeled gain diverges from measured — that divergence is the bug.

Part 3 — document the correction

  1. Capture the measured gain curve and the model's values side by side, and note the correction needed in the _Tuning.py gain application (the exact lines flagged in Issue #36). This feeds the software fix.

Pass criteria

This is characterization; "pass" = a clear, quantitative comparison:

  • SSA discontinuity reproduced and located on real hardware, with the column/loading noted.
  • Measured front-end gain recorded at several points across the curve (physical units).
  • Measured vs. modeled gain compared; the divergence that produces the discontinuity identified.
  • Recommended correction to the software gain model documented on the issue.

Record

  • Firmware build stamp + git hash, software commit, conda env:
  • Column module + front-end loading:
  • SSA curves showing the discontinuity:
  • Measured-vs-modeled gain table:

References

  • Issue #36 (with the SSA-curve example and the _Tuning.py lines flagged)
  • software/python/warm_tdm_api/_Tuning.py — the gain conversion under suspicion
  • operations.sa_tune / sa_offset / set_cryo_resistance
  • Related: Issue #27 (up/down-slope locking), Issue #59 (noisy SSA vs. ADC relock)