Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release v.2.5.0 #610

Merged
merged 162 commits into from
Apr 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
162 commits
Select commit Hold shift + click to select a range
7399479
Fixes #498
CWDAVIESJENKINS Aug 9, 2022
0b74075
Merge pull request #499 from CWDAVIESJENKINS/develop
CWDAVIESJENKINS Aug 9, 2022
21d3cbd
[FEATURE REQUEST] -Manually overwrite subspectra order - OspreyProces…
HJZollner Aug 17, 2022
ee8a9b5
Merge pull request #501 from HJZollner/develop
HJZollner Aug 17, 2022
4f64a4d
[FEATURE] - XA30 loader Siemens WIP MEGA - load_twix - gunziyhu
HJZollner Aug 18, 2022
8661613
Merge pull request #503 from HJZollner/develop
HJZollner Aug 18, 2022
d14982e
[BUG] - GUI crash for user defined metabs- OspreyJob - Bethany Stennett
HJZollner Aug 18, 2022
174e3f8
Revert "[BUG] - GUI crash for user defined metabs- OspreyJob - Bethan…
HJZollner Aug 18, 2022
339fbbc
[BUG] - GUI crash for user defined metabs- OspreyJob - Bethany Stennett
HJZollner Aug 18, 2022
97be199
Merge pull request #505 from HJZollner/develop
HJZollner Aug 18, 2022
d04e832
[BUG FIX] - Segmentation fails for DCM spec files - OspreyCoreg Ospre…
HJZollner Aug 23, 2022
259512f
Merge pull request #508 from HJZollner/develop
HJZollner Aug 23, 2022
d8e3442
Minor Bug fixes in various functions
HJZollner Aug 23, 2022
7a2e1fe
Merge pull request #509 from HJZollner/develop
HJZollner Aug 23, 2022
eb2375e
[FEATURE] - Add visual LB and Zoom - plot_OspreyFit - Richard Edden
HJZollner Aug 29, 2022
3937179
Merge pull request #510 from HJZollner/develop
HJZollner Aug 29, 2022
ae4e94a
[FEATURE] - Add visual LB and Zoom - plot_OspreyFit - Richard Edden
HJZollner Aug 29, 2022
9285486
Merge pull request #511 from HJZollner/develop
HJZollner Aug 29, 2022
0da1524
[FEATURE] - Adaptions for Compilation
HJZollner Sep 1, 2022
0b1fde5
Merge pull request #513 from HJZollner/develop
HJZollner Sep 1, 2022
c1f0b9c
Prepare windwos compilation
HJZollner Sep 6, 2022
4dd5145
Merge pull request #514 from HJZollner/develop
HJZollner Sep 6, 2022
1cab994
Reduce basisset filesize
HJZollner Sep 6, 2022
0e0d090
Merge pull request #515 from HJZollner/develop
HJZollner Sep 6, 2022
c43fdb8
Some more prep for compialtion
HJZollner Sep 6, 2022
1c29a75
Merge pull request #516 from HJZollner/develop
HJZollner Sep 6, 2022
c83e578
Fix #517
CWDAVIESJENKINS Sep 16, 2022
a1a1ac2
Merge pull request #518 from CWDAVIESJENKINS/develop
CWDAVIESJENKINS Sep 16, 2022
add0c22
Fix #519
CWDAVIESJENKINS Sep 19, 2022
65dbe7c
Merge pull request #520 from CWDAVIESJENKINS/develop
CWDAVIESJENKINS Sep 19, 2022
b07dc64
[BUG FIX] - GUI quantify crash LCModel wrapper - Meredith Reid
HJZollner Sep 26, 2022
266f012
Merge pull request #522 from HJZollner/develop
HJZollner Sep 26, 2022
bc756c3
[BUG FIX] - Philips loader crashes on LINUX system - philipsLoad.m - …
HJZollner Sep 26, 2022
a8b4e17
Merge pull request #524 from HJZollner/develop
HJZollner Sep 26, 2022
42894b7
Create osp_exportParams.m
JohnLaMaster Oct 11, 2022
d8bc6cb
Saves ECC to container
JohnLaMaster Oct 11, 2022
27d3468
Update osp_exportParams.m
JohnLaMaster Oct 11, 2022
3855b55
Update OspreyHTMLReport
HJZollner Oct 11, 2022
6e1929a
Merge pull request #528 from HJZollner/develop
HJZollner Oct 11, 2022
a453a00
[BUG FIX] - External segmentation and json
HJZollner Oct 11, 2022
ef542b4
Merge pull request #530 from HJZollner/develop
HJZollner Oct 11, 2022
98a5278
Update OspreySeg
HJZollner Oct 11, 2022
2fcf4a7
Merge pull request #531 from HJZollner/develop
HJZollner Oct 11, 2022
3b14af6
Update osp_exportParams.m
JohnLaMaster Oct 13, 2022
86af319
Update io_loadspec_twix.m
schorschinho Oct 13, 2022
6b2d086
Updates TWIX and NIfTI loading
schorschinho Oct 19, 2022
53eedb3
Update osp_LoadNII.m
schorschinho Oct 20, 2022
ed8097d
[BUG FIX] - Osprey Seg not working for .nii.gz files - OspreyCoreg - …
HJZollner Oct 31, 2022
b77e1d6
Merge pull request #534 from HJZollner/develop
HJZollner Oct 31, 2022
9badd04
OspreyGUI fixes
HJZollner Oct 31, 2022
cc79b0e
Merge pull request #535 from HJZollner/develop
HJZollner Oct 31, 2022
011ec10
Update osp_fitInitialise.m
HJZollner Oct 31, 2022
06cd171
Merge pull request #536 from HJZollner/develop
HJZollner Oct 31, 2022
e319075
Merge pull request #525 from JohnLaMaster/develop
HJZollner Dec 2, 2022
42b6689
[FEATURE REQUEST] - Basis set resolution smaller than data resolution…
HJZollner Dec 2, 2022
40b61a7
Merge pull request #539 from HJZollner/develop
HJZollner Dec 2, 2022
21183eb
Osprey docs update
CWDAVIESJENKINS Dec 2, 2022
a3746f5
Merge pull request #540 from CWDAVIESJENKINS/develop
CWDAVIESJENKINS Dec 2, 2022
a595ed5
[BUG] - Crash when loading MEGA-PRESS rda - io_loadspec_rda - Mary Ad…
HJZollner Dec 5, 2022
e327dda
Merge pull request #542 from HJZollner/develop
HJZollner Dec 5, 2022
de36cb7
Update fit_createSoftConstrOsprey.m
HJZollner Dec 8, 2022
b0d63ab
Merge pull request #543 from HJZollner/develop
HJZollner Dec 8, 2022
501f68a
Prepare series analysis
HJZollner Dec 16, 2022
cf3004b
Merge branch 'develop' into develop
HJZollner Dec 16, 2022
09a9b03
Merge pull request #544 from HJZollner/develop
HJZollner Dec 16, 2022
d1786aa
Merge remote-tracking branch 'upstream/develop' into develop
HJZollner Dec 16, 2022
636d129
Merge branch 'develop' of https://github.com/HJZollner/osprey into de…
HJZollner Dec 16, 2022
81fe5f5
Merge branch 'schorschinho:develop' into develop
HJZollner Dec 16, 2022
7c504d7
Update fit_plotBasis.m
schorschinho Jan 2, 2023
5b871c8
Update GELoad.m
schorschinho Jan 3, 2023
a33e203
Revert "Update GELoad.m"
schorschinho Jan 4, 2023
286836a
[BUG FIX] - SpectroFrequency nii-mrs header extension issue - io_writ…
HJZollner Jan 12, 2023
5a64fcf
Merge pull request #549 from HJZollner/develop
HJZollner Jan 12, 2023
eb23c60
Improve handling of basis sets during import
schorschinho Jan 16, 2023
abbe47d
Update listValidBasisFunctionNames.m
schorschinho Jan 17, 2023
c001b31
Create listStandardBasisFunctionNames.m
schorschinho Jan 17, 2023
cb31e9e
Update functions that select metabolites from a basis set.
schorschinho Jan 17, 2023
327f9eb
Update io_writelcmBASIS.m
schorschinho Jan 17, 2023
5d7238e
Update osp_fitInitialise.m
schorschinho Jan 17, 2023
d2b2ec8
Update OspreyQuantify.m
schorschinho Jan 26, 2023
fc89806
[Feature Request] - Defacing of structural images - OspreyCoreg/Seg -…
HJZollner Feb 1, 2023
8499e3f
Merge pull request #552 from HJZollner/develop
HJZollner Feb 1, 2023
522ebee
Update osp_editControlParameters.m
schorschinho Feb 4, 2023
750cc60
Update io_readlcmraw_basis.m
schorschinho Feb 4, 2023
3705b39
Improve LCModel control file generation
schorschinho Feb 4, 2023
a830093
Add Alpha Correction for Glx and fix 1to1GABA concentrations
HJZollner Feb 9, 2023
e27ddbd
Merge remote-tracking branch 'upstream/develop' into develop
HJZollner Feb 9, 2023
43c6215
Add Alpha Correction Glx
HJZollner Feb 9, 2023
a3adb2f
Merge pull request #556 from HJZollner/develop
HJZollner Feb 9, 2023
9fd09db
[BUG FIX] - Incorrect coreg if multiple files per subjects - OspreyCo…
HJZollner Feb 22, 2023
dbd05b8
Merge pull request #561 from HJZollner/develop
HJZollner Feb 22, 2023
aefc44e
OspreyLoad
HJZollner Feb 22, 2023
a1def84
Merge pull request #562 from HJZollner/develop
HJZollner Feb 22, 2023
97c8bb1
[FEATURE REQUEST] - Integer labels only for XAxis - all plot function…
HJZollner Feb 22, 2023
e8ff343
Merge pull request #563 from HJZollner/develop
HJZollner Feb 22, 2023
4c925e0
Update osp_plotFit
HJZollner Feb 22, 2023
d82e0a4
Merge pull request #564 from HJZollner/develop
HJZollner Feb 22, 2023
69dd5fd
Update osp_plotFit
HJZollner Feb 22, 2023
0819cb1
Merge pull request #565 from HJZollner/develop
HJZollner Feb 22, 2023
526d22e
Better handle definition for plots
HJZollner Feb 22, 2023
c98a2b1
Merge pull request #566 from HJZollner/develop
HJZollner Feb 22, 2023
63e2eac
Refactor basis set recalc
CWDAVIESJENKINS Feb 27, 2023
dffd561
Merge pull request #568 from CWDAVIESJENKINS/develop
CWDAVIESJENKINS Feb 27, 2023
d60a06b
[BUG FIX] - GUI Job generator has wrong tool tip - CreateOspreyJob_ap…
HJZollner Mar 1, 2023
5840c62
Merge pull request #571 from HJZollner/develop
HJZollner Mar 1, 2023
0a5bb39
MRSI support
JohnLaMaster Mar 1, 2023
9a849d6
[BUG FIX] - Overlap map not cerated - OspreySeg - Meredith Reid & Men…
HJZollner Mar 2, 2023
fcbc8ba
Merge pull request #575 from HJZollner/develop
HJZollner Mar 2, 2023
8b70fbc
Addition to #571
HJZollner Mar 3, 2023
c65fbbe
Merge pull request #578 from HJZollner/develop
HJZollner Mar 3, 2023
15bede2
[BUG FIX] - XA 30 data not correctly loaded - io_loadspec_twix - Helg…
HJZollner Mar 3, 2023
e34d6c4
Merge pull request #581 from HJZollner/develop
HJZollner Mar 3, 2023
789c118
[BUG FIX] - Unable to pick GE DICOM through GUI - CreateOspreyJob - J…
HJZollner Mar 3, 2023
dd38cf3
Merge pull request #582 from HJZollner/develop
HJZollner Mar 3, 2023
9f46120
[FEATURE] - Allow NOBASE = T in LCModel wrapper - osp_fitUnEdited - H…
HJZollner Mar 3, 2023
7fae6b7
Merge pull request #583 from HJZollner/develop
HJZollner Mar 3, 2023
f168538
[FEATURE] - NIfTI-MRS provenance integration - Helge Zöllner
HJZollner Mar 6, 2023
1f95c37
Merge pull request #584 from HJZollner/develop
HJZollner Mar 6, 2023
bf8e1a1
Merge remote-tracking branch 'upstream/develop' into develop
HJZollner Mar 6, 2023
0d206b0
[FEATURE REQUEST] - GABA-GSH-EtOH Analysis - Mark Britton
HJZollner Mar 6, 2023
7f8b767
[FEATURE REQUEST] - GABA-GSH-EtOH Analysis - Mark Britton
HJZollner Mar 6, 2023
ed97ce0
Merge branch 'develop' of https://github.com/HJZollner/osprey into de…
HJZollner Mar 6, 2023
b9cf495
Revert "[FEATURE REQUEST] - GABA-GSH-EtOH Analysis - Mark Britton"
HJZollner Mar 6, 2023
eb63b5b
Merge remote-tracking branch 'upstream/develop' into develop
HJZollner Mar 6, 2023
4d61e7e
Revert "Revert "[FEATURE REQUEST] - GABA-GSH-EtOH Analysis - Mark Bri…
HJZollner Mar 6, 2023
a9d0eed
Merge pull request #586 from HJZollner/develop
HJZollner Mar 6, 2023
260d1eb
[FEATURE REQUEST] - GABA-GSH-EtOH HERMES - Mark Britton
HJZollner Mar 6, 2023
ed11e53
Merge pull request #587 from HJZollner/develop
HJZollner Mar 6, 2023
8de3fd3
Merge pull request #572 from JohnLaMaster/patch-1
HJZollner Mar 6, 2023
a7480ab
[FEATURE REQUEST] - Tissues alpha correction Glu - shaokunzhao
HJZollner Mar 6, 2023
b8a19f9
Merge pull request #591 from HJZollner/develop
HJZollner Mar 6, 2023
80f7ba0
[BUG FIX] - whitesapcePattern function not known - OspreyJob - Dina S…
HJZollner Mar 10, 2023
2dd2f92
Merge pull request #594 from HJZollner/develop
HJZollner Mar 10, 2023
a1a6428
[BUG FIX] - Can not import basis set form LCModel correctly - shaokun…
HJZollner Mar 30, 2023
eebfed7
Merge pull request #597 from HJZollner/develop
HJZollner Mar 30, 2023
524516c
Trying to update
JohnLaMaster Mar 31, 2023
d38e39e
Merge branch 'develop' of github.com:JohnLaMaster/osprey into osp_exp…
JohnLaMaster Mar 31, 2023
e978486
Finalized implementing osp_exportParams.m and added it to the example…
JohnLaMaster Mar 31, 2023
4a0d559
Added the function call to OspreyOverview at the end.
JohnLaMaster Mar 31, 2023
e1c5c90
Finalized implementing osp_exportParams.m, added it to the example jo…
JohnLaMaster Mar 31, 2023
4d6dfd5
Finalized implementing osp_exportParams.m, added it to the example jo…
JohnLaMaster Mar 31, 2023
d95c4bf
Pulled and re-updated
JohnLaMaster Mar 31, 2023
08790d6
Correction
JohnLaMaster Mar 31, 2023
8c6d274
Update osp_exportParams.m
HJZollner Apr 6, 2023
f66ab67
Update osp_exportParams.m
HJZollner Apr 6, 2023
52450e1
Merge pull request #598 from JohnLaMaster/impl_osp_exportParams
HJZollner Apr 6, 2023
abdab35
BUG FIX - Missing End in OspreyJob
HJZollner Apr 6, 2023
c4ff52a
Merge pull request #600 from HJZollner/develop
HJZollner Apr 6, 2023
21ea969
BUG OspreyOverview
HJZollner Apr 6, 2023
b90d528
Merge pull request #601 from HJZollner/develop
HJZollner Apr 6, 2023
48700aa
BUG OspreyOverview
HJZollner Apr 6, 2023
8fbd15c
Merge pull request #602 from HJZollner/develop
HJZollner Apr 6, 2023
45f94c5
BUG OspreyJob .m defaults
HJZollner Apr 6, 2023
af7e0a0
Merge pull request #603 from HJZollner/develop
HJZollner Apr 6, 2023
8f7e966
BUG default options .m file
HJZollner Apr 6, 2023
5984ab0
Merge pull request #604 from HJZollner/develop
HJZollner Apr 6, 2023
d5c9ece
[BUG FIX] - OspreyQuanitfy crash for limited basis - OspreyQuantify -…
HJZollner Apr 6, 2023
2873dce
Merge pull request #606 from HJZollner/develop
HJZollner Apr 6, 2023
1ab332f
[BUG FIX] - Unrecognized field in basis set - OspreyFit - Mingrun Shi
HJZollner Apr 6, 2023
f18793c
Merge pull request #608 from HJZollner/develop
HJZollner Apr 6, 2023
9603b30
Preparation release v.2.5.0
HJZollner Apr 7, 2023
02b2c22
Merge pull request #609 from HJZollner/develop
HJZollner Apr 7, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions GUI/Osprey.m
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
logoFcn = @()imread('osprey.png', 'BackgroundColor', gui.colormap.Background);
logoBanner = uiw.utility.loadIcon(logoFcn);
% Here the intro banner is created
gui.d = uiw.dialog.About('Name', 'Osprey','Version','2.4.0','Date', 'August 8, 2022',...
gui.d = uiw.dialog.About('Name', 'Osprey','Version','2.5.0','Date', 'April 7, 2023',...
'Timeout', 3,'CustomText', 'Osprey is provided by Johns Hopkins University.',...
'ContactInfo', 'gabamrs@gmail.com','LogoCData', logoBanner);

Expand Down Expand Up @@ -74,7 +74,7 @@
set(gui.Buttons, 'ButtonSize', [300 60]);
% Create Job
gui.CreateJob = uicontrol('Parent', gui.Buttons,'Style','PushButton','String','Create Job','ForegroundColor', gui.colormap.Foreground,...
'TooltipString', 'Create a OspreyJob .m-file');
'TooltipString', 'Create a OspreyJob .json-file');
set(gui.CreateJob,'Units','Normalized','Position',[0.1 0.9 0.8 0.08], 'FontSize', 16, 'FontName', gui.font, 'FontWeight', 'Bold');
set(gui.CreateJob,'Callback',{@onCreateJob});
% JobFile input button
Expand Down
40 changes: 29 additions & 11 deletions GUI/OspreyGUI.m
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@
gui.controls.act_y = 1;
gui.controls.act_z = 1;
gui.controls.act_basis = 1;
gui.overview.Selected.Spec = 1;
%Names for each selection
gui.load.Names.Spec = {'metabolites'};
%Inital number of datasets
Expand All @@ -155,7 +156,11 @@
if strcmp(sprintf('\n'),MRSCont.raw{1,gui.controls.Selected}.seq(end)) %Clean up Sequence Name if needed
gui.load.Names.Seq = MRSCont.raw{1,gui.controls.Selected}.seq(1:end-1);
else
gui.load.Names.Seq = MRSCont.raw{1,gui.controls.Selected}.seq;
if iscell(MRSCont.raw{1,gui.controls.Selected}.seq)
gui.load.Names.Seq = MRSCont.raw{1,gui.controls.Selected}.seq{1,1};
else
gui.load.Names.Seq = MRSCont.raw{1,gui.controls.Selected}.seq
end
end
else
if MRSCont.flags.isUnEdited
Expand Down Expand Up @@ -200,10 +205,9 @@
end
end

