Polymers¶
Here is a collection of CGsmiles applications for polymer molecules.
Linear Polymer Polystyrene¶
Polystyrene (PS) is one of the most common commodity polymers. In the following example we resolve the CGSmiles string and draw the polymer graphs.
import networkx as nx
import pysmiles
import cgsmiles
from cgsmiles.drawing import draw_molecule, FRAGID_TO_COLOR
# Express 5 units of Polystyrene in CGsmiles
cgsmiles_str = "{[#PS]|5}.{#PS=[$]CC[$](c1ccccc1)}"
# Resolve molecule into networkx graphs
res_graph, mol_graph = cgsmiles.MoleculeResolver(cgsmiles_str).resolve()
# Draw graph at the monomer resolution
labels = nx.get_node_attributes(res_graph, 'fragname')
ax, pos = draw_molecule(res_graph,
colors=FRAGID_TO_COLOR,
cg_mapping=False,
labels=labels)
# Draw graph at the atomic resolution
pysmiles.remove_explicit_hydrogens(mol_graph)
ax, pos = draw_molecule(mol_graph, scale=0.7
Graft Polymer mPEG Acrylate¶
mPEG Acrylate is a branched graft polymer, that contains PEG units attached to an poly methyl acrylate backbone. In CGSmiles we can represent this polymers in multiple equivalent ways.
import matplotlib.pyplot as plt
import networkx as nx
import pysmiles
import cgsmiles
from cgsmiles.drawing import draw_molecule
# Using 2 resolutions
cgsmiles_str_two = "{[#PMA]([#PEG]|3)|5}.{#PMA=[<]CC[>]C(=O)OC[$],#PEG=[$]COC[$]}"
# Using 3 resolutions
cgsmiles_str_three = "{[#mPEG]|5}.{#mPEG=[$][#PMA][$]([#PEG]|3)}.{#PMA=[<]CC[>]C(=O)OC[$],#PEG=[$]COC[$]}"
# Resolve molecule into networkx graphs
# Using the resolve_all method we directly jump to the last level
# which means that res_graph is the graph of the monomeric repeat units
res_graph_two, _ = cgsmiles.MoleculeResolver.from_string(cgsmiles_str_two).resolve_all()
res_graph_three, _ = cgsmiles.MoleculeResolver.from_string(cgsmiles_str_three).resolve_all()
# Let's make a custom coluring function that colors by fragment name
def custom_colors_names(graph):
fragname_colors = {"PMA": "tab:blue", "PEG": "tab:red"}
fragnames = nx.get_node_attributes(graph, "fragname")
colors = {node: fragname_colors[fragname] for node, fragname in fragnames.items()}
return colors, fragnames
colors_two, labels_two = custom_colors(res_graph_two)
colors_three, labels_three = custom_colors(res_graph_three)
# Draw the residue graphs only
fig, axes = plt.subplots(1, 2, figsize=(10, 6))
draw_molecule(res_graph_two,
ax=axes[0],
cg_mapping=False,
colors=custom_colors,
scale=0.75)
draw_molecule(res_graph_three,
ax=axes[1],
cg_mapping=False,
colors=custom_colors,
scale=0.75)