How can we normalize our pulses to QET current?

Note 10 · Author(s): Anthony · 2026-10-21 · Status: In progress

WARNING (22 October 2026): the sample time has changed. The phonon sample period is 0.8 µs (1.25 MHz), not 1.6 µs (625 kHz); a 4096-sample trace is 3.28 ms (see The sample period in python/README.md for the evidence). The first version of this note and its notebooks used 1.6 µs. What changed in this note:

WARNING (22 October 2026): the channel map has changed. The readout of this series is the Side-2 readout, so the detector has six sensors, all on Side 2 (Side2pA to Side2pF), and DCRC4 pA is the trigger input of the NaI array, not a sensor; the first version of this note used the wrong column of the Setup table and named seven working channels on both sides. What changed in this note:

Code repository

All the code of this note is in the repository villano-lab/NSDF-Data, in data_analysis/R76/notebooks/pulse-normalization/ and in python/. Every link below is pinned to a commit (f685574 for the notebooks, the figure and the wiki summary, ade25df for the library): it shows the file as it was when the results of this note were made, which may be older than the latest version, and the file may have moved since (see data_analysis/README.md). The notebooks read dump 1 of series 07221203_2025 from ~/idx (see Data and setup).

Data and setup

This study is partly a search through our historical records and partly an exposition of how we work with the circuits that read out our detectors. The main historical records we have for R76 is the UMN CDMS Wiki (or the recovered copy of it).

readout circuit of SuperCDMS

Figure 1: The TES bias and SQUID readout circuit. The bias current IbI_\mathrm{b} flows down from the top through two parallel branches to ground: the shunt resistor RshR_\mathrm{sh}, and the TES in series with the parasitic resistance RparR_\mathrm{par} and the input inductor LiL_\mathrm{i}. LiL_\mathrm{i} is coupled (mutual inductance MM) to the SQUID, which is biased with a small current IsqI_\mathrm{sq}. The amplifier reads the SQUID voltage, and its output VoutV_\mathrm{out} returns through the feedback resistor RfbR_\mathrm{fb} to the feedback coil LfL_\mathrm{f} (mutual inductance MfM_\mathrm{f}) to hold the SQUID flux fixed, so VoutV_\mathrm{out} is proportional to the TES current.

The channels. The readout of series 07221203_2025 is the Side-2 readout [7, 9]: the detector has six sensors, all on Side 2 (Side2pA to Side2pF, one for every region of the face), read by two DCRC boards. DCRC1 inputs pA, pB, pD are Side2pC, Side2pF, Side2pE; DCRC3 inputs pA, pB, pD are Side2pB, Side2pA, Side2pD; the pC inputs are not connected; and DCRC4 pA, the channel with a baseline of 7952 counts and no pulses, is the trigger input of the NaI array, not a sensor. The map is in python/pulse_channels.py; it is taken from the Setup table of the Run 76 summary (the columns Label and HV output, Side2-readout), and the dump’s detectors 0, 1, 2 are inferred to be DCRC1, DCRC3, DCRC4.

Tests we run on a channel (the characterization tests of SuperCDMS [1]; this list will grow). The Confluence pages describe the SNOLAB towers, with a shunt of Rsh=5mΩR_\mathrm{sh} = 5\ \mathrm{m\Omega} and different settings from the UMN runs (8.0 mΩ in the Run 75 numbers used below); the definitions are the same.

dPdI is not a test but a result: the slope dP/dI\mathrm{d}P/\mathrm{d}I of the power in the TES against its current, in volts, computed from the IbIs curve (and as dI/dP\mathrm{d}I/\mathrm{d}P from dIdV). It turns a measured current pulse into absorbed energy, E=(dP/dI)∫ΔIdtE = (\mathrm{d}P/\mathrm{d}I)\int \Delta I\,\mathrm{d}t (linear approximation), and the QET biases of Run 75 and Run 76 were set where dP/dI=1.0μV\mathrm{d}P/\mathrm{d}I = 1.0\ \mathrm{\mu V} [2, 7].

The question

How can we normalize our pulses to QET current? The most basic parameter we read out with our phonon sensors is the current through the Quasi-particle Electro-thermal-feedback Transition Edge Sensors (QETs) that make up our phonon channels. If we want to model our noise environment properly we must know what current the “pulses” are reading; typically pulses are read out in arbitrary voltage units depending on the Analog-to-Digital (ADC) conversion.

