Repository navigation
v1.7.0 — RSEN fix + ASTM F84 correction factors
Critical fix
The 4-Point Probe mode shipped with :SYST:RSEN OFF in the Keithley setup sequence, silently routing the voltmeter to the Force terminals instead of the Sense terminals. On any probe head wired Force=outer / Sense=inner (Signatone S-302 and similar), this meant every 4PP measurement was a 2-wire reading across the current-carrying outer pair — R_sample + 2·R_contact, not the intended sheet resistance.
If you ran 4PP measurements with v1.6.x or earlier, treat them as invalid and rerun. Bench-verified on a Keithley 2420 + S-302 + copper plate with a 100 Ω perturbation on the I/O HI lead:
| State | V (mean) | V (sd) |
|---|---|---|
| RSEN OFF (pre-fix) | +3198.7 mV | 12.6 mV |
| RSEN ON (post-fix) | −0.003 mV (−3 µV) | 0.0006 mV |
A ~10⁶ ratio — the pre-fix reading was dominated by source-loop resistance (probe contact + the perturbation resistor), the post-fix reading is the true sub-µV signal on copper.
New: ASTM F84-98 alignment
Calculations now optionally use the F84 correction-factor decomposition:
ρ(T) = R · F₂ · w · F(w/S) · F_sp and ρ(23) = ρ(T) · F_T
f2_finite_diameter(s, d, geometry)— F84 Table 3 for circles, Smits 1958 / Adamson-lab tables for square and rectangle L/W ∈ {2, 3, 4}.f_thickness_correction(w, s)— Appendix X1.1 closed form (valid out to w/S = 2.0).f_temperature_correction(ρ, T, dopant)— Table 5 lookup for n/p-type silicon.- 60 new unit tests pin values directly to F84 Tables 3/4/5 and the extended Smits table.
New UI fields on the 4PP tab: Diameter D + Geometry (next to Thickness); Temperature + Dopant in Advanced. The legacy K/α/Model path remains the default; the F84 path activates only when the user supplies a finite D, non-circle geometry, or T+dopant.
New: per-polarity delta logging
When delta (current-reversal) mode is on, CSV exports now include V_plus, V_minus, R_f, R_r alongside the averaged value — preserving the F84 §13.1 diagnostic that opposite-polarity readings should be kept separate.
Regression prevention
tests/test_workers.py::TestSCPIContract asserts the critical SCPI commands sent during setup for every mode (RSEN state, source/measure functions, compliance programming, FORM:ELEM contents). The harness existed before this release; the contract assertions did not. This is the test that would have caught the original RSEN bug.
tests/hardware/rsen_diagnostic.py is a ~10-second bench script that reproduces the diagnostic on real hardware — committed for any future regression check.
Full changelog
See README "Version History" for the complete v1.7.0 changelog.