Enumerating allosteric parameters in receptor dimers

Enumerating allosteric parameters in receptor dimers#

Quantitative pharmacologists construct Markov chain models to give insight into the relationship between ligand concentration and the fraction of cell surface receptors in each of several molecular conformations. Pharmacologists use these stochastic models to understand the action of natural ligands and drugs on receptor-mediated cell responses. When receptors function as two or more similar protein subunits working in concert (i.e., homodimers or oligomers), receptor models must

  1. account for symmetry,

  2. satisfy thermodynamic constraints, and

  3. properly account for subunit interactions (allostery) mediated by conformational coupling.

The modeling framework presented below satisfies these three requirements.

The file MyTools.ipynb is includes several function definitions whose use is illustrated below.

%run receptor_tools.ipynb

mydoc(myfun, method='both')

Display the signature of myfun followed by the docstring of myfun. Set method ='signature' or 'method = 'docstring' or 'method = 'both'

print_graph(G)

Prints the vertices and edges of the graph G.

generator(A, rowsum=True)

Creates the generator matrix ‘Q’ from the adjacency matrix ‘A’. By default the sum along each row of ‘Q’ is zero (‘rowsum=True’). For the sum along each column of ‘Q’ to be zero, set ‘rowsum=False’.

hill_diagramatic_method(Q)

Returns the spanning tree polynomials rooted in each vertex.

add_vertex_monomials(G=Graph on 0 vertices, method='integer', ring=False)

Add monomials to vertices of a graph.

The add_vertex_monomials function takes a graph G, as well as optional parameters method and ring. The function creates a new graph H with vertices labeled by monomials. The monomials are chosen based on the number of vertices in G. If the method parameter is set to ‘alpha’ and the number of vertices in G is less than or equal to 10, the monomials are chosen as alphabetical letters (‘a’ to ‘k’). Otherwise, the monomials are chosen as strings of the form ‘a0’, ‘a1’, …, ‘an-1’, where n is the number of vertices in G. The function then adds the vertices from G to H using the monomials as labels, and adds the edges from G to H using the monomials as endpoints. If the ring parameter is set to True, the function also creates a polynomial ring V with the chosen monomials and ‘invlex’ order, and returns both H and V. Otherwise, it returns only H.

INPUT:

  • G – graph object (default: Graph());

  • method – integer (default: integer);

OUTPUT:

  • The graph with monomials as vertices

add_edge_monomials(G0, method='integer', edge_vars=['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'], ring=False, short_name=False)

Add monomials to edges of a graph.

The add_edge_monomials function takes a graph G, as well as optional parameters method, edge_vars, ring, and short_name. If method is set to ‘integer’, the function creates a polynomial ring using the given edge variables and assigns variables to the edges of the graph. The edge variables can be represented either as ‘e’ followed by the first vertex label or the first and second vertex labels concatenated. If the vertex labels are integers and the short_name parameter is set to True, the edge variables are created using only the first vertex label. If method is set to ‘alpha’, the function creates a polynomial ring using the given edge variables and assigns variables to the edges of the graph in reverse order. The number of edge variables used is determined by the size of the graph. The ring parameter, if set to True, injects the polynomial variables into the global namespace and returns the graph and the polynomial ring. Otherwise, it simply returns the graph.

INPUT:

  • G – graph object (default: Graph());

  • method – integer (default: integer);

OUTPUT:

  • The graph with monomials as edges

add_edge_monomials_ver2(G, edge_labels='default', prefix='')

Add monomials to edges of a graph.

[NEED TO WRITE DESCRIPTION]

enumerate_allosteric_parameters(G=House Graph: Graph on 5 vertices, **kwargs)

Enumerate allosteric parameters of a receptor model.

[NEED TO WRITE DESCRIPTION]

INPUT:

  • G – graph object (default: Graph());

  • method – integer (default: integer);

OUTPUT:

  • The graph with monomials as vertices

cartesian_power(G, k=2, edge_labels='cannonical')

Construct Cartesian power of a graph.

[NEED TO WRITE DESCRIPTION]

reduced_cartesian_power(G, k=2, edge_labels='cannonical', prefix='', independent=False)

Construct reduced Cartesian power of a graph.

[NEED TO WRITE DESCRIPTION]

reduced_cartesian_power_ver2(G, k, contexts=True, edge_labels=True)

<IPython.core.display.Markdown object>

combinatorial_laplacian(G, combinatorial_coefficients=False)

Construct the combinatorial Laplacian of a graph.

[NEED TO WRITE DESCRIPTION]

tree_polynomial(G, combinatorial_coefficients=False)

Construct the tree polynomial of a graph.

[NEED TO WRITE DESCRIPTION]

verbose = True

Belowsagemath methods are used to create and plot a graph that represents the topology of the states and transitions of the receptor model. The vertices are integers. The edge labels are currently None so these are not shown (the show method includes edge_labels=False)

