Ejemplo n.º 1
0
    def __init__(self, ivm, parent, acq_options):
        OptionsWidget.__init__(self, ivm, parent)
        self.acq_options = acq_options

        vbox = QtWidgets.QVBoxLayout()
        self.setLayout(vbox)

        self._optbox = OptionBox()
        self._optbox.add("<b>Model options</b>")
        self._optbox.add("Delay minimum (s)",
                         NumericOption(minval=-100, maxval=100, default=0),
                         key="delay-min")
        self._optbox.add("Delay maximum (s)",
                         NumericOption(minval=-100, maxval=100, default=0),
                         key="delay-max")
        self._optbox.add("Delay step (s)",
                         NumericOption(minval=-5, maxval=5, default=1),
                         key="delay-step")

        self._optbox.add("<b>Output options</b>")
        self._optbox.add("Output data name suffix",
                         TextOption(),
                         checked=True,
                         key="output-suffix")

        vbox.addWidget(self._optbox)
        vbox.addWidget(RunWidget(self, save_option=True))
        vbox.addStretch(1)
Ejemplo n.º 2
0
    def interface(self, generic_options=None):
        if generic_options is None:
            generic_options = {}

        if self.options_widget is None:
            self.options_widget = QtGui.QWidget()
            vbox = QtGui.QVBoxLayout()
            self.options_widget.setLayout(vbox)

            cite = Citation(CITE_TITLE, CITE_AUTHOR, CITE_JOURNAL)
            vbox.addWidget(cite)

            self.optbox = OptionBox()
            self.optbox.add("Mask for registration data",
                            DataOption(self.ivm, rois=True, data=False),
                            key="inmask",
                            checked=True)
            self.optbox.add("Mask for reference data",
                            DataOption(self.ivm, rois=True, data=False),
                            key="refmask",
                            checked=True)
            self.optbox.add("Spline order",
                            ChoiceOption([2, 3]),
                            key="splineorder",
                            checked=True)
            self.optbox.add("Use pre-defined configuration",
                            ChoiceOption(
                                ["T1_2_MNI152_2mm", "FA_2_FMRIB58_1mm"]),
                            key="config",
                            checked=True)
            vbox.addWidget(self.optbox)

        return self.options_widget
Ejemplo n.º 3
0
    def init_ui(self):
        vbox = QtGui.QVBoxLayout()
        self.setLayout(vbox)

        title = TitleWidget(self)
        vbox.addWidget(title)

        self._options = OptionBox("Options")
        self._options.add("Signal data", DataOption(self.ivm), key="data")
        self._clear_btn = QtGui.QPushButton("Clear points")
        self._options.add("Method", ChoiceOption(["Pick points", "Use existing ROI"], ["points", "roi"]), self._clear_btn, key="method")
        self._options.add("ROI", DataOption(self.ivm, data=False, rois=True), key="roi")
        self._view_btn = QtGui.QPushButton("View")
        self._view_btn.setEnabled(False)
        self._save_btn = QtGui.QPushButton("Save")
        self._save_btn.setEnabled(False)
        self._options.add("AIF name", TextOption("aif"), self._view_btn, self._save_btn, key="output-name")
        self._options.option("method").sig_changed.connect(self._method_changed)
        self._options.option("data").sig_changed.connect(self._recalc_aif)
        self._options.option("roi").sig_changed.connect(self._recalc_aif)
        self._clear_btn.clicked.connect(self._clear_btn_clicked)
        self._save_btn.clicked.connect(self._save_btn_clicked)
        self._view_btn.clicked.connect(self._view_btn_clicked)
        vbox.addWidget(self._options)

        self._plot = Plot(qpo=None, parent=self, title="AIF", display_mode=False)
        self._plot.set_xlabel("Volume")
        self._plot.set_ylabel("Signal")
        vbox.addWidget(self._plot)

        vbox.addStretch(1)
Ejemplo n.º 4
0
    def __init__(self, ivm, parent, acq_options):
        OptionsWidget.__init__(self, ivm, parent)
        self.acq_options = acq_options

        vbox = QtWidgets.QVBoxLayout()
        self.setLayout(vbox)

        cite = Citation(FAB_CITE_TITLE, FAB_CITE_AUTHOR, FAB_CITE_JOURNAL)
        vbox.addWidget(cite)

        self._optbox = OptionBox()
        self._optbox.add("<b>Model options</b>")
        self._optbox.add("Infer constant signal offset",
                         BoolOption(default=True),
                         key="infer-sig0")
        self._optbox.add("Infer delay",
                         BoolOption(default=True),
                         key="infer-delay")

        #self._optbox.add("<b>Model fitting options</b>")
        #self._optbox.add("Spatial regularization", BoolOption(default=True), key="spatial")
        self._optbox.add("<b>Output options</b>")
        self._optbox.add("Output data name suffix",
                         TextOption(),
                         checked=True,
                         key="output-suffix")

        vbox.addWidget(self._optbox)
        vbox.addWidget(RunWidget(self, save_option=True))
        vbox.addStretch(1)
