moved UI stuff. new project structure in the making
Christoph Budziszewski

Christoph Budziszewski commited on 2009-01-12 17:57:09
Zeige 4 geänderte Dateien mit 356 Einfügungen und 202 Löschungen.


git-svn-id: https://svn.discofish.de/MATLAB/spmtoolbox/SVMCrossVal@108 83ab2cfd-5345-466c-8aeb-2b2739fb922d
... ...
@@ -0,0 +1,167 @@
1
+function main_UI(args)
2
+
3
+
4
+%  Initialize and hide the GUI as it is being constructed.
5
+    frameWidth=450;
6
+    frameHeight=600;
7
+    frame = figure('Visible','off','Position',[0,0,frameWidth,frameHeight]);
8
+    movegui(frame,'west'); % get this thing visible on smaller displays.
9
+    
10
+    set(frame,'Name','SVMCrossVal Decode Performance 4 SPM');
11
+    set(frame,'NumberTitle','off');
12
+    set(frame,'MenuBar','none');
13
+    set(frame,'Color',get(0,'defaultUicontrolBackgroundColor'));
14
+    set(frame,'Resize','off');
15
+    set(frame,'Units','normalize');
16
+    
17
+    
18
+    savemenu = uimenu(frame,'Label','Save/Load');
19
+    
20
+    model.subjectMap = SubjectRoiMapping;
21
+    nElementRows = 24;
22
+    optionLineHeight = 1.0/nElementRows;
23
+    controlElementHeight=optionLineHeight*(1.0/1.5)*frameHeight;
24
+    pSubject     = uipanel(frame,'Title','Subject',          'Position',[0 optionLineHeight*19 frameWidth optionLineHeight*5]);
25
+    pPSTH        = uipanel(frame,'Title','PSTH Options',     'Position',[0 optionLineHeight*14 frameWidth optionLineHeight*5]); 
26
+    pCLASS       = uipanel(frame,'Title','Class Definitions','Position',[0 optionLineHeight*9  frameWidth optionLineHeight*5]); 
27
+    pVOXEL       = uipanel(frame,'Title','Voxel Selector',   'Position',[0 optionLineHeight*3  frameWidth optionLineHeight*6]); 
28
+    pSVM         = uipanel(frame,'Title','SVM Options',      'Position',[0 optionLineHeight*1  frameWidth optionLineHeight*2]); 
29
+    btnRunButton = uicontrol(frame,'Tag','run','String','run decode-performance visualiser','Position',[2 optionLineHeight*0  frameWidth controlElementHeight*1.6]);
30
+
31
+
32
+    % Subject
33
+    firstColumn  =  5.00;
34
+    firstRow     =  1.00 * controlElementHeight;
35
+    
36
+    model.subjectSelector = uicontrol(pSubject,'Style','listbox',...
37
+                    'Min',1, 'Max',3,...
38
+                    'String',getSubjectCellList(model.subjectMap),...
39
+                    'Value',5,...  % default selected item
40
+                    'Position',[firstColumn firstRow 0.66*frameWidth controlElementHeight*6]);
41
+    set(model.subjectSelector,'BackgroundColor','w');
42
+    
43
+    model.txtSmoothed     = createTextField(pSubject,[0.68*frameWidth firstRow  0.25*frameWidth controlElementHeight],'1');
44
+    model.txtMultisubject = createTextField(pSubject,[0.68*frameWidth firstRow*2  0.25*frameWidth controlElementHeight],'single');
45
+    set(model.txtMultisubject,'enable','off');
46
+
47
+    % PSTH
48
+    firstColumn  = 5.00;
49
+    secondColumn = 0.33*frameWidth;
50
+    thirdColumn  = 0.66*frameWidth;
51
+%     fourthColumn = 0.84*frameWidth;
52
+    
53
+    firstRow    = 5.5*controlElementHeight;
54
+    secondRow   = 4.5*controlElementHeight;
55
+    thirdRow    = 3.5*controlElementHeight;
56
+    fourthRow   = 2.5*controlElementHeight;
57
+    fifthRow    = 1.0*controlElementHeight;
58
+    
59
+    lStart      = createLabel(pPSTH, [secondColumn firstRow  0.33*frameWidth controlElementHeight],'Start [sec]');
60
+    lEnd        = createLabel(pPSTH, [thirdColumn  firstRow  0.33*frameWidth controlElementHeight],'End [sec]');
61
+    lPSTH       = createLabel(pPSTH, [firstColumn  secondRow 0.33*frameWidth controlElementHeight],'PSTH Range');
62
+    lBaseline   = createLabel(pPSTH, [firstColumn  thirdRow  0.33*frameWidth controlElementHeight],'Baseline');
63
+    lFrameShift = createLabel(pPSTH, [firstColumn  fourthRow 0.33*frameWidth controlElementHeight],'SVM Frame Shift');
64
+    lFramsSize  = createLabel(pPSTH, [firstColumn  fifthRow  0.33*frameWidth controlElementHeight],'SVM Frame Size');
65
+    
66
+    
67
+    model.txtPSTHStart       = createTextField(pPSTH,[secondColumn secondRow 0.25*frameWidth controlElementHeight],'-10.0');
68
+    model.txtPSTHEnd         = createTextField(pPSTH,[thirdColumn  secondRow 0.25*frameWidth controlElementHeight],' 40.0');
69
+    model.txtBaselineStart   = createTextField(pPSTH,[secondColumn thirdRow  0.25*frameWidth controlElementHeight],'-3.0');
70
+    model.txtBaselineEnd     = createTextField(pPSTH,[thirdColumn  thirdRow  0.25*frameWidth controlElementHeight],'-1.0');
71
+    model.txtFrameShiftStart = createTextField(pPSTH,[secondColumn fourthRow 0.25*frameWidth controlElementHeight],'-5.0');
72
+    model.txtFrameShiftEnd   = createTextField(pPSTH,[thirdColumn  fourthRow 0.25*frameWidth controlElementHeight],' 35.0');
73
+    model.txtFrameShiftDur   = createTextField(pPSTH,[secondColumn fifthRow  0.25*frameWidth controlElementHeight],' 0');
74
+
75
+                
76
+    %Classes
77
+    nClassRows = 6;
78
+    firstColumn  = 5.00;
79
+    
80
+    firstRow    = (nClassRows-0.5)*controlElementHeight;
81
+    secondRow   = (nClassRows-4.5)*controlElementHeight;
82
+
83
+    lClassDef = createLabel(pCLASS, [firstColumn firstRow  0.66*frameWidth controlElementHeight],'<Label>,<[Event,Event,..]>,<SVM-Value>;');
84
+    model.txtClassDef = createTextField(pCLASS,[firstColumn secondRow 0.98*frameWidth 4*controlElementHeight],sprintf('DRT,\t[9,10],\t-2 ;\nM2ST,\t[11,12],\t-1;'));
85
+    set(model.txtClassDef,'HorizontalAlignment','left');
86
+    set(model.txtClassDef,'Max',20);
87
+    set(model.txtClassDef,'Min',0);
88
+    set(model.txtClassDef, 'FontName', 'FixedWidth')
89
+    
90
+    %Voxel
91
+    nVoxelRows = 8;
92
+    firstColumn  = 5.00;
93
+    
94
+    firstRow    = (nVoxelRows-0.5)*controlElementHeight;
95
+    secondRow   = (nVoxelRows-7.5)*controlElementHeight;
96
+
97
+    lVoxelDef = createLabel(pVOXEL, [firstColumn firstRow  0.66*frameWidth controlElementHeight],'<ROI Name>,<ROI Modifier>;');
98
+    model.txtVoxelDef = createTextField(pVOXEL,[firstColumn secondRow 0.98*frameWidth 6*controlElementHeight],...
99
+        sprintf('SPL l,\t[ 0, 0, 0];\nSPL r,\t[ 0, 0, 0];\n'));
100
+    set(model.txtVoxelDef,'HorizontalAlignment','left');
101
+    set(model.txtVoxelDef,'Max',20);
102
+    set(model.txtVoxelDef,'Min',0);
103
+    set(model.txtVoxelDef, 'FontName', 'FixedWidth')
104
+                
105
+    % SVM
106
+    firstColumn  =  5.00;
107
+    firstRow     =  1.00 * controlElementHeight;
108
+
109
+    model.txtSVMopts = createTextField(pSVM,[firstColumn firstRow  0.66*frameWidth controlElementHeight],'-s 0 -t 0 -v 6 -c 1');
110
+    %model.txtSVMopts = createTextField(pSVM,[firstColumn firstRow  0.66*frameWidth controlElementHeight],'-s 0 -t 2 -v 6 -c 10 -g .1');
111
+    set(model.txtSVMopts,'Enable','on'); %inactive
112
+    set(model.txtSVMopts,'HorizontalAlignment','left');
113
+
114
+    set(btnRunButton,'Callback',{@cbRunSVM,model}); % set here, because of model.    
115
+    uimenu(savemenu,'Label','Save','Callback',{@mcb_save,model});
116
+    uimenu(savemenu,'Label','Load','Callback',{@mcb_load,model});
117
+
118
+    set(frame,'Visible','on');
119
+end
120
+
121
+function mcb_save(src,event,model)
122
+display('SAVE');
123
+
124
+end
125
+
126
+function mcb_load(src,event,model)
127
+display('LOAD');
128
+end
129
+
130
+function sane = isSane(model)
131
+% TODO
132
+sane = 1;
133
+end
134
+
135
+function cbRunSVM(src,evnt,model)
136
+    display('RUN');
137
+    if isSane(model)
138
+        classify(model)
139
+    else
140
+        error('spmtoolbox:SVMCrossVal:paramcheck','please verify all parameters');
141
+    end
142
+end
143
+
144
+    
145
+function label = createLabel(parent,  pos, labelText)
146
+    label = uicontrol(parent,'Style','text','String',labelText,'Position',pos);
147
+    set(label,'HorizontalAlignment','left');
148
+    set(label,'Units','characters');
149
+%     set(label,'BackgroundColor','r');
150
+end
151
+
152
+function btn = createButton(parent,pos,tag,labelText,cbArgs)
153
+    btn = uicontrol(parent,'Position',pos,'String',labelText,'tag',tag);
154
+     set(btn,'Callback',{@cbParseVariable,cbArgs});
155
+%     set(btn,'BackgroundColor','b');
156
+end
157
+
158
+function txt = createTextField(parent,pos,model)
159
+    txt = uicontrol(parent,'Style','edit','String',model,'Position',pos);
160
+    set(txt,'BackgroundColor','w');
161
+end
162
+
163
+function drpField = createDropDown(parent,pos,selectionModel)
164
+ drpField = uicontrol(parent,'Style','popupmenu','Position',pos);
165
+  set(drpField,'String',selectionModel.Strings);
166
+  set(drpField,'BackgroundColor','w');
167
+end
... ...
@@ -0,0 +1,43 @@
1
+function project_UI(args)
2
+    PROJECTPATH = 'projects';
3
+    
4
+    frameWidth=450;
5
+    frameHeight=50;
6
+    model.frame = figure('Visible','off','Position',[0,0,frameWidth,frameHeight]);
7
+    movegui(model.frame,'west'); % get this thing visible on smaller displays.
8
+
9
+    set(model.frame,'Name','SVM CrossVal Decode Performance 4 SPM, Projectchooser');
10
+    set(model.frame,'NumberTitle','off');
11
+    set(model.frame,'MenuBar','none');
12
+    set(model.frame,'Color',get(0,'defaultUicontrolBackgroundColor'));
13
+    set(model.frame,'Resize','off');
14
+    set(model.frame,'Units','normalize');
15
+
16
+    newProjectMenu = uimenu(model.frame,'Label','Define New Project');
17
+    set(newProjectMenu,'Enable','off');
18
+
19
+    d = dir(fullfile(PROJECTPATH,'*.m'));
20
+    
21
+    model.projectSelection = uicontrol(model.frame,'Style','popupmenu',...
22
+                    'String',{d.name},...
23
+                    'Value',1,...  % default selected item
24
+                    'Position',[0.33*frameWidth 40 0.66*frameWidth 20]);
25
+    set(model.projectSelection,'BackgroundColor','w');
26
+    
27
+    
28
+    btnSelectButton = uicontrol(model.frame,'Tag','select','String','continue','Position',[2 0  frameWidth 20]);
29
+    
30
+%    model.projectSelector = 
31
+
32
+	model.val = 1;
33
+
34
+    set(btnSelectButton,'Callback',{@cbChooseProject,model}); % set here, because of model.    
35
+    set(model.frame,'Visible','on');
36
+end
37
+
38
+function cbChooseProject(src,evnts,args)
39
+
40
+	spm_SVMCrossVal(args);
41
+	display(args);
42
+	close(args.frame)
43
+end
... ...
@@ -0,0 +1,145 @@
1
+this = struct;
2
+
3
+this.ID                      = 'Choice24';
4
+this.base_path               = fullfile('D:','Analyze','Choice','24pilot');
5
+
6
+this.default.selectedSubject = 1;
7
+this.default.smoothed        = 1;
8
+this.default.multisubject    = 'single';
9
+this.default.pststart        = -15;
10
+this.default.pstend          = 40;
11
+this.default.baselinestart   = -3;
12
+this.default.baselineend     = -1;
13
+this.default.frameshiftstart = -1;
14
+this.default.frameshiftend   = 35;
15
+this.default.frameshiftdur   = 1;
16
+
17
+% strings are parsed by sprintf!
18
+this.default.classdefstring  = 'left,\t[9,11,13],\t-2 ;\nright,\t[10,12,14],\t-1;';
19
+this.default.voxelstring     = 'SPL l,\t[ 0, 0, 0];\nSPL r,\t[ 0, 0, 0];\n';
20
+
21
+% this string is used directly.
22
+this.default.svmoptstring    = '-s 0 -t 0 -v 6 -c 1';
23
+
24
+
25
+% SUBJECT DEFINITIONS
26
+this.subject{1} ='AI020';
27
+this.subject{2} ='BD001';
28
+this.subject{3} ='HG027';
29
+this.subject{4} ='IK011';
30
+this.subject{5} ='JZ006'; % Guter Proband
31
+this.subject{6} ='LB001';
32
+this.subject{7} ='SW007';
33
+this.subject{8} ='VW005';
34
+
35
+this.roi_name{1}  ='SPL l'; % <-Parietalkortex links
36
+this.roi_name{2}  ='SPL r'; % <-Parietalkortex rechts
37
+this.roi_name{3}  ='PMd l';
38
+this.roi_name{4}  ='PMd r';
39
+this.roi_name{5}  ='IPSa l';
40
+this.roi_name{6}  ='IPSa r';
41
+this.roi_name{7}  ='SMA';
42
+this.roi_name{8}  ='DLPFC';
43
+this.roi_name{9}  ='V1 l';
44
+this.roi_name{10} ='V1 r';
45
+this.roi_name{11} ='M1 l'; % <-Motorischer Cortex l
46
+this.roi_name{12} ='M1 r'; % <-Motorischer Cortex r
47
+
48
+
49
+% Koordinaten aller Probanden A von den ROIS B: rois{A}(B,[x y z in mm])
50
+this.coordinate{1}(1,:)  = [-18, -78, 53];
51
+this.coordinate{1}(2,:)  = [12, -69, 46];
52
+this.coordinate{1}(3,:)  = [-21, -12, 49];
53
+this.coordinate{1}(4,:)  = [30, -12, 53];
54
+this.coordinate{1}(5,:)  = [-30, -51, 39];
55
+this.coordinate{1}(6,:)  = [ 33, -60, 49];
56
+this.coordinate{1}(7,:)  = [ -9, 6, 46];
57
+this.coordinate{1}(8,:)  = [-27 27 48];
58
+this.coordinate{1}(9,:)  = [-6, -90, -7];
59
+this.coordinate{1}(10,:) = [12, -90, -4];
60
+this.coordinate{1}(11,:) = [-57, -24, 49];
61
+this.coordinate{1}(12,:) = [42, -24, 60];
62
+this.coordinate{2}(1,:)  = [-9, -72, 56];
63
+this.coordinate{2}(2,:)  = [15, -72, 60];
64
+this.coordinate{2}(3,:)  = [-30, -9, 53];
65
+this.coordinate{2}(4,:)  = [ 30, -9, 49];
66
+this.coordinate{2}(5,:)  = [-42 -36 39];
67
+this.coordinate{2}(6,:)  = [30 -36 42];
68
+this.coordinate{2}(7,:)  = [ -3, 6, 53];
69
+this.coordinate{2}(8,:)  = [-27 30 28];
70
+this.coordinate{2}(9,:)  = [-6, -81, -7];
71
+this.coordinate{2}(10,:) = [9, -78, -7];
72
+this.coordinate{2}(11,:) = [-51, -24, 60];
73
+this.coordinate{2}(12,:) = [48, -21, 63];
74
+this.coordinate{3}(1,:)  = [-15, -72, 60];
75
+this.coordinate{3}(2,:)  = [15, -66, 63];
76
+this.coordinate{3}(3,:)  = [-27, -12, 56];
77
+this.coordinate{3}(4,:)  = [24 -15 53];
78
+this.coordinate{3}(5,:)  = [-36 -36 42];
79
+this.coordinate{3}(6,:)  = [30 -39 35];
80
+this.coordinate{3}(7,:)  = [-9, 3, 53];
81
+this.coordinate{3}(8,:)  = [-30 30 28];
82
+this.coordinate{3}(9,:)  = [-3, -90, 4];
83
+this.coordinate{3}(10,:) = [15, -99, 14];
84
+this.coordinate{3}(11,:) = [-27, -27, 74];
85
+this.coordinate{3}(12,:) = [36, -27, 70];
86
+this.coordinate{4}(1,:)  = [-21, -69, 63];
87
+this.coordinate{4}(2,:)  = [21, -69, 63];
88
+this.coordinate{4}(3,:)  = [-33 -12 53];
89
+this.coordinate{4}(4,:)  = [12 -9 60];
90
+this.coordinate{4}(5,:)  = [-33 -35 46];
91
+this.coordinate{4}(6,:)  = [42 -36 39];
92
+this.coordinate{4}(7,:)  = [-3 0 49];
93
+this.coordinate{4}(8,:)  = [-33 33 28];
94
+this.coordinate{4}(9,:)  = [-3, -90, -7];
95
+this.coordinate{4}(10,:) = [9, -81, -7];
96
+this.coordinate{4}(11,:) = [-39, -27, 53];
97
+this.coordinate{4}(12,:) = [51, -24, 60];
98
+this.coordinate{5}(1,:)  = [-12 -66 63];
99
+this.coordinate{5}(2,:)  = [12, -75, 60];
100
+this.coordinate{5}(3,:)  = [-24, -12, 53];
101
+this.coordinate{5}(4,:)  = [27, -9, 60];
102
+this.coordinate{5}(5,:)  = [-42 -42 35];
103
+this.coordinate{5}(6,:)  = [33 -48 35];
104
+this.coordinate{5}(7,:)  = [ -3, 0, 49];
105
+this.coordinate{5}(8,:)  = [-36 33 28];
106
+this.coordinate{5}(9,:)  = [-15, -93, -4];
107
+this.coordinate{5}(10,:) = [15, -90, 4];
108
+this.coordinate{5}(11,:) = [-39, -33, 67];
109
+this.coordinate{5}(12,:) = [27, -18, 74];
110
+this.coordinate{6}(1,:)  = [-21, -69, 60];
111
+this.coordinate{6}(2,:)  = [9, -72, 63];
112
+this.coordinate{6}(3,:)  = [-24 -12 53];
113
+this.coordinate{6}(4,:)  = [32 -12 56];
114
+this.coordinate{6}(5,:)  = [-36 -39 35];
115
+this.coordinate{6}(6,:)  = [42 -33 46];
116
+this.coordinate{6}(7,:)  = [-6 3 49];
117
+this.coordinate{6}(8,:)  = [-36 33 28];
118
+this.coordinate{6}(9,:)  = [-12, -99, 0];
119
+this.coordinate{6}(10,:) = [9, -96, -7];
120
+this.coordinate{6}(11,:) = [-48, -27, 60];
121
+this.coordinate{6}(12,:) = [33, -33, 60];
122
+this.coordinate{7}(1,:)  = [-21, -60, 56];
123
+this.coordinate{7}(2,:)  = [12, -69, 60];
124
+this.coordinate{7}(3,:)  = [-24, -12, 49];
125
+this.coordinate{7}(4,:)  = [24, -6, 49];
126
+this.coordinate{7}(5,:)  = [-33 -45 46];
127
+this.coordinate{7}(6,:)  = [30, -51, 49];
128
+this.coordinate{7}(7,:)  = [0, 9, 42];
129
+this.coordinate{7}(8,:)  = [-30 36 35];
130
+this.coordinate{7}(9,:)  = [-3, -84, -4];
131
+this.coordinate{7}(10,:) = [18, -87, -7];
132
+this.coordinate{7}(11,:) = [-36, -30, 63];
133
+this.coordinate{7}(12,:) = [42, -27, 60];
134
+this.coordinate{8}(1,:)  = [-27, -63, 53];
135
+this.coordinate{8}(2,:)  = [18, -66, 56];
136
+this.coordinate{8}(3,:)  = [-21, -6, 56];
137
+this.coordinate{8}(4,:)  = [27 -6 53];
138
+this.coordinate{8}(5,:)  = [-36, -51, 49];
139
+this.coordinate{8}(6,:)  = [45, -39, 53];
140
+this.coordinate{8}(7,:)  = [-9, 9, 53];
141
+this.coordinate{8}(8,:)  = [-36 24 25];
142
+this.coordinate{8}(9,:)  = [0, -90, 4];
143
+this.coordinate{8}(10,:) = [0, -90, 4];
144
+this.coordinate{8}(11,:) = [-42, -27, 67];
145
+    this.coordinate{8}(12,:) = [51, -27, 63]; 
... ...
@@ -1,8 +1,7 @@
1 1
 function spm_SVMCrossVal(varargin)
