From 0433e5894ddd39bba0bb54c57c17bf21f6d29e59 Mon Sep 17 00:00:00 2001 From: Bernhard <90285552+4gwe@users.noreply.github.com> Date: Sun, 24 Nov 2024 19:21:47 +0100 Subject: [PATCH 1/5] Show extracted responses in first level review (DCM) #589 --- src/pspm_review.m | 57 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/src/pspm_review.m b/src/pspm_review.m index a133eb43..7df3a508 100644 --- a/src/pspm_review.m +++ b/src/pspm_review.m @@ -294,12 +294,49 @@ function buttonPlot5_Callback(hObject, ~, handles) tmpStatusString = get(handles.textStatus,'String'); set(handles.textStatus,'String','Plotting is in progress. Please wait...'); switch handles.modelData{handles.currentModel}.modeltype + case 'glm' [~, handles.modelData{handles.currentModel}.fig] = ... pspm_rev_glm(handles.modelData{handles.currentModel}.modelfile, 5); + case 'dcm' - [~, handles.modelData{handles.currentModel}.fig] = ... - pspm_rev_con(handles.modelData{handles.currentModel}.model); + modelfile = handles.modelData{handles.currentModel}.modelfile; + options = struct(); + [ssts, segments] = pspm_extract_segments('model', modelfile, options); + + if ssts == -1 + uiwait(msgbox('Error extracting segments from the model.', 'Error')) + else + + glm = handles.modelData{handles.currentModel}.model; + sr = glm.input.sr; + cmap = lines(numel(segments.segments)); + f.h = figure; + f.a.h = axes(f.h); + hold on; + + legendNames = cell(1, numel(segments.segments)); + + for x = 1:numel(segments.segments) + + plotdata = segments.segments{x}.mean; + t = (1:length(plotdata)) / sr; + f.a.p = plot(f.a.h, t, plotdata, 'Color', cmap(x, :), 'LineWidth', 1); + legendNames{x} = segments.segments{x}.name; + + end + + f.a.l = legend(legendNames, 'Interpreter', 'none', 'Location', 'best'); + legend boxoff + + set(get(f.a.h, 'xlabel'), 'String', 'Time (seconds)'); + set(get(f.a.h, 'ylabel'), 'String', 'Mean Response (data units)'); + set(get(f.a.h, 'title'), 'String', 'Mean Responses for All Segments'); + + hold off; + end + + end set(handles.textStatus,'String',tmpStatusString); @@ -351,8 +388,10 @@ function buttonPlot6_Callback(hObject, ~, handles) hold off; end - - + % contrast in comand window + case 'dcm' + [~, handles.modelData{handles.currentModel}.fig] = ... + pspm_rev_con(handles.modelData{handles.currentModel}.model); end @@ -543,15 +582,17 @@ function showModel(handles) buttonPlotString = {'Display', ... 'Display', ... 'Display', ... - 'Show'}; + 'Show', ... + 'Plot'}; textPlotString = {'All trials for one session', ... 'Diagnostics for trial nr.', ... 'Skin conductance response function (SCR)', ... - 'Trial and condition names in command window'}; + 'Trial and condition names in command window', ... + 'Plot data per condition'}; % detect contrasts if isfield(handles.modelData{handles.currentModel}.model, 'con') - buttonPlotString{5} = 'Show'; - textPlotString{5} = 'Contrast names in command window'; + buttonPlotString{6} = 'Show'; + textPlotString{6} = 'Contrast names in command window'; end setInvisble(handles); setButtonPlotString(handles, buttonPlotString); From cd5141597699050aad184740964d5b044f04adbf Mon Sep 17 00:00:00 2001 From: Bernhard <90285552+4gwe@users.noreply.github.com> Date: Sun, 1 Dec 2024 18:20:25 +0100 Subject: [PATCH 2/5] disable buttonRemoveModel by start --- src/pspm_review.fig | Bin 28393 -> 28455 bytes src/pspm_review.m | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pspm_review.fig b/src/pspm_review.fig index 28b0ec6051a0bc0c6ce81e61ef23b907c2c2e6ca..c5e4507173ed2b543c1198c97d3679c42dedb56a 100644 GIT binary patch delta 26322 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 delta 26221 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 diff --git a/src/pspm_review.m b/src/pspm_review.m index 7df3a508..d2caa207 100644 --- a/src/pspm_review.m +++ b/src/pspm_review.m @@ -137,14 +137,14 @@ function buttonAddModel_Callback(hObject, ~, handles) end setButtonEnable(handles) -if handles.modelCnt > 1 - set(handles.buttonRemoveModel2, 'Enable', 'on'); +if handles.modelCnt > 1 + set(handles.buttonRemoveModel, 'Enable', 'on'); end guidata(hObject, handles); -% --- Executes on button press in buttonRemoveModel2. +% --- Executes on button press in buttonRemoveModel. function buttonRemoveModel_Callback(hObject, ~, handles) -% hObject handle to buttonRemoveModel2 (see GCBO) +% hObject handle to buttonRemoveModel (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) handles.modelData{handles.currentModel} = []; @@ -157,8 +157,8 @@ function buttonRemoveModel_Callback(hObject, ~, handles) handles.currentModel = handles.modelCnt; end set(handles.listModel, 'Value', handles.currentModel); -if handles.modelCnt < 2 - set(handles.buttonRemoveModel2, 'Enable', 'off'); +if handles.modelCnt < 2 + set(handles.buttonRemoveModel, 'Enable', 'off'); end showModel(handles); From 2eee24644214ea06ed735260aed23fe230a1f981 Mon Sep 17 00:00:00 2001 From: Bernhard <90285552+4gwe@users.noreply.github.com> Date: Sun, 1 Dec 2024 22:41:34 +0100 Subject: [PATCH 3/5] moved plotting of segments to --- src/pspm_rev_dcm.m | 45 ++++++++++++++++++++++++++++ src/pspm_rev_glm.m | 37 +++++++++++++++++++++++ src/pspm_review.m | 75 +++------------------------------------------- 3 files changed, 86 insertions(+), 71 deletions(-) diff --git a/src/pspm_rev_dcm.m b/src/pspm_rev_dcm.m index 59cc19ec..376f18b3 100644 --- a/src/pspm_rev_dcm.m +++ b/src/pspm_rev_dcm.m @@ -19,12 +19,16 @@ % 'scrf' show peripheral skin conductance response function as used % for trial-by-trial estimation of sympathetic input % 'names' show trial and condition names in command window +% 'seg' show the mean responses of all segments identified in +% the DCM model. ('pspm_extract_segments') % * sn: session. % * trl: trial. % ● History % Introduced In PsPM 3.0 % Written in 2008-2015 by Dominik R Bach (Wellcome Trust Centre for Neuroimaging) % Maintained in 2022 by Teddy +% Maintained in 2024 by Bernhard Agoué von Raußendorf + %% Initialise global settings @@ -123,6 +127,47 @@ fprintf('Condition %d: %s\n',n,dcm.condnames{n}); end; fprintf('---------------------------------------\n'); + case 'seg' + + options = struct(); + [ssts, segments] = pspm_extract_segments('model', dcm, options); + + if ssts == -1 + uiwait(msgbox('Error extracting segments from the model.', 'Error')) + else + + + sr = dcm.input.sr; + cmap = lines(numel(segments.segments)); + f.h = figure; + f.a.h = axes(f.h); + hold on; + + legendNames = cell(1, numel(segments.segments)); + + for x = 1:numel(segments.segments) + + plotdata = segments.segments{x}.mean; + t = (1:length(plotdata)) / sr; + f.a.p = plot(f.a.h, t, plotdata, 'Color', cmap(x, :), 'LineWidth', 1); + legendNames{x} = segments.segments{x}.name; + + end + + f.a.l = legend(legendNames, 'Interpreter', 'none', 'Location', 'best'); + legend boxoff + + set(get(f.a.h, 'xlabel'), 'String', 'Time (seconds)'); + set(get(f.a.h, 'ylabel'), 'String', 'Mean Response (data units)'); + set(get(f.a.h, 'title'), 'String', 'Mean Responses for All Segments'); + + hold off; + end + + + + + end; sts = 1; diff --git a/src/pspm_rev_glm.m b/src/pspm_rev_glm.m index 73f508a0..36b8e1f2 100644 --- a/src/pspm_rev_glm.m +++ b/src/pspm_rev_glm.m @@ -13,6 +13,7 @@ % 3 - predicted & observed % 4 - print regressor names % 5 - reconstructed responses +% 6 - plot mean responses of all segments % ● Outputs % * sts : status variable indicating whether the function run successfully % * fig : returns the figure handles @@ -20,6 +21,7 @@ % Introduced In PsPM 3.0 % Written in 2008-2015 by Dominik R Bach (Wellcome Trust Centre for Neuroimaging) % Maintained in 2022 by Teddy +% Maintained in 2024 by Bernhard Agoué von Raußendorf % initialise global settings @@ -226,6 +228,41 @@ XLim = cellfun(@(x){num2str(x)}, XLim); set(fig(5).ax(1).h, 'XTickLabel',XLim); set(fig(5).title, 'String', sprintf('Estimated responses per condition: %s', filename), 'FontWeight', 'Bold', 'FontSize', 14, 'Interpreter', 'none'); + case 6 + + options = struct(); + [ssts, segments] = pspm_extract_segments('model', glm, options); + if ssts == -1 + uiwait(msgbox('Error extracting segments from the model.', 'Error')) + else + sr = glm.input.sr; + cmap = lines(numel(segments.segments)); + f.h = figure; + f.a.h = axes(f.h); + hold on; + + legendNames = cell(1, numel(segments.segments)); + + for x = 1:numel(segments.segments) + + plotdata = segments.segments{x}.mean; + t = (1:length(plotdata)) / sr; + f.a.p = plot(f.a.h, t, plotdata, 'Color', cmap(x, :), 'LineWidth', 1); + legendNames{x} = segments.segments{x}.name; + + end + + f.a.l = legend(legendNames, 'Interpreter', 'none', 'Location', 'best'); + legend boxoff + + set(get(f.a.h, 'xlabel'), 'String', 'Time (seconds)'); + set(get(f.a.h, 'ylabel'), 'String', 'Mean Response (data units)'); + set(get(f.a.h, 'title'), 'String', 'Mean Responses for All Segments'); + + hold off; + end + + end end diff --git a/src/pspm_review.m b/src/pspm_review.m index d2caa207..424b0887 100644 --- a/src/pspm_review.m +++ b/src/pspm_review.m @@ -300,43 +300,8 @@ function buttonPlot5_Callback(hObject, ~, handles) pspm_rev_glm(handles.modelData{handles.currentModel}.modelfile, 5); case 'dcm' - modelfile = handles.modelData{handles.currentModel}.modelfile; - options = struct(); - [ssts, segments] = pspm_extract_segments('model', modelfile, options); - - if ssts == -1 - uiwait(msgbox('Error extracting segments from the model.', 'Error')) - else - - glm = handles.modelData{handles.currentModel}.model; - sr = glm.input.sr; - cmap = lines(numel(segments.segments)); - f.h = figure; - f.a.h = axes(f.h); - hold on; - - legendNames = cell(1, numel(segments.segments)); - - for x = 1:numel(segments.segments) - - plotdata = segments.segments{x}.mean; - t = (1:length(plotdata)) / sr; - f.a.p = plot(f.a.h, t, plotdata, 'Color', cmap(x, :), 'LineWidth', 1); - legendNames{x} = segments.segments{x}.name; - - end - - f.a.l = legend(legendNames, 'Interpreter', 'none', 'Location', 'best'); - legend boxoff - - set(get(f.a.h, 'xlabel'), 'String', 'Time (seconds)'); - set(get(f.a.h, 'ylabel'), 'String', 'Mean Response (data units)'); - set(get(f.a.h, 'title'), 'String', 'Mean Responses for All Segments'); - - hold off; - end - - + [~, handles.modelData{handles.currentModel}.fig] = ... + pspm_rev_dcm(handles.modelData{handles.currentModel}.model, 'seg', [], []); end set(handles.textStatus,'String',tmpStatusString); @@ -352,42 +317,10 @@ function buttonPlot6_Callback(hObject, ~, handles) set(handles.textStatus,'String','Plotting is in progress. Please wait...'); switch handles.modelData{handles.currentModel}.modeltype case 'glm' + modelfile = handles.modelData{handles.currentModel}.modelfile; + [~, handles.modelData{handles.currentModel}.fig] = pspm_rev_glm(modelfile, 6); - modelfile = handles.modelData{handles.currentModel}.modelfile; - options = struct(); - [ssts, segments] = pspm_extract_segments('model', modelfile, options); - - if ssts == -1 - uiwait(msgbox('Error extracting segments from the model.', 'Error')) - else - - glm = handles.modelData{handles.currentModel}.model; - sr = glm.input.sr; - cmap = lines(numel(segments.segments)); - f.h = figure; - f.a.h = axes(f.h); - hold on; - - legendNames = cell(1, numel(segments.segments)); - - for x = 1:numel(segments.segments) - - plotdata = segments.segments{x}.mean; - t = (1:length(plotdata)) / sr; - f.a.p = plot(f.a.h, t, plotdata, 'Color', cmap(x, :), 'LineWidth', 1); - legendNames{x} = segments.segments{x}.name; - - end - - f.a.l = legend(legendNames, 'Interpreter', 'none', 'Location', 'best'); - legend boxoff - - set(get(f.a.h, 'xlabel'), 'String', 'Time (seconds)'); - set(get(f.a.h, 'ylabel'), 'String', 'Mean Response (data units)'); - set(get(f.a.h, 'title'), 'String', 'Mean Responses for All Segments'); - hold off; - end % contrast in comand window case 'dcm' [~, handles.modelData{handles.currentModel}.fig] = ... From 2dc1c1a3551bad63aed879424d5142be36d08102 Mon Sep 17 00:00:00 2001 From: Bernhard <90285552+4gwe@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:00:11 +0100 Subject: [PATCH 4/5] fixed call of pspm_rev_dcm --- src/pspm_review.m | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pspm_review.m b/src/pspm_review.m index 424b0887..9de02090 100644 --- a/src/pspm_review.m +++ b/src/pspm_review.m @@ -300,8 +300,7 @@ function buttonPlot5_Callback(hObject, ~, handles) pspm_rev_glm(handles.modelData{handles.currentModel}.modelfile, 5); case 'dcm' - [~, handles.modelData{handles.currentModel}.fig] = ... - pspm_rev_dcm(handles.modelData{handles.currentModel}.model, 'seg', [], []); + pspm_rev_dcm(handles.modelData{handles.currentModel}.modelfile, 'seg', [], []); end set(handles.textStatus,'String',tmpStatusString); From 941c0098eb1b8730dfc04d1bcef3bdfd3819fdb8 Mon Sep 17 00:00:00 2001 From: Dominik Bach Date: Mon, 2 Dec 2024 17:00:40 +0100 Subject: [PATCH 5/5] add missing semicolon --- src/pspm_review.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pspm_review.m b/src/pspm_review.m index 9de02090..53b71562 100644 --- a/src/pspm_review.m +++ b/src/pspm_review.m @@ -201,7 +201,7 @@ function buttonPlot1_Callback(hObject, ~, handles) case 'dcm' sessionNr = checkSessionNr(handles); if sessionNr - pspm_rev_dcm(handles.modelData{handles.currentModel}.model, 'sum', sessionNr, []) + pspm_rev_dcm(handles.modelData{handles.currentModel}.model, 'sum', sessionNr, []); end case 'sf'