added mc_sim.py, with get_convergence function for checking if experiment converges
This commit is contained in:
45
fsl_mrs_mce/mc_sim.py
Normal file
45
fsl_mrs_mce/mc_sim.py
Normal 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
|
||||||
Reference in New Issue
Block a user