2
-
3 2
 switch nargin
4 3
 case 0
5
-	project_UI();
4
+	project_UI;
6 5
 case 1
7 6
 	main_UI(varargin);
8 7
 otherwise
... ...
@@ -11,207 +9,7 @@ error('spm_SVMCrossVal:main','wrong nargin');
11 9
 end
12 10
 end
13 11
 
14
-function project_UI(args)
15
-    frameWidth=450;
16
-    frameHeight=200;
17
-    model.frame = figure('Visible','off','Position',[0,0,frameWidth,frameHeight]);
18
-    movegui(model.frame,'west'); % get this thing visible on smaller displays.
19
-
20
-    set(model.frame,'Name','SVM CrossVal Decode Performance 4 SPM, Projectchooser');
21
-    set(model.frame,'NumberTitle','off');
22
-    set(model.frame,'MenuBar','none');
23
-    set(model.frame,'Color',get(0,'defaultUicontrolBackgroundColor'));
24
-    set(model.frame,'Resize','off');
25
-    set(model.frame,'Units','normalize');
26
-
27
-    newProjectMenu = uimenu(model.frame,'Label','Define New Project');
28
-    set(newProjectMenu,'Enable','off');
29
-
30
-
31
-    btnSelectButton = uicontrol(model.frame,'Tag','select','String','continue','Position',[2 0  frameWidth 40]);
32
-    
33
-%    model.projectSelector = 
34
-
35
-	model.val = 1;
36
-
37
-    set(btnSelectButton,'Callback',{@cbChooseProject,model}); % set here, because of model.    
38
-    set(model.frame,'Visible','on');
39
-end
40
-
41
-function cbChooseProject(src,evnts,args)
42
-
43
-	spm_SVMCrossVal(args);
44
-	display(args);
45
-	close(args.frame)
46
-end
47
-
48
-function main_UI(args)
49
-
50
-
51
-%  Initialize and hide the GUI as it is being constructed.
52
-    frameWidth=450;
53
-    frameHeight=600;
54
-    frame = figure('Visible','off','Position',[0,0,frameWidth,frameHeight]);
55
-    movegui(frame,'west'); % get this thing visible on smaller displays.
56
-    
57
-    set(frame,'Name','SVMCrossVal Decode Performance 4 SPM');
58
-    set(frame,'NumberTitle','off');
59
-    set(frame,'MenuBar','none');
60
-    set(frame,'Color',get(0,'defaultUicontrolBackgroundColor'));
61
-    set(frame,'Resize','off');
62
-    set(frame,'Units','normalize');
63
-    
64
-    
65
-    savemenu = uimenu(frame,'Label','Save/Load');
66
-    
67
-    model.subjectMap = SubjectRoiMapping;
68
-    nElementRows = 24;
69
-    optionLineHeight = 1.0/nElementRows;
70
-    controlElementHeight=optionLineHeight*(1.0/1.5)*frameHeight;
71
-    pSubject     = uipanel(frame,'Title','Subject',          'Position',[0 optionLineHeight*19 frameWidth optionLineHeight*5]);
72
-    pPSTH        = uipanel(frame,'Title','PSTH Options',     'Position',[0 optionLineHeight*14 frameWidth optionLineHeight*5]); 
73
-    pCLASS       = uipanel(frame,'Title','Class Definitions','Position',[0 optionLineHeight*9  frameWidth optionLineHeight*5]); 
74
-    pVOXEL       = uipanel(frame,'Title','Voxel Selector',   'Position',[0 optionLineHeight*3  frameWidth optionLineHeight*6]); 
75
-    pSVM         = uipanel(frame,'Title','SVM Options',      'Position',[0 optionLineHeight*1  frameWidth optionLineHeight*2]); 
76
-    btnRunButton = uicontrol(frame,'Tag','run','String','run decode-performance visualiser','Position',[2 optionLineHeight*0  frameWidth controlElementHeight*1.6]);
77
-
78
-
79
-    % Subject
80
-    firstColumn  =  5.00;
81
-    firstRow     =  1.00 * controlElementHeight;
82
-    
83
-    model.subjectSelector = uicontrol(pSubject,'Style','listbox',...
84
-                    'Min',1, 'Max',3,...
85
-                    'String',getSubjectCellList(model.subjectMap),...
86
-                    'Value',5,...  % default selected item
87
-                    'Position',[firstColumn firstRow 0.66*frameWidth controlElementHeight*6]);
88
-    set(model.subjectSelector,'BackgroundColor','w');
89
-    
90
-    model.txtSmoothed     = createTextField(pSubject,[0.68*frameWidth firstRow  0.25*frameWidth controlElementHeight],'1');
91
-    model.txtMultisubject = createTextField(pSubject,[0.68*frameWidth firstRow*2  0.25*frameWidth controlElementHeight],'single');
92
-    set(model.txtMultisubject,'enable','off');
93
-
94
-    % PSTH
95
-    firstColumn  = 5.00;
96
-    secondColumn = 0.33*frameWidth;
97
-    thirdColumn  = 0.66*frameWidth;
98
-%     fourthColumn = 0.84*frameWidth;
99
-    
100
-    firstRow    = 5.5*controlElementHeight;
101
-    secondRow   = 4.5*controlElementHeight;
102
-    thirdRow    = 3.5*controlElementHeight;
103
-    fourthRow   = 2.5*controlElementHeight;
104
-    fifthRow    = 1.0*controlElementHeight;
105
-    
106
-    lStart      = createLabel(pPSTH, [secondColumn firstRow  0.33*frameWidth controlElementHeight],'Start [sec]');
107
-    lEnd        = createLabel(pPSTH, [thirdColumn  firstRow  0.33*frameWidth controlElementHeight],'End [sec]');
108
-    lPSTH       = createLabel(pPSTH, [firstColumn  secondRow 0.33*frameWidth controlElementHeight],'PSTH Range');
109
-    lBaseline   = createLabel(pPSTH, [firstColumn  thirdRow  0.33*frameWidth controlElementHeight],'Baseline');
110
-    lFrameShift = createLabel(pPSTH, [firstColumn  fourthRow 0.33*frameWidth controlElementHeight],'SVM Frame Shift');
111
-    lFramsSize  = createLabel(pPSTH, [firstColumn  fifthRow  0.33*frameWidth controlElementHeight],'SVM Frame Size');
112
-    
113
-    
114
-    model.txtPSTHStart       = createTextField(pPSTH,[secondColumn secondRow 0.25*frameWidth controlElementHeight],'-10.0');
115
-    model.txtPSTHEnd         = createTextField(pPSTH,[thirdColumn  secondRow 0.25*frameWidth controlElementHeight],' 40.0');
116
-    model.txtBaselineStart   = createTextField(pPSTH,[secondColumn thirdRow  0.25*frameWidth controlElementHeight],'-3.0');
117
-    model.txtBaselineEnd     = createTextField(pPSTH,[thirdColumn  thirdRow  0.25*frameWidth controlElementHeight],'-1.0');
118
-    model.txtFrameShiftStart = createTextField(pPSTH,[secondColumn fourthRow 0.25*frameWidth controlElementHeight],'-5.0');
119
-    model.txtFrameShiftEnd   = createTextField(pPSTH,[thirdColumn  fourthRow 0.25*frameWidth controlElementHeight],' 35.0');
120
-    model.txtFrameShiftDur   = createTextField(pPSTH,[secondColumn fifthRow  0.25*frameWidth controlElementHeight],' 0');
121
-
122 12
 
