Skip to main content

No project description provided

Project description

Global-Chem: A General Graph Network of common small molecules and their SMILES/SMARTS to support diverse chemical communities

License: MPL 2.0 Python Build Status Coverage Status Repo Size PyPI version DOI PRs Welcome Downloads PEP8 FOSSA Status

Global Chem is an open-source graph database and api for common and rare chemical lists using IUPAC as input and SMILES/SMARTS as output. As mostly needed by myself as I search through chemical infinity.

I have found these lists written in history to be useful, they come from a variety of different fields but are aggregated into the most common format of organic chemists (IUPAC) and the common language of the cheminformatician (SMILES) and for pattern matching (SMARTS).

Installation

GlobalChem is going to be distribute via PyPi and as the content store grows we can expand it to other pieces of software making it accessible to all regardless of what you use. Alternatively, you could have a glance at the source code and copy/paste it yourself.


pip install global-chem

If you want to install the extensions package for extra functionality but with dependencies: https://github.com/Sulstice/global-chem-extensions


pip install global-chem-extensions

Rules

The Graph Network (GN)s comes with a couple of rules that for now make the software engineering easier on the developer.

1.) There must be a root node. 2.) When Adding a Node every node must be connected. 3.) To remove a node it must not have any children.

The Deep Graph Network (DGN)s comes also with a couple of rules to make the implementation easier:

1.) There must be a root node of 1 which marks as your "input" node. 2.) When adding a layer all nodes will be added to all the previous layers as children. (Folk can use the remove node feature to perform dropouts)

Quick Start

Just with no dependencies, intialize the class and there you go! All the common and rare groups of the world at your disposal

Print the GlobalChem Structure

gc = GlobalChem()
gc.print_globalchem_network()

>>>

                                solventscommon_organic_solvents
             organic_synthesis─└protecting_groupsamino_acid_protecting_groups
                       polymerscommon_monomer_repeating_units
             materials─└claymontmorillonite_adsorption
                                         privileged_kinase_inhibtors
                                         privileged_scaffolds
             proteinskinases─┌scaffolds─├iupac_blue_book_substituents
                                        common_r_group_replacements
                              brafinhibitors
                           vitamins
                           open_smiles
             miscellaneous─├amino_acids
                           regex_patterns
global_chem──├environmentemerging_perfluoroalkyls
                       schedule_one
                       schedule_four
                       schedule_five
             narcotics─├pihkal
                       schedule_two
                       schedule_three
             interstellar_space
                                 cannabinoids
                                          electrophillic_warheads_for_kinases
                                 warheads─└common_warheads_covalent_inhibitors
             medicinal_chemistry─│      phase_2_hetereocyclic_rings
                                  rings─├iupac_blue_book_rings
                                         rings_in_drugs
                                         

To Access Nodes and Visualize the Internal Network:

from global_chem import GlobalChem

gc = GlobalChem()

nodes_list = gc.check_available_nodes()
print (nodes_list)

>>>
'emerging_perfluoro_alkyls', 'montmorillonite_adsorption', 'common_monomer_repeating_units', 'electrophilic_warheads_for_kinases',

gc.build_global_chem_network(print_output=True)

>>>
'global_chem': {
    'children': [
        'environment',
        'miscellaneous',
        'organic_synthesis',
        'medicinal_chemistry',
        'narcotics',
        'interstellar_space',
        'proteins',
        'materials'
    ],
    'name': 'global_chem',
    'node_value': <global_chem.global_chem.Node object at 0x10f60eed0>,
    'parents': []
},

The algorithm uses a series of parents/children to connect nodes instead of "edges" as in traditional graph networks. This just makes it easier to code if the graph database lives as a 1-dimensional with lists of parents and childrens connected in this fashion.

Fetch the Node:

gc = GlobalChem()
gc.build_global_chem_network(print_output=False, debugger=False)
node = gc.get_node('emerging_perfluoroalkyls').get_smiles()
print (node)

Fetch the IUPAC:SMILES/SMARTS Data from the Node:

gc = GlobalChem()
gc.build_global_chem_network(print_output=True, debugger=False)
smiles = gc.get_node_smiles('emerging_perfluoroalkyls')
smarts = gc.get_node_smarts('emerging_perfluoroalkyls')