Pulses in QET current units

The ADC does not record the QET current directly. This section follows the chain from the recorded counts to the current in the QET branch of Figure 1, using what the UMN wiki says about each step [4, 7]. The numbers are the wiki’s, not ours: none of them has been measured or checked in this note, and the last subsection lists what is not settled.

From counts to the feedback current

The ADC records the voltage at the output of the SQUID feedback electronics. The SQUID is run in a flux-locked loop: the feedback current IfbI_\mathrm{fb} that flows through the feedback resistor RfbR_\mathrm{fb} into the feedback coil LfL_\mathrm{f} makes a flux that cancels the flux of the QET-branch current IQETI_\mathrm{QET} in the input coil LiL_\mathrm{i}. So the SQUID is only a null detector, and the loop holds

MIQET=MfIfb,M\, I_\mathrm{QET} = M_\mathrm{f}\, I_\mathrm{fb} ,

with MM and MfM_\mathrm{f} the couplings of the input coil and of the feedback coil to the SQUID. The magnetic coupling of the QET branch to the SQUID therefore does not need to be known by itself; only the ratio M/MfM/M_\mathrm{f} of the two couplings of the same SQUID matters.

The output voltage is V=IfbRfbGDCRCGdriverV = I_\mathrm{fb}\, R_\mathrm{fb}\, G_\mathrm{DCRC}\, G_\mathrm{driver}, with the gains of the readout board (the DCRC) and of its driver stage, and the ADC converts it to counts. In the calibration code of the Run 76 summary [7] these are 6553.6 counts per volt, Rfb=1233ΩR_\mathrm{fb} = 1233\ \Omega, GDCRC=2G_\mathrm{DCRC} = 2 and Gdriver=1G_\mathrm{driver} = 1.

From the feedback current to the QET current

The wiki divides by a “loop gain” Gloop=10.5G_\mathrm{loop} = 10.5 [7, 4], so that Ifb=10.5IQETI_\mathrm{fb} = 10.5\, I_\mathrm{QET}. We read this as the coupling ratio M/MfM/M_\mathrm{f} above (the input coil couples 10.5 times better to the SQUID than the feedback coil); the wiki does not define it. Altogether

IQET=NADC/6553.6counts/VRfbGloopGDCRCGdriver=NADC1.70×108counts/A,I_\mathrm{QET} = \frac{N_\mathrm{ADC} / 6553.6\ \mathrm{counts/V}}{R_\mathrm{fb}\, G_\mathrm{loop}\, G_\mathrm{DCRC}\, G_\mathrm{driver}} = \frac{N_\mathrm{ADC}}{1.70\times 10^{8}\ \mathrm{counts/A}} ,

that is, one count is 5.9 nA of QET current, or about 170 counts per µA. A pulse of 29 counts, the largest height in event 11300, is then 0.17 µA, and one of 1000 counts is 5.9 µA. The 2016 wiki page on complex impedance [4] gives the same formula, with the gains named “fixed” and “variable”.

A direct calibration of the whole chain exists in principle: the DCRC signal generator can inject a known triangle-wave current into the QET branch through a known bias resistor (the dIdV measurement above) [4]. We found no record of it for these channels. The normal-state IbIs curves give a consistency check of the conversion, described in the next section.

A check against typical noise

The Confluence page on noise settings [1] quotes typical noise levels of 10−11A/Hz10^{-11}\ \mathrm{A}/\sqrt{\mathrm{Hz}} (normal), 10−1010^{-10} (transition) and 10−1010^{-10} (superconducting). Our amplitude spectral density of the clean randoms (Note 9) is flat above 200 kHz at 1.7 to 1.75 ×10−3\times 10^{-3} counts/Hz\sqrt{\mathrm{Hz}} in four of the six sensors (narrow lines raise the means of the other two, Side2pB and Side2pD, to 2.0 and 2.1 ×10−3\times 10^{-3}), and 4.6 ×10−3\times 10^{-3} to 8.4 ×10−3\times 10^{-3} counts/Hz\sqrt{\mathrm{Hz}} between 2 and 20 kHz (for the sample period of 0.8 µs; the NaI input is not a sensor and is left out). With 170 counts per µA these are about 1.0×10−11A/Hz1.0 \times 10^{-11}\ \mathrm{A}/\sqrt{\mathrm{Hz}} and 33 to 5×10−11A/Hz5 \times 10^{-11}\ \mathrm{A}/\sqrt{\mathrm{Hz}}. That is the same order as the typical values, which supports the conversion to within a factor of a few at most; the Confluence values are for other detectors and electronics, so this cannot test the gain more closely.