if gui.controls.nExperiments > 1
gui.info.nXvoxels = gui.controls.nExperiments;
gui.info.nExperiments = gui.controls.nExperiments;
end
gui.info.nXvoxels = gui.controls.nExperiments;
gui.info.nExperiments = gui.controls.nExperiments;

if MRSCont.flags.didProcess %Get variables regarding the processing
gui.process.Number = length(fieldnames(MRSCont.processed));
gui.info.nYvoxels = MRSCont.processed.metab{1, 1}.subspecs;
Expand Down Expand Up @@ -272,7 +276,10 @@
%Version check and updating log file
MRSCont.flags.isGUI = 1;
outputFolder = MRSCont.outputFolder;


%Add cosmetics
MRSCont.opts.cosmetics.LB = 0;
MRSCont.opts.cosmetics.Zoom = 2.75;
%% Create the overall figure
gui.figure = figure('Name', 'Osprey', 'Tag', 'Osprey', 'NumberTitle', 'off', 'Visible', 'on','Menu', 'none',...
'ToolBar', 'none', 'HandleVisibility', 'on', 'Renderer', 'painters', 'Color', gui.colormap.Background);
Expand Down Expand Up @@ -413,7 +420,10 @@
'ForegroundColor',gui.colormap.Foreground, 'HighlightColor',gui.colormap.Foreground, 'ShadowColor',gui.colormap.Foreground,'Tag','SubjectListPanel');
gui.layout.fileList = MRSCont.files(1,:);
if ~MRSCont.flags.moved
[~, ~] = osp_detDataType(MRSCont);
try
[~, ~] = osp_detDataType(MRSCont);
catch
end
end
SepFileList = cell(1,MRSCont.nDatasets(1));
gui.layout.RedFileList = cell(1,MRSCont.nDatasets(1));
Expand Down Expand Up @@ -537,10 +547,18 @@
close(gui.controls.waitbar);
%% Here we add callback listeners triggered on selection changes
set(gui.layout.tabs,'SelectionChangedFcn',{@osp_SelectionChangedFcn,gui});
set(gui.layout.rawTab, 'SelectionChangedFcn',{@osp_RawTabChangeFcn,gui});
set(gui.layout.proTab,'SelectionChangedFcn',{@osp_ProTabChangeFcn,gui});
set(gui.layout.fitTab, 'SelectionChangedFcn',{@osp_FitTabChangeFcn,gui});
set(gui.layout.quantifyTab, 'SelectionChangedFcn',{@osp_QuantTabChangeFcn,gui});
if MRSCont.flags.didLoad
set(gui.layout.rawTab, 'SelectionChangedFcn',{@osp_RawTabChangeFcn,gui});
end
if MRSCont.flags.didProcess
set(gui.layout.proTab,'SelectionChangedFcn',{@osp_ProTabChangeFcn,gui});
end
if MRSCont.flags.didFit
set(gui.layout.fitTab, 'SelectionChangedFcn',{@osp_FitTabChangeFcn,gui});
end
if MRSCont.flags.didQuantify
set(gui.layout.quantifyTab, 'SelectionChangedFcn',{@osp_QuantTabChangeFcn,gui});
end
set(gui.layout.ListBox,'Callback', {@osp_onListSelection,gui},'KeyPressFcn',{@osp_WindowKeyDown,gui}, 'KeyReleaseFcn', {@osp_WindowKeyUp,gui});

