Source code for cmp.bidsappmanager.stages.diffusion.diffusion

# Copyright (C) 2009-2022, Ecole Polytechnique Federale de Lausanne (EPFL) and
# Hospital Center and University of Lausanne (UNIL-CHUV), Switzerland, and CMP3 contributors
# All rights reserved.
#
#  This software is distributed under the open-source license Modified BSD.

"""Definition of diffusion reconstruction and tracking config and stage UI classes."""

# General imports
import subprocess
from traits.api import *
from traitsui.api import *

# Own imports
from cmp.bidsappmanager.stages.diffusion.reconstruction import *
from cmp.bidsappmanager.stages.diffusion.tracking import *
from cmp.stages.diffusion.diffusion import DiffusionConfig, DiffusionStage


[docs]class DiffusionConfigUI(DiffusionConfig): """Class that extends the :class:`DiffusionConfig` with graphical components. It includes the graphical components defining the configuration of the diffusion reconstruction and tractography sub-stages. Attributes ---------- traits_view : traits.ui.View TraitsUI view that displays the Diffusion Stage Parameter Attributes of this class See also --------- cmp.stages.diffusion.diffusion.DiffusionConfig """ traits_view = View( Item("diffusion_imaging_model", style="readonly"), HGroup( Item("dilate_rois"), Item("dilation_radius", visible_when="dilate_rois", label="radius"), ), Group( Item( "recon_processing_tool", label="Reconstruction processing tool", editor=EnumEditor(name="recon_processing_tool_editor"), ), Item( "dipy_recon_config", style="custom", visible_when='recon_processing_tool=="Dipy"', ), Item( "mrtrix_recon_config", style="custom", visible_when='recon_processing_tool=="MRtrix"', ), label="Reconstruction", show_border=True, show_labels=False, visible_when="tracking_processing_tool!=Custom", ), Group( Item( "tracking_processing_tool", label="Tracking processing tool", editor=EnumEditor(name="tracking_processing_tool_editor"), ), Item( "diffusion_model", editor=EnumEditor(name="diffusion_model_editor"), visible_when='tracking_processing_tool!="Custom"', ), Item( "dipy_tracking_config", style="custom", visible_when='tracking_processing_tool=="Dipy"', ), Item( "mrtrix_tracking_config", style="custom", visible_when='tracking_processing_tool=="MRtrix"', ), label="Tracking", show_border=True, show_labels=False, ), Group( Item("custom_track_file", style="simple"), visible_when='tracking_processing_tool=="Custom"', ), height=750, width=500, ) def __init__(self): """Constructor of the DiffusionConfigUI class. See also --------- cmp.stages.diffusion.diffusion.DiffusionConfig.__init__ cmp.cmpbidsappmanager.stages.diffusion.reconstruction.Dipy_recon_configUI cmp.cmpbidsappmanager.stages.diffusion.reconstruction.MRtrix_recon_configUI cmp.cmpbidsappmanager.stages.diffusion.tracking.Dipy_tracking_configUI cmp.cmpbidsappmanager.stages.diffusion.tracking.MRtrix_tracking_configUI """ DiffusionConfig.__init__(self) self.dipy_recon_config = Dipy_recon_configUI( imaging_model=self.diffusion_imaging_model, recon_mode=self.diffusion_model, tracking_processing_tool=self.tracking_processing_tool, ) self.mrtrix_recon_config = MRtrix_recon_configUI( imaging_model=self.diffusion_imaging_model, recon_mode=self.diffusion_model ) self.dipy_tracking_config = Dipy_tracking_configUI( imaging_model=self.diffusion_imaging_model, tracking_mode=self.diffusion_model, SD=self.mrtrix_recon_config.local_model, ) self.mrtrix_tracking_config = MRtrix_tracking_configUI( tracking_mode=self.diffusion_model, SD=self.mrtrix_recon_config.local_model ) self.mrtrix_recon_config.on_trait_change( self.update_mrtrix_tracking_SD, "local_model" ) self.dipy_recon_config.on_trait_change( self.update_dipy_tracking_SD, "local_model" ) self.dipy_recon_config.on_trait_change( self.update_dipy_tracking_sh_order, "lmax_order" )
[docs]class DiffusionStageUI(DiffusionStage): """Class that extends the :class:`DiffusionStage` with graphical components. Attributes ---------- inspect_output_button : traits.ui.Button Button that displays the selected output in an appropriate viewer (present only in the window for quality inspection) inspect_outputs_view : traits.ui.View TraitsUI view that displays the quality inspection window of this stage config_view : traits.ui.View TraitsUI view that displays the configuration window of this stage See also --------- cmp.stages.diffusion.diffusion.DiffusionStage """ inspect_output_button = Button("View") inspect_outputs_view = View( Group( Item("name", editor=TitleEditor(), show_label=False), Group( Item("inspect_outputs_enum", show_label=False), Item( "inspect_output_button", enabled_when='inspect_outputs_enum!="Outputs not available"', show_label=False, ), label="View outputs", show_border=True, ), ), scrollable=True, resizable=True, kind="livemodal", title="Inspect stage outputs", buttons=["OK", "Cancel"], ) config_view = View( Group( Item("name", editor=TitleEditor(), show_label=False), Group( Item("config", style="custom", show_label=False), label="Configuration", show_border=True, ), ), scrollable=True, resizable=True, height=900, width=500, kind="livemodal", title="Edit stage configuration", buttons=["OK", "Cancel"], ) def __init__(self, bids_dir, output_dir): """Constructor of the DiffusionStageUI class. Parameters ----------- bids_dir : path BIDS root directory output_dir : path Output directory See also --------- cmp.stages.diffusion.diffusion.DiffusionStage.__init_ cmp.cmpbidsappmanager.stages.diffusion.diffusion.DiffusionConfigUI """ DiffusionStage.__init__(self, bids_dir, output_dir) self.config = DiffusionConfigUI() def _inspect_output_button_fired(self, info): """Display the selected output when ``inspect_output_button`` is clicked. Parameters ---------- info : traits.ui.Button Button object """ subprocess.Popen(self.inspect_outputs_dict[self.inspect_outputs_enum])