Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tinaccil/connectivity_chemical_graph
Python script that permits to encode molecules as molecular graph and compare easily the connectivity of two molecules
https://github.com/tinaccil/connectivity_chemical_graph
chemical-graph encode-molecules isomorphism
Last synced: about 2 months ago
JSON representation
Python script that permits to encode molecules as molecular graph and compare easily the connectivity of two molecules
- Host: GitHub
- URL: https://github.com/tinaccil/connectivity_chemical_graph
- Owner: TinacciL
- License: gpl-3.0
- Created: 2021-02-23T14:15:54.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2022-01-28T17:27:30.000Z (almost 3 years ago)
- Last Synced: 2023-07-18T10:40:21.417Z (over 1 year ago)
- Topics: chemical-graph, encode-molecules, isomorphism
- Language: Python
- Homepage:
- Size: 39.1 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Connectivity in chemical graph
This is a Python 3.8 script that permits to encode molecules as molecular graph and compare the connectivity of two molecules.## Installation
This program used a python3 interface, to run this code you must install on your machine this list of packages:
* ```networkx```
* ```ase```## Script Structure
0 - Import the required packages
```python
import networkx as nx
from ase import io, neighborlist, atoms
```1 - Function that encode the molecule from the Euclidean space (.xyz) to the corrisponding graph structure, and you will call it in the main of the code.
```python
def FromXYZtoGraph(input_file):
atoms = ['H','He','Li','C','N','O','F','Na','Si','P','S','Cl']
atomic_numb = [1,2,3,6,7,8,9,11,14,15,16,17]
mol = io.read(input_file)
#compute neighbor of the atoms in xyz format
cutOff = neighborlist.natural_cutoffs(mol)
neighborList = neighborlist.NeighborList(cutOff, self_interaction=False, bothways=True)
neighborList.update(mol)
#compure adjacency matrix and atoms list
adj_matrix = neighborList.get_connectivity_matrix(sparse=False)
Natom_list = mol.get_atomic_numbers()
atoms_list = []
for i,item in enumerate(Natom_list):
for k in range(len(atomic_numb)):
if item == atomic_numb[k]:
atoms_list.append(atoms[k])
#convert in networkx-molecules graph
G=nx.from_numpy_matrix(adj_matrix)
for i,item in enumerate(atoms_list):
tmp_attr = {'atom': item}
G.nodes[i].update(tmp_attr.copy())
return(G)
```
2 - Code main: computing the isomorphism between two molecular graph object.2.1 - Encode the molecoles from .xyz to graph molecule objects, modify the path (example "pathToMolecules/mol_0.xyz") where your .xyz is locate.
```python
mol_0 = FromXYZtoGraph(pathToMolecules/mol_0.xyz)
mol_1 = FromXYZtoGraph(pathToMolecules/mol_1.xyz)
```2.2 - Run the function to control the isomorphism between the two molecules
```python
prop = 'atom'
nm = nx.algorithms.isomorphism.categorical_node_match(prop,prop)if nx.is_isomorphic(mol0,mol_1,node_match=nm):
print('Are isomorphic!')
else:
print('Are NOT isomorphic!')
```## Associated publication
Please reffer to the following publication to cite our work or retrieve the info:[Structures and Properties of Known and Postulated Interstellar Cations, L.Tinacci et al 2021 ApJS 256 35](https://doi.org/10.3847/1538-4365/ac194c)
(https://doi.org/10.3847/1538-4365/ac194c)
## Acknowledgments
This project has received funding within the European Union’s Horizon 2020 research and innovation programme from the Marie Sklodowska-Curie for the project ”Astro-Chemical Origins” (ACO), grant agreement No 811312.