tcspc op• Data kinds: counts → table
• Call: import photoncount; photoncount.tcspc_stats(hist, bin_ps=100.0) (or opsphoton.get("tcspc_stats"))
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`).
• photon_timeresolved family guide
• 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.
• photon_timeresolved — py -3.11 examples/photon_timeresolved.py
table as input)—
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.