end
Expand Down
6 changes: 3 additions & 3 deletions GUI/osp_OverviewTabChangedFcn.m
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ function osp_OverviewTabChangedFcn(src,~,gui)
switch NewValue
case 1
osp_updateSpecsOvWindow(gui);
set(gui.controls.pop_specsOvPlot, 'value',gui.process.Selected)
set(gui.controls.pop_specsOvPlot, 'value',gui.overview.Selected.Spec)
case 2
splt_string = strsplit(gui.controls.pop_specsOvPlot.String{gui.process.Selected});
splt_string = strsplit(gui.controls.pop_specsOvPlot.String{gui.overview.Selected.Spec});
if length(splt_string) > 1
if strcmp(splt_string{2},'ref') || strcmp(splt_string{2},'w')
gui.process.Selected = find(contains(gui.controls.pop_meanOvPlot.String,splt_string{2}));
Expand All @@ -39,7 +39,7 @@ function osp_OverviewTabChangedFcn(src,~,gui)
end
end
osp_updatemeanOvWindow(gui);
set(gui.controls.pop_meanOvPlot, 'value',gui.process.Selected)
set(gui.controls.pop_meanOvPlot, 'value',gui.overview.Selected.Spec)
case 3
set(gui.layout.overviewTab, 'selection', 3);
case 4
Expand Down
18 changes: 13 additions & 5 deletions GUI/osp_ProTabChangeFcn.m
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,22 @@ function osp_ProTabChangeFcn(src,~,gui)
% User selected tab refreshs plot
gui.process.Selected = src.Selection;

