Data Format

KinePET fits flattened TAC batches.

Required arrays

Array Shape Meaning
tacs / tacs.npy (T, N) TAC matrix. Each column is one TAC.
time / time.npy (T,), (T, 1), or (T, N) Time vector or per-TAC time matrix.
aif / aif.npy (T,), (T, 1), or (T, N) Arterial input function.

Optional arrays

Array Shape Meaning
weights / weights.npy (T,), (T, 1), or (T, N) Residual weights.

Shared and per-TAC semantics

For time, aif, and weights:

  • (T,) means one shared vector for every TAC.
  • (T, 1) also means one shared vector for every TAC.
  • (T, N) means one column per TAC.

When aif is (T, N), time must also be (T, N). Column i is fitted as time[:, i], aif[:, i], and tacs[:, i].

Time units

Time values are interpreted as minutes. If max(time) > 60, KinePET assumes the input is in seconds and converts to minutes internally.

Outputs

Python returns dataclass wrappers. The CLI writes .npy files. In both cases outputs are flat per-TAC values with shape (N,).

Main outputs:

Output Availability
K1 Always
k2 Always
k3 Always
k4 rev only
vB Always
delay When fitted or fixed to a nonzero value
dispersion When fitted or fixed to a nonzero value
Ki Always
rmse Always
weighted_cost Python API
iterations Always
status Always

KinePET does not produce image maps, masks, rescue overlays, rawfit arrays, or post-filtered arrays. Image reconstruction and preprocessing should happen outside the core solver.