G=graphs.HouseGraph();
G.show(edge_labels=False)
_images/90ca279e0d18553db09a4e4e22247a81aabca86a70b717d6ff44544411677fc3.png

The following commands produces a spanning tree of the receptor model rooted in vertex 0. The function add_edge_monomials(G) defined variables from a polynomial ring and applies them edge labels to the graph. The default method uses $e_1, e_2, \ldots$. Using method='alpha' in add_edge_monomials() creates single digit edge labels ($b,c,\ldots$).

#my_method = 'alpha'
my_method = 'integer'
(BFS_Vertices,BFS_Tree) = G.lex_BFS(tree=True,initial_vertex=0)
(T,E)=add_edge_monomials(BFS_Tree,method=my_method,ring=True,short_name=True)
if verbose: print(f'The edge labels {E.gens()} are indeterminants in a {E}')
T.set_pos(G.get_pos())
T.show(edge_labels=True)
The edge labels (e1, e2, e3, e4) are indeterminants in a Multivariate Polynomial Ring in e1, e2, e3, e4 over Integer Ring
_images/85d77d80c4c7693d6a43708d0698badbe6b59a93e748f6d97d63856d71382045.png
F = [E(0)]
for v in BFS_Vertices[1:]: # every elemenet except the first (the root 0, which has been set to E(0)
    P = T.all_paths(v, 0, use_multiedges=False, report_edges=True, labels=True)
    f=0
    for p in P[0]:  # there is only one path, so take the first, which is P[0]
        f = f+p[2] # p[0] & p[1] are vertices; p[2] is edge_label
    F.append(f)
show(F)
\(\displaystyle \left[0, e_{1}, e_{2}, e_{3} + e_{2}, e_{4} + e_{3} + e_{2}\right]\)
KappaVars = []; KappaNames = []
for e in E.gens():
    estr = str(e)
    if len(estr)!=1:
        estr=estr.replace('e','')
    var = 'kappa_'+estr
    KappaVars.append(var)
    KappaNames.append('\\kappa_{\\mathit{' + estr + '}}')
if verbose: print(KappaVars); print(KappaNames)
['kappa_1', 'kappa_2', 'kappa_3', 'kappa_4']
['\\kappa_{\\mathit{1}}', '\\kappa_{\\mathit{2}}', '\\kappa_{\\mathit{3}}', '\\kappa_{\\mathit{4}}']
nv = len(F) # nv = G.order()
EtaProb = zeros(nv); EtaMons = zeros(nv); EtaCoef = zeros(nv)
for i0 in range(nv):
    for i1 in range(i0,nv):
        fprod=F[i0]*F[i1]
        EtaProb[i0][i1]=fprod
        EtaMons[i0][i1]=fprod.monomials()
        EtaCoef[i0][i1]=fprod.coefficients()
if verbose: show(table(EtaProb)); show(table(EtaMons)); show(table(EtaCoef))
\(0\) \(0\) \(0\) \(0\) \(0\)
\(0\) \(e_{1}^{2}\) \(e_{1} e_{2}\) \(e_{1} e_{3} + e_{1} e_{2}\) \(e_{1} e_{4} + e_{1} e_{3} + e_{1} e_{2}\)
\(0\) \(0\) \(e_{2}^{2}\) \(e_{2} e_{3} + e_{2}^{2}\) \(e_{2} e_{4} + e_{2} e_{3} + e_{2}^{2}\)
\(0\) \(0\) \(0\) \(e_{3}^{2} + 2 e_{2} e_{3} + e_{2}^{2}\) \(e_{3} e_{4} + e_{2} e_{4} + e_{3}^{2} + 2 e_{2} e_{3} + e_{2}^{2}\)
\(0\) \(0\) \(0\) \(0\) \(e_{4}^{2} + 2 e_{3} e_{4} + 2 e_{2} e_{4} + e_{3}^{2} + 2 e_{2} e_{3} + e_{2}^{2}\)
\(\left[\right]\) \(\left[\right]\) \(\left[\right]\) \(\left[\right]\) \(\left[\right]\)
\(0\) \(\left[e_{1}^{2}\right]\) \(\left[e_{1} e_{2}\right]\) \(\left[e_{1} e_{3}, e_{1} e_{2}\right]\) \(\left[e_{1} e_{4}, e_{1} e_{3}, e_{1} e_{2}\right]\)
\(0\) \(0\) \(\left[e_{2}^{2}\right]\) \(\left[e_{2} e_{3}, e_{2}^{2}\right]\) \(\left[e_{2} e_{4}, e_{2} e_{3}, e_{2}^{2}\right]\)
\(0\) \(0\) \(0\) \(\left[e_{3}^{2}, e_{2} e_{3}, e_{2}^{2}\right]\) \(\left[e_{3} e_{4}, e_{2} e_{4}, e_{3}^{2}, e_{2} e_{3}, e_{2}^{2}\right]\)
\(0\) \(0\) \(0\) \(0\) \(\left[e_{4}^{2}, e_{3} e_{4}, e_{2} e_{4}, e_{3}^{2}, e_{2} e_{3}, e_{2}^{2}\right]\)
\(\left[\right]\) \(\left[\right]\) \(\left[\right]\) \(\left[\right]\) \(\left[\right]\)
\(0\) \(\left[1\right]\) \(\left[1\right]\) \(\left[1, 1\right]\) \(\left[1, 1, 1\right]\)
\(0\) \(0\) \(\left[1\right]\) \(\left[1, 1\right]\) \(\left[1, 1, 1\right]\)
\(0\) \(0\) \(0\) \(\left[1, 2, 1\right]\) \(\left[1, 1, 1, 2, 1\right]\)
\(0\) \(0\) \(0\) \(0\) \(\left[1, 2, 2, 1, 2, 1\right]\)
UniqueMons = []
for mon in sorted(set(flatten(EtaMons))):
    UniqueMons.append(mon)
