added mc_sim.py, with get_convergence function for checking if experiment converges

This commit is contained in:
2021-03-26 10:20:52 +01:00
parent 77737705f0
commit 675a36f2e5

45
fsl_mrs_mce/mc_sim.py Normal file
View File

@@ -0,0 +1,45 @@
# mc_sim.py - Helpers for Monte-Carlo style simulations
#
# Author: Konstantin E Bosbach <konstantin.bosbach@mars.uni-freiburg.de>
import numpy as np
import pandas as pd
def get_convergence(
output_file_paths, molecule, crit_mean=0.01, crit_std=0.10
):
"""Function checks if last two files contain converging datasets."""
if len(output_file_paths) < 2:
print("One iteration, therefore no convergence.")
return False
else:
newer_fit_results = pd.read_csv(output_file_paths[-1])
older_fit_results = pd.read_csv(output_file_paths[-2])
newer_mean = newer_fit_results[molecule].mean()
older_mean = older_fit_results[molecule].mean()
# Normalize with mean of latest dataset, to get deviation
norm = newer_mean
measure_mean = abs(abs(np.abs(newer_mean) - abs(older_mean))/norm)
newer_std = newer_fit_results[molecule].std()
older_std = older_fit_results[molecule].std()
measure_std = abs(abs(np.abs(newer_std) - abs(older_std))/norm)
if measure_mean <= crit_mean:
if measure_std <= crit_std:
convergence = True
else:
convergence = False
print(
"Convergence result for ", output_file_paths[-1], " and ",
output_file_paths[-2], "\n\t\t\t",
measure_mean, measure_std, "convergence: ", str(convergence)
)
return convergence