if MRSCont.processed.(gui.process.Names{gui.process.Selected}){gui.controls.Selected}.dims.extras > 0
gui.info.nXvoxels = MRSCont.processed.(gui.process.Names{gui.process.Selected}){gui.controls.Selected}.sz(MRSCont.processed.(gui.process.Names{gui.process.Selected}){gui.controls.Selected}.dims.extras);
if isfield(MRSCont,'processed')
if MRSCont.processed.(gui.process.Names{gui.process.Selected}){gui.controls.Selected}.dims.extras > 0
gui.info.nXvoxels = MRSCont.processed.(gui.process.Names{gui.process.Selected}){gui.controls.Selected}.sz(MRSCont.processed.(gui.process.Names{gui.process.Selected}){gui.controls.Selected}.dims.extras);
else
gui.info.nXvoxels = 1;
end
else
gui.info.nXvoxels = 1;
end
end
gui.controls.act_x = 1;
if MRSCont.processed.(gui.process.Names{gui.process.Selected}){gui.controls.Selected}.dims.subSpecs > 0
gui.info.nYvoxels = MRSCont.processed.(gui.process.Names{gui.process.Selected}){gui.controls.Selected}.sz(MRSCont.processed.(gui.process.Names{gui.process.Selected}){gui.controls.Selected}.dims.subSpecs);
if isfield(MRSCont,'processed')
if MRSCont.processed.(gui.process.Names{gui.process.Selected}){gui.controls.Selected}.dims.subSpecs > 0
gui.info.nYvoxels = MRSCont.processed.(gui.process.Names{gui.process.Selected}){gui.controls.Selected}.sz(MRSCont.processed.(gui.process.Names{gui.process.Selected}){gui.controls.Selected}.dims.subSpecs);
else
gui.info.nYvoxels = MRSCont.nDatasets(2);
end
else
gui.info.nYvoxels = MRSCont.nDatasets(2);
end
Expand Down
216 changes: 109 additions & 107 deletions GUI/osp_Toolbox_Check.m
Original file line number Diff line number Diff line change
Expand Up @@ -32,123 +32,125 @@
% 2020-05-15: First version of the code.
%% % 1. SAVE OSPREY VERSION%%%
%%% 1. SAVE OSPREY VERSION%%%
OspreyVersion = 'Osprey 2.4.0';
OspreyVersion = 'Osprey 2.5.0';
fprintf(['Timestamp %s ' OspreyVersion ' ' Module '\n'], datestr(now,'mmmm dd, yyyy HH:MM:SS'));
hasSPM = 1; % For the compiled GUI
%% % 2. GET SPMPATH AND TOOLBOXES%%%
warning('off','MATLAB:javaclasspath:jarAlreadySpecified');
addons = matlab.addons.installedAddons;
available = cellstr(table2cell(addons(:,1)));
for tl = 1 : size(addons,1)
try
matlab.addons.enableAddon(addons.Name{tl});
catch
if ~(ismcc || isdeployed)
warning('off','MATLAB:javaclasspath:jarAlreadySpecified');
addons = matlab.addons.installedAddons;
available = cellstr(table2cell(addons(:,1)));
for tl = 1 : size(addons,1)
try
matlab.addons.enableAddon(addons.Name{tl});
catch
end
end
end
addons = matlab.addons.installedAddons;
lic = strcmp({'Enabled'}, addons.Properties.VariableNames);
if ~isempty(lic)
enabled = table2cell(addons(:,lic==1));
else
enabled = table2cell(addons(:,1));
end

