Calcium_Model/multiple_experiment_fitter.py

125 lines
3.3 KiB
Python
Raw Normal View History

import h5py
import pandas as pd
import re
import matplotlib as plt
from Model import Model
from fitter import Fitter
from Data import Data
file = "ltcc_current.h5"
def print_attrs(name, obj):
# print(f"\nAttributes for {name}:")
# for key, val in obj.attrs.items():
# print(f" {key}: {val}")
pass
with h5py.File(file, "r") as h5_file:
h5_file.visititems(print_attrs)
dfs_by_sex_tag_spid = {}
with h5py.File(file, "r") as h5_file:
for eid in h5_file.keys():
attributes = h5_file[eid].attrs
sex = attributes.get("sex")
tag = attributes.get("tag")
spid = attributes.get("spid")
key = f"{sex}_{tag}_{spid}"
if key not in dfs_by_sex_tag_spid:
dfs_by_sex_tag_spid[key] = pd.DataFrame()
row_data = {"experiment_id": eid, "sex": sex, "tag": tag, "spid": spid}
temp_df = pd.DataFrame([row_data])
dfs_by_sex_tag_spid[key] = pd.concat(
[dfs_by_sex_tag_spid[key], temp_df], ignore_index=True
)
# for key, df in dfs_by_sex_tag_spid.items():
# print(f"DataFrame for {key}:")
# print(df)
# print()
def fit_and_plot_dataframes(dfs_by_sex_tag_spid):
for key, df in dfs_by_sex_tag_spid.items():
print(f"Fitting and plotting data for {key}...")
combined_data = []
for eid in df["experiment_id"].tolist():
data = Data(file, group_key=eid)
combined_data.append(data)
collective_data = Data.combine(combined_data)
fit = Fitter(Model, collective_data)
fit.optimize()
res, fig = fit.optimize()
plt.figure()
plt.title(f"Fit results for {key}")
for single_data in combined_data:
plt.plot(single_data.x, single_data.y,
label=f"Experiment {single_data.eid}")
plt.plot(collective_data.x, collective_data.y, 'k-',
label="Combined Fit")
plt.legend()
plt.xlabel("X")
plt.ylabel("Y")
key_cleaned = re.sub(r"[^\w.-]", "", key)
plt.savefig(f"combined_plot_{key_cleaned}.png")
plt.savefig(f"combined_plot_{key_cleaned}.pdf")
plt.close()
fit_hist = pd.DataFrame.from_dict(fit.fit_results, orient="index").T
fit_hist.index.name = "Iterations"
res_filename = f"combined_fit_results_{key}.csv"
res_filename = res_filename.replace(" ", "_").replace(":", "-")
fit_hist.to_csv(res_filename, index=True)
print(f"Finished fitting for {key}. Results saved.")
fit_and_plot_dataframes(dfs_by_sex_tag_spid)
"""
def fit_data():
filename = "ltcc_current.h5"
with h5py.File(filename, "r") as h5:
eids = list(h5.keys())
for eid in eids:
data = Data(filename, group_key=eid)
fit = Fitter(Model, data)
fit.optimize()
res, fig = fit.optimize()
fit_hist = pd.DataFrame.from_dict(fit.fit_results, orient="index").T
fit_hist.index.name = "Iterations"
res_filename = f"fit_results_{eid}.csv"
res_filename = res_filename.replace(" ", "_").replace(":", "-")
fit_hist.to_csv(res_filename, index=True)
eid_cleaned = re.sub(r"[^w.-]", "", eid) # Eemaldab kõik eritähed
fig.savefig(f"plot_{eid_cleaned}.png")
fig.savefig(f"plot_{eid_cleaned}.pdf")
fit_data()
"""