What is not settled

Ib-Is curves

An IbIs scan gives the QET-branch current IsI_\mathrm{s} for each bias current IbI_\mathrm{b}. In the circuit of Figure 1 the shunt carries Ib−IsI_\mathrm{b} - I_\mathrm{s} and has the same voltage as the QET branch, so

RTES=Rsh(IbIs−1)−Rpar,R_\mathrm{TES} = R_\mathrm{sh}\left(\frac{I_\mathrm{b}}{I_\mathrm{s}} - 1\right) - R_\mathrm{par} ,

and the power in the TES is P=Is2RTESP = I_\mathrm{s}^2 R_\mathrm{TES}; dP/dI\mathrm{d}P/\mathrm{d}I follows from the curve. The only IbIs curves on the wiki are plots from Run 75 (February to April 2022, about 42 mK) [2, 3]: IsI_\mathrm{s} against IbI_\mathrm{b}, RTESR_\mathrm{TES} against IbI_\mathrm{b}, PP against IbI_\mathrm{b}, and RTESR_\mathrm{TES} against dP/dI\mathrm{d}P/\mathrm{d}I, for all measured channels except Side1pF (all six sensors of our series, Side2pA to Side2pF, are in the plots). The data behind the plots are not in the archive, and there are no IbIs curves for Run 76 or for the December 2022 series.

A check of the conversion against the curves

In the normal state the bias current divides between the shunt and the QET branch, Is=IbRsh/(Rsh+Rpar+Rn)I_\mathrm{s} = I_\mathrm{b}\, R_\mathrm{sh} / (R_\mathrm{sh} + R_\mathrm{par} + R_\mathrm{n}). For Side2pC the Run 75 summary [2] gives Rsh=8.0mΩR_\mathrm{sh} = 8.0\ \mathrm{m\Omega}, Rpar=11.0mΩR_\mathrm{par} = 11.0\ \mathrm{m\Omega} and Rn=60.8mΩR_\mathrm{n} = 60.8\ \mathrm{m\Omega} (from IbIs curves taken at about 42 mK), so at Ib=350μAI_\mathrm{b} = 350\ \mathrm{\mu A} the current is 35 µA, and the plot of the IbIs curves there shows about 33 to 35 µA for this channel.

This is a consistency check of the wiki’s numbers with each other, and not an independent measurement of the gain: the wiki derived RnR_\mathrm{n} and RparR_\mathrm{par} from the same curves, using the same gain. The slope of the normal-state branch alone gives only GRsh/(Rsh+Rpar+Rn)G\, R_\mathrm{sh} / (R_\mathrm{sh} + R_\mathrm{par} + R_\mathrm{n}), with GG the counts per unit current, so one point in the normal state does not fix GG unless RnR_\mathrm{n} is known independently. The ratio of the slopes in the normal and the superconducting state gives Rn/(Rsh+Rpar)R_\mathrm{n} / (R_\mathrm{sh} + R_\mathrm{par}) without GG, and GG then needs RshR_\mathrm{sh} (assumed to be 8.0 mΩ).

dP/dI: from the QET current to the absorbed energy

What a pulse sample is. After the conversion above, the samples of a pulse are the change ΔI(t)\Delta I(t) of the current in the QET branch. That current changes because the power in the TES changes. The TES is biased at (nearly) constant voltage, so when phonons heat it its resistance rises, the current drops, and with it the Joule power P=VTESIP = V_\mathrm{TES} I (electrothermal feedback [10, 11, 12]). Energy conservation then makes the missing Joule power the power that was absorbed: in strong feedback Eabs=−∫ΔPJ(t)dtE_\mathrm{abs} = -\int \Delta P_\mathrm{J}(t)\,\mathrm{d}t (the current falls; we draw its size). So the samples, scaled by one number, are a power as a function of time, and their sum times the sample period is an energy.