[settingsFolder,~,~] = fileparts(which('OspreySettings.m'));
allFolders = strsplit(settingsFolder, filesep);
ospFolder = strjoin(allFolders(1:end-1), filesep); % parent folder (= Osprey folder)

% Get SPM folder and check if SPM12 is installed
spmversion = fileparts(which(fullfile('spm.m')));
if isempty(spmversion)
hasSPM = 0;
elseif strcmpi(spmversion(end-3:end),'spm8')
available{end+1} = 'SPM8';
enabled{end+1} = false;
hasSPM = 0;
else
available{end+1} = 'SPM12';
enabled{end+1} = true;
hasSPM = 1;
end

try
addons = matlab.addons.installedAddons;
lic = strcmp({'Enabled'}, addons.Properties.VariableNames);
if ~isempty(lic)
available(find(cellfun(@(a)~isempty(a)&&a<1,enabled)), :) = [];
end

%%% 3. CHECK AVAILABILTY %%%
switch Module
case 'OspreyGUI'
ModuleString = 'fully run \bfOsprey';
neededGlobal = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox','SPM12'};
neededSpecific = {'Widgets Toolbox', 'GUI Layout Toolbox'};
case 'OspreyProcess'
ModuleString = 'run \bfOspreyProcess';
neededGlobal = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox','SPM12'};
neededSpecific = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox'};
case 'OspreyFit'
ModuleString = 'run \bfOspreyFit';
neededGlobal = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox','SPM12'};
neededSpecific = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox'};
case 'OspreyCoreg'
ModuleString = 'run \bfOspreyCoreg';
neededGlobal = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox','SPM12'};
neededSpecific = {'SPM12'};
case 'OspreySeg'
ModuleString = 'run \bfOspreySeg';
neededGlobal = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox','SPM12'};
neededSpecific = {'SPM12'};
otherwise
ModuleString = ['run \bf' Module];
neededGlobal = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox','SPM12'};
neededSpecific = cellstr({});
enabled = table2cell(addons(:,lic==1));
else
enabled = table2cell(addons(:,1));
end

