Why does bstd_1000 have so many more high-bstd traces than bstd? (series 07221203_2025, dump 1)

Note 2a · Author(s): Anthony Villano · 25 Sept 2026 (revised 22 Oct 2026) · Status: In progress

Caution (2026-10-22): the sample time has changed. The phonon sample period is 0.8 µs (1.25 MHz), not the 1.6 µs (625 kHz) this note was written with (see The sample period in python/README.md). What changes in this note:

Code Repository

Data and setup

Everything here uses Detector 0, Channel 0 of series 07221203_2025, dump F0001, the same data as Note 2. The run log lists the series as Run76, Side2, PuBe with a Pb&poly lead stack and borax, −83.2 V, trigger setting DCRC1pA 2, 30 dumps (1.89 GiB on NSDF); dumps F0001–F0005 are downloaded locally (see Note 1). The dump has 4551 channel groups: 1517 events with traces, each with 3 detectors of 4 channels. Detector 0 / Channel 0 contributes 1517 traces of 4096 samples at 0.8 µs per sample (3.28 ms per trace), numbered as events 10000–11569 (53 event numbers in that range have no traces). The dump’s .csv gives each event a trigger type and a timestamp; the timestamps have one-second resolution and span 02:25:47 to 02:26:45 UTC on 4 Dec 2022.

The quantities are the ones defined in Note 2 (bstd, bline and ratio = dev / bstd) with the pretrigger window set to the first 500 or first 1000 samples and the first g = 10 samples skipped. bstd and bline are the standard deviation and mean of the first 500 samples, and bstd_1000, bline_1000 the same over the first 1000; dev is the largest deviation from the baseline after the window. “High tail” means log10(ratio) ≥ 2.0 with the 500-sample window.

The question

Note 2 found many more high-bstd traces with the 1000-sample window than with the 500-sample one (25% vs. 2% above bstd = 32.48 over all 1517 traces of Detector 0 / Channel 0). Two possible explanations:

  1. Random pulses. If pulses land at random positions in the 4096-sample trace, the chance of one inside the window should scale with its length, 1000/4096 vs. 500/4096, only a factor of 2. A pulse that starts earlier has more time to raise the scatter, which could push the ratio somewhat above 2.
  2. A change in the data. At some point the dump could switch to triggered data whose trigger point sits between sample 500 and 1000.

Starting point: bstd and bstd_1000 plotted against time. Events are numbered in time order within a dump (checked: strictly increasing for these traces), so the event number is used as the time axis.

bstd and bstd_1000 against event number

bstd (top) and bstd_1000 (bottom) against event number for dump 1, log y axis, with grey bands where the trigger type is Unknown
Detector 0 / Channel 0, dump F0001, 1517 traces. Grey bands: events whose recorded trigger type is Unknown. Dashed line: bstd = 32.48.

The dump has two distinct parts. Events 10000–10999 (1000 traces, all trigger type Physics) look alike in both panels: mostly quiet, with a sparse scatter of high values. From event 11000 on, the recorded trigger type alternates between segments of Unknown events (8 segments, 49–76 events long, 509 traces in all) and single Physics events. In seven of the eight Unknown segments bstd stays quiet while bstd_1000 jumps to about 100 or more for most traces. The exception is the first segment (events 11000–11067), which looks like the early data (see the segment-by-segment table below).

Terminology: a segment is a stretch of consecutive events with the same trigger type. “Run” is kept for a whole data-taking period (Run 76).

The fractions, by region

RegionTracesMedian bstdMedian bstd_1000% bstd > 32.48% bstd_1000 > 32.48Ratio
Events before 11000 (all Physics)10001.531.612.75.92.2
From 11000 on, trigger Unknown5091.5678.200.862.779.8
From 11000 on, trigger Physics8  12.512.51.0
All traces1517  2.125.011.8

Of the 379 traces with bstd_1000 > 32.48, 59 (16%) come from events before 11000 and 319 (84%) from Unknown-trigger events after it.

Segment by segment (the Unknown segments, in event order; “tail” and “aligned” are defined in the next section):

Segment (events)TracesMedian bstd_1000% bstd_1000 > 32.48In tailAligned
11000–11067571.6750
11071–1113363135.1834746
11141–112127243.5562826
11214–1128976100.8644946
11291–1136272115.1714141
11364–1142562122.6844444
11434–114915870.6672725
11505–115534958.5651919

The first segment is quiet in both windows, like the events before 11000. The change in bstd_1000 starts with the second segment, at event 11071, so the trigger label alone does not separate the two behaviors.

