Example #1
0
def get_atom_with_map_num(mol, map_num, expected_results):
    atom = utils.get_atom_with_map_num(mol, map_num)

    symbol, num_hydrogens = expected_results

    assert (atom.GetSymbol() == symbol)
    assert (atom.GetTotalNumHs() == num_hydrogens)
Example #2
0
    def _create_reactants(self):
        self._process_nucleophile()
        map_nums = (self.TEMPLATE_OLIGOMERIZATION_MAP_NUM,
                    self.BACKBONE_NITROGEN_MAP_NUM)

        if isinstance(self.model, models.Sidechain):
            monomer = self._create_monomer()
            self.reactants = [
                utils.connect_mols(monomer,
                                   self.template,
                                   map_nums=map_nums,
                                   clear_map_nums=False)
            ]
        else:
            # remove wildcard atom attached to n-terminus added in call to tag_monomer_connection_atom()
            wildcard_atom = utils.get_atom_with_map_num(
                self.reacting_atom, self.N_TERM_WILDCARD_MAP_NUM)
            self.reacting_mol = Chem.RWMol(self.reacting_mol)
            self.reacting_mol.RemoveAtom(wildcard_atom.GetIdx())

            # connect template to monomer
            self.reactants = [
                utils.connect_mols(self.reacting_mol,
                                   self.template,
                                   map_nums=map_nums,
                                   clear_map_nums=False)
            ]
Example #3
0
def test_remove_atom(mol, map_num, symbol):
    atom = utils.get_atom_with_map_num(mol, map_num)
    prev_num_atoms = len(mol.GetAtoms())

    mol = utils.remove_atom(mol, atom.GetIdx())

    atoms = mol.GetAtoms()
    assert (len(atoms) == prev_num_atoms - 1)
    for atom in atoms:
        assert (atom.GetSymbol() != symbol)
Example #4
0
 def _validate_sidechain(self):
     connection_atom = utils.get_atom_with_map_num(
         self.reacting_mol, self.SIDECHAIN_OLIGOMERIZATION_MAP_NUM)
     paths = Chem.FindAllPathsOfLengthN(
         self.reacting_mol,
         3,
         useBonds=False,
         rootedAtAtom=self.reacting_atom.GetIdx())
     atoms = set().union([atom for path in paths for atom in path])
     if connection_atom.GetIdx() not in atoms - set(
             atom.GetIdx() for atom in connection_atom.GetNeighbors()):
         raise InvalidMolecule(
             'The attachment point of the reacting sidechain must be two atoms away from the reacting atom in a pictet spangler reaction!'
         )
Example #5
0
 def _validate_monomer(self):
     try:
         n_term_atom = utils.get_atom_with_map_num(
             self.reacting_mol, self.BACKBONE_NITROGEN_MAP_NUM)
         paths = Chem.FindAllPathsOfLengthN(
             self.reacting_mol,
             5,
             useBonds=False,
             rootedAtAtom=self.reacting_atom.GetIdx())
         atoms = set().union([atom for path in paths for atom in path])
         if n_term_atom.GetIdx() not in atoms - set(
                 atom.GetIdx() for atom in n_term_atom.GetNeighbors()):
             raise InvalidMolecule(
                 'The reacting atom in the monomer must be 4 atoms away from the N-terminus!'
             )
     except (AttributeError, RuntimeError):
         raise InvalidMolecule
Example #6
0
def get_atom_with_map_num_fail(mol, map_num):
    with pytest.raises(RuntimeError):
        atom = utils.get_atom_with_map_num(mol, map_num)