Error data processing

Hi,

After loading the data using (Osprey v1.1.0), I get following error message:

I tried the same using the latest Osprey version (3.2.0) and got another error:

What could be the cause and how can this be solved?

Kind regards,
Koen

See below for the jobfile:

%% jobSDAT.m
% This function describes an Osprey job defined in a MATLAB script.
%
% A valid Osprey job contains four distinct classes of items:
% 1. basic information on the MRS sequence used
% 2. several settings for data handling and modeling
% 3. a list of MRS (and, optionally, structural imaging) data files
% to be loaded
% 4. an output folder to store the results and exported files
%
% The list of MRS and structural imaging files is provided in the form of
% cell arrays. They can simply be provided explicitly, or from a more
% complex script that automatically determines file names from a given
% folder structure.
%
% Osprey distinguishes between four sets of data:
% - metabolite (water-suppressed) data
% (MANDATORY)
% Defined in cell array “files”
% - water reference data acquired with the SAME sequence as the
% metabolite data, just without water suppression RF pulses. This
% data is used to determine complex coil combination
% coefficients, and perform eddy current correction.
% (OPTIONAL)
% Defined in cell array “files_ref”
% - additional water data used for water-scaled quantification,
% usually from short-TE acquisitions due to reduced T2-weighting
% (OPTIONAL)
% Defined in cell array “files_w”
% - Structural image data used for co-registration and tissue class
% segmentation (usually a T1 MPRAGE). These files need to be
% provided in the NIfTI format (.nii) or, for GE data, as a
% folder containing DICOM Files (
.dcm).
% (OPTIONAL)
% Defined in cell array “files_nii”
% - External segmentation results. These files need to be
% provided in the NIfTI format (*.nii or *.nii.gz).
% (OPTIONAL)
% Defined in cell array “files_seg” with 1 x 3 cell for each
% subject or 1 x 1 cell if a single 4D NIfTI is supplied.
%
% Files in the formats
% - .7 (GE)
% - .SDAT, .DATA/.LIST, .RAW/.SIN/.LAB (Philips)
% - .DAT (Siemens)
% - .nii, .nii.gz (NIfTI-MRS)
% usually contain all of the acquired data in a single file per scan. GE
% systems store water reference data in the same .7 file, so there is no
% need to specify it separately under files_ref.
%
% Files in the formats
% - .DCM (any)
% - .IMA, .RDA (Siemens)
% may contain separate files for each average. Instead of providing
% individual file names, please specify folders. Metabolite data, water
% reference data, and water data need to be located in separate folders.
%
% In the example script at hand the MATLAB functions strrep and which are
% used to generate a relative path, which allows you to run the examples
% on your machine directly. To set up your own Osprey job supply the
% specific locations as described above.
%
% AUTHOR:
% Dr. Georg Oeltzschner (Johns Hopkins University, 2019-07-15)
% goeltzs1@jhmi.edu
%
% HISTORY:
% 2019-07-15: First version of the code.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 1. SPECIFY SEQUENCE INFORMATION %%%

% Specify sequence type
seqType = ‘MEGA’; % OPTIONS: - ‘unedited’ (default)
% - ‘MEGA’
% - ‘HERMES’
% - ‘HERCULES’