Ejemplo n.º 5
0
    def init_ui(self):
        layout = QtGui.QVBoxLayout()
        self.setLayout(layout)

        title = TitleWidget(self, help="simple_maths")
        layout.addWidget(title)

        info = QtGui.QLabel(MATHS_INFO)
        info.setWordWrap(True)
        layout.addWidget(info)

        self.optbox = OptionBox()
        self.optbox.add("Data space from", DataOption(self.ivm), key="grid")
        self.optbox.add("Command", TextOption(), key="cmd")
        self.optbox.add("Output name",
                        OutputNameOption(src_data=self.optbox.option("grid")),
                        key="output-name")
        self.optbox.add("Output is an ROI", BoolOption(), key="output-is-roi")
        layout.addWidget(self.optbox)

        hbox = QtGui.QHBoxLayout()
        self.go_btn = RunButton(self)
        hbox.addWidget(self.go_btn)
        hbox.addStretch(1)
        layout.addLayout(hbox)

        layout.addStretch(1)
Ejemplo n.º 6
0
    def init_ui(self):
        layout = QtGui.QVBoxLayout()
        self.setLayout(layout)

        title = TitleWidget(self, help="reg")
        layout.addWidget(title)

        if not self.reg_methods:
            layout.addWidget(QtGui.QLabel("No registration methods found"))
            layout.addStretch(1)
            return

        self.options = OptionBox("General Options")
        self.options.add("Transform", TransformOption(self.ivm), key="transform")
        self.options.add("Apply to data", DataOption(self.ivm), key="data")
        self.options.add("Interpolation", ChoiceOption(["Nearest neighbour", "Linear", "Spline"], [0, 1, 3], default=1), key="interp-order")
        self.options.add("Output name", OutputNameOption(src_data=self.options.option("data"), suffix="_reg"), key="output-name")
        self.options.option("transform").sig_changed.connect(self._transform_changed)
        layout.addWidget(self.options)

        self.details = TransformDetails()
        layout.addWidget(self.details)

        layout.addWidget(RunButton(self))
        layout.addStretch(1)
        self._transform_changed()
Ejemplo n.º 7
0
    def __init__(self, fsldir, fsldevdir):
        super(FslDirDialog, self).__init__(quantiphyse.gui.dialogs.MAINWIN)
        self.setWindowTitle("Choose location of FSL installation")
        vbox = QtGui.QVBoxLayout()

        self.optbox = OptionBox()
        self.optbox.add("FSL installation",
                        FileOption(dirs=True, initial=fsldir),
                        key="fsldir")
        self.optbox.add("FSL development code",
                        FileOption(dirs=True, initial=fsldevdir),
                        checked=True,
                        enabled=bool(fsldevdir),
                        key="fsldevdir")
        self.optbox.option("fsldir").sig_changed.connect(self._fsldir_changed)
        self.optbox.option("fsldevdir").sig_changed.connect(
            self._fsldevdir_changed)
        vbox.addWidget(self.optbox)

        hbox = QtGui.QHBoxLayout()
        hbox.addStretch(1)
        self.button_box = QtGui.QDialogButtonBox(
            QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel)
        self.button_box.accepted.connect(self.accept)
        self.button_box.rejected.connect(self.reject)
        hbox.addWidget(self.button_box)
        vbox.addLayout(hbox)
        self.setLayout(vbox)
Ejemplo n.º 8
0
    def init_ui(self, run_box=True):
        self.vbox = QtGui.QVBoxLayout()
        self.setLayout(self.vbox)

        title = TitleWidget(self,
                            help="fsl",
                            subtitle="%s %s" % (self.description, __version__))
        self.vbox.addWidget(title)

        cite = Citation(*CITATIONS.get(self.prog, CITATIONS["fsl"]))
        self.vbox.addWidget(cite)

        self.options = OptionBox("%s options" % self.prog.upper())
        self.vbox.addWidget(self.options)

        if run_box:
            self.run_box = RunBox(self.get_process, self.get_options)
            self.vbox.addWidget(self.run_box)

        self.vbox.addStretch(1)

        fsldir = FslDirWidget()
        self.vbox.addWidget(fsldir)
        fsldir.sig_changed.connect(self._fsldir_changed)
        self._fsldir_changed(fsldir.fsldir)
