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 |