from pathlib import Path
from pandas import DataFrame
from biodivine_aeon import *
model = BooleanNetwork.from_sbml(Path('interferon-pathway.sbml').read_text())
graph = SymbolicAsyncGraph(model)
attractors = find_attractors(graph)
print("Attractor set count:", len(attractors))
attrStates = graph.empty_colored_vertices();
for attr in attractors:
attrStates = attrStates.union(attr)
print("Unique attr. states:", attrStates.vertices().cardinality())
IIR = graph.fix_variable("ISG_expression_antiviral_response_phenotype", True)
INFL = graph.fix_variable("Proinflammatory_cytokine_expression_Inflammation_phenotype", True)
IFN = graph.fix_variable("type_I_IFN_response_phenotype", True)
attrIIR = attrStates.intersect(IIR)
attrINFL = attrStates.intersect(INFL)
attrIFN = attrStates.intersect(IFN)
print("IIR phenotype colors:", attrIIR.colors().cardinality())
print("INFL phenotype colors:", attrINFL.colors().cardinality())
print("IFN phenotype colors:", attrIFN.colors().cardinality())
def phenotype_ratio(attr, phenotype):
return attr.intersect(phenotype).colors().cardinality() / attr.colors().cardinality()
def check_impact(attr, param, phenotype):
attr_param_on = attr.intersect(param)
attr_param_off = attr.minus(param)
ratio_on = phenotype_ratio(attr_param_on, phenotype)
ratio_off = phenotype_ratio(attr_param_off, phenotype)
return (ratio_on - ratio_off) * 100.0
rg = model.graph()
table = []
for var in model.variables():
if len(rg.regulators(var)) == 0:
iir_impact = check_impact(attrStates, graph.fix_variable(var, True), IIR)
infl_impact = check_impact(attrStates, graph.fix_variable(var, True), INFL)
print("Impact of", rg.get_variable_name(var)+":", iir_impact, "(IIR)", infl_impact, "(INFL)")
table.append([rg.get_variable_name(var), iir_impact, infl_impact])
DataFrame(table, columns=["Variable", "IIR gain", "INFL gain"])
virus_detected = graph.fix_variable("Viral_replication_phenotype", True)
states_virus_on = attrStates.intersect(virus_detected)
table2 = []
for var in model.variables():
if rg.get_variable_name(var) == 'Viral_replication_phenotype':
continue
if len(rg.regulators(var)) == 0:
iir_impact = check_impact(states_virus_on, graph.fix_variable(var, True), IIR)
infl_impact = check_impact(states_virus_on, graph.fix_variable(var, True), INFL)
print("Impact of", rg.get_variable_name(var)+":", iir_impact, "(IIR)", infl_impact, "(INFL)")
table2.append([rg.get_variable_name(var), iir_impact, infl_impact])
DataFrame(table2, columns=["Variable", "IIR gain", "INFL gain"])
drug_on = graph.fix_variable("Azithromycin_drug", True)
states = states_virus_on.intersect(drug_on)
table2 = []
for var in model.variables():
if rg.get_variable_name(var) == 'Viral_replication_phenotype':
continue
if rg.get_variable_name(var) == 'Azithromycin_drug':
continue
if len(rg.regulators(var)) == 0:
iir_impact = check_impact(states, graph.fix_variable(var, True), IIR)
infl_impact = check_impact(states, graph.fix_variable(var, True), INFL)
print("Impact of", rg.get_variable_name(var)+":", iir_impact, "(IIR)", infl_impact, "(INFL)")
table2.append([rg.get_variable_name(var), iir_impact, infl_impact])
DataFrame(table2, columns=["Variable", "IIR gain", "INFL gain"])
mns_drug_on = graph.fix_variable("MNS_drug", True)
states2 = states.intersect(mns_drug_on)
table3 = []
for var in model.variables():
if rg.get_variable_name(var) == 'MNS_drug':
continue
if rg.get_variable_name(var) == 'Viral_replication_phenotype':
continue
if rg.get_variable_name(var) == 'Azithromycin_drug':
continue
if len(rg.regulators(var)) == 0:
iir_impact = check_impact(states2, graph.fix_variable(var, True), IIR)
infl_impact = check_impact(states2, graph.fix_variable(var, True), INFL)
print("Impact of", rg.get_variable_name(var)+":", iir_impact, "(IIR)", infl_impact, "(INFL)")
table3.append([rg.get_variable_name(var), iir_impact, infl_impact])
DataFrame(table3, columns=["Variable", "IIR gain", "INFL gain"])