From fb6e81ca1e86e62e2008160e777c8ec94a352ee2 Mon Sep 17 00:00:00 2001 From: Levan Bokeria Date: Tue, 11 Feb 2025 16:32:44 +0000 Subject: [PATCH] replacing commponents with components --- ModularCirc/Analysis/BaseAnalysis.py | 34 ++++---- ModularCirc/Models/KPat5MixedModel.py | 82 +++++++++---------- .../Models/KorakianitisMaynardModel.py | 68 +++++++-------- .../Models/KorakianitisMixedMaynardModel.py | 66 +++++++-------- ModularCirc/Models/KorakianitisMixedModel.py | 66 +++++++-------- ModularCirc/Models/KorakianitisModel.py | 62 +++++++------- .../Models/MixedHeartMaynard4eWindkessel.py | 82 +++++++++---------- ModularCirc/Models/NaghaviModel.py | 58 ++++++------- ModularCirc/Models/OdeModel.py | 14 ++-- README.md | 4 +- tests/test_KorakianitisMixedModel.py | 16 ++-- 11 files changed, 276 insertions(+), 276 deletions(-) diff --git a/ModularCirc/Analysis/BaseAnalysis.py b/ModularCirc/Analysis/BaseAnalysis.py index 1e7b1b3..48a47b1 100644 --- a/ModularCirc/Analysis/BaseAnalysis.py +++ b/ModularCirc/Analysis/BaseAnalysis.py @@ -67,7 +67,7 @@ def plot_t_v(self, component:str, ax=None, time_units:str='s', volume_units:str= if ax is None: _, ax = plt.subplots(figsize=(5,5)) ax.plot(self.tsym, - self.model.commponents[component].V.values[self.tind], + self.model.components[component].V.values[self.tind], linewidth=4, label=component, linestyle=linestyle) @@ -81,7 +81,7 @@ def plot_t_p(self, component:str, ax=None, time_units:str='s', pressure_units:st if ax is None: _, ax = plt.subplots(figsize=(5,5)) ax.plot(self.tsym, - self.model.commponents[component].P.values[self.tind], + self.model.components[component].P.values[self.tind], linewidth=4, label=component, linestyle=linestyle) @@ -95,8 +95,8 @@ def plot_p_v_loop(self, component, ax=None, volume_units:str='mL', pressure_unit if ax is None: _, ax = plt.subplots(figsize=(5,5)) ax.plot( - self.model.commponents[component].V.values[self.tind], - self.model.commponents[component].P.values[self.tind], + self.model.components[component].V.values[self.tind], + self.model.components[component].P.values[self.tind], linewidth=4, ) ax.set_title(component.upper() + ': PV loop') @@ -109,7 +109,7 @@ def plot_t_q_out(self, component:str, ax=None, time_units:str='s', volume_units: _, ax = plt.subplots(figsize=(5,5)) ax.plot( self.tsym, - self.model.commponents[component].Q_o.values[self.tind], + self.model.components[component].Q_o.values[self.tind], linewidth=4, linestyle=linestyle, label=component, @@ -124,8 +124,8 @@ def plot_fluxes(self, component:str, ax=None, time_units:str='s', volume_units:s _, ax = plt.subplots(figsize=(5,5)) ax.plot( self.tsym, - self.model.commponents[component].Q_i.values[self.tind] - - self.model.commponents[component].Q_o.values[self.tind], + self.model.components[component].Q_i.values[self.tind] - + self.model.components[component].Q_o.values[self.tind], linestyle='-', linewidth=4, alpha=0.6, @@ -133,14 +133,14 @@ def plot_fluxes(self, component:str, ax=None, time_units:str='s', volume_units:s ) ax.plot( self.tsym, - self.model.commponents[component].Q_i.values[self.tind], + self.model.components[component].Q_i.values[self.tind], linestyle=':', linewidth=4, label=f'{component} $Q_i$' ) ax.plot( self.tsym, - self.model.commponents[component].Q_o.values[self.tind], + self.model.components[component].Q_o.values[self.tind], linestyle=':', linewidth=4, label=f'{component} $Q_o$' @@ -157,7 +157,7 @@ def plot_valve_opening(self, component:str, ax=None, time_units:str='s'): _, ax = plt.subplots(figsize=(5,5)) ax.plot( self.tsym, - self.model.commponents[component].PHI.values[self.tind], + self.model.components[component].PHI.values[self.tind], linestyle='-', linewidth=4, label=f'{component} $\phi$' @@ -182,7 +182,7 @@ def compute_opening_closing_valve(self, component:str, shift:float=0.0): shift : float a time shift value which takes into account that the contraction of the atria starts before the ventricles. """ - valve = self.model.commponents[component] + valve = self.model.components[component] nshift= int(shift/ self.model.time_object.dt) self.valves[component] = ValveData(component) @@ -214,7 +214,7 @@ def compute_ventricle_volume_limits(self, component:str, vic:int, voc:int)->None voc : int the time index corresponding to the outflow valve closing """ - ventricle = self.model.commponents[component] + ventricle = self.model.components[component] volume = ventricle.V.values[self.tind] self.ventricles[component] = VentricleData(component) @@ -234,7 +234,7 @@ def compute_cardiac_output(self, component:str)->float: CO : float the cardiac ouput value """ - valve = self.model.commponents[component] + valve = self.model.components[component] dt = self.model.time_object.dt T = self.model.time_object.tcycle / 60.0 @@ -255,7 +255,7 @@ def compute_ejection_fraction(self, component:str)->float: CO : float the ejection fraction """ - ventricle = self.model.commponents[component] + ventricle = self.model.components[component] edv = ventricle.V.values[self.tind].max() esv = ventricle.V.values[self.tind].min() self.EF = (edv - esv) / edv @@ -272,7 +272,7 @@ def compute_artery_pressure_range(self, component:str)->tuple[float]: DP (float) : diastolic pressure SP (float) : systolic pressure """ - c = self.model.commponents[component] + c = self.model.components[component] p = c.P_i.values[self.tind] return (np.min(p), np.max(p)) @@ -290,10 +290,10 @@ def compute_end_systolic_pressure(self, component:str, upstream:str): ESP : float vessel end systolic pressure """ - c = self.model.commponents[component] + c = self.model.components[component] p = c.P_i.values[self.tind] - uc = self.model.commponents[upstream] + uc = self.model.components[upstream] up = uc.P_i.values[self.tind] flag = up > p diff --git a/ModularCirc/Models/KPat5MixedModel.py b/ModularCirc/Models/KPat5MixedModel.py index 20cb50f..fa8ad1e 100644 --- a/ModularCirc/Models/KPat5MixedModel.py +++ b/ModularCirc/Models/KPat5MixedModel.py @@ -41,96 +41,96 @@ def __init__(self, time_setup_dict, parobj:po=k2006, supress_printing:bool=False class_ = HC_mixed_elastance else: raise Exception(f'Component name {key} not in the model list.') - self.commponents[key] = class_(name=name, + self.components[key] = class_(name=name, time_object=self.time_object, **parobj[key].to_dict()) if key not in parobj._valves: self.set_v_sv(key) # else: # self.set_phi_sv(key) - self.commponents[key].setup() + self.components[key].setup() - self.connect_modules(self.commponents['lv'], - self.commponents['ao'], + self.connect_modules(self.components['lv'], + self.components['ao'], plabel='p_lv', qlabel='q_ao') - self.connect_modules(self.commponents['ao'], - self.commponents['sas'], + self.connect_modules(self.components['ao'], + self.components['sas'], plabel='p_sas', qlabel='q_ao') - self.connect_modules(self.commponents['sas'], - self.commponents['sat'], + self.connect_modules(self.components['sas'], + self.components['sat'], plabel='p_sat', qlabel='q_sas') - self.connect_modules(self.commponents['sat'], - self.commponents['svn'], + self.connect_modules(self.components['sat'], + self.components['svn'], plabel='p_svn', qlabel='q_sat') - self.connect_modules(self.commponents['svn'], - self.commponents['ra'], + self.connect_modules(self.components['svn'], + self.components['ra'], plabel='p_ra', qlabel='q_svn') - self.connect_modules(self.commponents['ra'], - self.commponents['ti'], + self.connect_modules(self.components['ra'], + self.components['ti'], plabel='p_ra', qlabel='q_ti') - self.connect_modules(self.commponents['ti'], - self.commponents['rv'], + self.connect_modules(self.components['ti'], + self.components['rv'], plabel='p_rv', qlabel='q_ti') - self.connect_modules(self.commponents['rv'], - self.commponents['po'], + self.connect_modules(self.components['rv'], + self.components['po'], plabel='p_rv', qlabel='q_po') - self.connect_modules(self.commponents['po'], - self.commponents['pas'], + self.connect_modules(self.components['po'], + self.components['pas'], plabel='p_pas', qlabel='q_po') ############################################ - self.connect_modules(self.commponents['pas'], - self.commponents['pat0'], + self.connect_modules(self.components['pas'], + self.components['pat0'], plabel='p_pat0', qlabel='q_pas') - self.connect_modules(self.commponents['pat0'], - self.commponents['pat1'], + self.connect_modules(self.components['pat0'], + self.components['pat1'], plabel='p_pat1', qlabel='q_pat0') - self.connect_modules(self.commponents['pat1'], - self.commponents['pat2'], + self.connect_modules(self.components['pat1'], + self.components['pat2'], plabel='p_pat2', qlabel='q_pat1') - self.connect_modules(self.commponents['pat2'], - self.commponents['pat3'], + self.connect_modules(self.components['pat2'], + self.components['pat3'], plabel='p_pat3', qlabel='q_pat2') - self.connect_modules(self.commponents['pat3'], - self.commponents['pat4'], + self.connect_modules(self.components['pat3'], + self.components['pat4'], plabel='p_pat4', qlabel='q_pat3') ############################################ - self.connect_modules(self.commponents['pat4'], - self.commponents['pvn'], + self.connect_modules(self.components['pat4'], + self.components['pvn'], plabel='p_pvn', qlabel='q_pat4') ############################################ - self.connect_modules(self.commponents['pvn'], - self.commponents['la'], + self.connect_modules(self.components['pvn'], + self.components['la'], plabel='p_la', qlabel='q_pvn') - self.connect_modules(self.commponents['la'], - self.commponents['mi'], + self.connect_modules(self.components['la'], + self.components['mi'], plabel='p_la', qlabel='q_mi') - self.connect_modules(self.commponents['mi'], - self.commponents['lv'], + self.connect_modules(self.components['mi'], + self.components['lv'], plabel='p_lv', qlabel='q_mi') - for component in self.commponents.values(): + for component in self.components.values(): component.setup() # def set_phi_sv(self, comp_key:str) -> None: # phi_key = 'phi_' + comp_key - # self._state_variable_dict[phi_key] = self.commponents[comp_key]._PHI + # self._state_variable_dict[phi_key] = self.components[comp_key]._PHI # self._state_variable_dict[phi_key].set_name(phi_key) - # self.all_sv_data[phi_key] = self.commponents[comp_key].PHI \ No newline at end of file + # self.all_sv_data[phi_key] = self.components[comp_key].PHI \ No newline at end of file diff --git a/ModularCirc/Models/KorakianitisMaynardModel.py b/ModularCirc/Models/KorakianitisMaynardModel.py index 0dbd551..7874e46 100644 --- a/ModularCirc/Models/KorakianitisMaynardModel.py +++ b/ModularCirc/Models/KorakianitisMaynardModel.py @@ -37,78 +37,78 @@ def __init__(self, time_setup_dict, parobj:po=k2006) -> None: class_ = HC_constant_elastance else: raise Exception(f'Component name {key} not in the model list.') - self.commponents[key] = class_(name=name, + self.components[key] = class_(name=name, time_object=self.time_object, **parobj[key].to_dict()) if key not in parobj._valves: self.set_v_sv(key) else: self.set_phi_sv(key) - self.commponents[key].setup() + self.components[key].setup() - self.connect_modules(self.commponents['lv'], - self.commponents['ao'], + self.connect_modules(self.components['lv'], + self.components['ao'], plabel='p_lv', qlabel='q_ao') - self.connect_modules(self.commponents['ao'], - self.commponents['sas'], + self.connect_modules(self.components['ao'], + self.components['sas'], plabel='p_sas', qlabel='q_ao') - self.connect_modules(self.commponents['sas'], - self.commponents['sat'], + self.connect_modules(self.components['sas'], + self.components['sat'], plabel='p_sat', qlabel='q_sas') - self.connect_modules(self.commponents['sat'], - self.commponents['svn'], + self.connect_modules(self.components['sat'], + self.components['svn'], plabel='p_svn', qlabel='q_sat') - self.connect_modules(self.commponents['svn'], - self.commponents['ra'], + self.connect_modules(self.components['svn'], + self.components['ra'], plabel='p_ra', qlabel='q_svn') - self.connect_modules(self.commponents['ra'], - self.commponents['ti'], + self.connect_modules(self.components['ra'], + self.components['ti'], plabel='p_ra', qlabel='q_ti') - self.connect_modules(self.commponents['ti'], - self.commponents['rv'], + self.connect_modules(self.components['ti'], + self.components['rv'], plabel='p_rv', qlabel='q_ti') - self.connect_modules(self.commponents['rv'], - self.commponents['po'], + self.connect_modules(self.components['rv'], + self.components['po'], plabel='p_rv', qlabel='q_po') - self.connect_modules(self.commponents['po'], - self.commponents['pas'], + self.connect_modules(self.components['po'], + self.components['pas'], plabel='p_pas', qlabel='q_po') - self.connect_modules(self.commponents['pas'], - self.commponents['pat'], + self.connect_modules(self.components['pas'], + self.components['pat'], plabel='p_pat', qlabel='q_pas') - self.connect_modules(self.commponents['pat'], - self.commponents['pvn'], + self.connect_modules(self.components['pat'], + self.components['pvn'], plabel='p_pvn', qlabel='q_pat') - self.connect_modules(self.commponents['pvn'], - self.commponents['la'], + self.connect_modules(self.components['pvn'], + self.components['la'], plabel='p_la', qlabel='q_pvn') - self.connect_modules(self.commponents['la'], - self.commponents['mi'], + self.connect_modules(self.components['la'], + self.components['mi'], plabel='p_la', qlabel='q_mi') - self.connect_modules(self.commponents['mi'], - self.commponents['lv'], + self.connect_modules(self.components['mi'], + self.components['lv'], plabel='p_lv', qlabel='q_mi') - for component in self.commponents.values(): + for component in self.components.values(): component.setup() def set_phi_sv(self, comp_key:str) -> None: phi_key = 'phi_' + comp_key - self._state_variable_dict[phi_key] = self.commponents[comp_key]._PHI + self._state_variable_dict[phi_key] = self.components[comp_key]._PHI self._state_variable_dict[phi_key].set_name(phi_key) - self.all_sv_data[phi_key] = self.commponents[comp_key].PHI - self.commponents[comp_key]._PHI._u = self.all_sv_data[phi_key] \ No newline at end of file + self.all_sv_data[phi_key] = self.components[comp_key].PHI + self.components[comp_key]._PHI._u = self.all_sv_data[phi_key] \ No newline at end of file diff --git a/ModularCirc/Models/KorakianitisMixedMaynardModel.py b/ModularCirc/Models/KorakianitisMixedMaynardModel.py index 841cec0..c8ab554 100644 --- a/ModularCirc/Models/KorakianitisMixedMaynardModel.py +++ b/ModularCirc/Models/KorakianitisMixedMaynardModel.py @@ -37,77 +37,77 @@ def __init__(self, time_setup_dict, parobj:po=k2006) -> None: class_ = HC_mixed_elastance else: raise Exception(f'Component name {key} not in the model list.') - self.commponents[key] = class_(name=name, + self.components[key] = class_(name=name, time_object=self.time_object, **parobj[key].to_dict()) if key not in parobj._valves: self.set_v_sv(key) else: self.set_phi_sv(key) - self.commponents[key].setup() + self.components[key].setup() - self.connect_modules(self.commponents['lv'], - self.commponents['ao'], + self.connect_modules(self.components['lv'], + self.components['ao'], plabel='p_lv', qlabel='q_ao') - self.connect_modules(self.commponents['ao'], - self.commponents['sas'], + self.connect_modules(self.components['ao'], + self.components['sas'], plabel='p_sas', qlabel='q_ao') - self.connect_modules(self.commponents['sas'], - self.commponents['sat'], + self.connect_modules(self.components['sas'], + self.components['sat'], plabel='p_sat', qlabel='q_sas') - self.connect_modules(self.commponents['sat'], - self.commponents['svn'], + self.connect_modules(self.components['sat'], + self.components['svn'], plabel='p_svn', qlabel='q_sat') - self.connect_modules(self.commponents['svn'], - self.commponents['ra'], + self.connect_modules(self.components['svn'], + self.components['ra'], plabel='p_ra', qlabel='q_svn') - self.connect_modules(self.commponents['ra'], - self.commponents['ti'], + self.connect_modules(self.components['ra'], + self.components['ti'], plabel='p_ra', qlabel='q_ti') - self.connect_modules(self.commponents['ti'], - self.commponents['rv'], + self.connect_modules(self.components['ti'], + self.components['rv'], plabel='p_rv', qlabel='q_ti') - self.connect_modules(self.commponents['rv'], - self.commponents['po'], + self.connect_modules(self.components['rv'], + self.components['po'], plabel='p_rv', qlabel='q_po') - self.connect_modules(self.commponents['po'], - self.commponents['pas'], + self.connect_modules(self.components['po'], + self.components['pas'], plabel='p_pas', qlabel='q_po') - self.connect_modules(self.commponents['pas'], - self.commponents['pat'], + self.connect_modules(self.components['pas'], + self.components['pat'], plabel='p_pat', qlabel='q_pas') - self.connect_modules(self.commponents['pat'], - self.commponents['pvn'], + self.connect_modules(self.components['pat'], + self.components['pvn'], plabel='p_pvn', qlabel='q_pat') - self.connect_modules(self.commponents['pvn'], - self.commponents['la'], + self.connect_modules(self.components['pvn'], + self.components['la'], plabel='p_la', qlabel='q_pvn') - self.connect_modules(self.commponents['la'], - self.commponents['mi'], + self.connect_modules(self.components['la'], + self.components['mi'], plabel='p_la', qlabel='q_mi') - self.connect_modules(self.commponents['mi'], - self.commponents['lv'], + self.connect_modules(self.components['mi'], + self.components['lv'], plabel='p_lv', qlabel='q_mi') - for component in self.commponents.values(): + for component in self.components.values(): component.setup() def set_phi_sv(self, comp_key:str) -> None: phi_key = 'phi_' + comp_key - self._state_variable_dict[phi_key] = self.commponents[comp_key]._PHI + self._state_variable_dict[phi_key] = self.components[comp_key]._PHI self._state_variable_dict[phi_key].set_name(phi_key) - self.all_sv_data[phi_key] = self.commponents[comp_key].PHI \ No newline at end of file + self.all_sv_data[phi_key] = self.components[comp_key].PHI \ No newline at end of file diff --git a/ModularCirc/Models/KorakianitisMixedModel.py b/ModularCirc/Models/KorakianitisMixedModel.py index be3924a..525e5d5 100644 --- a/ModularCirc/Models/KorakianitisMixedModel.py +++ b/ModularCirc/Models/KorakianitisMixedModel.py @@ -38,77 +38,77 @@ def __init__(self, time_setup_dict, parobj:po=KorakianitisMixedModel_parameters, class_ = HC_mixed_elastance else: raise Exception(f'Component name {key} not in the model list.') - self.commponents[key] = class_(name=name, + self.components[key] = class_(name=name, time_object=self.time_object, **parobj[key].to_dict()) if key not in parobj._valves: self.set_v_sv(key) # else: # self.set_phi_sv(key) - self.commponents[key].setup() + self.components[key].setup() - self.connect_modules(self.commponents['lv'], - self.commponents['ao'], + self.connect_modules(self.components['lv'], + self.components['ao'], plabel='p_lv', qlabel='q_ao') - self.connect_modules(self.commponents['ao'], - self.commponents['sas'], + self.connect_modules(self.components['ao'], + self.components['sas'], plabel='p_sas', qlabel='q_ao') - self.connect_modules(self.commponents['sas'], - self.commponents['sat'], + self.connect_modules(self.components['sas'], + self.components['sat'], plabel='p_sat', qlabel='q_sas') - self.connect_modules(self.commponents['sat'], - self.commponents['svn'], + self.connect_modules(self.components['sat'], + self.components['svn'], plabel='p_svn', qlabel='q_sat') - self.connect_modules(self.commponents['svn'], - self.commponents['ra'], + self.connect_modules(self.components['svn'], + self.components['ra'], plabel='p_ra', qlabel='q_svn') - self.connect_modules(self.commponents['ra'], - self.commponents['ti'], + self.connect_modules(self.components['ra'], + self.components['ti'], plabel='p_ra', qlabel='q_ti') - self.connect_modules(self.commponents['ti'], - self.commponents['rv'], + self.connect_modules(self.components['ti'], + self.components['rv'], plabel='p_rv', qlabel='q_ti') - self.connect_modules(self.commponents['rv'], - self.commponents['po'], + self.connect_modules(self.components['rv'], + self.components['po'], plabel='p_rv', qlabel='q_po') - self.connect_modules(self.commponents['po'], - self.commponents['pas'], + self.connect_modules(self.components['po'], + self.components['pas'], plabel='p_pas', qlabel='q_po') - self.connect_modules(self.commponents['pas'], - self.commponents['pat'], + self.connect_modules(self.components['pas'], + self.components['pat'], plabel='p_pat', qlabel='q_pas') - self.connect_modules(self.commponents['pat'], - self.commponents['pvn'], + self.connect_modules(self.components['pat'], + self.components['pvn'], plabel='p_pvn', qlabel='q_pat') - self.connect_modules(self.commponents['pvn'], - self.commponents['la'], + self.connect_modules(self.components['pvn'], + self.components['la'], plabel='p_la', qlabel='q_pvn') - self.connect_modules(self.commponents['la'], - self.commponents['mi'], + self.connect_modules(self.components['la'], + self.components['mi'], plabel='p_la', qlabel='q_mi') - self.connect_modules(self.commponents['mi'], - self.commponents['lv'], + self.connect_modules(self.components['mi'], + self.components['lv'], plabel='p_lv', qlabel='q_mi') - for component in self.commponents.values(): + for component in self.components.values(): component.setup() # def set_phi_sv(self, comp_key:str) -> None: # phi_key = 'phi_' + comp_key - # self._state_variable_dict[phi_key] = self.commponents[comp_key]._PHI + # self._state_variable_dict[phi_key] = self.components[comp_key]._PHI # self._state_variable_dict[phi_key].set_name(phi_key) - # self.all_sv_data[phi_key] = self.commponents[comp_key].PHI \ No newline at end of file + # self.all_sv_data[phi_key] = self.components[comp_key].PHI \ No newline at end of file diff --git a/ModularCirc/Models/KorakianitisModel.py b/ModularCirc/Models/KorakianitisModel.py index c78828c..632bd55 100644 --- a/ModularCirc/Models/KorakianitisModel.py +++ b/ModularCirc/Models/KorakianitisModel.py @@ -37,68 +37,68 @@ def __init__(self, time_setup_dict, parobj:po=k2006, supress_printing:bool=False class_ = HC_constant_elastance else: raise Exception(f'Component name {key} not in the model list.') - self.commponents[key] = class_(name=name, + self.components[key] = class_(name=name, time_object=self.time_object, **parobj[key].to_dict()) if key not in parobj._valves: self.set_v_sv(key) - self.commponents[key].setup() + self.components[key].setup() - self.connect_modules(self.commponents['lv'], - self.commponents['ao'], + self.connect_modules(self.components['lv'], + self.components['ao'], plabel='p_lv', qlabel='q_ao') - self.connect_modules(self.commponents['ao'], - self.commponents['sas'], + self.connect_modules(self.components['ao'], + self.components['sas'], plabel='p_sas', qlabel='q_ao') - self.connect_modules(self.commponents['sas'], - self.commponents['sat'], + self.connect_modules(self.components['sas'], + self.components['sat'], plabel='p_sat', qlabel='q_sas') - self.connect_modules(self.commponents['sat'], - self.commponents['svn'], + self.connect_modules(self.components['sat'], + self.components['svn'], plabel='p_svn', qlabel='q_sat') - self.connect_modules(self.commponents['svn'], - self.commponents['ra'], + self.connect_modules(self.components['svn'], + self.components['ra'], plabel='p_ra', qlabel='q_svn') - self.connect_modules(self.commponents['ra'], - self.commponents['ti'], + self.connect_modules(self.components['ra'], + self.components['ti'], plabel='p_ra', qlabel='q_ti') - self.connect_modules(self.commponents['ti'], - self.commponents['rv'], + self.connect_modules(self.components['ti'], + self.components['rv'], plabel='p_rv', qlabel='q_ti') - self.connect_modules(self.commponents['rv'], - self.commponents['po'], + self.connect_modules(self.components['rv'], + self.components['po'], plabel='p_rv', qlabel='q_po') - self.connect_modules(self.commponents['po'], - self.commponents['pas'], + self.connect_modules(self.components['po'], + self.components['pas'], plabel='p_pas', qlabel='q_po') - self.connect_modules(self.commponents['pas'], - self.commponents['pat'], + self.connect_modules(self.components['pas'], + self.components['pat'], plabel='p_pat', qlabel='q_pas') - self.connect_modules(self.commponents['pat'], - self.commponents['pvn'], + self.connect_modules(self.components['pat'], + self.components['pvn'], plabel='p_pvn', qlabel='q_pat') - self.connect_modules(self.commponents['pvn'], - self.commponents['la'], + self.connect_modules(self.components['pvn'], + self.components['la'], plabel='p_la', qlabel='q_pvn') - self.connect_modules(self.commponents['la'], - self.commponents['mi'], + self.connect_modules(self.components['la'], + self.components['mi'], plabel='p_la', qlabel='q_mi') - self.connect_modules(self.commponents['mi'], - self.commponents['lv'], + self.connect_modules(self.components['mi'], + self.components['lv'], plabel='p_lv', qlabel='q_mi') - for component in self.commponents.values(): + for component in self.components.values(): component.setup() \ No newline at end of file diff --git a/ModularCirc/Models/MixedHeartMaynard4eWindkessel.py b/ModularCirc/Models/MixedHeartMaynard4eWindkessel.py index dd1cfff..49a1203 100644 --- a/ModularCirc/Models/MixedHeartMaynard4eWindkessel.py +++ b/ModularCirc/Models/MixedHeartMaynard4eWindkessel.py @@ -43,7 +43,7 @@ def __init__(self, time_setup_dict, parobj:po=MHM4W_parobj) -> None: class_ = HC_constant_elastance # HC_mixed_elastance HC_constant_elastance else: raise Exception(f'Component name {key} not in the model list.') - self.commponents[key] = class_(name=name, + self.components[key] = class_(name=name, time_object=self.time_object, **parobj[key].to_dict()) @@ -51,82 +51,82 @@ def __init__(self, time_setup_dict, parobj:po=MHM4W_parobj) -> None: self.set_v_sv(key) # else: # self.set_phi_sv(key) - self.commponents[key].setup() + self.components[key].setup() - self.connect_modules(self.commponents['lv'], - self.commponents['ao'], + self.connect_modules(self.components['lv'], + self.components['ao'], plabel='p_lv', qlabel='q_ao', ) - self.connect_modules(self.commponents['ao'], - self.commponents['sai'], + self.connect_modules(self.components['ao'], + self.components['sai'], plabel='p_sa', qlabel='q_ao') - self.connect_modules(self.commponents['sai'], - self.commponents['sa'], + self.connect_modules(self.components['sai'], + self.components['sa'], plabel='pi_sa', qlabel='q_ao', - qvariable=self.commponents['ao']._Q_o) - self.connect_modules(self.commponents['sa'], - self.commponents['sc'], + qvariable=self.components['ao']._Q_o) + self.connect_modules(self.components['sa'], + self.components['sc'], plabel='p_sc', qlabel='q_sa') - self.connect_modules(self.commponents['sc'], - self.commponents['sv'], + self.connect_modules(self.components['sc'], + self.components['sv'], plabel='p_sv', qlabel='q_sa', - qvariable=self.commponents['sa']._Q_o) - self.connect_modules(self.commponents['sv'], - self.commponents['ra'], + qvariable=self.components['sa']._Q_o) + self.connect_modules(self.components['sv'], + self.components['ra'], plabel='p_ra', qlabel='q_sv') - self.connect_modules(self.commponents['ra'], - self.commponents['ti'], + self.connect_modules(self.components['ra'], + self.components['ti'], plabel='p_ra', qlabel='q_ti') - self.connect_modules(self.commponents['ti'], - self.commponents['rv'], + self.connect_modules(self.components['ti'], + self.components['rv'], plabel='p_rv', qlabel='q_ti') - self.connect_modules(self.commponents['rv'], - self.commponents['po'], + self.connect_modules(self.components['rv'], + self.components['po'], plabel='p_rv', qlabel='q_po') - self.connect_modules(self.commponents['po'], - self.commponents['pai'], + self.connect_modules(self.components['po'], + self.components['pai'], plabel='p_pa', qlabel='q_po') - self.connect_modules(self.commponents['pai'], - self.commponents['pa'], + self.connect_modules(self.components['pai'], + self.components['pa'], plabel='pi_pa', qlabel='q_po', - qvariable=self.commponents['po']._Q_o) - self.connect_modules(self.commponents['pa'], - self.commponents['pc'], + qvariable=self.components['po']._Q_o) + self.connect_modules(self.components['pa'], + self.components['pc'], plabel='p_pc', qlabel='q_pa') - self.connect_modules(self.commponents['pc'], - self.commponents['pv'], + self.connect_modules(self.components['pc'], + self.components['pv'], plabel='p_pv', qlabel='q_pa', - qvariable=self.commponents['pa']._Q_o) - self.connect_modules(self.commponents['pv'], - self.commponents['la'], + qvariable=self.components['pa']._Q_o) + self.connect_modules(self.components['pv'], + self.components['la'], plabel='p_la', qlabel='q_pv') - self.connect_modules(self.commponents['la'], - self.commponents['mi'], + self.connect_modules(self.components['la'], + self.components['mi'], plabel='p_la', qlabel='q_mi') - self.connect_modules(self.commponents['mi'], - self.commponents['lv'], + self.connect_modules(self.components['mi'], + self.components['lv'], plabel='p_lv', qlabel='q_mi') - for component in self.commponents.values(): + for component in self.components.values(): component.setup() def set_phi_sv(self, comp_key:str) -> None: phi_key = 'phi_' + comp_key - self._state_variable_dict[phi_key] = self.commponents[comp_key]._PHI + self._state_variable_dict[phi_key] = self.components[comp_key]._PHI self._state_variable_dict[phi_key].set_name(phi_key) - self.all_sv_data[phi_key] = self.commponents[comp_key].PHI \ No newline at end of file + self.all_sv_data[phi_key] = self.components[comp_key].PHI \ No newline at end of file diff --git a/ModularCirc/Models/NaghaviModel.py b/ModularCirc/Models/NaghaviModel.py index 2fdda16..9e88a1a 100644 --- a/ModularCirc/Models/NaghaviModel.py +++ b/ModularCirc/Models/NaghaviModel.py @@ -11,7 +11,7 @@ def __init__(self, time_setup_dict, parobj:NaghaviModelParameters=NaghaviModelPa if not suppress_printing: print(parobj) # Defining the aorta object - self.commponents['ao'] = Rlc_component( name='Aorta', + self.components['ao'] = Rlc_component( name='Aorta', time_object=self.time_object, r = parobj['ao']['r'], c = parobj['ao']['c'], @@ -22,7 +22,7 @@ def __init__(self, time_setup_dict, parobj:NaghaviModelParameters=NaghaviModelPa self.set_v_sv('ao') # Defining the arterial system object - self.commponents['art'] = Rlc_component(name='Arteries', + self.components['art'] = Rlc_component(name='Arteries', time_object=self.time_object, r = parobj['art']['r'], c = parobj['art']['c'], @@ -33,7 +33,7 @@ def __init__(self, time_setup_dict, parobj:NaghaviModelParameters=NaghaviModelPa self.set_v_sv('art') # Defining the venous system object - self.commponents['ven'] = Rlc_component(name='VenaCava', + self.components['ven'] = Rlc_component(name='VenaCava', time_object=self.time_object, r = parobj['ven']['r'], c = parobj['ven']['c'], @@ -44,14 +44,14 @@ def __init__(self, time_setup_dict, parobj:NaghaviModelParameters=NaghaviModelPa self.set_v_sv('ven') # Defining the aortic valve object - self.commponents['av'] = Valve_non_ideal(name='AorticValve', + self.components['av'] = Valve_non_ideal(name='AorticValve', time_object=self.time_object, r=parobj['av']['r'], max_func=parobj['av']['max_func'] ) # Defining the mitral valve object - self.commponents['mv'] = Valve_non_ideal(name='MitralValve', + self.components['mv'] = Valve_non_ideal(name='MitralValve', time_object=self.time_object, r=parobj['mv']['r'], max_func=parobj['mv']['max_func'] @@ -61,7 +61,7 @@ def __init__(self, time_setup_dict, parobj:NaghaviModelParameters=NaghaviModelPa # def la_af(t, t_max=parobj['la']['t_max'], t_tr=parobj['la']['t_tr'], tau=parobj['la']['tau'], af=parobj['la']['activation_function']): # return af(time_shift(t, 100., self.time_object), t_max=t_max, t_tr=t_tr, tau=tau) # Defining the left atrium class - self.commponents['la'] = HC_mixed_elastance(name='LeftAtrium', + self.components['la'] = HC_mixed_elastance(name='LeftAtrium', time_object=self.time_object, E_pas=parobj['la']['E_pas'], E_act=parobj['la']['E_act'], @@ -74,13 +74,13 @@ def __init__(self, time_setup_dict, parobj:NaghaviModelParameters=NaghaviModelPa tau =parobj['la']['tau'], delay=parobj['la']['delay'] ) - self._state_variable_dict['v_la'] = self.commponents['la']._V + self._state_variable_dict['v_la'] = self.components['la']._V self._state_variable_dict['v_la'].set_name('v_la') - self.all_sv_data['v_la'] = self.commponents['la'].V - self.commponents['la']._V._u = self.all_sv_data['v_la'] + self.all_sv_data['v_la'] = self.components['la'].V + self.components['la']._V._u = self.all_sv_data['v_la'] # Defining the left ventricle activation function - self.commponents['lv'] = HC_mixed_elastance(name='LeftVentricle', + self.components['lv'] = HC_mixed_elastance(name='LeftVentricle', time_object=self.time_object, E_pas=parobj['lv']['E_pas'], E_act=parobj['lv']['E_act'], @@ -93,52 +93,52 @@ def __init__(self, time_setup_dict, parobj:NaghaviModelParameters=NaghaviModelPa tau =parobj['la']['tau'], delay=parobj['lv']['delay'] ) - self._state_variable_dict['v_lv'] = self.commponents['lv']._V + self._state_variable_dict['v_lv'] = self.components['lv']._V self._state_variable_dict['v_lv'].set_name('v_lv') - self.all_sv_data['v_lv'] = self.commponents['lv'].V - self.commponents['lv']._V._u = self.all_sv_data['v_lv'] + self.all_sv_data['v_lv'] = self.components['lv'].V + self.components['lv']._V._u = self.all_sv_data['v_lv'] - for component in self.commponents.values(): + for component in self.components.values(): component.setup() # connect the left ventricle class to the aortic valve - self.connect_modules(self.commponents['lv'], - self.commponents['av'], + self.connect_modules(self.components['lv'], + self.components['av'], plabel='p_lv', qlabel='q_av', ) # connect the aortic valve to the aorta - self.connect_modules(self.commponents['av'], - self.commponents['ao'], + self.connect_modules(self.components['av'], + self.components['ao'], plabel='p_ao', qlabel='q_av') # connect the aorta to the arteries - self.connect_modules(self.commponents['ao'], - self.commponents['art'], + self.connect_modules(self.components['ao'], + self.components['art'], plabel= 'p_art', qlabel= 'q_ao') # connect the arteries to the veins - self.connect_modules(self.commponents['art'], - self.commponents['ven'], + self.connect_modules(self.components['art'], + self.components['ven'], plabel= 'p_ven', qlabel= 'q_art') # connect the veins to the left atrium - self.connect_modules(self.commponents['ven'], - self.commponents['la'], + self.connect_modules(self.components['ven'], + self.components['la'], plabel= 'p_la', qlabel='q_ven', ) # connect the left atrium to the mitral valve - self.connect_modules(self.commponents['la'], - self.commponents['mv'], + self.connect_modules(self.components['la'], + self.components['mv'], plabel= 'p_la', qlabel='q_mv') # connect the mitral valve to the left ventricle - self.connect_modules(self.commponents['mv'], - self.commponents['lv'], + self.connect_modules(self.components['mv'], + self.components['lv'], plabel='p_lv', qlabel='q_mv', ) - for component in self.commponents.values(): + for component in self.components.values(): component.setup() \ No newline at end of file diff --git a/ModularCirc/Models/OdeModel.py b/ModularCirc/Models/OdeModel.py index c4d6c1a..6925e0e 100644 --- a/ModularCirc/Models/OdeModel.py +++ b/ModularCirc/Models/OdeModel.py @@ -9,7 +9,7 @@ def __init__(self, time_setup_dict) -> None: self.time_object = TimeClass(time_setup_dict=time_setup_dict) self._state_variable_dict = pd.Series() self.all_sv_data = pd.DataFrame(index=self.time_object.time.index, dtype='float64') - self.commponents = dict() + self.components = dict() self.name = 'Template' @@ -70,7 +70,7 @@ def state_variable_dict(self): def __str__(self) -> str: out = f'Model {self.name} \n\n' - for component in self.commponents.values(): + for component in self.components.values(): out += (str(component) + '\n') out += '\n' out += 'Main State Variable Dictionary \n' @@ -80,10 +80,10 @@ def __str__(self) -> str: def set_v_sv(self, comp_key:str): v_key = 'v_' + comp_key - self._state_variable_dict[v_key] = self.commponents[comp_key]._V + self._state_variable_dict[v_key] = self.components[comp_key]._V self._state_variable_dict[v_key].set_name(v_key) - self.all_sv_data[v_key] = self.commponents[comp_key].V ##### test - # self.commponents[comp_key]._V._u = self.all_sv_data[v_key] + self.all_sv_data[v_key] = self.components[comp_key].V ##### test + # self.components[comp_key]._V._u = self.all_sv_data[v_key] def __del__(self): @@ -91,9 +91,9 @@ def __del__(self): del self.name if hasattr(self, 'all_sv_data'): del self.all_sv_data - for comp in self.commponents.values(): + for comp in self.components.values(): del comp - del self.commponents + del self.components for sv in self._state_variable_dict.values: del sv del self._state_variable_dict diff --git a/README.md b/README.md index d82a37c..6244a8e 100644 --- a/README.md +++ b/README.md @@ -102,8 +102,8 @@ solver.solve() 8. Extract the state variable values of interest. ```python -v_lv = solver.model.commponents['lv'].V.values -p_lv = solver.model.commponents['lv'].P_i.values +v_lv = solver.model.components['lv'].V.values +p_lv = solver.model.components['lv'].P_i.values ``` ## Example values pv loops for all 4 chambers: diff --git a/tests/test_KorakianitisMixedModel.py b/tests/test_KorakianitisMixedModel.py index c3298e0..c1da966 100644 --- a/tests/test_KorakianitisMixedModel.py +++ b/tests/test_KorakianitisMixedModel.py @@ -26,7 +26,7 @@ def setUp(self): self.tind_init = np.arange(start=self.model.time_object.n_t-self.model.time_object.n_c * self.model.time_object.export_min, stop =self.model.time_object.n_t) - for key, value in self.model.commponents.items(): + for key, value in self.model.components.items(): self.initial_values[key] = { 'V': value.V.values[self.tind_init].mean(), 'P_i': value.P_i.values[self.tind_init].mean(), @@ -39,10 +39,10 @@ def setUp(self): def test_model_initialization(self): self.assertIsInstance(self.model, KorakianitisMixedModel) - self.assertTrue(hasattr(self.solver.model, 'commponents')) - self.assertIn('lv', self.solver.model.commponents) - self.assertEqual(self.solver.model.commponents['lv'].E_pas, self.parobj.components['lv']['E_pas']) - self.assertEqual(self.solver.model.commponents['ao'].CQ, self.parobj.components['ao']['CQ']) + self.assertTrue(hasattr(self.solver.model, 'components')) + self.assertIn('lv', self.solver.model.components) + self.assertEqual(self.solver.model.components['lv'].E_pas, self.parobj.components['lv']['E_pas']) + self.assertEqual(self.solver.model.components['ao'].CQ, self.parobj.components['ao']['CQ']) def test_solver_initialization(self): self.assertIsInstance(self.solver, Solver) @@ -50,14 +50,14 @@ def test_solver_initialization(self): def test_solver_run(self): self.solver.solve() - self.assertTrue(len(self.solver.model.commponents['lv'].V.values) > 0) - self.assertTrue(len(self.solver.model.commponents['lv'].P_i.values) > 0) + self.assertTrue(len(self.solver.model.components['lv'].V.values) > 0) + self.assertTrue(len(self.solver.model.components['lv'].P_i.values) > 0) self.tind_fin = np.arange(start=self.model.time_object.n_t-self.model.time_object.n_c * self.model.time_object.export_min, stop=self.model.time_object.n_t) new_dict = {} - for key, value in self.model.commponents.items(): + for key, value in self.model.components.items(): new_dict[key] = { 'V': value.V.values[self.tind_fin].mean(),