33
33
# These lists define the order in which entities should appear in the YAML output
34
34
# Using BIDS entity keys (e.g., 'ses' instead of 'session')
35
35
DWI_ENTITIES = [
36
- 'sub' , 'ses' , 'acq' , 'dir' , 'run' , 'rec' , 'mod' , 'echo' , 'flip' ,
37
- 'inv' , 'mt' , 'part' , 'ce' , 'recording' , 'proc' , 'space' , 'res' , 'den' ,
38
- 'desc' , 'label' , 'from' , 'to' , 'mode' , 'cohort' , 'res'
36
+ 'sub' ,
37
+ 'ses' ,
38
+ 'acq' ,
39
+ 'dir' ,
40
+ 'run' ,
41
+ 'rec' ,
42
+ 'mod' ,
43
+ 'echo' ,
44
+ 'flip' ,
45
+ 'inv' ,
46
+ 'mt' ,
47
+ 'part' ,
48
+ 'ce' ,
49
+ 'recording' ,
50
+ 'proc' ,
51
+ 'space' ,
52
+ 'res' ,
53
+ 'den' ,
54
+ 'desc' ,
55
+ 'label' ,
56
+ 'from' ,
57
+ 'to' ,
58
+ 'mode' ,
59
+ 'cohort' ,
60
+ 'res' ,
39
61
]
40
62
41
63
FMAP_ENTITIES = [
42
- 'sub' , 'ses' , 'acq' , 'dir' , 'run' , 'rec' , 'mod' , 'echo' , 'flip' ,
43
- 'inv' , 'mt' , 'part' , 'ce' , 'recording' , 'proc' , 'space' , 'res' , 'den' ,
44
- 'desc' , 'label' , 'from' , 'to' , 'mode' , 'cohort' , 'res'
64
+ 'sub' ,
65
+ 'ses' ,
66
+ 'acq' ,
67
+ 'dir' ,
68
+ 'run' ,
69
+ 'rec' ,
70
+ 'mod' ,
71
+ 'echo' ,
72
+ 'flip' ,
73
+ 'inv' ,
74
+ 'mt' ,
75
+ 'part' ,
76
+ 'ce' ,
77
+ 'recording' ,
78
+ 'proc' ,
79
+ 'space' ,
80
+ 'res' ,
81
+ 'den' ,
82
+ 'desc' ,
83
+ 'label' ,
84
+ 'from' ,
85
+ 'to' ,
86
+ 'mode' ,
87
+ 'cohort' ,
88
+ 'res' ,
45
89
]
46
90
47
91
ANAT_ENTITIES = [
48
- 'sub' , 'ses' , 'acq' , 'ce' , 'rec' , 'run' , 'mod' , 'echo' , 'flip' ,
49
- 'inv' , 'mt' , 'part' , 'proc' , 'space' , 'res' , 'den' , 'desc' , 'label' ,
50
- 'from' , 'to' , 'mode' , 'cohort' , 'res'
92
+ 'sub' ,
93
+ 'ses' ,
94
+ 'acq' ,
95
+ 'ce' ,
96
+ 'rec' ,
97
+ 'run' ,
98
+ 'mod' ,
99
+ 'echo' ,
100
+ 'flip' ,
101
+ 'inv' ,
102
+ 'mt' ,
103
+ 'part' ,
104
+ 'proc' ,
105
+ 'space' ,
106
+ 'res' ,
107
+ 'den' ,
108
+ 'desc' ,
109
+ 'label' ,
110
+ 'from' ,
111
+ 'to' ,
112
+ 'mode' ,
113
+ 'cohort' ,
114
+ 'res' ,
51
115
]
52
116
53
117
FUNC_ENTITIES = [
54
- 'sub' , 'ses' , 'task' , 'acq' , 'ce' , 'rec' , 'dir' , 'run' , 'echo' ,
55
- 'recording' , 'part' , 'proc' , 'space' , 'res' , 'den' , 'desc' , 'label' ,
56
- 'from' , 'to' , 'mode' , 'cohort' , 'res'
118
+ 'sub' ,
119
+ 'ses' ,
120
+ 'task' ,
121
+ 'acq' ,
122
+ 'ce' ,
123
+ 'rec' ,
124
+ 'dir' ,
125
+ 'run' ,
126
+ 'echo' ,
127
+ 'recording' ,
128
+ 'part' ,
129
+ 'proc' ,
130
+ 'space' ,
131
+ 'res' ,
132
+ 'den' ,
133
+ 'desc' ,
134
+ 'label' ,
135
+ 'from' ,
136
+ 'to' ,
137
+ 'mode' ,
138
+ 'cohort' ,
139
+ 'res' ,
57
140
]
58
141
59
142
PERF_ENTITIES = [
60
- 'sub' , 'ses' , 'acq' , 'rec' , 'run' , 'mod' , 'echo' , 'flip' ,
61
- 'inv' , 'mt' , 'part' , 'proc' , 'space' , 'res' , 'den' , 'desc' , 'label' ,
62
- 'from' , 'to' , 'mode' , 'cohort' , 'res'
143
+ 'sub' ,
144
+ 'ses' ,
145
+ 'acq' ,
146
+ 'rec' ,
147
+ 'run' ,
148
+ 'mod' ,
149
+ 'echo' ,
150
+ 'flip' ,
151
+ 'inv' ,
152
+ 'mt' ,
153
+ 'part' ,
154
+ 'proc' ,
155
+ 'space' ,
156
+ 'res' ,
157
+ 'den' ,
158
+ 'desc' ,
159
+ 'label' ,
160
+ 'from' ,
161
+ 'to' ,
162
+ 'mode' ,
163
+ 'cohort' ,
164
+ 'res' ,
63
165
]
64
166
65
167
# Mapping from full entity names to BIDS entity keys
87
189
'to' : 'to' ,
88
190
'mode' : 'mode' ,
89
191
'cohort' : 'cohort' ,
90
- 'res' : 'res'
192
+ 'res' : 'res' ,
91
193
}
92
194
93
195
# Reverse mapping from BIDS entity keys to full names
94
196
REVERSE_ENTITY_KEY_MAP = {v : k for k , v in ENTITY_KEY_MAP .items ()}
95
197
198
+
96
199
def _convert_to_bids_key (key ):
97
200
"""Convert full entity name to BIDS entity key."""
98
201
return ENTITY_KEY_MAP .get (key , key )
99
202
203
+
100
204
def _convert_from_bids_key (key ):
101
205
"""Convert BIDS entity key to full entity name."""
102
206
return REVERSE_ENTITY_KEY_MAP .get (key , key )
@@ -250,7 +354,8 @@ def create_skeleton_from_bids(bids_dir, n_subjects, n_sessions):
250
354
dwi_entry = {'suffix' : 'dwi' , 'metadata' : dwi_sidecar }
251
355
for key in DWI_ENTITIES :
252
356
full_key = _convert_from_bids_key (key )
253
- if full_key in entities and full_key != 'session' : # Skip session as it's handled separately
357
+ # Skip session as it's handled separately
358
+ if full_key in entities and full_key != 'session' :
254
359
dwi_entry [key ] = _sanitize_value (entities [full_key ])
255
360
skeleton [subject ]['dwi' ].append (dwi_entry )
256
361
@@ -264,7 +369,8 @@ def create_skeleton_from_bids(bids_dir, n_subjects, n_sessions):
264
369
func_entry = {'suffix' : 'bold' , 'metadata' : func_sidecar }
265
370
for key in FUNC_ENTITIES :
266
371
full_key = _convert_from_bids_key (key )
267
- if full_key in entities and full_key != 'session' : # Skip session as it's handled separately
372
+ # Skip session as it's handled separately
373
+ if full_key in entities and full_key != 'session' :
268
374
func_entry [key ] = _sanitize_value (entities [full_key ])
269
375
skeleton [subject ]['func' ].append (func_entry )
270
376
@@ -276,20 +382,26 @@ def create_skeleton_from_bids(bids_dir, n_subjects, n_sessions):
276
382
fmap_entry = {'suffix' : 'epi' , 'metadata' : fmap_sidecar }
277
383
for key in FMAP_ENTITIES :
278
384
full_key = _convert_from_bids_key (key )
279
- if full_key in entities and full_key != 'session' : # Skip session as it's handled separately
385
+ if (
386
+ full_key in entities and full_key != 'session'
387
+ ): # Skip session as it's handled separately
280
388
fmap_entry [key ] = _sanitize_value (entities [full_key ])
281
389
fmap_entries .append (fmap_entry )
282
390
skeleton [subject ]['fmap' ] = fmap_entries
283
391
284
392
# Add anat entries
285
393
anat_entries = []
286
- for anat_file in layout .get (subject = subject , suffix = ['T1w' , 'T2w' , 'FLAIR' , 'PDw' ], extension = '.json' ):
394
+ for anat_file in layout .get (
395
+ subject = subject , suffix = ['T1w' , 'T2w' , 'FLAIR' , 'PDw' ], extension = '.json'
396
+ ):
287
397
anat_sidecar = _sanitize_metadata (anat_file .get_metadata ())
288
398
entities = parse_file_entities (Path (anat_file ).name )
289
399
anat_entry = {'suffix' : entities .get ('suffix' , '' ), 'metadata' : anat_sidecar }
290
400
for key in ANAT_ENTITIES :
291
401
full_key = _convert_from_bids_key (key )
292
- if full_key in entities and full_key != 'session' : # Skip session as it's handled separately
402
+ if (
403
+ full_key in entities and full_key != 'session'
404
+ ): # Skip session as it's handled separately
293
405
anat_entry [key ] = _sanitize_value (entities [full_key ])
294
406
anat_entries .append (anat_entry )
295
407
skeleton [subject ]['anat' ] = anat_entries
@@ -330,7 +442,8 @@ def create_skeleton_from_bids(bids_dir, n_subjects, n_sessions):
330
442
dwi_entry = {'suffix' : 'dwi' , 'metadata' : dwi_sidecar }
331
443
for key in DWI_ENTITIES :
332
444
full_key = _convert_from_bids_key (key )
333
- if full_key in entities and full_key != 'session' : # Skip session as it's handled separately
445
+ # Skip session as it's handled separately
446
+ if full_key in entities and full_key != 'session' :
334
447
dwi_entry [key ] = _sanitize_value (entities [full_key ])
335
448
session_data ['dwi' ].append (dwi_entry )
336
449
@@ -346,32 +459,42 @@ def create_skeleton_from_bids(bids_dir, n_subjects, n_sessions):
346
459
func_entry = {'suffix' : 'bold' , 'metadata' : func_sidecar }
347
460
for key in FUNC_ENTITIES :
348
461
full_key = _convert_from_bids_key (key )
349
- if full_key in entities and full_key != 'session' : # Skip session as it's handled separately
462
+ # Skip session as it's handled separately
463
+ if full_key in entities and full_key != 'session' :
350
464
func_entry [key ] = _sanitize_value (entities [full_key ])
351
465
session_data ['func' ].append (func_entry )
352
466
353
467
# Add fmap entries
354
468
fmap_entries = []
355
- for fmap_file in layout .get (subject = subject , session = session , suffix = 'epi' , extension = '.json' ):
469
+ for fmap_file in layout .get (
470
+ subject = subject , session = session , suffix = 'epi' , extension = '.json'
471
+ ):
356
472
fmap_sidecar = _sanitize_metadata (fmap_file .get_metadata ())
357
473
entities = parse_file_entities (Path (fmap_file ).name )
358
474
fmap_entry = {'suffix' : 'epi' , 'metadata' : fmap_sidecar }
359
475
for key in FMAP_ENTITIES :
360
476
full_key = _convert_from_bids_key (key )
361
- if full_key in entities and full_key != 'session' : # Skip session as it's handled separately
477
+ # Skip session as it's handled separately
478
+ if full_key in entities and full_key != 'session' :
362
479
fmap_entry [key ] = _sanitize_value (entities [full_key ])
363
480
fmap_entries .append (fmap_entry )
364
481
session_data ['fmap' ] = fmap_entries
365
482
366
483
# Add anat entries
367
484
anat_entries = []
368
- for anat_file in layout .get (subject = subject , session = session , suffix = ['T1w' , 'T2w' , 'FLAIR' , 'PDw' ], extension = '.json' ):
485
+ for anat_file in layout .get (
486
+ subject = subject ,
487
+ session = session ,
488
+ suffix = ['T1w' , 'T2w' , 'FLAIR' , 'PDw' ],
489
+ extension = '.json' ,
490
+ ):
369
491
anat_sidecar = _sanitize_metadata (anat_file .get_metadata ())
370
492
entities = parse_file_entities (Path (anat_file ).name )
371
493
anat_entry = {'suffix' : entities .get ('suffix' , '' ), 'metadata' : anat_sidecar }
372
494
for key in ANAT_ENTITIES :
373
495
full_key = _convert_from_bids_key (key )
374
- if full_key in entities and full_key != 'session' : # Skip session as it's handled separately
496
+ # Skip session as it's handled separately
497
+ if full_key in entities and full_key != 'session' :
375
498
anat_entry [key ] = _sanitize_value (entities [full_key ])
376
499
anat_entries .append (anat_entry )
377
500
session_data ['anat' ] = anat_entries
@@ -411,6 +534,7 @@ def _convert_to_serializable(obj):
411
534
return {k : _convert_to_serializable (v ) for k , v in obj .items ()}
412
535
return str (obj )
413
536
537
+
414
538
# configs = {}
415
539
# ds_paths = ("ds002278", "ds004146", "ds005237")
416
540
0 commit comments