%To account for the re-naming of new downloads of the Widget Toolbox
%for Matlab versions earlier than 2020b, while maintaining
%functionality for older downloads, we need to check for all naming
%conventions of the Widgets Toolbox HZ
for tb = 1 : length(available)
if contains(available{tb},'Widgets Toolbox')
available{tb} = 'Widgets Toolbox';
[settingsFolder,~,~] = fileparts(which('OspreySettings.m'));
allFolders = strsplit(settingsFolder, filesep);
ospFolder = strjoin(allFolders(1:end-1), filesep); % parent folder (= Osprey folder)

% Get SPM folder and check if SPM12 is installed
spmversion = fileparts(which(fullfile('spm.m')));
if isempty(spmversion)
hasSPM = 0;
elseif strcmpi(spmversion(end-3:end),'spm8')
available{end+1} = 'SPM8';
enabled{end+1} = false;
hasSPM = 0;
else
available{end+1} = 'SPM12';
enabled{end+1} = true;
hasSPM = 1;
end

try
if ~isempty(lic)
available(find(cellfun(@(a)~isempty(a)&&a<1,enabled)), :) = [];
end

%%% 3. CHECK AVAILABILTY %%%
switch Module
case 'OspreyGUI'
ModuleString = 'fully run \bfOsprey';
neededGlobal = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox','SPM12'};
neededSpecific = {'Widgets Toolbox', 'GUI Layout Toolbox'};
case 'OspreyProcess'
ModuleString = 'run \bfOspreyProcess';
neededGlobal = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox','SPM12'};
neededSpecific = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox'};
case 'OspreyFit'
ModuleString = 'run \bfOspreyFit';
neededGlobal = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox','SPM12'};
neededSpecific = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox'};
case 'OspreyCoreg'
ModuleString = 'run \bfOspreyCoreg';
neededGlobal = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox','SPM12'};
neededSpecific = {'SPM12'};
case 'OspreySeg'
ModuleString = 'run \bfOspreySeg';
neededGlobal = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox','SPM12'};
neededSpecific = {'SPM12'};
otherwise
ModuleString = ['run \bf' Module];
neededGlobal = {'Optimization Toolbox', 'Statistics and Machine Learning Toolbox','SPM12'};
neededSpecific = cellstr({});
end
end
missingSpecific = setdiff(neededSpecific,available);
missing = setdiff(neededGlobal,available);