print (smiles)

Fetch All Data from Network:

gc = GlobalChem()
print(gc.get_all_smiles())
print(gc.get_all_smarts())
print(gc.get_all_names())

>>>
['C(=O)(C(C(C(C(C(F)(F)F)(F)F)(F)F)(F)F)(F)F)O', 'C(=O)(C(C(C(C(C(C(F)(F)F)(F)F)(F)F)(F)F)(F)F)(F)F)O' etc...]
    

Remove a Node from the Network:

Removes the Node and it's connections to any parents.

gc = GlobalChem()
gc.build_global_chem_network(print_output=False, debugger=False)
gc.remove_node('emerging_perfluoroalkyls')

Fetch a SMILES By IUPAC

gc = GlobalChem()
definition = gc.get_smiles_by_iupac(
'benzene', 
return_network_path=False,
return_all_network_paths=False
)

Set & Get the Node Value:

If the user wants to put some metadata inside the node they can:

gc = GlobalChem()
gc.build_global_chem_network(print_output=True, debugger=False)
gc.set_node_value('emerging_perfluoroalkyls', {'some_data': ['bunny']})
print (gc.get_node_value('emerging_perfluoroalkyls'))

>>>
{'some_data': ['bunny']}

To Create Your Own Chemical Graph Network (GN) And Check the Values

from global_chem import GlobalChem

gc = GlobalChem(verbose=False)
gc.initiate_network()
gc.add_node('global_chem', 'common_monomer_repeating_units')
gc.add_node('common_monomer_repeating_units','electrophilic_warheads_for_kinases')
values = gc.get_node_smiles('common_monomer_repeating_units')

print (values)

>>>
'3′-bromo-2-chloro[1,1′:4′,1′′-terphenyl]-4,4′′': 'ClC1=CC=CC=C1C2=CC=C(C3=CC=CC=C3)C(Br)=C2'

values = gc.get_node_smarts('electrophilic_warheads_for_kinases')

>>>
'propane-1,3-diyl': '[#6]-[#6]-[#6]', 'methylmethylene': '[#6H]-[#6]',

Creating Deep Layer Chemical Graph Networks (DGN) & Print it out:

This is for more advanced users of graph theory and understanding.

gc = GlobalChem()
gc.initiate_deep_layer_network()
gc.add_deep_layer(
    [
        'emerging_perfluoroalkyls',
        'montmorillonite_adsorption',
        'common_monomer_repeating_units'
    ]
)
gc.add_deep_layer(
    [
        'common_warhead_covalent_inhibitors',
        'privileged_scaffolds',
        'iupac_blue_book'
    ]
)

gc.print_deep_network()


>>>
                                      common_warhead_covalent_inhibitors
            emerging_perfluoroalkyls─├privileged_scaffolds
                                     iupac_blue_book
                                       common_warhead_covalent_inhibitors
global_chem─├montmorillonite_adsorption─├privileged_scaffolds
                                       iupac_blue_book
                                           common_warhead_covalent_inhibitors
            common_monomer_repeating_units─├privileged_scaffolds
                                            iupac_blue_book

Compute Common Score for an IUPAC Name:

Based on how many times a word is mentioned per object increases the common weight. The more weight the more common. A score of 0 indicates it is "uncommon".


Common Score Algorithm:

    1.) Data mine the current state of GlobalChem
    2.) Get the Object Weights of Each mention
    3.) Determine the Mention Weight
    4.) Sum the Weights and That's How common it is.
    
gc = GlobalChem()
gc.build_global_chem_network(print_output=False, debugger=False)
gc.compute_common_score('benzene', verbose=True)

Adding Your Own Chemical List

If you would like to add your paper to the chemical graph network then please "File an Issue" with your chemical list and perhaps a suggestion of where to add it or you can leave for up to us to decide. The format of the chemical list can be something like this:


