diff --git a/README.md b/README.md index 510c1bc..a344b52 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,9 @@ Run nosetests -v to perform tests and diagnoses on functions. Changelog --------- +v0.1.0 +- Added visualization routines to drawing (effective graph and conditional effective graph) + v0.1 - Canalization methods ported to Cython diff --git a/cana/datasets/bio.py b/cana/datasets/bio.py index 180ad31..8c976d1 100644 --- a/cana/datasets/bio.py +++ b/cana/datasets/bio.py @@ -21,6 +21,18 @@ _path = os.path.dirname(os.path.realpath(__file__)) """ Make sure we know what the current directory is """ +def BT474_ErbB_S(): + """Boolean network model of the control of HCC1954 Breast Cell Line Short-term ErbB Network model + + The network is defined in :cite:`der Heyde:2014`. + + Returns: + (BooleanNetwork) + """ + return BooleanNetwork.from_file( + _path + "/cell_collective/BT474 Breast Cell Line Short-term ErbB Network.txt", name="BT474 Breast Cell Line Short-term ErbB", keep_constants=True + ) + def THALIANA(): """Boolean network model of the control of flower morphogenesis in Arabidopsis thaliana diff --git a/cana/drawing/effective_graph.py b/cana/drawing/effective_graph.py new file mode 100644 index 0000000..7ea241e --- /dev/null +++ b/cana/drawing/effective_graph.py @@ -0,0 +1,898 @@ +# -*- coding: utf-8 -*- +""" +Drawing the Effective graph and the Conditional Effective graph. +================================ + +Methods to draw the Effective graph and the Conditional Effective graph. + +""" +# Copyright (C) 2026 by +# Yoshiaki Fujita +# All rights reserved. +# MIT license. +import warnings +import math +import io +import base64 + +try: + import graphviz +except ImportError as error: + warnings.warn( + "'Graphviz' could not be loaded, you won't be able to plot graphs. Try installing it first. {error:s}".format( + error=error + ) + ) +try: + import matplotlib as mpl +except ImportError as error: + warnings.warn( + "'matplotlib' could not be loaded, you won't be able to plot graphs. Try installing it first. {error:s}".format( + error=error + ) + ) +import matplotlib.pyplot as plt +from matplotlib.colors import LinearSegmentedColormap + +try: + import IPython +except ImportError as error: + warnings.warn( + "'IPython' could not be loaded, you won't be able to plot graphs. Try installing it first. {error:s}".format( + error=error + ) + ) +from IPython.display import display, Markdown, HTML + +# =========================== +# GLOBAL VISUALIZATION CONFIG +# =========================== + +VIZ_CONFIG = { + "CANVAS_INCH": 7, + "FONT_SIZE": "8", + "EDGE_PENWIDTH": "4", + "NODE_HEIGHT": "0.4", + "WIDTH": "0.8", + "NODE_MARGIN": ".05", + "NODE_OUTLINE_COLOR": "black", + "NODE_FILLCOLOR": "#edf7ed", + "INPUT_FILL": "#edf7ed", + "SINK_FILL": "#edf7ed", + "NODE_FONTNAME": "Helvetica", + "NODE_FONTCOLOR": "black", + "GRID_DX": 120.0, # Increased from 2.0 (standard points) + "GRID_DY": 80.0, # Increased from 1.5 +} + + + +# =========================== +# Common functions +# =========================== + +def compute_grid_layout(SG, custom_order=None): + nodes = list(SG.nodes()) + # Sort nodes by label to keep the grid order consistent/alphabetical + sg_label = {n: SG.nodes[n].get('label', str(n)) for n in SG.nodes()} + nodes.sort(key=lambda n: sg_label[n].lower()) + + N_total = len(nodes) + if N_total == 0: + return {}, set(), set(), {} + + # 1. Calculate Grid Dimensions + # cols is the square root (e.g., sqrt(16)=4, sqrt(20)=4.47 -> 5) + cols = math.ceil(math.sqrt(N_total)) + # rows is determined by total nodes divided by columns + rows = math.ceil(N_total / cols) + + cfg = VIZ_CONFIG + + # 2. Center the grid around (0,0) + x0 = - (cols - 1) * cfg["GRID_DX"] / 2.0 + y0 = + (rows - 1) * cfg["GRID_DY"] / 2.0 + + def xy_of(r, c): + return (x0 + c * cfg["GRID_DX"], y0 - r * cfg["GRID_DY"]) + + positions = {} + + # 3. Fill the grid row-by-row + for i, nid in enumerate(nodes): + r = i // cols # Current row + c = i % cols # Current column + positions[nid] = xy_of(r, c) + + # Maintain compatibility with the rest of your script + inputs = [n for n in nodes if SG.in_degree(n) == 0] + sinks = [n for n in nodes if SG.out_degree(n) == 0] + + return positions, set(inputs), set(sinks), sg_label + +def create_base_graph(): + + cfg = VIZ_CONFIG + g = graphviz.Digraph(engine='neato') + + # ... (graph attributes remain same) + + g.attr( + 'node', + pin='true', + shape='box', + # --- ADD THESE THREE LINES --- + fixedsize='true', # Forces Graphviz to honor width/height + width='0.8', # Set your desired width in inches + height=cfg["NODE_HEIGHT"], # This is already 0.4 in your config + # ----------------------------- + margin=cfg["NODE_MARGIN"], + color=cfg["NODE_OUTLINE_COLOR"], + style='filled', + fillcolor=cfg["NODE_FILLCOLOR"], + fontname=cfg["NODE_FONTNAME"], + fontcolor=cfg["NODE_FONTCOLOR"], + fontsize=cfg["FONT_SIZE"] + ) + + g.attr('edge', arrowhead='normal', arrowsize='.5') + + stitle="" + g.attr( + 'graph', + label=f'\n{stitle}', + # ... other settings ... + overlap='false', # Changed from 'true' to 'false' + splines='true', # Routes edges as curves around nodes + sep='+10', # Adds a small buffer/padding around each node + esep='+2', # Buffer specifically for edge routing + ) + + return g + +# =================================================== +# Functions for the effective graph visualization +# =================================================== + +def get_effective_node_color(nid, EG, norm_out, cmap): + + out_degree = EG.out_degree(nid, weight='weight') + + # --- Zero effective out-degree --- + if out_degree == 0: + fill = '#2ca02c' # dark green fill + outline = '#98df8a' # light green border + return fill, outline + + # --- Positive effective out-degree --- + rgb = cmap(norm_out(out_degree)) + fill = mpl.colors.rgb2hex(rgb) + + outline = '#ff9896' # light red border + + return fill, outline + +def get_effective_legend_fig(max_outdegree=10): + import matplotlib.pyplot as plt + import matplotlib as mpl + import numpy as np + from matplotlib.colors import LinearSegmentedColormap + + # 1. Replicate your colormap logic exactly + cmap = LinearSegmentedColormap.from_list('custom', ['white', '#d62728']) + cmap.set_under('#2ca02c') # Matches your out_degree == 0 color + + # 2. Replicate your normalization (vmin must be slightly above 0 for 'under' to trigger) + norm = mpl.colors.Normalize(vmin=1e-10, vmax=max_outdegree) + + fig = plt.figure(figsize=(1.2, 3)) + ax = fig.add_axes([0.05, 0.1, 0.25, 0.8]) + + ticks = [0, 2, 4, 6, 8, 10] + # Boundaries help define the segments in the bar + boundaries = np.linspace(0, max_outdegree, 50).tolist() + + cb = mpl.colorbar.ColorbarBase( + ax, cmap=cmap, norm=norm, + boundaries=boundaries, + ticks=ticks, + spacing='uniform', + orientation='vertical', + extend='min', # This creates the pointed 'arrow' at the bottom for the Green color + format='%.0f' + ) + + # Set the label and styling + cb.set_label('Effective out-degree', fontsize=9, fontweight='bold') + ax.tick_params(labelsize=8) + + # Label the 'under' color specifically if you want + ax.set_title("Zero = Green", fontsize=7, pad=10, color='#2ca02c') + + return fig + +def visualize_effective_graph(EG, sModel='your model', threshold=0.0, manual_positions=None): + """ + Visualize the effective graph of a Boolean network, with optional manual node positions. + + Parameters + ---------- + EG : networkx directed graph + Effective graph. + sModel : str, optional + Model name for title. + threshold : float, optional + Threshold for effective graph edge weights. + manual_positions : dict, optional + Dictionary of node positions keyed by node ID (int) or node label (str). + Values are (x, y) coordinates, e.g., {0: (0,0), 'Zeb': (1,2)} + """ + + # --- Labels and layout --- + sg_label = {n: EG.nodes[n].get('label', str(n)) for n in EG.nodes()} + positions, inputs_set, sinks_set, _ = compute_grid_layout(EG) + + # --- Override with manual positions if provided --- + if manual_positions: + new_positions = {} + for key, value in manual_positions.items(): + if isinstance(key, str): + nid = next((n for n, lbl in sg_label.items() if lbl == key), None) + if nid is None: + raise ValueError(f"Label '{key}' not found in network nodes.") + else: + nid = key + new_positions[nid] = value + positions.update(new_positions) + + # --- Base Graphviz --- + pSG = create_base_graph() + #pSG = create_base_graph() + cfg = VIZ_CONFIG + max_penwidth = float(cfg["EDGE_PENWIDTH"]) + + # ===================== + # PRECOMPUTE NORMALIZATION FOR NODE COLORS + # ===================== + out_vals = [EG.out_degree(n, weight='weight') for n in EG.nodes()] + vmin, vmax = min(out_vals), max(out_vals) + norm_out = mpl.colors.Normalize(vmin=vmin, vmax=vmax) + cmap = LinearSegmentedColormap.from_list('custom', ['white', '#d62728']) + cmap.set_under('#2ca02c') # nodes with zero out-degree + + # 1. Calculate the grid dimensions first to get 'cols' + N_total = len(EG.nodes()) + cols = math.ceil(math.sqrt(N_total)) + + # 2. Your new Scaling Logic + if cols > 4: + size_multiplier = 0.9 ** (cols - 4) + else: + size_multiplier = 1.0 + + # 3. Apply the multiplier to the base config + node_w = float(VIZ_CONFIG["WIDTH"]) * size_multiplier + node_h = float(VIZ_CONFIG["NODE_HEIGHT"]) * size_multiplier + base_font = 10 * size_multiplier # Starting point for font + + # ===================== + # NODES + # ===================== + for nid in EG.nodes(): + label = sg_label[nid] + x, y = positions[nid] + fill, outline = get_effective_node_color(nid, EG, norm_out, cmap) + + # --- DYNAMIC FONT CALCULATION --- + # Start with a base size (e.g., 12) and reduce it for longer labels + # This formula shrinks the font as the character count increases + base_size = 10 + if len(label) > 4: + # Decrease font size by 1 point for every 2 extra characters + dynamic_font = max(6, base_size - (len(label) - 4) // 2) + else: + dynamic_font = base_size + + pSG.node(str(nid), + label=label, + pos=f"{x:.3f},{y:.3f}!", + fillcolor=fill, + color=outline, + width=str(node_w), # New Scaled Width + height=str(node_h), # New Scaled Height + fontsize=str(dynamic_font), + fixedsize='true') + + # ===================== + # EDGES (weighted) + # ===================== + for uid, vid, data in EG.edges(data=True): + weight = data.get('weight', 1.0) + penwidth = max_penwidth * float(weight) + + if uid == vid: + # Self-loop + color = '#bdbdbd' + uid_draw = f"{uid}:w" + vid_draw = f"{vid}:c" + else: + color = '#636363' + uid_draw = f"{uid}:w" # :w forces the edge to the West (left) port + vid_draw = f"{vid}:c" # :c forces the edge to the Center + + pSG.edge(str(uid), str(vid), penwidth=str(penwidth), color=color) + + # ===================== + # Display + # ===================== + # 1. Display the Title/Condition + + if threshold != 0.0: + title_str = f"##### Threshold Effective Graph: {sModel}" + title_str += f"\n**Edge Weight Threshold:** {str(threshold)}" + else: + title_str = f"##### Effective Graph: {sModel}" + + display(Markdown(title_str)) + + #display(pSG) + + # Prepare Legend Image + # Find the actual max out-degree from your data to scale the bar correctly + current_max = max([EG.out_degree(n, weight='weight') for n in EG.nodes()]) + fig_legend = get_effective_legend_fig(current_max) + + buf = io.BytesIO() + fig_legend.savefig(buf, format='png', bbox_inches='tight', dpi=150, transparent=True) + plt.close(fig_legend) + + legend_base64 = base64.b64encode(buf.getbuffer()).decode("ascii") + legend_html = f"" + + # Prepare Graph Image (SVG is best for Graphviz) + graph_svg = pSG.pipe(format='svg').decode('utf-8') + + # 4. Final Side-by-Side Layout + display(HTML(f""" +
+
+ {graph_svg} +
+
+ {legend_html} +
+
+ """)) + +# ================================================================= +# Functions for the conditional effective graph visualization +# ================================================================= + +def get_legend_figure(): + import matplotlib.pyplot as plt + from matplotlib.patches import Patch + from matplotlib.lines import Line2D + + # Reduced height (0.8) to keep it compact between graph and title + fig, ax = plt.subplots(figsize=(12, 0.8)) + + # Custom color for dark gray + dark_gray = '#4F4F4F' + + handles = [ + Patch(facecolor='white', edgecolor=dark_gray, linewidth=2, label='Conditioned Node (Double Border)'), + Patch(facecolor='white', edgecolor='red', linewidth=2, label='Node Fixed as 1'), + Line2D([0], [0], color='red', linestyle='--', dashes=(5, 2), linewidth=2, marker='>', markersize=8, label='Signal from Fixed 1'), + Patch(facecolor='white', edgecolor='blue', linewidth=2, label='Node Fixed as 0'), + Line2D([0], [0], color='blue', linestyle='--', dashes=(5, 2), linewidth=2, marker='>', markersize=8, label='Signal from Fixed 0'), + Patch(facecolor='#C0C0C0', edgecolor='white', linewidth=2, label='Fully Redundant Node'), # Updated to match your hex + Line2D([0], [0], color='#00000040', linestyle='--', linewidth=2, marker='>', markersize=8, label='Redundant Signal'), + Line2D([0], [0], color='#000000', linestyle='-', linewidth=2, marker='>', markersize=8, label='Viral Signal') + ] + + ax.legend(handles=handles, loc='upper left', ncol=4, frameon=False, handlelength=3.0, handletextpad=0.5, fontsize=9) + plt.axis('off') + return fig + +def create_conditional_effective_graph(EG_cn, EG0, conditioned_nodes): + + # Compute effective graph + #EG_cn = bn.conditional_effective_graph(conditioned_nodes=conditioned_nodes, bound=bound, threshold=0.0) + + print(type(EG_cn)) + + # Assign effective connectivity on edges + #dict_effconn = {nid: node.effective_connectivity(norm=False) + # for nid, node in enumerate(EG_cn.nodes,start=0) } + #nx.set_node_attributes(EG_cn, dict_effconn, 'effective_connectivity') + + # Add an attribute which discriminate conditioned nodes from non-conditioned node + for node in EG_cn.nodes(): + if node in conditioned_nodes: + EG_cn.nodes[node]['conditioned'] = True + else: + EG_cn.nodes[node]['conditioned'] = False + + # Add removed edges due to their fully redandant character aquisitions + # Identify edges become fully redundant due to conditioning + #EG = bn.effective_graph() + fully_redundant_edges = set(EG0.edges()) - set(EG_cn.edges()) + + # Add them to the conditional effective graph with an attribute + for u, v in fully_redundant_edges: + EG_cn.add_edge(u, v, fully_redundant=True) + for u, v in EG_cn.edges(): + if 'fully_redundant' not in EG_cn[u][v]: + EG_cn[u][v]['fully_redundant'] = False + + # Determine nodes whose ALL outgoing edges are fully redundant as fully redundant nodes + fully_redundant_nodes = {} + + for nid in EG_cn.nodes(): + + edges_out = [ + (u, v, d) for (u, v, d) in EG_cn.out_edges(nid, data=True) + if v != u + ] + + if len(edges_out) == 0: + fully_redundant_nodes[nid] = False + continue + + fully_redundant_nodes[nid] = all( + d.get('fully_redundant', False) for (_, _, d) in edges_out + ) + return EG_cn, fully_redundant_nodes + +def visualize_conditional_effective_graph(EG_cn, EG0, conditioned_nodes, sModel='your model', conditioned_str=None, manual_positions=None, node_attribute_map=None, category_color_map=None): + """ + Visualize the conditional effective graph of a Boolean network + + Parameters + ---------- + EG_cn: networkx directed graph + Conditional Effective graph generated with conditioned_nodes. + EG0 : networkx directed graph + Effective graph generated with edge removal threshold 0.0. + conditioned_nodes: dictionary + Conditioned nodes used to generate EG_cn. + sModel : str, optional + Model name for title. + conditioned_str : str, optional + Conditioned nodes information for title. + manual_positions : dict, optional + Dictionary of node positions keyed by node ID (int) or node label (str). + Values are (x, y) coordinates, e.g., {0: (0,0), 'Zeb': (1,2)} + node_attribute_map : dict, optional + category_color_map : dict, optional + """ + + #from cana.boolean_network import BooleanNetwork as BN + #from IPython.display import display + + DEFAULT_NODE_COLOR = VIZ_CONFIG["NODE_FILLCOLOR"] + + #bn = BN.from_file(input_cnet, type='cnet') + + # --- Build conditional effective graph --- + EG_cn_viz, fully_redundant_nodes = create_conditional_effective_graph(EG_cn, EG0, conditioned_nodes) + + # --- Labels and layout --- + sg_label = {n: EG_cn_viz.nodes[n].get('label', str(n)) for n in EG_cn_viz.nodes()} + positions, inputs_set, sinks_set, _ = compute_grid_layout(EG_cn_viz) + + # --- Override with manual positions if provided --- + if manual_positions: + new_positions = {} + for key, value in manual_positions.items(): + # Map label to node id if needed + if isinstance(key, str): + nid = next((n for n, lbl in sg_label.items() if lbl == key), None) + if nid is None: + raise ValueError(f"Label '{key}' not found in network nodes.") + else: + nid = key + new_positions[nid] = value + positions.update(new_positions) + + # --- Base Graphviz --- + pSG = create_base_graph() + #if conditioned_str==None: + # pSG = create_base_graph(f"Effective graph: {sModel}") + #else: + # pSG = create_base_graph(f"Effective graph: {sModel} \n Condition:{conditioned_str}") + + cfg = VIZ_CONFIG + max_penwidth = float(cfg["EDGE_PENWIDTH"]) + + # 1. Calculate the grid dimensions first to get 'cols' + N_total = len(EG_cn.nodes()) + cols = math.ceil(math.sqrt(N_total)) + + # 2. Your new Scaling Logic + if cols > 4: + size_multiplier = 0.9 ** (cols - 4) + else: + size_multiplier = 1.0 + + # 3. Apply the multiplier to the base config + node_w = float(VIZ_CONFIG["WIDTH"]) * size_multiplier + node_h = float(VIZ_CONFIG["NODE_HEIGHT"]) * size_multiplier + base_font = 10 * size_multiplier # Starting point for font + + # ========================================================== + # Determine Base Fill (default / sink / input) + # ========================================================== + fill = cfg["NODE_FILLCOLOR"] + + # ===================== + # NODES + # ===================== + for nid, d in EG_cn_viz.nodes(data=True): + label_text = sg_label[nid] + x, y = positions[nid] + + # 1. Determine Font + dynamic_font = max(6, 10 - (len(label_text) - 4) // 2) if len(label_text) > 4 else 10 + + # 2. Determine Background Color (Fill) + # Start with default/input/sink + node_fill = cfg["NODE_FILLCOLOR"] + if nid in sinks_set: + node_fill = cfg["SINK_FILL"] + elif nid in inputs_set: + node_fill = cfg["INPUT_FILL"] + + # Override with category color + if node_attribute_map and category_color_map: + attr = node_attribute_map.get(label_text) or node_attribute_map.get(nid) + if attr in category_color_map: + node_fill = category_color_map[attr] + + # Apply grey if redundant (Move this up if you prefer category colors over grey) + if fully_redundant_nodes.get(nid, False): + node_fill = '#C0C0C0' + + # 3. Determine Border (Color & Style) + border_color = "black" + pen_w = "1" + periph = "1" + + c_state = d.get('conditioned_state', None) + is_cond = d.get('conditioned', False) + + if is_cond: + periph = "2" # Double border for the source of the condition + border_color = "blue" if c_state == 0 else "red" + pen_w = "1.5" + elif c_state is not None: + border_color = "blue" if c_state == 0 else "red" + pen_w = "3" # Thick border for nodes affected by the condition + + # 4. ONE SINGLE CALL TO DRAW + pSG.node(str(nid), + label=label_text, + pos=f"{x:.3f},{y:.3f}!", + fillcolor=node_fill, + color=border_color, + peripheries=periph, + penwidth=pen_w, + width=str(node_w), + height=str(node_h), + fontsize=str(dynamic_font), + fixedsize='true', + style='filled') + + + # ===================== + # EDGES + # ===================== + for uid, vid, d in EG_cn_viz.edges(data=True): + uid_str, vid_str = str(uid), str(vid) + weight = d.get('weight', 0) + penwidth = float(max_penwidth) * weight + source_state = EG_cn.nodes[uid].get('conditioned_state', None) + + DASH_PENWIDTH = "3" + + if d.get('fully_redundant', False): + pSG.edge(uid_str, vid_str, style='dashed', color='#00000040', penwidth=DASH_PENWIDTH) + continue + if source_state == 0: + pSG.edge(uid_str, vid_str, style='dashed', color='#0000FF70', penwidth=str(penwidth)) + continue + elif source_state == 1: + pSG.edge(uid_str, vid_str, style='dashed', color='#FF000070', penwidth=str(penwidth)) + continue + + if uid_str == vid_str: + color = '#636363' + uid_draw = f"{uid}:w" + vid_draw = f"{vid}:c" + else: + color = '#000000' + uid_draw = uid_str + vid_draw = vid_str + + pSG.edge(uid_draw, vid_draw, penwidth=str(penwidth), color=color) + + # 1. Display the Title/Condition + title_str = f"##### Conditional Effective Graph: {sModel}" + if conditioned_str: + title_str += f"\n**Condition:** {conditioned_str}" + + display(Markdown(title_str)) + + # 2. Display the conditional effective graph + display(pSG) + + # 3. Display the Legend (Matplotlib) + fig_legend = get_legend_figure() + display(fig_legend) + plt.close(fig_legend) # Prevents double-display in some environments + +def visualize_conditional_effective_graph_old(EG_cn, EG0, conditioned_nodes, sModel='your model', conditioned_str=None, manual_positions=None, node_attribute_map=None, category_color_map=None): + """ + Visualize the conditional effective graph of a Boolean network + + Parameters + ---------- + EG_cn: networkx directed graph + Conditional Effective graph generated with conditioned_nodes. + EG0 : networkx directed graph + Effective graph generated with edge removal threshold 0.0. + conditioned_nodes: dictionary + Conditioned nodes used to generate EG_cn. + sModel : str, optional + Model name for title. + conditioned_str : str, optional + Conditioned nodes information for title. + manual_positions : dict, optional + Dictionary of node positions keyed by node ID (int) or node label (str). + Values are (x, y) coordinates, e.g., {0: (0,0), 'Zeb': (1,2)} + node_attribute_map : dict, optional + category_color_map : dict, optional + """ + + #from cana.boolean_network import BooleanNetwork as BN + #from IPython.display import display + + DEFAULT_NODE_COLOR = VIZ_CONFIG["NODE_FILLCOLOR"] + + #bn = BN.from_file(input_cnet, type='cnet') + + # --- Build conditional effective graph --- + EG_cn_viz, fully_redundant_nodes = create_conditional_effective_graph(EG_cn, EG0, conditioned_nodes) + + # --- Labels and layout --- + sg_label = {n: EG_cn_viz.nodes[n].get('label', str(n)) for n in EG_cn_viz.nodes()} + positions, inputs_set, sinks_set, _ = compute_grid_layout(EG_cn_viz) + + # --- Override with manual positions if provided --- + if manual_positions: + new_positions = {} + for key, value in manual_positions.items(): + # Map label to node id if needed + if isinstance(key, str): + nid = next((n for n, lbl in sg_label.items() if lbl == key), None) + if nid is None: + raise ValueError(f"Label '{key}' not found in network nodes.") + else: + nid = key + new_positions[nid] = value + positions.update(new_positions) + + # --- Base Graphviz --- + pSG = create_base_graph() + #if conditioned_str==None: + # pSG = create_base_graph(f"Effective graph: {sModel}") + #else: + # pSG = create_base_graph(f"Effective graph: {sModel} \n Condition:{conditioned_str}") + + cfg = VIZ_CONFIG + max_penwidth = float(cfg["EDGE_PENWIDTH"]) + + # 1. Calculate the grid dimensions first to get 'cols' + N_total = len(EG_cn.nodes()) + cols = math.ceil(math.sqrt(N_total)) + + # 2. Your new Scaling Logic + if cols > 4: + size_multiplier = 0.9 ** (cols - 4) + else: + size_multiplier = 1.0 + + # 3. Apply the multiplier to the base config + node_w = float(VIZ_CONFIG["WIDTH"]) * size_multiplier + node_h = float(VIZ_CONFIG["NODE_HEIGHT"]) * size_multiplier + base_font = 10 * size_multiplier # Starting point for font + + # ========================================================== + # Determine Base Fill (default / sink / input) + # ========================================================== + fill = cfg["NODE_FILLCOLOR"] + + if nid in sinks_set: + fill = cfg["SINK_FILL"] + elif nid in inputs_set and nid not in sinks_set: + fill = cfg["INPUT_FILL"] + + # ===================== + # NODES + # ===================== + for nid, d in EG_cn_viz.nodes(data=True): + + label_text = sg_label[nid] + x, y = positions[nid] + conditioned = d.get('conditioned', False) + conditioned_state = d.get('conditioned_state', None) + + # --- DYNAMIC FONT CALCULATION --- + # Start with a base size (e.g., 12) and reduce it for longer labels + # This formula shrinks the font as the character count increases + base_size = 10 + if len(label_text) > 4: + # Decrease font size by 1 point for every 2 extra characters + dynamic_font = max(6, base_size - (len(label_text) - 4) // 2) + else: + dynamic_font = base_size + + # ========================================================== + # PRIORITY 0: Conditioned nodes (border emphasis) + # ========================================================== + if conditioned: + + #label_text = f'<{label_text}>' + #penwidth = "3" + color = "blue" if conditioned_state == 0 else "red" + + # Set color based on state + color = "blue" if conditioned_state == 0 else "red" + + pSG.node(str(nid), + label=label_text, + pos=f"{x:.3f},{y:.3f}!", + fillcolor=fill, + color=color, + peripheries="2", # Creates the double border + penwidth="1.5", # Optional: slightly thinner lines look cleaner for double borders + width=str(node_w), + height=str(node_h), + fontsize=str(dynamic_font), + fixedsize='true') + continue + + + # ========================================================== + # PRIORITY 1: Fully redundant nodes (DO NOT override color) + # ========================================================== + if fully_redundant_nodes.get(nid, False): + + fill = '#C0C0C0' + + if conditioned: + label_text = f'<{label_text}>' + + color = None + penwidth = "1" + + if conditioned_state == 0: + color = "blue" + penwidth = "3" + elif conditioned_state == 1: + color = "red" + penwidth = "3" + + pSG.node(str(nid), + label=label_text, + pos=f"{x:.3f},{y:.3f}!", + color=color, + fillcolor=fill, + penwidth=penwidth, + width=str(node_w), # New Scaled Width + height=str(node_h), # New Scaled Height + fontsize=str(dynamic_font), + fixedsize='true') + + continue + + # ========================================================== + # PRIORITY 2: Nodes with conditioned_state + # ========================================================== + if conditioned_state == 0: + pSG.node(str(nid), + label=label_text, + pos=f"{x:.3f},{y:.3f}!", + fillcolor=fill, + color="blue", + penwidth="3", + width=str(node_w), # New Scaled Width + height=str(node_h), # New Scaled Height + fontsize=str(dynamic_font), + fixedsize='true') + continue + + elif conditioned_state == 1: + pSG.node(str(nid), + label=label_text, + pos=f"{x:.3f},{y:.3f}!", + fillcolor=fill, + color="red", + penwidth="3", + width=str(node_w), # New Scaled Width + height=str(node_h), # New Scaled Height + fontsize=str(dynamic_font), + fixedsize='true') + continue + + + # ========================================================== + # Apply Category Coloring (NEW SECTION) + # Only overrides base fill + # ========================================================== + if node_attribute_map and category_color_map: + + attr = node_attribute_map.get(label_text) or node_attribute_map.get(nid) + + if attr in category_color_map and category_color_map[attr]: + fill = category_color_map[attr] + + # ========================================================== + # PRIORITY 4: Normal nodes + # ========================================================== + pSG.node(str(nid), + label=label_text, + pos=f"{x:.3f},{y:.3f}!", + fillcolor=fill, + width=str(node_w), # New Scaled Width + height=str(node_h), # New Scaled Height + fontsize=str(dynamic_font), + fixedsize='true') + + + # ===================== + # EDGES + # ===================== + for uid, vid, d in EG_cn_viz.edges(data=True): + uid_str, vid_str = str(uid), str(vid) + weight = d.get('weight', 0) + penwidth = float(max_penwidth) * weight + source_state = EG_cn.nodes[uid].get('conditioned_state', None) + + DASH_PENWIDTH = "3" + + if d.get('fully_redundant', False): + pSG.edge(uid_str, vid_str, style='dashed', color='#00000040', penwidth=DASH_PENWIDTH) + continue + if source_state == 0: + pSG.edge(uid_str, vid_str, style='dashed', color='#0000FF70', penwidth=str(penwidth)) + continue + elif source_state == 1: + pSG.edge(uid_str, vid_str, style='dashed', color='#FF000070', penwidth=str(penwidth)) + continue + + if uid_str == vid_str: + color = '#636363' + uid_draw = f"{uid}:w" + vid_draw = f"{vid}:c" + else: + color = '#000000' + uid_draw = uid_str + vid_draw = vid_str + + pSG.edge(uid_draw, vid_draw, penwidth=str(penwidth), color=color) + + # 1. Display the Title/Condition + title_str = f"##### Conditional Effective Graph: {sModel}" + if conditioned_str: + title_str += f"\n**Condition:** {conditioned_str}" + + display(Markdown(title_str)) + + # 2. Display the conditional effective graph + display(pSG) + + # 3. Display the Legend (Matplotlib) + fig_legend = get_legend_figure() + display(fig_legend) + plt.close(fig_legend) # Prevents double-display in some environments diff --git a/tutorials/Effective Graph - Conditional Effective Graph Manual Demo.ipynb b/tutorials/Effective Graph - Conditional Effective Graph Manual Demo.ipynb new file mode 100644 index 0000000..4606c41 --- /dev/null +++ b/tutorials/Effective Graph - Conditional Effective Graph Manual Demo.ipynb @@ -0,0 +1,2340 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8892d457-d135-45db-8c17-fc9c5781fb32", + "metadata": {}, + "source": [ + "# Effective graph and conditional effective graph\n", + "\n", + "> A.J. Gates, R.B. Correia, X. Wang, & L.M. Rocha [2021]. \"The effective graph reveals redundancy, canalization, and control pathways in biochemical regulation and signaling\". Proceedings of the National Academy of Sciences (PNAS), 118 (12)." + ] + }, + { + "cell_type": "markdown", + "id": "2cc65885-b5d1-4d83-83cb-19e21be1453e", + "metadata": {}, + "source": [ + "This notebook demonstrates the use of CANA to compute edge effectiveness values as edge weights in:\n", + "\n", + "1. **The effective graph** – a probabilistic synthesis of the network’s dynamical redundancies across all possible initial conditions.\n", + "\n", + "2. **The conditional effective graph** – a probabilistic synthesis conditioned on user-specified initial states or interventions.\n", + "\n", + "As an example, we use the **BT474 Breast Cell Line Short-term ErbB Network model** from Cell Collective. \n", + "\n", + ">der Heyde, S. V., Bender, C., Henjes, F., Sonntag, J., Korf, U., & Beissbarth, T. (2014). Boolean ErbB network reconstructions and perturbation simulations reveal individual drug response in different breast cancer cell lines. BMC systems biology, 8(1), 75.\n", + " \n", + "This model includes three drug intervention nodes, making it suitable for demonstrating both:\n", + "\n", + "- effective graph analyses, and \n", + "- conditional effective graph analyses.\n", + "\n", + "Users can explore how drug interventions alter signal cascades and the propagation of influence through the network.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3cd893a1-83e3-4333-a4dd-b3ec91332f16", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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YGGMMcYYY4zVWtc0YElNTcWJEyeUybUaEeHixYvKZOaGxYsXY/78+cpkh4qKijBt2jRs3rxZOem2kpOTo0yqcV9//TWWLl0KANi9ezemTZuG7OxsAEBubi4qKioUS9z6rkf9O336NFJSUpTJVbZmzRp8+OGH2L17t3LSDbNjxw7k5eUpk6ssLS3tun1HrFmzRpnEalBV6gQfi5pjW5a3Y7ler32uqet5dZ08eRKpqanK5NvKVQUsy5YtQ7169ez+srOzkZ2djZ49e0Kn0ykXu65KSkoQExODAQMG4OGHH8arr76KnTt3KmcDADz33HOoW7cuGjRogEaNGuGRRx7B//73P+VsN1x5efk1C6quZt3z5s3DzJkzlckOFRQU4MMPP8SGDRuUk67K+fPnlUl23Jnneli2bBkCAgLw559/KifVqGnTpuHrr78GAOzcuRMffvghDh06hJycHLRp0wZ6vV65yA11PY5PTdW/lStX4qOPPsJHH32Erl27iv/PnDkTp06dQnJysnKRKtmyZQsyMzMxdepUXLx4EfPmzVPOckNs3rwZubm5AIBFixZh69atylncsm3bNhw7dkyZfE2sXLlSmcRqkG2dqMztdCxSU1Ov6XlrW5bS/6/1NmuT61WXauJ6fjVycnKwZcsWZfJt5aoCFiJCWVkZWrRogb59+4q/hg0bIiAgAGPHjsV7772nXOy6Ki8vx4cffojU1FRkZmZi2bJl0Gq1Dn/Zzs/PR7t27bBjxw7MnTsXR44cQb9+/XDhwgXlrDfM77//jubNm1+Tinst13099O3bF88++6wyWTh9+jSCgoLw+eefKyfdEKGhofj000/RvXt35aTrolWrVpg6dSpefvll5aQbprJjWNu89NJLmDp1KqZOnYrg4GDx/3HjxilnrZaff/4ZOp0OHh4e6NixI55++mnlLDfc448/jrvvvluZfMOtW7cO+/fvVybfMq7F/h07dgw//vijMrnWqiy/lU2/Hm7EeXsjtulIbSh/duuoo1f8vPrXXzvwwAMP2CY5tWvXLqxatQrPPPMMfvrpJ7z88st4+eWX0ahRI+Tl5cFkMoGI0KtXL8D6a9rMmTOxdetWNG7cGF9//TUqKirQvn17REdH448//sDDDz+MunXrYu7cufjll1/QuXNnNG7cGHq9HgcPHkTdunXxySefIDQ0FPXq1cMff/yB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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import Image, display\n", + "\n", + "display(Image(filename='Fig_3_der_Heyde_2014.png'))" + ] + }, + { + "cell_type": "markdown", + "id": "b03767c4-701b-43ec-bf7a-ec9ad04f632a", + "metadata": {}, + "source": [ + "### 1. Effective graph\n", + "\n", + "#### 1. 1 Edge effectiveness computation\n", + "\n", + "##### Import modules" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "de437207-3fe8-44ae-8300-bcce257e5a19", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import networkx as nx\n", + "\n", + "# Cana\n", + "from cana.boolean_network import BooleanNetwork\n", + "from cana.datasets.bio import BT474_ErbB_S" + ] + }, + { + "cell_type": "markdown", + "id": "88915994-9675-4e2a-a56a-05689b556db6", + "metadata": {}, + "source": [ + "##### Read the BT474 Breast Cell Line model" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a193906f-6d0c-4cad-a5a6-600b811d419a", + "metadata": {}, + "outputs": [], + "source": [ + "B = BT474_ErbB_S()" + ] + }, + { + "cell_type": "markdown", + "id": "89a594e9-5d98-46db-8844-61fbb3666618", + "metadata": {}, + "source": [ + "##### Compute edge effectiveness" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7cd9ef88-fbd3-4b9d-8cb6-6d7a7c931cb2", + "metadata": {}, + "outputs": [], + "source": [ + "# Parameter settings\n", + "\n", + "# threshold (float) – Only return edges above a certain effective connectivity threshold. \n", + "# This is usefull when computing graph measures at diffent levels.\n", + "threshold=0.0\n", + "EG = B.effective_graph(threshold=threshold)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "9513f77d-3455-4069-9095-aff7159f42b1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SourceTargetEdge effectiveness
0PKCaPKCa0.625
1MEK1_2MEK1_20.296875
2MEK1_2ERK1_20.296875
3MEK1_2PDK10.225
4p70S6Kp70S6K0.296875
............
46EGFERK1_20.296875
47EGFERBB10.145833
48EGFERBB20.095052
49EGFPLCg0.225
50EGFEGF1.0
\n", + "
" + ], + "text/plain": [ + " Source Target Edge effectiveness\n", + "0 PKCa PKCa 0.625\n", + "1 MEK1_2 MEK1_2 0.296875\n", + "2 MEK1_2 ERK1_2 0.296875\n", + "3 MEK1_2 PDK1 0.225\n", + "4 p70S6K p70S6K 0.296875\n", + "... ... ... ...\n", + "46 EGF ERK1_2 0.296875\n", + "47 EGF ERBB1 0.145833\n", + "48 EGF ERBB2 0.095052\n", + "49 EGF PLCg 0.225\n", + "50 EGF EGF 1.0" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Display computed edge effectiveness\n", + "nodes=B.nodes\n", + "edge_data = [(nodes[u].name, nodes[v].name, EG[u][v]['weight']) for u, v in EG.edges()]\n", + "\n", + "df = pd.DataFrame(edge_data, columns=['Source', 'Target', 'Edge effectiveness'])\n", + "df = df.sort_index(ascending=True)\n", + "df\n", + "top = df.head(5)\n", + "bottom = df.tail(5)\n", + "\n", + "ellipsis = pd.DataFrame({col: [\"...\"] for col in df.columns}, index=[\"...\"])\n", + "\n", + "df_edge_effectiveness = pd.concat([top, ellipsis, bottom])\n", + "df_edge_effectiveness" + ] + }, + { + "cell_type": "markdown", + "id": "c09eb1a2-f41e-4e08-8fea-967f582aa94c", + "metadata": {}, + "source": [ + "#### 1. 2 Effective graph visualization" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "60a8f87e-6352-494f-8276-a83577bd1e29", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "##### Effective Graph: BT474 Breast Cell Line Short-term ErbB Network" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n", + "
\n", + " \r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "0\r\n", + "\r\n", + "PKCa\r\n", + "\r\n", + "\r\n", + "\r\n", + "0->0\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "1\r\n", + "\r\n", + "MEK1_2\r\n", + "\r\n", + "\r\n", + "\r\n", + "1->1\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "4\r\n", + "\r\n", + "ERK1_2\r\n", + "\r\n", + "\r\n", + "\r\n", + "1->4\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "5\r\n", + "\r\n", + "PDK1\r\n", + "\r\n", + "\r\n", + "\r\n", + "1->5\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "2\r\n", + "\r\n", + "p70S6K\r\n", + "\r\n", + "\r\n", + "\r\n", + "2->2\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "3\r\n", + "\r\n", + "mTOR\r\n", + "\r\n", + "\r\n", + "\r\n", + "3->2\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "3->3\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "6\r\n", + "\r\n", + "AKT\r\n", + "\r\n", + "\r\n", + "\r\n", + "3->6\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "4->2\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "4->4\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "5->5\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "5->6\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "6->2\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "6->3\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "6->6\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "7\r\n", + "\r\n", + "ERBB3\r\n", + "\r\n", + "\r\n", + "\r\n", + "7->1\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "7->5\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "7->6\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "7->7\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "9\r\n", + "\r\n", + "ERBB2\r\n", + "\r\n", + "\r\n", + "\r\n", + "7->9\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "10\r\n", + "\r\n", + "PLCg\r\n", + "\r\n", + "\r\n", + "\r\n", + "7->10\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "8\r\n", + "\r\n", + "ERBB1\r\n", + "\r\n", + "\r\n", + "\r\n", + "8->1\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "8->5\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "8->8\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "8->10\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "9->1\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "9->5\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "9->9\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "9->10\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "10->0\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "10->8\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "10->10\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "11\r\n", + "\r\n", + "trastuzumab\r\n", + "\r\n", + "\r\n", + "\r\n", + "11->9\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "11->11\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "12\r\n", + "\r\n", + "pertuzumab\r\n", + "\r\n", + "\r\n", + "\r\n", + "12->3\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "12->4\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "12->7\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "12->8\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "12->9\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "12->12\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "13\r\n", + "\r\n", + "erlotinib\r\n", + "\r\n", + "\r\n", + "\r\n", + "13->7\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "13->8\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "13->9\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "13->13\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "14\r\n", + "\r\n", + "HRG\r\n", + "\r\n", + "\r\n", + "\r\n", + "14->7\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "14->14\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "15\r\n", + "\r\n", + "EGF\r\n", + "\r\n", + "\r\n", + "\r\n", + "15->4\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "15->8\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "15->9\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "15->10\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "15->15\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from cana.drawing.effective_graph import visualize_effective_graph\n", + "model_name = \"BT474 Breast Cell Line Short-term ErbB Network\"\n", + "\n", + "# Set each node's location along with Figure 3 in der Heyde et al, 2014\n", + "manual_pos = {\n", + " 'EGF': (0, 4), 'erlotinib': (1.5, 4), 'trastuzumab': (3, 4), 'pertuzumab': (4.5, 4), 'HRG': (6, 4),\n", + " 'ERBB1': (0, 3), 'ERBB2': (3, 3), 'ERBB3': (6, 3),\n", + " 'MEK1_2': (0, 2), 'PDK1': (2, 2), 'PLCg': (4, 2), 'PKCa': (6, 2), \n", + " 'ERK1_2': (0, 1), 'AKT': (3, 1), 'mTOR': (6, 1),\n", + " 'p70S6K': (3, 0)\n", + "}\n", + "\n", + "threshold=0.0\n", + "EG = B.effective_graph(threshold=threshold)\n", + "\n", + "visualize_effective_graph(EG, model_name, threshold, manual_pos)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9647c463-bc27-4682-92fd-69134bb8db92", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SourceTargetEdge effectiveness
0pertuzumabmTOR0.416667
1pertuzumabERK1_20.296875
2pertuzumabERBB30.520833
3pertuzumabERBB10.572917
4pertuzumabERBB20.386719
5pertuzumabpertuzumab1.000000
\n", + "
" + ], + "text/plain": [ + " Source Target Edge effectiveness\n", + "0 pertuzumab mTOR 0.416667\n", + "1 pertuzumab ERK1_2 0.296875\n", + "2 pertuzumab ERBB3 0.520833\n", + "3 pertuzumab ERBB1 0.572917\n", + "4 pertuzumab ERBB2 0.386719\n", + "5 pertuzumab pertuzumab 1.000000" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Display edges with source as 'pertuzumab'\n", + "edge_data = [(nodes[u].name, nodes[v].name, EG[u][v]['weight']) for u, v in EG.edges() if nodes[u].name.lower() == 'pertuzumab']\n", + "pd.DataFrame(edge_data, columns=['Source', 'Target', 'Edge effectiveness'])" + ] + }, + { + "cell_type": "markdown", + "id": "93e4dde5-0415-430f-a49c-3e6395a67e1f", + "metadata": {}, + "source": [ + "In the effective graph visualization, each edge width represents its edge effectiveness.\n", + "\n", + "Each node color represents fffective out-degree of a node, the sum of edge effectiveness of the node.\n", + "\n", + "Here, node pertuzumab has maximum effective out-degree, 3.194, as sum of" + ] + }, + { + "cell_type": "markdown", + "id": "3d9bbf69-6175-4af3-91aa-cc0b3d62a13a", + "metadata": {}, + "source": [ + "#### 1. 3 Threshold Effective graph visualization\n", + "\n", + "By setting threshold parameter with specific values, you can see the threshold effective graph with edges whose edge effectiveness is above the threshold." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "d60987e4-6d83-4cf4-90b3-533654cdc31c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "##### Threshold Effective Graph: BT474 Breast Cell Line Short-term ErbB Network\n", + "**Edge Weight Threshold:** 0.4" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n", + "
\n", + " \r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "0\r\n", + "\r\n", + "PKCa\r\n", + "\r\n", + "\r\n", + "\r\n", + "0->0\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "1\r\n", + "\r\n", + "MEK1_2\r\n", + "\r\n", + "\r\n", + "\r\n", + "2\r\n", + "\r\n", + "p70S6K\r\n", + "\r\n", + "\r\n", + "\r\n", + "3\r\n", + "\r\n", + "mTOR\r\n", + "\r\n", + "\r\n", + "\r\n", + "3->3\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "4\r\n", + "\r\n", + "ERK1_2\r\n", + "\r\n", + "\r\n", + "\r\n", + "5\r\n", + "\r\n", + "PDK1\r\n", + "\r\n", + "\r\n", + "\r\n", + "6\r\n", + "\r\n", + "AKT\r\n", + "\r\n", + "\r\n", + "\r\n", + "6->3\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "7\r\n", + "\r\n", + "ERBB3\r\n", + "\r\n", + "\r\n", + "\r\n", + "8\r\n", + "\r\n", + "ERBB1\r\n", + "\r\n", + "\r\n", + "\r\n", + "9\r\n", + "\r\n", + "ERBB2\r\n", + "\r\n", + "\r\n", + "\r\n", + "10\r\n", + "\r\n", + "PLCg\r\n", + "\r\n", + "\r\n", + "\r\n", + "10->0\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "11\r\n", + "\r\n", + "trastuzumab\r\n", + "\r\n", + "\r\n", + "\r\n", + "11->11\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "12\r\n", + "\r\n", + "pertuzumab\r\n", + "\r\n", + "\r\n", + "\r\n", + "12->3\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "12->7\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "12->8\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "12->12\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "13\r\n", + "\r\n", + "erlotinib\r\n", + "\r\n", + "\r\n", + "\r\n", + "13->7\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "13->8\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "13->13\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "14\r\n", + "\r\n", + "HRG\r\n", + "\r\n", + "\r\n", + "\r\n", + "14->14\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "15\r\n", + "\r\n", + "EGF\r\n", + "\r\n", + "\r\n", + "\r\n", + "15->15\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\r\n", + "\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Visualize edges with weight larger than threshold parameter, in this case, 0.4\n", + "threshold=0.4\n", + "EG04 = B.effective_graph(threshold=threshold)\n", + "visualize_effective_graph(EG04, model_name, threshold, manual_pos)" + ] + }, + { + "cell_type": "markdown", + "id": "28d6a9e8-4580-45f4-832d-cbde61a5121a", + "metadata": {}, + "source": [ + "### 2. Conditional effective graph\n", + "\n", + "with loaded the BT474 Breast Cell Line model" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "384c2a5a-90d9-4087-8876-3f8d54380b40", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index 11: trastuzumab\n", + "Index 12: pertuzumab\n", + "Index 13: erlotinib\n" + ] + } + ], + "source": [ + "#### Drug nodes and their IDs\n", + "drugs = [11, 12, 13]\n", + "for i in drugs:\n", + " print(f\"Index {i}: {B.nodes[i].name}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "bae1f366-8c4a-477a-8f5e-4c1f6f6c1801", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index 14: HRG\n", + "Index 15: EGF\n" + ] + } + ], + "source": [ + "#### Growth factor nodes (always set as 1 in the reference) and their IDs\n", + "growth_factors = [14, 15]\n", + "for i in growth_factors:\n", + " print(f\"Index {i}: {B.nodes[i].name}\")" + ] + }, + { + "cell_type": "markdown", + "id": "6bc9f034-bb7d-4cc0-a809-f0ba42391710", + "metadata": {}, + "source": [ + "#### 2. 1 Compute edge effectiveness with baseline condition" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "5c432826-c559-4321-9ec8-34fd9f554417", + "metadata": {}, + "outputs": [], + "source": [ + "# Parameter settings\n", + "# conditioned_nodes (dict) – a dictionary mapping node ids to their conditioned states. dict of form { nodeid : nodestate }\n", + "conditioned_nodes={14:1, 15:1} # Two growth factors HRG: ON, EGF: ON\n", + "\n", + "# threshold (float) – Only return edges above a certain effective connectivity threshold. \n", + "# This is usefull when computing graph measures at diffent levels.\n", + "threshold = 0.0 # gain all edges\n", + "\n", + "EG_cn = B.conditional_effective_graph(conditioned_nodes=conditioned_nodes, threshold=threshold)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ce94e894-6e38-4bed-834e-497ad32f50d5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SourceTargetEdge effectiveness
0MEK1_2MEK1_20.296875
1MEK1_2PDK10.225
2mTORmTOR0.416667
3mTORAKT0.296875
4ERK1_2p70S6K0.296875
............
30EGFERK1_20.296875
31EGFERBB10.145833
32EGFERBB20.095052
33EGFPLCg0.225
34EGFEGF1.0
\n", + "
" + ], + "text/plain": [ + " Source Target Edge effectiveness\n", + "0 MEK1_2 MEK1_2 0.296875\n", + "1 MEK1_2 PDK1 0.225\n", + "2 mTOR mTOR 0.416667\n", + "3 mTOR AKT 0.296875\n", + "4 ERK1_2 p70S6K 0.296875\n", + "... ... ... ...\n", + "30 EGF ERK1_2 0.296875\n", + "31 EGF ERBB1 0.145833\n", + "32 EGF ERBB2 0.095052\n", + "33 EGF PLCg 0.225\n", + "34 EGF EGF 1.0" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Display computed edge effectiveness\n", + "nodes=B.nodes\n", + "edge_data = [(nodes[u].name, nodes[v].name, EG_cn[u][v]['weight']) for u, v in EG_cn.edges()]\n", + "\n", + "df = pd.DataFrame(edge_data, columns=['Source', 'Target', 'Edge effectiveness'])\n", + "df = df.sort_index(ascending=True)\n", + "top = df.head(5)\n", + "bottom = df.tail(5)\n", + "\n", + "ellipsis = pd.DataFrame({col: [\"...\"] for col in df.columns}, index=[\"...\"])\n", + "\n", + "df_edge_effectiveness_baseline = pd.concat([top, ellipsis, bottom])\n", + "df_edge_effectiveness_baseline" + ] + }, + { + "cell_type": "markdown", + "id": "5e1d1ba9-829d-4b4d-9a33-3845d50481ec", + "metadata": {}, + "source": [ + "The number of edges decreases from **51** to **35**, meaning that there are 16 edges which become fully redundant because of the baseline conditioning." + ] + }, + { + "cell_type": "markdown", + "id": "5d0ebcf4-dfb9-4d1e-bc80-8ff219eb7e42", + "metadata": {}, + "source": [ + "#### 2. 2 Conditional effective graph visualization\n", + "\n", + "Visualize Conditional effective graph with baseline condition" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "6436b9ac-ec5d-47a6-9b11-3fc59761d876", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "text/markdown": [ + "##### Conditional Effective Graph: BT474 Breast Cell Line Short-term ErbB Network\n", + "**Condition:** HRG: 1, EGF: 1" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "0\n", + "\n", + "PKCa\n", + "\n", + "\n", + "\n", + "0->0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1\n", + "\n", + "MEK1_2\n", + "\n", + "\n", + "\n", + "1:w->1:c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4\n", + "\n", + "ERK1_2\n", + "\n", + "\n", + "\n", + "1->4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "5\n", + "\n", + "PDK1\n", + "\n", + "\n", + "\n", + "1->5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2\n", + "\n", + "p70S6K\n", + "\n", + "\n", + "\n", + "2->2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3\n", + "\n", + "mTOR\n", + "\n", + "\n", + "\n", + "3->2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3:w->3:c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "6\n", + "\n", + "AKT\n", + "\n", + "\n", + "\n", + "3->6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4->2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4->4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "5:w->5:c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "5->6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "6->2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "6->3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "6:w->6:c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "7\n", + "\n", + "ERBB3\n", + "\n", + "\n", + "\n", + "7->1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "7->5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "7->6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "7->7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9\n", + "\n", + "ERBB2\n", + "\n", + "\n", + "\n", + "7->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "10\n", + "\n", + "PLCg\n", + "\n", + "\n", + "\n", + "7->10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "8\n", + "\n", + "ERBB1\n", + "\n", + "\n", + "\n", + "8->1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "8->5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "8->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "8->10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9->1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9->5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9->10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "10->0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "10->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "10->10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "11\n", + "\n", + "trastuzumab\n", + "\n", + "\n", + "\n", + "11->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "11:w->11:c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12\n", + "\n", + "pertuzumab\n", + "\n", + "\n", + "\n", + "12->3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12->4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12->7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12:w->12:c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "13\n", + "\n", + "erlotinib\n", + "\n", + "\n", + "\n", + "13->7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "13->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "13->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "13:w->13:c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "14\n", + "\n", + "\n", + "HRG\n", + "\n", + "\n", + "\n", + "14->7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "14->14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "15\n", + "\n", + "\n", + "EGF\n", + "\n", + "\n", + "\n", + "15->4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "15->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "15->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "15->10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "15->15\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from cana.drawing.effective_graph import visualize_conditional_effective_graph\n", + "threshold = 0.0\n", + "EG0 = B.conditional_effective_graph(threshold=threshold)\n", + "\n", + "conditioned_nodes={14:1, 15:1} # Two growth factors HRG: ON, EGF: ON\n", + "EG_cn = B.conditional_effective_graph(conditioned_nodes=conditioned_nodes, threshold=threshold)\n", + "\n", + "# Optinal: Create conditioning string for visualization\n", + "node_strings = [f\"{B.nodes[i].name}: {state}\" for i, state in conditioned_nodes.items()]\n", + "conditioned_str = \", \".join(node_strings)\n", + "\n", + "visualize_conditional_effective_graph(EG_cn, EG0, conditioned_nodes, model_name, conditioned_str, manual_pos)" + ] + }, + { + "cell_type": "markdown", + "id": "2bcf06b1-800d-43ca-af9b-ee3e59927d5d", + "metadata": {}, + "source": [ + "Visualize Conditional effective graph with baseline + three drug administrations" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "9f18624d-fad7-477b-910e-8f07af2654ce", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "text/markdown": [ + "##### Conditional Effective Graph: BT474 Breast Cell Line Short-term ErbB Network\n", + "**Condition:** trastuzumab: 1, pertuzumab: 1, erlotinib: 1, HRG: 1, EGF: 1" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "0\n", + "\n", + "PKCa\n", + "\n", + "\n", + "\n", + "0->0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1\n", + "\n", + "MEK1_2\n", + "\n", + "\n", + "\n", + "1:w->1:c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4\n", + "\n", + "ERK1_2\n", + "\n", + "\n", + "\n", + "1->4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "5\n", + "\n", + "PDK1\n", + "\n", + "\n", + "\n", + "1->5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2\n", + "\n", + "p70S6K\n", + "\n", + "\n", + "\n", + "2->2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3\n", + "\n", + "mTOR\n", + "\n", + "\n", + "\n", + "3->2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3->3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "6\n", + "\n", + "AKT\n", + "\n", + "\n", + "\n", + "3->6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4->2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4->4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "5:w->5:c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "5->6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "6->2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "6->3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "6->6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "7\n", + "\n", + "ERBB3\n", + "\n", + "\n", + "\n", + "7->1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "7->5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "7->6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "7->7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9\n", + "\n", + "ERBB2\n", + "\n", + "\n", + "\n", + "7->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "10\n", + "\n", + "PLCg\n", + "\n", + "\n", + "\n", + "7->10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "8\n", + "\n", + "ERBB1\n", + "\n", + "\n", + "\n", + "8->1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "8->5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "8->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "8->10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9->1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9->5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9->10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "10->0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "10->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "10->10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "11\n", + "\n", + "\n", + "trastuzumab\n", + "\n", + "\n", + "\n", + "11->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "11->11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12\n", + "\n", + "\n", + "pertuzumab\n", + "\n", + "\n", + "\n", + "12->3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12->4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12->7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12->12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "13\n", + "\n", + "\n", + "erlotinib\n", + "\n", + "\n", + "\n", + "13->7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "13->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "13->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "13->13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "14\n", + "\n", + "\n", + "HRG\n", + "\n", + "\n", + "\n", + "14->7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "14->14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "15\n", + "\n", + "\n", + "EGF\n", + "\n", + "\n", + "\n", + "15->4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "15->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "15->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "15->10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "15->15\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "conditioned_nodes={11:1, 12:1, 13:1, # Three drugs pertuzumab: ON, erlotinib: OFF, trastuzumab: OFF\n", + " 14:1, 15:1} # Two growth factors HRG: ON, EGF: ON\n", + "\n", + "EG_cn = B.conditional_effective_graph(conditioned_nodes=conditioned_nodes, threshold=threshold)\n", + "\n", + "# Optinal: Create conditioning string for visualization\n", + "node_strings = [f\"{B.nodes[i].name}: {state}\" for i, state in conditioned_nodes.items()]\n", + "conditioned_str = \", \".join(node_strings)\n", + "\n", + "visualize_conditional_effective_graph(EG_cn, EG0, conditioned_nodes, model_name, conditioned_str, manual_pos)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2fc6b3a6-bb1b-49fc-9f41-a6e7c54ee42c", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python (cana_env)", + "language": "python", + "name": "cana_env" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/Fig_3_der_Heyde_2014.png b/tutorials/Fig_3_der_Heyde_2014.png new file mode 100644 index 0000000..63e9a8d Binary files /dev/null and b/tutorials/Fig_3_der_Heyde_2014.png differ