%%% 4. CREATE WARNING MESSAGES %%%
if ~ToolChecked
warningMsg = cellstr({});
warning_count = 1;
if ~isempty(missing) || ~isempty(missingSpecific)
opts.Interpreter = 'tex';
opts.WindowStyle = 'modal';
warningMsg{1} = ['The following toolboxes are missing to ' ModuleString '\rm:'];
for i = 1 : length(missing)
warningMsg{i+1} = ['\bf' missing{i} '\rm'];

%To account for the re-naming of new downloads of the Widget Toolbox
%for Matlab versions earlier than 2020b, while maintaining
%functionality for older downloads, we need to check for all naming
%conventions of the Widgets Toolbox HZ
for tb = 1 : length(available)
if contains(available{tb},'Widgets Toolbox')
available{tb} = 'Widgets Toolbox';
end
warning_count = warning_count +length(missing) + 1;
warningMsg{warning_count} = ['Please install them to ' ModuleString '\rm'];
warning_count = warning_count + 1;
if ~isempty(missingSpecific)
warningMsg{warning_count} = ['The following toolboxes are missing to run ' Module ':'];
warningc = ['Please install and include the following toolboxes to use ' Module ':'];
for i = 1 : length(missingSpecific)
warningMsg{warning_count + i} = ['\bf' missingSpecific{i} '\rm'];
warningc = [warningc ' ' missingSpecific{i}];
end
missingSpecific = setdiff(neededSpecific,available);
missing = setdiff(neededGlobal,available);

