コード例 #1
0
def test_stereochem():

    parser = parse_smiles('N[C@](Br)(O)C')
    parser_coords = np.array([atom.coord for atom in parser.atoms][:5])
    desired_coords = np.array([[1.26597, 0.60740, -0.09729],
                               [-0.26307, 0.59858, -0.07141],
                               [-0.91282, 2.25811, 0.01409],
                               [-0.72365, -0.12709, 1.01313],
                               [-0.64392, 0.13084, -1.00380]])
    assert calc_rmsd(parser_coords, desired_coords) < 0.5

    parser = parse_smiles('N[C@@H](Br)(O)')
    parser_coords = np.array([atom.coord for atom in parser.atoms][:4]
                             + [parser.atoms[6].coord])
    desired_coords = np.array([[1.26597, 0.60740, -0.09729],
                               [-0.26307, 0.59858, -0.07141],
                               [-0.72365, -0.12709, 1.01313],
                               [-0.91282, 2.25811, 0.01409],
                               [-0.64392, 0.13084, -1.00380]])
    assert calc_rmsd(parser_coords, desired_coords) < 0.5

    parser = parse_smiles('F/C=C/F')
    parser_coords = np.array([atom.coord for atom in parser.atoms])
    desired_coords = np.array([[-4.14679, 1.36072, 0.92663],
                               [-3.58807, 1.44785, -0.00000],
                               [-2.26409, 1.31952, 0.00000],
                               [-1.70538, 1.40665, -0.92663],
                               [-4.11965, 1.64066, -0.92663],
                               [-1.73251, 1.12671, 0.92663]])
    assert calc_rmsd(parser_coords, desired_coords) < 0.5
コード例 #2
0
def test_charge():
    parser = parse_smiles('C[O-]')
    assert parser.charge == -1

    parser = parse_smiles('[O-]S(=O)([O-])=O')
    assert parser.charge == -2

    parser = parse_smiles('C[N-2]')
    assert parser.charge == -2
コード例 #3
0
def test_parse_smiles():
    parser = parse_smiles('CC')

    assert len(parser.atoms) == 8
    assert len(parser.bonds) == 7
    assert parser.stereocentres == []
    assert parser.charge == 0
    assert parser.n_radical_electrons == 0

    with pytest.raises(InvalidSmilesString):
        _ = parse_smiles('CC1')
コード例 #4
0
ファイル: smiles.py プロジェクト: jmgx30/autodE
def init_smiles(molecule, smiles):
    """
    Initialise a molecule from a SMILES string
    Arguments:
        molecule (autode.molecule.Molecule):
        smiles (str): SMILES string
    """
    # Assume that the RDKit conformer generation algorithm is not okay for
    # metals
    molecule.rdkit_conf_gen_is_fine = False

    parser = parse_smiles(smiles)

    molecule.charge = parser.charge
    molecule.mult = calc_multiplicity(
        molecule=molecule, n_radical_electrons=parser.n_radical_electrons)

    molecule.set_atoms(atoms=parser.atoms)

    make_graph(molecule, bond_list=parser.bonds)

    for stereocentre in parser.stereocentres:
        molecule.graph.nodes[stereocentre]['stereo'] = True
    for bond_index in parser.bond_order_dict.keys():
        bond = parser.bonds[bond_index]
        molecule.graph.edges[bond]['pi'] = True

    molecule.set_atoms(atoms=get_simanl_atoms(molecule))
    check_bonds(molecule, bonds=parser.bonds)

    return None
コード例 #5
0
def test_alt_ring_branch():

    smiles = ('[H][Rh]12([C]=O)([P+](C3=CC=CC4=C3OC5=C([P+](C6=CC=CC=C6)2C7='
              'CC=CC=C7)C=CC=C5C4(C)C)(C8=CC=CC=C8)C9=CC=CC=C9)CC1')
    parser = parse_smiles(smiles)

    # Should be valid and not raise InvalidSmilesString
    assert len(parser.atoms) == 84
コード例 #6
0
def test_alkene_stereochem():
    parser = parse_smiles('C/C=C/C')
    assert len(parser.alkene_stero_dict.keys()) > 0

    parser = parse_smiles('C/C=C/C#C')
    assert len(parser.alkene_stero_dict.keys()) > 0
コード例 #7
0
def test_double_bonds_in_ring():

    parser = parse_smiles('C1=C=C=1')

    assert len(parser.bonds) == 3
    assert parser.charge == 0