% Specify editing targets
editTarget = {‘GABA’}; % OPTIONS: - {‘none’} (default if ‘unedited’)
% - {‘GABA’}, {‘GSH’}, {‘Lac’}, {‘PE322’}, {‘PE398’} (for ‘MEGA’)
% - {‘GABA’, ‘GSH’}, {‘GABA’, ‘Lac’}, {‘NAA’, ‘NAAG’} (for 'HERMES’and ‘HERCULES’)

                            % Specify data scenario

dataScenario = ‘invivo’; % OPTIONS: - ‘invivo’ (default)
% - ‘phantom’
% - ‘PRIAM’
% - ‘MRSI’
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 2. SPECIFY DATA HANDLING AND MODELING OPTIONS %%%
% Which spectral registration method should be used? Robust spectral
% registration is default, a frequency restricted spectral registration
% method is also availaible and is linked to the fit range.
opts.SpecReg = ‘RobSpecReg’; % OPTIONS: - ‘RobSpecReg’ (default) Spectral aligment with Water/Lipid removal, using simialrity meric, and weighted averaging
% - ‘ProbSpecReg’ Probabilistic spectral aligment to median target and weighted averaging
% - ‘RestrSpecReg’ Frequency restricted (fit range) spectral aligment, using simialrity meric, and weighted averaging
% - ‘none’

% Which algorithm do you want to align the sub spectra? L2 norm
% optimization is the default. This is only used for edited MRS!
% Which algorithm do you want to align the sub spectra? L2 norm
% optimization is the default. This is only used for edited MRS!
%Perform correction on the metabolite data (raw) or metabolite
%-nulled data (mm).
opts.SubSpecAlignment.mets = ‘L2Norm’; % OPTIONS: - ‘L2Norm’ (default)
% - ‘L1Norm’
% - ‘none’

%Perform eddy-current correction on the metabolite data (raw) or metabolite
%-nulled data (mm). This can either be done similar for all data sets by
%supplying a single value or specified for each dataset individually by supplying
% multiple entries (number has to match the number of datasets) e.g. to perform ECC
% for the second dataset only:
% opts.ECC.raw = [0 1];
% opts.ECC.mm = [0 1];

opts.ECC.raw = 1; % OPTIONS: - ‘1’ (default)
opts.ECC.mm = 1; % - ‘0’ (no)
% - [] array

% Save LCModel-exportable files for each spectrum?
opts.saveLCM = 0; % OPTIONS: - 0 (no, default)
% - 1 (yes)
% Save jMRUI-exportable files for each spectrum?
opts.savejMRUI = 0; % OPTIONS: - 0 (no, default)
% - 1 (yes)

% Save processed spectra in vendor-specific format (SDAT/SPAR, RDA, P)?
opts.saveVendor = 0; % OPTIONS: - 0 (no, default)
% - 1 (yes)

% Save processed spectra in NIfTI-MRS format?
opts.saveNII = 0; % OPTIONS: - 0 (no, default)
% - 1 (yes)

% Save PDF output for all Osprey modules and subjects?
opts.savePDF = 0; % OPTIONS: - 0 (no, default)
% - 1 (yes)

% Choose the fitting algorithm
opts.fit.method = ‘Osprey’; % OPTIONS: - ‘Osprey’ (default)

% Select the metabolites to be included in the basis set as a cell array,
% with entries separates by commas.
% With default Osprey basis sets, you can select the following metabolites:
% Ala, Asc, Asp, bHB, bHG, Cit, Cr, Cystat, CrCH2, EtOH, GABA, GPC, GSH, Glc, Gln,
% Glu, Gly, H2O, mI, Lac, NAA, NAAG, PCh, PCr, PE, Phenyl, sI, Ser,
% Tau, Tyros, MM09, MM12, MM14, MM17, MM20, Lip09, Lip13, Lip20.
% If you enter ‘default’, the basis set will include all of the above
% except for Ala, bHB, bHG, Cit, Cystat, EtOH, Glc, Gly, Phenyl, Ser, and Tyros.
opts.fit.includeMetabs = {‘default’}; % OPTIONS: - {‘default’}
% - {‘full’}
% - {custom}

% Choose the fitting style for difference-edited datasets (MEGA, HERMES, HERCULES)
% (only available for the Osprey fitting method)
opts.fit.style = ‘Separate’; % OPTIONS: - ‘Concatenated’ (default) - will fit DIFF and SUM simultaneously)
% - ‘Separate’ - will fit DIFF and OFF separately

% Determine fitting range (in ppm) for the metabolite and water spectra
opts.fit.range = [0.5 4]; % [ppm] Default: [0.2 4.2]
opts.fit.rangeWater = [2.0 7.4]; % [ppm] Default: [2.0 7.4]
opts.fit.GAP.A = [];
opts.fit.GAP.diff1 = [];

% Determine the baseline knot spacing (in ppm) for the metabolite spectra
opts.fit.bLineKnotSpace = 0.55; % [ppm] Default: 0.4.

% Add macromolecule and lipid basis functions to the fit?
opts.fit.fitMM = 1; % OPTIONS: - 0 (no)
% - 1 (yes, default)

