From 8c701b262ddc621c795e7a6b14c2d91eef1e47a9 Mon Sep 17 00:00:00 2001 From: Tamas Borbath <tamas.borbath@tuebingen.mpg.de> Date: Thu, 25 Mar 2021 10:27:15 +0100 Subject: [PATCH] Updated calculateMolal_MolarConcentrations.m with the tissue densities calculation Updated the T1 values of metabolites in getRelaxationTimes --- .../calculateMolal_MolarConcentrations.m | 21 +++++++++++++------ postprocessing/getRelaxationTimes.m | 15 +++++++++++-- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/postprocessing/calculateMolal_MolarConcentrations.m b/postprocessing/calculateMolal_MolarConcentrations.m index 2ec51e2..0c0fdc5 100644 --- a/postprocessing/calculateMolal_MolarConcentrations.m +++ b/postprocessing/calculateMolal_MolarConcentrations.m @@ -64,6 +64,13 @@ a_WM = 0.65; a_GM = 0.78; a_CSF = 0.97; +% tissue densities (g/mL) +% (Brooks R. - 1980 - Explanation of cerebral white - gray contrast in computer tomography +% additional reference in Kreis R. & Ernst T. - 1993 - Absolute Quantitation of Water and Metabolites in the Human Brain. I. Compartments and Water) +d_WM = 1.04; +d_GM = 1.04; +d_CSF = 1; + %T1 relaxation times of water in the given tissue type [ms] at 9.4T : From %Gisela Hagberg 2017 Neuroimage T1_GM = 2120; @@ -117,10 +124,12 @@ if strcmpi(doMolal_Molar, 'Molal') %MOLAL calculations %Calculate water fraction from volume fractions obtained from segmentation %and relative water fraction in each segmentation f_sum = fv_GM .* a_GM + fv_WM .* a_WM + fv_CSF .* a_CSF; + %corrected version considering also the water densities + f_sum = fv_GM .* a_GM .* d_GM + fv_WM .* a_WM .* d_WM + fv_CSF .* a_CSF .* d_CSF; - f_GM = fv_GM .* a_GM ./ f_sum; - f_WM = fv_WM .* a_WM ./ f_sum; - f_CSF = fv_CSF .* a_CSF ./f_sum; + f_GM = fv_GM .* a_GM .* d_GM ./ f_sum; + f_WM = fv_WM .* a_WM .* d_WM ./ f_sum; + f_CSF = fv_CSF .* a_CSF .* d_CSF ./f_sum; %% calculate true water concentration for each subject : density terms do not come in molality water_conc_relaxation_corrected = conc_pure_water * ... @@ -136,9 +145,9 @@ else %MOLAR calculations %% calculate true water concentration for each subject water_conc_relaxation_corrected = conc_pure_water * ... - ( fv_GM * a_GM * R_GM + ... correction for gray matter concentration - fv_WM * a_WM * R_WM + ... correction for white matter concentration - fv_CSF * a_CSF * R_CSF ) / ... correction for cerebrospinal fluid concentration + ( fv_GM * a_GM * d_GM * R_GM + ... correction for gray matter concentration + fv_WM * a_WM * d_WM * R_WM + ... correction for white matter concentration + fv_CSF * a_CSF * d_CSF * R_CSF ) / ... correction for cerebrospinal fluid concentration (1 - fv_CSF); end diff --git a/postprocessing/getRelaxationTimes.m b/postprocessing/getRelaxationTimes.m index 49f5b99..3edf2c3 100644 --- a/postprocessing/getRelaxationTimes.m +++ b/postprocessing/getRelaxationTimes.m @@ -102,9 +102,20 @@ switch compare %values taken from A.Wright ISMRM 2019 abstract metaboliteNamesT1 = {'NAA-asp'; 'NAA-ace'; 'tCho'; 'mI'; 'Gln'; 'Glu'; 'Cr-CH2'; 'Cr-CH3'; 'Tau'; 'GSH'; 'Glx'; 'tNAA'}; %'GABA' T1_met_known = [1158 ; 1602 ; 1111; 1309 ; 1831; 1405 ; 1162 ; 1565 ; 1961 ; 1310 ; 1618 ; 1380 ]; %'966' (Gaba) + %values taken from A.Wright MRM 2021 paper (revision 2) + metaboliteNamesT1 = {'NAA-asp'; 'NAA-ace'; 'tCho'; 'mI'; 'Gln'; 'Glu'; 'Cr-CH2'; 'Cr-CH3'; 'Tau'; 'GSH'; 'Asp'; 'GABA'; 'Glyc'; 'NAAG'; 'PE'; 'Scyllo'; 'Glx'; 'tNAA'; 'tCr'; 'tCho+'; 'mI+Glyc'}; + T1_met_known = [1137 ; 1701 ; 1161; 1499; 1214; 1343 ; 1118 ; 1678 ; 2063; 1505; 1300; 1240; 739; 1185; 1305; 1632; 1366; 1385; 1528; 1241; 1540]; defaultT1 = round(mean(T1_met_known(1:end-1)),2); %average of the MM T1 times - [T1_met, metaboliteNames] = matchRelaxationTimes(T1_met_known, metaboliteNamesT1, defaultT1, metaboliteNames, true, mapMet_Names); + [T1_met, metaboliteNames] = matchRelaxationTimes(T1_met_known, metaboliteNamesT1, defaultT1, metaboliteNames, true, mapMet_Names);%CHECK ME + + Cr_names = {'Cr+PCr'}; + Cr_to_replace = {'Cr', 'PCr', 'Cr+PCr'}; + [T1_met] = replaceRelaxationTimes(T1_met_known, metaboliteNamesT1, defaultT1, Cr_names, true, mapMetNamesDisplay, metaboliteNames, T1_met, Cr_to_replace); + + NAA_names = {'NAA+NAAG'};%trick to use tNAA - for T1 the name was used as NAA(CH2)+NAA(CH3), while normally it means NAA+NAAG + NAA_to_replace = {'NAA','NAA+NAAG'}; + [T1_met] = replaceRelaxationTimes(T1_met_known, metaboliteNamesT1, defaultT1, NAA_names, true, mapMetNamesDisplay, metaboliteNames, T1_met, NAA_to_replace); %get T2 values % load(['D:\Software\Spectro Data\DATA_df\Output_UF\meanT2s.mat'], 'acceptableMeanT2s', 'metaboliteNamesDisplay'); @@ -138,7 +149,7 @@ numberOfDesiredMetabolites = length(desiredMetaboliteNames); desiredRelaxationTimes = zeros(1,numberOfDesiredMetabolites); for index = 1:numberOfDesiredMetabolites if exist('mapMet_Names','var') - desiredMetaboliteName = mapMet_Names(desiredMetaboliteNames{index}) + desiredMetaboliteName = mapMet_Names(desiredMetaboliteNames{index}); else desiredMetaboliteName = desiredMetaboliteNames{index}; end -- GitLab