<?xml version='1.0' encoding='UTF-8'?>
<model name="mixed_pacing_experiment" 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">
    <!-- Not sure how to do this in CellML 2.0-->
    <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>
    <!-- At the time of writing this we have to manually fetch interesting entries here...-->
    <component name="outputs">
        <variable initial_value="0.0" name="time" public_interface="out" units="ms"/>
        <!-- QOIs-->
        <variable name="V" public_interface="in" units="mV"/>
        <variable name="Na_i" public_interface="in" units="uM"/>
        <variable name="Ca_dyad" public_interface="in" units="uM"/>
        <variable name="Ca_submem" public_interface="in" units="uM"/>
        <variable name="Ca_i" public_interface="in" units="uM"/>
        <variable name="Ca_NSR" public_interface="in" units="uM"/>
        <variable name="Ca_JSR" public_interface="in" units="uM"/>
        <variable name="xiPz1" public_interface="in" units="nA_per_nF"/>
        <variable name="xiCaPz1" public_interface="in" units="nA_per_nF"/>
        <variable name="xiNaPz1" public_interface="in" units="nA_per_nF"/>
        <variable name="xiKPz1" public_interface="in" units="nA_per_nF"/>
        <variable name="P_Open" public_interface="in" units="dimensionless"/>
        <variable name="P_I1" public_interface="in" units="dimensionless"/>
        <variable name="P_I2" public_interface="in" units="dimensionless"/>
        <variable name="rPz1" public_interface="in" units="uM_per_ms"/>
        <variable name="ena" public_interface="in" units="mV"/>
        <variable name="ecas" public_interface="in" units="mV"/>
        <variable name="eks" public_interface="in" units="mV"/>
        <variable name="eghkPz1" public_interface="in" units="mV"/>
        <!-- Stimulation Settings-->
        <variable initial_value="250" name="stim_offset" public_interface="out" units="ms"/>
        <variable initial_value="9999999999" name="stim_t_end" public_interface="out" units="ms"/>
        <variable initial_value="250" name="stim_period" public_interface="out" units="ms"/>
        <variable initial_value="3" name="stim_duration" public_interface="out" units="ms"/>
        <variable initial_value="-15" name="stim_amplitude" public_interface="out" units="nA_per_nF"/>
        <variable initial_value="2" name="stim_n_period_app" public_interface="out" units="dimensionless"/>
        <variable initial_value="3" name="stim_n_period_tot" public_interface="out" units="dimensionless"/>
        <variable initial_value="0" name="prepacing_offset" public_interface="out" units="ms"/>
        <variable initial_value="0" name="prepacing_t_end" public_interface="out" units="ms"/>
        <variable initial_value="250" name="prepacing_period" public_interface="out" units="ms"/>
        <variable initial_value="3" name="prepacing_duration" public_interface="out" units="ms"/>
        <variable initial_value="0" name="prepacing_amplitude" public_interface="out" units="nA_per_nF"/>
        <variable initial_value="2" name="prepacing_n_period_app" public_interface="out" units="dimensionless"/>
        <variable initial_value="3" name="prepacing_n_period_tot" public_interface="out" units="dimensionless"/>
        <variable initial_value="0" name="stretch_offset" public_interface="out" units="ms"/>
        <variable initial_value="750" name="stretch_period" public_interface="out" units="ms"/>
        <variable initial_value="30" name="stretch_duration" public_interface="out" units="ms"/>
        <variable initial_value="1.2" name="stretch_amplitude" public_interface="out" units="dimensionless"/>
        <variable name="stretch" public_interface="in" units="dimensionless"/>
        <variable name="pressure" public_interface="out" units="mmHg"/>
        <variable initial_value="0" name="i_stim_prepacing" public_interface="in" units="nA_per_nF"/>
        <variable initial_value="0" name="i_stim_prepaced" public_interface="in" units="nA_per_nF"/>
        <variable name="i_stim" public_interface="out" units="nA_per_nF"/>
        <!-- Conversion of stretch to pressure with some guesstimated scaling factor. 
 This likely does not reflect reality and needs further investigation in future iterations of this model.
 Hence, we could also just apply the pressure directly here.
 If we assume that a stretch of 30% 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="newton">250.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>i_stim</ci>
                <apply>
                    <plus/>
                    <ci>i_stim_prepacing</ci>
                    <ci>i_stim_prepaced</ci>
                </apply>
            </apply>
        </math>
    </component>
    <connection>
        <map_components component_1="outputs" component_2="cell_membrane"/>
        <map_variables variable_1="V" variable_2="V"/>
    </connection>
    <connection>
        <map_components component_1="outputs" component_2="Na"/>
        <map_variables variable_1="Na_i" variable_2="Na_i"/>
    </connection>
    <connection>
        <map_components component_1="outputs" component_2="Ca"/>
        <map_variables variable_1="Ca_dyad" variable_2="Ca_dyad"/>
        <map_variables variable_1="Ca_submem" variable_2="Ca_submem"/>
        <map_variables variable_1="Ca_i" variable_2="Ca_i"/>
        <map_variables variable_1="Ca_NSR" variable_2="Ca_NSR"/>
        <map_variables variable_1="Ca_JSR" variable_2="Ca_JSR"/>
    </connection>
    <connection>
        <map_components component_1="outputs" component_2="IPz1"/>
        <map_variables variable_1="xiPz1" variable_2="xiPz1"/>
        <map_variables variable_1="xiNaPz1" variable_2="xiNaPz1"/>
        <map_variables variable_1="xiCaPz1" variable_2="xiCaPz1"/>
        <map_variables variable_1="xiKPz1" variable_2="xiKPz1"/>
        <map_variables variable_1="rPz1" variable_2="rPz1"/>
    </connection>
    <import xlink:href="../../models/mahajan_shiferaw_ogiermann_2025.cellml">
        <component component_ref="interface" name="cell_model"/>
        <component component_ref="cell_membrane" name="cell_membrane"/>
        <component component_ref="reversal_potentials" name="reversal_potentials"/>
        <component component_ref="Ca" name="Ca"/>
        <component component_ref="IPz1" name="IPz1"/>
        <component component_ref="Na" name="Na"/>
        <component component_ref="piezo1_kinetics" name="piezo1_kinetics"/>
    </import>
    <import xlink:href="../common/periodic_electrical_stim_protocol.cellml">
        <component component_ref="stimulus_protocol" name="e_stimulus_protocol"/>
    </import>
    <import xlink:href="../common/periodic_electrical_stim_protocol.cellml">
        <component component_ref="stimulus_protocol" name="e_prepacing_protocol"/>
    </import>
    <import xlink:href="../common/periodic_mechanical_stim_protocol.cellml">
        <component component_ref="stimulus_protocol" name="m_stimulus_protocol"/>
    </import>
    <connection>
        <map_components component_1="outputs" component_2="e_stimulus_protocol"/>
        <map_variables variable_1="time" variable_2="time"/>
        <map_variables variable_1="stim_offset" variable_2="stim_offset"/>
        <map_variables variable_1="stim_t_end" variable_2="stim_t_end"/>
        <map_variables variable_1="stim_period" variable_2="stim_period"/>
        <map_variables variable_1="stim_duration" variable_2="stim_duration"/>
        <map_variables variable_1="stim_amplitude" variable_2="stim_amplitude"/>
        <map_variables variable_1="stim_n_period_tot" variable_2="N_period_total"/>
        <map_variables variable_1="stim_n_period_app" variable_2="N_period_applied"/>
    </connection>
    <connection>
        <map_components component_1="outputs" component_2="e_prepacing_protocol"/>
        <map_variables variable_1="time" variable_2="time"/>
        <map_variables variable_1="prepacing_offset" variable_2="stim_offset"/>
        <map_variables variable_1="prepacing_t_end" variable_2="stim_t_end"/>
        <map_variables variable_1="prepacing_period" variable_2="stim_period"/>
        <map_variables variable_1="prepacing_duration" variable_2="stim_duration"/>
        <map_variables variable_1="prepacing_amplitude" variable_2="stim_amplitude"/>
        <map_variables variable_1="prepacing_n_period_tot" variable_2="N_period_total"/>
        <map_variables variable_1="prepacing_n_period_app" variable_2="N_period_applied"/>
    </connection>
    <connection>
        <map_components component_1="outputs" component_2="m_stimulus_protocol"/>
        <map_variables variable_1="time" variable_2="time"/>
        <map_variables variable_1="stretch_offset" variable_2="stim_offset"/>
        <map_variables variable_1="stretch_period" variable_2="stim_period"/>
        <map_variables variable_1="stretch_duration" variable_2="stim_duration"/>
        <map_variables variable_1="stretch_amplitude" variable_2="stim_amplitude"/>
    </connection>
    <connection>
        <map_components component_1="outputs" component_2="cell_model"/>
        <map_variables variable_1="time" variable_2="time"/>
    </connection>
    <connection>
        <map_components component_1="outputs" component_2="piezo1_kinetics"/>
        <map_variables variable_1="P_Open" variable_2="P_Open"/>
        <map_variables variable_1="P_I1" variable_2="P_I1"/>
        <map_variables variable_1="P_I2" variable_2="P_I2"/>
    </connection>
    <connection>
        <map_components component_1="e_stimulus_protocol" component_2="outputs"/>
        <map_variables variable_1="current" variable_2="i_stim_prepaced"/>
    </connection>
    <connection>
        <map_components component_1="e_prepacing_protocol" component_2="outputs"/>
        <map_variables variable_1="current" variable_2="i_stim_prepacing"/>
    </connection>
    <connection>
        <map_components component_1="m_stimulus_protocol" component_2="outputs"/>
        <map_variables variable_1="stretch" variable_2="stretch"/>
    </connection>
    <connection>
        <map_components component_1="outputs" component_2="reversal_potentials"/>
        <map_variables variable_1="ecas" variable_2="ecas"/>
        <map_variables variable_1="eks" variable_2="eks"/>
        <map_variables variable_1="ena" variable_2="ena"/>
        <map_variables variable_1="eghkPz1" variable_2="eghkPz1"/>
    </connection>
    <connection>
        <map_components component_1="cell_model" component_2="outputs"/>
        <map_variables variable_1="pressure" variable_2="pressure"/>
        <map_variables variable_1="i_stim" variable_2="i_stim"/>
    </connection>
</model>
