{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# myChEMBL webservices version 2.x\n", "\n", "### myChEMBL team, ChEMBL Group, EMBL-EBI." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "This notebook will provide some examples of using the **`myChEMBL`** webservices.\n", "\n", "The web services have recently been updated to the 2.x version and are **not** backwards compatible.\n", "The main features introduced by this latest version are:\n", "\n", " - more resources\n", " - filtering\n", " - paging\n", " - ordering\n", " \n", "You can call the web services in the following two ways: \n", " \n", "1) Directly _via_ URLs (see the 'Web Services' link on the **`myChEMBL`** LaunchPad for a list of the available endpoints). The advantage of using the URLs is that it is language-agnostic: although the examples below use Python, any other language with a library for executing HTTP requests would do just as well.\n", "\n", "\n", "2) Using the API provided by the Python package **`chembl_webresource_client`**. This has the following advantages:\n", " - the usage is simpler\n", " - some extra functionality is available\n", " - there are performance benefits\n", "\n", "For the reasons above, we recommend using the API where possible.\n", "\n", "Note that the **`chembl_webresource_client`** module is aleady installed on the **`myChEMBL`** VM; if you wish to use it on other machines, it can be installed using **`pip`**.\n", "\n", "Please note that the code below attempts to balance clarity and brevity, and is not intended to be a template for production code: error checking, for example, should be much more thorough in practice. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Configuration and setup" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import logging\n", "\n", "from collections import Counter\n", "from operator import itemgetter\n", "\n", "from lxml import etree\n", "\n", "from rdkit import Chem\n", "from rdkit.Chem import Draw \n", "from rdkit.Chem.Draw import IPythonConsole\n", "\n", "from IPython.display import Image, display" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Python modules used for API access...\n", "# By default, the API connects to the main ChEMBL database; set it to use the local version (i.e. myChEMBL) instead...\n", "from chembl_webresource_client.settings import Settings\n", "Settings.Instance().NEW_CLIENT_URL = 'http://localhost/chemblws'\n", "\n", "from chembl_webresource_client.new_client import new_client" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## List of available resources\n", "It's easy to get a list of available resources by invoking:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['activity', 'assay', 'atc_class', 'binding_site', 'biotherapeutic', 'cell_line', 'chembl_id_lookup', 'description', 'document', 'drug_indication', 'go_slim', 'image', 'mechanism', 'metabolism', 'molecule', 'molecule_form', 'official', 'protein_class', 'similarity', 'source', 'substructure', 'target', 'target_component']\n", "23\n" ] } ], "source": [ "available_resources = [resource for resource in dir(new_client) if not resource.startswith('_')]\n", "print available_resources\n", "print len(available_resources)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Which means there are 20 different types of resources available _via_ web services. In this notebook only the most important of these are covered." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Molecules\n", "\n", "Molecule records may be retrieved in a number of ways, such as lookup of single molecules using various identifiers or searching for compounds _via_ substruture or similarity. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1592191 molecules available in myChEMBL_20\n" ] } ], "source": [ "# Get a molecule-handler object for API access and check the connection to the database...\n", "\n", "molecule = new_client.molecule\n", "molecule.set_format('json')\n", "print \"%s molecules available in myChEMBL_20\" % len(molecule.all())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Getting a single molecule\n", "\n", "In order to retrieve a single molecule from the web services, you need to know its unique and unambiguous identifier. In case of molecule resource this can be one of three types:\n", "\n", " 1. ChEMBL_ID\n", " 2. InChI Key\n", " 3. Canonical SMILES (non-canonical SMILES will be covered later in this notebook)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# so this:\n", "# 1.\n", "m1 = molecule.get('CHEMBL25')\n", "# 2.\n", "m2 = molecule.get('BSYNRYMUTXBXSQ-UHFFFAOYSA-N')\n", "#\n", "m3 = molecule.get('CC(=O)Oc1ccccc1C(=O)O')\n", "# will return the same data:\n", "m1 == m2 == m3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ChEMBL ID\n", "\n", "All the main entities in the ChEMBL database have a ChEMBL ID. It is a stable identifier designed for straightforward lookup of data." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Lapatinib, the bioactive component of the anti-cancer drug Tykerb\n", "\n", "chembl_id = \"CHEMBL554\" " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{u'atc_classifications': [u'L01XE07'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'1',\n", " u'chebi_par_id': 49603,\n", " u'chirality': u'2',\n", " u'dosed_ingredient': False,\n", " u'first_approval': 2007,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': None,\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL554',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL554',\n", " u'parent_chembl_id': u'CHEMBL554'},\n", " u'molecule_properties': {u'acd_logd': u'6.26',\n", " u'acd_logp': u'6.30',\n", " u'acd_most_apka': None,\n", " u'acd_most_bpka': u'6.34',\n", " u'alogp': u'6.04',\n", " u'aromatic_rings': 5,\n", " u'full_molformula': u'C29H26ClFN4O4S',\n", " u'full_mwt': u'581.06',\n", " u'hba': 7,\n", " u'hbd': 2,\n", " u'heavy_atoms': 40,\n", " u'molecular_species': u'NEUTRAL',\n", " u'mw_freebase': u'581.06',\n", " u'mw_monoisotopic': u'580.1347',\n", " u'num_alerts': 1,\n", " u'num_ro5_violations': 2,\n", " u'psa': u'114.73',\n", " u'qed_weighted': u'0.18',\n", " u'ro3_pass': u'N',\n", " u'rtb': 11},\n", " u'molecule_structures': {u'canonical_smiles': u'CS(=O)(=O)CCNCc1oc(cc1)c2ccc3ncnc(Nc4ccc(OCc5cccc(F)c5)c(Cl)c4)c3c2',\n", " u'standard_inchi': u'InChI=1S/C29H26ClFN4O4S/c1-40(36,37)12-11-32-16-23-7-10-27(39-23)20-5-8-26-24(14-20)29(34-18-33-26)35-22-6-9-28(25(30)15-22)38-17-19-3-2-4-21(31)13-19/h2-10,13-15,18,32H,11-12,16-17H2,1H3,(H,33,34,35)',\n", " u'standard_inchi_key': u'BCFGMOOMADDAQU-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'FDA', u'synonyms': u'Lapatinib'},\n", " {u'syn_type': u'INN', u'synonyms': u'Lapatinib'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Lapatinib'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'GW-572016'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'GW-2016'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': False,\n", " u'polymer_flag': False,\n", " u'pref_name': u'LAPATINIB',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': u'-tinib',\n", " u'usan_stem_definition': u'tyrosine kinase inhibitors',\n", " u'usan_substem': None,\n", " u'usan_year': 2003}" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get compound record using client...\n", "\n", "record_via_client = molecule.get(chembl_id)\n", "\n", "record_via_client" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As noted above, a URLs may also be used to access the data, and, although the examples here use Python, any other language with a library for executing HTTP requests would do as well." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import a Python module to allow URL-based access...\n", "\n", "import requests\n", "from urllib import quote\n", "\n", "# Stem of URL for local version of web services...\n", "\n", "url_stem = \"http://localhost/chemblws\"" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://localhost/chemblws/molecule/CHEMBL554.json\n", "200\n" ] } ], "source": [ "# Note that, for historical reasons, the URL-based webservices return XML by default, so JSON\n", "# must be requested explicity by appending '.json' to the URL.\n", "\n", "# Get request object...\n", "url = url_stem + \"/molecule/\" + chembl_id + \".json\"\n", "request = requests.get(url)\n", "\n", "print url\n", "\n", "# Check reqest status: should be 200 if everything went OK...\n", "print request.status_code" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{u'atc_classifications': [u'L01XE07'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'1',\n", " u'chebi_par_id': 49603,\n", " u'chirality': u'2',\n", " u'dosed_ingredient': False,\n", " u'first_approval': 2007,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': None,\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL554',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL554',\n", " u'parent_chembl_id': u'CHEMBL554'},\n", " u'molecule_properties': {u'acd_logd': u'6.26',\n", " u'acd_logp': u'6.30',\n", " u'acd_most_apka': None,\n", " u'acd_most_bpka': u'6.34',\n", " u'alogp': u'6.04',\n", " u'aromatic_rings': 5,\n", " u'full_molformula': u'C29H26ClFN4O4S',\n", " u'full_mwt': u'581.06',\n", " u'hba': 7,\n", " u'hbd': 2,\n", " u'heavy_atoms': 40,\n", " u'molecular_species': u'NEUTRAL',\n", " u'mw_freebase': u'581.06',\n", " u'mw_monoisotopic': u'580.1347',\n", " u'num_alerts': 1,\n", " u'num_ro5_violations': 2,\n", " u'psa': u'114.73',\n", " u'qed_weighted': u'0.18',\n", " u'ro3_pass': u'N',\n", " u'rtb': 11},\n", " u'molecule_structures': {u'canonical_smiles': u'CS(=O)(=O)CCNCc1oc(cc1)c2ccc3ncnc(Nc4ccc(OCc5cccc(F)c5)c(Cl)c4)c3c2',\n", " u'standard_inchi': u'InChI=1S/C29H26ClFN4O4S/c1-40(36,37)12-11-32-16-23-7-10-27(39-23)20-5-8-26-24(14-20)29(34-18-33-26)35-22-6-9-28(25(30)15-22)38-17-19-3-2-4-21(31)13-19/h2-10,13-15,18,32H,11-12,16-17H2,1H3,(H,33,34,35)',\n", " u'standard_inchi_key': u'BCFGMOOMADDAQU-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'FDA', u'synonyms': u'Lapatinib'},\n", " {u'syn_type': u'INN', u'synonyms': u'Lapatinib'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Lapatinib'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'GW-572016'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'GW-2016'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': False,\n", " u'polymer_flag': False,\n", " u'pref_name': u'LAPATINIB',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': u'-tinib',\n", " u'usan_stem_definition': u'tyrosine kinase inhibitors',\n", " u'usan_substem': None,\n", " u'usan_year': 2003}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "record_via_url = request.json()\n", "record_via_url " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that in both cases we are getting exactly the same results:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "record_via_client == record_via_url" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When retrieved in JSON format, a record is a nested dictionary, so to get, say, a SMILES string we have to write:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "smiles_from_json = record_via_client['molecule_structures']['canonical_smiles']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is possible to retrieve data in XML format as well:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Get compound record in XML format...\n", "\n", "molecule.set_format('xml')\n", "xml = molecule.get(chembl_id).encode('utf-8')\n", "#print xml\n", "# The XML must be parsed (e.g. using the lxml.etree module in Python) to enable extraction of the data...\n", "\n", "root = etree.fromstring(xml).getroottree()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CS(=O)(=O)CCNCc1oc(cc1)c2ccc3ncnc(Nc4ccc(OCc5cccc(F)c5)c(Cl)c4)c3c2\n", "True\n" ] } ], "source": [ "# Extract SMILES via xpath...\n", "\n", "smiles_from_xml = root.xpath(\"/molecule/molecule_structures/canonical_smiles/text()\")[0]\n", "\n", "print smiles_from_xml\n", "print smiles_from_xml == smiles_from_json" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " \n", " L01XE07\n", " \n", " 1\n", " \n", " 1\n", " 49603\n", " 2\n", " \n", " 2007\n", " 0\n", " \n", " \n", " 0\n", " 4\n", " CHEMBL554\n", " \n", " CHEMBL554\n", " CHEMBL554\n", " \n", " \n", " 6.26\n", " 6.30\n", " \n", " 6.34\n", " 6.04\n", " 5\n", " C29H26ClFN4O4S\n", " 581.06\n", " 7\n", " 2\n", " 40\n", " NEUTRAL\n", " 581.06\n", " 580.1347\n", " 1\n", " 2\n", " 114.73\n", " 0.18\n", " N\n", " 11\n", " \n", " \n", " CS(=O)(=O)CCNCc1oc(cc1)c2ccc3ncnc(Nc4ccc(OCc5cccc(F)c5)c(Cl)c4)c3c2\n", " InChI=1S/C29H26ClFN4O4S/c1-40(36,37)12-11-32-16-23-7-10-27(39-23)20-5-8-26-24(14-20)29(34-18-33-26)35-22-6-9-28(25(30)15-22)38-17-19-3-2-4-21(31)13-19/h2-10,13-15,18,32H,11-12,16-17H2,1H3,(H,33,34,35)\n", " BCFGMOOMADDAQU-UHFFFAOYSA-N\n", " \n", " \n", " \n", " FDA\n", " Lapatinib\n", " \n", " \n", " INN\n", " Lapatinib\n", " \n", " \n", " OTHER\n", " Lapatinib\n", " \n", " \n", " RESEARCH_CODE\n", " GW-572016\n", " \n", " \n", " RESEARCH_CODE\n", " GW-2016\n", " \n", " \n", " Small molecule\n", " 0\n", " True\n", " \n", " \n", " LAPATINIB\n", " 0\n", " MOL\n", " True\n", " \n", " -tinib\n", " tyrosine kinase inhibitors\n", " \n", " 2003\n", "\n", "\n" ] } ], "source": [ "# Pretty-print XML...\n", "\n", "print etree.tostring(root, pretty_print=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### InChIKey\n", "\n", "Compound records may also be retrieved _via_ InChI Key lookup." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://localhost/chemblws/molecule/BCFGMOOMADDAQU-UHFFFAOYSA-N.json\n", "True\n" ] } ], "source": [ "# InChI Key for Lapatinib\n", "inchi_key = \"BCFGMOOMADDAQU-UHFFFAOYSA-N\"\n", "\n", "# getting molecule via client\n", "molecule.set_format('json')\n", "record_via_client = molecule.get(inchi_key)\n", "\n", "# getting molecule via url\n", "url = url_stem + \"/molecule/\" + inchi_key + \".json\"\n", "record_via_url = requests.get(url).json()\n", "\n", "print url\n", "\n", "# they are the same\n", "print record_via_url == record_via_client" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SMILES\n", "\n", "Compound records may also be retrieved _via_ SMILES lookup.\n", "\n", "The purpose of the `get` method is to return objects identified by their unique and unambiguous properties.\n", "This is why SMILES provided as arguments to the `get` method need to be canonical.\n", "But you can still search for molecules, using non-canonical SMILES - this functionaly will be covered later in this notebook." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://localhost/chemblws/molecule/CS%28%3DO%29%28%3DO%29CCNCc1oc%28cc1%29c2ccc3ncnc%28Nc4ccc%28OCc5cccc%28F%29c5%29c%28Cl%29c4%29c3c2.json\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Canonoical SMILES for Lapatinib\n", "canonical_smiles = \"CS(=O)(=O)CCNCc1oc(cc1)c2ccc3ncnc(Nc4ccc(OCc5cccc(F)c5)c(Cl)c4)c3c2\"\n", "\n", "# getting molecule via client\n", "molecule.set_format('json')\n", "record_via_client = molecule.get(canonical_smiles)\n", "\n", "# getting molecule via url\n", "url = url_stem + \"/molecule/\" + quote(canonical_smiles) + \".json\"\n", "record_via_url = requests.get(url).json()\n", "\n", "print url\n", "\n", "# they are the same\n", "record_via_url == record_via_client" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Batch queries\n", "\n", "Multiple records may be requested at once. The `get` method can accept a list of homogenous identifiers." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "records1 = molecule.get(['CHEMBL6498', 'CHEMBL6499', 'CHEMBL6505'])\n", "records2 = molecule.get(['XSQLHVPPXBBUPP-UHFFFAOYSA-N', 'JXHVRXRRSSBGPY-UHFFFAOYSA-N', 'TUHYVXGNMOGVMR-GASGPIRDSA-N'])\n", "records3 = molecule.get(['CNC(=O)c1ccc(cc1)N(CC#C)Cc2ccc3nc(C)nc(O)c3c2',\n", " 'Cc1cc2SC(C)(C)CC(C)(C)c2cc1\\\\N=C(/S)\\\\Nc3ccc(cc3)S(=O)(=O)N',\n", " 'CC(C)C[C@H](NC(=O)[C@@H](NC(=O)[C@H](Cc1c[nH]c2ccccc12)NC(=O)[C@H]3CCCN3C(=O)C(CCCCN)CCCCN)C(C)(C)C)C(=O)O'])\n", "records1 == records2 == records3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The same can be done _via_ urls:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://localhost/chemblws/molecule/set/CHEMBL6498;CHEMBL6499;CHEMBL6505.json\n", "http://localhost/chemblws/molecule/set/XSQLHVPPXBBUPP-UHFFFAOYSA-N;JXHVRXRRSSBGPY-UHFFFAOYSA-N;TUHYVXGNMOGVMR-GASGPIRDSA-N.json\n", "http://localhost/chemblws/molecule/set/CNC%28%3DO%29c1ccc%28cc1%29N%28CC%23C%29Cc2ccc3nc%28C%29nc%28O%29c3c2;Cc1cc2SC%28C%29%28C%29CC%28C%29%28C%29c2cc1%5CN%3DC%28/S%29%5CNc3ccc%28cc3%29S%28%3DO%29%28%3DO%29N;CC%28C%29C%5BC%40H%5D%28NC%28%3DO%29%5BC%40%40H%5D%28NC%28%3DO%29%5BC%40H%5D%28Cc1c%5BnH%5Dc2ccccc12%29NC%28%3DO%29%5BC%40H%5D3CCCN3C%28%3DO%29C%28CCCCN%29CCCCN%29C%28C%29%28C%29C%29C%28%3DO%29O.json\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "url1 = url_stem + \"/molecule/set/%s;%s;%s\" % ('CHEMBL6498', 'CHEMBL6499', 'CHEMBL6505') + \".json\"\n", "records1 = requests.get(url1).json()\n", "\n", "url2 = url_stem + \"/molecule/set/%s;%s;%s\" % ('XSQLHVPPXBBUPP-UHFFFAOYSA-N', 'JXHVRXRRSSBGPY-UHFFFAOYSA-N', 'TUHYVXGNMOGVMR-GASGPIRDSA-N') + \".json\"\n", "records2 = requests.get(url2).json()\n", "\n", "url3 = url_stem + \"/molecule/set/%s;%s;%s\" % (quote('CNC(=O)c1ccc(cc1)N(CC#C)Cc2ccc3nc(C)nc(O)c3c2'),\n", " quote('Cc1cc2SC(C)(C)CC(C)(C)c2cc1\\\\N=C(/S)\\\\Nc3ccc(cc3)S(=O)(=O)N'),\n", " quote('CC(C)C[C@H](NC(=O)[C@@H](NC(=O)[C@H](Cc1c[nH]c2ccccc12)NC(=O)[C@H]3CCCN3C(=O)C(CCCCN)CCCCN)C(C)(C)C)C(=O)O')) + \".json\"\n", "records3 = requests.get(url3).json()\n", "\n", "print url1\n", "print url2\n", "print url3\n", "\n", "records1 == records2 == records3\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Please note that the length of url can't be more than 4000 characters. This is why url-based approach should not be used for a very long lists of identifiers. Also `molecule.get` call needs to be modified slightly in that case." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "168" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Generate a list of 300 ChEMBL IDs (N.B. not all will be valid)...\n", "\n", "chembl_ids = ['CHEMBL{}'.format(x) for x in range(1, 301)]\n", "\n", "# Get compound records, note `molecule_chembl_id` named parameter.\n", "# Named parameters should always be used for longer lists\n", "\n", "records = molecule.get(molecule_chembl_id=chembl_ids)\n", "\n", "len(records)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that we expect to see a number that is less than 300 (169). This is because for some identifiers in range `(CHEMBL1, ..., CHEMBL300)` there are no molecule mapped to them." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Filtering\n", "All resources available through ChEMBL web services can be filtered.\n", "Some examples of filtering applied to molecules:\n", "\n", "1. Get all approved drugs\n", "2. Get all molecules in ChEMBL with no Rule-of-Five violations\n", "3. Get all biotherapeutic molecules\n", "4. Return molecules with molecular weight <= 300\n", "5. Return molecules with molecular weight <= 300 AND pref_name ends with -nib" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# First, filtering using the client:\n", "\n", "# 1. Get all approved drugs\n", "approved_drugs = molecule.filter(max_phase=4)\n", "\n", "# 2. Get all molecules in ChEMBL with no Rule-of-Five violations\n", "no_violations = molecule.filter(molecule_properties__num_ro5_violations=0)\n", "\n", "# 3. Get all biotherapeutic molecules\n", "biotherapeutics = molecule.filter(biotherapeutic__isnull=False)\n", "\n", "# 4. Return molecules with molecular weight <= 300\n", "light_molecules = molecule.filter(molecule_properties__mw_freebase__lte=300)\n", "\n", "# 5. Return molecules with molecular weight <= 300 AND pref_name ends with nib\n", "light_nib_molecules = molecule.filter(molecule_properties__mw_freebase__lte=300).filter(pref_name__iendswith=\"nib\")" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://localhost/chemblws/molecule.json?max_phase=4\n", "http://localhost/chemblws/molecule.json?molecule_properties__num_ro5_violations=0\n", "http://localhost/chemblws/molecule.json?biotherapeutic__isnull=false\n", "http://localhost/chemblws/molecule.json?molecule_properties__mw_freebase__lte=300\n", "http://localhost/chemblws/molecule.json?molecule_properties__mw_freebase__lte=300&pref_name__iendswith=nib\n" ] } ], "source": [ "# Secondly, fltering using url endpoint:\n", "\n", "# 1. Get all approved drugs\n", "url_1 = url_stem + \"/molecule.json?max_phase=4\"\n", "url_approved_drugs = requests.get(url_1).json()\n", "\n", "# 2. Get all molecules in ChEMBL with no Rule-of-Five violations\n", "url_2 = url_stem + \"/molecule.json?molecule_properties__num_ro5_violations=0\"\n", "ulr_no_violations = requests.get(url_2).json()\n", "\n", "# 3. Get all biotherapeutic molecules\n", "url_3 = url_stem + \"/molecule.json?biotherapeutic__isnull=false\"\n", "url_biotherapeutics = requests.get(url_3).json()\n", "\n", "# 4. Return molecules with molecular weight <= 300\n", "url_4 = url_stem + \"/molecule.json?molecule_properties__mw_freebase__lte=300\"\n", "url_light_molecules = requests.get(url_4).json()\n", "\n", "# 5. Return molecules with molecular weight <= 300 AND pref_name ends with nib\n", "url_5 = url_stem + \"/molecule.json?molecule_properties__mw_freebase__lte=300&pref_name__iendswith=nib\"\n", "url_light_nib_molecules = requests.get(url_5).json()\n", "\n", "print url_1\n", "print url_2\n", "print url_3\n", "print url_4\n", "print url_5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Deferences between filtering with client and url endpoint - paging\n", "There are some important differences between filering results returned by the client and generated using URL endpoint.\n", "Let's have a look at them." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "False\n", "\n", "\n" ] } ], "source": [ "# First off, they are not the same thing:\n", "print approved_drugs == url_approved_drugs\n", "\n", "# Not surprisingly, url-endpoint produced JSON data, which has been paresed into python dict:\n", "print type(url_approved_drugs)\n", "\n", "# Whereas the client has returned an object of type `QuerySet`\n", "print type(approved_drugs)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{u'molecules': [{u'atc_classifications': [u'C02CA01'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'0',\n", " u'chebi_par_id': 8364,\n", " u'chirality': u'2',\n", " u'dosed_ingredient': False,\n", " u'first_approval': 1976,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Antihypertensive',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL2',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL2',\n", " u'parent_chembl_id': u'CHEMBL2'},\n", " u'molecule_properties': {u'acd_logd': u'2.09',\n", " u'acd_logp': u'2.14',\n", " u'acd_most_apka': None,\n", " u'acd_most_bpka': u'6.52',\n", " u'alogp': u'2.11',\n", " u'aromatic_rings': 3,\n", " u'full_molformula': u'C19H21N5O4',\n", " u'full_mwt': u'383.40',\n", " u'hba': 7,\n", " u'hbd': 1,\n", " u'heavy_atoms': 28,\n", " u'molecular_species': u'NEUTRAL',\n", " u'mw_freebase': u'383.40',\n", " u'mw_monoisotopic': u'383.1594',\n", " u'num_alerts': 0,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'106.94',\n", " u'qed_weighted': u'0.74',\n", " u'ro3_pass': u'N',\n", " u'rtb': 4},\n", " u'molecule_structures': {u'canonical_smiles': u'COc1cc2nc(nc(N)c2cc1OC)N3CCN(CC3)C(=O)c4occc4',\n", " u'standard_inchi': u'InChI=1S/C19H21N5O4/c1-26-15-10-12-13(11-16(15)27-2)21-19(22-17(12)20)24-7-5-23(6-8-24)18(25)14-4-3-9-28-14/h3-4,9-11H,5-8H2,1-2H3,(H2,20,21,22)',\n", " u'standard_inchi_key': u'IENZQIKPVFGBNW-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'RESEARCH_CODE',\n", " u'synonyms': u'CP-12299'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Prazosin'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Prazosin'},\n", " {u'syn_type': u'INN', u'synonyms': u'Prazosin'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': False,\n", " u'polymer_flag': False,\n", " u'pref_name': u'PRAZOSIN',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': u'-azosin',\n", " u'usan_stem_definition': u'antihypertensives (prazosin type)',\n", " u'usan_substem': None,\n", " u'usan_year': 1968},\n", " {u'atc_classifications': [u'N07BA01'],\n", " u'availability_type': u'2',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'0',\n", " u'chebi_par_id': 17688,\n", " u'chirality': u'1',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1984,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Smoking Cessation Adjunct',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL3',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL3',\n", " u'parent_chembl_id': u'CHEMBL3'},\n", " u'molecule_properties': {u'acd_logd': u'-0.62',\n", " u'acd_logp': u'0.57',\n", " u'acd_most_apka': None,\n", " u'acd_most_bpka': u'8.00',\n", " u'alogp': u'1.24',\n", " u'aromatic_rings': 1,\n", " u'full_molformula': u'C10H14N2',\n", " u'full_mwt': u'162.23',\n", " u'hba': 2,\n", " u'hbd': 0,\n", " u'heavy_atoms': 12,\n", " u'molecular_species': u'NEUTRAL',\n", " u'mw_freebase': u'162.23',\n", " u'mw_monoisotopic': u'162.1157',\n", " u'num_alerts': 0,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'16.13',\n", " u'qed_weighted': u'0.62',\n", " u'ro3_pass': u'Y',\n", " u'rtb': 1},\n", " u'molecule_structures': {u'canonical_smiles': u'CN1CCC[C@H]1c2cccnc2',\n", " u'standard_inchi': u'InChI=1S/C10H14N2/c1-12-7-3-5-10(12)9-4-2-6-11-8-9/h2,4,6,8,10H,3,5,7H2,1H3/t10-/m0/s1',\n", " u'standard_inchi_key': u'SNICXCGAKADSCV-JTQLQIEISA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'TRADE_NAME',\n", " u'synonyms': u'Habitrol'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Nicoderm CQ'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Nicotine'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Nicotine'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Nicotrol'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Prostep'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Nicotrol Inhaler'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Nicotrol NS'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Nicoderm'},\n", " {u'syn_type': u'MERCK_INDEX', u'synonyms': u'Nicotine'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Nicotine'},\n", " {u'syn_type': u'USP', u'synonyms': u'Nicotine'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'1',\n", " u'oral': True,\n", " u'parenteral': False,\n", " u'polymer_flag': True,\n", " u'pref_name': u'NICOTINE',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': True,\n", " u'usan_stem': None,\n", " u'usan_stem_definition': None,\n", " u'usan_substem': None,\n", " u'usan_year': 1985},\n", " {u'atc_classifications': [u'S02AA16', u'J01MA01', u'S01AE01'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'1',\n", " u'chebi_par_id': 7731,\n", " u'chirality': u'0',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1990,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Antibacterial',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL4',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL4',\n", " u'parent_chembl_id': u'CHEMBL4'},\n", " u'molecule_properties': {u'acd_logd': u'-0.39',\n", " u'acd_logp': u'1.86',\n", " u'acd_most_apka': u'5.19',\n", " u'acd_most_bpka': u'7.37',\n", " u'alogp': u'-1.37',\n", " u'aromatic_rings': 1,\n", " u'full_molformula': u'C18H20FN3O4',\n", " u'full_mwt': u'361.37',\n", " u'hba': 7,\n", " u'hbd': 1,\n", " u'heavy_atoms': 26,\n", " u'molecular_species': u'ACID',\n", " u'mw_freebase': u'361.37',\n", " u'mw_monoisotopic': u'361.1438',\n", " u'num_alerts': 1,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'73.31',\n", " u'qed_weighted': u'0.65',\n", " u'ro3_pass': u'N',\n", " u'rtb': 2},\n", " u'molecule_structures': {u'canonical_smiles': u'CC1COc2c(N3CCN(C)CC3)c(F)cc4C(=O)C(=CN1c24)C(=O)O',\n", " u'standard_inchi': u'InChI=1S/C18H20FN3O4/c1-10-9-26-17-14-11(16(23)12(18(24)25)8-22(10)14)7-13(19)15(17)21-5-3-20(2)4-6-21/h7-8,10H,3-6,9H2,1-2H3,(H,24,25)',\n", " u'standard_inchi_key': u'GSDSWSVVBLHKDQ-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'TRADE_NAME', u'synonyms': u'Floxin'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Floxin Otic'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'HOE-280'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Ocuflox'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Ofloxacin'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Visiren'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Tarivid'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'DL-8280'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Ofloxacin'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Ofloxacin'},\n", " {u'syn_type': u'INN', u'synonyms': u'Ofloxacin'},\n", " {u'syn_type': u'JAN', u'synonyms': u'Ofloxacin'},\n", " {u'syn_type': u'USP', u'synonyms': u'Ofloxacin'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Ofloxacin'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': True,\n", " u'polymer_flag': False,\n", " u'pref_name': u'OFLOXACIN',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': True,\n", " u'usan_stem': u'-oxacin',\n", " u'usan_stem_definition': u'antibacterials (quinolone derivatives)',\n", " u'usan_substem': None,\n", " u'usan_year': 1984},\n", " {u'atc_classifications': [u'J01MB02'],\n", " u'availability_type': u'0',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'0',\n", " u'chebi_par_id': 100147,\n", " u'chirality': u'2',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1964,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Antibacterial',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL5',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL5',\n", " u'parent_chembl_id': u'CHEMBL5'},\n", " u'molecule_properties': {u'acd_logd': u'-1.54',\n", " u'acd_logp': u'0.03',\n", " u'acd_most_apka': u'3.45',\n", " u'acd_most_bpka': u'6.12',\n", " u'alogp': u'1.18',\n", " u'aromatic_rings': 1,\n", " u'full_molformula': u'C12H12N2O3',\n", " u'full_mwt': u'232.24',\n", " u'hba': 5,\n", " u'hbd': 1,\n", " u'heavy_atoms': 17,\n", " u'molecular_species': u'ACID',\n", " u'mw_freebase': u'232.24',\n", " u'mw_monoisotopic': u'232.0848',\n", " u'num_alerts': 1,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'70.50',\n", " u'qed_weighted': u'0.78',\n", " u'ro3_pass': u'N',\n", " u'rtb': 2},\n", " u'molecule_structures': {u'canonical_smiles': u'CCN1C=C(C(=O)O)C(=O)c2ccc(C)nc12',\n", " u'standard_inchi': u'InChI=1S/C12H12N2O3/c1-3-14-6-9(12(16)17)10(15)8-5-4-7(2)13-11(8)14/h4-6H,3H2,1-2H3,(H,16,17)',\n", " u'standard_inchi_key': u'MHWLWQUZZRMNGJ-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'TRADE_NAME',\n", " u'synonyms': u'Nalidixic Acid'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Neggram'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'WIN-18320'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Neg Gram'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Uroneg'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Wintomylon'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Nalidixane'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Nalidixic Acid'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Nalidixic Acid'},\n", " {u'syn_type': u'INN', u'synonyms': u'Nalidixic Acid'},\n", " {u'syn_type': u'JAN', u'synonyms': u'Nalidixic Acid'},\n", " {u'syn_type': u'USP', u'synonyms': u'Nalidixic Acid'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Nalidixic Acid'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': False,\n", " u'polymer_flag': False,\n", " u'pref_name': u'NALIDIXIC ACID',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': None,\n", " u'usan_stem_definition': None,\n", " u'usan_substem': None,\n", " u'usan_year': 1962},\n", " {u'atc_classifications': [u'M01AB51',\n", " u'M02AA23',\n", " u'C01EB03',\n", " u'S01BC01',\n", " u'M01AB01'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'1',\n", " u'chebi_par_id': 49662,\n", " u'chirality': u'2',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1965,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Anti-Inflammatory',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL6',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL6',\n", " u'parent_chembl_id': u'CHEMBL6'},\n", " u'molecule_properties': {u'acd_logd': u'0.98',\n", " u'acd_logp': u'4.25',\n", " u'acd_most_apka': u'3.96',\n", " u'acd_most_bpka': None,\n", " u'alogp': u'4.24',\n", " u'aromatic_rings': 3,\n", " u'full_molformula': u'C19H16ClNO4',\n", " u'full_mwt': u'357.79',\n", " u'hba': 4,\n", " u'hbd': 1,\n", " u'heavy_atoms': 25,\n", " u'molecular_species': u'ACID',\n", " u'mw_freebase': u'357.79',\n", " u'mw_monoisotopic': u'357.0768',\n", " u'num_alerts': 0,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'68.53',\n", " u'qed_weighted': u'0.76',\n", " u'ro3_pass': u'N',\n", " u'rtb': 4},\n", " u'molecule_structures': {u'canonical_smiles': u'COc1ccc2c(c1)c(CC(=O)O)c(C)n2C(=O)c3ccc(Cl)cc3',\n", " u'standard_inchi': u'InChI=1S/C19H16ClNO4/c1-11-15(10-18(22)23)16-9-14(25-2)7-8-17(16)21(11)19(24)12-3-5-13(20)6-4-12/h3-9H,10H2,1-2H3,(H,22,23)',\n", " u'standard_inchi_key': u'CGIGDMFJXJATDK-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'TRADE_NAME',\n", " u'synonyms': u'Indo-Lemmon'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Indocin'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Indocin SR'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Indomethacin'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Indometacin'},\n", " {u'syn_type': u'DCF', u'synonyms': u'Indometacin'},\n", " {u'syn_type': u'INN', u'synonyms': u'Indometacin'},\n", " {u'syn_type': u'JAN', u'synonyms': u'Indometacin'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Indomethacin'},\n", " {u'syn_type': u'USP', u'synonyms': u'Indomethacin'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Indomethacin'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Indomethacin'},\n", " {u'syn_type': u'JAN', u'synonyms': u'Indometacin Farnesil'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': True,\n", " u'polymer_flag': False,\n", " u'pref_name': u'INDOMETHACIN',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': True,\n", " u'usan_stem': None,\n", " u'usan_stem_definition': None,\n", " u'usan_substem': None,\n", " u'usan_year': 1963},\n", " {u'atc_classifications': [u'J01CG01'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'0',\n", " u'chebi_par_id': 9321,\n", " u'chirality': u'1',\n", " u'dosed_ingredient': False,\n", " u'first_approval': 1986,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Inhibitor (beta-lactamase); Synergist (penicillin/cephalosporin),Synergist (penicillin/cephalosporin); Inhibitor (beta-lactamase)',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL403',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL403',\n", " u'parent_chembl_id': u'CHEMBL403'},\n", " u'molecule_properties': {u'acd_logd': u'-0.73',\n", " u'acd_logp': u'1.27',\n", " u'acd_most_apka': u'12.48',\n", " u'acd_most_bpka': u'13.48',\n", " u'alogp': u'-0.67',\n", " u'aromatic_rings': 0,\n", " u'full_molformula': u'C8H11NO5S',\n", " u'full_mwt': u'233.24',\n", " u'hba': 5,\n", " u'hbd': 1,\n", " u'heavy_atoms': 15,\n", " u'molecular_species': u'BASE',\n", " u'mw_freebase': u'233.24',\n", " u'mw_monoisotopic': u'233.0358',\n", " u'num_alerts': 1,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'100.13',\n", " u'qed_weighted': u'0.61',\n", " u'ro3_pass': u'N',\n", " u'rtb': 1},\n", " u'molecule_structures': {u'canonical_smiles': u'CC1(C)[C@@H](N2[C@@H](CC2=O)S1(=O)=O)C(=O)O',\n", " u'standard_inchi': u'InChI=1S/C8H11NO5S/c1-8(2)6(7(11)12)9-4(10)3-5(9)15(8,13)14/h5-6H,3H2,1-2H3,(H,11,12)/t5-,6+/m1/s1',\n", " u'standard_inchi_key': u'FKENQMMABCRJMK-RITPCOANSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'RESEARCH_CODE',\n", " u'synonyms': u'CP-45899'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Sulbactam'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Sulbactam'},\n", " {u'syn_type': u'INN', u'synonyms': u'Sulbactam'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'1',\n", " u'oral': False,\n", " u'parenteral': True,\n", " u'polymer_flag': False,\n", " u'pref_name': u'SULBACTAM',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': u'-bactam',\n", " u'usan_stem_definition': u'beta-lactamase inhibitors',\n", " u'usan_substem': None,\n", " u'usan_year': 1980},\n", " {u'atc_classifications': [u'J01CG02'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'0',\n", " u'chebi_par_id': 9421,\n", " u'chirality': u'1',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1993,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Inhibitor (beta-lactamase)',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL404',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL404',\n", " u'parent_chembl_id': u'CHEMBL404'},\n", " u'molecule_properties': {u'acd_logd': u'-3.13',\n", " u'acd_logp': u'0.60',\n", " u'acd_most_apka': u'2.33',\n", " u'acd_most_bpka': u'0.85',\n", " u'alogp': u'-1.19',\n", " u'aromatic_rings': 1,\n", " u'full_molformula': u'C10H12N4O5S',\n", " u'full_mwt': u'300.29',\n", " u'hba': 7,\n", " u'hbd': 1,\n", " u'heavy_atoms': 20,\n", " u'molecular_species': u'ACID',\n", " u'mw_freebase': u'300.29',\n", " u'mw_monoisotopic': u'300.0528',\n", " u'num_alerts': 1,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'130.84',\n", " u'qed_weighted': u'0.69',\n", " u'ro3_pass': u'N',\n", " u'rtb': 3},\n", " u'molecule_structures': {u'canonical_smiles': u'C[C@]1(Cn2ccnn2)[C@@H](N3[C@@H](CC3=O)S1(=O)=O)C(=O)O',\n", " u'standard_inchi': u'InChI=1S/C10H12N4O5S/c1-10(5-13-3-2-11-12-13)8(9(16)17)14-6(15)4-7(14)20(10,18)19/h2-3,7-8H,4-5H2,1H3,(H,16,17)/t7-,8+,10+/m1/s1',\n", " u'standard_inchi_key': u'LPQZKKCYTLCDGQ-WEDXCCLWSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'RESEARCH_CODE',\n", " u'synonyms': u'CL-298741'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Tazobactam'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'YTR-830H'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Tazobactam'},\n", " {u'syn_type': u'INN', u'synonyms': u'Tazobactam'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Tazobactam'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'1',\n", " u'oral': False,\n", " u'parenteral': True,\n", " u'polymer_flag': False,\n", " u'pref_name': u'TAZOBACTAM',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': u'-bactam',\n", " u'usan_stem_definition': u'beta-lactamase inhibitors',\n", " u'usan_substem': None,\n", " u'usan_year': 1989},\n", " {u'atc_classifications': [u'S02AA15', u'S03AA07', u'J01MA02', u'S01AE03'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'1',\n", " u'chebi_par_id': 100241,\n", " u'chirality': u'2',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1987,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Antibacterial',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL8',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL8',\n", " u'parent_chembl_id': u'CHEMBL8'},\n", " u'molecule_properties': {u'acd_logd': u'-0.29',\n", " u'acd_logp': u'1.63',\n", " u'acd_most_apka': u'6.43',\n", " u'acd_most_bpka': u'8.68',\n", " u'alogp': u'-1.27',\n", " u'aromatic_rings': 1,\n", " u'full_molformula': u'C17H18FN3O3',\n", " u'full_mwt': u'331.34',\n", " u'hba': 6,\n", " u'hbd': 2,\n", " u'heavy_atoms': 24,\n", " u'molecular_species': u'ZWITTERION',\n", " u'mw_freebase': u'331.34',\n", " u'mw_monoisotopic': u'331.1332',\n", " u'num_alerts': 1,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'72.88',\n", " u'qed_weighted': u'0.67',\n", " u'ro3_pass': u'N',\n", " u'rtb': 3},\n", " u'molecule_structures': {u'canonical_smiles': u'OC(=O)C1=CN(C2CC2)c3cc(N4CCNCC4)c(F)cc3C1=O',\n", " u'standard_inchi': u'InChI=1S/C17H18FN3O3/c18-13-7-11-14(8-15(13)20-5-3-19-4-6-20)21(10-1-2-10)9-12(16(11)22)17(23)24/h7-10,19H,1-6H2,(H,23,24)',\n", " u'standard_inchi_key': u'MYSWGUAQZAJSOK-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'RESEARCH_CODE',\n", " u'synonyms': u'BAY-Q-3939'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Ciloxan'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Cipro'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Ciprofloxacin'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Ciloxan'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Velmonit'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Ciprobay'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Ciprofloxacin'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Ciprofloxacin'},\n", " {u'syn_type': u'INN', u'synonyms': u'Ciprofloxacin'},\n", " {u'syn_type': u'USP', u'synonyms': u'Ciprofloxacin'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Ciprofloxacin'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': True,\n", " u'polymer_flag': False,\n", " u'pref_name': u'CIPROFLOXACIN',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': True,\n", " u'usan_stem': u'-oxacin',\n", " u'usan_stem_definition': u'antibacterials (quinolone derivatives)',\n", " u'usan_substem': None,\n", " u'usan_year': 1987},\n", " {u'atc_classifications': [u'J01MA06', u'S01AE02'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'1',\n", " u'chebi_par_id': 100246,\n", " u'chirality': u'2',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1986,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Antibacterial',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL9',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL9',\n", " u'parent_chembl_id': u'CHEMBL9'},\n", " u'molecule_properties': {u'acd_logd': u'-0.66',\n", " u'acd_logp': u'1.74',\n", " u'acd_most_apka': u'0.16',\n", " u'acd_most_bpka': u'8.68',\n", " u'alogp': u'-1.41',\n", " u'aromatic_rings': 1,\n", " u'full_molformula': u'C16H18FN3O3',\n", " u'full_mwt': u'319.33',\n", " u'hba': 6,\n", " u'hbd': 2,\n", " u'heavy_atoms': 23,\n", " u'molecular_species': u'ZWITTERION',\n", " u'mw_freebase': u'319.33',\n", " u'mw_monoisotopic': u'319.1332',\n", " u'num_alerts': 1,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'72.88',\n", " u'qed_weighted': u'0.67',\n", " u'ro3_pass': u'N',\n", " u'rtb': 3},\n", " u'molecule_structures': {u'canonical_smiles': u'CCN1C=C(C(=O)O)C(=O)c2cc(F)c(cc12)N3CCNCC3',\n", " u'standard_inchi': u'InChI=1S/C16H18FN3O3/c1-2-19-9-11(16(22)23)15(21)10-7-12(17)14(8-13(10)19)20-5-3-18-4-6-20/h7-9,18H,2-6H2,1H3,(H,22,23)',\n", " u'standard_inchi_key': u'OGJPXUAPXNRGGI-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'TRADE_NAME',\n", " u'synonyms': u'Chibroxin'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Noroxin'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Baccidal'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Quinabic'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Noroxin'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'MK-366'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Norfloxacin'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Norfloxacin'},\n", " {u'syn_type': u'INN', u'synonyms': u'Norfloxacin'},\n", " {u'syn_type': u'JAN', u'synonyms': u'Norfloxacin'},\n", " {u'syn_type': u'USP', u'synonyms': u'Norfloxacin'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Norfloxacin'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': False,\n", " u'polymer_flag': False,\n", " u'pref_name': u'NORFLOXACIN',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': True,\n", " u'usan_stem': u'-oxacin',\n", " u'usan_stem_definition': u'antibacterials (quinolone derivatives)',\n", " u'usan_substem': None,\n", " u'usan_year': 1984},\n", " {u'atc_classifications': [u'N06BA01'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'1',\n", " u'chebi_par_id': 2679,\n", " u'chirality': u'0',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1955,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Stimulant (central)',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL405',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL405',\n", " u'parent_chembl_id': u'CHEMBL405'},\n", " u'molecule_properties': {u'acd_logd': u'-0.65',\n", " u'acd_logp': u'1.79',\n", " u'acd_most_apka': None,\n", " u'acd_most_bpka': u'9.94',\n", " u'alogp': u'1.63',\n", " u'aromatic_rings': 1,\n", " u'full_molformula': u'C9H13N',\n", " u'full_mwt': u'135.21',\n", " u'hba': 1,\n", " u'hbd': 1,\n", " u'heavy_atoms': 10,\n", " u'molecular_species': u'BASE',\n", " u'mw_freebase': u'135.21',\n", " u'mw_monoisotopic': u'135.1048',\n", " u'num_alerts': 0,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'26.02',\n", " u'qed_weighted': u'0.66',\n", " u'ro3_pass': u'Y',\n", " u'rtb': 2},\n", " u'molecule_structures': {u'canonical_smiles': u'CC(N)Cc1ccccc1',\n", " u'standard_inchi': u'InChI=1S/C9H13N/c1-8(10)7-9-5-3-2-4-6-9/h2-6,8H,7,10H2,1H3',\n", " u'standard_inchi_key': u'KWTSXDURSIMDCE-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'FDA', u'synonyms': u'Amphetamine'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Amphetamine'},\n", " {u'syn_type': u'INN', u'synonyms': u'Amphetamine'},\n", " {u'syn_type': u'INN', u'synonyms': u'Amfetamine'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Amphetamine resin complex'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': False,\n", " u'polymer_flag': False,\n", " u'pref_name': u'AMPHETAMINE',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': None,\n", " u'usan_stem_definition': None,\n", " u'usan_substem': None,\n", " u'usan_year': None},\n", " {u'atc_classifications': [u'C05AE02', u'C01DA08', u'C01DA58'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'0',\n", " u'chebi_par_id': 6061,\n", " u'chirality': u'1',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1986,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Vasodilator (coronary)',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL6622',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL6622',\n", " u'parent_chembl_id': u'CHEMBL6622'},\n", " u'molecule_properties': {u'acd_logd': u'0.95',\n", " u'acd_logp': u'0.95',\n", " u'acd_most_apka': None,\n", " u'acd_most_bpka': None,\n", " u'alogp': u'3.41',\n", " u'aromatic_rings': 0,\n", " u'full_molformula': u'C6H8N2O8',\n", " u'full_mwt': u'236.14',\n", " u'hba': 8,\n", " u'hbd': 0,\n", " u'heavy_atoms': 16,\n", " u'molecular_species': None,\n", " u'mw_freebase': u'236.14',\n", " u'mw_monoisotopic': u'236.0281',\n", " u'num_alerts': 2,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'128.56',\n", " u'qed_weighted': u'0.54',\n", " u'ro3_pass': u'N',\n", " u'rtb': 4},\n", " u'molecule_structures': {u'canonical_smiles': u'[O-][N+](=O)O[C@H]1CO[C@@H]2[C@@H](CO[C@H]12)O[N+](=O)[O-]',\n", " u'standard_inchi': u'InChI=1S/C6H8N2O8/c9-7(10)15-3-1-13-6-4(16-8(11)12)2-14-5(3)6/h3-6H,1-2H2/t3-,4+,5-,6-/m1/s1',\n", " u'standard_inchi_key': u'MOYKHGMNXAOIAT-JGWLITMVSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'TRADE_NAME',\n", " u'synonyms': u'Isordil'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Dilatrate-Sr'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Isosorbide Dinitrate'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Sorbitrate'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Dilatrate'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Sorbide Nitrate'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Isosorbide Dinitrate'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Isosorbide Dinitrate'},\n", " {u'syn_type': u'INN', u'synonyms': u'Isosorbide Dinitrate'},\n", " {u'syn_type': u'JAN', u'synonyms': u'Isosorbide Dinitrate'},\n", " {u'syn_type': u'USP', u'synonyms': u'Isosorbide Dinitrate'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Isosorbide Dinitrate'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'1',\n", " u'oral': True,\n", " u'parenteral': False,\n", " u'polymer_flag': False,\n", " u'pref_name': u'ISOSORBIDE DINITRATE',\n", " u'prodrug': u'1',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': True,\n", " u'usan_stem': None,\n", " u'usan_stem_definition': None,\n", " u'usan_substem': None,\n", " u'usan_year': 1966},\n", " {u'atc_classifications': [u'N06AA02'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'1',\n", " u'chebi_par_id': 47499,\n", " u'chirality': u'2',\n", " u'dosed_ingredient': False,\n", " u'first_approval': 1959,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Antidepressant',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL11',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL11',\n", " u'parent_chembl_id': u'CHEMBL11'},\n", " u'molecule_properties': {u'acd_logd': u'4.24',\n", " u'acd_logp': u'4.24',\n", " u'acd_most_apka': u'9.89',\n", " u'acd_most_bpka': u'4.79',\n", " u'alogp': u'4.39',\n", " u'aromatic_rings': 2,\n", " u'full_molformula': u'C19H24N2',\n", " u'full_mwt': u'280.41',\n", " u'hba': 2,\n", " u'hbd': 0,\n", " u'heavy_atoms': 21,\n", " u'molecular_species': u'NEUTRAL',\n", " u'mw_freebase': u'280.41',\n", " u'mw_monoisotopic': u'280.1939',\n", " u'num_alerts': 0,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'6.48',\n", " u'qed_weighted': u'0.82',\n", " u'ro3_pass': u'N',\n", " u'rtb': 4},\n", " u'molecule_structures': {u'canonical_smiles': u'CN(C)CCCN1c2ccccc2CCc3ccccc13',\n", " u'standard_inchi': u'InChI=1S/C19H24N2/c1-20(2)14-7-15-21-18-10-5-3-8-16(18)12-13-17-9-4-6-11-19(17)21/h3-6,8-11H,7,12-15H2,1-2H3',\n", " u'standard_inchi_key': u'BCGWQEUPMDMJNV-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'FDA', u'synonyms': u'Imipramine'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Janimine'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Pramine'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Presamine'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Tofranil'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Tofranil-PM'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Imipramine'},\n", " {u'syn_type': u'INN', u'synonyms': u'Imipramine'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': True,\n", " u'polymer_flag': False,\n", " u'pref_name': u'IMIPRAMINE',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': u'-pramine',\n", " u'usan_stem_definition': u'antidepressants (imipramine type)',\n", " u'usan_substem': None,\n", " u'usan_year': None},\n", " {u'atc_classifications': [u'C03BA11'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'0',\n", " u'chebi_par_id': 5893,\n", " u'chirality': u'0',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1983,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Antihypertensive; Diuretic',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL406',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL406',\n", " u'parent_chembl_id': u'CHEMBL406'},\n", " u'molecule_properties': {u'acd_logd': u'1.96',\n", " u'acd_logp': u'1.96',\n", " u'acd_most_apka': u'9.35',\n", " u'acd_most_bpka': u'1.87',\n", " u'alogp': u'2.66',\n", " u'aromatic_rings': 2,\n", " u'full_molformula': u'C16H16ClN3O3S',\n", " u'full_mwt': u'365.83',\n", " u'hba': 4,\n", " u'hbd': 2,\n", " u'heavy_atoms': 24,\n", " u'molecular_species': u'NEUTRAL',\n", " u'mw_freebase': u'365.83',\n", " u'mw_monoisotopic': u'365.0601',\n", " u'num_alerts': 0,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'100.88',\n", " u'qed_weighted': u'0.87',\n", " u'ro3_pass': u'N',\n", " u'rtb': 3},\n", " u'molecule_structures': {u'canonical_smiles': u'CC1Cc2ccccc2N1NC(=O)c3ccc(Cl)c(c3)S(=O)(=O)N',\n", " u'standard_inchi': u'InChI=1S/C16H16ClN3O3S/c1-10-8-11-4-2-3-5-14(11)20(10)19-16(21)12-6-7-13(17)15(9-12)24(18,22)23/h2-7,9-10H,8H2,1H3,(H,19,21)(H2,18,22,23)',\n", " u'standard_inchi_key': u'NDDAHWYSQHTHNT-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'TRADE_NAME',\n", " u'synonyms': u'Indapamide'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Lozol'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Indapamide'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Indapamide'},\n", " {u'syn_type': u'INN', u'synonyms': u'Indapamide'},\n", " {u'syn_type': u'JAN', u'synonyms': u'Indapamide'},\n", " {u'syn_type': u'USP', u'synonyms': u'Indapamide'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Indapamide'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': False,\n", " u'polymer_flag': False,\n", " u'pref_name': u'INDAPAMIDE',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': u'-pamide',\n", " u'usan_stem_definition': u'diuretics (sulfamoylbenzoic acid derivatives)',\n", " u'usan_substem': None,\n", " u'usan_year': 1979},\n", " {u'atc_classifications': [u'V03AB25'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'1',\n", " u'chebi_par_id': 5103,\n", " u'chirality': u'2',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1991,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Antagonist (to benzodiazepine)',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL407',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL407',\n", " u'parent_chembl_id': u'CHEMBL407'},\n", " u'molecule_properties': {u'acd_logd': u'2.15',\n", " u'acd_logp': u'2.15',\n", " u'acd_most_apka': None,\n", " u'acd_most_bpka': u'0.86',\n", " u'alogp': u'1.58',\n", " u'aromatic_rings': 2,\n", " u'full_molformula': u'C15H14FN3O3',\n", " u'full_mwt': u'303.29',\n", " u'hba': 4,\n", " u'hbd': 0,\n", " u'heavy_atoms': 22,\n", " u'molecular_species': u'NEUTRAL',\n", " u'mw_freebase': u'303.29',\n", " u'mw_monoisotopic': u'303.1019',\n", " u'num_alerts': 1,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'64.43',\n", " u'qed_weighted': u'0.81',\n", " u'ro3_pass': u'N',\n", " u'rtb': 3},\n", " u'molecule_structures': {u'canonical_smiles': u'CCOC(=O)c1ncn2c1CN(C)C(=O)c3cc(F)ccc23',\n", " u'standard_inchi': u'InChI=1S/C15H14FN3O3/c1-3-22-15(21)13-12-7-18(2)14(20)10-6-9(16)4-5-11(10)19(12)8-17-13/h4-6,8H,3,7H2,1-2H3',\n", " u'standard_inchi_key': u'OFBIFZUFASYYRE-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'TRADE_NAME',\n", " u'synonyms': u'Flumazenil'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'Ro-151788'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Romazicon'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Anexate'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Flumazepil'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Mazicon'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Flumazenil'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Flumazenil'},\n", " {u'syn_type': u'INN', u'synonyms': u'Flumazenil'},\n", " {u'syn_type': u'USP', u'synonyms': u'Flumazenil'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Flumazenil'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Flumazepil'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'Ro-151788000'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': False,\n", " u'parenteral': True,\n", " u'polymer_flag': False,\n", " u'pref_name': u'FLUMAZENIL',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': u'-azenil',\n", " u'usan_stem_definition': u'benzodiazepine receptor agonists/antagonists (benzodiazepine derivatives)',\n", " u'usan_substem': None,\n", " u'usan_year': 1987},\n", " {u'atc_classifications': [u'A10BG01'],\n", " u'availability_type': u'0',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'0',\n", " u'chebi_par_id': 9753,\n", " u'chirality': u'0',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1997,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Antidiabetic',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL408',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL408',\n", " u'parent_chembl_id': u'CHEMBL408'},\n", " u'molecule_properties': {u'acd_logd': u'3.65',\n", " u'acd_logp': u'4.69',\n", " u'acd_most_apka': u'6.35',\n", " u'acd_most_bpka': None,\n", " u'alogp': u'5.68',\n", " u'aromatic_rings': 2,\n", " u'full_molformula': u'C24H27NO5S',\n", " u'full_mwt': u'441.54',\n", " u'hba': 6,\n", " u'hbd': 2,\n", " u'heavy_atoms': 31,\n", " u'molecular_species': u'ACID',\n", " u'mw_freebase': u'441.54',\n", " u'mw_monoisotopic': u'441.1610',\n", " u'num_alerts': 0,\n", " u'num_ro5_violations': 1,\n", " u'psa': u'110.16',\n", " u'qed_weighted': u'0.62',\n", " u'ro3_pass': u'N',\n", " u'rtb': 5},\n", " u'molecule_structures': {u'canonical_smiles': u'Cc1c(C)c2OC(C)(COc3ccc(CC4SC(=O)NC4=O)cc3)CCc2c(C)c1O',\n", " u'standard_inchi': u'InChI=1S/C24H27NO5S/c1-13-14(2)21-18(15(3)20(13)26)9-10-24(4,30-21)12-29-17-7-5-16(6-8-17)11-19-22(27)25-23(28)31-19/h5-8,19,26H,9-12H2,1-4H3,(H,25,27,28)',\n", " u'standard_inchi_key': u'GXPHKUHSUJUWKP-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'RESEARCH_CODE',\n", " u'synonyms': u'GR-92132X'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Prelay'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Rezulin'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Rezulin'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'CI-991'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'CS-045'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'Gr92132X'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Troglitazone'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Troglitazone'},\n", " {u'syn_type': u'INN', u'synonyms': u'Troglitazone'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Troglitazone'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': False,\n", " u'polymer_flag': False,\n", " u'pref_name': u'TROGLITAZONE',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': u'-glitazone',\n", " u'usan_stem_definition': u'PPST agonists (thiazolidene derivatives)',\n", " u'usan_substem': None,\n", " u'usan_year': 1995},\n", " {u'atc_classifications': [u'L02BB03'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'0',\n", " u'chebi_par_id': None,\n", " u'chirality': u'0',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1995,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Antineoplastic',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL409',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL409',\n", " u'parent_chembl_id': u'CHEMBL409'},\n", " u'molecule_properties': {u'acd_logd': u'4.14',\n", " u'acd_logp': u'4.14',\n", " u'acd_most_apka': u'11.49',\n", " u'acd_most_bpka': None,\n", " u'alogp': u'2.93',\n", " u'aromatic_rings': 2,\n", " u'full_molformula': u'C18H14F4N2O4S',\n", " u'full_mwt': u'430.37',\n", " u'hba': 5,\n", " u'hbd': 2,\n", " u'heavy_atoms': 29,\n", " u'molecular_species': u'NEUTRAL',\n", " u'mw_freebase': u'430.37',\n", " u'mw_monoisotopic': u'430.0610',\n", " u'num_alerts': 2,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'115.64',\n", " u'qed_weighted': u'0.54',\n", " u'ro3_pass': u'N',\n", " u'rtb': 6},\n", " u'molecule_structures': {u'canonical_smiles': u'CC(O)(CS(=O)(=O)c1ccc(F)cc1)C(=O)Nc2ccc(C#N)c(c2)C(F)(F)F',\n", " u'standard_inchi': u'InChI=1S/C18H14F4N2O4S/c1-17(26,10-29(27,28)14-6-3-12(19)4-7-14)16(25)24-13-5-2-11(9-23)15(8-13)18(20,21)22/h2-8,26H,10H2,1H3,(H,24,25)',\n", " u'standard_inchi_key': u'LKJPYSCBVHEWIU-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'TRADE_NAME',\n", " u'synonyms': u'Casodex'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Cosudex'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Calutide'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Kalumid'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Casodex'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Bicalutamide'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'ICI-176334'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Bicalutamide'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Bicalutamide'},\n", " {u'syn_type': u'INN', u'synonyms': u'Bicalutamide'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Bicalutamide'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': False,\n", " u'polymer_flag': False,\n", " u'pref_name': u'BICALUTAMIDE',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': u'-lutamide',\n", " u'usan_stem_definition': u'non-steroid antiandrogens',\n", " u'usan_substem': None,\n", " u'usan_year': 1994},\n", " {u'atc_classifications': [u'N05BA01'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'0',\n", " u'chebi_par_id': 49575,\n", " u'chirality': u'2',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1963,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Sedative-Hypnotic',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL12',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL12',\n", " u'parent_chembl_id': u'CHEMBL12'},\n", " u'molecule_properties': {u'acd_logd': u'2.80',\n", " u'acd_logp': u'2.80',\n", " u'acd_most_apka': None,\n", " u'acd_most_bpka': u'3.40',\n", " u'alogp': u'3.17',\n", " u'aromatic_rings': 2,\n", " u'full_molformula': u'C16H13ClN2O',\n", " u'full_mwt': u'284.74',\n", " u'hba': 2,\n", " u'hbd': 0,\n", " u'heavy_atoms': 20,\n", " u'molecular_species': u'NEUTRAL',\n", " u'mw_freebase': u'284.74',\n", " u'mw_monoisotopic': u'284.0716',\n", " u'num_alerts': 0,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'32.67',\n", " u'qed_weighted': u'0.81',\n", " u'ro3_pass': u'N',\n", " u'rtb': 1},\n", " u'molecule_structures': {u'canonical_smiles': u'CN1C(=O)CN=C(c2ccccc2)c3cc(Cl)ccc13',\n", " u'standard_inchi': u'InChI=1S/C16H13ClN2O/c1-19-14-8-7-12(17)9-13(14)16(18-10-15(19)20)11-5-3-2-4-6-11/h2-9H,10H2,1H3',\n", " u'standard_inchi_key': u'AAOVKJBEBIDNHE-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'TRADE_NAME',\n", " u'synonyms': u'Diastat'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Diastat Acudial'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Diazepam'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Diazepam Intensol'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Dizac'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Q-Pam'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Valium'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Valrelease'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Apozepam'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'E-Pam'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Paxel'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Relanium'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Scriptopam'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Serenack'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Stesolid'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Tranimul'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Vivol'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'LA-III'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'WY-3467'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Diazepam'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Diazepam'},\n", " {u'syn_type': u'INN', u'synonyms': u'Diazepam'},\n", " {u'syn_type': u'JAN', u'synonyms': u'Diazepam'},\n", " {u'syn_type': u'USP', u'synonyms': u'Diazepam'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Diazepam'},\n", " {u'syn_type': u'RESEARCH_CODE', u'synonyms': u'Ro-52807'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': True,\n", " u'polymer_flag': False,\n", " u'pref_name': u'DIAZEPAM',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': True,\n", " u'usan_stem': u'-azepam',\n", " u'usan_stem_definition': u'antianxiety agents (diazepam type)',\n", " u'usan_substem': None,\n", " u'usan_year': 1963},\n", " {u'atc_classifications': [u'C07AB02', u'C07AB52'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'1',\n", " u'chebi_par_id': 6904,\n", " u'chirality': u'0',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1978,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Anti-Adrenergic (beta-receptor),Antihypertensive,Antihypertensive; Anti-Anginal',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL13',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL13',\n", " u'parent_chembl_id': u'CHEMBL13'},\n", " u'molecule_properties': {u'acd_logd': u'-0.47',\n", " u'acd_logp': u'1.63',\n", " u'acd_most_apka': u'13.89',\n", " u'acd_most_bpka': u'9.43',\n", " u'alogp': u'1.76',\n", " u'aromatic_rings': 1,\n", " u'full_molformula': u'C15H25NO3',\n", " u'full_mwt': u'267.36',\n", " u'hba': 4,\n", " u'hbd': 2,\n", " u'heavy_atoms': 19,\n", " u'molecular_species': u'BASE',\n", " u'mw_freebase': u'267.36',\n", " u'mw_monoisotopic': u'267.1834',\n", " u'num_alerts': 0,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'50.72',\n", " u'qed_weighted': u'0.72',\n", " u'ro3_pass': u'N',\n", " u'rtb': 9},\n", " u'molecule_structures': {u'canonical_smiles': u'COCCc1ccc(OCC(O)CNC(C)C)cc1',\n", " u'standard_inchi': u'InChI=1S/C15H25NO3/c1-12(2)16-10-14(17)11-19-15-6-4-13(5-7-15)8-9-18-3/h4-7,12,14,16-17H,8-11H2,1-3H3',\n", " u'standard_inchi_key': u'IUBSYMUCCVWXPE-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'OTHER',\n", " u'synonyms': u'Lopressidone'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Metoprolol'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Toprol-XL'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Metoprolol'},\n", " {u'syn_type': u'INN', u'synonyms': u'Metoprolol'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Metoprolol'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': True,\n", " u'polymer_flag': False,\n", " u'pref_name': u'METOPROLOL',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': u'-olol',\n", " u'usan_stem_definition': u'beta-blockers (propranolol type)',\n", " u'usan_substem': None,\n", " u'usan_year': 1976},\n", " {u'atc_classifications': [u'G03CB02', u'G03CC05', u'L02AA01'],\n", " u'availability_type': u'0',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'0',\n", " u'chebi_par_id': 41922,\n", " u'chirality': u'2',\n", " u'dosed_ingredient': True,\n", " u'first_approval': 1973,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Estrogen',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL411',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL411',\n", " u'parent_chembl_id': u'CHEMBL411'},\n", " u'molecule_properties': {u'acd_logd': u'5.33',\n", " u'acd_logp': u'5.33',\n", " u'acd_most_apka': u'10.19',\n", " u'acd_most_bpka': None,\n", " u'alogp': u'5.14',\n", " u'aromatic_rings': 2,\n", " u'full_molformula': u'C18H20O2',\n", " u'full_mwt': u'268.35',\n", " u'hba': 2,\n", " u'hbd': 2,\n", " u'heavy_atoms': 20,\n", " u'molecular_species': u'NEUTRAL',\n", " u'mw_freebase': u'268.35',\n", " u'mw_monoisotopic': u'268.1463',\n", " u'num_alerts': 1,\n", " u'num_ro5_violations': 1,\n", " u'psa': u'40.46',\n", " u'qed_weighted': u'0.75',\n", " u'ro3_pass': u'N',\n", " u'rtb': 4},\n", " u'molecule_structures': {u'canonical_smiles': u'CC\\\\C(=C(\\\\CC)/c1ccc(O)cc1)\\\\c2ccc(O)cc2',\n", " u'standard_inchi': u'InChI=1S/C18H20O2/c1-3-17(13-5-9-15(19)10-6-13)18(4-2)14-7-11-16(20)12-8-14/h5-12,19-20H,3-4H2,1-2H3/b18-17+',\n", " u'standard_inchi_key': u'RGLYKWWBQGJZGM-ISLYRVAYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'TRADE_NAME',\n", " u'synonyms': u'Diethylstilbestrol'},\n", " {u'syn_type': u'USAN', u'synonyms': u'Diethylstilbestrol'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Stilbestrol'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Stilbetin'},\n", " {u'syn_type': u'TRADE_NAME', u'synonyms': u'Stilboesterol'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Cyren A'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Fonatol'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Estrobene'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Palestrol'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Synestrin'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Estromenin'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Estrogenine'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Stilbestrol'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Synthestrin'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Stilboestrol'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'New-Estranol 1'},\n", " {u'syn_type': u'OTHER', u'synonyms': u'Stilbestroform'},\n", " {u'syn_type': u'BAN', u'synonyms': u'Diethylstilbestrol'},\n", " {u'syn_type': u'FDA', u'synonyms': u'Diethylstilbestrol'},\n", " {u'syn_type': u'INN', u'synonyms': u'Diethylstilbestrol'},\n", " {u'syn_type': u'USP', u'synonyms': u'Diethylstilbestrol'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': True,\n", " u'polymer_flag': False,\n", " u'pref_name': u'DIETHYLSTILBESTROL',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': True,\n", " u'usan_stem': u'-estr-',\n", " u'usan_stem_definition': u'estrogens',\n", " u'usan_substem': None,\n", " u'usan_year': None},\n", " {u'atc_classifications': [u'C02BB01'],\n", " u'availability_type': u'1',\n", " u'biotherapeutic': None,\n", " u'black_box_warning': u'0',\n", " u'chebi_par_id': 6706,\n", " u'chirality': u'0',\n", " u'dosed_ingredient': False,\n", " u'first_approval': 1956,\n", " u'first_in_class': u'0',\n", " u'helm_notation': None,\n", " u'indication_class': u'Antihypertensive',\n", " u'inorganic_flag': u'0',\n", " u'max_phase': 4,\n", " u'molecule_chembl_id': u'CHEMBL267936',\n", " u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL267936',\n", " u'parent_chembl_id': u'CHEMBL267936'},\n", " u'molecule_properties': {u'acd_logd': u'-0.62',\n", " u'acd_logp': u'0.57',\n", " u'acd_most_apka': None,\n", " u'acd_most_bpka': u'8.00',\n", " u'alogp': u'2.18',\n", " u'aromatic_rings': 0,\n", " u'full_molformula': u'C11H21N',\n", " u'full_mwt': u'167.29',\n", " u'hba': 1,\n", " u'hbd': 1,\n", " u'heavy_atoms': 12,\n", " u'molecular_species': u'NEUTRAL',\n", " u'mw_freebase': u'167.29',\n", " u'mw_monoisotopic': u'167.1674',\n", " u'num_alerts': 0,\n", " u'num_ro5_violations': 0,\n", " u'psa': u'12.03',\n", " u'qed_weighted': u'0.63',\n", " u'ro3_pass': u'Y',\n", " u'rtb': 1},\n", " u'molecule_structures': {u'canonical_smiles': u'CNC1(C)C2CCC(C2)C1(C)C',\n", " u'standard_inchi': u'InChI=1S/C11H21N/c1-10(2)8-5-6-9(7-8)11(10,3)12-4/h8-9,12H,5-7H2,1-4H3',\n", " u'standard_inchi_key': u'IMYZQPCYWPFTAG-UHFFFAOYSA-N'},\n", " u'molecule_synonyms': [{u'syn_type': u'BAN', u'synonyms': u'Mecamylamine'},\n", " {u'syn_type': u'INN', u'synonyms': u'Mecamylamine'}],\n", " u'molecule_type': u'Small molecule',\n", " u'natural_product': u'0',\n", " u'oral': True,\n", " u'parenteral': False,\n", " u'polymer_flag': False,\n", " u'pref_name': u'MECAMYLAMINE',\n", " u'prodrug': u'0',\n", " u'structure_type': u'MOL',\n", " u'therapeutic_flag': True,\n", " u'topical': False,\n", " u'usan_stem': None,\n", " u'usan_stem_definition': None,\n", " u'usan_substem': None,\n", " u'usan_year': None}],\n", " u'page_meta': {u'limit': 20,\n", " u'next': u'/chemblws/molecule.json?max_phase=4&limit=20&offset=20',\n", " u'offset': 0,\n", " u'previous': None,\n", " u'total_count': 2879}}" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's examine what data contains the python dict:\n", "url_approved_drugs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Page structure\n", "\n", "The dictionary contains two top-level keys:\n", "\n", "1. `molecules` array\n", "2. `page_meta` dictionary\n", "\n", "This means that by requesting data from the url-endpoint we are not getting the whole result set but a single page.\n", "The page consists of a single portion of data (`molecules` array) and some meta information about the page and whole result set (`page_meta` dictionary)." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "20" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The default size of single page is 20 results:\n", "len(url_approved_drugs['molecules'])" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://localhost/chemblws/molecule.json?max_phase=4&limit=200\n", "200\n" ] } ], "source": [ "# But it can be extended up to 1000 results by providing `limit` argument:\n", "url = url_stem + \"/molecule.json?max_phase=4&limit=200\"\n", "bigger_page = requests.get(url).json()\n", "\n", "print url\n", "print len(bigger_page['molecules'])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{u'limit': 20,\n", " u'next': u'/chemblws/molecule.json?max_phase=4&limit=20&offset=20',\n", " u'offset': 0,\n", " u'previous': None,\n", " u'total_count': 2879}" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Let's see what data is provided in `page-meta` dictionary:\n", "url_approved_drugs['page_meta']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It gives following information:\n", "1. `limit` - current size of the page (the actual amount of data can be smaller if the whole result set is smaller than page size or we are looking at the last page)\n", "2. `offset` - the difference between first element in the whole result set and the first element on current page \n", "3. `next` - url poiting to the next page (if it exists)\n", "4. `previous` - url pointing to the previous page (if it exists)\n", "5. `total_count` - number of elements in the whole result set\n", "\n", "This means that in order to get the whole result set we need to loop through the pages:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2879\n", "True\n" ] } ], "source": [ "# Getting all approved drugs using url endpoint\n", "localhost = \"http://localhost/\"\n", "url_approved_drugs = requests.get(localhost + \"chemblws/molecule.json?max_phase=4&limit=1000\").json()\n", "results = url_approved_drugs['molecules']\n", "while url_approved_drugs['page_meta']['next']:\n", " url_approved_drugs = requests.get(localhost + url_approved_drugs['page_meta']['next']).json()\n", " results += url_approved_drugs['molecules']\n", "print len(results)\n", "print len(results) == url_approved_drugs['page_meta']['total_count']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With the client-generated results, we no longer have to worry about pagination:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2879\n", "{u'max_phase': 4, u'usan_stem': u'-ifen(e)', u'parenteral': False, u'dosed_ingredient': False, u'molecule_type': u'Small molecule', u'biotherapeutic': None, u'chebi_par_id': 41774, u'first_approval': 1977, u'atc_classifications': [u'L02BA01'], u'prodrug': u'1', u'molecule_structures': {u'standard_inchi_key': u'NKANXQFJJICGDU-QPLCGJKRSA-N', u'canonical_smiles': u'CC\\\\C(=C(/c1ccccc1)\\\\c2ccc(OCCN(C)C)cc2)\\\\c3ccccc3', u'standard_inchi': u'InChI=1S/C26H29NO/c1-4-25(21-11-7-5-8-12-21)26(22-13-9-6-10-14-22)23-15-17-24(18-16-23)28-20-19-27(2)3/h5-18H,4,19-20H2,1-3H3/b26-25-'}, u'chirality': u'2', u'usan_substem': None, u'pref_name': u'TAMOXIFEN', u'polymer_flag': False, u'molecule_chembl_id': u'CHEMBL83', u'therapeutic_flag': True, u'molecule_properties': {u'num_ro5_violations': 1, u'mw_freebase': u'371.51', u'psa': u'12.47', u'full_mwt': u'371.51', u'ro3_pass': u'N', u'num_alerts': 1, u'acd_logd': u'2.79', u'full_molformula': u'C26H29NO', u'hba': 2, u'molecular_species': u'NEUTRAL', u'mw_monoisotopic': u'371.2249', u'heavy_atoms': 28, u'aromatic_rings': 3, u'alogp': u'6.32', u'acd_most_apka': u'9.52', u'qed_weighted': u'0.43', u'acd_most_bpka': u'8.29', u'hbd': 0, u'acd_logp': u'3.72', u'rtb': 8}, u'structure_type': u'MOL', u'helm_notation': None, u'usan_stem_definition': u'antiestrogens of the clomifene and tamoxifen groups', u'natural_product': u'0', u'black_box_warning': u'1', u'availability_type': u'1', u'inorganic_flag': u'0', u'molecule_synonyms': [{u'synonyms': u'ICI-46474', u'syn_type': u'RESEARCH_CODE'}, {u'synonyms': u'Nolvadex', u'syn_type': u'OTHER'}, {u'synonyms': u'Soltamox', u'syn_type': u'OTHER'}, {u'synonyms': u'Tamoxifen', u'syn_type': u'FDA'}, {u'synonyms': u'Tamoxifen', u'syn_type': u'BAN'}, {u'synonyms': u'Tamoxifen', u'syn_type': u'INN'}], u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL83', u'parent_chembl_id': u'CHEMBL83'}, u'indication_class': u'Anti-Estrogen', u'usan_year': 1976, u'first_in_class': u'0', u'topical': False, u'oral': True}\n", "[{u'max_phase': 4, u'usan_stem': u'-azosin', u'parenteral': False, u'dosed_ingredient': False, u'molecule_type': u'Small molecule', u'biotherapeutic': None, u'chebi_par_id': 8364, u'first_approval': 1976, u'atc_classifications': [u'C02CA01'], u'prodrug': u'0', u'molecule_structures': {u'standard_inchi_key': u'IENZQIKPVFGBNW-UHFFFAOYSA-N', u'canonical_smiles': u'COc1cc2nc(nc(N)c2cc1OC)N3CCN(CC3)C(=O)c4occc4', u'standard_inchi': u'InChI=1S/C19H21N5O4/c1-26-15-10-12-13(11-16(15)27-2)21-19(22-17(12)20)24-7-5-23(6-8-24)18(25)14-4-3-9-28-14/h3-4,9-11H,5-8H2,1-2H3,(H2,20,21,22)'}, u'chirality': u'2', u'usan_substem': None, u'pref_name': u'PRAZOSIN', u'polymer_flag': False, u'molecule_chembl_id': u'CHEMBL2', u'therapeutic_flag': True, u'molecule_properties': {u'num_ro5_violations': 0, u'mw_freebase': u'383.40', u'psa': u'106.94', u'full_mwt': u'383.40', u'ro3_pass': u'N', u'num_alerts': 0, u'acd_logd': u'2.09', u'full_molformula': u'C19H21N5O4', u'hba': 7, u'molecular_species': u'NEUTRAL', u'mw_monoisotopic': u'383.1594', u'heavy_atoms': 28, u'aromatic_rings': 3, u'alogp': u'2.11', u'acd_most_apka': None, u'qed_weighted': u'0.74', u'acd_most_bpka': u'6.52', u'hbd': 1, u'acd_logp': u'2.14', u'rtb': 4}, u'structure_type': u'MOL', u'helm_notation': None, u'usan_stem_definition': u'antihypertensives (prazosin type)', u'natural_product': u'0', u'black_box_warning': u'0', u'availability_type': u'1', u'inorganic_flag': u'0', u'molecule_synonyms': [{u'synonyms': u'CP-12299', u'syn_type': u'RESEARCH_CODE'}, {u'synonyms': u'Prazosin', u'syn_type': u'FDA'}, {u'synonyms': u'Prazosin', u'syn_type': u'BAN'}, {u'synonyms': u'Prazosin', u'syn_type': u'INN'}], u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL2', u'parent_chembl_id': u'CHEMBL2'}, u'indication_class': u'Antihypertensive', u'usan_year': 1968, u'first_in_class': u'0', u'topical': False, u'oral': True}, {u'max_phase': 4, u'usan_stem': None, u'parenteral': False, u'dosed_ingredient': True, u'molecule_type': u'Small molecule', u'biotherapeutic': None, u'chebi_par_id': 17688, u'first_approval': 1984, u'atc_classifications': [u'N07BA01'], u'prodrug': u'0', u'molecule_structures': {u'standard_inchi_key': u'SNICXCGAKADSCV-JTQLQIEISA-N', u'canonical_smiles': u'CN1CCC[C@H]1c2cccnc2', u'standard_inchi': u'InChI=1S/C10H14N2/c1-12-7-3-5-10(12)9-4-2-6-11-8-9/h2,4,6,8,10H,3,5,7H2,1H3/t10-/m0/s1'}, u'chirality': u'1', u'usan_substem': None, u'pref_name': u'NICOTINE', u'polymer_flag': True, u'molecule_chembl_id': u'CHEMBL3', u'therapeutic_flag': True, u'molecule_properties': {u'num_ro5_violations': 0, u'mw_freebase': u'162.23', u'psa': u'16.13', u'full_mwt': u'162.23', u'ro3_pass': u'Y', u'num_alerts': 0, u'acd_logd': u'-0.62', u'full_molformula': u'C10H14N2', u'hba': 2, u'molecular_species': u'NEUTRAL', u'mw_monoisotopic': u'162.1157', u'heavy_atoms': 12, u'aromatic_rings': 1, u'alogp': u'1.24', u'acd_most_apka': None, u'qed_weighted': u'0.62', u'acd_most_bpka': u'8.00', u'hbd': 0, u'acd_logp': u'0.57', u'rtb': 1}, u'structure_type': u'MOL', u'helm_notation': None, u'usan_stem_definition': None, u'natural_product': u'1', u'black_box_warning': u'0', u'availability_type': u'2', u'inorganic_flag': u'0', u'molecule_synonyms': [{u'synonyms': u'Habitrol', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'Nicoderm CQ', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'Nicotine', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'Nicotine', u'syn_type': u'USAN'}, {u'synonyms': u'Nicotrol', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'Prostep', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'Nicotrol Inhaler', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'Nicotrol NS', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'Nicoderm', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'Nicotine', u'syn_type': u'MERCK_INDEX'}, {u'synonyms': u'Nicotine', u'syn_type': u'FDA'}, {u'synonyms': u'Nicotine', u'syn_type': u'USP'}], u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL3', u'parent_chembl_id': u'CHEMBL3'}, u'indication_class': u'Smoking Cessation Adjunct', u'usan_year': 1985, u'first_in_class': u'0', u'topical': True, u'oral': True}, {u'max_phase': 4, u'usan_stem': u'-oxacin', u'parenteral': True, u'dosed_ingredient': True, u'molecule_type': u'Small molecule', u'biotherapeutic': None, u'chebi_par_id': 7731, u'first_approval': 1990, u'atc_classifications': [u'S02AA16', u'J01MA01', u'S01AE01'], u'prodrug': u'0', u'molecule_structures': {u'standard_inchi_key': u'GSDSWSVVBLHKDQ-UHFFFAOYSA-N', u'canonical_smiles': u'CC1COc2c(N3CCN(C)CC3)c(F)cc4C(=O)C(=CN1c24)C(=O)O', u'standard_inchi': u'InChI=1S/C18H20FN3O4/c1-10-9-26-17-14-11(16(23)12(18(24)25)8-22(10)14)7-13(19)15(17)21-5-3-20(2)4-6-21/h7-8,10H,3-6,9H2,1-2H3,(H,24,25)'}, u'chirality': u'0', u'usan_substem': None, u'pref_name': u'OFLOXACIN', u'polymer_flag': False, u'molecule_chembl_id': u'CHEMBL4', u'therapeutic_flag': True, u'molecule_properties': {u'num_ro5_violations': 0, u'mw_freebase': u'361.37', u'psa': u'73.31', u'full_mwt': u'361.37', u'ro3_pass': u'N', u'num_alerts': 1, u'acd_logd': u'-0.39', u'full_molformula': u'C18H20FN3O4', u'hba': 7, u'molecular_species': u'ACID', u'mw_monoisotopic': u'361.1438', u'heavy_atoms': 26, u'aromatic_rings': 1, u'alogp': u'-1.37', u'acd_most_apka': u'5.19', u'qed_weighted': u'0.65', u'acd_most_bpka': u'7.37', u'hbd': 1, u'acd_logp': u'1.86', u'rtb': 2}, u'structure_type': u'MOL', u'helm_notation': None, u'usan_stem_definition': u'antibacterials (quinolone derivatives)', u'natural_product': u'0', u'black_box_warning': u'1', u'availability_type': u'1', u'inorganic_flag': u'0', u'molecule_synonyms': [{u'synonyms': u'Floxin', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'Floxin Otic', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'HOE-280', u'syn_type': u'RESEARCH_CODE'}, {u'synonyms': u'Ocuflox', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'Ofloxacin', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'Visiren', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'Tarivid', u'syn_type': u'TRADE_NAME'}, {u'synonyms': u'DL-8280', u'syn_type': u'RESEARCH_CODE'}, {u'synonyms': u'Ofloxacin', u'syn_type': u'BAN'}, {u'synonyms': u'Ofloxacin', u'syn_type': u'FDA'}, {u'synonyms': u'Ofloxacin', u'syn_type': u'INN'}, {u'synonyms': u'Ofloxacin', u'syn_type': u'JAN'}, {u'synonyms': u'Ofloxacin', u'syn_type': u'USP'}, {u'synonyms': u'Ofloxacin', u'syn_type': u'USAN'}], u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL4', u'parent_chembl_id': u'CHEMBL4'}, u'indication_class': u'Antibacterial', u'usan_year': 1984, u'first_in_class': u'0', u'topical': True, u'oral': True}]\n", "2460\n" ] } ], "source": [ "# The QuerySet object returned by the client is a lazily-evaluated iterator\n", "# This means that it's ready to use and it will try to reduce the amount of server requests\n", "# All results are cached as well so they are fetched from server only once.\n", "approved_drugs = molecule.filter(max_phase=4)\n", "\n", "# Getting the lenght of the whole result set is easy:\n", "print len(approved_drugs)\n", "\n", "# So is getting a single element:\n", "print approved_drugs[123]\n", "\n", "# Or a chunk of elements:\n", "print approved_drugs[2:5]\n", "\n", "# Or using in the loops or list comprehensions:\n", "drug_smiles = [drug['molecule_structures']['canonical_smiles'] for drug in approved_drugs if drug['molecule_structures']]\n", "print len(drug_smiles)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Ordering results\n", "Similar to filtering, it's also possible to order the result set, there is a parameter called `order_by` that is reposnsible for ordering:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "u'AMMONIA N 13'" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sort approved drugs by molecular weight ascending (from lightest to heaviest) and get the first (lightest) element\n", "lightest_drug = molecule.filter(max_phase=4).order_by('molecule_properties__mw_freebase')[0]\n", "lightest_drug['pref_name']" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "u'INSULIN LISPRO PROTAMINE RECOMBINANT'" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sort approved drugs by molecular weight descending (from heaviest to lightest) and get the first (heaviest) element\n", "heaviest_drug = molecule.filter(max_phase=4).order_by('-molecule_properties__mw_freebase')[0]\n", "heaviest_drug['pref_name']" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://localhost/chemblws/molecule.json?max_phase=4&order_by=molecule_properties__mw_freebase\n", "AMMONIA N 13\n", "http://localhost/chemblws/molecule.json?max_phase=4&order_by=-molecule_properties__mw_freebase\n", "INSULIN LISPRO PROTAMINE RECOMBINANT\n" ] } ], "source": [ "# Do the same using url endpoint\n", "url_1 = url_stem + \"/molecule.json?max_phase=4&order_by=molecule_properties__mw_freebase\"\n", "lightest_drug = requests.get(url_1).json()['molecules'][0]\n", "print url_1\n", "print lightest_drug['pref_name']\n", "\n", "url_2 = url_stem + \"/molecule.json?max_phase=4&order_by=-molecule_properties__mw_freebase\"\n", "heaviest_drug = requests.get(url_2).json()['molecules'][0]\n", "print url_2\n", "print heaviest_drug['pref_name']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Filtering molecules using SMILES\n", "It is possible to filter molecules by SMILES" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "1\n", "1\n", "True\n", "True\n" ] } ], "source": [ "# Atorvastatin...\n", "smiles = \"CC(C)c1c(C(=O)Nc2ccccc2)c(c3ccccc3)c(c4ccc(F)cc4)n1CC[C@@H](O)C[C@@H](O)CC(=O)O\"\n", "\n", "# By default, the type of search used is 'exact search' which means that only compounds with exacly same SMILES string will be picked:\n", "result = molecule.filter(molecule_structures__canonical_smiles=smiles)\n", "print len(result)\n", "\n", "# This is quivalent of:\n", "result1 = molecule.filter(molecule_structures__canonical_smiles__exact=smiles)\n", "print len(result1)\n", "\n", "# For convenience, we have a shortcut call:\n", "result2 = molecule.filter(smiles=smiles)\n", "print len(result2)\n", "\n", "# Checking if they are all the same: \n", "print result[0]['pref_name'] == result1[0]['pref_name'] == result2[0]['pref_name']\n", "\n", "# And because SMILES string are unique in ChEMBL, this is similar to:\n", "result3 = molecule.get(smiles)\n", "print result[0]['pref_name'] == result3['pref_name']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are however different filtering operators that can be applied to SMILES; the most important one is called `flexmatch`, which will return all structures described by given SMILES string even if this is non-canonical SMILES." ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "CHEMBL1487 : CC(C)c1c(C(=O)Nc2ccccc2)c(c3ccccc3)c(c4ccc(F)cc4)n1CC[C@@H](O)C[C@@H](O)CC(=O)O\n" ] } ], "source": [ "# Flexmatch will look for structures that match given SMILES, ignoring stereo:\n", "records = molecule.filter(molecule_structures__canonical_smiles__flexmatch=smiles)\n", "print len(records)\n", "\n", "for record in records:\n", " print(\"{:15s} : {}\".format(record[\"molecule_chembl_id\"], record['molecule_structures']['canonical_smiles']))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Unlike with the exact string match, it is possible to retrieve multiple records when a SMILES is used for the `flexmatch` lookup (_i.e._ it is potentially one-to-many instead of one-to-one as the ID lookups are). This is due to the nature of `flexmatch`.\n", "\n", "In our case two structures are returned, CHEMBL1487 (Atorvastatin) and CHEMBL1207181, which is the same structure as the former but with one of the two stereocentres undefined." ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://localhost/chemblws/molecule.json?molecule_structures__canonical_smiles=CC%28C%29c1c%28C%28%3DO%29Nc2ccccc2%29c%28c3ccccc3%29c%28c4ccc%28F%29cc4%29n1CC%5BC%40%40H%5D%28O%29C%5BC%40%40H%5D%28O%29CC%28%3DO%29O\n", "1\n", "http://localhost/chemblws/molecule.json?molecule_structures__canonical_smiles__exact=CC%28C%29c1c%28C%28%3DO%29Nc2ccccc2%29c%28c3ccccc3%29c%28c4ccc%28F%29cc4%29n1CC%5BC%40%40H%5D%28O%29C%5BC%40%40H%5D%28O%29CC%28%3DO%29O\n", "1\n", "http://localhost/chemblws/molecule.json?smiles=CC%28C%29c1c%28C%28%3DO%29Nc2ccccc2%29c%28c3ccccc3%29c%28c4ccc%28F%29cc4%29n1CC%5BC%40%40H%5D%28O%29C%5BC%40%40H%5D%28O%29CC%28%3DO%29O\n", "1\n", "http://localhost/chemblws/molecule.json?molecule_structures__canonical_smiles__flexmatch=CC%28C%29c1c%28C%28%3DO%29Nc2ccccc2%29c%28c3ccccc3%29c%28c4ccc%28F%29cc4%29n1CC%5BC%40%40H%5D%28O%29C%5BC%40%40H%5D%28O%29CC%28%3DO%29O\n", "1\n", "True\n" ] } ], "source": [ "# The same can be achieved using url endpoint:\n", "\n", "url_1 = url_stem + \"/molecule.json?molecule_structures__canonical_smiles=\" + quote(smiles)\n", "url_2 = url_stem + \"/molecule.json?molecule_structures__canonical_smiles__exact=\" + quote(smiles)\n", "url_3 = url_stem + \"/molecule.json?smiles=\" + quote(smiles)\n", "url_4 = url_stem + \"/molecule.json?molecule_structures__canonical_smiles__flexmatch=\" + quote(smiles)\n", "\n", "exact_match = requests.get(url_1).json()\n", "explicit_exact_match = requests.get(url_2).json()\n", "convenient_shortcut = requests.get(url_3).json()\n", "flexmatch = requests.get(url_4).json()\n", "\n", "print url_1\n", "print len(exact_match['molecules'])\n", "\n", "print url_2\n", "print len(explicit_exact_match['molecules'])\n", "\n", "print url_3\n", "print len(convenient_shortcut['molecules'])\n", "\n", "print url_4\n", "print len(flexmatch['molecules'])\n", "\n", "print exact_match == explicit_exact_match" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### A further note on SMILES searches\n", "\n", "The URL-based example above used the HTTP GET method, which means the SMILES are passed _via_ the URL. This can cause problems where the SMILES inludes the '/', '\\' or '#' characters, for example:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://localhost/chemblws/molecule/[Na+].CO[C@@H](CCC#C\\C=C/CCCC(C)CCCCC=C)C(=O)[O-].json\n", "False\n", "404\n" ] } ], "source": [ "# CHEMBL477889\n", "smiles = \"[Na+].CO[C@@H](CCC#C\\C=C/CCCC(C)CCCCC=C)C(=O)[O-]\"\n", "\n", "url = url_stem + \"/molecule/\" + smiles + \".json\"\n", "result = requests.get(url)\n", "\n", "print url\n", "print result.ok\n", "print result.status_code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are two solutions to this problem:\n", "\n", "1. When using GET, use `urllib.quote` function\n", "2. Use POST with `X-HTTP-Method-Override`: `GET` header" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://localhost/chemblws/molecule/%5BNa%2B%5D.CO%5BC%40%40H%5D%28CCC%23C%5CC%3DC/CCCC%28C%29CCCCC%3DC%29C%28%3DO%29%5BO-%5D.json\n", "True\n", "200\n" ] } ], "source": [ "# Method one:\n", "url = url_stem + \"/molecule/\" + quote(smiles) + \".json\"\n", "result_by_get = requests.get(url)\n", "\n", "print url\n", "print result_by_get.ok\n", "print result_by_get.status_code" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n", "200\n" ] } ], "source": [ "# Method two:\n", "url = url_stem + \"/molecule.json\"\n", "result_by_post = requests.post(url, data={\"smiles\": smiles}, headers={\"X-HTTP-Method-Override\": \"GET\"})\n", "\n", "print result_by_post.ok\n", "print result_by_post.status_code" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Na+].CO[C@@H](CCC#C\\C=C/CCCC(C)CCCCC=C)C(=O)[O-]\n", "{u'page_meta': {u'previous': None, u'total_count': 1, u'offset': 0, u'limit': 20, u'next': None}, u'molecules': [{u'max_phase': 0, u'usan_stem': None, u'parenteral': False, u'dosed_ingredient': False, u'molecule_type': u'Small molecule', u'biotherapeutic': None, u'chebi_par_id': None, u'first_approval': None, u'atc_classifications': [], u'prodrug': u'-1', u'molecule_structures': {u'standard_inchi_key': u'RLSXKIUQYFNFBI-PJZMSVRGSA-M', u'canonical_smiles': u'[Na+].CO[C@@H](CCC#C\\\\C=C/CCCC(C)CCCCC=C)C(=O)[O-]', u'standard_inchi': u'InChI=1S/C20H32O3.Na/c1-4-5-6-12-15-18(2)16-13-10-8-7-9-11-14-17-19(23-3)20(21)22;/h4,7-8,18-19H,1,5-6,10,12-17H2,2-3H3,(H,21,22);/q;+1/p-1/b8-7-;/t18?,19-;/m0./s1'}, u'chirality': u'-1', u'usan_substem': None, u'pref_name': None, u'polymer_flag': False, u'molecule_chembl_id': u'CHEMBL477889', u'therapeutic_flag': False, u'molecule_properties': {u'num_ro5_violations': 1, u'mw_freebase': u'320.47', u'psa': u'46.53', u'full_mwt': u'342.45', u'ro3_pass': u'N', u'num_alerts': 3, u'acd_logd': u'2.30', u'full_molformula': u'C20H31NaO3', u'hba': 3, u'molecular_species': u'ACID', u'mw_monoisotopic': u'320.2351', u'heavy_atoms': 23, u'aromatic_rings': 0, u'alogp': u'6.02', u'acd_most_apka': u'4.31', u'qed_weighted': u'0.23', u'acd_most_bpka': u'0.16', u'hbd': 1, u'acd_logp': u'5.31', u'rtb': 15}, u'structure_type': u'MOL', u'helm_notation': None, u'usan_stem_definition': None, u'natural_product': u'-1', u'black_box_warning': u'0', u'availability_type': u'-1', u'inorganic_flag': u'-1', u'molecule_synonyms': [{u'synonyms': u'(Z)-Stellettic Acid B Sodium Salt', u'syn_type': u'OTHER'}], u'molecule_hierarchy': {u'molecule_chembl_id': u'CHEMBL477889', u'parent_chembl_id': u'CHEMBL477888'}, u'indication_class': None, u'usan_year': None, u'first_in_class': u'-1', u'topical': False, u'oral': False}]}\n", "True\n" ] } ], "source": [ "print smiles\n", "print result_by_post.json()\n", "print result_by_get.json() == result_by_post.json()['molecules'][0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Substructure-searching\n", "\n", "As well as ID lookups, the web services may also be used to perform substructure searches. Currently, only SMILES-based searches are supported, although this could change if there is is a need for more powerful search abilities (_e.g._ SMARTS searching)." ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n1QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Lapatinib contains the following core...\n", "\n", "query = \"c4ccc(Nc2ncnc3ccc(c1ccco1)cc23)cc4\"\n", "\n", "Chem.MolFromSmiles(query)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Perform substructure search on query using client\n", "\n", "substructure = new_client.substructure\n", "records = substructure.filter(smiles=query)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://localhost/chemblws/substructure/c4ccc%28Nc2ncnc3ccc%28c1ccco1%29cc23%29cc4.json\n", "82\n" ] } ], "source": [ "# ... and using raw url-endpoint\n", "\n", "url = url_stem + \"/substructure/\" + quote(query) + \".json\"\n", "result = requests.get(url).json()\n", "\n", "print url\n", "print result['page_meta']['total_count']" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nhYVs8uTJTEtLi929e7fSfffv32crVqxgRkZG1S5a7dy5kx07dkxwPSwsjLVq1YqNGzeOvXv3TlRP\nQ+Lqz7sQQj7j1q1bTF1dnQ0fPlxkM6JKS0sr/ZJYsmQJGz9+vEhifcmhQ4zp6kokNCFNi6cnYwcO\n8JcTfiA/J5glJ3/NIiLk2L17hiwz04uVln48EyI19Qf28OFwcWT7kSdPnrAlS5awqVOnshs3bkgk\nB0Ik7fLly6x79+5MWVmZeXh41OqNe2pqKrO1tWWKiops8+bNrLjCcj0ej8d27tzJVFRUWP/+/dm9\ne/c+OU5xcTHz8fFhGhoazMjIiPn5VW9pDI/HY7t27WKqqqps+tKlLPbt2xo/B1IP5Ocz1rkzY999\nJ7QhDx06xHR0dIQ2HmOMFRQUCJbjrlixQlBsLSkpYR4eHkxOTo45OTmx/Pz8L4xESO2tSlvFhiQM\nkXQaYsXj8diSJUtY8+bN2d69e9kff/zBevfuzTgcDjMxMWEeHh7VnlW8Z88exuVy2ebNmwW3JSYm\nso4dOzJzc3OWlZUlqqchUVTAIg3G06dPWY8ePVi3bt2+OPWyung8Hrt58yZbsGAB09DQYFOnThXc\nN2zYMLZq1SqhxKkpV1fGxo2TSGhCmhZPT/5MrNatGXNz4/cx+UBxcQZLT1/DYmLaschIRZabe7DS\n/cnJ37KXL0+IJ98KLl68yNTU1Ji5uTkbM2YMk5GRYV27dmXbtm0T9A0kpKkoKytjfn5+TE9Pj7Vt\n27baM6DKP7A3a9aMjRw5kiUlVV7KEhoaynr06MG0tbXZ6dOnq53P27dvmYeHB2vRogXr27fvZwvM\nt27dYj179mRqampV9toi9dj164xpa/Mv16/zZ/HOncv/U0i2bNnCzM3NBddv3rxZ4z46n3LlyhXW\npk0bZm5uzhIT388ivnXrFjMwMGCdO3dmkZGRQolFyIfGJI5hPz39SdJpSISrqyvT09NjlpaWbPPm\nzezp06e1GufmzZtMTU2NzZw5U7BSKScnh1laWrL27duzhw8fCjPteoEKWKRBef36NRsxYgTT0tJi\nERERtRqDx+MJGuJpaWkxRUVF5uDgwE6fPs0KK8zCaNWqVY3erAqTk1MK8/CgD6CEiEVJCWPHjzM2\nbBhjMjKM2dqygsTLjLHKPQR4vFL28uUpiS8VLC4uZgsWLGAyMjLMw8ND8GH35cuXbPPmzUxfX59x\n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\nX9W7Nw9goXEjgQWPs23bNo0ZM0bdunVTVlaW2rVrV6d2Kisr9cEHH8hqtWrLli2KjIy0z7ry8vKy\nH1dSUqJ27dpp9+7dDfZLxNatWxUdHa3y8vIG6R8A0LCMkU6flm64wbZtsUjPP29bI8tisc3Q+vOf\nbYmr+HiJyVYAAOnyeOHra3t0MCZGGjPGtsbuNZpEDNQ7vsrwOBERESosLFTz5s0VGhqqTZs21ar+\n8ePH7a83T0hIUN++fbVnzx7l5+crOjranrwqKirSjBkz1L17d3Xp0kVPPvmkjh8/fi1OyaX9+/er\na9euDdI3AKDhWSy/Ja8uWrxY2rfP9u9//UsqLJSmTyd5BQCo7tJ48d570k8/SWlpUng4ySs0LXyd\n4ZHatm2rvLw8JSYm6oEHHlBKSoqqqqqc1tm+fbtGjRqlDh06aOXKlXr++ef1448/6uWXX7a/VaOi\nokJWq1X9+vVTSEiIjh49qjVr1uiTTz6RJN1xxx3Kz8+/pud25swZZWRkaNq0afZ9nvAWRACAZ3ns\nMeliqOjfv2HHAgDwXJfGi2HDbI+kA00RCSx4LG9vb6WkpGjNmjVKTU3Vgw8+qJMnT1523IYNGxQe\nHq5BgwbJGKPc3FwVFBRo3LhxatmypSTbWwZnz56t9u3ba/78+YqJidGBAwe0atUqRUVFqW3btsrN\nzdW0adM0bNgwtxJmtbV371498cQTat++vV588UV16NBBlZWV9vGRwAIAXOrpp6WCgoYeBQDA0xEv\n8EdBAgseLzo6WoWFhTpy5IjuuusuffHFF9XKf/rpJw0ePFgHDhxQdna2Bg0aJIvFosrKSmVnZ2vI\nkCHq1q2bioqKZLVa9d133ykpKemyV6F7eXkpJSVFa9euVWpqqoYPH66ff/75isZ+4YK0evUFDR4c\npZ49e2r37t1KT09XcXGxnnnmGfvjjMXFxTxCCACoxs9PSkpq6FEAADwd8QJ/FCzijkbj3Llzevrp\np2W1WvXmm29qypQpDo87duyYFi9erLffflsVFRWaOnWqJk6cqO7du7vd1969ezVy5Ej96U9Pa968\n8brzztqN9fBhyWq1fc6ckWbPXqrRoyN0++23248xxmjTpk164403dODAAWVmZqpXr1616wgAAAAA\ngD8AElhodFasWKGEhAQ9/PDDWrJkiXx8fCRJGzdulNVqVU5Ojnr06KHExETFxcXp+uuvr1M/p0+f\n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\n", "text/plain": [ "" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mols = [Chem.MolFromSmiles(x['molecule_structures']['canonical_smiles']) for x in records[:6]]\n", "legends=[str(x[\"molecule_chembl_id\"]) for x in records]\n", "Draw.MolsToGridImage(mols, legends=legends, subImgSize=(400, 200), useSVG=False)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Similarity searching\n", "\n", "The web services may also be used to perform SMILES-based similarity searches." ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Lapatinib\n", "smiles = \"CS(=O)(=O)CCNCc1oc(cc1)c2ccc3ncnc(Nc4ccc(OCc5cccc(F)c5)c(Cl)c4)c3c2\"" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "7" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Peform similarity search on molecule using client...\n", "\n", "# Note that a percentage similarity must be supplied.\n", "similarity = new_client.similarity\n", "res = similarity.filter(smiles=smiles, similarity=85)\n", "\n", "len(res)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://localhost/chemblws/similarity/CS%28%3DO%29%28%3DO%29CCNCc1oc%28cc1%29c2ccc3ncnc%28Nc4ccc%28OCc5cccc%28F%29c5%29c%28Cl%29c4%29c3c2/85.json\n", "7\n" ] } ], "source": [ "##### ... and using raw url-endpoint\n", "\n", "url = url_stem + \"/similarity/\" + quote(smiles) + \"/85.json\"\n", "result = requests.get(url).json()\n", "\n", "print url\n", "print result['page_meta']['total_count']" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABLAAAAGQCAYAAAC+tZleAADkxUlEQVR4nOzde1zN9x8H8NfpnkKl\nCyW5RLnLbchdLkObyzJMMbMwI7MRvxnNZmI3uU2xC5lLjGHDaMwIQyohlFIR3VSke31+f5x1Vq5d\nzq3O6/l49HAu3/P5vI9Hne95v7+fi0QIIUBERERERERERKSmtFQdABERERERERER0YuwgEVERERE\nRERERGqNBSwiIiIiIiIiIlJrLGAREREREREREZFaYwGLiIiIiIiIiIjUGgtYRERERERERESk1ljA\nIiIiIiIiIiIitcYCFhERERERERERqTUWsIiIiIiIiIiISK2xgEVERERERERERGqNBSwiIiIiIiIi\nIlJrLGAREREREREREZFaYwGLiIiIiIiIiIjUGgtYRERERERERESk1ljAIiIiIiIiIiIitcYCFhER\nERERERERqTUWsIiIiIiIiIiISK2xgEVERERERERERGqNBSwiIiIiIiIiIlJrLGAREREREREREZFa\nYwGLiIiIiIiIiIjUGgtYRERERERERESk1ljAIiIiIiIiIiIitcYCFhERERERERERqTUWsIiIiIiI\niIiISK2xgEVERERERERERGqNBSwiIiIiIiIiIlJrLGAREREREREREZFaYwGLiIiIiIiIiIjUGgtY\nRERERERERESk1ljAIiIiIiIiIiIitcYCFhERERERERERqTUWsIiIiIiIiIiISK2xgEVERERERERE\nRGqNBSwiIiIiIiIiIlJrLGAREZHG+vDDDzFx4kRVh0FERERERC/BAhYREWmsoqIi6OrqqjoMIiIi\nIiJ6CRawiIhIYxUVFUFHR0fVYRARERER0UuwgEVERBqLBSwiIiIiopqBBSwiItJYLGAREREREdUM\nLGAREZHGYgGLiIiIiKhmYAGLiEjOuoaGyn5IvbGARUREqiCRAEuW/He77L9PPqavD8yYodz4iKhm\n0ZT8g9/aiYgU4GKXLqoOgSqABSwiUgdlEw6ePzTH+vXApEkvPkYI4MoVoGdPYONG5cRFRDWTJpw/\n+K0dwJ49e1BQUICJEyeqOhQiqiVKkxFNOJHUZCxgEZG64PlC80yfDrz3XvnHyo7CKnXwIDBmjHJi\nIqKaSxPyD35rB3D48GHo6+uzgEVEclObTxy1CQtYRKQuNCHxoPIWLACaNSv/mBDSf0sLWcuXA4GB\n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\nky7gzm9tREREpKm0VB0AERERET2fiQng7a3qKIiIiIhUiyOwiIiIiIiIiIhIrXEEFhERERERERER\nqTUWsIiIiIiIiIiISK2xgEVERERERERERGqNBSwiIiIiIiIiIlJrLGAREREREREREZFaYwGLiIiI\niIiIiIjUGgtYRERERERERESk1ljAIiIiIiIiIiIitcYCFhERERERERERqTUWsIiIiIiIiIiISK2x\ngEVERERERERERGqNBSwiIiIiIiIiIlJrLGAREREREREREZFaYwGLiIiIiIiIiIjUGgtYRERERERE\nRESk1ljAIiIiIiIiIiIitcYCFhERERERERERqTUWsEhtHTp0CJ06dYK+vj7s7e3x008/yZ6TSCTP\nfE3ZxyUSyTN/yj6/adOmp9o4fPjwc9upW7cuBg0ahKioqArF8ry+K/J8Wf369Xvh80REtVlNPx8c\nOnQI/fr1g4GBAaytrTFlyhQkJyfLno+NjYWrqytMTU1hamoKV1dXxMbGVvj1mZmZmDx5Mho0aAAL\nCwv4+Pg8FUNERASGDh0KY2Nj2NjY4Icffnjh/w8RUU1U288XQgh4e3vD1NQUZmZmWLRoEYQQz2zr\nWfnDy15fkfPBi84nFXmeqDpYwCK1FBERgSlTpsDHxwfp6en4448/cPLkyUq3I4R46qesgIAAFBcX\nl3ts1apVz20nKSkJAwcOhLu7e5X6r+zzALBlyxYUFRVVqD8iotqmNpwPvvrqK8ydOxf379/HjRs3\n0Lx5c0ycOFH2/KRJk9CxY0fExcUhLi4O7du3x6RJkyr8+g8++AAFBQW4du0arly5gqioKPz444+y\n52/evAlXV1d4eHggMTERZ8+eRXBw8Av/f4iIahpNOF8EBAQgODgYly5dQmhoKI4ePYrvv//+qXae\nlz9U5PUveu8vO59U5HxDVC2CSA25ubmJ77777rnPP+9Xt+zjL/v1BiA+/PBDERgYKHvst99+EzNm\nzHhhO48ePRIGBgaViqUqzwshxIMHD0STJk3E9evXK3Q8EVFtUxvOB0969OiRqFOnjux+nTp1xMOH\nD2X3s7Kyyj3/stc3aNBAJCcny+7fv39f9O7dW3Z/woQJYt26dc9tj+cXIqoNNOF80bNnT3Ho0CHZ\n/UOHDglnZ+dyr3lR/vCy178srpedT172PFF1cQQWqaULFy5gxIgRCu9n1qxZWLlypezqwqeffgov\nL6/nHv/o0SOsW7cOXbt2rVD7FhYWMDIyQvv27bFmzZqnrta87PlFixZh9uzZcHBwqOQ7IyKqHWrL\n+aDU48ePsW7dOgwYMED22PDhw/HVV18hKysLmZmZ+PLLLzF8+PAKvx54egrMlStXZPePHz+O5ORk\nWFtbo0GDBpg8eTIyMzPLvf5l5yMiInWnCeeLq1evolu3brL7Xbt2xdWrV8u97kX5Q0Ve/6LzwcvO\nJxU53xBVh46qAyB6lnv37sHS0vKFx1RkjY5nHSPKDIVt1qwZmjdvjr1790JPTw8NGjSAo6PjC9sx\nNjau0HDk0n7y8/MRGRmJuXPnIi4uDt9++22Fnv/nn38QGRmJDRs2vLQvIqLaqjacD558raWlJUJC\nQmSPr169Gs7Ozli2bBkAwM7ODmfOnKnw64cPH44PPvgA33zzDQDplMLs7GzZ82lpaYiLi0N4eDgA\nwMvLCx988IFsmuHLzkdERDWBJpwvsrOzUb9+fdl9ExMTPHr0SHb/ZfnDy17/svPBy84nL3ueqNpU\nNfSL6EWaNm0qEhMTn/v88351UckhwEIIcezYMeHk5CQ6d+4sjhw58sJ2cnJyxNdffy369etX4X5K\nxcfHCxMTkwo/37NnTxEVFVXpfoiIapPadj7IysoSS5cuFX369JE95uLiIhYtWiQyMjJERkaGWLRo\nkXBxcanw69PT08XEiROFqampsLKyEsuXLxcNGzaUPV+vXj2RkpIiu5+cnCzMzc2fG+PLzldEROpI\nE84X9erVE6mpqbL7KSkplcofXvb6Jz15PnjZ+aSy5xuiyuIUQlJL3bp1w6FDh5TSl4uLC/Ly8pCb\nm4shQ4a88FhDQ0NMnz4d58+fr3Q/Wlpa0NfXr/DzZ8+eRevWrcvtAMKdoYhI09S280G9evUwb948\nXLp0SfZYSEgIFi1aBBMTE5iYmGDhwoXPHIH1vNebmZnh559/xoMHD3D//n2YmJhg4MCBsuc7dOhQ\nbvRA2dvP8rLzFRGROtKE80Xbtm1x4cIF2f2LFy+ibdu2svsvyx9e9vonPXk+eNn5pLLnG6LKYgGL\n1NLHH3+MJUuWYP/+/cjOzsatW7cwdepUhfV37do1XLt27aUFotzcXGzevPmZw4SfNGHCBFy5cgUF\nBQWIiorC22+/jXHjxlX4efGMHUB4EiAiTVMbzgceHh6IiopCYWEhEhMT8fHHH6N///6y5zt16oRV\nq1YhMzMTmZmZWLlyJZycnCr8+kmTJuHOnTvIzMzEzp074evriyVLlsief/vttzFv3jykpKQgJSUF\nc+fOhaurq+z5l52PiIhqAk04X3h4eGDx4sWyXWsXL16MKVOmyJ5/Wf7wste/7HzwsvPJy54nqjbl\nD/oiqpjff/9ddOzYUejp6Ql7e3vx008/yZ573q8unhi6+6yfl7XxonYMDQ2Fs7OzCA8Pf2E/QggR\nFBQkOnToIPT19UWLFi3Exx9/LHJzc2Wve9nzL4qJiEiT1JbzgZ6enrC1tRXTp08X6enpstfdvHlT\nDBs2TNSvX1/Ur19fvPrqqyImJkb2/Mte//333wtra2tRp04dMXjwYHHp0qWn3seSJUuEubm5MDU1\nFe7u7iIjI+Op9it6PiIiUle1/XxRUlIi5s+fL0xMTISJiYnw9vYWJSUlFYqpIq+vyPngReeTijxP\nVB0SITikg4iIiIiIiIiI1BenEBIRERERERERkVpjAYuIiIiIiIiIiNQaC1hERERERERERKTWWMAi\nIiIiIiIiIiK1xgIWERERERERERGpNRawiIiIiIiIiIhIrbGARUREREREREREao0FLCIiIiIiIiIi\nUmssYBERERERERERkVpjAYuIiIiIiIiIiNQaC1hERERERERERKTWWMAiIiIiIiIiIiK1xgIWERER\nERERERGpNRawiIiIiIiIiIhIrbGARUREREREREREao0FLCIiIiIiIiIiUmssYBERERERERERkVpj\nAYuIiIiIiIiIiNQaC1hERERERERERKTWWMAiIiIiIiIiIiK1xgIWERERERERERGpNRawiIiIiIiI\niIhIrbGARUREREREREREao0FLCIiIiIiIiIiUmssYBERERERERERkVpjAYuIiIiIiIiIiNQaC1hE\nRERERERERKTWWMAiIiIiIiIiIiK1xgIWERERERERERGpNRawiIiIiIiIiIhIrbGARURERERERERE\nao0FLCIiIiIiIiIiUmssYBERERERERERkVpjAYuIiIiIiIiIiNQaC1hEREREREREakYiAZYs+e82\nkaaTCCGEqoMgIiIiIiIiov9IJICZGXD2LODgADBzJ03HEVhEREREREREamj6dOC991QdBZF64Ags\nIiIiIiIiojJyc3Nx48YNNG7cGObm5iqJQSIBMjKAZs2AzEwgMRFo3FgloRCpBY7AIiIiIiIiIvrX\n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\nY4yxau3/CSYdQZspcSIAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mols = [Chem.MolFromSmiles(x['molecule_structures']['canonical_smiles']) for x in res[:6]]\n", "legends = [str(x[\"molecule_chembl_id\"]) for x in res]\n", "Draw.MolsToGridImage(mols, legends=legends, subImgSize=(400, 200), useSVG=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Versions for a parent structure\n", "\n", "The versions (_e.g._ salt forms) for a parent compound may be retrieved for a ChEMBL ID. Keep in mind that a parent structure is one that has had salt/solvate components removed; it corresponds to the bioactive moiety and its use facilitates structure searching, comparison _etc_. A compound without salt/solvate components is its own parent." ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Neostigmine (a parent)...\n", "\n", "chembl_id = \"CHEMBL278020\" " ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{u'molecule_chembl_id': u'CHEMBL278020', u'parent': u'True'},\n", " {u'molecule_chembl_id': u'CHEMBL54126', u'parent': u'False'},\n", " {u'molecule_chembl_id': u'CHEMBL211471', u'parent': u'False'}]" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "records = new_client.molecule_form.get(chembl_id)['molecule_forms']\n", "\n", "records" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ChEMBL ID lookup service may now be used to get the full records for the salt forms..." ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CHEMBL54126 : [Br-].CN(C)C(=O)Oc1cccc(c1)[N+](C)(C)C\n", "CHEMBL211471 : COS(=O)(=O)[O-].CN(C)C(=O)Oc1cccc(c1)[N+](C)(C)C\n" ] } ], "source": [ "for chembl_id in [x[\"molecule_chembl_id\"] for x in records if x[\"parent\"] == 'False']:\n", " record = new_client.molecule.get(chembl_id) \n", " print(\"{:10s} : {}\".format(chembl_id, record['molecule_structures']['canonical_smiles']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Drug mechanism(s) of action\n", "\n", "The mechanisms of action of marketed drugs may be retrieved.\n", "\n", "Note that this data may not be recorded for the parent structure, but rather for one of its versions. For example, the marketed drug, Tykerb, containing the active ingredient Lapatinib (CHEMBL554) is actually the ditosylate monohydrate (CHEMBL1201179)." ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The recorded mechanisms of action of 'CHEMBL554' are...\n", "--------------------------------------------------\n", "The recorded mechanisms of action of 'CHEMBL1201179' are...\n", "CHEMBL1201179 : Receptor protein-tyrosine kinase erbB-2 inhibitor\n", "CHEMBL1201179 : Epidermal growth factor receptor erbB1 inhibitor\n", "--------------------------------------------------\n", "The recorded mechanisms of action of 'CHEMBL3526325' are...\n", "--------------------------------------------------\n", "The recorded mechanisms of action of 'CHEMBL3542341' are...\n", "--------------------------------------------------\n" ] } ], "source": [ "# Molecule forms for Lapatinib are used here...\n", "\n", "for chembl_id in (x[\"molecule_chembl_id\"] for x in new_client.molecule_form.get(\"CHEMBL554\")['molecule_forms']):\n", " \n", " print(\"The recorded mechanisms of action of '{}' are...\".format(chembl_id))\n", " \n", " mechanism_records = new_client.mechanism.filter(molecule_chembl_id=chembl_id)\n", " \n", " if mechanism_records:\n", " \n", " for mech_rec in mechanism_records:\n", " \n", " print(\"{:10s} : {}\".format(mech_rec[\"molecule_chembl_id\"], mech_rec[\"mechanism_of_action\"]))\n", " \n", " print(\"-\" * 50)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Image query\n", "\n", "The webservice may be used to obtain a PNG image of a compound." ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Lapatinib ditosylate monohydrate (Tykerb)\n", "\n", "chembl_id = \"CHEMBL1201179\" " ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAob0lEQVR4nO3deZzVdb348dcMzLAI\nsoqAO5ssiorirqFgmkXWTVPLaNWf3UzCTG9Zt9G6SmquV1K6lReJG2pa1y5yQ8hIuZnkVqKpuaSy\nituwg87vj/c5nGXO7GeZOfN6Ph7z4Mz3+z3fz3e+nO95f/YPSJIkSZIkSZIkSZIkSZIkSZIkSZIk\nSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk\nSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk\nSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk\nSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk\nSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk\nSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk\nSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk\nSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk\nSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk\nSZIkSZIkSZIkSZIkSZIkSZJURoYBdwJ3Ax8t8bVIeVFZ6guQpCLqCVwBPA0MANYC84ElwMGluyxJ\nktQcFcA0YCWwApictm8IcBuwA7gP2K/oVydJkpp0OPAn4F1gOlCV2F5JBPqkscACYCtwI9CniNco\nSZIasBswB3gv8e/QtH1HA8uBs3K8bwrwV+ANIgPQtbCXKUlSY5ZTV+pLKJEuRCB+E3gS+EDavn2J\navXNQA3Rpp5LFXAe0cb+DPDhwlyqJElN6ZwB/RjgMaJ0fR6p0nV3IoBvIgL68Gaerx8wE9gCLAIO\n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\nRZwrd7838cWbLCHkqQf5LrtkBua6Opg3Dy64oP6xdYmg1rdvftJuX5ob0H8Lv/0QfKgX9BoEg26F\nW38Dv0nuHwEj1sLai+Ci9OGna2FtgRZZGkRmxnDPFrx3ArCU6Nsxk1QtULaGOmelVxFnNwl1ZJVE\nKfl1opmiJX9XL+IebQEWEaMKckn2i6kF7iczszAu8d4tiWNaWIsmqZSSX4yrgOeI0g9ktoX+gfwP\nf8tSVxcB+9lnYfTo+vvKV3MDerbe0PudqMIGYC7MrckxBv9yuDzXWg1tUE1Uxb5JNL1MasO5murb\n8T3qB51kFfG7ievId2e7UjkaeJS2j9gYSWTCtxF9DLL7rOxPZII+Tep+9yEy7NuoXzsnqYPpD9xM\nlMQfINUB51yKUt2WDNqTJsGjj0JVVf195am1Af00OG1plHIBWA2rh8Pw7OOGw/BVkWHLh1OBZ4lJ\nffJVFduDVN+OR4iAndQl7XV256xCjb0utvRasNuIIaf5MBn4C9HnYDqZ97JL2r/JSaL+iotxSWVl\nHPCDxE8RJ2hJD9pXXw1XXpl7X/mpiz+wwZ9c7zkEDnkVXj04reZkB+zonjlTGgA9oMf2CBZtMZao\nit1K/XkI8iW7b0ey93r60MllwMQCpF0KyVqwjdTv5JcvXYkq/HVEJj19QpjjiH4xb+McDpLyJz1o\nV1fD8uVw7LH195WflpbQJ8GkV+HV47NGGayBNQUooXcBLic6nT1IcWaPnEyMdV5PTEqTfP0VymcY\n2gnENLhrKE4t2GDgp8QogPnAzxOv78BhaJLyKztojx0bQ9R69zagp5wJZ74Orx+eYwjRPJhX00Ab\n+lyY24ZLvBU4vcmj8qsr8M9EwLmZ8hmGlvRx4Fqi7bqYDiOm4/0VhZ3/XVLnlStoX3gh3H67AT1c\nBBe9Aq+MaWBolossSZLagVxBu6IixqYb0JOvc/30Shta5CJLkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJktRu/X/625lFM1h53AAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "png = new_client.image.get(chembl_id)\n", "\n", "Image(png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bioactivities\n", "\n", "All bioactivity records for a compound may be retrieved _via_ its ChEMBL ID.\n" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Lapatinib\n", "\n", "chembl_id = \"CHEMBL554\" " ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(1749,\n", " [{u'document_journal': u'Bioorg. Med. Chem. Lett.', u'bao_endpoint': u'BAO_0000190', u'potential_duplicate': False, u'uo_units': u'UO_0000065', u'canonical_smiles': u'CS(=O)(=O)CCNCc1oc(cc1)c2ccc3ncnc(Nc4ccc(OCc5cccc(F)c5)c(Cl)c4)c3c2', u'assay_type': u'B', u'standard_flag': True, u'molecule_chembl_id': u'CHEMBL554', u'target_organism': u'Homo sapiens', u'assay_description': u'Inhibitory activity against epidermal growth factor receptor', u'record_id': 15408, u'document_chembl_id': u'CHEMBL1146682', u'bao_format': u'BAO_0000357', u'standard_units': u'nM', u'activity_id': 190221, u'standard_type': u'IC50', u'target_chembl_id': u'CHEMBL203', u'data_validity_comment': None, u'standard_relation': u'=', u'document_year': 2004, u'target_pref_name': u'Epidermal growth factor receptor erbB1', u'assay_chembl_id': u'CHEMBL674106', u'published_value': u'0.01', u'published_relation': u'=', u'standard_value': u'10', u'qudt_units': u'http://www.openphacts.org/units/Nanomolar', u'published_units': u'uM', u'pchembl_value': u'8.00', u'published_type': u'IC50', u'activity_comment': None}, {u'document_journal': u'Bioorg. Med. Chem. Lett.', u'bao_endpoint': u'BAO_0000190', u'potential_duplicate': False, u'uo_units': u'UO_0000065', u'canonical_smiles': u'CS(=O)(=O)CCNCc1oc(cc1)c2ccc3ncnc(Nc4ccc(OCc5cccc(F)c5)c(Cl)c4)c3c2', u'assay_type': u'B', u'standard_flag': True, u'molecule_chembl_id': u'CHEMBL554', u'target_organism': u'Homo sapiens', u'assay_description': u'Inhibitory activity against ERBB2 receptor kinase', u'record_id': 15408, u'document_chembl_id': u'CHEMBL1146682', u'bao_format': u'BAO_0000357', u'standard_units': u'nM', u'activity_id': 190222, u'standard_type': u'IC50', u'target_chembl_id': u'CHEMBL1824', u'data_validity_comment': None, u'standard_relation': u'=', u'document_year': 2004, u'target_pref_name': u'Receptor protein-tyrosine kinase erbB-2', u'assay_chembl_id': u'CHEMBL682312', u'published_value': u'0.009', u'published_relation': u'=', u'standard_value': u'9', u'qudt_units': u'http://www.openphacts.org/units/Nanomolar', u'published_units': u'uM', u'pchembl_value': u'8.05', u'published_type': u'IC50', u'activity_comment': None}])" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "records = new_client.activity.filter(molecule_chembl_id=chembl_id)\n", "\n", "len(records), records[:2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Targets\n", "\n", "The webservices may also be used to obtain information on biological targets, _i.e._ the entities, such as proteins, cells or organisms, with which compounds interact.\n" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "11019" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Like with any other resource type, a complete list of targets can be requested using the client:\n", "records = new_client.target.all()\n", "len(records)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{u'target_components': [{u'component_id': 434, u'accession': u'O43451', u'component_type': u'PROTEIN', u'target_component_synonyms': [{u'component_synonym': u'MGA ', u'syn_type': u'GENE_SYMBOL'}, {u'component_synonym': u'MGAML', u'syn_type': u'GENE_SYMBOL'}, {u'component_synonym': u'MGAM', u'syn_type': u'GENE_SYMBOL'}, {u'component_synonym': u'Maltase-glucoamylase, intestinal', u'syn_type': u'UNIPROT'}, {u'component_synonym': u'Maltase', u'syn_type': u'UNIPROT'}, {u'component_synonym': u'Glucoamylase', u'syn_type': u'UNIPROT'}, {u'component_synonym': u'Alpha-glucosidase', u'syn_type': u'UNIPROT'}, {u'component_synonym': u'Glucan 1,4-alpha-glucosidase', u'syn_type': u'UNIPROT'}, {u'component_synonym': u'3.2.1.20', u'syn_type': u'EC_NUMBER'}, {u'component_synonym': u'3.2.1.3', u'syn_type': u'EC_NUMBER'}]}], u'target_chembl_id': u'CHEMBL2074', u'target_type': u'SINGLE PROTEIN', u'pref_name': u'Maltase-glucoamylase', u'species_group_flag': False, u'organism': u'Homo sapiens'}, {u'target_components': [{u'component_id': 294, u'accession': u'O60706', u'component_type': u'PROTEIN', u'target_component_synonyms': [{u'component_synonym': u'SUR2', u'syn_type': u'GENE_SYMBOL'}, {u'component_synonym': u'ABCC9', u'syn_type': u'GENE_SYMBOL'}, {u'component_synonym': u'ATP-binding cassette sub-family C member 9', u'syn_type': u'UNIPROT'}, {u'component_synonym': u'Sulfonylurea receptor 2', u'syn_type': u'UNIPROT'}]}], u'target_chembl_id': u'CHEMBL1971', u'target_type': u'SINGLE PROTEIN', u'pref_name': u'Sulfonylurea receptor 2', u'species_group_flag': False, u'organism': u'Homo sapiens'}, {u'target_components': [{u'component_id': 124, u'accession': u'O76074', u'component_type': u'PROTEIN', u'target_component_synonyms': [{u'component_synonym': u'PDE5', u'syn_type': u'GENE_SYMBOL'}, {u'component_synonym': u'PDE5A', u'syn_type': u'GENE_SYMBOL'}, {u'component_synonym': u\"cGMP-specific 3',5'-cyclic phosphodiesterase\", u'syn_type': u'UNIPROT'}, {u'component_synonym': u'cGMP-binding cGMP-specific phosphodiesterase', u'syn_type': u'UNIPROT'}, {u'component_synonym': u'CGB-PDE', u'syn_type': u'UNIPROT'}, {u'component_synonym': u'3.1.4.35', u'syn_type': u'EC_NUMBER'}]}], u'target_chembl_id': u'CHEMBL1827', u'target_type': u'SINGLE PROTEIN', u'pref_name': u'Phosphodiesterase 5A', u'species_group_flag': False, u'organism': u'Homo sapiens'}, {u'target_components': [{u'component_id': 167, u'accession': u'O95180', u'component_type': u'PROTEIN', u'target_component_synonyms': [{u'component_synonym': u'CACNA1H', u'syn_type': u'GENE_SYMBOL'}, {u'component_synonym': u'Voltage-dependent T-type calcium channel subunit alpha-1H', u'syn_type': u'UNIPROT'}, {u'component_synonym': u'Low-voltage-activated calcium channel alpha1 3.2 subunit', u'syn_type': u'UNIPROT'}, {u'component_synonym': u'Voltage-gated calcium channel subunit alpha Cav3.2', u'syn_type': u'UNIPROT'}]}], u'target_chembl_id': u'CHEMBL1859', u'target_type': u'SINGLE PROTEIN', u'pref_name': u'Voltage-gated T-type calcium channel alpha-1H subunit', u'species_group_flag': False, u'organism': u'Homo sapiens'}]" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "records[:4]" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SINGLE PROTEIN 6262\n", "ORGANISM 2136\n", "CELL-LINE 1598\n", "PROTEIN COMPLEX 263\n", "TISSUE 242\n", "PROTEIN FAMILY 231\n", "SELECTIVITY GROUP 97\n", "PROTEIN COMPLEX GROUP 50\n", "NUCLEIC-ACID 29\n", "SMALL MOLECULE 25\n", "PROTEIN-PROTEIN INTERACTION 21\n", "UNKNOWN 18\n", "SUBCELLULAR 10\n", "METAL 9\n", "PROTEIN NUCLEIC-ACID COMPLEX 6\n", "OLIGOSACCHARIDE 6\n", "MACROMOLECULE 5\n", "CHIMERIC PROTEIN 4\n", "LIPID 2\n", "PHENOTYPE 2\n", "NO TARGET 1\n", "ADMET 1\n", "UNCHECKED 1\n" ] } ], "source": [ "# Count target types...\n", "\n", "counts = Counter([x[\"target_type\"] for x in records if x[\"target_type\"]])\n", "\n", "for targetType, n in sorted(counts.items(), key=itemgetter(1), reverse=True): print(\"{:30s} {:-4d}\".format(targetType, n))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ChEMBL ID\n", "\n", "Data on any target type may be obtained _via_ a lookup of its ChEMBL ID.\n" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Receptor protein-tyrosine kinase erbB-2\n", " \n", "chembl_id = \"CHEMBL1824\"" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{u'organism': u'Homo sapiens',\n", " u'pref_name': u'Receptor protein-tyrosine kinase erbB-2',\n", " u'species_group_flag': False,\n", " u'target_chembl_id': u'CHEMBL1824',\n", " u'target_components': [{u'accession': u'P04626',\n", " u'component_id': 120,\n", " u'component_type': u'PROTEIN',\n", " u'target_component_synonyms': [{u'component_synonym': u'HER2 ',\n", " u'syn_type': u'GENE_SYMBOL'},\n", " {u'component_synonym': u'MLN19', u'syn_type': u'GENE_SYMBOL'},\n", " {u'component_synonym': u'NEU', u'syn_type': u'GENE_SYMBOL'},\n", " {u'component_synonym': u'NGL', u'syn_type': u'GENE_SYMBOL'},\n", " {u'component_synonym': u'ERBB2', u'syn_type': u'GENE_SYMBOL'},\n", " {u'component_synonym': u'Receptor tyrosine-protein kinase erbB-2',\n", " u'syn_type': u'UNIPROT'},\n", " {u'component_synonym': u'Metastatic lymph node gene 19 protein',\n", " u'syn_type': u'UNIPROT'},\n", " {u'component_synonym': u'Proto-oncogene Neu', u'syn_type': u'UNIPROT'},\n", " {u'component_synonym': u'Proto-oncogene c-ErbB-2',\n", " u'syn_type': u'UNIPROT'},\n", " {u'component_synonym': u'Tyrosine kinase-type cell surface receptor HER2',\n", " u'syn_type': u'UNIPROT'},\n", " {u'component_synonym': u'p185erbB2', u'syn_type': u'UNIPROT'},\n", " {u'component_synonym': u'CD_antigen=CD340', u'syn_type': u'UNIPROT'},\n", " {u'component_synonym': u'MLN 19', u'syn_type': u'UNIPROT'},\n", " {u'component_synonym': u'2.7.10.1', u'syn_type': u'EC_NUMBER'}]}],\n", " u'target_type': u'SINGLE PROTEIN'}" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "record = new_client.target.get(chembl_id)\n", "\n", "record" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remember that all targets have ChEMBL IDs, not just proteins..." ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# SK-BR-3, a cell line over-expressing erbB-2\n", "\n", "chembl_id = \"CHEMBL613834\" " ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{u'organism': u'Homo sapiens',\n", " u'pref_name': u'SK-BR-3',\n", " u'species_group_flag': False,\n", " u'target_chembl_id': u'CHEMBL613834',\n", " u'target_components': [],\n", " u'target_type': u'CELL-LINE'}" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "record = new_client.target.get(chembl_id)\n", "\n", "record" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### UniProt ID\n", "\n", "Data on protein targets may also be obtained using UniProt ID." ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# UniProt ID for erbB-2, a target of Lapatinib\n", "\n", "uniprot_id = \"P04626\"" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[(u'CHEMBL1824', u'Receptor protein-tyrosine kinase erbB-2'), (u'CHEMBL2363049', u'Epidermal growth factor receptor'), (u'CHEMBL2111431', u'Epidermal growth factor receptor and ErbB2 (HER1 and HER2)')]\n" ] } ], "source": [ "records = new_client.target.filter(target_components__accession=uniprot_id)\n", "print [(x['target_chembl_id'], x['pref_name']) for x in records]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bioactivities\n", "\n", "All bioactivities for a target may be retrieved." ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Receptor protein-tyrosine kinase erbB-2\n", "\n", "chembl_id = \"CHEMBL1824\"" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "5959" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "records = new_client.activity.filter(target_chembl_id=chembl_id)\n", "\n", "len(records)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1742 CHEMBL1909205 DRUGMATRIX: Protein Tyrosine Kinase, ERBB2 (HER2) enzyme inhibition (substrate: Poly(Glu:Tyr))\n", " 583 CHEMBL1963780 PUBCHEM_BIOASSAY: Navigating the Kinome. (Class of assay: other) Panel member name: ERBB2\n", " 369 CHEMBL1962280 GSK_PKIS: ERBB2 mean inhibition at 0.1 uM [Nanosyn]\n", " 369 CHEMBL1962281 GSK_PKIS: ERBB2 mean inhibition at 1 uM [Nanosyn]\n", " 83 CHEMBL874202 Inhibition of human epidermal growth factor receptor-2 (HER-2) autophosphorylation\n" ] } ], "source": [ "# Show assays with most recorded bioactivities...\n", "\n", "for assay, n in sorted(Counter((x[\"assay_chembl_id\"], x[\"assay_description\"]) for x in records).items(), key=itemgetter(1), reverse=True)[:5]:\n", " \n", " print(\"{:-4d} {:14s} {}\".format(n, *assay))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Approved Drugs\n", "\n", "The approved drugs for a target may be retrieved." ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Receptor protein-tyrosine kinase erbB-2\n", "\n", "chembl_id = \"CHEMBL1824\"" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CHEMBL1201179 : LAPATINIB DITOSYLATE\n", "CHEMBL1201585 : TRASTUZUMAB\n", "CHEMBL1743082 : TRASTUZUMAB EMTANSINE\n", "CHEMBL2007641 : PERTUZUMAB\n", "CHEMBL2105712 : AFATINIB DIMALEATE\n" ] } ], "source": [ "activities = new_client.mechanism.filter(target_chembl_id=chembl_id)\n", "compound_ids = [x['molecule_chembl_id'] for x in activities]\n", "approved_drugs = new_client.molecule.filter(molecule_chembl_id__in=compound_ids).filter(max_phase=4)\n", "\n", "for record in approved_drugs:\n", " \n", " print(\"{:10s} : {}\".format(record[\"molecule_chembl_id\"], record[\"pref_name\"]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Assays\n", "\n", "Information about assays may also be retrieved by the web services." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Assay details\n", "\n", "Details of an assay may be retrieved _via_ its ChEMBL ID." ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Inhibitory activity against epidermal growth factor receptor\n", "\n", "chembl_id = \"CHEMBL674106\"" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{u'assay_category': None,\n", " u'assay_cell_type': None,\n", " u'assay_chembl_id': u'CHEMBL674106',\n", " u'assay_organism': None,\n", " u'assay_strain': None,\n", " u'assay_subcellular_fraction': None,\n", " u'assay_tax_id': None,\n", " u'assay_test_type': None,\n", " u'assay_tissue': None,\n", " u'assay_type': u'B',\n", " u'assay_type_description': u'Binding',\n", " u'bao_format': u'BAO_0000357',\n", " u'cell_chembl_id': None,\n", " u'confidence_description': u'Homologous single protein target assigned',\n", " u'confidence_score': 8,\n", " u'description': u'Inhibitory activity against epidermal growth factor receptor',\n", " u'document_chembl_id': u'CHEMBL1146682',\n", " u'relationship_description': u'Homologous protein target assigned',\n", " u'relationship_type': u'H',\n", " u'src_assay_id': None,\n", " u'src_id': 1,\n", " u'target_chembl_id': u'CHEMBL203'}" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "record = new_client.assay.get(chembl_id)\n", "\n", "record" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bioactivities\n", "\n", "All bioactivity records for an assay may be requested." ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(16,\n", " [{u'document_journal': u'Bioorg. Med. Chem. Lett.', u'bao_endpoint': u'BAO_0000190', u'potential_duplicate': False, u'uo_units': u'UO_0000065', u'canonical_smiles': u'Oc1ccc2ncnc(Nc3ccc(OCc4ccccc4)cc3)c2c1', u'assay_type': u'B', u'standard_flag': True, u'molecule_chembl_id': u'CHEMBL14932', u'target_organism': u'Homo sapiens', u'assay_description': u'Inhibitory activity against epidermal growth factor receptor', u'record_id': 15404, u'document_chembl_id': u'CHEMBL1146682', u'bao_format': u'BAO_0000357', u'standard_units': u'nM', u'activity_id': 183887, u'standard_type': u'IC50', u'target_chembl_id': u'CHEMBL203', u'data_validity_comment': None, u'standard_relation': u'=', u'document_year': 2004, u'target_pref_name': u'Epidermal growth factor receptor erbB1', u'assay_chembl_id': u'CHEMBL674106', u'published_value': u'98', u'published_relation': u'=', u'standard_value': u'98', u'qudt_units': u'http://www.openphacts.org/units/Nanomolar', u'published_units': u'nM', u'pchembl_value': u'7.01', u'published_type': u'IC50', u'activity_comment': None}, {u'document_journal': u'Bioorg. Med. Chem. Lett.', u'bao_endpoint': u'BAO_0000190', u'potential_duplicate': False, u'uo_units': u'UO_0000065', u'canonical_smiles': u'COCCOc1cc2ncnc(Nc3cccc(c3)C#C)c2cc1OCCOC', u'assay_type': u'B', u'standard_flag': True, u'molecule_chembl_id': u'CHEMBL553', u'target_organism': u'Homo sapiens', u'assay_description': u'Inhibitory activity against epidermal growth factor receptor', u'record_id': 15410, u'document_chembl_id': u'CHEMBL1146682', u'bao_format': u'BAO_0000357', u'standard_units': u'nM', u'activity_id': 186628, u'standard_type': u'IC50', u'target_chembl_id': u'CHEMBL203', u'data_validity_comment': None, u'standard_relation': u'=', u'document_year': 2004, u'target_pref_name': u'Epidermal growth factor receptor erbB1', u'assay_chembl_id': u'CHEMBL674106', u'published_value': u'0.001', u'published_relation': u'=', u'standard_value': u'1', u'qudt_units': u'http://www.openphacts.org/units/Nanomolar', u'published_units': u'uM', u'pchembl_value': u'9.00', u'published_type': u'IC50', u'activity_comment': None}])" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "records = new_client.activity.filter(assay_chembl_id=chembl_id)\n", "\n", "len(records), records[:2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Other resources\n", "\n", "As noted previously, there are many other resources that can be useful. They won't be covered in this document in a great detail but some examples may be helpful." ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{u'doc_type': u'PUBLICATION', u'doi': u'10.1016/0960-894X(94)00451-K', u'title': None, u'journal': u'Bioorg. Med. Chem. Lett.', u'year': 1995, u'volume': u'5', u'first_page': u'15', u'last_page': u'18', u'pubmed_id': None, u'authors': None, u'document_chembl_id': u'CHEMBL1128135', u'issue': u'1'}, {u'doc_type': u'PUBLICATION', u'doi': u'10.1016/0960-894X(94)00456-P', u'title': None, u'journal': u'Bioorg. Med. Chem. Lett.', u'year': 1995, u'volume': u'5', u'first_page': u'19', u'last_page': u'24', u'pubmed_id': None, u'authors': None, u'document_chembl_id': u'CHEMBL1128136', u'issue': u'1'}, {u'doc_type': u'PUBLICATION', u'doi': u'10.1016/0960-894X(94)00452-L', u'title': None, u'journal': u'Bioorg. Med. Chem. Lett.', u'year': 1995, u'volume': u'5', u'first_page': u'25', u'last_page': u'30', u'pubmed_id': None, u'authors': None, u'document_chembl_id': u'CHEMBL1150533', u'issue': u'1'}, {u'doc_type': u'PUBLICATION', u'doi': u'10.1016/0960-894X(94)00449-P', u'title': None, u'journal': u'Bioorg. Med. Chem. Lett.', u'year': 1995, u'volume': u'5', u'first_page': u'35', u'last_page': u'38', u'pubmed_id': None, u'authors': None, u'document_chembl_id': u'CHEMBL1128137', u'issue': u'1'}, '...(remaining elements truncated)...']\n" ] } ], "source": [ "# Documents - retrieve all publications published after 1985 in 5th volume.\n", "print new_client.document.filter(doc_type='PUBLICATION').filter(year__gt=1985).filter(volume=5)" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{u'efo_id': u'EFO_0002312', u'cell_id': 2, u'cell_source_tissue': u'Lyphoma', u'cellosaurus_id': u'CVCL_2676', u'cell_description': u'P3HR-1', u'cell_source_tax_id': 9606, u'cell_source_organism': u'Homo sapiens', u'cell_chembl_id': u'CHEMBL3307242', u'clo_id': u'CLO_0008331', u'cell_name': u'P3HR-1'}\n" ] } ], "source": [ "# Cell lines:\n", "print new_client.cell_line.get('CHEMBL3307242')" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{u'protein_class_id': 409, u'l6': u'CAMK protein kinase AMPK subfamily', u'l7': None, u'l4': u'CAMK protein kinase group', u'l5': u'CAMK protein kinase CAMK1 family', u'l2': u'Kinase', u'l3': u'Protein Kinase', u'l1': u'Enzyme', u'l8': None}]\n" ] } ], "source": [ "# Protein class:\n", "print new_client.protein_class.filter(l6=\"CAMK protein kinase AMPK subfamily\")" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{u'src_description': u'Gene Expression Atlas Compounds', u'src_short_name': u'ATLAS', u'src_id': 26}]\n" ] } ], "source": [ "# Source:\n", "print new_client.source.filter(src_short_name=\"ATLAS\")" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{u'component_id': 375, u'go_slims': [{u'go_id': u'GO:0003676'}, {u'go_id': u'GO:0004518'}, {u'go_id': u'GO:0006259'}, {u'go_id': u'GO:0009058'}, {u'go_id': u'GO:0016740'}, {u'go_id': u'GO:0016779'}, {u'go_id': u'GO:0034641'}, {u'go_id': u'GO:0042802'}, {u'go_id': u'GO:0043167'}], u'component_type': u'PROTEIN', u'sequence': u'PISPIETVPVKLKPGMDGPKVKQWPLTEEKIKALVEICTEMEKEGKISKIGPENPYNTPVFAIKKKDSTKWRKLVDFRELNKRTQDFWEVQLGIPHPAGLKKRKSVTVLDVGDAYFSVPLDEDFRKYTAFTIPSINNETPGIRYQYNVLPQGWKGSPAIFQSSMTKILEPFRKQNPDIVIYQYMDDLYVGSDLEIGQHRTKIEELRQHLLRWGLTTPDKKHQKEPPFLWMGYELHPDKWTVQPIVLPEKDSWTVNDIQKLVGKLNWASQIYPGIRVRQLCKLLRGTKALTEVIPLTEEAELELAENREILKEPVHGVYYDPSKDLIAEIQKQGQGQWTYQIYQEPFKNLRTGKYARMRGAHTNDVKQLTEAVQKITTESIVIWGKTPKFKLPIQKETWETWWTEYWQATWIPEWEFVNTPPLVKLWYQLEKEPIVGAETFYVDGAANRETKLGKAGYVTNRGRQKVVTLTDTTNQKTELQAIYLALQDSGLEVNIVTDSQYALGIIQAQPDQSESELVNQIIEQLIKKEKVYLAWVPAHKGIGGNEQVDKLVSAGIRKVLFLDGID', u'accession': u'Q72547', u'target_component_synonyms': [{u'component_synonym': u'pol', u'syn_type': u'GENE_SYMBOL'}, {u'component_synonym': u'Reverse transcriptase/RNaseH', u'syn_type': u'UNIPROT'}], u'protein_classifications': [{u'protein_classification_id': 646}], u'tax_id': 11676, u'organism': u'Human immunodeficiency virus 1', u'targets': [{u'target_chembl_id': u'CHEMBL247'}], u'description': u'Reverse transcriptase/RNaseH'}\n" ] } ], "source": [ "# Target component:\n", "print new_client.target_component.get(375)" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "COMPOUND\n" ] } ], "source": [ "# ChEMBL ID Lookup: check if CHEMBL1 is a molecule, assay or target:\n", "print new_client.chembl_id_lookup.get(\"CHEMBL1\")['entity_type']\n" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{u'level1_description': u'SYSTEMIC HORMONAL PREPARATIONS, EXCL. ', u'level1': u'H', u'level2': u'H03', u'level3': u'H03A', u'level4': u'H03AA', u'level5': u'H03AA03', u'who_id': u'who1673', u'level4_description': u'Thyroid hormones', u'who_name': u'combinations of levothyroxine and liothyronine', u'level3_description': u'THYROID PREPARATIONS', u'level2_description': u'THYROID THERAPY'}\n" ] } ], "source": [ "# ATC class:\n", "print new_client.atc_class.get('H03AA03')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.11" }, "widgets": { "state": {}, "version": "1.1.2" } }, "nbformat": 4, "nbformat_minor": 0 }