The aligned pulses: Branch 2 high tail

The Branch 2 high tail of Note 2 (500-sample window, log10(ratio) ≥ 2.0, 346 of 1517 traces) shows pulses that all rise at almost the same sample (see its high-tail figure). Repeating the selection with the library and splitting it at event 11000:

RegionTracesIn the tailFraction
Events before 11000 (Physics)1000858.5%
From 11000 on, Unknown50926051.1%
From 11000 on, Physics8112.5%
All151734622.8%

The tail traces do not all come from the region after 11000: 85 of the 346 are earlier events. But those 85 look different from the rest.

Branch 2 high tail traces, baseline subtracted: before event 11000 the pulses start at scattered samples, from event 11000 on they nearly all start just after sample 500
The same high-tail selection, split at event 11000 (30 randomly chosen traces in each panel, baseline subtracted). Left: pulses start at scattered times. Right: nearly all start just after sample 500.

Defining the onset as the first sample after 500 where a trace reaches 10% of its own maximum deviation (rise_sample with fraction=0.1, still under development), 247 of the 261 tail traces from event 11000 on have it at or before sample 520 (median 507), against 1 of the 85 earlier ones (median 2025, spread over the whole trace). Overall, 248 of the 346 tail traces are aligned; all but one (event 10637, onset 511) are in the Unknown segments.

Onset sample of each high-tail trace against event number: scattered before event 11000, a dense line at about sample 505 from event 11071 on
Onset sample of each high-tail trace against event number (grey: Unknown trigger). The aligned pulses form the line at the bottom, starting at event 11071; the scattered points are unaligned pulses.

The aligned pulses start in segment 2 and later. Segment 1 has 5 tail traces and none aligned. Eight tail traces inside segments 2–8 are not aligned.

When do the Unknown-trigger pulses rise?

A new library quantity, half_max_time_us (Note 1a), gives the time in microseconds from the start of the trace (0.8 µs per sample) at which a pulse first reaches 50% of its own maximum deviation. It is measured with the 500-sample window, and only means something for a trace that has a pulse, so the histograms use the high-tail selection above as “has a pulse”. It is still under development, like rise_sample, on which it is built.

Left: histogram of the 50% rise time over the whole trace for Unknown-trigger and early Physics high-tail traces, log y axis; the Unknown traces pile up in one bin near 400 to 480 microseconds. Right: zoom on Unknown traces, a single peak between about 412 and 435 microseconds
Time at which high-tail pulses reach 50% of their maximum. Left: whole trace, 80 µs (100 sample) bins, log y. Right: Unknown trigger only, one sample (0.8 µs) per bin; sample 500 is at 400 µs (dotted).
High-tail tracesTraces10th / 50th / 90th percentile (µs)At or before 435 µs (sample 543)
Unknown trigger260413.6 / 418.0 / 426.4246 (95%)
  without segment 1255413.6 / 417.6 / 424.5246 (96%)
Physics, events before 1100085644.2 / 1672.8 / 3008.02 (2%)

Most Unknown-trigger pulses reach half of their maximum about 418 µs into the trace (sample 522), in a narrow peak: 80% of them between 414 and 426 µs (samples 517–533), the earliest at 412 µs. Sample 500 is at 400 µs, so the half-maximum point comes about 18 µs (22 samples) after the end of the 500-sample window. The half-maximum time also includes each pulse’s own rise time and amplitude, so it is later than the start of the pulse (the 10% crossing above has a median at sample 507) and the spread of about 13 µs is not all trigger jitter. The Physics traces before event 11000, by contrast, are spread over the whole trace. The 249 Unknown-trigger traces that are not in the high tail have no pulse selected and are not in this histogram.

The noise selection with and without the trigger cut

Working assumption from here on: the trigger-type labels are swapped relative to their names. Events recorded as Physics are taken to be randoms and events recorded as Unknown are taken to be real triggers. The library has two cuts for this, pulse_cuts.randoms and pulse_cuts.real_triggers. Unlike the other cuts they take the per-event trigger type (from pulse_io.trigger_types) instead of pulses, and they are tagged under development because the mapping is unconfirmed.

The noise selection of Note 2 is the Tight band (log10(ratio) in [0.5, 0.7), 500-sample window, so dev is measured only after sample 500) plus log10(bstd) < 0.5: 179 traces. Adding randoms keeps 141 of them; the other 38 are real triggers.

