Skip to content

Commit 43e548a

Browse files
committed
ENH: Allow meta_keys input to LookupMeta be a mapping.
Allows users to map meta data to more concise and semantically meaningful names.
1 parent b12d83d commit 43e548a

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

nipype/interfaces/dcmstack.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -147,31 +147,47 @@ class LookupMetaInputSpec(TraitedSpec):
147147
in_file = File(mandatory=True,
148148
exists=True,
149149
desc='The input Nifti file')
150-
meta_keys = traits.List(mandatory=True,
151-
desc='List of meta data keys to lookup')
150+
meta_keys = traits.Either(traits.List(),
151+
traits.Dict(),
152+
mandatory=True,
153+
desc=("List of meta data keys to lookup, or a "
154+
"dict where keys specify the meta data keys to "
155+
"lookup and the values specify the output names")
156+
)
152157

153158
class LookupMeta(BaseInterface):
154159
'''Lookup meta data values from a Nifti with embeded meta data.'''
155160
input_spec = LookupMetaInputSpec
156161
output_spec = DynamicTraitedSpec
157162

163+
def _make_name_map(self):
164+
if isinstance(self.inputs.meta_keys, list):
165+
self._meta_keys = {}
166+
for key in self.inputs.meta_keys:
167+
self._meta_keys[key] = key
168+
else:
169+
self._meta_keys = self.inputs.meta_keys
170+
158171
def _outputs(self):
172+
self._make_name_map()
159173
outputs = super(LookupMeta, self)._outputs()
160174
undefined_traits = {}
161-
for meta_key in self.inputs.meta_keys:
162-
outputs.add_trait(meta_key, traits.Any)
163-
undefined_traits[meta_key] = Undefined
175+
for out_name in self._meta_keys.values():
176+
outputs.add_trait(out_name, traits.Any)
177+
undefined_traits[out_name] = Undefined
164178
outputs.trait_set(trait_change_notify=False, **undefined_traits)
165179
#Not sure why this is needed
166-
for meta_key in self.inputs.meta_keys:
167-
_ = getattr(outputs, meta_key)
180+
for out_name in self._meta_keys.values():
181+
_ = getattr(outputs, out_name)
168182
return outputs
169183

170184
def _run_interface(self, runtime):
185+
#If the 'meta_keys' input is a list, covert it to a dict
186+
self._make_name_map()
171187
nw = NiftiWrapper.from_filename(self.inputs.in_file)
172188
self.result = {}
173-
for meta_key in self.inputs.meta_keys:
174-
self.result[meta_key] = nw.meta_ext.get_values(meta_key)
189+
for meta_key, out_name in self._meta_keys.iteritems():
190+
self.result[out_name] = nw.meta_ext.get_values(meta_key)
175191

176192
return runtime
177193

0 commit comments

Comments
 (0)