From 1c3fd4bb1aa5f665087f5cf16fced329e270bf2f Mon Sep 17 00:00:00 2001 From: "konstantin.bosbach" Date: Wed, 17 Mar 2021 18:05:53 +0100 Subject: [PATCH] Added setup.py, changed structure --- fsl_mrs_mce/__init__.py | 0 fsl_mrs_mce/synth_and_ana.py | 90 ++++++++++++++++++++++++++++++++++++ setup.py | 10 ++++ 3 files changed, 100 insertions(+) create mode 100644 fsl_mrs_mce/__init__.py create mode 100644 fsl_mrs_mce/synth_and_ana.py create mode 100644 setup.py diff --git a/fsl_mrs_mce/__init__.py b/fsl_mrs_mce/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/fsl_mrs_mce/synth_and_ana.py b/fsl_mrs_mce/synth_and_ana.py new file mode 100644 index 0000000..9acd7ee --- /dev/null +++ b/fsl_mrs_mce/synth_and_ana.py @@ -0,0 +1,90 @@ +# Synthetise new data and analyse it directly to return fit parameters + +import numpy as np +import panda as pd + +from fsl_mrs.core import MRS +from fsl_mrs.utils import plotting, mrs_io +from fsl_mrs.utils.synthetic import synthetic_from_basis as synth +from fsl_mrs.utils.misc import parse_metab_groups +from fsl_mrs.utils.fitting import fit_FSLModel + + +def synth_and_ana(noise_cov, + fit_parameters, fit_snr, fit_sdnoise, fit_varnoise, + df_parameter_synth, basis_path, output_path): + """Synthetise spectra with given noise-covariance, analyse the data and + return table of fitting parameters with a fit-plot. + We ignore Gly. Independent scaling of Macro Molecules.""" + + # Load input + synth_parameter = df_parameter_synth.mean().to_dict() + basis, names, Bheader = mrs_io.read_basis(basis_path) + + # Set the adjustment lists from our input + broadening = [(synth_parameter["gamma_0"], synth_parameter["sigma_0"]), + (synth_parameter["gamma_1"], synth_parameter["sigma_1"])] + shifting = [(synth_parameter["eps_0"]), (synth_parameter["eps_1"])] + baseline = [synth_parameter["B_real_0"], synth_parameter["B_imag_0"], + synth_parameter["B_real_1"], synth_parameter["B_imag_1"], + synth_parameter["B_real_2"], synth_parameter["B_imag_2"]] + coilphase = [synth_parameter["Phi0"]] + + # Generate synthetic data + fidS, headerS, concentrationsS = synth.syntheticFromBasisFile(basis_path, + concentrations=synth_parameter, + ignore=['Gly'], ind_scaling=['mm'], + metab_groups='mm', broadening=broadening, shifting=shifting, + # correct for complex noise + noisecovariance=np.divide( + noise_cov, 2), + # CAVE: baseline chosen manually + baseline=baseline, baseline_ppm=( + .2, 4.2), + coilphase=coilphase, + bandwidth=6000) + # Create mrs object for further use + mrsA = MRS(FID=fidS, header=headerS, basis=basis, + basis_hdr=Bheader[0], names=names) + + mrsA.ignore(['Gly']) + mrsA.processForFitting(ind_scaling=['mm']) + + # Scale it to Input data + # rescaled_FID, __ = rescale_FID(mrsA.FID, 1/mrsA.scaling["FID"]*100) + mrsA.set_FID(fidS) + + metab_groups = parse_metab_groups(mrsA, 'mm') + # Use Voigt line broadening, fit between .2 and 4.2, + # with a 2nd order polynomial baseline + FitArgs = { + 'model': 'voigt', + 'metab_groups': metab_groups, + 'ppmlim': (.2, 4.2), + 'baseline_order': 2} + res = fit_FSLModel(mrsA, **FitArgs) + + # Combine highly correlated metabolites + combinationList = [['Glu', 'Gln'], + ['GPC', 'PCho'], + ['Cr', 'PCr'], + ['Glc', 'Tau'], + ["NAA", "NAAG"]] + res.combine(combinationList) + + # Store parameters from fit + fit_parameters.append(res.fitResults) + fit_snr.append(res.SNR.spectrum) + # Old version of noise + # noise_sd=np.max(np.real(mrsA.get_spec(ppmlim=(.2,4.2))))/res.SNR.spectrum + noise_sd = np.std(mrsA.FID[1000:1600]) + fit_sdnoise.append(noise_sd) + noise_var = np.var(mrsA.FID[1000:1600]) + fit_varnoise.append(noise_var) + + df_params = pd.concat(fit_parameters, ignore_index=True) + df_params['SNR'] = fit_snr + df_params['noise_sd'] = fit_sdnoise + df_params['noise_var'] = fit_varnoise + + return df_params diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..c9120b1 --- /dev/null +++ b/setup.py @@ -0,0 +1,10 @@ +from setuptools import setup + +setup(name='fsl_mrs_mce', + version='0.0.1', + description='A fsl_mrs Moncte Carlo estimation approach', + url='https://git.thoffbauer.de/konstantin.bosbach/fsl_mrs_mce.git', + author='Konstantin Bosbach', + author_email='konstantin.bosbach@mars.uni-freiburg.de', + packages=['fsl_mrs_mce'], + zip_safe=False)