Skip to content

Repository files navigation

🌟 PyMolinfo

PyMolinfo

PyPI DownloadsPyPIPython VersionLicense

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.

✨ 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 for a quick start.

📚 Binder

Test this package by launching our example notebooks on 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 1.6.0: Open In Colab
  • Version < 1.6.0: Open In Colab

🛠️ Installation

Install molinfo with pip

pipinstallPyMolinfo

📖 Documentation

For detailed documentation, please visit molinfo.readthedocs.io/en/latest/.

💡 Examples

Import package as:

importpyMolinfoasmi# check versionprint(mi.__version__)
  • Create a compound
# sdf filecomp1=mi.compound(sdf_file)
# sdf stringcomp1=mi.compound(sdf_string)
# compound by cidcomp1=mi.compound_by_cid(241)
# compound by inchicomp1=mi.compound_by_inchi('InChI=1S/C6H6/c1-2-4-6-5-3-1/h1-6H')
# log# print(comp1)# pp(comp1.atom_bond_block)# print("-"*100)# pp(comp1.atom_bond_block_1d)# print("-"*100)# pp(comp1.atom_xyz)# NOTE: functional groupsprint(comp1.functional_groups)
  • Create a graph

➡️ Create a graph from a compound:

# NOTE: create graphgraph_comp1=comp1.create_graph()
print(graph_comp1)

➡️ Create a graph from a sdf file:

# sdf filesdf_file_name_1='test\Structure2D_COMPOUND_CID_261.sdf'sdf_file=os.path.join(os.getcwd(), sdf_file_name_1)
# create graphres=mi.create_graph(sdf_file)
print(type(res))
print(res)
  • Display a graph:
# plot_mode: Literal['plotly', 'matplotlib'] = 'plotly# view graphmi.view_graph(graph_1)
  • Display a compound:
# visualize compound by sdf filemi.g3d(sdf_file)

🖼️ 1-Naphthaleneacetic acid

1-Naphthaleneacetic-acid

# visualize compound by sdf filemi.g3d(sdf_file, display_bond_length=True)

🖼️ 1-Naphthaleneacetic acid

1-Naphthaleneacetic-acid

  • Check the availability of functional groups:
# check functional groupsres, comp1=mi.check_functional_group(sdf_file, res_format='dataframe')
print(res)
  • Calculate angle/distance between atoms
# distance matrixres_distance=comp1.distance_matrix(dataframe=True)
print(res_distance)
# distance between two atomsdistance=comp1.distance_atoms(['O1', 'C2'])
print(distance)
# angle between atomsangle=comp1.angle_atoms(['O1', 'C2', 'H3'])
print(angle)
# dihedral angledihedral=comp1.d_angle_atoms(['H6', 'O1', 'C2', 'H3'])
print(dihedral)

Creating Custom Functional Groups

To create custom functional groups, you need to define the bonds between atoms using the following format:

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

Here are the formats for different bond types:

  • Single Bond: Represented as C1-C2 where C1 and C2 are the atoms connected by a single bond.
  • Double Bond: Represented as C1=C2 where C1 and C2 are the atoms connected by a double bond.
  • Triple Bond: Represented as C1#C2 where C1 and C2 are the atoms connected by a triple bond.

Examples

  1. Cyanide Group: A cyanide group can be represented as N1#C2.
custom_functional_group= [
{'cyanide': ["N1#C2"]},
]
  1. Custom Functional Group: A custom functional group with a single and a double bond can be represented as N1-C2 and C2=O3.
custom_functional_group= [
{'custom_fg': ["N1-C2", "C2=O3"]},
]
  1. Multiple Functional Groups: You can define multiple functional groups in a list.
custom_functional_group= [
{'N#C': ["N1#C2"]},
{'custom_fg': ["N1-C2", "C2-H3"]},
{'NC=O': ["N1-C2", "C2=O3"]},
]

Once you have defined your custom functional groups, you can create and visualize them as follows:

# create custom graphcustom_g=mi.create_custom_functional_groups(custom_functional_group)
# visualize custom graph# custom_g.d("cyanide")# find custom functional groups in a compoundres=mi.check_functional_group(
sdf_file, functional_groups=[custom_g])
print(res)

❓ FAQ

For any question, contact me on LinkedIn

👥 Authors

@sinagilassi

About

Advanced molecular analysis by converting molecular structures into graph representations.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages