Difference between revisions of "Whole-Brain-Tractography-Wizard"
From NAMIC Wiki
| Line 8: | Line 8: | ||
Image:fibers.png|[Fibers] | Image:fibers.png|[Fibers] | ||
</gallery> | </gallery> | ||
| + | In order to generate this wizard, we will use the For each step, we must: | ||
| + | * Obtain the input from the interface | ||
| + | * Validate the input | ||
| + | * Set up the parameters for the next step | ||
| + | |||
| + | ==Obtaining the input from the Interface== | ||
| + | |||
| + | ===Declaring the Modules=== | ||
| + | step_widget_files = [ | ||
| + | 'dicom2nrrd', | ||
| + | 'dwi2dti', | ||
| + | 'dti2fibers', | ||
| + | 'done', | ||
| + | ] | ||
| + | |||
| + | ===Declaring Each Module's Fields=== | ||
| + | step_widget_fields = { | ||
| + | 'dicom2nrrd':[ | ||
| + | ('DICOMRadioButton', 'checked'), | ||
| + | ('NRRDDWIRadioButton', 'checked'), | ||
| + | ('inputDicomDirectory', 'directory'), | ||
| + | ('outputVolume', 'currentPath'), | ||
| + | ('useBMatrixGradientDirections','checked'), | ||
| + | ('inputNRRDVolume','currentPath'), | ||
| + | ], | ||
| + | 'dwi2dti':[ | ||
| + | ('leastSquaresEstimation', 'checked'), | ||
| + | ('weightedLeastSquaresEstimation', 'checked'), | ||
| + | ('thresholdParameter', 'value'), | ||
| + | ('removeIslands', 'checked'), | ||
| + | ('applyMask', 'checked'), | ||
| + | ], | ||
| + | 'dti2fibers':[ | ||
| + | ('seedSpacing','value'), | ||
| + | ('stoppingFAValue','value'), | ||
| + | ('minimumFAValueSeed','value'), | ||
| + | ('stoppingTrackCurvature','value'), | ||
| + | ], | ||
| + | 'done':[], | ||
| + | } | ||
| + | |||
| + | ===Validating Data for a Field=== | ||
| + | |||
| + | def validate_dicom2nrrd(self, step_object, data): | ||
| + | if data[step_object.id()]['DICOMRadioButton']: | ||
| + | Running a CLI module from a python script | ||
| + | self.dicomtonrrdconverter_parameter_node = slicer.cli.run( | ||
| + | slicer.modules.dicomtonrrdconverter, self.dicomtonrrdconverter_parameter_node, | ||
| + | data[step_object.id()], | ||
| + | wait_for_completion = True) | ||
| + | Validating the result of a CLI module | ||
| + | if self.dicomtonrrdconverter_parameter_node.GetStatusString() == 'Completed': | ||
| + | file_path = data[step_object.id()]['outputVolume'] | ||
| + | result_status, node = slicer.util.loadVolume( | ||
| + | file_path, | ||
| + | True | ||
| + | ) | ||
| + | else: | ||
| + | result_status = False | ||
| + | Setting data for the next module | ||
| + | if result_status: | ||
| + | self.dwi_node = node | ||
| + | self.dwi_node_name = node.GetID() | ||
| + | Output errors if needed | ||
| + | if not result_status: | ||
| + | display_error("Error in DICOM to NRRD conversion, please see log") | ||
| + | return result_status | ||
Revision as of 15:22, 10 January 2012
Home < Whole-Brain-Tractography-WizardContents
The Idea of a Wizard
Make a simple set of steps that will guide the user through a complex process. An example of this is the simple wizard that takes the user from a DICOM or NRRD Diffusion Weighted Image to a Full brain tractography. There are 4 steps to this process:
In order to generate this wizard, we will use the For each step, we must:
- Obtain the input from the interface
- Validate the input
- Set up the parameters for the next step
Obtaining the input from the Interface
Declaring the Modules
step_widget_files = [
'dicom2nrrd',
'dwi2dti',
'dti2fibers',
'done',
]
Declaring Each Module's Fields
step_widget_fields = {
'dicom2nrrd':[
('DICOMRadioButton', 'checked'),
('NRRDDWIRadioButton', 'checked'),
('inputDicomDirectory', 'directory'),
('outputVolume', 'currentPath'),
('useBMatrixGradientDirections','checked'),
('inputNRRDVolume','currentPath'),
],
'dwi2dti':[
('leastSquaresEstimation', 'checked'),
('weightedLeastSquaresEstimation', 'checked'),
('thresholdParameter', 'value'),
('removeIslands', 'checked'),
('applyMask', 'checked'),
],
'dti2fibers':[
('seedSpacing','value'),
('stoppingFAValue','value'),
('minimumFAValueSeed','value'),
('stoppingTrackCurvature','value'),
],
'done':[],
}
Validating Data for a Field
def validate_dicom2nrrd(self, step_object, data):
if data[step_object.id()]['DICOMRadioButton']:
Running a CLI module from a python script
self.dicomtonrrdconverter_parameter_node = slicer.cli.run(
slicer.modules.dicomtonrrdconverter, self.dicomtonrrdconverter_parameter_node,
data[step_object.id()],
wait_for_completion = True)
Validating the result of a CLI module
if self.dicomtonrrdconverter_parameter_node.GetStatusString() == 'Completed':
file_path = data[step_object.id()]['outputVolume']
result_status, node = slicer.util.loadVolume(
file_path,
True
)
else:
result_status = False
Setting data for the next module
if result_status:
self.dwi_node = node
self.dwi_node_name = node.GetID()
Output errors if needed
if not result_status:
display_error("Error in DICOM to NRRD conversion, please see log")
return result_status