diff --git a/fsl/data/melodicimage.py b/fsl/data/melodicimage.py index fd9772744611064de5dd9b37f09c27abfd7e1a6c..21bc8005e89a8c801b0972752ef234f8f9066cff 100644 --- a/fsl/data/melodicimage.py +++ b/fsl/data/melodicimage.py @@ -128,6 +128,13 @@ class MelodicImage(fslimage.Image): return melresults.getDataFile(self.__meldir) + def getMeanFile(self): + """Returns the file name of the mean data image associated with this + ``MelodicImage``. See the :func:`.melodicresults.getMeanFile` function. + """ + return melresults.getMeanFile(self.__meldir) + + def getICClassification(self): """Return the :class:`.MelodicClassification` instance associated with this ``MelodicImage``. diff --git a/fsl/data/melodicresults.py b/fsl/data/melodicresults.py index ab159fbb6a0631938719f18469d33ddfe0b41187..bcc60cb1449c332a92956e520f90e5fe7ab03127 100644 --- a/fsl/data/melodicresults.py +++ b/fsl/data/melodicresults.py @@ -107,10 +107,8 @@ def getDataFile(meldir): dataFile = op.join(topDir, 'filtered_func_data') - try: - return fslimage.addExt(dataFile, mustExist=True) - except ValueError: - return None + try: return fslimage.addExt(dataFile, mustExist=True) + except ValueError: return None def getMeanFile(meldir): diff --git a/fsl/fsleyes/autodisplay.py b/fsl/fsleyes/autodisplay.py index 99c8f42e76efc50a2d678638b4f647be54839d26..cb28ad37436839d649c586b6d3628bf9af1d456e 100644 --- a/fsl/fsleyes/autodisplay.py +++ b/fsl/fsleyes/autodisplay.py @@ -182,7 +182,22 @@ def _MelodicImageDisplay(overlay, overlayList, displayCtx): opts.negativeCmap = 'Blue-LightBlue' opts.displayRange = [1.5, 5.0] opts.clippingRange = [1.5, opts.dataMax] - opts.useNegativeCmap = True + opts.useNegativeCmap = True + + # Add the mean as an underlay + idx = overlayList.index(overlay) + meanFile = overlay.getMeanFile() + existing = [op.abspath(o.dataSource) for o in overlayList] + + # But only if it's not + # already in the list + if meanFile not in existing: + + log.debug('Inserting mean melodic image into ' + 'overlay list: {}'.format(meanFile)) + + meanImg = fslimage.Image(meanFile) + overlayList.insert(idx, meanImg) def _ModelDisplay(overlay, display, overlayList, displayCtx): diff --git a/fsl/fsleyes/controls/melodicclassificationpanel.py b/fsl/fsleyes/controls/melodicclassificationpanel.py index af2b2a90ee4347e0166cdf925f062b0ddd17f9b3..8154c9ad81b196ac012fca90c715dcc0473181d9 100644 --- a/fsl/fsleyes/controls/melodicclassificationpanel.py +++ b/fsl/fsleyes/controls/melodicclassificationpanel.py @@ -20,7 +20,6 @@ import pwidgets.notebook as notebook import fsl.utils.settings as fslsettings import fsl.data.strings as strings -import fsl.data.image as fslimage import fsl.data.melodicresults as fslmelresults import fsl.data.melodicimage as fslmelimage import fsl.fsleyes.colourmaps as fslcm @@ -377,27 +376,22 @@ class MelodicClassificationPanel(fslpanel.FSLEyesPanel): return # Try loading the melodic_IC image - # specified in the label file. We'll - # load the mean image as well, as an - # underlay. + # specified in the label file. try: overlay = fslmelimage.MelodicImage( melDir) - mean = fslmelresults.getMeanFile(melDir) - mean = fslimage.Image( mean) - log.debug('Adding {} and {} to overlay list'.format(overlay, mean)) + log.debug('Adding {} to overlay list'.format(overlay)) self._overlayList.disableListener('overlays', self._name) self._displayCtx .disableListener('selectedOverlay', self._name) - self._overlayList.extend([mean, overlay]) + self._overlayList.append(overlay) self._overlayList.enableListener('overlays', self._name) self._displayCtx .enableListener('selectedOverlay', self._name) if self._displayCtx.autoDisplay: - for o in [overlay, mean]: - autodisplay.autoDisplay(o, - self._overlayList, - self._displayCtx) + autodisplay.autoDisplay(overlay, + self._overlayList, + self._displayCtx) fslsettings.write('loadOverlayLastDir', op.abspath(melDir))