find_molecular_rings#

find_molecular_rings(mol_graph, min_ring_size=3, max_ring_size=12)[source]#

Find all rings (cycles) in a molecular graph represented as a NetworkX graph.

Parameters:#

mol_graphnx.Graph

NetworkX graph where nodes represent atomic indices and edges represent bonds

min_ring_sizeint, default=3

Minimum ring size to consider

max_ring_sizeint, default=12

Maximum ring size to consider (helps avoid very large cycles)

Returns:#

list[tuple[int, …]]

List of tuples, each containing atomic indices forming a ring, sorted by ring size (smallest first)

Example:#

>>> import networkx as nx
>>> # Create a simple 6-membered ring (benzene-like)
>>> G = nx.Graph()
>>> G.add_edges_from([(0,1), (1,2), (2,3), (3,4), (4,5), (5,0)])
>>> rings = find_molecular_rings(G)
>>> print(rings)  # [(0, 1, 2, 3, 4, 5)]