smiles = {
   '3,5-dimethoxyphenylisoproxycarbonyl': 'COC1=CC(C(C)(OC=O)C)=CC(OC)=C1',
   '2-(4-biphenyl)isopropoxycarbonyl': 'CC(C)(OC=O)C(C=C1)=CC=C1C2=CC=CC=C2',
   '2-nitrophenylsulfenyl': 'SC1=CC=CC=C1[N+]([O-])=O',
   'boc': 'O=COC(C)(C)C',
}  

GlobalChem Extensions

Applications of GlobalChem can be applied to a variety of cheminformatic usage. One of which is functional group analysos of any SMILES dataset using the SMARTS patterns strings described in the data. GlobalChemExtensions have

Sunbursting

Please navigate here for more documentation: https://github.com/Sulstice/global-chem-extensions

from global_chem_extensions.global_chem_extensions import GlobalChemExtensions

test_set = [
    'c1[n+](cc2n(c1OCCc1cc(c(cc1)F)F)c(nn2)c1ccc(cc1)OC(F)F)[O-]',
    'c1nc(c2n(c1OCCc1cc(c(cc1)F)F)c(nn2)c1ccc(cc1)OC(F)F)Cl',
    'c1ncc2n(c1CCO)c(nn2)c1ccc(cc1)OC(F)F',
    'C1NCc2n(C1CCO)c(nn2)c1ccc(cc1)OC(F)F',
    'C1(CN(C1)c1cc(c(cc1)F)F)Oc1cncc2n1c(nn2)c1ccc(cc1)OC(F)F',
    'c1ncc2n(c1N1CCC(C1)c1ccccc1)c(nn2)c1ccc(cc1)OC(F)F',
]

GlobalChemExtensions().sunburst_chemical_list(test_set, save_file=False)

PCA Analysis

Conduct PCA Analysis with a SMILES list input.

from global_chem.global_chem import GlobalChem
from global_chem_extensions.global_chem_extensions import GlobalChemExtensions

gc = GlobalChem()
gc.build_global_chem_network(print_output=False, debugger=False)
smiles_list = list(gc.get_node_smiles('schedule_one').values())

GlobalChemExtensions().node_pca_analysis(smiles_list, save_file=False)

Nodes List

