Skip to content

Commit 8b955c4

Browse files
committed
REF: Refactor PET estimator
Refactor PET estimator so that it is more closely aligned with the `Estimator` 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 453cdb1 commit 8b955c4

File tree

4 files changed

+82
-464
lines changed

4 files changed

+82
-464
lines changed

docs/notebooks/pet_motion_estimation.ipynb

Lines changed: 0 additions & 337 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,

src/nifreeze/data/pet.py

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -81,44 +81,6 @@ def __getitem__(
8181
"""
8282
return super().__getitem__(idx)
8383

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

0 commit comments

Comments
 (0)