The scale. The number is dP/dI\mathrm{d}P/\mathrm{d}I, the slope of the TES power against its current along the IbIs curve, in volts. In the linear approximation, valid when ΔI\Delta I is small compared with the QET current IsI_\mathrm{s},

ΔP(t)=dPdIΔI(t),Eabs=∫ΔPdt=dPdI∫ΔIdt.\Delta P(t) = \frac{\mathrm{d}P}{\mathrm{d}I}\,\Delta I(t), \qquad E_\mathrm{abs} = \int \Delta P\,\mathrm{d}t = \frac{\mathrm{d}P}{\mathrm{d}I}\int \Delta I\,\mathrm{d}t .

For a voltage-biased TES dP/dI\mathrm{d}P/\mathrm{d}I is the voltage across the TES [10], VTES=IsRTESV_\mathrm{TES} = I_\mathrm{s} R_\mathrm{TES}. The wiki sets all the QET biases of Run 75 and Run 76 to the same dP/dI=1.0μV\mathrm{d}P/\mathrm{d}I = 1.0\ \mu\mathrm{V}, which makes the channels balanced and the energy of a channel just this number times the integral of its current [2, 7]. That value is plausible: with Is≈20μAI_\mathrm{s} \approx 20\ \mu\mathrm{A} near the transition (a reading of the Run 75 IbIs plot) and RTESR_\mathrm{TES} between 0.5 and 0.8 of RnR_\mathrm{n} (the Run 75 table gives RnR_\mathrm{n} from 59 to 95 mΩ, so RTESR_\mathrm{TES} of 30 to 70 mΩ), IsRTESI_\mathrm{s} R_\mathrm{TES} is 0.6 to 1.4 μV\mu\mathrm{V}.

A worked example. The notebook pulse-in-qet-current-07221203_2025.ipynb takes one real pulse of the small triggers: event 11486, channel Side2pF, a rise height of 43 counts. After the baseline subtraction the peak is 45.6 counts, which is 0.27 µA, or 0.27 pW of power change at 59 µs after the trigger. The charge through the QET branch in the first 1.5 ms is 48.3 pC, so with dP/dI=1.0μV\mathrm{d}P/\mathrm{d}I = 1.0\ \mu\mathrm{V} the absorbed energy is 4.8×10−174.8\times 10^{-17} J, 0.30 keV, in this channel; the six QET channels of the event together absorb 1.15 keV. (The first version of this note used a wrong sample period of 1.6 µs and gave 0.60 and 2.30 keV.)

Figure 2: One pulse as a power. Event 11486 of series 07221203_2025, dump 1, channel Side2pF. Left: the QET-branch current of the pulse (after the baseline subtraction and the conversion of the note) multiplied by dP/dI=1.0μV\mathrm{d}P/\mathrm{d}I = 1.0\ \mu\mathrm{V}, in picowatts; the shaded area is the integration window, from the trigger to 1.5 ms. Right: the running area under the power, the energy absorbed so far, which levels off at 0.30 keV.

From the absorbed to the deposited energy. The QETs collect only a fraction of the phonon energy, the phonon collection efficiency PCE\mathrm{PCE}, so the total phonon energy is Eabs/PCEE_\mathrm{abs}/\mathrm{PCE}. The wiki measured it for this detector with americium lines at 0 V in the first Run 76 series (March to April 2022): 0.313 at low energy and 0.331 at 60 keV, about 0.32, “the highest PCE we’ve ever measured” [7]. It was not measured for December 2022. With 0.32 the example event has a total phonon energy of 3.6 keV. The series was taken with the detector at -83.2 V [8], so this phonon energy includes the Neganov-Luke phonons, a factor 1+eVb/ε1 + eV_\mathrm{b}/\varepsilon of about 29 for an electron recoil (assuming ε=3.0\varepsilon = 3.0 eV in germanium; a nuclear recoil has a smaller factor). The recoil energy therefore cannot be stated until we know the event type: for an electron recoil it would be 0.13 keV.