123
-    %Classes
124
-    nClassRows = 6;
125
-    firstColumn  = 5.00;
126
-    
127
-    firstRow    = (nClassRows-0.5)*controlElementHeight;
128
-    secondRow   = (nClassRows-4.5)*controlElementHeight;
129
-
130
-    lClassDef = createLabel(pCLASS, [firstColumn firstRow  0.66*frameWidth controlElementHeight],'<Label>,<[Event,Event,..]>,<SVM-Value>;');
131
-    model.txtClassDef = createTextField(pCLASS,[firstColumn secondRow 0.98*frameWidth 4*controlElementHeight],sprintf('DRT,\t[9,10],\t-2 ;\nM2ST,\t[11,12],\t-1;'));
132
-    set(model.txtClassDef,'HorizontalAlignment','left');
133
-    set(model.txtClassDef,'Max',20);
134
-    set(model.txtClassDef,'Min',0);
135
-    set(model.txtClassDef, 'FontName', 'FixedWidth')
136
-    
137
-    %Voxel
138
-    nVoxelRows = 8;
139
-    firstColumn  = 5.00;
140
-    
141
-    firstRow    = (nVoxelRows-0.5)*controlElementHeight;
142
-    secondRow   = (nVoxelRows-7.5)*controlElementHeight;
143
-
144
-    lVoxelDef = createLabel(pVOXEL, [firstColumn firstRow  0.66*frameWidth controlElementHeight],'<ROI Name>,<ROI Modifier>;');
145
-    model.txtVoxelDef = createTextField(pVOXEL,[firstColumn secondRow 0.98*frameWidth 6*controlElementHeight],...
146
-        sprintf('SPL l,\t[ 0, 0, 0];\nSPL r,\t[ 0, 0, 0];\n'));
147
-    set(model.txtVoxelDef,'HorizontalAlignment','left');
148
-    set(model.txtVoxelDef,'Max',20);
149
-    set(model.txtVoxelDef,'Min',0);
150
-    set(model.txtVoxelDef, 'FontName', 'FixedWidth')
151
-                
152
-    % SVM
153
-    firstColumn  =  5.00;
154
-    firstRow     =  1.00 * controlElementHeight;
155
-
156
-    model.txtSVMopts = createTextField(pSVM,[firstColumn firstRow  0.66*frameWidth controlElementHeight],'-s 0 -t 0 -v 6 -c 1');
157
-    %model.txtSVMopts = createTextField(pSVM,[firstColumn firstRow  0.66*frameWidth controlElementHeight],'-s 0 -t 2 -v 6 -c 10 -g .1');
158
-    set(model.txtSVMopts,'Enable','on'); %inactive
159
-    set(model.txtSVMopts,'HorizontalAlignment','left');
160
-
161
-    set(btnRunButton,'Callback',{@cbRunSVM,model}); % set here, because of model.    
162
-    uimenu(savemenu,'Label','Save','Callback',{@mcb_save,model});
163
-    uimenu(savemenu,'Label','Load','Callback',{@mcb_load,model});
164
-
165
-    set(frame,'Visible','on');
166
-end
167
-
168
-function mcb_save(src,event,model)
169
-display('SAVE');
170
-
171
-end
172
-
173
-function mcb_load(src,event,model)
174
-display('LOAD');
175
-end
176
-
177
-function sane = isSane(model)
178
-% TODO
179
-sane = 1;
180
-end
181
-
182
-function cbRunSVM(src,evnt,model)
183
-    display('RUN');
184
-    if isSane(model)
185
-        classify(model)
186
-    else
187
-        error('spmtoolbox:SVMCrossVal:paramcheck','please verify all parameters');
188
-    end
189
-end
190
-
191
-    
192
-function label = createLabel(parent,  pos, labelText)
193
-    label = uicontrol(parent,'Style','text','String',labelText,'Position',pos);
194
-    set(label,'HorizontalAlignment','left');
195
-    set(label,'Units','characters');
196
-%     set(label,'BackgroundColor','r');
197
-end
198
-
199
-function btn = createButton(parent,pos,tag,labelText,cbArgs)
200
-    btn = uicontrol(parent,'Position',pos,'String',labelText,'tag',tag);
201
-     set(btn,'Callback',{@cbParseVariable,cbArgs});
202
-%     set(btn,'BackgroundColor','b');
203
-end
204
-
205
-function txt = createTextField(parent,pos,model)
206
-    txt = uicontrol(parent,'Style','edit','String',model,'Position',pos);
207
-    set(txt,'BackgroundColor','w');
208
-end
209
-
210
-function drpField = createDropDown(parent,pos,selectionModel)
211
- drpField = uicontrol(parent,'Style','popupmenu','Position',pos);
212
-  set(drpField,'String',selectionModel.Strings);
213
-  set(drpField,'BackgroundColor','w');
214
-end
215 13
 
216 14
 
217 15
 
218 16