Source code for mbuild_polybuild.aa_monomers.cbma

"""Carboxybetaine Methacrylate moiety."""

import mbuild as mb

from mbuild_polybuild.aa_monomers.methacrylate import Methacrylate
from mbuild_polybuild.aa_functional_groups.ammonium import Ammonium
from mbuild_polybuild.aa_functional_groups.ester import Ester


[docs] class Cbma(mb.Compound): """ A carboxybetaine methacrylate monomer. This class uses a custom ester Compound. Ports ----- - up: Quaternary carbon backbone. - down: Secondary carbon backbone. Parameters ---------- spacer_backbone : int, optional, default=2 Number of methylene groups between the backbone group and the first ion. spacer_ion : int, optional, default=2 Number of methylene groups between the backbone group and the second ion. Examples -------- >>> from mbuild_polybuild.aa_monomers.cbma import Cbma >>> cbma = Cbma(spacer_backbone=3, spacer_ion=2) >>> cbma.visualize() """ def __init__(self, spacer_backbone=2, spacer_ion=2, switch_backbone_chiral=False): super(Cbma, self).__init__() if not isinstance(spacer_ion, int) or not isinstance(spacer_backbone, int): raise ValueError("Spacer length must be an integer") # Create Moieties methacrylate = Methacrylate(cap_branch=False, chiral_switch=switch_backbone_chiral) spacer_b = mb.recipes.Alkane(n=spacer_backbone, cap_front=False, cap_end=False) ammonium = Ammonium(substituents=2, alkane=[1]) spacer_i = mb.recipes.Alkane(n=spacer_ion, cap_front=False, cap_end=False) ester = Ester(ion=True) # Assemble Pieces self.add(methacrylate, "methacrylate") self.add(spacer_b, "spacer_backbone") mb.force_overlap(move_this=spacer_b, from_positions=spacer_b["up"], to_positions=methacrylate["port[1]"]) self.add(ammonium, "ammonium") mb.force_overlap(move_this=ammonium, from_positions=ammonium["port[2]"], to_positions=spacer_b["down"]) self.add(spacer_i, "spacer_ion") mb.force_overlap(move_this=spacer_i, from_positions=spacer_i["up"], to_positions=ammonium["port[3]"]) self.add(ester, "ester") mb.force_overlap(move_this=ester, from_positions=ester["port[0]"], to_positions=spacer_i["down"]) # Hoist methacrylate port label to top level. self.add(self["methacrylate"]["down"], "down", containment=False) self.add(self["methacrylate"]["up"], "up", containment=False)
if __name__ == "__main__": m = Cbma() m.save("cbma.mol2", overwrite=True)