%% 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'}; {'GSH'}, {'Lac'}, {'PE322'}, {'PE398'}          % 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'
opts.UnstableWater = 0;
%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                = 1;                % OPTIONS:    - 0 (no, default)
                                                %             - 1 (yes)
% Save jMRUI-exportable files for each spectrum?
opts.savejMRUI              = 1;                % 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                = 1;                % OPTIONS:    - 0 (no)
                                                %             - 1 (yes, default)

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

% Save mat file of the compiled fitting parameters?
opts.exportParams.flag      = 0;                % Options:    - 0 (no, default)
                                                %             - 1 (yes)
opts.exportParams.path      = '';               % Replace with string for the path 
                                                % to the save directory

% 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              = '3to2MM';      % 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';

% Optional: Deface the strucutral images in the Coreg/Seg figures for HIPAA
% compliance 
opts.img.deface             = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 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 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 = 'C:\Users\22404132t\Bureau\osprey\osprey-develop\PROJET\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 = variable dans laquelle on stocke le fichier BIDS 
subs(1:2)  = []; %permet de supp les 2 premiers éléments de la liste
subs = subs([subs.isdir]); % permet de garder que les sous dossiers 
subs = subs(contains({subs.name},'sub')); % on garde que les dossiers commençant par sub 
counter    = 1;


for kk = 1:35
    
%length(subs) %boucle pour le nombre de sujet, un seul sujet pour ce script, kk = sujet 

 % Loop over sessions
    sess        = dir([subs(kk).folder filesep subs(kk).name]); %subs = variable dans laquelle on stocke le dossier parent de sub1
    sess(1:2)   = []; %permet de supp les 2 premiers éléments de la liste
    sess        = sess([sess.isdir]); % permet de garder que les sous dossiers 
    sess        = sess(contains({sess.name},'ses')); % on garde que les dossiers commençant par ses
    for ll = 1:length(sess) % boucle pour le nombre de session, toujours une session 


% Chemin du sujet
chemin_sujet = fullfile(data_folder, subs(kk).name);

% Chemins des dossiers MRS et anat
chemin_mrs_parent = fullfile(chemin_sujet, sess(ll).name, 'mrs');
chemin_anat = fullfile(chemin_sujet, sess(ll).name, 'anat');

% 1. Cherche le fichier métabolite (.dat)
dir_metabolite = dir([chemin_mrs_parent filesep subs(kk).name '_mpress' filesep subs(kk).name '_svs_mpress.dat']); %construit le chemin vers le fichier mrs du sujet 1
files{counter} = [dir_metabolite(1).folder filesep dir_metabolite(1).name]; % sauvegarde le chemin du fichier 

% 2. Cherche le fichier MRS 2
dir_metabolite2 = dir([chemin_mrs_parent filesep subs(kk).name '_mpress2' filesep subs(kk).name '_svs_mpress2.dat']); %construit le chemin vers le fichier mrs du sujet 1
files_met2{counter} = [dir_metabolite2(1).folder filesep dir_metabolite2(1).name]; % sauvegarde le chemin du fichier 

 
% 3. Cherche le fichier référence (W)
dir_ref = dir([chemin_mrs_parent filesep subs(kk).name '_mpressW' filesep subs(kk).name '_svs_mpressW.dat']);%construit le chemin vers le fichier ref du sujet 1
files_ref{counter} = [dir_ref(1).folder filesep dir_ref(1).name]; % sauvegarde le chemin du fichier 
 

% 4. Cherche le fichier eau (PRESS)
dir_water = dir([chemin_mrs_parent filesep subs(kk).name '_SRM_W30' filesep 'meas_*_SRM_W30.dat' ]);%construit le chemin vers le fichier w du sujet 1
files_w{counter} = [dir_water(1).folder filesep dir_water(1).name];

% 4. Chemin pour le fichier anat
dir_anat = dir([chemin_anat filesep subs(kk).name '_T1w.nii.gz']);
files_nii{counter} = [dir_anat(1).folder filesep dir_anat(1).name];

counter             = counter + 1;
    end
end

% 5. Fichier stat 
file_stat = 'C:\Users\22404132t\Bureau\osprey\osprey-develop\PROJET\stat.csv'


% 6. Dossier de sortie
outputFolder =  'C:\Users\22404132t\Desktop\osprey\osprey-develop\PROJET\finaletest'

