tcspc_stats — PHOTON tcspc op

Data kinds: countstable

Call: import photoncount; photoncount.tcspc_stats(hist, bin_ps=100.0) (or opsphoton.get("tcspc_stats"))

Usage

Descriptors of an arrival-time histogram: peak, centroid, width, background.

Returns a dict: `total_counts · peak_bin (int) · peak_counts` ·

`peak_time_ps (the **centre** of the peak bin, (k + 0.5)*bin_ps`) ·

`centroid_ps` (the first moment over the whole histogram, background

included — run :func:tcspc_background_subtract first if that matters) ·

`fwhm_ps` (full width at half maximum *above the background*, by linear

interpolation of the two half-crossings around the peak) ·

`background_per_bin` (the median bin, the same robust estimate

:func:tcspc_background_subtract uses) · `signal_counts`

(`total - background*bins) · sbr` (signal-to-background ratio, or

`None when the background estimate is 0) · n_bins · window_ps`.

`fwhm_ps is None` — never a fabricated number — when the profile does

not cross the half-maximum on both sides of the peak, which is exactly what a

monotone fluorescence decay does (its peak is bin 0). A `None` here means

"this histogram has no width in the FWHM sense", not "the measurement

failed".

Ground truth: for a noiseless Gaussian return of FWHM 500 ps, `centroid_ps`

matches the analytic `2d/c to 1.8e-12 ps. fwhm_ps` comes back as 508.41

at 100 ps bins and 503.07 at 50 ps bins — the linear interpolation between

two bins on either flank systematically overestimates a Gaussian's width,

by 1.7% and 0.6% respectively, and the error shrinks with the bin width.

That bias is a property of the estimator; it is reported here rather than

hidden behind a "500" that only holds in the continuum limit.

Raises `ValueError`: negative, non-finite or non-1-D *hist*, a

non-positive *bin_ps*, and an all-zero histogram (no photon arrived, so

there is no arrival time; the centroid would be `0/0`).

Detailed usage guide

photon_timeresolved family guide

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

photon_timeresolvedpy -3.11 examples/photon_timeresolved.py

Ops the type connects to (they accept table as input)

Same category (tcspc)

tcspc_simulate · tcspc_irf_convolve · tcspc_background_subtract


*Provenance: photoncount.py — PHOTON operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.