Ejemplo n.º 9
0
    def init_ui(self):
        vbox = QtGui.QVBoxLayout()
        self.setLayout(vbox)

        title = TitleWidget(self)
        vbox.addWidget(title)

        self.options = OptionBox("Options")
        self.options.add("Data", DataOption(self.ivm, multi=True), key="data")
        self.options.add("Within ROI",
                         DataOption(self.ivm,
                                    data=False,
                                    rois=True,
                                    none_option=True),
                         key="roi")
        self.options.add("All volumes",
                         BoolOption(default=False),
                         key="allvols")
        self.options.add("Number of bins",
                         NumericOption(minval=5,
                                       maxval=250,
                                       default=50,
                                       intonly=True),
                         key="bins")
        vbox.addWidget(self.options)

        self.plot = Plot(qpo=None,
                         parent=self,
                         title="Radial profile",
                         display_mode=False)
        self.plot.set_xlabel("Distance (mm)")
        self.plot.set_ylabel("Mean data value")
        vbox.addWidget(self.plot)

        vbox.addStretch(1)
Ejemplo n.º 10
0
    def init_ui(self):
        vbox = QtGui.QVBoxLayout()
        self.setLayout(vbox)

        title = TitleWidget(self)
        vbox.addWidget(title)

        self.options = OptionBox("Options")
        self.options.add("Data", DataOption(self.ivm, multi=True), key="data")
        self.options.add("Within ROI", DataOption(self.ivm, data=False, rois=True, none_option=True), key="roi")
        self.options.add("All volumes", BoolOption(default=False), key="allvols")
        self.options.add("Y-axis scale", ChoiceOption(["Count", "Probability"]), key="yscale")
        self.options.add("Number of bins", NumericOption(minval=5, maxval=500, default=100, intonly=True), key="bins")
        self.options.add("Min value", NumericOption(minval=0, maxval=100, default=0), key="min")
        self.options.add("Max value", NumericOption(minval=0, maxval=500, default=100), key="max")
        self.options.option("yscale").sig_changed.connect(self._yscale_changed)
        self.options.option("min").sig_changed.connect(self._min_changed)
        self.options.option("min").sig_changed.connect(self._max_changed)
        vbox.addWidget(self.options)

        self.plot = Plot(qpo=None, parent=self, title="Data histogram", display_mode=False)
        self.plot.set_xlabel("Data value")
        self.plot.set_ylabel("Count")
        vbox.addWidget(self.plot)

        vbox.addStretch(1)
Ejemplo n.º 11
0
    def __init__(self, ivm, parent, model_type, abbrev, model_classes):
        OptionsWidget.__init__(self, ivm, parent)
        self._views = {}
        self.model = None
        self.view = None
        self._option_name = "%s-model" % abbrev
        for name, cls in model_classes.items():
            self._views[name] = get_view_class(cls)(ivm)

        main_vbox = QtGui.QVBoxLayout()
        self.setLayout(main_vbox)

        self.options = OptionBox()
        self.options.add(
            "%s model" % model_type,
            ChoiceOption([v.model.display_name for v in self._views.values()],
                         self._views.keys()),
            key=self._option_name)
        self.options.option(self._option_name).sig_changed.connect(
            self._model_changed)
        main_vbox.addWidget(self.options)

        self._create_guis(main_vbox)
        main_vbox.addStretch(1)
        self._model_changed()
    def __init__(self, parent, ivm, existing_strucs):
        super(AddEmbeddingDialog, self).__init__(parent)
        self.ivm = ivm
        self.sel_text = None
        self.sel_data = None
        self.existing_names = [struc.name for struc in existing_strucs]

        self.setWindowTitle("Add embedding")
        vbox = QtGui.QVBoxLayout()
        self.setLayout(vbox)

        self._opts = OptionBox()
        pvmap = self._opts.add("PV map / mask", DataOption(ivm, data=True, rois=True), key="pvmap")
        pvmap.sig_changed.connect(self._pvmap_changed)
        self._opts.add("ROI region", ChoiceOption([]), key="region")
        name = self._opts.add("Name of embedded structure", TextOption(), key="name")
        name.textChanged.connect(self._name_changed)
        self._opts.add("Structure type", ChoiceOption(["Embedding", "Activation mask", "Additional PVE"], return_values=["embed", "act", "add"]), key="type")
        self._opts.add("Parent structure", ChoiceOption([s.display_name for s in existing_strucs], [s.name for s in existing_strucs]), key="parent")
        self._opts.add("Edge smoothing sigma (mm)", NumericOption(minval=0, maxval=10, default=1, decimals=2), checked=True, enabled=False, key="sigma")
        vbox.addWidget(self._opts)

        self._warning = QtWidgets.QLabel(parent=self)
        self._warning.setStyleSheet("color: red;")
        vbox.addWidget(self._warning)

        self.button_box = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel)
        self.button_box.accepted.connect(self.accept)
        self.button_box.rejected.connect(self.reject)
        self.button_box.button(QtGui.QDialogButtonBox.Ok).setEnabled(False)
        vbox.addWidget(self.button_box)
        self._pvmap_changed()
