lifetime_phasor — PHOTON lifetime op

数据种类:countstable

调用:import photoncount; photoncount.lifetime_phasor(decay, bin_ps=100.0, harmonic=1, background=0.0)(或 opsphoton.get("lifetime_phasor"))

用法

衰减的相量(频域)表示 —— 不需拟合的视角。

> 以下的详细说明为原文 —— 摘要与标题已翻译。

FLIM's standard fit-free tool. With `omega = 2*pi*harmonic/window` and bin

centres `t_k`::

g = sum(h_k * cos(omega*t_k)) / sum(h_k)

s = sum(h_k * sin(omega*t_k)) / sum(h_k)

For a single exponential of lifetime `tau` under periodic excitation the

exact analytic phasor is `g = 1/(1+(omega*tau)^2)`,

`s = omega*tau/(1+(omega*tau)^2)`, which traces the **universal

semicircle** `(g - 1/2)^2 + s^2 = 1/4 as tau` runs from 0 to infinity.

A multi-exponential decay falls strictly *inside* that circle — which is why

`semicircle_residual` is returned: it is the honest detector of the

single-exponential assumption that :func:lifetime_fit cannot give you.

Returns a dict: `g · s · modulation m = sqrt(g^2+s^2)` ·

`phase_rad · omega_per_ps · tau_phi_ps = tan(phase)/omega` ·

`tau_m_ps = sqrt(1/m^2 - 1)/omega · semicircle_residual`

`= (g-1/2)^2 + s^2 - 1/4` (0 on the circle, negative inside) ·

`total_counts. tau_phi_ps is None` — not a negative number — when

the phase is not in `(0, pi/2), and tau_m_ps is None` when the

modulation is 0 or >= 1; both mean "this is not a decaying single

exponential", which is information, not a failure.

Honest accuracy: the analytic formula is the *continuous* integral over one

excitation period, while this op sums over bins, so the two differ by the

midpoint-rule error. Measured on an exactly bin-integrated single exponential

(`tau = 2000 ps, 256 bins x 100 ps, i.e. a 25.6 ns period): g` is

0.805809 against the analytic 0.805830 (-2.0e-05), `s` is 0.395653 against

0.395561 (+9.2e-05), `tau_phi_ps` comes back as 2000.52 ps (+0.026%),

`tau_m_ps as 1999.74 ps (-0.013%) and semicircle_residual` is

+6.07e-05. Quadrupling to 1024 bins over the same window divides the residual

by exactly 16.00 (to 3.79e-06) and the `tau_phi` error by 16 — the

`O(bin^2)` midpoint behaviour, not a bias in the op.

And the reason `semicircle_residual` earns its place: the same window with

a two-component decay (equal photon budgets at 500 ps and 4000 ps) gives

a residual of -0.0924, i.e. 1500x further inside the circle than the

single-exponential round-off. :func:lifetime_fit would have returned one

confident number for that same histogram.

Raises `ValueError`: negative, non-finite, non-1-D or all-zero *decay*,

a non-positive *bin_ps*, a *harmonic* outside `[1, bins//2]` (above

Nyquist the phasor is aliased and meaningless), a negative *background*, and

a background subtraction that removes every count.

详细使用指南

photon_timeresolved 族使用指南

参考(示例数据・文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

• 算法的正典(作者・年份)与用途见上面的族使用指南

可运行的示例(实际调用该算子并已验证的样例)

photon_timeresolvedpy -3.11 examples/photon_timeresolved.py

类型可衔接的下一个算子(可接受 table 作为输入)

同类别(lifetime)

lifetime_fit


*Provenance: photoncount.py — PHOTON 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

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