Skip to content

Commit f0862e6

Browse files
committed
REF: Refactor PET estimator
Refactor PET estimator so that it is more closely aligned with the `Estimtor` class, and in order to eventually merge them. Most notably, avoid creating train, test splits inside the estimator and delegate the task of walking the sequence to the existing iterators. This removes the need for the `lofo_split` method.
1 parent bb3d129 commit f0862e6

File tree

5 files changed

+78
-460
lines changed

5 files changed

+78
-460
lines changed

docs/notebooks/pet_motion_estimation.ipynb

Lines changed: 1 addition & 338 deletions
Original file line numberDiff line numberDiff line change
@@ -53,343 +53,6 @@
5353
"pet_dataset"
5454
]
5555
},
56-
{
57-
"cell_type": "code",
58-
"execution_count": 4,
59-
"id": "09e5053e-4565-4892-a0a9-a8410fbe6748",
60-
"metadata": {},
61-
"outputs": [],
62-
"source": [
63-
"data_train, data_test = pet_dataset.lofo_split(15)"
64-
]
65-
},
66-
{
67-
"cell_type": "code",
68-
"execution_count": 5,
69-
"id": "a51fcb74-0e57-4ee2-8c24-1f89ff6f879c",
70-
"metadata": {},
71-
"outputs": [
72-
{
73-
"data": {
74-
"text/plain": [
75-
"array([[[[-0., 0., 0., ..., 0., 0., 0.],\n",
76-
" [ 0., 0., 0., ..., 0., -0., 0.],\n",
77-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
78-
" ...,\n",
79-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
80-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
81-
" [ 0., 0., 0., ..., 0., 0., 0.]],\n",
82-
"\n",
83-
" [[-0., 0., 0., ..., 0., -0., 0.],\n",
84-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
85-
" [ 0., 0., 0., ..., -0., -0., 0.],\n",
86-
" ...,\n",
87-
" [ 0., 0., -0., ..., 0., 0., 0.],\n",
88-
" [ 0., 0., 0., ..., -0., 0., 0.],\n",
89-
" [-0., 0., -0., ..., 0., 0., 0.]],\n",
90-
"\n",
91-
" [[ 0., 0., 0., ..., 0., 0., 0.],\n",
92-
" [-0., -0., -0., ..., 0., -0., 0.],\n",
93-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
94-
" ...,\n",
95-
" [ 0., -0., 0., ..., -0., 0., 0.],\n",
96-
" [-0., 0., -0., ..., 0., 0., 0.],\n",
97-
" [-0., -0., 0., ..., -0., 0., 0.]],\n",
98-
"\n",
99-
" ...,\n",
100-
"\n",
101-
" [[-0., 0., 0., ..., 0., 0., 0.],\n",
102-
" [-0., 0., 0., ..., 0., -0., 0.],\n",
103-
" [-0., 0., 0., ..., -0., 0., 0.],\n",
104-
" ...,\n",
105-
" [-0., -0., 0., ..., 0., 0., 0.],\n",
106-
" [-0., 0., -0., ..., -0., 0., 0.],\n",
107-
" [ 0., -0., 0., ..., 0., 0., 0.]],\n",
108-
"\n",
109-
" [[-0., 0., 0., ..., 0., 0., 0.],\n",
110-
" [-0., 0., 0., ..., -0., 0., 0.],\n",
111-
" [-0., 0., -0., ..., 0., 0., 0.],\n",
112-
" ...,\n",
113-
" [-0., 0., -0., ..., -0., 0., 0.],\n",
114-
" [-0., -0., 0., ..., 0., 0., 0.],\n",
115-
" [-0., 0., -0., ..., -0., 0., 0.]],\n",
116-
"\n",
117-
" [[-0., 0., 0., ..., 0., 0., 0.],\n",
118-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
119-
" [ 0., 0., 0., ..., -0., 0., 0.],\n",
120-
" ...,\n",
121-
" [-0., -0., 0., ..., 0., 0., 0.],\n",
122-
" [ 0., 0., -0., ..., -0., 0., 0.],\n",
123-
" [ 0., -0., 0., ..., 0., 0., 0.]]],\n",
124-
"\n",
125-
"\n",
126-
" [[[-0., 0., 0., ..., 0., -0., 0.],\n",
127-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
128-
" [ 0., 0., 0., ..., 0., -0., 0.],\n",
129-
" ...,\n",
130-
" [ 0., 0., 0., ..., 0., -0., 0.],\n",
131-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
132-
" [ 0., 0., 0., ..., 0., 0., 0.]],\n",
133-
"\n",
134-
" [[ 0., 0., 0., ..., 0., 0., 0.],\n",
135-
" [-0., 0., 0., ..., 0., -0., 0.],\n",
136-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
137-
" ...,\n",
138-
" [ 0., 0., 0., ..., -0., 0., 0.],\n",
139-
" [-0., 0., -0., ..., 0., -0., 0.],\n",
140-
" [-0., 0., 0., ..., -0., 0., 0.]],\n",
141-
"\n",
142-
" [[ 0., 0., 0., ..., 0., -0., 0.],\n",
143-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
144-
" [-0., -0., -0., ..., -0., -0., 0.],\n",
145-
" ...,\n",
146-
" [-0., 0., -0., ..., 0., -0., 0.],\n",
147-
" [-0., -0., 0., ..., -0., 0., 0.],\n",
148-
" [-0., 0., -0., ..., 0., 0., 0.]],\n",
149-
"\n",
150-
" ...,\n",
151-
"\n",
152-
" [[-0., 0., 0., ..., 0., -0., 0.],\n",
153-
" [-0., 0., 0., ..., -0., 0., -0.],\n",
154-
" [-0., 0., -0., ..., 0., -0., 0.],\n",
155-
" ...,\n",
156-
" [-0., 0., -0., ..., -0., 0., 0.],\n",
157-
" [-0., -0., 0., ..., 0., 0., 0.],\n",
158-
" [-0., 0., -0., ..., -0., 0., 0.]],\n",
159-
"\n",
160-
" [[-0., 0., 0., ..., 0., 0., -0.],\n",
161-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
162-
" [-0., -0., 0., ..., -0., 0., -0.],\n",
163-
" ...,\n",
164-
" [-0., -0., 0., ..., 0., 0., 0.],\n",
165-
" [-0., 0., -0., ..., -0., 0., 0.],\n",
166-
" [-0., -0., 0., ..., 0., 0., 0.]],\n",
167-
"\n",
168-
" [[ 0., 0., 0., ..., 0., 0., 0.],\n",
169-
" [-0., 0., 0., ..., -0., 0., -0.],\n",
170-
" [ 0., 0., -0., ..., 0., 0., 0.],\n",
171-
" ...,\n",
172-
" [-0., 0., -0., ..., -0., 0., 0.],\n",
173-
" [-0., -0., 0., ..., 0., 0., 0.],\n",
174-
" [ 0., 0., -0., ..., -0., 0., 0.]]],\n",
175-
"\n",
176-
"\n",
177-
" [[[-0., 0., 0., ..., 0., 0., 0.],\n",
178-
" [-0., 0., 0., ..., 0., -0., 0.],\n",
179-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
180-
" ...,\n",
181-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
182-
" [-0., 0., 0., ..., 0., -0., 0.],\n",
183-
" [-0., 0., 0., ..., 0., 0., 0.]],\n",
184-
"\n",
185-
" [[-0., 0., 0., ..., 0., -0., 0.],\n",
186-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
187-
" [ 0., 0., 0., ..., -0., -0., 0.],\n",
188-
" ...,\n",
189-
" [ 0., 0., -0., ..., 0., -0., 0.],\n",
190-
" [-0., 0., 0., ..., -0., 0., 0.],\n",
191-
" [-0., 0., -0., ..., 0., 0., 0.]],\n",
192-
"\n",
193-
" [[ 0., 0., 0., ..., 0., 0., 0.],\n",
194-
" [ 0., -0., -0., ..., 0., -0., 0.],\n",
195-
" [ 0., 0., 0., ..., 0., 0., -0.],\n",
196-
" ...,\n",
197-
" [-0., -0., 0., ..., -0., 0., 0.],\n",
198-
" [ 0., 0., -0., ..., 0., -0., 0.],\n",
199-
" [ 0., -0., 0., ..., -0., 0., 0.]],\n",
200-
"\n",
201-
" ...,\n",
202-
"\n",
203-
" [[ 0., 0., 0., ..., 0., 0., -0.],\n",
204-
" [-0., 0., 0., ..., 0., -0., 0.],\n",
205-
" [-0., -0., 0., ..., -0., 0., -0.],\n",
206-
" ...,\n",
207-
" [-0., -0., 0., ..., 0., 0., -0.],\n",
208-
" [-0., 0., -0., ..., -0., 0., 0.],\n",
209-
" [-0., -0., 0., ..., 0., 0., 0.]],\n",
210-
"\n",
211-
" [[ 0., 0., 0., ..., 0., 0., 0.],\n",
212-
" [-0., 0., 0., ..., -0., 0., -0.],\n",
213-
" [-0., 0., -0., ..., 0., 0., 0.],\n",
214-
" ...,\n",
215-
" [-0., 0., -0., ..., -0., 0., 0.],\n",
216-
" [-0., -0., 0., ..., 0., 0., -0.],\n",
217-
" [-0., 0., -0., ..., -0., 0., 0.]],\n",
218-
"\n",
219-
" [[ 0., 0., 0., ..., 0., 0., -0.],\n",
220-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
221-
" [-0., -0., 0., ..., -0., 0., -0.],\n",
222-
" ...,\n",
223-
" [-0., -0., 0., ..., 0., 0., -0.],\n",
224-
" [-0., 0., -0., ..., -0., 0., 0.],\n",
225-
" [ 0., -0., 0., ..., 0., 0., 0.]]],\n",
226-
"\n",
227-
"\n",
228-
" ...,\n",
229-
"\n",
230-
"\n",
231-
" [[[ 0., 0., 0., ..., 0., -0., 0.],\n",
232-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
233-
" [ 0., 0., 0., ..., 0., -0., 0.],\n",
234-
" ...,\n",
235-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
236-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
237-
" [ 0., 0., 0., ..., 0., 0., 0.]],\n",
238-
"\n",
239-
" [[-0., 0., 0., ..., 0., 0., 0.],\n",
240-
" [ 0., 0., 0., ..., 0., -0., 0.],\n",
241-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
242-
" ...,\n",
243-
" [-0., -0., 0., ..., 0., 0., 0.],\n",
244-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
245-
" [-0., -0., 0., ..., 0., 0., 0.]],\n",
246-
"\n",
247-
" [[-0., 0., 0., ..., 0., -0., 0.],\n",
248-
" [ 0., 0., 0., ..., 0., 0., -0.],\n",
249-
" [ 0., 0., 0., ..., 0., -0., 0.],\n",
250-
" ...,\n",
251-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
252-
" [-0., -0., 0., ..., -0., 0., 0.],\n",
253-
" [-0., 0., 0., ..., 0., 0., 0.]],\n",
254-
"\n",
255-
" ...,\n",
256-
"\n",
257-
" [[ 0., 0., 0., ..., 0., 0., -0.],\n",
258-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
259-
" [ 0., 0., 0., ..., -0., 0., -0.],\n",
260-
" ...,\n",
261-
" [ 0., 0., 0., ..., 0., 0., -0.],\n",
262-
" [-0., -0., 0., ..., 0., 0., 0.],\n",
263-
" [-0., 0., 0., ..., 0., 0., 0.]],\n",
264-
"\n",
265-
" [[ 0., 0., 0., ..., 0., 0., 0.],\n",
266-
" [ 0., 0., 0., ..., -0., 0., -0.],\n",
267-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
268-
" ...,\n",
269-
" [ 0., -0., 0., ..., 0., 0., 0.],\n",
270-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
271-
" [-0., -0., 0., ..., 0., 0., 0.]],\n",
272-
"\n",
273-
" [[ 0., 0., 0., ..., 0., 0., -0.],\n",
274-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
275-
" [ 0., 0., 0., ..., -0., 0., -0.],\n",
276-
" ...,\n",
277-
" [ 0., 0., 0., ..., 0., 0., -0.],\n",
278-
" [-0., -0., 0., ..., 0., 0., 0.],\n",
279-
" [-0., 0., 0., ..., 0., 0., 0.]]],\n",
280-
"\n",
281-
"\n",
282-
" [[[ 0., 0., 0., ..., 0., 0., 0.],\n",
283-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
284-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
285-
" ...,\n",
286-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
287-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
288-
" [-0., 0., 0., ..., 0., 0., 0.]],\n",
289-
"\n",
290-
" [[ 0., 0., 0., ..., 0., 0., 0.],\n",
291-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
292-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
293-
" ...,\n",
294-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
295-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
296-
" [-0., 0., 0., ..., 0., 0., 0.]],\n",
297-
"\n",
298-
" [[-0., 0., 0., ..., 0., 0., -0.],\n",
299-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
300-
" [ 0., 0., 0., ..., 0., 0., -0.],\n",
301-
" ...,\n",
302-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
303-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
304-
" [-0., 0., 0., ..., 0., 0., 0.]],\n",
305-
"\n",
306-
" ...,\n",
307-
"\n",
308-
" [[ 0., 0., 0., ..., 0., 0., 0.],\n",
309-
" [ 0., 0., 0., ..., 0., 0., -0.],\n",
310-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
311-
" ...,\n",
312-
" [ 0., -0., 0., ..., 0., 0., 0.],\n",
313-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
314-
" [ 0., -0., 0., ..., 0., 0., 0.]],\n",
315-
"\n",
316-
" [[ 0., 0., 0., ..., 0., 0., -0.],\n",
317-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
318-
" [ 0., 0., 0., ..., 0., 0., -0.],\n",
319-
" ...,\n",
320-
" [-0., 0., 0., ..., 0., 0., -0.],\n",
321-
" [-0., -0., 0., ..., 0., 0., 0.],\n",
322-
" [ 0., 0., 0., ..., 0., 0., 0.]],\n",
323-
"\n",
324-
" [[ 0., 0., 0., ..., 0., 0., 0.],\n",
325-
" [ 0., 0., 0., ..., 0., 0., -0.],\n",
326-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
327-
" ...,\n",
328-
" [ 0., -0., 0., ..., 0., 0., 0.],\n",
329-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
330-
" [-0., -0., 0., ..., 0., 0., 0.]]],\n",
331-
"\n",
332-
"\n",
333-
" [[[-0., 0., 0., ..., 0., 0., 0.],\n",
334-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
335-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
336-
" ...,\n",
337-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
338-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
339-
" [ 0., 0., 0., ..., 0., 0., 0.]],\n",
340-
"\n",
341-
" [[-0., 0., 0., ..., 0., 0., 0.],\n",
342-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
343-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
344-
" ...,\n",
345-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
346-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
347-
" [-0., 0., 0., ..., 0., 0., 0.]],\n",
348-
"\n",
349-
" [[-0., 0., 0., ..., 0., 0., 0.],\n",
350-
" [ 0., 0., 0., ..., 0., 0., -0.],\n",
351-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
352-
" ...,\n",
353-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
354-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
355-
" [ 0., 0., 0., ..., 0., 0., 0.]],\n",
356-
"\n",
357-
" ...,\n",
358-
"\n",
359-
" [[ 0., 0., 0., ..., 0., 0., -0.],\n",
360-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
361-
" [-0., 0., 0., ..., 0., 0., -0.],\n",
362-
" ...,\n",
363-
" [-0., 0., 0., ..., 0., 0., -0.],\n",
364-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
365-
" [ 0., 0., 0., ..., 0., 0., 0.]],\n",
366-
"\n",
367-
" [[-0., 0., 0., ..., 0., 0., 0.],\n",
368-
" [ 0., 0., 0., ..., 0., 0., -0.],\n",
369-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
370-
" ...,\n",
371-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
372-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
373-
" [ 0., 0., 0., ..., 0., 0., 0.]],\n",
374-
"\n",
375-
" [[-0., 0., 0., ..., 0., 0., -0.],\n",
376-
" [ 0., 0., 0., ..., 0., 0., 0.],\n",
377-
" [ 0., 0., 0., ..., 0., 0., -0.],\n",
378-
" ...,\n",
379-
" [ 0., 0., 0., ..., 0., 0., -0.],\n",
380-
" [-0., 0., 0., ..., 0., 0., 0.],\n",
381-
" [-0., 0., 0., ..., 0., 0., 0.]]]], dtype=float32)"
382-
]
383-
},
384-
"execution_count": 5,
385-
"metadata": {},
386-
"output_type": "execute_result"
387-
}
388-
],
389-
"source": [
390-
"data_train[0]"
391-
]
392-
},
39356
{
39457
"cell_type": "code",
39558
"execution_count": 5,
@@ -446,7 +109,7 @@
446109
"nifti_img_before.to_filename(output_path_before)\n",
447110
"\n",
448111
"# after\n",
449-
"nifti_img_after = nb.Nifti1Image(data_test[0], pet_dataset.affine)\n",
112+
"nifti_img_after = nb.Nifti1Image(pet_dataset[2][0], pet_dataset.affine)\n",
450113
"output_path_after = \"after_mc.nii\"\n",
451114
"nifti_img_after.to_filename(output_path_after)"
452115
]

