From 885c771e287e22c48228a3b7ed03b686ff938de6 Mon Sep 17 00:00:00 2001 From: Ilse van Herck Date: Mon, 21 Feb 2022 11:47:53 +0100 Subject: [PATCH 01/15] Add scaling factor on kws --- src/simcardems/ORdmm_Land.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/simcardems/ORdmm_Land.py b/src/simcardems/ORdmm_Land.py index b59c856c..6f75e440 100644 --- a/src/simcardems/ORdmm_Land.py +++ b/src/simcardems/ORdmm_Land.py @@ -192,6 +192,7 @@ def default_parameters(disease_state: str = "healthy") -> Dict[str, float]: ("scale_drug_IpCa", 1.0), ("scale_drug_Isacns", 1.0), ("scale_drug_Isack", 1.0), + ("scale_drug_kws", 1.0), # Population factors ("scale_popu_GNa", 1.0), ("scale_popu_GCaL", 1.0), @@ -996,6 +997,7 @@ def F(self, v, s, time=None): scale_drug_IpCa = self._parameters["scale_drug_IpCa"] scale_drug_Isacns = self._parameters["scale_drug_Isacns"] scale_drug_Isack = self._parameters["scale_drug_Isack"] + scale_drug_kws = self._parameters["scale_drug_kws"] # Population factors scale_popu_GNa = self._parameters["scale_popu_GNa"] @@ -1585,10 +1587,10 @@ def F(self, v, s, time=None): zetas2 = (-1 - Zetas) * ufl.conditional(ufl.lt(Zetas, -1), 1, 0) gammasu = gammas * Max(zetas1, zetas2) - F_expressions[39] = kws * scale_popu_kws * XW - XS * gammasu - XS * ksu + F_expressions[39] = kws * scale_drug_kws * scale_popu_kws * XW - XS * gammasu - XS * ksu F_expressions[40] = ( kuw * scale_popu_kuw * XU - - kws * scale_popu_kws * XW + - kws * scale_drug_kws * scale_popu_kws * XW - XW * gammawu - XW * kwu ) From 6631c212b8d527088d46a8690800cdc1011c432f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Feb 2022 10:58:49 +0000 Subject: [PATCH 02/15] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/simcardems/ORdmm_Land.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/simcardems/ORdmm_Land.py b/src/simcardems/ORdmm_Land.py index 6f75e440..0fa40229 100644 --- a/src/simcardems/ORdmm_Land.py +++ b/src/simcardems/ORdmm_Land.py @@ -1587,7 +1587,9 @@ def F(self, v, s, time=None): zetas2 = (-1 - Zetas) * ufl.conditional(ufl.lt(Zetas, -1), 1, 0) gammasu = gammas * Max(zetas1, zetas2) - F_expressions[39] = kws * scale_drug_kws * scale_popu_kws * XW - XS * gammasu - XS * ksu + F_expressions[39] = ( + kws * scale_drug_kws * scale_popu_kws * XW - XS * gammasu - XS * ksu + ) F_expressions[40] = ( kuw * scale_popu_kuw * XU - kws * scale_drug_kws * scale_popu_kws * XW From c580c78390af2bab508eb09b97f1c6bc7f17efc7 Mon Sep 17 00:00:00 2001 From: Ilse van Herck Date: Mon, 21 Feb 2022 16:26:18 +0100 Subject: [PATCH 03/15] Make default threshold for mechanics solve 0.05 --- src/simcardems/setup_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/simcardems/setup_models.py b/src/simcardems/setup_models.py index 17463f2e..cc09ba61 100644 --- a/src/simcardems/setup_models.py +++ b/src/simcardems/setup_models.py @@ -436,7 +436,7 @@ def _solve_mechanics_now(self) -> bool: # dt for the mechanics model should not be larger than 1 ms dt = self._t - self.mech_heart.material.active.t - return (XS_norm + XW_norm >= 0.1) or dt > 0.990 + return (XS_norm + XW_norm >= 0.05) or dt > 0.990 def _pre_mechanics_solve(self) -> None: self._preXS_assigner.assign(self._pre_XS, utils.sub_function(self._vs, 40)) From 8feefbbb17bfa107665e44ac5c6342ee0bb692cb Mon Sep 17 00:00:00 2001 From: Ilse van Herck Date: Mon, 21 Feb 2022 17:07:52 +0100 Subject: [PATCH 04/15] Adjust path to results folder when analysing single file --- src/simcardems/postprocess.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/simcardems/postprocess.py b/src/simcardems/postprocess.py index 255b9a2b..3d0e71d1 100644 --- a/src/simcardems/postprocess.py +++ b/src/simcardems/postprocess.py @@ -476,9 +476,11 @@ def get_biomarkers(dict, outdir, num_models): time[np.where(u == np.min(u))[0][0]] % 1000 ) - ax.plot(PoMm, biomarker_dict[f"m{PoMm}"]["APD90"], "*") + if num_models > 1: + ax.plot(PoMm, biomarker_dict[f"m{PoMm}"]["APD90"], "*") - fig.savefig(outdir.joinpath("APD90_permodel.png"), dpi=300) + if num_models > 1: + fig.savefig(outdir.joinpath("APD90_permodel.png"), dpi=300) with open(outdir.joinpath("biomarkers_PoMcontrol.json"), "w") as f: json.dump(biomarker_dict, f) @@ -511,7 +513,10 @@ def save_popu_json(population_folder, num_models): dict = {} for PoMm in range(1, num_models + 1): print(f"Analyzing model {PoMm}") - results_file = population_folder.joinpath(f"m{PoMm}/results.h5") + if num_models == 1: + results_file = population_folder.joinpath("results.h5") + else: + results_file = population_folder.joinpath(f"m{PoMm}/results.h5") if not results_file.is_file(): raise FileNotFoundError(f"File {results_file} does not exist") From 589317bbcd5ed6acc5c78d58c83dad5b989f55d1 Mon Sep 17 00:00:00 2001 From: Ilse van Herck Date: Mon, 21 Feb 2022 11:47:53 +0100 Subject: [PATCH 05/15] Add scaling factor on kws --- src/simcardems/ORdmm_Land.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/simcardems/ORdmm_Land.py b/src/simcardems/ORdmm_Land.py index b59c856c..6f75e440 100644 --- a/src/simcardems/ORdmm_Land.py +++ b/src/simcardems/ORdmm_Land.py @@ -192,6 +192,7 @@ def default_parameters(disease_state: str = "healthy") -> Dict[str, float]: ("scale_drug_IpCa", 1.0), ("scale_drug_Isacns", 1.0), ("scale_drug_Isack", 1.0), + ("scale_drug_kws", 1.0), # Population factors ("scale_popu_GNa", 1.0), ("scale_popu_GCaL", 1.0), @@ -996,6 +997,7 @@ def F(self, v, s, time=None): scale_drug_IpCa = self._parameters["scale_drug_IpCa"] scale_drug_Isacns = self._parameters["scale_drug_Isacns"] scale_drug_Isack = self._parameters["scale_drug_Isack"] + scale_drug_kws = self._parameters["scale_drug_kws"] # Population factors scale_popu_GNa = self._parameters["scale_popu_GNa"] @@ -1585,10 +1587,10 @@ def F(self, v, s, time=None): zetas2 = (-1 - Zetas) * ufl.conditional(ufl.lt(Zetas, -1), 1, 0) gammasu = gammas * Max(zetas1, zetas2) - F_expressions[39] = kws * scale_popu_kws * XW - XS * gammasu - XS * ksu + F_expressions[39] = kws * scale_drug_kws * scale_popu_kws * XW - XS * gammasu - XS * ksu F_expressions[40] = ( kuw * scale_popu_kuw * XU - - kws * scale_popu_kws * XW + - kws * scale_drug_kws * scale_popu_kws * XW - XW * gammawu - XW * kwu ) From 7b348dae5aa362d0ac53f97f8345fbf39b9e776b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Feb 2022 10:58:49 +0000 Subject: [PATCH 06/15] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/simcardems/ORdmm_Land.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/simcardems/ORdmm_Land.py b/src/simcardems/ORdmm_Land.py index 6f75e440..0fa40229 100644 --- a/src/simcardems/ORdmm_Land.py +++ b/src/simcardems/ORdmm_Land.py @@ -1587,7 +1587,9 @@ def F(self, v, s, time=None): zetas2 = (-1 - Zetas) * ufl.conditional(ufl.lt(Zetas, -1), 1, 0) gammasu = gammas * Max(zetas1, zetas2) - F_expressions[39] = kws * scale_drug_kws * scale_popu_kws * XW - XS * gammasu - XS * ksu + F_expressions[39] = ( + kws * scale_drug_kws * scale_popu_kws * XW - XS * gammasu - XS * ksu + ) F_expressions[40] = ( kuw * scale_popu_kuw * XU - kws * scale_drug_kws * scale_popu_kws * XW From dc64143064cd810c13adaf5d78e21c3a19d3f337 Mon Sep 17 00:00:00 2001 From: Ilse van Herck Date: Mon, 21 Feb 2022 16:26:18 +0100 Subject: [PATCH 07/15] Make default threshold for mechanics solve 0.05 --- src/simcardems/setup_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/simcardems/setup_models.py b/src/simcardems/setup_models.py index 8e915fb0..32e3ff42 100644 --- a/src/simcardems/setup_models.py +++ b/src/simcardems/setup_models.py @@ -436,7 +436,7 @@ def _solve_mechanics_now(self) -> bool: # dt for the mechanics model should not be larger than 1 ms dt = self._t - self.mech_heart.material.active.t - return (XS_norm + XW_norm >= 0.1) or dt > 0.990 + return (XS_norm + XW_norm >= 0.05) or dt > 0.990 def _pre_mechanics_solve(self) -> None: self._preXS_assigner.assign(self._pre_XS, utils.sub_function(self._vs, 40)) From 119f33d2318c3d5094b923ae9fd7fb225ef04d67 Mon Sep 17 00:00:00 2001 From: Ilse van Herck Date: Mon, 21 Feb 2022 17:07:52 +0100 Subject: [PATCH 08/15] Adjust path to results folder when analysing single file --- src/simcardems/postprocess.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/simcardems/postprocess.py b/src/simcardems/postprocess.py index 255b9a2b..3d0e71d1 100644 --- a/src/simcardems/postprocess.py +++ b/src/simcardems/postprocess.py @@ -476,9 +476,11 @@ def get_biomarkers(dict, outdir, num_models): time[np.where(u == np.min(u))[0][0]] % 1000 ) - ax.plot(PoMm, biomarker_dict[f"m{PoMm}"]["APD90"], "*") + if num_models > 1: + ax.plot(PoMm, biomarker_dict[f"m{PoMm}"]["APD90"], "*") - fig.savefig(outdir.joinpath("APD90_permodel.png"), dpi=300) + if num_models > 1: + fig.savefig(outdir.joinpath("APD90_permodel.png"), dpi=300) with open(outdir.joinpath("biomarkers_PoMcontrol.json"), "w") as f: json.dump(biomarker_dict, f) @@ -511,7 +513,10 @@ def save_popu_json(population_folder, num_models): dict = {} for PoMm in range(1, num_models + 1): print(f"Analyzing model {PoMm}") - results_file = population_folder.joinpath(f"m{PoMm}/results.h5") + if num_models == 1: + results_file = population_folder.joinpath("results.h5") + else: + results_file = population_folder.joinpath(f"m{PoMm}/results.h5") if not results_file.is_file(): raise FileNotFoundError(f"File {results_file} does not exist") From a614e3918c9045baf10ec588586aa71b71af1eff Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 1 Mar 2022 09:29:37 +0000 Subject: [PATCH 09/15] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/simcardems/setup_models.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/simcardems/setup_models.py b/src/simcardems/setup_models.py index 32e3ff42..6b0bc6c9 100644 --- a/src/simcardems/setup_models.py +++ b/src/simcardems/setup_models.py @@ -497,7 +497,9 @@ def solve( # Store state every 5 beats if i > 0 and i % int(5000 / self._dt) == 0: io.save_state( - self._state_path.parent.joinpath(f"state_{int(i*self._dt/1000)}beat.h5"), + self._state_path.parent.joinpath( + f"state_{int(i*self._dt/1000)}beat.h5", + ), solver=self.ep_solver, mech_heart=self.mech_heart, coupling=self.coupling, From 31d3beeb032d02a5a9fa20a0f40343f3bd4f4e78 Mon Sep 17 00:00:00 2001 From: Ilse van Herck Date: Tue, 1 Mar 2022 10:34:08 +0100 Subject: [PATCH 10/15] Add hardcoded option for stimulus site --- src/simcardems/ep_model.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/simcardems/ep_model.py b/src/simcardems/ep_model.py index 7c5cf99c..b1d8607e 100644 --- a/src/simcardems/ep_model.py +++ b/src/simcardems/ep_model.py @@ -54,8 +54,16 @@ def setup_ep_model(cellmodel, mesh): # Mark stimulation region defined as [0, L]^3 S1_marker = 1 - S1_markers = dolfin.MeshFunction("size_t", mesh, mesh.topology().dim()) - S1_markers.set_all(S1_marker) # Mark the whole mesh + + setstim = "stimall" + if setstim == "stimpart": #Stimpart + L = 2.0 + S1_subdomain = dolfin.CompiledSubDomain("x[0] <= L + DOLFIN_EPS",L=L) + S1_markers = dolfin.MeshFunction("size_t", mesh, mesh.topology().dim()) + S1_subdomain.mark(S1_markers, S1_marker) + elif setstim == "stimall": #Stimall + S1_markers = dolfin.MeshFunction("size_t", mesh, mesh.topology().dim()) + S1_markers.set_all(S1_marker) # Mark the whole mesh # Define stimulation (NB: region of interest carried by the mesh # and assumptions in cbcbeat) From 133ab596f23c9a02e4e76aeebae6437eb5cfe970 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 1 Mar 2022 09:35:27 +0000 Subject: [PATCH 11/15] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/simcardems/ep_model.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/simcardems/ep_model.py b/src/simcardems/ep_model.py index b1d8607e..57e370fb 100644 --- a/src/simcardems/ep_model.py +++ b/src/simcardems/ep_model.py @@ -56,12 +56,12 @@ def setup_ep_model(cellmodel, mesh): S1_marker = 1 setstim = "stimall" - if setstim == "stimpart": #Stimpart + if setstim == "stimpart": # Stimpart L = 2.0 - S1_subdomain = dolfin.CompiledSubDomain("x[0] <= L + DOLFIN_EPS",L=L) + S1_subdomain = dolfin.CompiledSubDomain("x[0] <= L + DOLFIN_EPS", L=L) S1_markers = dolfin.MeshFunction("size_t", mesh, mesh.topology().dim()) S1_subdomain.mark(S1_markers, S1_marker) - elif setstim == "stimall": #Stimall + elif setstim == "stimall": # Stimall S1_markers = dolfin.MeshFunction("size_t", mesh, mesh.topology().dim()) S1_markers.set_all(S1_marker) # Mark the whole mesh From 74d118b734690aa163852ae5a60acb48f0812903 Mon Sep 17 00:00:00 2001 From: Ilse van Herck Date: Wed, 16 Mar 2022 16:15:37 +0100 Subject: [PATCH 12/15] Add scaling factor for kuw --- src/simcardems/ORdmm_Land.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/simcardems/ORdmm_Land.py b/src/simcardems/ORdmm_Land.py index 0fa40229..8a096604 100644 --- a/src/simcardems/ORdmm_Land.py +++ b/src/simcardems/ORdmm_Land.py @@ -193,6 +193,7 @@ def default_parameters(disease_state: str = "healthy") -> Dict[str, float]: ("scale_drug_Isacns", 1.0), ("scale_drug_Isack", 1.0), ("scale_drug_kws", 1.0), + ("scale_drug_kuw", 1.0), # Population factors ("scale_popu_GNa", 1.0), ("scale_popu_GCaL", 1.0), @@ -998,6 +999,7 @@ def F(self, v, s, time=None): scale_drug_Isacns = self._parameters["scale_drug_Isacns"] scale_drug_Isack = self._parameters["scale_drug_Isack"] scale_drug_kws = self._parameters["scale_drug_kws"] + scale_drug_kuw = self._parameters["scale_drug_kuw"] # Population factors scale_popu_GNa = self._parameters["scale_popu_GNa"] @@ -1591,7 +1593,7 @@ def F(self, v, s, time=None): kws * scale_drug_kws * scale_popu_kws * XW - XS * gammasu - XS * ksu ) F_expressions[40] = ( - kuw * scale_popu_kuw * XU + kuw * scale_drug_kuw * scale_popu_kuw * XU - kws * scale_drug_kws * scale_popu_kws * XW - XW * gammawu - XW * kwu From e3a45d0494ea2c7037cbc47f11debcd4d763c0a2 Mon Sep 17 00:00:00 2001 From: IlsevanHerck Date: Thu, 17 Mar 2022 15:56:58 +0100 Subject: [PATCH 13/15] Track and export mechanics variables --- src/simcardems/setup_models.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/simcardems/setup_models.py b/src/simcardems/setup_models.py index 6b0bc6c9..3181d6bb 100644 --- a/src/simcardems/setup_models.py +++ b/src/simcardems/setup_models.py @@ -391,6 +391,9 @@ def _setup_assigners(self): ) self._assign_displacement() + self.CaTrpn, self.CaTrpn_assigner = utils.setup_assigner(self._vs, 42) + self.TmB, self.TmB_assigner = utils.setup_assigner(self._vs, 43) + def _assign_displacement(self): self._u_assigner.assign( self._u, @@ -400,6 +403,8 @@ def _assign_displacement(self): def _assign_ep(self): self._v_assigner.assign(self._v, utils.sub_function(self._vs, 0)) self._Ca_assigner.assign(self._Ca, utils.sub_function(self._vs, 45)) + self.CaTrpn_assigner.assign(self.CaTrpn, utils.sub_function(self._vs, 42)) + self.TmB_assigner.assign(self.TmB, utils.sub_function(self._vs, 43)) def store(self): # Assign u, v and Ca for postprocessing @@ -422,6 +427,12 @@ def _setup_datacollector(self): ("ep", "Ca", self._Ca), ("mechanics", "lmbda", self.coupling.lmbda_mech), ("mechanics", "Ta", self.mech_heart.material.active.Ta_current), + ("ep", "CaTrpn", self.CaTrpn), + ("ep", "TmB", self.TmB), + ("mechanics", "zetas", self.coupling.Zetas_mech), + ("mechanics", "zetaw", self.coupling.Zetaw_mech), + ("mechanics", "XS", self.coupling.XS_mech), + ("mechanics", "XW", self.coupling.XW_mech), ]: self.collector.register(group, name, f) From 47e6b27ad73c3625793abefebc1b2ac11d828bda Mon Sep 17 00:00:00 2001 From: Ilse van Herck Date: Thu, 17 Mar 2022 16:12:54 +0100 Subject: [PATCH 14/15] Plot mechanics variables --- src/simcardems/postprocess.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/simcardems/postprocess.py b/src/simcardems/postprocess.py index 3d0e71d1..55bbc919 100644 --- a/src/simcardems/postprocess.py +++ b/src/simcardems/postprocess.py @@ -282,7 +282,8 @@ def plot_peaks(fname, data, threshold): def plot_state_traces(results_file): - fig, ax = plt.subplots(2, 2, figsize=(10, 8), sharex=True) + fig, ax = plt.subplots(2, 2, sharex=True) + fig_mech, ax_mech = plt.subplots(2, 2, sharex=True) results_file = Path(results_file) if not results_file.is_file(): raise FileNotFoundError(f"File {results_file} does not exist") @@ -292,7 +293,7 @@ def plot_state_traces(results_file): loader = DataLoader(results_file) bnd = {"ep": Boundary(loader.ep_mesh), "mechanics": Boundary(loader.mech_mesh)} - all_names = {"mechanics": ["lmbda", "Ta"], "ep": ["V", "Ca"]} + all_names = {"mechanics": ["lmbda", "Ta", "zetas", "zetaw", 'XS', "XW"], "ep": ["V", "Ca", "CaTrpn", "TmB"]} values = { group: {name: np.zeros(len(loader.time_stamps)) for name in names} @@ -348,6 +349,22 @@ def plot_state_traces(results_file): ) fig.savefig(outdir.joinpath("state_traces.png"), dpi=300) + ax_mech[0, 0].plot(times, values["mechanics"]["zetas"]) + ax_mech[0, 0].plot(times, values["mechanics"]["zetaw"]) + ax_mech[1, 0].plot(times, values["mechanics"]["XS"]) + ax_mech[1, 0].plot(times, values["mechanics"]["XW"]) + ax_mech[0, 1].plot(times, values["ep"]["CaTrpn"]) + ax_mech[1, 1].plot(times, values["ep"]["TmB"]) + + ax_mech[0, 0].set_title("zeta(s/w)") + ax_mech[1, 0].set_title("X(S/W)") + ax_mech[0, 1].set_title("CaTrpn") + ax_mech[1, 1].set_title("TmB") + ax_mech[1, 0].set_xlabel("Time (ms)") + ax_mech[1, 1].set_xlabel("Time (ms)") + for axi in ax_mech.flatten(): + axi.grid() + fig_mech.savefig(outdir.joinpath("state_traces_mechanics.png"), dpi=300) def make_xdmffiles(results_file): From 8e0c819724710c75a5036829c1a199c6604047bf Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 7 Apr 2022 11:25:55 +0000 Subject: [PATCH 15/15] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/simcardems/postprocess.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/simcardems/postprocess.py b/src/simcardems/postprocess.py index 55bbc919..253fb434 100644 --- a/src/simcardems/postprocess.py +++ b/src/simcardems/postprocess.py @@ -293,7 +293,10 @@ def plot_state_traces(results_file): loader = DataLoader(results_file) bnd = {"ep": Boundary(loader.ep_mesh), "mechanics": Boundary(loader.mech_mesh)} - all_names = {"mechanics": ["lmbda", "Ta", "zetas", "zetaw", 'XS', "XW"], "ep": ["V", "Ca", "CaTrpn", "TmB"]} + all_names = { + "mechanics": ["lmbda", "Ta", "zetas", "zetaw", "XS", "XW"], + "ep": ["V", "Ca", "CaTrpn", "TmB"], + } values = { group: {name: np.zeros(len(loader.time_stamps)) for name in names} @@ -366,6 +369,7 @@ def plot_state_traces(results_file): axi.grid() fig_mech.savefig(outdir.joinpath("state_traces_mechanics.png"), dpi=300) + def make_xdmffiles(results_file): loader = DataLoader(results_file)