if verbose: show(UniqueMons)
\(\displaystyle \left[0, e_{1}^{2}, e_{1} e_{2}, e_{2}^{2}, e_{1} e_{3}, e_{2} e_{3}, e_{3}^{2}, e_{1} e_{4}, e_{2} e_{4}, e_{3} e_{4}, e_{4}^{2}\right]\)
EtaVars = []; EtaNames = []
for mon in UniqueMons:
    var = str(mon)
    var = var.replace('*', '')
    if my_method=='alpha':
        nchar=1
    else:
        nchar=2
    var = replace_powers(var,nchar)
    EtaVars.append('eta_'+var)
    if my_method=='alpha':
        EtaNames.append('\\eta_{\\mathit{' + var + '}}')
    else:
        EtaNames.append('\\eta_{\\mathit{' + var.replace('e','') + '}}')
if verbose: print(EtaVars); print(EtaNames)
['eta_0', 'eta_e1e1', 'eta_e1e2', 'eta_e2e2', 'eta_e1e3', 'eta_e2e3', 'eta_e3e3', 'eta_e1e4', 'eta_e2e4', 'eta_e3e4', 'eta_e4e4']
['\\eta_{\\mathit{0}}', '\\eta_{\\mathit{11}}', '\\eta_{\\mathit{12}}', '\\eta_{\\mathit{22}}', '\\eta_{\\mathit{13}}', '\\eta_{\\mathit{23}}', '\\eta_{\\mathit{33}}', '\\eta_{\\mathit{14}}', '\\eta_{\\mathit{24}}', '\\eta_{\\mathit{34}}', '\\eta_{\\mathit{44}}']
PiVars = [ 'p'+str(i) for i in range(len(F))]
PiNames = [ '\\pi_{\\mathit{' + str(i) + '}}' for i in range(len(F))]
if verbose: print(PiVars)
if verbose: print(PiNames)
['p0', 'p1', 'p2', 'p3', 'p4']
['\\pi_{\\mathit{0}}', '\\pi_{\\mathit{1}}', '\\pi_{\\mathit{2}}', '\\pi_{\\mathit{3}}', '\\pi_{\\mathit{4}}']
A=PolynomialRing(ZZ,names=PiVars+KappaVars+EtaVars,order='invlex')
A.inject_variables()
A._latex_names = PiNames+KappaNames+EtaNames 
# https://ask.sagemath.org/question/8202/how-to-give-latex-names-to-generators-of-polynomial-rings/
Defining p0, p1, p2, p3, p4, kappa_1, kappa_2, kappa_3, kappa_4, eta_0, eta_e1e1, eta_e1e2, eta_e2e2, eta_e1e3, eta_e2e3, eta_e3e3, eta_e1e4, eta_e2e4, eta_e3e4, eta_e4e4
d_vars=dict(zip(list(E.gens())+UniqueMons,list(A.gens()[nv:]))) # len(F): because we do not want to include p1,p2,...
d_vars[E(1)]=1
if verbose: print(d_vars)
{e1: kappa_1, e2: kappa_2, e3: kappa_3, e4: kappa_4, 0: eta_0, e1^2: eta_e1e1, e1*e2: eta_e1e2, e2^2: eta_e2e2, e1*e3: eta_e1e3, e2*e3: eta_e2e3, e3^2: eta_e3e3, e1*e4: eta_e1e4, e2*e4: eta_e2e4, e3*e4: eta_e3e4, e4^2: eta_e4e4, 1: 1}
KappaProb = zeros(nv); KappaMons = zeros(nv); KappaCoef = zeros(nv);
Kappa = repmat(A(1),nv)
for i0 in range(nv):
    for i1 in range(nv):
        if i0 <= i1:
            fsum = F[i0]+F[i1]
            KappaProb[i0][i1]=fsum
            KappaMons[i0][i1]=fsum.monomials()
            KappaCoef[i0][i1]=fsum.coefficients()
            for m in range(len(KappaMons[i0][i1])):
                mon = KappaMons[i0][i1][m]
                Kappa[i0][i1]*= d_vars[mon]^KappaCoef[i0][i1][m]
            if i0!=i1:
                Kappa[i0][i1]*=2
        else:
            Kappa[i0][i1]=0
