Location: BG_GiProtein @ a58226f25c65 / parameter_finder / kinetic_parameters.py

Author:
Shelley Fong <s.fong@auckland.ac.nz>
Date:
2021-10-20 14:11:57+13:00
Desc:
Adding remaining python files or modifications
Permanent Source URI:
https://models.cellml.org/workspace/6f9/rawfile/a58226f25c650ce4a2f99714dee1b2c92e15fd22/parameter_finder/kinetic_parameters.py

# Gi protein module following Saucerman and Iancu: act1 and act2 with LR
# and LRG as substrates (G is already bound, so there is only one substrate
# to each act reaction)

# Gi is associated with muscarinic 2 (M2) receptors in cardiac myocytes

#     return (k_kinetic, N_cT, K_C, W) kinetic parameters, constraints, and vector of volumes in each
# compartment (pL) (1 if gating variable, or in element corresponding to
# kappa)

import numpy as np 

def kinetic_parameters(M, include_type2_reactions, dims, V):
    # Set the kinetic rate constants.
    # original model had reactions that omitted enzymes as substrates e.g. BARK
    # convert unit from 1/s to 1/uM.s by dividing by conc of enzyme
    # all reactions were irreversible, made reversible by letting kr ~= 0

    num_cols = dims['num_cols']
    num_rows = dims['num_rows']

    bigNum = 1e3
    fastKineticConstant = bigNum
    smallReverse = fastKineticConstant/(pow(bigNum,2))
    
    kPhosRGp = fastKineticConstant
    kPhosRGm = fastKineticConstant
    kPhosLRGp = fastKineticConstant
    kPhosLRGm = fastKineticConstant
    kAct1p = 2.5                   # 1/s
    kAct1m = smallReverse          # 1/s            
    kAct2p = 0.05                  # 1/s
    kAct2m = smallReverse          # 1/s            
    kHydp = 0.8                    # 1/s      
    kHydm = smallReverse           # 1/s
    kReassocp = 1.21e3             # 1/uM.s
    kReassocm = kReassocp/bigNum   # 1/s
    
    # ensure that the closed loop formed by Act1 & Act2 obey detailed
    # balance
    kAct2m = kAct1m * kAct2p / kAct1p
    # CLOSED LOOP involving G - aGTP - aGDP - G
    # use detailed balance to find kReasocm with either Act (as they have
    # same equilibrium constant
    if True:
        kReassocm = kAct1p*kHydp*kReassocp/(kAct1m*kHydm)
    
    k_kinetic = [
        kPhosRGp, kPhosLRGp, kAct1p, kAct2p, kHydp, kReassocp,
        kPhosRGm, kPhosLRGm, kAct1m, kAct2m, kHydm, kReassocm
        ]

    # CONSTRAINTS
    N_cT = np.zeros(len(M[0])) 
    
    # LR.G = aGTP.betaGamma
    if False:                                                          
        N_cT[1][num_cols + 2] = 1
        N_cT[1][num_cols + 3] = 1
        N_cT[1][num_cols + 4] = -1
        N_cT[1][num_cols + 5] = -1
    # [a-GTP] + [a-GDP] = [beta.gamma]                              **SMALL_ERROR**
    if True:
        N_cT[num_cols + 9] = 1   # beta_gamma
        N_cT[num_cols + 8] = -1  # a_GTP
        N_cT[num_cols + 10] = -1  # a_GDP
    
    K_C = [1]

    # volume vector
    W = list(np.append([1] * num_cols, [V['V_myo']] * num_rows))

    return (k_kinetic, [N_cT], K_C, W)