Ejemplo n.º 13
0
    def init_ui(self):
        self.setStatusTip("Click points on the 4D volume to see data curve")

        vbox = QtGui.QVBoxLayout()
        self.setLayout(vbox)

        title = TitleWidget(self, "Multi-Voxel Visualisation", help="curve_compare", batch_btn=False)
        vbox.addWidget(title)

        self.plot = Plot(clear_btn=True)
        self.plot.clear_btn.clicked.connect(self._clear)
        self.plot.options.sig_options_changed.connect(self._options_changed)
        vbox.addWidget(self.plot)

        self.options = OptionBox("Options")
        self.options.add("Data set", DataOption(self.ivm, include_3d=False), key="data")
        col_names = [text for text in self.colors]
        cols = [col for text, col in self.colors.items()]
        self.options.add("Plot colour", ChoiceOption(col_names, cols, default="red"), key="col")
        self.options.add("Show individual curves", BoolOption(default=True), key="indiv")
        self.options.add("Show mean curve", BoolOption(), key="mean")

        self.options.option("data").sig_changed.connect(self._data_changed)
        self.options.option("indiv").sig_changed.connect(self._indiv_changed)
        self.options.option("mean").sig_changed.connect(self._mean_changed)
        self.options.option("col").sig_changed.connect(self._col_changed)

        hbox = QtGui.QHBoxLayout()
        hbox.addWidget(self.options)
        hbox.addStretch()
        vbox.addLayout(hbox)

        vbox.addStretch(1)    
        self._options_changed()
Ejemplo n.º 14
0
    def init_ui(self):
        layout = QtGui.QVBoxLayout()
        
        title = TitleWidget(self, help="roibuilder", batch_btn=False)
        layout.addWidget(title)

        self.options = OptionBox("Options")
        btn = QtGui.QPushButton("New")
        btn.clicked.connect(self._new_roi)
        self.options.add("ROI", DataOption(self.ivm, rois=True, data=False), btn, key="roi")
        self.options.add("Current label", NumericOption(minval=1, slider=False, intonly=True), key="label")
        self.options.add("Label description", TextOption(), key="label_text")
        self.options.option("roi").sig_changed.connect(self._roi_changed)
        self.options.option("label").sig_changed.connect(self._label_changed)
        self.options.option("label_text").sig_changed.connect(self._label_text_changed)
        layout.addWidget(self.options)
        
        # Add toolbox buttons in a grid
        hbox = QtGui.QHBoxLayout()
        self._toolbox = QtGui.QGroupBox()
        self._toolbox.setTitle("Toolbox")
        self.tools_grid = QtGui.QGridLayout()
        self._toolbox.setLayout(self.tools_grid)

        x, y, cols = 0, 0, 4
        for tool in TOOLS:
            self._add_tool(tool, y, x)
            x += 1
            if x == cols:
                y += 1
                x = 0

        self._undo_btn = QtGui.QPushButton()
        self._undo_btn.clicked.connect(self.undo)
        self._undo_btn.setEnabled(False)
        undo_icon = QtGui.QIcon(get_icon("undo"))
        self._undo_btn.setIcon(undo_icon)
        self._undo_btn.setToolTip("Undo last action")
        self._undo_btn.setFixedSize(32, 32)
        self.tools_grid.addWidget(self._undo_btn, y, x)

        hbox.addWidget(self._toolbox)
        self._toolbox.setEnabled(False)
        hbox.addStretch(1)
        layout.addLayout(hbox)

        # Tool options box - initially invisible
        hbox = QtGui.QHBoxLayout()
        self._tool_options = QtGui.QGroupBox()
        self._tool_options.setVisible(False)

        hbox.addWidget(self._tool_options)
        hbox.addStretch(1)
        layout.addLayout(hbox)

        layout.addStretch(1)
        self.setLayout(layout)
