Ejemplo n.º 1
0
def test_ring_count():
    # Two rings
    fused = pmd.load_file(get_fn('fused.mol2'), structure=True)
    top, _ = generate_topology(fused)
    rule = SMARTSGraph(name='test', parser=PARSER,
                       smarts_string='[#6;R2]')

    match_indices = list(rule.find_matches(top))
    for atom_idx in (3, 4):
        assert atom_idx in match_indices
    assert len(match_indices) == 2

    rule = SMARTSGraph(name='test', parser=PARSER,
                       smarts_string='[#6;R1]')
    match_indices = list(rule.find_matches(top))
    for atom_idx in (0, 1, 2, 5, 6, 7, 8, 9):
        assert atom_idx in match_indices
    assert len(match_indices) == 8

    # One ring
    ring = pmd.load_file(get_fn('ring.mol2'), structure=True)
    top, _ = generate_topology(ring)

    rule = SMARTSGraph(name='test', parser=PARSER,
                       smarts_string='[#6;R1]')
    match_indices = list(rule.find_matches(top))
    for atom_idx in range(6):
        assert atom_idx in match_indices
    assert len(match_indices) == 6
Ejemplo n.º 2
0
def test_ring_count():
    # Two rings
    fused = pmd.load_file(get_fn('fused.mol2'), structure=True)
    top, _ = generate_topology(fused)
    rule = SMARTSGraph(name='test', parser=PARSER, smarts_string='[#6;R2]')

    match_indices = list(rule.find_matches(top))
    for atom_idx in (3, 4):
        assert atom_idx in match_indices
    assert len(match_indices) == 2

    rule = SMARTSGraph(name='test', parser=PARSER, smarts_string='[#6;R1]')
    match_indices = list(rule.find_matches(top))
    for atom_idx in (0, 1, 2, 5, 6, 7, 8, 9):
        assert atom_idx in match_indices
    assert len(match_indices) == 8

    # One ring
    ring = pmd.load_file(get_fn('ring.mol2'), structure=True)
    top, _ = generate_topology(ring)

    rule = SMARTSGraph(name='test', parser=PARSER, smarts_string='[#6;R1]')
    match_indices = list(rule.find_matches(top))
    for atom_idx in range(6):
        assert atom_idx in match_indices
    assert len(match_indices) == 6
Ejemplo n.º 3
0
def test_lazy_cycle_finding():
    mol2 = pmd.load_file(get_fn('ethane.mol2'), structure=True)
    top, _ = generate_topology(mol2)

    rule = SMARTSGraph(smarts_string='[C]')
    list(rule.find_matches(top))
    assert not any([hasattr(a, 'cycles') for a in top.atoms()])

    ring_tokens = ['R1', 'r6']
    for token in ring_tokens:
        rule = SMARTSGraph(smarts_string='[C;{}]'.format(token))
        list(rule.find_matches(top))
        assert all([hasattr(a, 'cycles') for a in top.atoms()])
Ejemplo n.º 4
0
def test_lazy_cycle_finding():
    mol2 = pmd.load_file(get_fn('ethane.mol2'), structure=True)
    top, _ = generate_topology(mol2)

    rule = SMARTSGraph(smarts_string='[C]')
    list(rule.find_matches(top))
    assert not any([hasattr(a, 'cycles') for a in top.atoms()])

    ring_tokens = ['R1', 'r6']
    for token in ring_tokens:
        rule = SMARTSGraph(smarts_string='[C;{}]'.format(token))
        list(rule.find_matches(top))
        assert all([hasattr(a, 'cycles') for a in top.atoms()])
Ejemplo n.º 5
0
def test_ring_count():
    # Two rings
    fused = pmd.load_file(get_fn('fused.mol2'), structure=True)
    top, _ = generate_topology(fused)
    typemap = {
        atom.index: {
            'whitelist': set(),
            'blacklist': set(),
            'atomtype': None
        }
        for atom in top.atoms()
    }
    rule = SMARTSGraph(name='test',
                       parser=PARSER,
                       smarts_string='[#6;R2]',
                       typemap=typemap)

    match_indices = list(rule.find_matches(top, typemap))
    for atom_idx in (3, 4):
        assert atom_idx in match_indices
    assert len(match_indices) == 2

    rule = SMARTSGraph(name='test',
                       parser=PARSER,
                       smarts_string='[#6;R1]',
                       typemap=typemap)
    match_indices = list(rule.find_matches(top, typemap))
    for atom_idx in (0, 1, 2, 5, 6, 7, 8, 9):
        assert atom_idx in match_indices
    assert len(match_indices) == 8

    # One ring
    ring = pmd.load_file(get_fn('ring.mol2'), structure=True)
    top, _ = generate_topology(ring)
    typemap = {
        atom.index: {
            'whitelist': set(),
            'blacklist': set(),
            'atomtype': None
        }
        for atom in top.atoms()
    }

    rule = SMARTSGraph(name='test',
                       parser=PARSER,
                       smarts_string='[#6;R1]',
                       typemap=typemap)
    match_indices = list(rule.find_matches(top, typemap))
    for atom_idx in range(6):
        assert atom_idx in match_indices
    assert len(match_indices) == 6