if verbose:
    show(table(KappaProb)); show(table(KappaMons)); show(table(KappaCoef)); show(table(Kappa))
\(0\) \(e_{1}\) \(e_{2}\) \(e_{3} + e_{2}\) \(e_{4} + e_{3} + e_{2}\)
\(0\) \(2 e_{1}\) \(e_{2} + e_{1}\) \(e_{3} + e_{2} + e_{1}\) \(e_{4} + e_{3} + e_{2} + e_{1}\)
\(0\) \(0\) \(2 e_{2}\) \(e_{3} + 2 e_{2}\) \(e_{4} + e_{3} + 2 e_{2}\)
\(0\) \(0\) \(0\) \(2 e_{3} + 2 e_{2}\) \(e_{4} + 2 e_{3} + 2 e_{2}\)
\(0\) \(0\) \(0\) \(0\) \(2 e_{4} + 2 e_{3} + 2 e_{2}\)
\(\left[\right]\) \(\left[e_{1}\right]\) \(\left[e_{2}\right]\) \(\left[e_{3}, e_{2}\right]\) \(\left[e_{4}, e_{3}, e_{2}\right]\)
\(0\) \(\left[e_{1}\right]\) \(\left[e_{2}, e_{1}\right]\) \(\left[e_{3}, e_{2}, e_{1}\right]\) \(\left[e_{4}, e_{3}, e_{2}, e_{1}\right]\)
\(0\) \(0\) \(\left[e_{2}\right]\) \(\left[e_{3}, e_{2}\right]\) \(\left[e_{4}, e_{3}, e_{2}\right]\)
\(0\) \(0\) \(0\) \(\left[e_{3}, e_{2}\right]\) \(\left[e_{4}, e_{3}, e_{2}\right]\)
\(0\) \(0\) \(0\) \(0\) \(\left[e_{4}, e_{3}, e_{2}\right]\)
\(\left[\right]\) \(\left[1\right]\) \(\left[1\right]\) \(\left[1, 1\right]\) \(\left[1, 1, 1\right]\)
\(0\) \(\left[2\right]\) \(\left[1, 1\right]\) \(\left[1, 1, 1\right]\) \(\left[1, 1, 1, 1\right]\)
\(0\) \(0\) \(\left[2\right]\) \(\left[1, 2\right]\) \(\left[1, 1, 2\right]\)
\(0\) \(0\) \(0\) \(\left[2, 2\right]\) \(\left[1, 2, 2\right]\)
\(0\) \(0\) \(0\) \(0\) \(\left[2, 2, 2\right]\)
\(1\) \(2 \kappa_{\mathit{1}}\) \(2 \kappa_{\mathit{2}}\) \(2 \kappa_{\mathit{2}} \kappa_{\mathit{3}}\) \(2 \kappa_{\mathit{2}} \kappa_{\mathit{3}} \kappa_{\mathit{4}}\)
\(0\) \(\kappa_{\mathit{1}}^{2}\) \(2 \kappa_{\mathit{1}} \kappa_{\mathit{2}}\) \(2 \kappa_{\mathit{1}} \kappa_{\mathit{2}} \kappa_{\mathit{3}}\) \(2 \kappa_{\mathit{1}} \kappa_{\mathit{2}} \kappa_{\mathit{3}} \kappa_{\mathit{4}}\)
\(0\) \(0\) \(\kappa_{\mathit{2}}^{2}\) \(2 \kappa_{\mathit{2}}^{2} \kappa_{\mathit{3}}\) \(2 \kappa_{\mathit{2}}^{2} \kappa_{\mathit{3}} \kappa_{\mathit{4}}\)
\(0\) \(0\) \(0\) \(\kappa_{\mathit{2}}^{2} \kappa_{\mathit{3}}^{2}\) \(2 \kappa_{\mathit{2}}^{2} \kappa_{\mathit{3}}^{2} \kappa_{\mathit{4}}\)
\(0\) \(0\) \(0\) \(0\) \(\kappa_{\mathit{2}}^{2} \kappa_{\mathit{3}}^{2} \kappa_{\mathit{4}}^{2}\)
Eta = repmat(A(1),nv)
for i0 in range(nv):
    for i1 in range(nv):
        if i0 <= i1:
            for m in range(len(EtaMons[i0][i1])):
                mon = EtaMons[i0][i1][m]
                Eta[i0][i1] *= d_vars[mon] ** EtaCoef[i0][i1][m]
        else:
            Eta[i0][i1] = 0
