Skip to content

signal_to_conc

signal_to_conc

Signal-to-concentration conversion for DCE-MRI (OSIPI: P.SC1.001).

This module implements conversion of DCE-MRI signal intensity to indicator concentration (OSIPI: Q.IC1.001) using T1 mapping and relaxivity (OSIPI: Q.EL1.015).

Estimates baseline signal S0 (OSIPI: P.SC1.001, Q.MS1.010) and converts signal changes to concentration via R1 (OSIPI: Q.EL1.001).

References

.. [1] OSIPI CAPLEX, https://osipi.github.io/OSIPI_CAPLEX/ .. [2] Tofts PS. J Magn Reson Imaging 1997;7(1):91-101.

signal_to_concentration

signal_to_concentration(
    signal, t1_map, acquisition_params, method="spgr"
)

Convert DCE signal intensity to indicator concentration (OSIPI: P.SC1.001).

Uses the SPGR signal equation to convert signal changes to changes in R1 (OSIPI: Q.EL1.001), then to concentration (OSIPI: Q.IC1.001) using relaxivity (OSIPI: Q.EL1.015).

PARAMETER DESCRIPTION
signal

4D signal intensity data with shape (x, y, z, t).

TYPE: NDArray[floating]

t1_map

Pre-contrast T1 map in milliseconds. If None, will use acquisition_params.t1_assumed to create a uniform T1 map.

TYPE: ParameterMap | None

acquisition_params

Acquisition parameters including TR (OSIPI: Q.MS1.006), flip_angle (OSIPI: Q.MS1.007), and relaxivity (OSIPI: Q.EL1.015). If t1_map is None, must include t1_assumed field.

TYPE: DCEAcquisitionParams

method

Signal model: 'spgr' (spoiled gradient echo) or 'linear'.

TYPE: str DEFAULT: "spgr"

RETURNS DESCRIPTION
NDArray[floating]

4D concentration data (OSIPI: Q.IC1.001) in mM with same shape as input signal.

RAISES DESCRIPTION
DataValidationError

If input dimensions or parameters are invalid, or if t1_map is None and t1_assumed is not specified in acquisition_params.

References

.. [1] OSIPI CAPLEX, https://osipi.github.io/OSIPI_CAPLEX/ .. [2] Tofts PS. J Magn Reson Imaging 1997;7(1):91-101.

Examples:

With measured T1 map:

>>> from osipy.dce.concentration import signal_to_concentration
>>> concentration = signal_to_concentration(
...     signal=dce_data,
...     t1_map=t1_map,
...     acquisition_params=params,
... )

With assumed T1 value (when T1 mapping data unavailable):

>>> params = DCEAcquisitionParams(
...     tr=6.13,
...     flip_angles=[10.0],
...     relaxivity=4.5,
...     t1_assumed=1400.0,  # Breast tissue at 3T
... )
>>> concentration = signal_to_concentration(
...     signal=dce_data,
...     t1_map=None,  # Will use t1_assumed
...     acquisition_params=params,
... )