nmrproject/n-methylation.py
kilian 4b57f465da Restliche Files hochgeladen
Die restlichen Files vom Uni Rechner hochgeladen
2026-04-30 12:09:37 +02:00

191 lines
5.9 KiB
Python

config.ilp.solver="CPLEX"
xanthine = Graph.fromGMLString("""graph [
node [ id 0 label "N" ]
node [ id 1 label "C" ]
node [ id 2 label "N" ]
node [ id 3 label "C" ]
node [ id 4 label "C" ]
node [ id 5 label "C" ]
node [ id 6 label "N" ]
node [ id 7 label "C" ]
node [ id 8 label "N" ]
node [ id 9 label "O" ]
node [ id 10 label "O" ]
node [ id 11 label "H" ]
node [ id 12 label "H" ]
node [ id 13 label "H" ]
node [ id 14 label "H" ]
edge [ source 1 target 0 label "-" ]
edge [ source 2 target 1 label "-" ]
edge [ source 3 target 2 label "-" ]
edge [ source 4 target 3 label "=" ]
edge [ source 5 target 4 label "-" ]
edge [ source 0 target 5 label "-" ]
edge [ source 8 target 3 label "-" ]
edge [ source 7 target 8 label "=" ]
edge [ source 6 target 7 label "-" ]
edge [ source 4 target 6 label "-" ]
edge [ source 9 target 1 label "=" ]
edge [ source 10 target 5 label "=" ]
edge [ source 11 target 0 label "-" ]
edge [ source 12 target 2 label "-" ]
edge [ source 13 target 6 label "-" ]
edge [ source 14 target 7 label "-" ]
]""", name="Xanthine")
caffeine = Graph.fromGMLString("""graph [
node [ id 0 label "N" ]
node [ id 1 label "C" ]
node [ id 2 label "N" ]
node [ id 3 label "C" ]
node [ id 4 label "C" ]
node [ id 5 label "C" ]
node [ id 6 label "N" ]
node [ id 7 label "C" ]
node [ id 8 label "N" ]
node [ id 9 label "O" ]
node [ id 10 label "O" ]
node [ id 11 label "C" ]
node [ id 12 label "C" ]
node [ id 13 label "C" ]
node [ id 14 label "H" ]
node [ id 15 label "H" ]
node [ id 16 label "H" ]
node [ id 17 label "H" ]
node [ id 18 label "H" ]
node [ id 19 label "H" ]
node [ id 20 label "H" ]
node [ id 21 label "H" ]
node [ id 22 label "H" ]
node [ id 23 label "H" ]
edge [ source 1 target 0 label "-" ]
edge [ source 2 target 1 label "-" ]
edge [ source 3 target 2 label "-" ]
edge [ source 4 target 3 label "=" ]
edge [ source 5 target 4 label "-" ]
edge [ source 0 target 5 label "-" ]
edge [ source 8 target 3 label "-" ]
edge [ source 7 target 8 label "=" ]
edge [ source 6 target 7 label "-" ]
edge [ source 4 target 6 label "-" ]
edge [ source 9 target 1 label "=" ]
edge [ source 10 target 5 label "=" ]
edge [ source 11 target 0 label "-" ]
edge [ source 12 target 2 label "-" ]
edge [ source 13 target 6 label "-" ]
edge [ source 14 target 7 label "-" ]
edge [ source 11 target 15 label "-" ]
edge [ source 11 target 16 label "-" ]
edge [ source 11 target 17 label "-" ]
edge [ source 12 target 18 label "-" ]
edge [ source 12 target 19 label "-" ]
edge [ source 12 target 20 label "-" ]
edge [ source 13 target 21 label "-" ]
edge [ source 13 target 22 label "-" ]
edge [ source 13 target 23 label "-" ]
]""", name="Caffeine")
nmethylation = Rule.fromGMLString(
"""rule [
left [
node [ id 1 label "H" ]
edge [ source 1 target 2 label "-" ]
]
context [
node [ id 2 label "N" ]
node [ id 3 label "C"]
node [ id 4 label "C"]
edge [ source 3 target 2 label "-" ]
edge [ source 4 target 2 label "-" ]
]
right [
node [ id 5 label "C" ]
node [ id 6 label "H" ]
node [ id 7 label "H" ]
node [ id 8 label "H" ]
edge [ source 2 target 5 label "-" ]
edge [ source 5 target 6 label "-" ]
edge [ source 5 target 7 label "-" ]
edge [ source 5 target 8 label "-" ]
]
]"""
)
ndemethylation = Rule.fromGMLString("""rule [
left [
node [ id 5 label "C" ]
node [ id 6 label "H" ]
node [ id 7 label "H" ]
node [ id 8 label "H" ]
edge [ source 2 target 5 label "-" ]
edge [ source 5 target 6 label "-" ]
edge [ source 5 target 7 label "-" ]
edge [ source 5 target 8 label "-" ]
]
context [
node [ id 2 label "N" ]
node [ id 3 label "C"]
node [ id 4 label "C"]
edge [ source 3 target 2 label "-" ]
edge [ source 4 target 2 label "-" ]
]
right [
node [ id 1 label "H" ]
edge [ source 1 target 2 label "-" ]
]
]""")
flowPrinter = FlowPrinter()
flowPrinter.printUnfiltered = False
postSection("Loaded Graphs")
for a in inputGraphs:
a.print()
postSection("Loaded Rules")
for a in inputRules:
a.print()
dg = DG(graphDatabase=inputGraphs)
dg.build().execute(
addSubset(inputGraphs)
>> rightPredicate[
lambda d: all(g.vLabelCount("C") <= 10 for g in d.right)
](
repeat(inputRules)
)
)
dg.print()
postSection("Product Graphs")
for a in dg.vertices:
a.graph.print()
flowAutocata = Flow(dg)
flowAutocata.overallAutocatalysis.enable()
for a in {xanthine}:
flowAutocata.addSource(a)
flowAutocata.addSink(caffeine)
flowAutocata.findSolutions()
flowAutocata.solutions.list()
flowAutocata.solutions.print(flowPrinter)
sys.exit(0)
rc = rcEvaluator(inputRules)
for dRef in dg.derivations:
der = dRef.derivation
educt = rcId(der.left[0])
for i in range(1, len(der.left)):
educt = educt *rcParallel* rcId(der.left[i])
product = rcId(der.right[0])
for i in range(1, len(der.right)):
product = product *rcParallel* rcId(der.right[i])
rcExp = educt *rcSuper(allowPartial=False)* der.rule *rcSuper(allowPartial=False)* product
res = rc.eval(rcExp)
dRef.print()
for a in res:
a.print()
a.printGML()