%%% 4. CREATE WARNING MESSAGES %%%
if ~ToolChecked
warningMsg = cellstr({});
warning_count = 1;
if ~isempty(missing) || ~isempty(missingSpecific)
opts.Interpreter = 'tex';
opts.WindowStyle = 'modal';
warningMsg{1} = ['The following toolboxes are missing to ' ModuleString '\rm:'];
for i = 1 : length(missing)
warningMsg{i+1} = ['\bf' missing{i} '\rm'];
end
warningMsg{warning_count + length(missingSpecific) + 1} = ['Please install them to use \bf' Module '\rm'];
warning_count = warning_count +length(missing) + 1;
warningMsg{warning_count} = ['Please install them to ' ModuleString '\rm'];
warning_count = warning_count + 1;
if ~isempty(missingSpecific)
warningMsg{warning_count} = ['The following toolboxes are missing to run ' Module ':'];
warningc = ['Please install and include the following toolboxes to use ' Module ':'];
for i = 1 : length(missingSpecific)
warningMsg{warning_count + i} = ['\bf' missingSpecific{i} '\rm'];
warningc = [warningc ' ' missingSpecific{i}];
end
warningMsg{warning_count + length(missingSpecific) + 1} = ['Please install them to use \bf' Module '\rm'];
warndlg(warningMsg,'Missing Toolboxes',opts);
error(warningc);
end
warndlg(warningMsg,'Missing Toolboxes',opts);
error(warningc);
end
warndlg(warningMsg,'Missing Toolboxes',opts);
end
end
end

catch %If the MATLAB version pre-dates the inmplementation of matlab.addons.installedAddons
warningMsg = cellstr({});
warningMsg{1} = 'Your current MATLAB version does not allow the automated toolbox check. We assume that all required toolboxes are available.';
warndlg(warningMsg,'Automated toolbox check not working.',opts);
end
warning('on','MATLAB:javaclasspath:jarAlreadySpecified');

catch %If the MATLAB version pre-dates the inmplementation of matlab.addons.installedAddons
warningMsg = cellstr({});
warningMsg{1} = 'Your current MATLAB version does not allow the automated toolbox check. We assume that all required toolboxes are available.';
warndlg(warningMsg,'Automated toolbox check not working.',opts);
end
warning('on','MATLAB:javaclasspath:jarAlreadySpecified');
end
end
Loading