Skip to content

Advanced molecular analysis by converting molecular structures into graph representations.

License

Notifications You must be signed in to change notification settings

sinagilassi/PyMolinfo

Repository files navigation

PyMolinfo

Downloads PyPI Python Version License

PyMolInfo (previously molinfo) is a Python package designed for advanced molecular analysis by converting molecular structures into graph representations. This package enables researchers and chemists to load various molecular file formats, transform them into graphs, and extract valuable information through graph-based methods.

Watch the demo

Features

  • File Format Support: Load molecular data from multiple file formats, including SDF and JSON (soon).
  • Graph Conversion: Transform molecular structures into graph representations for detailed analysis.
  • Functional Group Identification: Detect and analyze functional groups within the molecular graph.
  • Distance Measurement: Compute distances between atoms and bonds in the molecular graph.
  • Bond Angle Calculation: Measure angles between bonds using graph-based methods.

Getting Started:

To use PyMolinfo, simply install the package and import it into your Python script. Refer to the example code snippets above for a quick start.

Binder

Test this package by launching our example notebooks on Binder:

Description Launch Binder
Load a sdf file Launch Binder
Visualize a compound Launch Binder
Check and count functional groups Launch Binder
Create custom functional groups Launch Binder

Google Colab

You can use the following code to run PyMolinfo in Google Colab:

Version Google Colab
1.6.0 Open In Colab
< 1.6.0 Open In Colab

Installation

Install molinfo with pip

  pip install PyMolinfo

Documentation

Import package as:

import pyMolinfo as mi
# check version
print(mi.__version__)

Examples

  • Create a graph
# sdf file
sdf_file_name_1 = 'test\Structure2D_COMPOUND_CID_261.sdf'
sdf_file = os.path.join(os.getcwd(), sdf_file_name_1)
# create graph
res = mi.create_graph(sdf_file)
print(type(res))
print(res)
  • Display a graph:
# visualize compound by sdf file
mi.g3d(sdf_file)
  • Check the availability of functional groups:
# check functional groups
res, comp1 = mi.check_functional_group(sdf_file, res_format='dataframe')
print(res)
  • Calculate angle/distance between atoms
# distance matrix
res_distance = comp1.distance_matrix(dataframe=True)
print(res_distance)

# distance between two atoms
distance = comp1.distance_atoms(['O1', 'C2'])
print(distance)

# angle between atoms
angle = comp1.angle_atoms(['O1', 'C2', 'H3'])
print(angle)

# dihedral angle
dihedral = comp1.d_angle_atoms(['H6', 'O1', 'C2', 'H3'])
print(dihedral)
  • Create custom functional groups:

[atom1-element][atom1-number][bond-type][atom2-element][atom2-number]

Bond Types Format
single bond CC C1-C2
double bond CC C1=C2
triple bond CC C1#C2

How to create a custom functional group?

Name Symbol Format
cyanide-1 CCN ["N1#C2"]
custom_fg NCH ["N1-C2", "C2-H3"]
NC=O NC=O ["N1-C2", "C2=O3"]

And coded as:

# C1-C2#N3
custom_functional_group = [
    {'cyanide': ["C1-C2", "C2#N3"]},
]

# define different custom functional groups as:
# N#C
# NCH
# NCO
custom_functional_group = [
    {'N#C': ["N1#C2"]},
    {'custom_fg': ["N1-C2", "C2-H3"]},
    {'NC=O': ["N1-C2", "C2=O3"]},
]

# create custom graph
custom_g = mi.create_custom_functional_groups(custom_functional_group)

# visualize custom graph
# custom_g.d("cyanide")

# find custom functional groups in a compound
res = mi.check_functional_group(
    sdf_file, functional_groups=[custom_g])
print(res)

FAQ

For any question, contact me on LinkedIn

Authors

About

Advanced molecular analysis by converting molecular structures into graph representations.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published