Skip to content
Snippets Groups Projects
Commit 0abbd119 authored by Paul McCarthy's avatar Paul McCarthy
Browse files

Real EV names (as specified in design.fsf) are used

parent 521960a5
No related branches found
No related tags found
No related merge requests found
...@@ -109,7 +109,10 @@ def loadDesignFsf(designfsf): ...@@ -109,7 +109,10 @@ def loadDesignFsf(designfsf):
tkns = line.split(None, 2) tkns = line.split(None, 2)
settings[tkns[1].strip()] = tkns[2] key = tkns[1].strip()
val = tkns[2].strip().strip("'").strip('"')
settings[key] = val
return settings return settings
...@@ -154,6 +157,7 @@ class FEATImage(fslimage.Image): ...@@ -154,6 +157,7 @@ class FEATImage(fslimage.Image):
self.__contrastNames = names self.__contrastNames = names
self.__contrasts = cons self.__contrasts = cons
self.__settings = settings self.__settings = settings
self.__evNames = self.__getEVNames()
self.__residuals = None self.__residuals = None
self.__pes = [None] * self.numEVs() self.__pes = [None] * self.numEVs()
...@@ -163,6 +167,49 @@ class FEATImage(fslimage.Image): ...@@ -163,6 +167,49 @@ class FEATImage(fslimage.Image):
self.name = '{}.feat: {}'.format( self.name = '{}.feat: {}'.format(
self.__analysisName, self.name) self.__analysisName, self.name)
def __getEVNames(self):
numEVs = self.numEVs()
titleKeys = filter(
lambda s: s.startswith('fmri(evtitle'),
self.__settings.keys())
derivKeys = filter(
lambda s: s.startswith('fmri(deriv_yn'),
self.__settings.keys())
evnames = []
for titleKey, derivKey in zip(titleKeys, derivKeys):
# Figure out the ev number from
# the design.fsf key - skip over
# 'fmri(evtitle' (an offset of 12)
evnum = int(titleKey[12:-1])
# Sanity check - the evnum
# for the deriv_yn key matches
# that for the evtitle key
if evnum != int(derivKey[13:-1]):
raise RuntimeError('design.fsf seem to be corrupt')
title = self.__settings[titleKey]
deriv = self.__settings[derivKey]
if deriv == '0':
evnames.append(title)
else:
evnames.append(title)
evnames.append('{} - {}'.format(title, 'temporal derivative'))
if len(evnames) != numEVs:
raise RuntimeError('The number of EVs in design.fsf does not '
'match the number of EVs in design.mat')
return evnames
def getAnalysisName(self): def getAnalysisName(self):
return self.__analysisName return self.__analysisName
...@@ -179,6 +226,10 @@ class FEATImage(fslimage.Image): ...@@ -179,6 +226,10 @@ class FEATImage(fslimage.Image):
def numEVs(self): def numEVs(self):
return self.__design.shape[1] return self.__design.shape[1]
def evNames(self):
return list(self.__evNames)
def numContrasts(self): def numContrasts(self):
return len(self.__contrasts) return len(self.__contrasts)
......
...@@ -439,7 +439,7 @@ choices = TypeDict({ ...@@ -439,7 +439,7 @@ choices = TypeDict({
'HistogramPanel.histType.probability' : 'Probability', 'HistogramPanel.histType.probability' : 'Probability',
'HistogramPanel.histType.count' : 'Count', 'HistogramPanel.histType.count' : 'Count',
'TimeSeriesPanel.plotMode.normal' : 'Normal', 'TimeSeriesPanel.plotMode.normal' : 'Normal - no scaling/offsets',
'TimeSeriesPanel.plotMode.demean' : 'Demeaned', 'TimeSeriesPanel.plotMode.demean' : 'Demeaned',
'TimeSeriesPanel.plotMode.normalise' : 'Normalised', 'TimeSeriesPanel.plotMode.normalise' : 'Normalised',
'TimeSeriesPanel.plotMode.percentChange' : 'Percent changed', 'TimeSeriesPanel.plotMode.percentChange' : 'Percent changed',
......
...@@ -231,19 +231,19 @@ class TimeSeriesControlPanel(fslpanel.FSLViewPanel): ...@@ -231,19 +231,19 @@ class TimeSeriesControlPanel(fslpanel.FSLViewPanel):
for i, ev in enumerate(evs): for i, ev in enumerate(evs):
evName = 'EV{}'.format(i + 1) evName = ts.overlay.evNames()[i]
self.__widgets.AddWidget( self.__widgets.AddWidget(
ev, ev,
displayName=strings.properties[ts, 'plotEVs'].format(i + 1, displayName=strings.properties[ts, 'plotEVs'].format(
evName), i + 1, evName),
groupName='currentFEATSettings') groupName='currentFEATSettings')
for i, pe in enumerate(pes): for i, pe in enumerate(pes):
evName = 'EV{}'.format(i + 1) evName = ts.overlay.evNames()[i]
self.__widgets.AddWidget( self.__widgets.AddWidget(
pe, pe,
displayName=strings.properties[ts, 'plotPEFits'].format(i + 1, displayName=strings.properties[ts, 'plotPEFits'].format(
evName), i + 1, evName),
groupName='currentFEATSettings') groupName='currentFEATSettings')
copeNames = overlay.contrastNames() copeNames = overlay.contrastNames()
......
...@@ -117,10 +117,12 @@ class TimeSeriesListPanel(fslpanel.FSLViewPanel): ...@@ -117,10 +117,12 @@ class TimeSeriesListPanel(fslpanel.FSLViewPanel):
return '{} ({})'.format( return '{} ({})'.format(
parentTs.label, parentTs.label,
strings.labels[modelTs]) strings.labels[modelTs])
elif isinstance(modelTs, tsp.FEATEVTimeSeries): elif isinstance(modelTs, tsp.FEATEVTimeSeries):
return '{} ({})'.format( return '{} EV{} ({})'.format(
parentTs.label, modelTs.overlay.name,
'EV') modelTs.idx + 1,
modelTs.overlay.evNames()[modelTs.idx])
label = '{} ({})'.format( label = '{} ({})'.format(
parentTs.label, parentTs.label,
......
...@@ -343,13 +343,14 @@ class FEATReducedTimeSeries(TimeSeries): ...@@ -343,13 +343,14 @@ class FEATReducedTimeSeries(TimeSeries):
data = self.overlay.reducedData(self.coords, self.contrast, False) data = self.overlay.reducedData(self.coords, self.contrast, False)
return TimeSeries.getData(self, ydata=data) return TimeSeries.getData(self, ydata=data)
class FEATEVTimeSeries(TimeSeries): class FEATEVTimeSeries(TimeSeries):
def __init__(self, tsPanel, overlay, coords, ev): def __init__(self, tsPanel, overlay, coords, idx):
TimeSeries.__init__(self, tsPanel, overlay, coords) TimeSeries.__init__(self, tsPanel, overlay, coords)
self.ev = ev self.idx = idx
def getData(self): def getData(self):
data = self.overlay.getDesign()[:, self.ev] data = self.overlay.getDesign()[:, self.idx]
return TimeSeries.getData(self, ydata=data) return TimeSeries.getData(self, ydata=data)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment