% Gs protein module. From Dupont Sneyd: simple G protein model.
% Gs is associated with B1AR proteins

% Return kinetic parameters, constraints, and vector of volumes in each
% compartment (pL) (1 if gating variable, or in element corresponding to
% kappa)

function [k_kinetic, N_cT, K_C, W] = 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/(bigNum^2);
    c_G = 3.83; % uM
    
    kbindm = fastKineticConstant;   % 1/s
    kbindp = kbindm / 0.285;        % 1/uM.s
    kActp = 16/c_G;                 % 1/uM.s
    kActm = smallReverse;           % 1/uM.s            
    kHydp = 0.8;                    % 1/s      
    kHydm = smallReverse;           % 1/s
    kReassocp = 1.21e3;             % 1/uM.s
    kReassocm = kReassocp/bigNum;   % 1/s
    
    % CLOSED LOOP involving G - aGTP - aGDP - G
    % use detailed balance to find kReasocm
    if true
        kReassocm = kActp*kHydp*kReassocp/(kActm*kHydm);
    end
    
    k_kinetic = [
        kbindp, kActp, kHydp, kReassocp...
        kbindm, kActm, kHydm, kReassocm
        ]';

    % CONSTRAINTS
    N_cT = zeros(1,size(M,2)); 
    
    % Reaction BIND: equal portions of L + derivatives (L == LR)    **SMALL_ERROR**
    N_cT(1,num_cols + 1) = -1;
    N_cT(1,num_cols + 4) = 1;
    % or LR.G = aGTP.betaGamma
    if false                                                          
        N_cT(2,num_cols + 3) = 1;
        N_cT(2,num_cols + 4) = 1;
        N_cT(2,num_cols + 5) = -1;
        N_cT(2,num_cols + 6) = -1;
    end
    % [a-GTP] + [a-GDP] = [beta.gamma]                              **SMALL_ERROR**
    if true 
        N_cT(2,num_cols + 6) = 1;   % beta_gamma
        N_cT(2,num_cols + 5) = -1;  % a_GTP
        N_cT(2,num_cols + 7) = -1;  % a_GDP
    end
    % Gibbs free energy of L + R binding                            **MED_ERROR**
    if false
        N_cT(1,num_cols + 4) = 1;   % RL
        N_cT(1,num_cols + 1) = -1;  % L
        N_cT(1,num_cols + 2) = -1;  % R
        G_0_bind = -45.1872; % kJ/mol
        R = 8.314;
        T = 310;
        K_bind = exp(G_0_bind/(R*T))*10^6;
        K_C = [K_bind];
    end
    
    K_C = [1 1];

    % volume vector
    W = [ones(num_cols,1); V.V_myo*ones(num_rows,1)];

return 











