@@ -55,6 +55,8 @@ class DcmStackInputSpec(NiftiGeneratorBaseInputSpec):
55
55
traits .Str (),
56
56
mandatory = True )
57
57
embed_meta = traits .Bool (desc = "Embed DICOM meta data into result" )
58
+ exclude_regexes = traits .List (desc = "Meta data to exclude, suplementing any default exclude filters" )
59
+ include_regexes = traits .List (desc = "Meta data to include, overriding any exclude filters" )
58
60
59
61
class DcmStackOutputSpec (TraitedSpec ):
60
62
out_file = traits .File (exists = True )
@@ -75,7 +77,15 @@ def _get_filelist(self, trait_input):
75
77
76
78
def _run_interface (self , runtime ):
77
79
src_paths = self ._get_filelist (self .inputs .dicom_files )
78
- stack = dcmstack .DicomStack ()
80
+ include_regexes = dcmstack .default_key_incl_res
81
+ if not self .inputs .include_regexes is Undefined :
82
+ include_regexes += self .inputs .include_regexes
83
+ exclude_regexes = dcmstack .default_key_excl_res
84
+ if not self .inputs .exclude_regexes is Undefined :
85
+ exclude_regexes += self .inputs .exclude_regexes
86
+ meta_filter = dcmstack .make_key_regex_filter (exclude_regexes ,
87
+ include_regexes )
88
+ stack = dcmstack .DicomStack (meta_filter = meta_filter )
79
89
for src_path in src_paths :
80
90
src_dcm = dicom .read_file (src_path , force = True )
81
91
stack .add_dcm (src_dcm )
@@ -214,7 +224,10 @@ def _list_outputs(self):
214
224
class MergeNiftiInputSpec (NiftiGeneratorBaseInputSpec ):
215
225
in_files = traits .List (mandatory = True ,
216
226
desc = "List of Nifti files to merge" )
217
- sort_order = traits .Str (desc = "Meta data key to sort files by" )
227
+ sort_order = traits .Either (traits .Str (),
228
+ traits .List (),
229
+ desc = "One or more meta data keys to "
230
+ "sort files by." )
218
231
merge_dim = traits .Int (desc = "Dimension to merge along. If not "
219
232
"specified, the last singular or "
220
233
"non-existant dimension is used." )
@@ -223,11 +236,9 @@ class MergeNiftiOutputSpec(TraitedSpec):
223
236
out_file = traits .File (exists = True ,
224
237
desc = "Merged Nifti file" )
225
238
226
- def make_key_func (meta_key , index = None ):
239
+ def make_key_func (meta_keys , index = None ):
227
240
def key_func (src_nii ):
228
- result = src_nii .get_meta (meta_key , index )
229
- if result is None :
230
- raise ValueError ('Key not found: %s' ) % meta_key
241
+ result = [src_nii .get_meta (key , index ) for key in meta_keys ]
231
242
return result
232
243
233
244
return key_func
@@ -246,7 +257,10 @@ def _run_interface(self, runtime):
246
257
for nii in niis
247
258
]
248
259
if self .inputs .sort_order :
249
- nws .sort (key = make_key_func (self .inputs .sort_order ))
260
+ sort_order = self .inputs .sort_order
261
+ if isinstance (sort_order , str ):
262
+ sort_order = [sort_order ]
263
+ nws .sort (key = make_key_func (sort_order ))
250
264
if self .inputs .merge_dim == traits .Undefined :
251
265
merge_dim = None
252
266
else :
0 commit comments