table(Eta)
\(1\) \(1\) \(1\) \(1\) \(1\)
\(0\) \(\eta_{\mathit{11}}\) \(\eta_{\mathit{12}}\) \(\eta_{\mathit{12}} \eta_{\mathit{13}}\) \(\eta_{\mathit{12}} \eta_{\mathit{13}} \eta_{\mathit{14}}\)
\(0\) \(0\) \(\eta_{\mathit{22}}\) \(\eta_{\mathit{22}} \eta_{\mathit{23}}\) \(\eta_{\mathit{22}} \eta_{\mathit{23}} \eta_{\mathit{24}}\)
\(0\) \(0\) \(0\) \(\eta_{\mathit{22}} \eta_{\mathit{23}}^{2} \eta_{\mathit{33}}\) \(\eta_{\mathit{22}} \eta_{\mathit{23}}^{2} \eta_{\mathit{33}} \eta_{\mathit{24}} \eta_{\mathit{34}}\)
\(0\) \(0\) \(0\) \(0\) \(\eta_{\mathit{22}} \eta_{\mathit{23}}^{2} \eta_{\mathit{33}} \eta_{\mathit{24}}^{2} \eta_{\mathit{34}}^{2} \eta_{\mathit{44}}\)
Pi = zeros(nv)
for i0 in range(nv):
    for i1 in range(0, i0):
        Eta[i0][i1] = 0
    for i1 in range(i0,nv):
        Pi[i0][i1]=A.gen(i0)*A.gen(i1)
        if i0!=i1:
            Pi[i0][i1]*=2
