Gilmullin Almaz
Refactor code structure for improved readability and maintainability
72a3513
"""Module containing hardcoded decomposition reaction rules."""
from CGRtools import QueryContainer, ReactionContainer
from CGRtools.periodictable import ListElement
rules = []
def prepare():
"""Creates and returns three query containers and appends a reaction container to
the "rules" list."""
q_ = QueryContainer()
p1_ = QueryContainer()
p2_ = QueryContainer()
rules.append(ReactionContainer((q_,), (p1_, p2_)))
return q_, p1_, p2_
# R-amide/ester formation
# [C](-[N,O;D23;Zs])(-[C])=[O]>>[A].[C]-[C](-[O])=[O]
q, p1, p2 = prepare()
q.add_atom("C")
q.add_atom("C")
q.add_atom("O")
q.add_atom(ListElement(["N", "O"]), hybridization=1, neighbors=(2, 3))
q.add_bond(1, 2, 1)
q.add_bond(2, 3, 2)
q.add_bond(2, 4, 1)
p1.add_atom("C")
p1.add_atom("C")
p1.add_atom("O")
p1.add_atom("O", _map=5)
p1.add_bond(1, 2, 1)
p1.add_bond(2, 3, 2)
p1.add_bond(2, 5, 1)
p2.add_atom("A", _map=4)
# acyl group addition with aromatic carbon's case (Friedel-Crafts)
# [C;Za]-[C](-[C])=[O]>>[C].[C]-[C](-[Cl])=[O]
q, p1, p2 = prepare()
q.add_atom("C")
q.add_atom("C")
q.add_atom("O")
q.add_atom("C", hybridization=4)
q.add_bond(1, 2, 1)
q.add_bond(2, 3, 2)
q.add_bond(2, 4, 1)
p1.add_atom("C")
p1.add_atom("C")
p1.add_atom("O")
p1.add_atom("Cl", _map=5)
p1.add_bond(1, 2, 1)
p1.add_bond(2, 3, 2)
p1.add_bond(2, 5, 1)
p2.add_atom("C", _map=4)
# Williamson reaction
# [C;Za]-[O]-[C;Zs;W0]>>[C]-[Br].[C]-[O]
q, p1, p2 = prepare()
q.add_atom("C", hybridization=4)
q.add_atom("O")
q.add_atom("C", hybridization=1, heteroatoms=1)
q.add_bond(1, 2, 1)
q.add_bond(2, 3, 1)
p1.add_atom("C")
p1.add_atom("O")
p1.add_bond(1, 2, 1)
p2.add_atom("C", _map=3)
p2.add_atom("Br")
p2.add_bond(3, 4, 1)
# Buchwald-Hartwig amination
# [N;D23;Zs;W0]-[C;Za]>>[C]-[Br].[N]
q, p1, p2 = prepare()
q.add_atom("N", heteroatoms=0, hybridization=1, neighbors=(2, 3))
q.add_atom("C", hybridization=4)
q.add_bond(1, 2, 1)
p1.add_atom("C", _map=2)
p1.add_atom("Br")
p1.add_bond(2, 3, 1)
p2.add_atom("N")
# imidazole imine atom's alkylation
# [C;r5](:[N;r5]-[C;Zs;W1]):[N;D2;r5]>>[C]-[Br].[N]:[C]:[N]
q, p1, p2 = prepare()
q.add_atom("N", rings_sizes=5)
q.add_atom("C", rings_sizes=5)
q.add_atom("N", rings_sizes=5, neighbors=2)
q.add_atom("C", hybridization=1, heteroatoms=(1, 2))
q.add_bond(1, 2, 4)
q.add_bond(2, 3, 4)
q.add_bond(1, 4, 1)
p1.add_atom("N")
p1.add_atom("C")
p1.add_atom("N")
p1.add_bond(1, 2, 4)
p1.add_bond(2, 3, 4)
p2.add_atom("C", _map=4)
p2.add_atom("Br")
p2.add_bond(4, 5, 1)
# Knoevenagel condensation (nitryl and carboxyl case)
# [C]=[C](-[C]#[N])-[C](-[O])=[O]>>[C]=[O].[C](-[C]#[N])-[C](-[O])=[O]
q, p1, p2 = prepare()
q.add_atom("C")
q.add_atom("C")
q.add_atom("C")
q.add_atom("N")
q.add_atom("C")
q.add_atom("O")
q.add_atom("O")
q.add_bond(1, 2, 2)
q.add_bond(2, 3, 1)
q.add_bond(3, 4, 3)
q.add_bond(2, 5, 1)
q.add_bond(5, 6, 2)
q.add_bond(5, 7, 1)
p1.add_atom("C", _map=2)
p1.add_atom("C")
p1.add_atom("N")
p1.add_atom("C")
p1.add_atom("O")
p1.add_atom("O")
p1.add_bond(2, 3, 1)
p1.add_bond(3, 4, 3)
p1.add_bond(2, 5, 1)
p1.add_bond(5, 6, 2)
p1.add_bond(5, 7, 1)
p2.add_atom("C", _map=1)
p2.add_atom("O", _map=8)
p2.add_bond(1, 8, 2)
# Knoevenagel condensation (double nitryl case)
# [C]=[C](-[C]#[N])-[C]#[N]>>[C]=[O].[C](-[C]#[N])-[C]#[N]
q, p1, p2 = prepare()
q.add_atom("C")
q.add_atom("C")
q.add_atom("C")
q.add_atom("N")
q.add_atom("C")
q.add_atom("N")
q.add_bond(1, 2, 2)
q.add_bond(2, 3, 1)
q.add_bond(3, 4, 3)
q.add_bond(2, 5, 1)
q.add_bond(5, 6, 3)
p1.add_atom("C", _map=2)
p1.add_atom("C")
p1.add_atom("N")
p1.add_atom("C")
p1.add_atom("N")
p1.add_bond(2, 3, 1)
p1.add_bond(3, 4, 3)
p1.add_bond(2, 5, 1)
p1.add_bond(5, 6, 3)
p2.add_atom("C", _map=1)
p2.add_atom("O", _map=8)
p2.add_bond(1, 8, 2)
# Knoevenagel condensation (double carboxyl case)
# [C]=[C](-[C](-[O])=[O])-[C](-[O])=[O]>>[C]=[O].[C](-[C](-[O])=[O])-[C](-[O])=[O]
q, p1, p2 = prepare()
q.add_atom("C")
q.add_atom("C")
q.add_atom("C")
q.add_atom("O")
q.add_atom("O")
q.add_atom("C")
q.add_atom("O")
q.add_atom("O")
q.add_bond(1, 2, 2)
q.add_bond(2, 3, 1)
q.add_bond(3, 4, 2)
q.add_bond(3, 5, 1)
q.add_bond(2, 6, 1)
q.add_bond(6, 7, 2)
q.add_bond(6, 8, 1)
p1.add_atom("C", _map=2)
p1.add_atom("C")
p1.add_atom("O")
p1.add_atom("O")
p1.add_atom("C")
p1.add_atom("O")
p1.add_atom("O")
p1.add_bond(2, 3, 1)
p1.add_bond(3, 4, 2)
p1.add_bond(3, 5, 1)
p1.add_bond(2, 6, 1)
p1.add_bond(6, 7, 2)
p1.add_bond(6, 8, 1)
p2.add_atom("C", _map=1)
p2.add_atom("O", _map=9)
p2.add_bond(1, 9, 2)
# heterocyclization with guanidine
# [c]((-[N;W0;Zs])@[n]@[c](-[N;D1])@[c;W0])@[n]@[c]-[O; D1]>>[C](-[N])(=[N])-[N].[C](#[N])-[C]-[C](-[O])=[O]
q, p1, p2 = prepare()
q.add_atom("C")
q.add_atom("N", heteroatoms=0, hybridization=1)
q.add_atom("N")
q.add_atom("C")
q.add_atom("N", neighbors=1)
q.add_atom("C", heteroatoms=0)
q.add_atom("N")
q.add_atom("C")
q.add_atom("O", neighbors=1)
q.add_bond(1, 2, 1)
q.add_bond(1, 3, 4)
q.add_bond(3, 4, 4)
q.add_bond(4, 5, 1)
q.add_bond(4, 6, 4)
q.add_bond(1, 7, 4)
q.add_bond(7, 8, 4)
q.add_bond(8, 9, 1)
p1.add_atom("C")
p1.add_atom("N")
p1.add_atom("N")
p1.add_atom("N", _map=7)
p1.add_bond(1, 2, 1)
p1.add_bond(1, 3, 2)
p1.add_bond(1, 7, 1)
p2.add_atom("C", _map=4)
p2.add_atom("N")
p2.add_atom("C")
p2.add_atom("C", _map=8)
p2.add_atom("O", _map=9)
p2.add_atom("O")
p2.add_bond(4, 5, 3)
p2.add_bond(4, 6, 1)
p2.add_bond(6, 8, 1)
p2.add_bond(8, 9, 2)
p2.add_bond(8, 10, 1)
# alkylation of amine
# [C]-[N]-[C]>>[C]-[N].[C]-[Br]
q, p1, p2 = prepare()
q.add_atom("C")
q.add_atom("N")
q.add_atom("C")
q.add_atom("C")
q.add_bond(1, 2, 1)
q.add_bond(2, 3, 1)
q.add_bond(2, 4, 1)
p1.add_atom("C")
p1.add_atom("N")
p1.add_atom("C")
p1.add_bond(1, 2, 1)
p1.add_bond(2, 3, 1)
p2.add_atom("C", _map=4)
p2.add_atom("Cl")
p2.add_bond(4, 5, 1)
# Synthesis of guanidines
#
q, p1, p2 = prepare()
q.add_atom("N")
q.add_atom("C")
q.add_atom("N", hybridization=1)
q.add_atom("N", hybridization=1)
q.add_bond(1, 2, 2)
q.add_bond(2, 3, 1)
q.add_bond(2, 4, 1)
p1.add_atom("N")
p1.add_atom("C")
p1.add_atom("N")
p1.add_bond(1, 2, 3)
p1.add_bond(2, 3, 1)
p2.add_atom("N", _map=4)
# Grignard reaction with nitrile
#
q, p1, p2 = prepare()
q.add_atom("C")
q.add_atom("C")
q.add_atom("O")
q.add_atom("C")
q.add_bond(1, 2, 1)
q.add_bond(2, 3, 2)
q.add_bond(2, 4, 1)
p1.add_atom("C")
p1.add_atom("C")
p1.add_atom("N")
p1.add_bond(1, 2, 1)
p1.add_bond(2, 3, 3)
p2.add_atom("C", _map=4)
p2.add_atom("Br")
p2.add_bond(4, 5, 1)
# Alkylation of alpha-carbon atom of nitrile
#
q, p1, p2 = prepare()
q.add_atom("N")
q.add_atom("C")
q.add_atom("C", neighbors=(3, 4))
q.add_atom("C", hybridization=1)
q.add_bond(1, 2, 3)
q.add_bond(2, 3, 1)
q.add_bond(3, 4, 1)
p1.add_atom("N")
p1.add_atom("C")
p1.add_atom("C")
p1.add_bond(1, 2, 3)
p1.add_bond(2, 3, 1)
p2.add_atom("C", _map=4)
p2.add_atom("Cl")
p2.add_bond(4, 5, 1)
# Gomberg-Bachmann reaction
#
q, p1, p2 = prepare()
q.add_atom("C", hybridization=4, heteroatoms=0)
q.add_atom("C", hybridization=4, heteroatoms=0)
q.add_bond(1, 2, 1)
p1.add_atom("C")
p1.add_atom("N", _map=3)
p1.add_bond(1, 3, 1)
p2.add_atom("C", _map=2)
# Cyclocondensation
#
q, p1, p2 = prepare()
q.add_atom("N", neighbors=2)
q.add_atom("C")
q.add_atom("C")
q.add_atom("C")
q.add_atom("N")
q.add_atom("C")
q.add_atom("C")
q.add_atom("O", neighbors=1)
q.add_bond(1, 2, 1)
q.add_bond(2, 3, 1)
q.add_bond(3, 4, 1)
q.add_bond(4, 5, 2)
q.add_bond(5, 6, 1)
q.add_bond(6, 7, 1)
q.add_bond(7, 8, 2)
q.add_bond(1, 7, 1)
p1.add_atom("N")
p1.add_atom("C")
p1.add_atom("C")
p1.add_atom("C")
p1.add_atom("O", _map=9)
p1.add_bond(1, 2, 1)
p1.add_bond(2, 3, 1)
p1.add_bond(3, 4, 1)
p1.add_bond(4, 9, 2)
p2.add_atom("N", _map=5)
p2.add_atom("C")
p2.add_atom("C")
p2.add_atom("O")
p2.add_atom("O", _map=10)
p2.add_bond(5, 6, 1)
p2.add_bond(6, 7, 1)
p2.add_bond(7, 8, 2)
p2.add_bond(7, 10, 1)
# heterocyclization dicarboxylic acids
#
q, p1, p2 = prepare()
q.add_atom("C", rings_sizes=(5, 6))
q.add_atom("O")
q.add_atom(ListElement(["O", "N"]))
q.add_atom("C", rings_sizes=(5, 6))
q.add_atom("O")
q.add_bond(1, 2, 2)
q.add_bond(1, 3, 1)
q.add_bond(3, 4, 1)
q.add_bond(4, 5, 2)
p1.add_atom("C")
p1.add_atom("O")
p1.add_atom("O", _map=6)
p1.add_bond(1, 2, 2)
p1.add_bond(1, 6, 1)
p2.add_atom("C", _map=4)
p2.add_atom("O")
p2.add_atom("O", _map=7)
p2.add_bond(4, 5, 2)
p2.add_bond(4, 7, 1)
__all__ = ["rules"]