From c0e4c07a000c0053040a4032d8987f0ac4ecaef4 Mon Sep 17 00:00:00 2001 From: Helge <47348963+HJZollner@users.noreply.github.com> Date: Tue, 20 Aug 2024 11:03:09 -0400 Subject: [PATCH 1/2] [BUG FIX] - XA50 HERCULES loader not working - io_loadspec_twix - Pavi -Added new sequence tag for XA50 HERCULES --- detectOS.m | 166 ++++++++++++++++++ .../FID-A/inputOutput/io_loadspec_twix.m | 3 +- 2 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 detectOS.m diff --git a/detectOS.m b/detectOS.m new file mode 100644 index 00000000..123b5c41 --- /dev/null +++ b/detectOS.m @@ -0,0 +1,166 @@ +function [OS, OSVersion] = detectOS +%DETECTOS Name and version number of the operating system. +% OS = DETECTOS returns the name of the operating system as one of the +% following character vectors: 'windows', 'macos' (which includes OS X), +% 'solaris', 'aix', or another Unix/Linux distro in all lowercase +% characters (such as 'ubuntu' or 'centos'). An error is thrown if the +% operating system cannot be determined. +% +% [~, OSVERSION] = DETECTOS returns the operating system version number +% as a numeric row vector. For example, version 6.1.7601 is reported as +% OSVERSION = [6, 1, 7601]. If the OS version cannot be determined, a +% warning is issued and the empty numeric array is returned. +% +%See also COMPUTER, ISMAC, ISPC, ISUNIX. + +% Created 2016-01-05 by Jorg C. Woehl +% 2016-10-10 (JCW): Converted to standalone function, comments added (v1.0.1). +% 2018-04-20 (JCW): Used the recommended “replace” instead of “strrep”. +% 2021-04-22 (JCW): Version information added (v1.1). + +if ismac + % Mac + % see https://support.apple.com/en-us/HT201260 for version numbers + OS = 'macos'; + [status, OSVersion] = system('sw_vers -productVersion'); + OSVersion = strtrim(OSVersion); + if (~(status == 0) || isempty(OSVersion)) + warning('detectOS:UnknownMacOSVersion',... + 'Unable to determine macOS/OS X version.'); + OSVersion = ''; + end +elseif ispc + % Windows + % see https://en.wikipedia.org/wiki/Ver_(command) for version numbers + OS = 'windows'; + [status, OSVersion] = system('ver'); + OSVersion = regexp(OSVersion, '\d[.\d]*', 'match'); + if (~(status == 0) || isempty(OSVersion)) + warning('detectOS:UnknownWindowsVersion',... + 'Unable to determine Windows version.'); + OSVersion = ''; + end +elseif isunix + % Unix/Linux + % inspired in part by + % http://linuxmafia.com/faq/Admin/release-files.html and + % http://unix.stackexchange.com/questions/92199/how-can-i-reliably-get-the-operating-systems-name/92218#92218 + [status, OS] = system('uname -s'); % results in 'SunOS', 'AIX', or 'Linux' + OS = strtrim(OS); + assert((status == 0), 'detectOS:UnknownUnixDistro',... + 'Unable to determine Unix distribution.'); + if strcmpi(OS, 'SunOS') + OS = 'solaris'; % newer name + [status, OSVersion] = system('uname -v'); % example: + OSVersion = regexp(OSVersion, '\d[.\d]*', 'match'); + if (~(status == 0) || isempty(OSVersion)) + warning('detectOS:UnknownSolarisVersion',... + 'Unable to determine Solaris version.'); + OSVersion = ''; + end + elseif strcmpi(OS, 'AIX') + OS = 'aix'; + [status, OSVersion] = system('oslevel'); % example: 6.1.0.0 + OSVersion = regexp(OSVersion, '\d[.\d]*', 'match'); + if (~(status == 0) || isempty(OSVersion)) + warning('detectOS:UnknownAIXVersion',... + 'Unable to determine AIX version.'); + OSVersion = ''; + end + elseif strcmpi(OS, 'Linux') + OS = ''; + OSVersion = ''; + % first check if /etc/os-release exists and read it + [status, result] = system('cat /etc/os-release'); + if (status == 0) + % add newline to beginning and end of output character vector (makes parsing easier) + result = sprintf('\n%s\n', result); + % determine OS + OS = regexpi(result, '(?<=\nID=).*?(?=\n)', 'match'); % ID=... (shortest match) + OS = lower(strtrim(replace(OS, '"', ''))); % remove quotes, leading/trailing spaces, and make lowercase + if ~isempty(OS) + % convert to character vector + OS = OS{1}; + end + % determine OS version + OSVersion = regexpi(result, '(?<=\nVERSION_ID=)"*\d[.\d]*"*(?=\n)', 'match'); % VERSION_ID=... (longest match) + OSVersion = replace(OSVersion, '"', ''); % remove quotes + else + % check for output from lsb_release (more standardized than /etc/lsb-release itself) + [status, result] = system('lsb_release -a'); + if (status == 0) + % add newline to beginning and end of output character vector (makes parsing easier) + result = sprintf('\n%s\n', result); + % determine OS + OS = regexpi(result, '(?<=\nDistributor ID:\t).*?(?=\n)', 'match'); % Distributor ID: ... (shortest match) + OS = lower(strtrim(OS)); % remove leading/trailing spaces, and convert to lowercase + if ~isempty(OS) + % convert to character vector + OS = OS{1}; + end + % determine OS version + OSVersion = regexpi(result, '(?<=\nRelease:\t)\d[.\d]*(?=\n)', 'match'); % Release: ... (longest match) + else + % extract information from /etc/*release or /etc/*version filename + [status, result] = system('ls -m /etc/*version'); % comma-delimited file listing + fileList = ''; + if (status == 0) + fileList = result; + end + [status, result] = system('ls -m /etc/*release'); % comma-delimited file listing + if (status == 0) + fileList = [fileList ', ' result]; + end + fileList = replace(fileList, ',', ' '); + % remove spaces and trailing newline + fileList = strtrim(fileList); + OSList = regexpi(fileList, '(?<=/etc/).*?(?=[-_][rv])', 'match'); % /etc/ ... -release/version or _release/version + fileList = strtrim(strsplit(fileList)); + % find the first entry that's different from 'os', 'lsb', 'system', '', or 'debian'/'redhat' (unless it's the only one) + ii = 1; + while (ii <= numel(OSList)) + if ~(strcmpi(OSList{ii}, 'os') || strcmpi(OSList{ii}, 'lsb') || strcmpi(OSList{ii}, 'system') || ... + isempty(OSList{ii}) || strcmpi(OSList{ii}, 'redhat') || strcmpi(OSList{ii}, 'debian')) + OS = OSList{ii}; + OSFile = fileList{ii}; + break; + elseif (strcmpi(OSList{ii}, 'redhat') || strcmpi(OSList{ii}, 'debian')) + OS = OSList{ii}; % assign temporarily, but keep going + OSFile = fileList{ii}; + end + ii = ii+1; + end + % determine OS version + if ~isempty(OSFile) + [status, OSVersion] = system(['cat ' OSFile]); + if (status == 0) + OSVersion = regexp(OSVersion, '\d[.\d]*', 'match'); + else + OSVersion = ''; + end + end + end + end + assert(~isempty(OS), 'detectOS:UnknownLinuxDistro',... + 'Unable to determine Linux distribution.'); + if isempty(OSVersion) + warning('detectOS:UnknownLinuxVersion',... + 'Unable to determine Linux version.'); + OSVersion = ''; + end + else + error('detectOS:UnknownUnixDistro',... + 'Unknown Unix distribution.') + end +else + error('detectOS:PlatformNotSupported',... + 'Platform not supported.'); +end + +if iscell(OSVersion) + % convert to character vector + OSVersion = OSVersion{1}; +end +OSVersion = round(str2double(strsplit(OSVersion, '.'))); + +end \ No newline at end of file diff --git a/libraries/FID-A/inputOutput/io_loadspec_twix.m b/libraries/FID-A/inputOutput/io_loadspec_twix.m index 375b5e4f..079dff69 100644 --- a/libraries/FID-A/inputOutput/io_loadspec_twix.m +++ b/libraries/FID-A/inputOutput/io_loadspec_twix.m @@ -91,7 +91,8 @@ ~isempty(strfind(sequence,'svs_st'))) && ... % or the Siemens STEAM sequence? isempty(strfind(sequence,'eja_svs')); %And make sure it's not 'eja_svs_steam'. isUniversal = ~isempty(strfind(sequence,'univ')) ||... %Is JHU universal editing sequence - ~isempty(strfind(sequence,'smm_svs_herc')); % Is Pavi's HERCULES sequence + ~isempty(strfind(sequence,'smm_svs_herc')) ||... % Is Pavi's HERCULES sequence + ~isempty(strfind(sequence,'svs_herc_gls')); % Is Gize's HERCULES sequence isDondersMRSfMRI = contains(sequence,'moco_nav_set'); %Is combined fMRI-MRS sequence implemented at Donders Institute NL isConnectom = contains(twix_obj.hdr.Dicom.ManufacturersModelName,'Connectom'); %Is from Connectom scanner (Apparently svs_se Dims are not as expected for vd) From 938cb57a19c6f59e5b767d84e0c93b977161a4d3 Mon Sep 17 00:00:00 2001 From: Helge <47348963+HJZollner@users.noreply.github.com> Date: Tue, 20 Aug 2024 11:04:21 -0400 Subject: [PATCH 2/2] Add version to latest fix Add version --- settings/version.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings/version.json b/settings/version.json index ef09467c..38c45d13 100644 --- a/settings/version.json +++ b/settings/version.json @@ -1,3 +1,3 @@ -{"Version": "2.7.0", - "Date": "August 15, 2024", +{"Version": "2.7.1", + "Date": "August 20, 2024", "Description": "First digit for major releases, second digit for regular compiled releases, third digit for each commit to the develop branch. "}