Ejemplo n.º 6
0
    def test_ring_count(self, smarts_parser):
        # Two rings
        fused = pmd.load_file(get_fn("fused.mol2"), structure=True)
        fused_graph = TopologyGraph.from_parmed(fused)
        typemap = {
            atom.idx: {"whitelist": set(), "blacklist": set(), "atomtype": None}
            for atom in fused.atoms
        }
        rule = SMARTSGraph(
            name="test",
            parser=smarts_parser,
            smarts_string="[#6;R2]",
            typemap=typemap,
        )

        match_indices = list(rule.find_matches(fused_graph, typemap))
        for atom_idx in (3, 4):
            assert atom_idx in match_indices
        assert len(match_indices) == 2

        rule = SMARTSGraph(
            name="test",
            parser=smarts_parser,
            smarts_string="[#6;R1]",
            typemap=typemap,
        )
        match_indices = list(rule.find_matches(fused_graph, typemap))
        for atom_idx in (0, 1, 2, 5, 6, 7, 8, 9):
            assert atom_idx in match_indices
        assert len(match_indices) == 8

        # One ring
        ring = pmd.load_file(get_fn("ring.mol2"), structure=True)
        typemap = {
            atom.idx: {"whitelist": set(), "blacklist": set(), "atomtype": None}
            for atom in ring.atoms
        }

        ring_graph = TopologyGraph.from_parmed(ring)
        rule = SMARTSGraph(
            name="test",
            parser=smarts_parser,
            smarts_string="[#6;R1]",
            typemap=typemap,
        )
        match_indices = list(rule.find_matches(ring_graph, typemap))
        for atom_idx in range(6):
            assert atom_idx in match_indices
        assert len(match_indices) == 6
Ejemplo n.º 7
0
 def _rule_match(top, typemap, smart, result):
     rule = SMARTSGraph(
         name="test",
         parser=smarts_parser,
         smarts_string=smart,
         typemap=typemap,
     )
     assert bool(list(rule.find_matches(top, typemap))) is result
Ejemplo n.º 8
0
 def _rule_match_count(top, typemap, smart, count):
     rule = SMARTSGraph(
         name="test",
         parser=smarts_parser,
         smarts_string=smart,
         typemap=typemap,
     )
     assert len(list(rule.find_matches(top, typemap))) is count
Ejemplo n.º 9
0
def test_fused_ring():
    fused = pmd.load_file(get_fn('fused.mol2'), structure=True)
    top, _ = generate_topology(fused)
    rule = SMARTSGraph(name='test', parser=PARSER,
                       smarts_string='[#6]12[#6][#6][#6][#6][#6]1[#6][#6][#6][#6]2')

    match_indices = list(rule.find_matches(top))
    assert 3 in match_indices
    assert 4 in match_indices
    assert len(match_indices) == 2
Ejemplo n.º 10
0
def test_fused_ring():
    fused = pmd.load_file(get_fn('fused.mol2'), structure=True)
    top, _ = generate_topology(fused)
    rule = SMARTSGraph(
        name='test',
        parser=PARSER,
        smarts_string='[#6]12[#6][#6][#6][#6][#6]1[#6][#6][#6][#6]2')

    match_indices = list(rule.find_matches(top))
    assert 3 in match_indices
    assert 4 in match_indices
    assert len(match_indices) == 2
Ejemplo n.º 11
0
def test_lazy_cycle_finding():
    mol2 = pmd.load_file(get_fn('ethane.mol2'), structure=True)
    typemap = {
        atom.idx: {
            'whitelist': set(),
            'blacklist': set(),
            'atomtype': None
        }
        for atom in mol2.atoms
    }

    rule = SMARTSGraph(smarts_string='[C]', typemap=typemap)
    list(rule.find_matches(mol2, typemap))
    assert not any(['cycles' in typemap[a.idx] for a in mol2.atoms])

    ring_tokens = ['R1', 'r6']
    for token in ring_tokens:
        rule = SMARTSGraph(smarts_string='[C;{}]'.format(token),
                           typemap=typemap)
        list(rule.find_matches(mol2, typemap))
        assert all(['cycles' in typemap[a.idx] for a in mol2.atoms])
