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:
Side2pF) now peaks at 59 µs after the
trigger (it was 118 µs), the charge in the integration window is 48.3 pC
(it was 96.6 pC, over a window that is now 1.5 ms instead of 3 ms of the
same samples), and the energies are 0.30 keV in the
channel (was 0.60), 1.15 keV over the six sensors (was
2.30), 3.6 keV of phonon energy (was 7.2) and 0.13 keV
if it were an electron recoil (was 0.25). Figure 2 is replaced.
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:
VGAGain 5 of the September 2022 ODB is on
Side2pB and Side2pD (DCRC3 pA and pD), not on
Side1pE and Side2pE.Side2pF, event 11486), and its numbers (0.30 keV in the
channel, 1.15 keV over the six sensors, 3.6 keV of phonon energy) are
unchanged, because the NaI input was already left out of the sum; the
table of the six channels in the notebook has the new names
(Side1pF is now Side2pE, Side1pE
is Side2pB, Side1pB is Side2pA,
Side2pE is Side2pD) and no row for the NaI
input.Side2pC
(its name and its Run 75 numbers are unchanged). The sample time is the
subject of the other box. 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).
small-physics-triggers-07221203_2025.ipynb:
the selection of the small real triggers: the drift-robust rise height,
the two-sided baseline compared with a straight line, the
quiet-pretrigger cut, and the traces of all channels of a few events on
one vertical scale.detector-layout-small-triggers-07221203_2025.ipynb:
the same events drawn over the detector layout (regions coloured by rise
height, traces around the faces, a contact sheet).pulse-in-qet-current-07221203_2025.ipynb:
one pulse from counts to QET current, power and absorbed energy (Figure
2), with all the constants of the conversion in one cell.small_triggers.py
and detector_layout.py:
the helper code of these notebooks (rise height, baselines, the
quiet-pretrigger cut; the drawing of the layout).umn-wiki-qet-channel-notes.md:
the working summary of what the UMN wiki says about the QET channels
(per-channel values, bias settings, gains).tes_squid_readout_circuit.svg:
the source of the circuit diagram of Figure 1.pulse_io.py,
pulse_cuts.py,
pulse_channels.py,
pulse_config.py,
pulse_quantities.py,
pulse_operations.py
and check_environment.py.
pulse_channels.py and the trigger-type cuts of
pulse_cuts.py are tagged under development.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).
Figure 1: The TES bias and SQUID readout circuit. The bias current flows down from the top through two parallel branches to ground: the shunt resistor , and the TES in series with the parasitic resistance and the input inductor . is coupled (mutual inductance ) to the SQUID, which is biased with a small current . The amplifier reads the SQUID voltage, and its output returns through the feedback resistor to the feedback coil (mutual inductance ) to hold the SQUID flux fixed, so 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 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 of the power in the TES against its current, in volts, computed from the IbIs curve (and as from dIdV). It turns a measured current pulse into absorbed energy, (linear approximation), and the QET biases of Run 75 and Run 76 were set where [2, 7].
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.
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.
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 that flows through the feedback resistor into the feedback coil makes a flux that cancels the flux of the QET-branch current in the input coil . So the SQUID is only a null detector, and the loop holds
with and 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 of the two couplings of the same SQUID matters.
The output voltage is , 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, , and .
The wiki divides by a “loop gain” [7, 4], so that . We read this as the coupling ratio above (the input coil couples 10.5 times better to the SQUID than the feedback coil); the wiki does not define it. Altogether
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.
The Confluence page on noise settings [1]
quotes typical noise levels of
(normal),
(transition) and
(superconducting). Our amplitude spectral density of the clean randoms
(Note 9) is flat above 200 kHz at 1.7 to 1.75
counts/
in four of the six sensors (narrow lines raise the means of the other
two, Side2pB and Side2pD, to 2.0 and 2.1
),
and 4.6
to 8.4
counts/
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
and
to
.
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.
07220916_2200 (16 September 2022) has VGAGain
5 on two channels of DCRC3 (inputs pA and pD, which are
Side2pB and Side2pD) and 2 on the others, and
PGAGain 1 on all of them. We could not establish how these
fields map onto
and
of the calibration code, so the 170 counts per µA may be wrong by a
factor 2.5 for those two channels. The settings of the series used here
(07221203_2025, started at 20:25 on 3 December 2022 [8]) have to be read from its own ODB.
python/README.md). The notebooks of this
note used a wrong 1.6 µs until 22 October 2026; all times and energies
here are for 0.8 µs, half of what the first version of this note gave.
An IbIs scan gives the QET-branch current for each bias current . In the circuit of Figure 1 the shunt carries and has the same voltage as the QET branch, so
and the power in the TES is
;
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]:
against
,
against
,
against
,
and
against
,
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.
In the normal state the bias current divides between the shunt and
the QET branch,
.
For Side2pC the Run 75 summary [2] gives
,
and
(from IbIs curves taken at about 42 mK), so at
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 and from the same curves, using the same gain. The slope of the normal-state branch alone gives only , with the counts per unit current, so one point in the normal state does not fix unless is known independently. The ratio of the slopes in the normal and the superconducting state gives without , and then needs (assumed to be 8.0 mΩ).
What a pulse sample is. After the conversion above, the samples of a pulse are the change 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 (electrothermal feedback [10, 11, 12]). Energy conservation then makes the missing Joule power the power that was absorbed: in strong feedback (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 , the slope of the TES power against its current along the IbIs curve, in volts. In the linear approximation, valid when is small compared with the QET current ,
For a voltage-biased TES is the voltage across the TES [10], . The wiki sets all the QET biases of Run 75 and Run 76 to the same , 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 near the transition (a reading of the Run 75 IbIs plot) and between 0.5 and 0.8 of (the Run 75 table gives from 59 to 95 mΩ, so of 30 to 70 mΩ), is 0.6 to 1.4 .
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
the absorbed energy is
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
,
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 , so the total phonon energy is . 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 of about 29 for an electron recoil (assuming 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 is a significant fraction of , the wiki gives a second-order correction, , with 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 , 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.
A longer working summary of what the wiki says about the QET channels
(per-channel
,
,
and bias settings) is in
data_analysis/R76/notebooks/pulse-normalization/umn-wiki-qet-channel-notes.md.