Commit e7a03a1
committed
ENH: Validate PET data objects' attributes at instantiation
Validate PET data objects' attributes at instantiation: ensures that the
attributes are present and match the expected dimensionalities.
**PET class attributes**
Refactor the PET attributes so that the required (`frame_time` and
`uptake`) and optional (`frame_duration`, `midframe`, `total_duration`)
parameters are accepted by the constructor. Although the optional
parameters can be computed from the required parameters, excluding them
from the `__init__` (using the `init=False` `attrs` option) would make
such that when dumping a PET instance to an HDF5, further processing
would be required to exclude those elements to allow reading the file,
and they would need to be computed at every instantiation. Also, they
may take user-provided values, so it is necessary for the constructor to
allow them.
Although `uptake` can also be computed from the PET frame data, the
rationale behind requiring it is similar to the one for the DWI class
`bzero`: users will be able to compute the `uptake` using their
preferred strategy and provide it to the constructor. For the `from_nii`
function, if a callable is provided, it will be used to compute the
value; otherwise a default strategy is used to compute it.
Validate and format attributes so that the computation of the relevant
temporal and uptake attributes is done at a single place, i.e. when
instantiating the `PET` object. Avoids potential inconsistencies.
Time-origin shift the `frame_time` values when formatting them.
Make the `_compute_uptake_statistic` public so that users can call it.
**`from_nii`** function:
Refactor the `from_nii` function to accept filenames instead of a mix of
filenames (e.g. the PET image sequence and brainmask) and temporal and
uptake attribute arrays. Honors the name of the function, increases
consistency with the dMRI counterpart and allows to offer a uniform API.
This allows to read the required and optional parameters from the
provided files so that they are present when instantiating the PET
object.
Use the `get_data` utils function in `from_nii` to handle automatically
the data type when loading the PET data.
**`PET.load`** class method:
Remove the `PET.load` class method and rely on the `data.__init__.load`
function:
- If an HDF5 filename is provided, it is assumed that it hosts all
necessary information, and the data module `load` function should take
of loading all data.
- If the provided arguments are NIfTI files plus other data files, the
function will call the `pet.PET.from_nii` function.
Change the `kwargs` arguments to be able to identify the relevant
keyword arguments that are now present in the `from_nii` function.
Change accordingly the `PET.load(pet_file, json_file)` call in the PET
notebook and the `test_pet_load` test function.
**Tests**:
Refactor the PET data creation fixture in `conftest.py` to accept the
required/optional arguments and to return the necessary data.
Refactor the tests accordingly and increase consistency with the `dmri`
data module testing helper functions. Reduces cognitive load and
maintenance burden.
Add additional object instantiation equality checks: check that objects
intantiated through reading NIfTI files equal objects instantiated
directly.
Check the PET dataset attributes systematically in round trip tests by
collecting all named attributes that need to be tested.
Modify accordingly the PET model and integration tests.
Modify test parameterization values to values that make sense (i.e. are
consistent with the way they are computed from the `frame_time`
attribute).
Take advantage of the patch set to make other opinionated choices:
- Prefer using the global `setup_random_pet_data` fixture over the local
`random_dataset` fixture: it allows to control the parameters of the
generated data and increases consistency with the practice adopted
across the dMRI dataset tests. Remove the `random_dataset` fixture.
- Prefer using `assert np.allclose` over `np.testing.assert_array_equal`
for the sake of consistency
**Dependencies**
Require `attrs>24.1.0` so that `attrs.Converter` can be used.
Documentation:
https://www.attrs.org/en/25.4.0/api.html#converters1 parent 0ed2364 commit e7a03a1
File tree
11 files changed
+1403
-234
lines changed- docs/notebooks
- src/nifreeze
- data
- test
11 files changed
+1403
-234
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
| 32 | + | |
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | | - | |
| 23 | + | |
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
79 | | - | |
| 79 | + | |
80 | 80 | | |
81 | 81 | | |
82 | 82 | | |
| |||
0 commit comments