table(Pi)
\(\pi_{\mathit{0}}^{2}\) \(2 \pi_{\mathit{0}} \pi_{\mathit{1}}\) \(2 \pi_{\mathit{0}} \pi_{\mathit{2}}\) \(2 \pi_{\mathit{0}} \pi_{\mathit{3}}\) \(2 \pi_{\mathit{0}} \pi_{\mathit{4}}\)
\(0\) \(\pi_{\mathit{1}}^{2}\) \(2 \pi_{\mathit{1}} \pi_{\mathit{2}}\) \(2 \pi_{\mathit{1}} \pi_{\mathit{3}}\) \(2 \pi_{\mathit{1}} \pi_{\mathit{4}}\)
\(0\) \(0\) \(\pi_{\mathit{2}}^{2}\) \(2 \pi_{\mathit{2}} \pi_{\mathit{3}}\) \(2 \pi_{\mathit{2}} \pi_{\mathit{4}}\)
\(0\) \(0\) \(0\) \(\pi_{\mathit{3}}^{2}\) \(2 \pi_{\mathit{3}} \pi_{\mathit{4}}\)
\(0\) \(0\) \(0\) \(0\) \(\pi_{\mathit{4}}^{2}\)
KappaEta = table_multiply(Kappa,Eta)
table(KappaEta)
print(KappaEta)
[[1, 2*kappa_1, 2*kappa_2, 2*kappa_2*kappa_3, 2*kappa_2*kappa_3*kappa_4], [0, kappa_1^2*eta_e1e1, 2*kappa_1*kappa_2*eta_e1e2, 2*kappa_1*kappa_2*kappa_3*eta_e1e2*eta_e1e3, 2*kappa_1*kappa_2*kappa_3*kappa_4*eta_e1e2*eta_e1e3*eta_e1e4], [0, 0, kappa_2^2*eta_e2e2, 2*kappa_2^2*kappa_3*eta_e2e2*eta_e2e3, 2*kappa_2^2*kappa_3*kappa_4*eta_e2e2*eta_e2e3*eta_e2e4], [0, 0, 0, kappa_2^2*kappa_3^2*eta_e2e2*eta_e2e3^2*eta_e3e3, 2*kappa_2^2*kappa_3^2*kappa_4*eta_e2e2*eta_e2e3^2*eta_e3e3*eta_e2e4*eta_e3e4], [0, 0, 0, 0, kappa_2^2*kappa_3^2*kappa_4^2*eta_e2e2*eta_e2e3^2*eta_e3e3*eta_e2e4^2*eta_e3e4^2*eta_e4e4]]
PiEta = table_multiply(Pi,Eta)
table(PiEta)
\(\pi_{\mathit{0}}^{2}\) \(2 \pi_{\mathit{0}} \pi_{\mathit{1}}\) \(2 \pi_{\mathit{0}} \pi_{\mathit{2}}\) \(2 \pi_{\mathit{0}} \pi_{\mathit{3}}\) \(2 \pi_{\mathit{0}} \pi_{\mathit{4}}\)
\(0\) \(\pi_{\mathit{1}}^{2} \eta_{\mathit{11}}\) \(2 \pi_{\mathit{1}} \pi_{\mathit{2}} \eta_{\mathit{12}}\) \(2 \pi_{\mathit{1}} \pi_{\mathit{3}} \eta_{\mathit{12}} \eta_{\mathit{13}}\) \(2 \pi_{\mathit{1}} \pi_{\mathit{4}} \eta_{\mathit{12}} \eta_{\mathit{13}} \eta_{\mathit{14}}\)
\(0\) \(0\) \(\pi_{\mathit{2}}^{2} \eta_{\mathit{22}}\) \(2 \pi_{\mathit{2}} \pi_{\mathit{3}} \eta_{\mathit{22}} \eta_{\mathit{23}}\) \(2 \pi_{\mathit{2}} \pi_{\mathit{4}} \eta_{\mathit{22}} \eta_{\mathit{23}} \eta_{\mathit{24}}\)
\(0\) \(0\) \(0\) \(\pi_{\mathit{3}}^{2} \eta_{\mathit{22}} \eta_{\mathit{23}}^{2} \eta_{\mathit{33}}\) \(2 \pi_{\mathit{3}} \pi_{\mathit{4}} \eta_{\mathit{22}} \eta_{\mathit{23}}^{2} \eta_{\mathit{33}} \eta_{\mathit{24}} \eta_{\mathit{34}}\)
\(0\) \(0\) \(0\) \(0\) \(\pi_{\mathit{4}}^{2} \eta_{\mathit{22}} \eta_{\mathit{23}}^{2} \eta_{\mathit{33}} \eta_{\mathit{24}}^{2} \eta_{\mathit{34}}^{2} \eta_{\mathit{44}}\)
(G, T, KappaEta, A) = enumerate_allosteric_parameters(method='alpha',verbose=True)
_images/c24fd9c3fefadd39a63fa6193a651be42ec8245541a224743dd8ef84d774e759.png _images/f837136cb8035969609d856eff481a7566d5948009d58500e56fd2b57cc3d161.png
\(\displaystyle \newcommand{\Bold}[1]{\mathbf{#1}}\Bold{Z}[b, c, d, e]\)
\(\displaystyle \left[0, b, c, d + c, e + d + c\right]\)
['kappa_b', 'kappa_c', 'kappa_d', 'kappa_e']
['\\kappa_{\\mathit{b}}', '\\kappa_{\\mathit{c}}', '\\kappa_{\\mathit{d}}', '\\kappa_{\\mathit{e}}']
\(0\) \(0\) \(0\) \(0\) \(0\)
\(0\) \(b^{2}\) \(b c\) \(b d + b c\) \(b e + b d + b c\)
\(0\) \(b c\) \(c^{2}\) \(c d + c^{2}\) \(c e + c d + c^{2}\)
\(0\) \(b d + b c\) \(c d + c^{2}\) \(d^{2} + 2 c d + c^{2}\) \(d e + c e + d^{2} + 2 c d + c^{2}\)
\(0\) \(b e + b d + b c\) \(c e + c d + c^{2}\) \(d e + c e + d^{2} + 2 c d + c^{2}\) \(e^{2} + 2 d e + 2 c e + d^{2} + 2 c d + c^{2}\)
\(\left[\right]\) \(\left[\right]\) \(\left[\right]\) \(\left[\right]\) \(\left[\right]\)
\(\left[\right]\) \(\left[b^{2}\right]\) \(\left[b c\right]\) \(\left[b d, b c\right]\) \(\left[b e, b d, b c\right]\)
\(\left[\right]\) \(\left[b c\right]\) \(\left[c^{2}\right]\) \(\left[c d, c^{2}\right]\) \(\left[c e, c d, c^{2}\right]\)
\(\left[\right]\) \(\left[b d, b c\right]\) \(\left[c d, c^{2}\right]\) \(\left[d^{2}, c d, c^{2}\right]\) \(\left[d e, c e, d^{2}, c d, c^{2}\right]\)
\(\left[\right]\) \(\left[b e, b d, b c\right]\) \(\left[c e, c d, c^{2}\right]\) \(\left[d e, c e, d^{2}, c d, c^{2}\right]\) \(\left[e^{2}, d e, c e, d^{2}, c d, c^{2}\right]\)
\(\left[\right]\) \(\left[\right]\) \(\left[\right]\) \(\left[\right]\) \(\left[\right]\)
\(\left[\right]\) \(\left[1\right]\) \(\left[1\right]\) \(\left[1, 1\right]\) \(\left[1, 1, 1\right]\)
\(\left[\right]\) \(\left[1\right]\) \(\left[1\right]\) \(\left[1, 1\right]\) \(\left[1, 1, 1\right]\)
\(\left[\right]\) \(\left[1, 1\right]\) \(\left[1, 1\right]\) \(\left[1, 2, 1\right]\) \(\left[1, 1, 1, 2, 1\right]\)
\(\left[\right]\) \(\left[1, 1, 1\right]\) \(\left[1, 1, 1\right]\) \(\left[1, 1, 1, 2, 1\right]\) \(\left[1, 2, 2, 1, 2, 1\right]\)
\(\displaystyle \left[b^{2}, b c, c^{2}, b d, c d, d^{2}, b e, c e, d e, e^{2}\right]\)
['eta_bb', 'eta_bc', 'eta_cc', 'eta_bd', 'eta_cd', 'eta_dd', 'eta_be', 'eta_ce', 'eta_de', 'eta_ee']
['\\eta_{\\mathit{bb}}', '\\eta_{\\mathit{bc}}', '\\eta_{\\mathit{cc}}', '\\eta_{\\mathit{bd}}', '\\eta_{\\mathit{cd}}', '\\eta_{\\mathit{dd}}', '\\eta_{\\mathit{be}}', '\\eta_{\\mathit{ce}}', '\\eta_{\\mathit{de}}', '\\eta_{\\mathit{ee}}']
{b: kappa_b, c: kappa_c, d: kappa_d, e: kappa_e, b^2: eta_bb, b*c: eta_bc, c^2: eta_cc, b*d: eta_bd, c*d: eta_cd, d^2: eta_dd, b*e: eta_be, c*e: eta_ce, d*e: eta_de, e^2: eta_ee, 1: 1}
[[0, b, c, d + c, e + d + c], [0, 2*b, c + b, d + c + b, e + d + c + b], [0, 0, 2*c, d + 2*c, e + d + 2*c], [0, 0, 0, 2*d + 2*c, e + 2*d + 2*c], [0, 0, 0, 0, 2*e + 2*d + 2*c]]
[[[], [b], [c], [d, c], [e, d, c]], [0, [b], [c, b], [d, c, b], [e, d, c, b]], [0, 0, [c], [d, c], [e, d, c]], [0, 0, 0, [d, c], [e, d, c]], [0, 0, 0, 0, [e, d, c]]]
[[[], [1], [1], [1, 1], [1, 1, 1]], [0, [2], [1, 1], [1, 1, 1], [1, 1, 1, 1]], [0, 0, [2], [1, 2], [1, 1, 2]], [0, 0, 0, [2, 2], [1, 2, 2]], [0, 0, 0, 0, [2, 2, 2]]]
[[1, 2*kappa_b, 2*kappa_c, 2*kappa_c*kappa_d, 2*kappa_c*kappa_d*kappa_e], [0, kappa_b^2, 2*kappa_b*kappa_c, 2*kappa_b*kappa_c*kappa_d, 2*kappa_b*kappa_c*kappa_d*kappa_e], [0, 0, kappa_c^2, 2*kappa_c^2*kappa_d, 2*kappa_c^2*kappa_d*kappa_e], [0, 0, 0, kappa_c^2*kappa_d^2, 2*kappa_c^2*kappa_d^2*kappa_e], [0, 0, 0, 0, kappa_c^2*kappa_d^2*kappa_e^2]]
[[1, 1, 1, 1, 1], [0, eta_bb, eta_bc, eta_bc*eta_bd, eta_bc*eta_bd*eta_be], [0, 0, eta_cc, eta_cc*eta_cd, eta_cc*eta_cd*eta_ce], [0, 0, 0, eta_cc*eta_cd^2*eta_dd, eta_cc*eta_cd^2*eta_dd*eta_ce*eta_de], [0, 0, 0, 0, eta_cc*eta_cd^2*eta_dd*eta_ce^2*eta_de^2*eta_ee]]
\(1\) \(2 \kappa_{\mathit{b}}\) \(2 \kappa_{\mathit{c}}\) \(2 \kappa_{\mathit{c}} \kappa_{\mathit{d}}\) \(2 \kappa_{\mathit{c}} \kappa_{\mathit{d}} \kappa_{\mathit{e}}\)
\(0\) \(\kappa_{\mathit{b}}^{2} \eta_{\mathit{bb}}\) \(2 \kappa_{\mathit{b}} \kappa_{\mathit{c}} \eta_{\mathit{bc}}\) \(2 \kappa_{\mathit{b}} \kappa_{\mathit{c}} \kappa_{\mathit{d}} \eta_{\mathit{bc}} \eta_{\mathit{bd}}\) \(2 \kappa_{\mathit{b}} \kappa_{\mathit{c}} \kappa_{\mathit{d}} \kappa_{\mathit{e}} \eta_{\mathit{bc}} \eta_{\mathit{bd}} \eta_{\mathit{be}}\)
\(0\) \(0\) \(\kappa_{\mathit{c}}^{2} \eta_{\mathit{cc}}\) \(2 \kappa_{\mathit{c}}^{2} \kappa_{\mathit{d}} \eta_{\mathit{cc}} \eta_{\mathit{cd}}\) \(2 \kappa_{\mathit{c}}^{2} \kappa_{\mathit{d}} \kappa_{\mathit{e}} \eta_{\mathit{cc}} \eta_{\mathit{cd}} \eta_{\mathit{ce}}\)
\(0\) \(0\) \(0\) \(\kappa_{\mathit{c}}^{2} \kappa_{\mathit{d}}^{2} \eta_{\mathit{cc}} \eta_{\mathit{cd}}^{2} \eta_{\mathit{dd}}\) \(2 \kappa_{\mathit{c}}^{2} \kappa_{\mathit{d}}^{2} \kappa_{\mathit{e}} \eta_{\mathit{cc}} \eta_{\mathit{cd}}^{2} \eta_{\mathit{dd}} \eta_{\mathit{ce}} \eta_{\mathit{de}}\)
\(0\) \(0\) \(0\) \(0\) \(\kappa_{\mathit{c}}^{2} \kappa_{\mathit{d}}^{2} \kappa_{\mathit{e}}^{2} \eta_{\mathit{cc}} \eta_{\mathit{cd}}^{2} \eta_{\mathit{dd}} \eta_{\mathit{ce}}^{2} \eta_{\mathit{de}}^{2} \eta_{\mathit{ee}}\)
G.show()
_images/955484ecb1e3861c88c8413307ee5a569bcb7d489d52e7053da2c28c6a14f2a1.png
T.show(edge_labels=True)
_images/d69e8292f654e32567284869394a7459f61d10cacdc48477f412a44c18a492bc.png
table(KappaEta)
\(1\) \(2 \kappa_{\mathit{b}}\) \(2 \kappa_{\mathit{c}}\) \(2 \kappa_{\mathit{c}} \kappa_{\mathit{d}}\) \(2 \kappa_{\mathit{c}} \kappa_{\mathit{d}} \kappa_{\mathit{e}}\)
\(0\) \(\kappa_{\mathit{b}}^{2} \eta_{\mathit{bb}}\) \(2 \kappa_{\mathit{b}} \kappa_{\mathit{c}} \eta_{\mathit{bc}}\) \(2 \kappa_{\mathit{b}} \kappa_{\mathit{c}} \kappa_{\mathit{d}} \eta_{\mathit{bc}} \eta_{\mathit{bd}}\) \(2 \kappa_{\mathit{b}} \kappa_{\mathit{c}} \kappa_{\mathit{d}} \kappa_{\mathit{e}} \eta_{\mathit{bc}} \eta_{\mathit{bd}} \eta_{\mathit{be}}\)
\(0\) \(0\) \(\kappa_{\mathit{c}}^{2} \eta_{\mathit{cc}}\) \(2 \kappa_{\mathit{c}}^{2} \kappa_{\mathit{d}} \eta_{\mathit{cc}} \eta_{\mathit{cd}}\) \(2 \kappa_{\mathit{c}}^{2} \kappa_{\mathit{d}} \kappa_{\mathit{e}} \eta_{\mathit{cc}} \eta_{\mathit{cd}} \eta_{\mathit{ce}}\)
\(0\) \(0\) \(0\) \(\kappa_{\mathit{c}}^{2} \kappa_{\mathit{d}}^{2} \eta_{\mathit{cc}} \eta_{\mathit{cd}}^{2} \eta_{\mathit{dd}}\) \(2 \kappa_{\mathit{c}}^{2} \kappa_{\mathit{d}}^{2} \kappa_{\mathit{e}} \eta_{\mathit{cc}} \eta_{\mathit{cd}}^{2} \eta_{\mathit{dd}} \eta_{\mathit{ce}} \eta_{\mathit{de}}\)
\(0\) \(0\) \(0\) \(0\) \(\kappa_{\mathit{c}}^{2} \kappa_{\mathit{d}}^{2} \kappa_{\mathit{e}}^{2} \eta_{\mathit{cc}} \eta_{\mathit{cd}}^{2} \eta_{\mathit{dd}} \eta_{\mathit{ce}}^{2} \eta_{\mathit{de}}^{2} \eta_{\mathit{ee}}\)
show(A)
\(\displaystyle \newcommand{\Bold}[1]{\mathbf{#1}}\Bold{Z}[\kappa_{\mathit{b}}, \kappa_{\mathit{c}}, \kappa_{\mathit{d}}, \kappa_{\mathit{e}}, \eta_{\mathit{bb}}, \eta_{\mathit{bc}}, \eta_{\mathit{cc}}, \eta_{\mathit{bd}}, \eta_{\mathit{cd}}, \eta_{\mathit{dd}}, \eta_{\mathit{be}}, \eta_{\mathit{ce}}, \eta_{\mathit{de}}, \eta_{\mathit{ee}}]\)