Ejemplo n.º 15
0
    def _init_ui(self):
        self.optbox.add("Motion correction",
                        BoolOption(default=True),
                        key="mc")
        #opt = self.optbox.add("Deblurring", BoolOption(), key="deblur")
        #opt.sig_changed.connect(self._deblur_changed)
        opt = self.optbox.add("ENABLE volume selection",
                              BoolOption(),
                              key="use_enable")
        opt.sig_changed.connect(self._enable_changed)
        self.optbox.add(
            "Distortion correction",
            ChoiceOption(["Fieldmap", "Phase encoding reversed calibration"],
                         ["fmap", "cblip"]),
            key="distcorr",
            checked=True)
        self.optbox.option("distcorr").sig_changed.connect(
            self._distcorr_changed)
        self.optbox.add("Phase encode direction",
                        ChoiceOption(["x", "y", "z", "-x", "-y", "-z"]),
                        key="pedir")
        self.optbox.add("Echo spacing (ms)",
                        NumericOption(minval=0,
                                      maxval=1,
                                      step=0.01,
                                      decimals=3),
                        key="echospacing")

        self.fmap_opts = OptionBox("Fieldmap distortion correction")
        self.fmap_opts.add("Fieldmap image (rads)",
                           DataOption(self.ivm,
                                      include_4d=False,
                                      explicit=True),
                           key="fmap")
        self.fmap_opts.add("Fieldmap magnitude image (rads)",
                           DataOption(self.ivm,
                                      include_4d=False,
                                      explicit=True),
                           key="fmapmag")
        self.fmap_opts.add("Fieldmap magnitude brain image (rads)",
                           DataOption(self.ivm,
                                      include_4d=False,
                                      explicit=True),
                           key="fmapmagbrain")
        self.vbox.addWidget(self.fmap_opts)

        self.cblip_opts = OptionBox(
            "Phase-encoding reversed distortion correction")
        self.cblip_opts.add("Phase-encode reversed image",
                            DataOption(self.ivm,
                                       include_4d=False,
                                       explicit=True),
                            key="cblip")
        self.vbox.addWidget(self.cblip_opts)

        self._distcorr_changed()
 def __init__(self, ivm):
     self.ivm = ivm
     self.model = UserPvModel(ivm)
     self.model.options.update({
         "pvmaps" : {},
         "additional" : {},
     })
     self.gui = OptionBox()
     self.gui.sig_changed.connect(self._update_options)
     self._refresh_gui()
class CheckerboardModelView:
    """
    View for CheckerboardModel
    """
    def __init__(self, ivm):
        self.model = CheckerboardModel(ivm)
        self.gui = OptionBox()
        self.gui.add("Number of voxels per patch (approx)", NumericOption(minval=1, maxval=1000, default=20, intonly=True), key="voxels-per-patch")
        self.gui.sig_changed.connect(self._update_options)
        
    def _update_options(self):
        self.model.options.update(self.gui.values())
Ejemplo n.º 18
0
    def __init__(self, ivl, rois=True, data=True):
        OptionBox.__init__(self, border=True)
        self.ivl = ivl
        self.ivm = ivl.ivm
        self._qpdata = None
        self._no_update = False
        self.grid.setVerticalSpacing(2)

        self._view_btn = QtGui.QPushButton()
        self._view_btn.setIcon(QtGui.QIcon(get_icon("visible.png")))
        self._view_btn.setFixedSize(16, 16)
        self._view_btn.setToolTip("Visibility")
        self._view_btn.clicked.connect(self._view_btn_clicked)
        self._data = self.add("Data" if data else "ROI",
                              DataOption(self.ivm,
                                         data=data,
                                         rois=rois,
                                         follow_current=True),
                              self._view_btn,
                              key="data")
        self._view_roi = self.add("View ROI",
                                  DataOption(self.ivm, data=False, rois=True),
                                  checked=True,
                                  key="view_roi")
        self._levels_btn = QtGui.QPushButton()
        self._levels_btn.setIcon(QtGui.QIcon(get_icon("levels.png")))
        self._levels_btn.setFixedSize(16, 16)
        self._levels_btn.setToolTip("Adjust colour map levels")
        self._levels_btn.clicked.connect(self._levels_clicked)
        self._cmap = self.add("Colour map",
                              ChoiceOption([
                                  "jet", "hot", "gist_heat", "flame",
                                  "bipolar", "spectrum", "custom"
                              ]),
                              self._levels_btn,
                              key="cmap")
        self._alpha = self.add("Alpha",
                               NumericOption(minval=0,
                                             maxval=255,
                                             default=255,
                                             edit=False,
                                             intonly=True),
                               key="alpha")
        self._value_label = QtGui.QLabel()
        self.add("Value", self._value_label)
        self.add("", stretch=2)

        self._data.sig_changed.connect(self._data_changed)
        self._view_roi.sig_changed.connect(self._view_roi_changed)
        self._cmap.sig_changed.connect(self._cmap_changed)
        self._alpha.sig_changed.connect(self._alpha_changed)
        self.ivl.sig_focus_changed.connect(self._focus_changed)
        self.qpdata = None
