<?xml version='1.0' encoding='UTF-8'?>
<model name="ogiermann_2022_piezo1_rect_pacing" xmlns="http://www.cellml.org/cellml/1.1#" xmlns:cellml="http://www.cellml.org/cellml/1.1#" xmlns:xlink="http://www.w3.org/1999/xlink">
    <import xlink:href="../../units.cellml">
        <units name="mmHg" units_ref="mmHg"/>
        <units name="u_per_m" units_ref="u_per_m"/>
        <units name="ms" units_ref="ms"/>
        <units name="per_ms" units_ref="per_ms"/>
        <units name="mV" units_ref="mV"/>
        <units name="per_mV" units_ref="per_mV"/>
        <units name="uS_per_nF" units_ref="uS_per_nF"/>
        <units name="nA_per_nF" units_ref="nA_per_nF"/>
        <units name="molar" units_ref="molar"/>
        <units name="mM" units_ref="mM"/>
        <units name="uM" units_ref="uM"/>
        <units name="mM4" units_ref="mM4"/>
        <units name="mV_per_uM" units_ref="mV_per_uM"/>
        <units name="uM_per_ms" units_ref="uM_per_ms"/>
        <units name="per_uM_per_ms" units_ref="per_uM_per_ms"/>
        <units name="J_per_moleK" units_ref="J_per_moleK"/>
        <units name="coulomb_per_mmole" units_ref="coulomb_per_mmole"/>
        <units name="cm_per_s" units_ref="cm_per_s"/>
        <units name="mA_per_cm2" units_ref="mA_per_cm2"/>
        <units name="mmole_per_coulomb_cm" units_ref="mmole_per_coulomb_cm"/>
    </import>
    <import xlink:href="../common/periodic_mechanical_stim_protocol.cellml">
        <component component_ref="stimulus_protocol" name="pressure_stim"/>
    </import>
    <import xlink:href="../common/periodic_electrical_stim_protocol.cellml">
        <component component_ref="stimulus_protocol" name="current_stim"/>
    </import>
    <import xlink:href="../../models/channels/ogiermann_2025_piezo1.cellml">
        <component component_ref="kinetics" name="piezo1"/>
    </import>
    <component name="environment">
        <!-- For visibility in the editor.-->
        <variable name="P_Open" public_interface="in" units="dimensionless"/>
        <variable name="P_Closed" public_interface="in" units="dimensionless"/>
        <variable name="P_I1" public_interface="in" units="dimensionless"/>
        <variable name="P_I2" public_interface="in" units="dimensionless"/>
        <variable initial_value="0.0" name="time" public_interface="out" units="ms"/>
        <variable initial_value="-80" name="current_in" public_interface="in" units="nA_per_nF"/>
        <variable name="voltage_out" public_interface="out" units="mV"/>
        <variable name="transmembranevoltage" public_interface="out" units="mV"/>
        <variable name="pressure" public_interface="out" units="mmHg"/>
        <variable initial_value="1.2" name="stretch" public_interface="in" units="dimensionless"/>
        <variable initial_value="0000" name="pressure_stim_offset" public_interface="out" units="ms"/>
        <variable initial_value="333" name="pressure_stim_period" public_interface="out" units="ms"/>
        <variable initial_value="100" name="pressure_stim_duration" public_interface="out" units="ms"/>
        <variable initial_value="1.2" name="pressure_stim_amplitude" public_interface="out" units="dimensionless"/>
        <variable initial_value="0" name="current_stim_offset" public_interface="out" units="ms"/>
        <variable initial_value="10000000" name="current_stim_period" public_interface="out" units="ms"/>
        <variable initial_value="10000000" name="current_stim_duration" public_interface="out" units="ms"/>
        <variable initial_value="15" name="current_stim_amplitude" public_interface="out" units="nA_per_nF"/>
        <variable initial_value="10000000" name="current_stim_end" public_interface="out" units="ms"/>
        <variable initial_value="1" name="current_N_period_total" public_interface="out" units="dimensionless"/>
        <variable initial_value="1" name="current_N_period_applied" public_interface="out" units="dimensionless"/>
        <!-- If we assume that a stretch of 20% saturates the ion channel response (70 mmHg in the experiment) and a linear relation between stretch and pressure, we get the factor of 350 present here.-->
        <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
                <eq/>
                <ci>pressure</ci>
                <apply>
                    <times/>
                    <cn cellml:units="mmHg">350.0</cn>
                    <apply>
                        <max/>
                        <cn cellml:units="dimensionless">0.0</cn>
                        <apply>
                            <minus/>
                            <ci>stretch</ci>
                            <cn cellml:units="dimensionless">1.0</cn>
                        </apply>
                    </apply>
                </apply>
            </apply>
            <apply>
                <eq/>
                <ci>voltage_out</ci>
                <apply>
                    <times/>
                    <apply>
                        <divide/>
                        <ci>current_in</ci>
                        <cn cellml:units="nA_per_nF">1.0</cn>
                    </apply>
                    <cn cellml:units="mV">1.0</cn>
                </apply>
            </apply>
            <apply>
                <eq/>
                <ci>transmembranevoltage</ci>
                <apply>
                    <times/>
                    <ci>voltage_out</ci>
                    <ci>P_Open</ci>
                </apply>
            </apply>
        </math>
    </component>
    <connection>
        <map_components component_1="pressure_stim" component_2="environment"/>
        <map_variables variable_1="time" variable_2="time"/>
        <map_variables variable_1="stretch" variable_2="stretch"/>
        <map_variables variable_1="stim_offset" variable_2="pressure_stim_offset"/>
        <map_variables variable_1="stim_period" variable_2="pressure_stim_period"/>
        <map_variables variable_1="stim_duration" variable_2="pressure_stim_duration"/>
        <map_variables variable_1="stim_amplitude" variable_2="pressure_stim_amplitude"/>
    </connection>
    <connection>
        <map_components component_1="current_stim" component_2="environment"/>
        <map_variables variable_1="time" variable_2="time"/>
        <map_variables variable_1="current" variable_2="current_in"/>
        <map_variables variable_1="stim_offset" variable_2="current_stim_offset"/>
        <map_variables variable_1="stim_period" variable_2="current_stim_period"/>
        <map_variables variable_1="stim_duration" variable_2="current_stim_duration"/>
        <map_variables variable_1="stim_amplitude" variable_2="current_stim_amplitude"/>
        <map_variables variable_1="stim_t_end" variable_2="current_stim_end"/>
        <map_variables variable_1="N_period_total" variable_2="current_N_period_total"/>
        <map_variables variable_1="N_period_applied" variable_2="current_N_period_applied"/>
    </connection>
    <connection>
        <map_components component_1="piezo1" component_2="environment"/>
        <map_variables variable_1="time" variable_2="time"/>
        <map_variables variable_1="pressure" variable_2="pressure"/>
        <map_variables variable_1="gradmu" variable_2="voltage_out"/>
        <map_variables variable_1="P_Open" variable_2="P_Open"/>
        <map_variables variable_1="P_Closed" variable_2="P_Closed"/>
        <map_variables variable_1="P_I1" variable_2="P_I1"/>
        <map_variables variable_1="P_I2" variable_2="P_I2"/>
    </connection>
</model>
