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