Ejemplo n.º 19
0
 def __init__(self, ivm):
     self.model = DceDataModel(ivm)
     self.gui = OptionBox()
     self.gui.add(
         "Model",
         ChoiceOption([
             "Standard Tofts model", "Extended Tofts model (ETM)",
             "2 Compartment exchange model",
             "Compartmental Tissue Update (CTU) model",
             "Adiabatic Approximation to Tissue Homogeneity (AATH) Model"
         ], ["dce_tofts", "dce_ETM", "dce_2CXM", "dce_CTU", "dce_AATH"]),
         key="model")
     self.gui.add("Contrast agent R1 relaxivity (l/mmol s)",
                  NumericOption(minval=0, maxval=10, default=3.7),
                  key="r1")
     self.gui.add("Flip angle (\N{DEGREE SIGN})",
                  NumericOption(minval=0, maxval=90, default=12),
                  key="fa")
     self.gui.add("TR (ms)",
                  NumericOption(minval=0, maxval=10, default=4.108),
                  key="tr")
     self.gui.add("Time between volumes (s)",
                  NumericOption(minval=0, maxval=30, default=12),
                  key="delt")
     self.gui.add("AIF",
                  ChoiceOption([
                      "Population (Orton 2008)", "Population (Parker)",
                      "Measured DCE signal", "Measured concentration curve"
                  ], ["orton", "parker", "signal", "conc"]),
                  key="aif")
     self.gui.add("Number of volumes",
                  NumericOption(minval=0,
                                maxval=100,
                                default=20,
                                intonly=True),
                  key="nt")
     self.gui.add("Bolus injection time (s)",
                  NumericOption(minval=0, maxval=60, default=30),
                  key="tinj")
     self.gui.add("AIF data values",
                  NumberListOption([
                      0,
                  ]),
                  key="aif-data")
     self.gui.add("Arterial transit time (s)",
                  NumericOption(minval=0, maxval=1.0, default=0),
                  key="delay")
     self.gui.option("model").sig_changed.connect(self._model_changed)
     self.gui.option("aif").sig_changed.connect(self._aif_changed)
     self._aif_changed()
     self._model_changed()
     self.gui.sig_changed.connect(self._update_options)
     self._update_options()
Ejemplo n.º 20
0
 def __init__(self, ivm):
     self.model = DscDataModel(ivm)
     self.gui = OptionBox()
     self.gui.add("Time between volumes (s)",
                  NumericOption(minval=0, maxval=5, default=1.0),
                  key="delt")
     self.gui.add("TE (s)",
                  NumericOption(minval=0, maxval=5, default=1.0),
                  key="te")
     self.gui.add("AIF", NumberListOption(), key="aif")
     self.gui.sig_changed.connect(self._update_options)
     self._update_options()
class FastStructureModelView:
    """
    View for FastStructureModel
    """
    def __init__(self, ivm):
        self.model = FastStructureModel(ivm)
        self.gui = OptionBox()
        self.gui.add("Structural image (brain extracted)", DataOption(self.model._ivm, explicit=True), key="struc")
        self.gui.add("Image type", ChoiceOption(["T1 weighted", "T2 weighted", "Proton Density"], return_values=[1, 2, 3]), key="type")
        self.gui.sig_changed.connect(self._update_options)
        
    def _update_options(self):
        self.model.options.update(self.gui.values())
Ejemplo n.º 22
0
    def __init__(self, ivm=None):
        QtGui.QWidget.__init__(self)
        self.ivm = ivm

        self.vbox = QtGui.QVBoxLayout()
        self.setLayout(self.vbox)

        if hasattr(self, "CITE"):
            self.vbox.addWidget(Citation(*self.CITE))

        self.optbox = OptionBox()
        self.vbox.addWidget(self.optbox)
        self._init_ui()
        self.vbox.addStretch(1)
Ejemplo n.º 23
0
    def _new_roi(self):
        dialog = QtGui.QDialog(self)
        dialog.setWindowTitle("New ROI")
        vbox = QtGui.QVBoxLayout()
        dialog.setLayout(vbox)

        optbox = OptionBox()
        optbox.add("ROI name", TextOption(), key="name")
        optbox.add("Data space from", DataOption(self.ivm), key="grid")
        vbox.addWidget(optbox)

        buttons = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok
                                         | QtGui.QDialogButtonBox.Cancel)
        buttons.accepted.connect(dialog.accept)
        buttons.rejected.connect(dialog.reject)
        vbox.addWidget(buttons)

        ok = dialog.exec_()
        if ok:
            roiname = optbox.option("name").value
            grid = self.ivm.data[optbox.option("grid").value].grid
            roidata = np.zeros(grid.shape, dtype=np.int)
            self.ivm.add(NumpyData(roidata, grid=grid, roi=True, name=roiname),
                         make_current=True)

            # Throw away old history. FIXME is this right, should we keep existing data and history?
            # Also should we cache old history in case we go back to this ROI?
            self._history = []
            self._undo_btn.setEnabled(False)
            self.options.option("roi").value = roiname