When the linear approximation fails. For strong pulses, when ΔI\Delta I is a significant fraction of IsI_\mathrm{s}, the wiki gives a second-order correction, dP/dI→dP/dI+(1+Rpar/Rsh)Rsh∫ΔIdt/τ\mathrm{d}P/\mathrm{d}I \to \mathrm{d}P/\mathrm{d}I + (1 + R_\mathrm{par}/R_\mathrm{sh})\,R_\mathrm{sh} \int \Delta I\,\mathrm{d}t / \tau, with τ\tau a pulse width taken from the walk quantities [7]. The example is far from that regime (the largest peak is 1.3% of 20 µA); the largest pulses of the dump, about 1000 counts or 5.9 µA, are at about 30%.

What is not settled. Every number above rests on the constants of the previous sections (the 10.5 and the gain fields) and on dP/dI=1.0μV\mathrm{d}P/\mathrm{d}I = 1.0\ \mu\mathrm{V}, which is the Run 75/76 set point and not a measurement of the December 2022 series (the last IbIs entry in the diaries is of 1 September 2022). The PCE is from 0 V data of spring 2022. The result is the size of the effect, not a calibration.

References

  1. SLAC Confluence, CDMS space (detector operations for the SuperCDMS SNOLAB towers; login required): “Characterization tests” and its sub-pages “Detector Operations - SQUID Tuning”, “- RpRn”, “- IbIs”, “- Measure Tc”, “- dIdV” and “- Noise settings”, from confluence.slac.stanford.edu/spaces/CDMS/pages/695782807/Characterization+tests (page ids 695782807, 587610239, 587610713, 669429168, 691673063, 628267519 and 628267758; read from a downloaded copy of the pages, October 2026).
  2. UMN CDMS wiki, Run 75 summary, sections “IbIs measurements” and “TES properties”: https://villano-lab.github.io/R76Analysis/cdms/k100/run_summary/run_75.html (static archive of the wiki, mirrored March 2026).
  3. UMN CDMS wiki, “Overview of IbIs automation technique”: https://villano-lab.github.io/R76Analysis/cdms/k100/run_summary/run_75/ibis_automation.html; the conversion script is at github.com/bulug001/IbIs-Data (script only, no data).
  4. UMN CDMS wiki, “Complex impedance” procedure (2016), section “Calibration factors to calculate dIbias and dItes”: https://villano-lab.github.io/R76Analysis/cdms/k100/procedure/complex_impedance.html.
  5. UMN CDMS wiki, run diary of 3 November 2016, the “SC dIdV” and “Transition dIdV” data sets: https://villano-lab.github.io/R76Analysis/cdms/k100/run_diary/20161103.html.
  6. UMN CDMS wiki, group meeting of 4 December 2025: https://villano-lab.github.io/R76Analysis/cdms/k100/group_meetings/20251204.html.
  7. UMN CDMS wiki, “Phonon Collection Efficiency for S104” (Run 76 summary), the “Absolute Calibration” code block (written for the first Run 76 series of March to April 2022): https://villano-lab.github.io/R76Analysis/cdms/k100/run_summary/run_76/phonon_collection_efficiency.html.
  8. UMN CDMS wiki, run diary of 3 December 2022: https://villano-lab.github.io/R76Analysis/cdms/k100/run_diary/20221203.html.
  9. UMN CDMS wiki, run diaries of 6 September to 22 October 2022 (setup line “NaI trigger signal → DCRCX(4)” and the series “trigger on DCRC4pA”), for example https://villano-lab.github.io/R76Analysis/cdms/k100/run_diary/20221022.html.
  10. K. D. Irwin and G. C. Hilton, “Transition-Edge Sensors,” in Cryogenic Particle Detection, ed. C. Enss, Topics in Applied Physics 99, 63-150 (Springer, 2005), doi:10.1007/10933596_3 (listed as “Basic TES theory” on the wiki page of useful papers).
  11. K. D. Irwin, “An application of electrothermal feedback for high resolution cryogenic particle detection,” Applied Physics Letters 66, 1998-2000 (1995), doi:10.1063/1.113674.
  12. K. D. Irwin, “A self-biasing cryogenic particle detector utilizing electrothermal feedback and a SQUID readout,” IEEE Transactions on Applied Superconductivity 5, 2690-2693 (1995), doi:10.1109/77.403145.

A longer working summary of what the wiki says about the QET channels (per-channel TcT_\mathrm{c}, RnR_\mathrm{n}, RparR_\mathrm{par} and bias settings) is in data_analysis/R76/notebooks/pulse-normalization/umn-wiki-qet-channel-notes.md.