Case-Study Case-Study, PSD, Detector, Signal Processing
In an organic scintillator, a neutron and a gamma of the same deposited energy produce pulses of the same height. What differs is the shape: the neutron recoil populates triplet states that decay slowly, so its pulse carries a delayed tail the gamma does not have.
Every pulse-shape discrimination method is a way of turning that difference into a number.
What charge comparison costs you
The standard method is charge comparison: integrate the pulse over a short gate and a long gate and take the ratio. It works, it is cheap, and Sci-Compiler has had it for years in the PSD plugin.
It also has a property that is easy to overlook until you have a lot of channels. The two gates are positions in time relative to the trigger, and the ratio depends on where they land on the pulse. Which means it depends on the trigger walk, on the rise time, and therefore on the gain and the threshold of that particular channel. Every channel needs its own gate settings and its own discrimination cut, established during commissioning and re-established whenever anything changes. On a 4-channel detector this is an afternoon. On a 64-channel array it is a project, and a recurring one.
What a moment gives you instead
The Statistics plugin computes the central moments of a block of N samples directly, and two of them are exactly the shape descriptors this problem needs.
Skewness, the normalised third central moment m3/σ³, measures asymmetry. It is zero for anything symmetric about its mean, and positive when the tail points up, which is what a unipolar pulse on a quiet baseline looks like.
Kurtosis, the normalised fourth central moment m4/σ⁴, measures tailedness: how much of the variance comes from rare large excursions rather than many ordinary ones. It is 1.5 for a sine, 1.8 for uniform noise, 3.0 for Gaussian noise, and far above 3 for something impulsive. A fast pulse concentrates its energy into fewer samples than a slow one of the same area, so it reads as more impulsive.
Both are dimensionless and gain independent. Multiply every sample by ten and neither number moves. That single property is what removes the per-channel calibration: one threshold works for every channel, at every gain, on every day.
The two populations separate cleanly in the plane, and neither axis carries a unit. Note also which way round they fall: the gamma, being the faster pulse, is the more impulsive one and sits at higher kurtosis.
The arithmetic is exact, and that matters
It would be reasonable to assume that computing a third or fourth central moment in an FPGA means a histogram, a two-pass scan, or a buffer holding the block.
It means none of those. The block keeps the raw power sums S1, S2, S3, S4, which are four ordinary accumulators, and reaches the central moments through an exact integer identity. There is no sample buffer and no second pass over the data.
Two consequences follow from the exactness, and they are the reason this is usable as a trigger rather than just as an offline quantity. First, a symmetric block gives exactly zero skewness, not nearly zero, so a threshold near zero is meaningful and does not need a guard band chosen by experiment. Second, because σ⁴ is a square, the kurtosis denominator involves no square root at all and is exact.
The block size N is a power of two set at runtime on the EXP pin, not a synthesis property, so the integration window can be tuned while the detector is running.
What else is in the plane
Skewness and kurtosis are two of twenty-five per-operator block statistics, and for a harder separation there are more axes available at low incremental cost, since they share the same accumulators.
Crest Factor, peak over RMS, is a direct measure of how peaked the pulse is. It is the most expensive block of the family, because peak over RMS is a real division and this is the only one that needs one, but it is also the most directly interpretable.
Slope Stats gives the mean and standard deviation of the first difference. The first difference is a one-tap high pass: it deletes any constant offset and keeps only how fast the signal is moving. The mean slope is the average ramp rate of the block, exactly zero for a block that starts and ends at the same value, and the sigma is the sample-to-sample roughness. For discrimination the interesting one is the sigma, which responds to the rise, and for diagnostics the interesting one is the mean, which sees a drifting baseline.
Scaling it
All twenty-five statistics have time-multiplexed twins with the same contract, up to sixteen independent channels packed on one wide bus, per-lane accumulators, and one shared set of the expensive serial engines. On an array detector this is the difference between sixteen discrimination chains and one.
Where this does not apply
Moments describe the block, not the pulse, so the block has to contain the pulse and not much else. On a high-rate detector where pile-up is common, a block will sometimes hold two pulses, and its moments will describe that mixture. Charge comparison degrades differently, and often more gracefully, under pile-up. This is a reason to run both, not a reason to prefer one: they cost different accumulators and disagreeing is informative.
This is a reference design. The block behaviour and the exactness properties are as documented; the pulse shapes and the scatter are computed from a two-component scintillator model with added noise, not measured on a detector.