Ejemplo n.º 24
0
 def __init__(self, ivm):
     self.model = AslDataModel(ivm)
     self.gui = OptionBox()
     self.gui.add("Bolus duration",
                  NumericOption(minval=0, maxval=5, default=1.8),
                  key="tau")
     self.gui.add("Labelling",
                  ChoiceOption(["CASL/pCASL", "PASL"], [True, False],
                               default=True),
                  key="casl")
     self.gui.add("PLDs",
                  NumberListOption([0.25, 0.5, 0.75, 1.0, 1.25, 1.5]),
                  key="plds")
     self.gui.add("Time per slice (ms)",
                  NumericOption(minval=0,
                                maxval=1000,
                                default=0,
                                intonly=True),
                  key="slicedt")
     self.gui.add("Data format",
                  ChoiceOption(["Differenced data", "Label/Control pairs"],
                               ["diff", "tc"]),
                  key="iaf")
     self.gui.add("Repeats",
                  NumericOption(minval=1,
                                maxval=100,
                                default=1,
                                intonly=True),
                  key="repeats")
     self.gui.add("Group by",
                  ChoiceOption(["PLDs", "Repeats"], ["tis", "rpt"]),
                  key="ibf")
     self.gui.add("Inversion efficiency",
                  NumericOption(minval=0.5, maxval=1.0, default=0.85),
                  key="alpha")
     self.gui.add("M0",
                  NumericOption(minval=0, maxval=2000, default=1000),
                  key="m0")
     self.gui.add("TR (s)",
                  NumericOption(minval=0, maxval=10, default=4),
                  key="tr")
     self.gui.add("TE (ms)",
                  NumericOption(minval=0, maxval=1000, default=13),
                  key="te")
     self.gui.add("Tissue/arterial partition coefficient",
                  NumericOption(minval=0, maxval=1, default=0.9),
                  key="pct")
     #self.gui.add("Arterial component", BoolOption(), key="incart")
     self.gui.sig_changed.connect(self._update_options)
     self._update_options()
Ejemplo n.º 25
0
 def __init__(self, ivm):
     self.model = SpinEchoDataModel(ivm)
     self.gui = OptionBox()
     self.gui.add("TR (s)",
                  NumericOption(minval=0, maxval=10, default=4.8),
                  key="tr")
     self.gui.add("TE (ms)",
                  NumericOption(minval=0, maxval=1000, default=0),
                  key="te")
     self.gui.add("M0",
                  NumericOption(minval=0, maxval=10000, default=1000),
                  key="m0")
     self.gui.sig_changed.connect(self._update_options)
     self._update_options()
Ejemplo n.º 26
0
class ModelOptions(OptionsWidget):
    def __init__(self, ivm, parent, model_type, abbrev, model_classes):
        OptionsWidget.__init__(self, ivm, parent)
        self._views = {}
        self.model = None
        self.view = None
        self._option_name = "%s-model" % abbrev
        for name, cls in model_classes.items():
            self._views[name] = get_view_class(cls)(ivm)

        main_vbox = QtGui.QVBoxLayout()
        self.setLayout(main_vbox)

        self.options = OptionBox()
        self.options.add(
            "%s model" % model_type,
            ChoiceOption([v.model.display_name for v in self._views.values()],
                         self._views.keys()),
            key=self._option_name)
        self.options.option(self._option_name).sig_changed.connect(
            self._model_changed)
        main_vbox.addWidget(self.options)

        self._create_guis(main_vbox)
        main_vbox.addStretch(1)
        self._model_changed()

    def _create_guis(self, main_vbox):
        # Create the GUIs for models - only one visible at a time!
        for view in self._views.values():
            if view.gui is not None:
                view.gui.setVisible(False)
                if isinstance(view.gui, QtGui.QWidget):
                    main_vbox.addWidget(view.gui)
                else:
                    main_vbox.addLayout(view.gui)
                view.model.options.sig_changed.connect(
                    self._model_option_changed)

    def _model_changed(self):
        chosen_name = self.options.option(self._option_name).value
        self.view = self._views[chosen_name]
        self.model = self.view.model
        for name, view in self._views.items():
            view.gui.setVisible(chosen_name == name)
        self.sig_changed.emit()

    def _model_option_changed(self, _key, _value):
        self.sig_changed.emit()
Ejemplo n.º 27
0
    def __init__(self, ivm, parent):
        OptionsWidget.__init__(self, ivm, parent)

        main_vbox = QtGui.QVBoxLayout()
        self.setLayout(main_vbox)

        self.options = OptionBox()
        self.options.add("Add noise with SNR",
                         NumericOption(minval=0.1, maxval=100, default=10),
                         checked=True,
                         key="snr")
        self.options.sig_changed.connect(self.sig_changed.emit)
        main_vbox.addWidget(self.options)

        main_vbox.addStretch(1)