% How do you want to model the co-edited macromolecules at 3 ppm for GABA-edited MRS?
opts.fit.coMM3 = ‘freeGauss’; % OPTIONS: - {‘3to2MM’} (default)
% - {‘3to2MMsoft’}
% - {‘1to1GABA’}
% - {‘1to1GABAsoft’}
% - {‘freeGauss’}
% - {‘fixedGauss’}
% - {‘none’}

opts.fit.FWHMcoMM3 = 14;

% Optional: In case the automatic basisset picker is not working you can manually
% select the path to the basis set in the osprey/fit/basis, i.e.:
% opts.fit.basisSetFile = ‘osprey/fit/basis/3T/philips/mega/press/gaba68/basis_philips_megapress_gaba68.mat’;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 3. SPECIFY MRS DATA AND STRUCTURAL IMAGING FILES %%
% When using single-average Siemens RDA or DICOM files, specify their
% folders instead of single files!

% Clear existing files
clear files files_ref files_w files_nii files_mm

% Data folder in BIDS format
% The filparts(which()) comment is needed to find the data on your machine. If you set
% up the jobFile for your own data you can set a direct path to your data
% folder e.g., data_folder = /Volumes/MyProject/data/’

data_folder = ‘/Users/cuyperslab/Desktop/fMRS_BIDS’;

% The following lines perform an automated set-up of the jobFile which
% takes advatage of the BIDS foramt. If you are not using BIDS (highly
% recommended) you can look at the definitions below the loop to see how to
% set up direct path links to your data.

subs = dir(data_folder);
subs(1:2) = [];
subs = subs([subs.isdir]);
subs = subs(contains({subs.name},‘sub’));
counter = 1;

for kk = 1:length(subs)
% Loop over sessions
sess = dir([subs(kk).folder filesep subs(kk).name]);
sess(1:2) = [];
sess = sess([sess.isdir]);
sess = sess(contains({sess.name},‘ses’));
for ll = 1:length(sess)

    % Specify metabolite data
    % (MANDATORY)
    dir_metabolite    = dir([sess(ll).folder filesep sess(ll).name filesep 'mrs' filesep subs(kk).name '_' sess(ll).name '_megapress' filesep '*.SDAT']);
    files(counter)      = {[dir_metabolite(end).folder filesep dir_metabolite(end).name]};

    % Specify water reference data for eddy-current correction (same sequence as metabolite data!)
    % (OPTIONAL)
    % Leave empty for GE P-files (.7) - these include water reference data by
    % default.
    dir_ref    = dir([sess(ll).folder filesep sess(ll).name filesep 'mrs' filesep subs(kk).name '_' sess(ll).name '_megapress-ref' filesep '*.SDAT']);
    files_ref(counter)  = {[dir_ref(end).folder filesep dir_ref(end).name]};

    % Specify water data for quantification (e.g. short-TE water scan)
    % (OPTIONAL)

% dir_w = dir([sess(ll).folder filesep sess(ll).name filesep ‘mrs’ filesep subs(kk).name ‘_’ sess(ll).name ‘_press-ref’ filesep ‘*.SDAT’]);
% files_w(counter) = {[dir_w(end).folder filesep dir_w(end).name]};

    % Specify metabolite-nulled data for quantification
    % (OPTIONAL)

% files_mm = {};

   % Specify T1-weighted structural imaging data
    % (OPTIONAL)
    % Link to single NIfTI (*.nii) files for Siemens and Philips data
    % Link to DICOM (*.dcm) folders for GE data
    files_nii(counter)  = {[sess(ll).folder filesep sess(ll).name filesep 'anat' filesep subs(kk).name filesep sess(ll).name '_T1w.nii.gz']};

    % External segmentation results
    % (OPTIONAL)
    % Link to NIfTI (*.nii or *.nii.gz) files with segmentation results
    % Add supply gray matter, white matter, and CSF as 1 x 3 cell within a
    % cell array  or a single 4D file in the same order supplied as 1 x 1 cell;