src/nifreeze/data/pet.py

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -79,45 +79,6 @@ def __getitem__(
7979
"""
8080
return super().__getitem__(idx)
8181

82-
def lofo_split(self, index):
83-
"""
84-
Leave-one-frame-out (LOFO) for PET data.
85-
86-
Parameters
87-
----------
88-
index : int
89-
Index of the PET frame to be left out in this fold.
90-
91-
Returns
92-
-------
93-
(train_data, train_timings) : tuple
94-
Training data and corresponding timings, excluding the left-out frame.
95-
(test_data, test_timing) : tuple
96-
Test data (one PET frame) and corresponding timing.
97-
"""
98-
99-
if not Path(self._filepath).exists():
100-
self.to_filename(self._filepath)
101-
102-
# Read original PET data
103-
with h5py.File(self._filepath, "r") as in_file:
104-
root = in_file["/0"]
105-
pet_frame = np.asanyarray(root["dataobj"][..., index])
106-
if self.midframe is not None:
107-
timing_frame = np.asanyarray(root["midframe"][..., index])
108-
109-
# Mask to exclude the selected frame
110-
mask = np.ones(self.dataobj.shape[-1], dtype=bool)
111-
mask[index] = False
112-
113-
train_data = self.dataobj[..., mask]
114-
train_timings = self.midframe[mask] if self.midframe is not None else None
115-
116-
test_data = pet_frame
117-
test_timing = timing_frame if self.midframe is not None else None
118-
119-
return (train_data, train_timings), (test_data, test_timing)
120-
12182
def set_transform(self, index, affine, order=3):
12283
"""Set an affine, and update data object and gradients."""
12384
reference = namedtuple("ImageGrid", ("shape", "affine"))(

0 commit comments

Comments
 (0)