Ejemplo n.º 28
0
    def init_ui(self):
        layout = QtGui.QVBoxLayout()
        self.setLayout(layout)

        title = TitleWidget(self, title="Registration and Motion Correction", help="reg")
        layout.addWidget(title)

        if not self.reg_methods:
            layout.addWidget(QtGui.QLabel("No registration methods found"))
            layout.addStretch(1)
            return

        self.options = OptionBox("General Options")
        self.options.add("Mode", ChoiceOption(["Registration", "Motion Correction"], ["reg", "moco"]), key="mode")
        self.options.add("Method", ChoiceOption([method.display_name for method in self.reg_methods], self.reg_methods), key="method")
        self.options.add("Registration data", DataOption(self.ivm), key="reg")
        self.options.add("Reference data", DataOption(self.ivm), key="ref")
        self.options.add("Reference volume", ChoiceOption(["Middle volume", "Mean volume", "Specified volume"], ["median", "mean", "idx"]), key="ref-vol")
        self.options.add("Reference volume index", NumericOption(intonly=True), key="ref-idx")
        self.options.add("Output space", ChoiceOption(["Reference", "Registration", "Transformed"], ["ref", "reg", "trans"]), key="output-space")
        self.options.add("Output name", OutputNameOption(src_data=self.options.option("reg"), suffix="_reg"), key="output-name", checked=True)
        self.options.add("Also apply transform to", DataOption(self.ivm, multi=True), key="add-reg")
        self.options.add("Save transformation", TextOption(), key="save-transform", checked=True, default=False)
        
        self.options.option("mode").sig_changed.connect(self._update_option_visibility)
        self.options.option("method").sig_changed.connect(self._method_changed)
        self.options.option("ref").sig_changed.connect(self._update_option_visibility)
        self.options.option("ref-vol").sig_changed.connect(self._update_option_visibility)
        self.options.option("reg").sig_changed.connect(self._update_option_visibility)
        layout.addWidget(self.options)

        # Create the options boxes for reg methods - only one visible at a time!
        self.opt_boxes = {}
        for method in self.reg_methods:
            hbox = QtGui.QHBoxLayout()
            opt_box = QtGui.QGroupBox()
            opt_box.setTitle(method.display_name)
            vbox = QtGui.QVBoxLayout()
            opt_box.setLayout(vbox)
            vbox.addWidget(method.interface())
            hbox.addWidget(opt_box)
            opt_box.setVisible(False)
            layout.addLayout(hbox)
            self.opt_boxes[method.name] = opt_box

        layout.addWidget(RunWidget(self))
        layout.addStretch(1)
        self._method_changed()
Ejemplo n.º 29
0
    def __init__(self, parent):
        super(NewPoolDialog, self).__init__(parent)
        self.setWindowTitle("New Pool")
        vbox = QtGui.QVBoxLayout()

        self.optbox = OptionBox()
        vbox.addWidget(self.optbox)

        self.optbox.add("Name", TextOption(), key="name")
        self.optbox.add("PPM",
                        NumericOption(minval=0,
                                      maxval=20,
                                      default=0,
                                      decimals=3,
                                      slider=False),
                        key="ppm")
        self.optbox.add("Exchange rate",
                        NumericOption(minval=0,
                                      maxval=1000,
                                      default=0,
                                      decimals=1,
                                      slider=False),
                        key="exch")
        self.optbox.add("T1 (s)",
                        NumericOption(minval=0,
                                      maxval=10,
                                      default=1.0,
                                      decimals=2,
                                      slider=False),
                        key="t1")
        self.optbox.add("T2 (s)",
                        NumericOption(minval=0,
                                      maxval=1.0,
                                      default=0.07,
                                      decimals=6,
                                      slider=False),
                        key="t2")
        self.optbox.option("name").sig_changed.connect(self._validate)

        self.button_box = QtGui.QDialogButtonBox(
            QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel)
        self.button_box.accepted.connect(self.accept)
        self.button_box.rejected.connect(self.reject)
        vbox.addWidget(self.button_box)

        self.setLayout(vbox)
        self._validate()
Ejemplo n.º 30
0
    def init_ui(self):
        vbox = QtGui.QVBoxLayout()
        self.setLayout(vbox)

        title = TitleWidget(
            self,
            title="PCA reduction",
            subtitle="Principal Component Analysis for 4D data")
        vbox.addWidget(title)

        self._options = OptionBox("Options")
        self._options.add("Data",
                          DataOption(self.ivm, include_3d=False),
                          key="data")
        self._options.add("ROI",
                          DataOption(self.ivm, data=False, rois=True),
                          key="roi")
        self._options.add("Number of components",
                          NumericOption(minval=1, intonly=True, default=4),
                          key="n-components")
        self._options.add("Output name",
                          OutputNameOption(
                              src_data=self._options.option("data"),
                              suffix="_pca"),
                          key="output-name")
        self._options.option("data").sig_changed.connect(self._data_changed)
        vbox.addWidget(self._options)

        self._run = RunWidget(self)
        self._run.sig_postrun.connect(self._postrun)
        vbox.addWidget(self._run)

        self.plot = Plot(qpo=None, parent=self, title="PCA modes")

        self.variance_model = QtGui.QStandardItemModel()
        variance_table = QtGui.QTableView()
        variance_table.verticalHeader().hide()
        variance_table.setModel(self.variance_model)

        tabs = QtGui.QTabWidget()
        tabs.addTab(self.plot, "PCA modes")
        tabs.addTab(variance_table, "Explained variance")
        tabs.setCurrentWidget(self.plot)
        vbox.addWidget(tabs)

        vbox.addStretch(1)
        self._data_changed()