SampleTracesEventsMedian bstd (10–90%)Median blinebline above 3300
Noise selection17910010–115441.523 (1.436–1.644)3099.519
… and randoms14110010–11433 (2 after 11000)1.513 (1.427–1.608)3103.318
… and real_triggers3811005–115441.580 (1.489–1.727)3073.11

The selection takes 141 of the 1008 Physics traces (14%) but only 38 of the 509 Unknown ones (7%). Fifteen of the 38 real triggers are in the first Unknown segment (events 11000–11067), the one without aligned pulses; the other 23 are spread over segments 2–8 (1 to 9 per segment).

Thirty randomly chosen baseline-subtracted traces from the randoms subset (left) and from the real-trigger subset (right), flat noise within about plus or minus 8 counts
Thirty randomly chosen traces from each part of the selection (of 141 randoms and 38 real triggers), baseline-subtracted, zoomed to ±15 counts. The leading glitch, up to about 350 counts in a few traces, runs off the top. Both are flat noise with a slow drift of a couple of counts across the trace.
Three panels comparing the 179-trace noise selection, its randoms subset and its real-trigger subset: bstd histogram, bline histogram, and mean raw FFT power against frequency; the spectra agree above 10 kHz
The 179-trace noise selection (black), the part that passes randoms (orange, 141) and the part that passes real_triggers (blue, 38). Left: bstd. Middle: bline. Right: mean raw |FFT|2 of the baseline-subtracted traces with the leading 10 samples dropped (unnormalized, so only the comparison between curves means anything).
Correction

The first version of this section, published earlier on 25 Sept, said the real triggers have less power between about 1 and 60 kHz (2 to 120 kHz at the correct sample period), in the band where a pulse has its signal, and that this difference was largest in segment 1. That was wrong. It came from averaging spectra of whole traces: six of the 141 randoms (events 10176, 10185, 10470, 10517, 10807 and 10971) begin with a glitch, a step of 150–350 counts lasting 5–8 samples, and one real trigger has one too (170 counts). bstd and bline skip the first 10 samples, but an FFT does not, and a step that large puts a broad spectrum into the mean.

First 40 samples of six randoms: each starts 150 to 350 counts above the baseline for 5 to 8 samples, then drops to zero
The first 40 samples of the six randoms with the most 10–50 kHz power in the whole-trace spectrum.
Whole trace: meanmedianLeading 10 samples dropped: meanmedian
Randoms (141)1.69×1052.23×1042.18×1042.15×104
Real triggers (38)5.99×1042.30×1042.26×1042.25×104

Per-trace power in the 10–50 kHz band (raw |FFT|2, mean over the band). The medians never differed; the mean of the whole-trace spectra of the randoms was about eight times its median because of the glitch traces. With the first 10 samples dropped, mean and median agree in both groups.

The corrected band-by-band comparison, with the real triggers split at the end of segment 1 (139 randoms before event 11000; mean raw |FFT|2, glitch samples dropped):

Band (Hz)Randoms before 11000 (139)Real, segment 1 (15)Real, later (23)Later / randomsSegment 1 / randoms
1000–30002.05×1052.10×1052.74×1051.341.02
3000–10,0006.38×1046.23×1048.96×1041.400.98
10,000–50,0002.18×1042.25×1042.26×1041.041.03
50,000–150,0008.55×1038.55×1038.58×1031.001.00
250,000–310,0007.44×1037.51×1037.42×1031.001.01

Above 10 kHz the three groups agree to within 4%. Below 10 kHz the later real triggers are somewhat higher (1.34 times in the 1–3 kHz band, 1.40 times in 3–10 kHz); those bands contain only a few frequency bins (6 and 23), the group is 23 traces, and no uncertainty has been estimated, so this is not established as a difference.

What adding randoms does to the selection: it removes 38 of 179 traces (21%). The remaining 141 are 97% from before event 11000. In this dump it leaves the bstd distribution, the mean spectrum above 10 kHz and the 408 kHz line unchanged; the only difference found is the group of 18 randoms with bline near 3400. There is still no way in this dump to separate a trigger-type effect from a change in time, since only 2 randoms come after event 11000 and every real trigger does.

The 38 real triggers in the selection are, by construction, traces with no pulse in Detector 0 / Channel 0 after sample 500 (and none in samples 500–1000 either). Whatever triggered those events was not a pulse on this channel; other channels and detectors were not looked at.

The leading glitch matters for any spectrum study of this dump: Note 3 and later spectra should be checked for it (a glitch this size is enough to change a mean spectrum by an order of magnitude in the signal band).

Reading

Caveats

Next steps