% files_seg(counter) = {{[sess(ll).folder filesep sess(ll).name filesep ‘anat’ filesep subs(kk).name filesep ‘c1’ sess(ll).name ‘_T1w.nii.gz’],…
% [sess(ll).folder filesep sess(ll).name filesep ‘anat’ filesep subs(kk).name filesep ‘c2’ sess(ll).name ‘_T1w.nii.gz’],…
% [sess(ll).folder filesep sess(ll).name filesep ‘anat’ filesep subs(kk).name filesep ‘c3’ sess(ll).name ‘_T1w.nii.gz’]}};

% files_seg(counter) = {{[sess(ll).folder filesep sess(ll).name filesep ‘anat’ filesep subs(kk).name filesep ‘4D’ sess(ll).name ‘_T1w.nii.gz’]}};

    counter             = counter + 1;
end

end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definitions without using BIDS

% You can always supply direct path to each of the files within
% the cell array. For example:

% Specify metabolite data
% (MANDATORY)
% files(counter) = {’/Volumes/MyProject/data/sub-01/mrs/MEGAPRESS_act.SDAT’,…
% ‘/Volumes/MyProject/data/sub-02/mrs/MEGAPRESS_act.SDAT’};

% Specify water reference data for eddy-current correction (same sequence as metabolite data!)
% (OPTIONAL)
% Leave empty for GE P-files (.7) - these include water reference data by
% default.
% files_ref(counter) = {’/Volumes/MyProject/data/sub-01/mrs/MEGAPRESS_ref.SDAT’,…
% ‘/Volumes/MyProject/data/sub-02/mrs/MEGAPRESS_ref.SDAT’};

% Specify water data for quantification (e.g. short-TE water scan)
% (OPTIONAL)
% files_w = = {’/Volumes/MyProject/data/sub-01/mrs/PRESS_ref.SDAT’,…
% ‘/Volumes/MyProject/data/sub-02/mrs/PRESS_ref.SDAT’};

% Specify metabolite-nulled data for quantification
% (OPTIONAL)
% files_mm = {};

% Specify T1-weighted structural imaging data
% (OPTIONAL)
% Link to single NIfTI (*.nii.gz or #.nii) files for GE, Siemens and Philips data
% files_nii = {’/Volumes/MyProject/data/sub-01/anat/T1w.nii.gz’,…
% ‘/Volumes/MyProject/data/sub-02/anat/T1w.nii.gz’};

% External segmentation results
% (OPTIONAL)
% Link to NIfTI (*.nii or *.nii.gz) files with segmentation results
% Add supply gray matter, white matter, and CSF as 1 x 3 cell within a
% cell array or a single 4D file in the same order supplied as 1 x 1 cell;
% files_seg(counter) = {{’/Volumes/MyProject/data/sub-01/anat/c1T1w.nii.gz’,…
% ‘/Volumes/MyProject/data/sub-01/anat/c2T1w.nii.gz’,…
% ‘/Volumes/MyProject/data/sub-01/anat/c3T1w.nii.gz’},…
% {’/Volumes/MyProject/data/sub-02/anat/c1T1w.nii.gz’,…
% ‘/Volumes/MyProject/data/sub-02/anat/c2T1w.nii.gz’,…
% ‘/Volumes/MyProject/data/sub-02/anat/c3T1w.nii.gz’}};
% files_seg(counter) = {{’/Volumes/MyProject/data/sub-01/anat/4DT1w.nii.gz’},…
% {’/Volumes/MyProject/data/sub-02/anat/4DT1w.nii.gz’}};

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 4. SPECIFY STAT FILE %%%
% Supply location of a csv file, which contains possible correlation
% measures and group variables. Each column must start with the name of the
% measure. For the grouping variable use ‘group’ and numbers between 1 and
% the number of included groups. If no group is supplied the data will be
% treated as one group. (You can always use the direct path)

file_stat = fullfile(data_folder, ‘stat.csv’);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 5. SPECIFY OUTPUT FOLDER %%
% The Osprey data container will be saved as a *.mat file in the output
% folder that you specify below. In addition, any exported files (for use
% with jMRUI, TARQUIN, or LCModel) will be saved in sub-folders.

% Specify output folder (you can always use the direct path)
% (MANDATORY)
outputFolder = fullfile(data_folder, ‘derivatives’);

Hi @Koen_Cuypers,

I’ve pushed a fix for this to GitHub. It was related to a bug in the loader function resulting in a wrong reordering of the data

Helge

1 Like