Chemical List # of Entries References
Amino Acids 20 Common Knowledge
Essential Vitamins 13 Common Knowledge
Common Organic Solvents 42 Fulmer, Gregory R., et al. “NMR Chemical Shifts of Trace Impurities: Common Laboratory Solvents, Organics, and Gases in Deuterated Solvents Relevant to the Organometallic Chemist.”Organometallics, vol. 29, no. 9, May 2010, pp. 2176–79.
Open Smiles 94 OpenSMILES Home Page. http://opensmiles.org/.
IUPAC Blue Book (CRC Handbook) 2003 333 Chemical Rubber Company. CRC Handbook of Chemistry and Physics: A Ready-Reference Book of Chemical and Physical Data Edited by David R. Lide, 85. ed, CRC Press, 2004.
Rings in Drugs 92 Taylor, Richard D., et al. “Rings in Drugs.” Journal of Medicinal Chemistry, vol. 57, no. 14, July 2014, pp. 5845–59. ACS Publications, https://doi.org/10.1021/jm4017625.
Phase 2 Hetereocyclic Rings 19 Broughton, Howard B., and Ian A. Watson. “Selection of Heterocycles for Drug Design.” Journal of Molecular Graphics & Modelling, vol. 23, no. 1, Sept. 2004, pp. 51–58. PubMed, https://doi.org/10.1016/j.jmgm.2004.03.016.
Privileged Scaffolds 47 Welsch, Matthew E., et al. “Privileged Scaffolds for Library Design and Drug Discovery.” Current Opinion in Chemical Biology , vol. 14, no. 3, June 2010, pp. 347–61.PubMed, https://doi.org/10.1016/j.cbpa.2010.02.018.
Common Warheads 29 Gehringer, Matthias, and Stefan A. Laufer. “Emerging and Re-Emerging Warheads for Targeted Covalent Inhibitors: Applications in Medicinal Chemistry and Chemical Biology.”Journal of Medicinal Chemistry , vol. 62, no. 12, June 2019, pp. 5673–724. ACS Publications, https://doi.org/10.1021/acs.jmedchem.8b01153.
Common Polymer Repeating Units 78 Hiorns, R. C., et al. “A brief guide to polymer nomenclature (IUPAC Technical Report).”Pure and Applied Chemistry , vol. 84, no. 10, Oct. 2012, pp. 2167–69., https://doi.org/10.1351/PAC-REP-12-03-05.
Common R Group Replacements 499 Takeuchi, Kosuke, et al. “R-Group Replacement Database for Medicinal Chemistry.” Future Science OA , vol. 7, no. 8, Sept. 2021, p. FSO742. future-science.com (Atypon) , https://doi.org/10.2144/fsoa-2021-0062.
Electrophillic Warheads for Kinases 24 Petri, László, et al. “An Electrophilic Warhead Library for Mapping the Reactivity and Accessibility of Tractable Cysteines in Protein Kinases.” European Journal of Medicinal Chemistry, vol. 207, Dec. 2020, p. 112836. PubMed, https://doi.org/10.1016/j.ejmech.2020.112836.
Privileged Scaffolds for Kinases 29 Hu, Huabin, et al. “Systematic Comparison of Competitive and Allosteric Kinase Inhibitors Reveals Common Structural Characteristics.” European Journal of Medicinal Chemistry, vol. 214, Mar. 2021, p. 113206. ScienceDirect, https://doi.org/10.1016/j.ejmech.2021.113206.
BRaf Inhibitors 54 Agianian, Bogos, and Evripidis Gavathiotis. “Current Insights of BRAF Inhibitors in Cancer.” Journal of Medicinal Chemistry, vol. 61, no. 14, July 2018, pp. 5775–93. ACS Publications, https://doi.org/10.1021/acs.jmedchem.7b01306.
Common Amino Acid Protecting Groups 346 Isidro-Llobet, Albert, et al. “Amino Acid-Protecting Groups.” Chemical Reviews, vol. 109, no. 6, June 2009, pp. 2455–504. DOI.org (Crossref), https://doi.org/10.1021/cr800323s.
Emerging Perfluoroalkyls 27 Pelch, Katherine E., et al. “PFAS Health Effects Database: Protocol for a Systematic Evidence Map.” Environment International, vol. 130, Sept. 2019, p. 104851. ScienceDirect, https://doi.org/10.1016/j.envint.2019.05.045.
Chemicals For Clay Adsorption 33 Orr, Asuka A., et al. “Combining Experimental Isotherms, Minimalistic Simulations, and a Model to Understand and Predict Chemical Adsorption onto Montmorillonite Clays.” ACS Omega, vol. 6, no. 22, June 2021, pp. 14090–103. PubMed, https://doi.org/10.1021/acsomega.1c00481.
Cannabinoids 63 Turner, Carlton E., et al. “Constituents of Cannabis Sativa L. XVII. A Review of the Natural Constituents.” Journal of Natural Products, vol. 43, no. 2, Mar. 1980, pp. 169–234. ACS Publications, https://doi.org/10.1021/np50008a001.
Schedule 1 United States Narcotics 240 ECFR :: 21 CFR Part 1308 - Schedules.
Schedule 2 United States Narcotics 60 ECFR :: 21 CFR Part 1308 - Schedules.
Schedule 3 United States Narcotics 22 ECFR :: 21 CFR Part 1308 - Schedules.
Schedule 4 United States Narcotics 77 ECFR :: 21 CFR Part 1308 - Schedules.
Schedule 5 United States Narcotics 8 ECFR :: 21 CFR Part 1308 - Schedules.
Common Regex Patterns 1

GlobalChem, initially, is one class object with a series of Nodes that are act as objects for any common chemical lists. The chemical lists can be accessed as nodes and the user can construct their own node trees for the lists.

Also since these lists of commonality are stored on github it is easily searchable and tied directly to the paper for any bypasser.

Screen Shot 2022-01-19 at 9 10 14 AM >>>>>>> 713c3366fce5a5a3afb0b0c478f1f50048cb07c2

Genesis

GlobalChem was created because I noticed I was using the same variable across multiple scripts and figure it would be useful for folk to have.


Citation

It's on it's way

License

FOSSA Status

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

global_chem-1.5.0.tar.gz (81.6 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page