algebra opcountrate → countsimport fullseye as fs; fs.ledger.countrate_to_counts(countrate, gate_s=0.001) (実装を直接呼ぶなら import reprconv; reprconv.countrate_to_counts(countrate, gate_s=0.001)、台帳から引くなら opsreprconv.get("countrate_to_counts"))計数レート [Hz] → 計数 counts。countrate の出口(可逆)。
単位が変換の全内容: [1/s] * [s] = [1]。gate_s は積算窓の秒数で、
既定 1 ms。counts は「時間 bin ごとの光子数」の型なので、レート列を
そのまま counts と名乗らせると桁が 7 つずれたまま黙って通る
(TYPE_CHECKS はどちらも「非負の 1-D」としか見ていない)。
:func:counts_to_countrate と往復して実測 max|Δ| = 9.3e-10(値域が 1e3-1e7 Hz なので
相対 1e-16 = 倍精度の丸め 1 単位ぶん。絶対値だけ見ると大きく見えるので、
レートのように桁が広い量は相対で言う)。
★2 度掛けても例外は出ない。TYPE_TO_SORT が countrate を counts に
畳んでいるので、出口が入口にそのまま繋がる。実測(2026-09-08、1,200 Hz を
gate 1 ms で): 1 回で 1.2000 counts、もう 1 回通すと 0.0012 counts ——
1,000 倍の取り違えが、負の値も NaN も出さずに通る。値だけを見て
「レートか計数か」を判定する方法は無いので、この 1 件は検査でなく
呼ぶ側の規律で守るしかない(繋いだ経路を書き残すこと)。
Args: countrate: (N,) の非負レート [Hz]。 gate_s: 積算窓 [s]。> 0。 Returns: (N,) float64 の非負計数。 Raises: ValueError: 負のレート / gate_s <= 0 / 形状不正 / 非有限。
py -3.11 examples/representation_roundtrip.pycounts を入力に取れる)algebra)angle_to_matrix · matrix_to_angle · rot_scale_to_matrix · matrix_to_rot_scale · shift_to_vector · vector_to_shift · cscalar_to_polar · polar_to_cscalar
Provenance: reprconv.py — REPRCONV operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.