Skip to content

Commit 71eef20

Browse files
committed
added support for vectors
1 parent 95f1397 commit 71eef20

File tree

3 files changed

+36
-17
lines changed

3 files changed

+36
-17
lines changed

nipype/interfaces/mipav/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
from developer import MedicAlgorithmLesionToads, JistCortexSurfaceMeshInflation, MedicAlgorithmImageCalculator, JistBrainMp2rageDuraEstimation, MedicAlgorithmSPECTRE2010, JistBrainPartialVolumeFilter, JistIntensityMp2rageMasking
1+
from developer import MedicAlgorithmLesionToads, JistCortexSurfaceMeshInflation, MedicAlgorithmImageCalculator, JistBrainMp2rageDuraEstimation, MedicAlgorithmMipavReorient, MedicAlgorithmSPECTRE2010, JistBrainPartialVolumeFilter, JistIntensityMp2rageMasking

nipype/interfaces/mipav/generate_classes.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,16 +104,16 @@
104104
'de.mpg.cbs.jist.modules.JistModuleCorticalProfileFeatureSetCalculator']
105105

106106
modules_from_chris = ['edu.jhu.ece.iacl.plugins.segmentation.skull_strip.MedicAlgorithmSPECTRE2010',
107-
#'edu.jhu.ece.iacl.plugins.registration.MedicAlgorithmFLIRT', XML not well formed
108-
#'edu.jhu.ece.iacl.plugins.utilities.volume.MedicAlgorithmMipavReorient', # not well formed "<file collection: semi-colon delimited list>"
107+
'edu.jhu.ece.iacl.plugins.registration.MedicAlgorithmFLIRT', #XML not well formed
108+
'edu.jhu.ece.iacl.plugins.utilities.volume.MedicAlgorithmMipavReorient', # not well formed "<file collection: semi-colon delimited list>"
109109
'edu.jhu.ece.iacl.plugins.utilities.math.MedicAlgorithmImageCalculator',
110110
'de.mpg.cbs.jist.brain.JistBrainMp2rageDuraEstimation',
111111
#'de.mpg.cbs.jist.modules.JistModuleFilterStacking', not found
112112
'de.mpg.cbs.jist.brain.JistBrainPartialVolumeFilter',
113113
#'de.mpg.cbs.jist.modules.JistModuleTubularVolumeFilter', # not found
114114
#'de.mpg.cbs.jist.modules.JistModuleMgdmMultiSegmentation',
115115
#'de.mpg.cbs.jist.tools.JistToolsIntensityNormalization', # not found
116-
#'de.mpg.cbs.jist.modules.JistModuleCopyData', XML not well formed
116+
#'de.mpg.cbs.jist.modules.JistModuleCopyData', not found
117117
#'de.mpg.cbs.jist.tools.JistToolsIntensityNormalization',
118118
#'de.mpg.cbs.jist.tools.JistToolsExtractBrainRegion',
119119
#'edu.jhu.ece.iacl.plugins.utilities.volume.MedicAlgorithmThresholdToBinaryMask',# XML not well formed
@@ -126,9 +126,9 @@
126126

127127
#modules_list = list(set(modules_list).union(set(modules_from_chris)))
128128
modules_list = list(set(modules_from_chris).union(set(modules_from_leaonie)).union(set(modules_from_julia)))
129-
129+
#modules_list = ["'edu.jhu.ece.iacl.plugins.utilities.volume.MedicAlgorithmMipavReorient'"]
130130
## SlicerExecutionModel compliant tools that are usually statically built, and don't need the Slicer3 --launcher
131-
generate_all_classes(modules_list=modules_list,launcher=["java edu.jhu.ece.iacl.jist.cli.run" ], redirect_x = True)
131+
generate_all_classes(modules_list=modules_list,launcher=["java edu.jhu.ece.iacl.jist.cli.run" ], redirect_x=True, mipav_hacks=True)
132132
## Tools compliant with SlicerExecutionModel called from the Slicer environment (for shared lib compatibility)
133133
#launcher = ['/home/raid3/gorgolewski/software/slicer/Slicer', '--launch']
134134
#generate_all_classes(modules_list=modules_list, launcher=launcher)

nipype/interfaces/slicer/generate_classes.py

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def configuration(parent_package='',top_path=None):
101101
f.close()
102102

103103

104-
def generate_all_classes(modules_list=[], launcher=[], redirect_x = False):
104+
def generate_all_classes(modules_list=[], launcher=[], redirect_x=False, mipav_hacks=False):
105105
""" modules_list contains all the SEM compliant tools that should have wrappers created for them.
106106
launcher containtains the command line prefix wrapper arugments needed to prepare
107107
a proper environment for each of the modules.
@@ -111,7 +111,7 @@ def generate_all_classes(modules_list=[], launcher=[], redirect_x = False):
111111
print("=" * 80)
112112
print("Generating Definition for module {0}".format(module))
113113
print("^" * 80)
114-
package, code, module = generate_class(module, launcher, redirect_x = redirect_x)
114+
package, code, module = generate_class(module, launcher, redirect_x = redirect_x, mipav_hacks=mipav_hacks)
115115
cur_package = all_code
116116
module_name = package.strip().split(" ")[0].split(".")[-1]
117117
for package in package.strip().split(" ")[0].split(".")[:-1]:
@@ -126,8 +126,8 @@ def generate_all_classes(modules_list=[], launcher=[], redirect_x = False):
126126
crawl_code_struct(all_code, os.getcwd())
127127

128128

129-
def generate_class(module, launcher, strip_module_name_prefix=True, redirect_x = False):
130-
dom = grab_xml(module, launcher)
129+
def generate_class(module, launcher, strip_module_name_prefix=True, redirect_x = False, mipav_hacks=False):
130+
dom = grab_xml(module, launcher, mipav_hacks=mipav_hacks)
131131
if strip_module_name_prefix:
132132
module_name = module.split(".")[-1]
133133
else:
@@ -224,7 +224,10 @@ def generate_class(module, launcher, strip_module_name_prefix=True, redirect_x =
224224
param.nodeName.replace('-vector', '')]]
225225
else:
226226
values = [typesDict[param.nodeName.replace('-vector', '')]]
227-
traitsParams["sep"] = ','
227+
if mipav_hacks == True:
228+
traitsParams["sep"] = ";"
229+
else:
230+
traitsParams["sep"] = ','
228231
elif param.getAttribute('multiple') == "true":
229232
type = "InputMultiPath"
230233
if param.nodeName in ['file', 'directory', 'image', 'geometry', 'transform', 'table']:
@@ -301,19 +304,35 @@ def generate_class(module, launcher, strip_module_name_prefix=True, redirect_x =
301304
return category, input_spec_code + output_spec_code + main_class, module_name
302305

303306

304-
def grab_xml(module, launcher):
307+
def grab_xml(module, launcher, mipav_hacks=False):
305308
# cmd = CommandLine(command = "Slicer3", args="--launch %s --xml"%module)
306309
# ret = cmd.run()
307310
command_list = launcher[:] # force copy to preserve original
308311
command_list.extend([module, "--xml"])
309312
final_command = " ".join(command_list)
310313
xmlReturnValue = subprocess.Popen(
311314
final_command, stdout=subprocess.PIPE, shell=True).communicate()[0]
312-
#workaround for a JIST bug https://www.nitrc.org/tracker/index.php?func=detail&aid=7233&group_id=228&atid=942
313-
if xmlReturnValue.strip().endswith("XML"):
314-
xmlReturnValue = xmlReturnValue.strip()[:-3]
315-
if xmlReturnValue.strip().startswith("Error: Unable to set default atlas"):
316-
xmlReturnValue = xmlReturnValue.strip()[len("Error: Unable to set default atlas"):]
315+
if mipav_hacks:
316+
#workaround for a jist bug https://www.nitrc.org/tracker/index.php?func=detail&aid=7234&group_id=228&atid=942
317+
new_xml = ""
318+
replace_closing_tag = False
319+
for line in xmlReturnValue.splitlines():
320+
if line.strip() == "<file collection: semi-colon delimited list>":
321+
new_xml += "<file-vector>\n"
322+
replace_closing_tag = True
323+
elif replace_closing_tag and line.strip() == "</file>":
324+
new_xml += "</file-vector>\n"
325+
replace_closing_tag = False
326+
else:
327+
new_xml += line + "\n"
328+
329+
xmlReturnValue = new_xml
330+
331+
#workaround for a JIST bug https://www.nitrc.org/tracker/index.php?func=detail&aid=7233&group_id=228&atid=942
332+
if xmlReturnValue.strip().endswith("XML"):
333+
xmlReturnValue = xmlReturnValue.strip()[:-3]
334+
if xmlReturnValue.strip().startswith("Error: Unable to set default atlas"):
335+
xmlReturnValue = xmlReturnValue.strip()[len("Error: Unable to set default atlas"):]
317336
return xml.dom.minidom.parseString(xmlReturnValue.strip())
318337
# if ret.runtime.returncode == 0:
319338
# return xml.dom.minidom.parseString(ret.runtime.stdout)

0 commit comments

Comments
 (0)