Ejemplo n.º 12
0
def test_lazy_cycle_finding():
    mol2 = pmd.load_file(get_fn('ethane.mol2'), structure=True)
    top, _ = generate_topology(mol2)
    typemap = {
        atom.index: {
            'whitelist': set(),
            'blacklist': set(),
            'atomtype': None
        }
        for atom in top.atoms()
    }

    rule = SMARTSGraph(smarts_string='[C]', typemap=typemap)
    list(rule.find_matches(top, typemap))
    #assert not any([hasattr(a, 'cycles') for a in top.atoms()])
    assert not any(['cycles' in typemap[a.index] for a in top.atoms()])

    ring_tokens = ['R1', 'r6']
    for token in ring_tokens:
        rule = SMARTSGraph(smarts_string='[C;{}]'.format(token),
                           typemap=typemap)
        list(rule.find_matches(top, typemap))
        #assert all([hasattr(a, 'cycles') for a in top.atoms()])
        assert all(['cycles' in typemap[a.index] for a in top.atoms()])
Ejemplo n.º 13
0
def read_search_mapping(search_mapping_filename, user_mapping_filename,
                        topology):
    """Read the search mapping xml file

    Parameters
    ----------
    search_mapping_filename : str
        Name of xml file containing ordered search parameters
    user_mapping_filename : str
        Name of xml file containing molecules in the system
    topology : mdTraj.Topology
        Topology object (to be expanded)

    """

    # root = ET.fromstring(open(search_mapping_filename).read())
    searchlist = []  # list containing all search values ordered by priority
    searchlist.append("C")
    searchlist.append("CC")
    searchlist.append("CCC")
    # for value in root.findall('value'):
    #     searchlist.append(value.attrib['searchstr'])
    print("{0:s}: {1}".format("Search String", searchlist))

    #root = ET.fromstring(open(user_mapping_filename).read())
    molecules = []
    for molecule in root.findall('molecule'):
        molecules.append(
            molecule.attrib['mol_str'])  #smarts string for molecule
    print("{0:s}: {1}".format("Molecules", molecules))

    parser = SMARTSParser()
    matches = []

    for searchstr in searchlist:
        print(searchstr)
        graph = SMARTSGraph(searchstr, parser=parser)
        i = graph.find_matches(topology)
        matches.append(list(i))

    print(matches)

    return matches
Ejemplo n.º 14
0
    def test_fused_ring(self, smarts_parser):
        mol2 = pmd.load_file(get_fn("fused.mol2"), structure=True)
        mol2_graph = TopologyGraph.from_parmed(mol2)
        typemap = {
            atom.idx: {"whitelist": set(), "blacklist": set(), "atomtype": None}
            for atom in mol2.atoms
        }

        rule = SMARTSGraph(
            name="test",
            parser=smarts_parser,
            smarts_string="[#6]12[#6][#6][#6][#6][#6]1[#6][#6][#6][#6]2",
            typemap=typemap,
        )

        match_indices = list(rule.find_matches(mol2_graph, typemap))
        assert 3 in match_indices
        assert 4 in match_indices
        assert len(match_indices) == 2
Ejemplo n.º 15
0
def test_fused_ring():
    mol2 = pmd.load_file(get_fn('fused.mol2'), structure=True)
    typemap = {
        atom.idx: {
            'whitelist': set(),
            'blacklist': set(),
            'atomtype': None
        }
        for atom in mol2.atoms
    }

    rule = SMARTSGraph(
        name='test',
        parser=PARSER,
        smarts_string='[#6]12[#6][#6][#6][#6][#6]1[#6][#6][#6][#6]2',
        typemap=typemap)

    match_indices = list(rule.find_matches(mol2, typemap))
    assert 3 in match_indices
    assert 4 in match_indices
    assert len(match_indices) == 2
Ejemplo n.º 16
0
def _rule_match_count(top, smart, count):
    rule = SMARTSGraph(name='test', parser=PARSER, smarts_string=smart)
    assert len(list(rule.find_matches(top))) is count
Ejemplo n.º 17
0
def _rule_match(top, smart, result):
    rule = SMARTSGraph(name='test', parser=PARSER, smarts_string=smart)
    assert bool(list(rule.find_matches(top))) is result
Ejemplo n.º 18
0
def _rule_match_count(top, smart, count):
    rule = SMARTSGraph(name='test', parser=PARSER, smarts_string=smart)
    assert len(list(rule.find_matches(top))) is count
Ejemplo n.º 19
0
def _rule_match(top, smart, result):
    rule = SMARTSGraph(name='test', parser=PARSER, smarts_string=smart)
    assert bool(list(rule.find_matches(top))) is result