CHEESE: AI-Based Tools for Accelerated Drug Discovery

    The CHEESE Platform offers several key tools for (not only) medicinal and computational chemists: CHEESE Search, CHEESE Modeller, CHEESE Electrostatics, and CHEESE Explorer.

    CHEESE Platform Availability

    CHEESE tools are available in a free limited demo version and in premium version, in dedicated and on-premise deployment that provide additional functionality and safety/privacy features.

    Contact us for more info about CHEESE products

    Overview

    The CHEESE Platform offers several key tools for medicinal and computational chemists: CHEESE Search, CHEESE Modeller, CHEESE Electrostatics, and CHEESE Explorer.

    Partial Charges

    CHEESE uses Geometric Transformers to predict partial atomic charges, replacing expensive DFT (Density Functional Theory) calculations. It predicts two AI-derived charge types and computes two classical baselines.

    Charge Types

    Charge TypeMethod
    ESPAIAI-predicted monopole charges fitted to the Connolly surface
    RESPAIAI-predicted restrained ESP (penalized for conformational stability)
    GasteigerClassical electronegativity equalization (RDKit)
    MMFFMerck Molecular Force Field charges (RDKit)

    Training

    • 70,000 DFT calculations on diverse drug-like chemotypes
    • QM level: ωB97X-D/def2-svp (dispersion-corrected DFT with split-valence basis)
    • Validated on an out-of-distribution scaffold-split test set (Morgan Tanimoto < 0.3)

    Model Architecture

    Two parallel Geometric Transformers (one for ESP, one for RESP), each consisting of:

    • transformer.pt (~41 MB) — a geometry-aware transformer that takes atomic features + 3D coordinates and outputs learned representations
    • projection.pt (~2.7 KB) — a final linear layer mapping features to one charge value per atom

    Built on the en-transformer package (equivariant/geometric transformer).

    Input Features

    • Atomic numbers (integer per atom)
    • 3D Cartesian coordinates (from MMFF-optimized conformer)
    • Bond matrix (symmetric adjacency matrix with integer-encoded bond types, 13 states)

    Inference Pipeline

    SMILES stringParse + add H50 conformersMMFF optimizationExtract featuresPyTorch tensorsESP & RESP TransformersGasteiger & MMFF (RDKit)4 charge sets

    Constraints: max 200 atoms; supported elements: C, N, S, O, F, Cl, Br, H only.

    Key References

    • Bayly, C. I.; Cieplak, P.; Cornell, W.; Kollman, P. A. A well-behaved electrostatic potential based method using charge restraints for deriving atomic charges: the RESP model. J. Phys. Chem. 1993.
    • Alenaizan, A.; Burns, L. A.; Sherrill, C. D. Python implementation of the restrained electrostatic potential charge model. Int. J. Quantum Chem. 2020.
    • Gasteiger, J.; Marsili, M. Iterative partial equalization of orbital electronegativity — a rapid access to atomic charges. Tetrahedron Lett. 1978.
    • Tosco, P.; Stiefl, N.; Landrum, G. Bringing the MMFF force field to the RDKit: implementation and validation. J. Cheminform. 2014, 6, 37.

    Conformer Alignment

    Superimpose 3D conformers of a retrieved molecule onto the query molecule to visualise how well their shapes and pharmacophoric features overlap.

    How It Works

    • A set of low-energy 3D conformers is generated for both the query and the probe (retrieved) molecule.
    • Each probe conformer is aligned onto each query conformer using the selected alignment method.
    • The best-scoring pairs are returned with their RMSD, energy, and alignment score.
    • You can interactively switch between conformer pairs in the 3D viewer to inspect the overlap.

    Alignment Methods

    MCS (Maximum Common Substructure)

    Identifies the largest shared substructure between the query and probe molecules, then aligns conformers by superimposing the matched atoms.

    • Finds the maximum common substructure (MCS) between two molecules using RDKit's FMCS algorithm
    • Generates 3D conformer ensembles for both the query and probe molecules
    • Aligns each probe conformer onto each query conformer using the MCS atom mapping
    • Reports RMSD computed over the matched atom pairs
    • Best suited when molecules share a clear common scaffold

    MCS Constrained

    Uses the MCS core as a rigid constraint during conformer generation, then aligns on the constrained atoms. This produces tighter overlaps on the shared scaffold.

    • Identifies the MCS core the same way as the standard MCS method
    • Generates probe conformers with the core atoms constrained to match the reference geometry (ConstrainedEmbed)
    • Non-core atoms are energy-minimised while the core stays fixed
    • Yields lower RMSD on the core but may differ more in peripheral regions
    • Useful when preserving the binding-pose geometry of the shared scaffold is critical

    Open3DAlign

    An unsupervised 3D alignment method that optimises the overlap of molecular volumes and force-field atom types without requiring a predefined atom mapping.

    • Uses the Open3DAlign algorithm implemented in RDKit (GetO3A)
    • Automatically determines the optimal atom-atom mapping based on MMFF94 atom types
    • Maximises a score that combines steric (shape) and electrostatic overlap
    • Does not require a common substructure — works for structurally diverse molecule pairs
    • Returns an alignment score and RMSD for each conformer pair

    When to Use Which Method?

    MethodBest For
    MCSQuery and probe share a clear common scaffold — fast, interpretable alignment based on matched atoms.
    MCS ConstrainedTightest possible overlap on the shared core, e.g. comparing binding poses or evaluating R-group changes around a fixed scaffold.
    Open3DAlignStructurally diverse molecules that may not share a large common substructure — finds the best 3D overlay purely based on shape and atom-type overlap.

    Sources

    • RDKit Molecular Alignment Module — rdkit.Chem.rdMolAlign
    • Landrum, G. 3D MCS-based alignment with RDKit. RDKit Blog, 2022.
    • Tethered minimization of small molecules with RDKit. Discngine Blog, 2019.

    Benchmarks & Property Prediction

    We used the learned molecule representations to train ADMET property prediction models. The newly trained models enable real-time property prediction. We also evaluated our fine-tuned models for property prediction using the TDC (Therapeutics Data Commons) ADMET Benchmarks, and they stand fairly well in most of the tasks.

    BenchmarkMetricOur ScoreBest Score
    CYP2C9_VeithAUPRC ↑0.5890.794
    CYP2D6_VeithAUPRC ↑0.4300.721
    CYP3A4_VeithAUPRC ↑0.6930.882
    CYP2D6_substrateAUPRC ↑0.4670.711
    CYP3A4_substrateAUPRC ↑0.6130.680
    CYP2C9_substrateAUPRC ↑0.2820.437
    Bioavailability_MaAUROC ↑0.6310.748
    HIA_HouAUROC ↑0.8700.988
    Pgp_BroccatelliAUROC ↑0.8250.994
    BBB_MartinsAUROC ↑0.7630.923
    hERGAUROC ↑0.7730.875
    AMESAUROC ↑0.7190.865
    DILIAUROC ↑0.8550.937
    Caco2_WangMAE ↓0.3770.285
    Lipophilicity_AstraZenecaMAE ↓0.5950.533
    Solubility_AqSolDBMAE ↓0.8830.727
    PPBR_AZMAE ↓9.7398.251
    LD50_ZhuMAE ↓0.6400.588

    Evaluation Against SOTA

    Comparison of our models against state-of-the-art molecular search on enumerative databases called Smallworld (used in ZINC22) and random molecule retrieval. 100 search queries with 30 results were performed using each method.

    Our models are clearly better than random search since they are able to retrieve much more similar molecules. They are also beating Smallworld on 2D Morgan and 3D Electrostatic search.

    Case Study: Finding EGFR Inhibitors

    To show the potential application of our tool, we performed a case study where we worked with the human Epidermal Growth Factor Receptor (EGFR). The EGFR has more than 3000 inhibitors in the ZINC15 database.

    Methodology & Results

    • Searched 100 randomly selected inhibitors using our tool
    • Found at least one new inhibitor for 14 of the query inhibitors
    • Discovered 5 new inhibitors from a single query inhibitor
    • Some newly found inhibitors were highly similar in 3D Shape and Electrostatic similarity

    This shows that our tool is able to find molecules with similar binding properties and is very promising to find new inhibitors for a target.

    On-Premise Deployment

    Due to popular demand, our team has dedicated substantial efforts to bring you the on-premise version of CHEESE Search! We understand that many customers prioritize the security of their sensitive data and prefer not to transmit it over the internet. With the introduction of the OnPrem CHEESE, you can now experience all the incredible benefits of CHEESE while maintaining the confidentiality of your data.

    Benefits

    • Complete data privacy — no transmission over internet
    • Deploy on AWS, your own servers, or dedicated instances
    • Full CHEESE functionality with custom database indexing
    • Train models on your own proprietary data
    Contact us for on-premise deployment options

    CHEESE Search API

    If you are interested in integrating CHEESE into your workflows programmatically, the CHEESE API provides molecular search services, property prediction, and more.

    API Base URL

    https://api.cheese.deepmedchem.com/

    Interactive documentation available via Swagger UI

    Public API

    For registered users of CHEESE Search. Includes molecular search and ADMET property prediction.

    On-Premise API

    Advanced features: embedding computation, similarity matrices, visualization, and custom database indexing.

    Authentication

    API calls require an API key. To obtain one:

    1. Go to cheese.deepmedchem.com and sign in
    2. Click "Generate API Key" in the top right corner
    3. Copy the API key and include it in request headers
    Header: X-API-Key: your_api_key_here

    Getting Started (Python)

    # Prerequisites: pip install requests numpy rdkit
    import requests
    import json
    
    MY_URL = "https://api.cheese.deepmedchem.com"
    API_KEY = "your_api_key_here"
    headers = {"X-API-Key": API_KEY, "accept": "application/json"}

    API Endpoints

    GET/test— Health Check

    Verify the API is running and accessible.

    # Python
    response = requests.get(MY_URL + "/test", headers=headers)
    # {"message": "Health check successful !!"}
    # cURL
    curl -X GET 'https://api.cheese.deepmedchem.com/test' \
      -H 'Accept: application/json' \
      -H 'X-API-Key: YOUR_API_KEY'
    GET/available_dbs— List Available Databases

    Returns the list of searchable molecular databases.

    # Python
    response = requests.get(MY_URL + "/available_dbs", headers=headers)
    # cURL
    curl -X GET 'https://api.cheese.deepmedchem.com/available_dbs' \
      -H 'Accept: application/json' \
      -H 'X-API-Key: YOUR_API_KEY'
    GET/random_molecule— Random Molecules

    Returns random molecules in SMILES format from available databases.

    # Python
    params = {"n_mols": 5}
    response = requests.get(MY_URL + "/random_molecule",
        headers=headers, params=params)
    # cURL
    curl -X GET 'https://api.cheese.deepmedchem.com/random_molecule?n_mols=5' \
      -H 'Accept: application/json' \
      -H 'X-API-Key: YOUR_API_KEY'
    GET/molsearch_simple— Simple Search

    Basic molecular similarity search. Returns a list of SMILES strings and database IDs of similar molecules.

    # Python
    params = {
        "search_input": "CC(=O)Oc1ccccc1C(=O)O",
        "search_type": "espsim_shape",
        "n_neighbors": 5,
        "search_quality": "fast",
        "db_names": ["ENAMINE-REAL"],
    }
    
    response = requests.get(MY_URL + "/molsearch_simple",
        params=params, headers=headers)
    # cURL
    curl -X GET 'https://api.cheese.deepmedchem.com/molsearch_simple?search_input=CC(%3DO)Oc1ccccc1C(%3DO)O&search_type=espsim_shape&n_neighbors=5&search_quality=fast&db_names=ENAMINE-REAL' \
      -H 'Accept: application/json' \
      -H 'X-API-Key: YOUR_API_KEY'
    GET/molsearch_array— Search Multiple Molecules

    Search for multiple query molecules at once. Returns results keyed by input SMILES.

    # Python
    params = {
        "search_input": ["CC1=CN(C)N=C1", "CNC1=CC=CC=C1"],
        "search_type": "espsim_shape",
        "n_neighbors": 5,
        "search_quality": "fast",
        "db_names": "ZINC15",
    }
    
    response = requests.get(MY_URL + "/molsearch_array",
        params=params, headers=headers)
    # cURL
    curl -X GET 'https://api.cheese.deepmedchem.com/molsearch_array?search_input=CC1%3DCN(C)N%3DC1&search_input=CNC1%3DCC%3DCC%3DC1&search_type=espsim_shape&n_neighbors=5&search_quality=fast&db_names=ZINC15' \
      -H 'Accept: application/json' \
      -H 'X-API-Key: YOUR_API_KEY'
    GET/batch_search— Batch Search

    Search multiple molecules in batch or centroid mode for consensus results.

    # Python
    params = {
        "search_input": ["SMILES1", "SMILES2", "SMILES3"],
        "search_type": "espsim_shape",
        "n_neighbors": 10,
        "search_mode": "batch",  # or "centroid"
    }
    
    response = requests.get(MY_URL + "/batch_search",
        params=params, headers=headers)
    # cURL
    curl -X GET 'https://api.cheese.deepmedchem.com/batch_search?search_input=SMILES1&search_input=SMILES2&search_input=SMILES3&search_type=espsim_shape&n_neighbors=10&search_mode=batch' \
      -H 'Accept: application/json' \
      -H 'X-API-Key: YOUR_API_KEY'
    ZINC15ENAMINE-REALMCULE-FULLMCULE-IN-STOCKSYNPLEENAMINE-CARBOXYLICEXPLORE-ENUMERATEDEXPLORE-DIVERSECHEMRIYA
    GET/molsearch— Advanced SearchMain Endpoint

    Full-featured molecular search with descriptors, predicted properties, and Morgan Tanimoto similarities.

    Parameters

    ParameterTypeDescription
    search_inputstrSMILES string of the query molecule
    db_namesList[str]Databases to search (e.g. ["ZINC15", "ENAMINE-REAL"])
    search_typestr'morgan', 'espsim_electrostatic', 'espsim_shape', 'active_pairs'
    search_qualitystr'fast', 'accurate', 'very_accurate'
    n_neighborsintNumber of neighbors to retrieve
    descriptorsboolWhether to include molecular descriptors
    propertiesboolWhether to include predicted ADMET properties
    filter_moleculesboolApply molecular filters (e.g. 'No solvents')
    order_moleculesboolWhether to order results
    filteringList[str]Filters: 'PAINS', 'Murcko scaffold hop' (optional)
    orderingList[str]Ordering: 'Morgan Tanimoto' (optional)
    # Python
    params = {
        "search_input": "CC(=O)Oc1ccccc1C(=O)O",
        "search_type": "espsim_shape",
        "n_neighbors": 5,
        "search_quality": "fast",
        "db_names": ["ZINC15"],
        "descriptors": True,
        "properties": True,
        "filter_molecules": False,
        "order_molecules": False,
    }
    
    response = requests.get(MY_URL + "/molsearch",
        params=params, headers=headers)
    # cURL
    curl -X GET 'https://api.cheese.deepmedchem.com/molsearch?search_input=CC(%3DO)Oc1ccccc1C(%3DO)O&search_type=espsim_shape&n_neighbors=5&search_quality=fast&db_names=ZINC15&descriptors=true&properties=true&filter_molecules=false&order_molecules=false' \
      -H 'Accept: application/json' \
      -H 'X-API-Key: YOUR_API_KEY'

    Response Structure

    The response JSON contains:

    • neighbors — List of similar molecules with SMILES, database IDs, embedding distances, properties
    • query_properties — Descriptors and predicted properties of the query molecule
    • search_info — Timing details (embedding, search, filter, sorting, total time)

    Predicted Properties

    Absorption

    caco2_wang, lipophilicity, solubility, bioavailability, HIA, Pgp, cLogP

    Distribution

    PPBR, VDss, BBB penetration

    Metabolism

    CYP2C9, CYP2D6, CYP3A4 inhibition

    Excretion

    Hepatocyte clearance, microsome clearance, half-life

    Toxicity

    LD50, AMES mutagenicity, DILI, hERG liability

    Basics

    MW, formal charge, heavy atoms, HBA, HBD, rotatable bonds, rings, TPSA

    GET/molsearch— With Filtering & Ordering

    Filter out PAINS, enforce scaffold hops, and sort results by Morgan Tanimoto similarity.

    # Python
    params = {
        "search_input": "CC(=O)Oc1ccccc1C(=O)O",
        "search_type": "espsim_shape",
        "n_neighbors": 10,
        "search_quality": "fast",
        "db_names": ["ZINC15"],
        "descriptors": True, "properties": True,
        "filter_molecules": True,
        "order_molecules": True,
        "filtering": ["PAINS", "Murcko scaffold hop"],
        "ordering": ["Morgan Tanimoto"],
    }
    
    response = requests.get(MY_URL + "/molsearch",
        params=params, headers=headers)
    # cURL
    curl -X GET 'https://api.cheese.deepmedchem.com/molsearch?search_input=CC(%3DO)Oc1ccccc1C(%3DO)O&search_type=espsim_shape&n_neighbors=10&search_quality=fast&db_names=ZINC15&descriptors=true&properties=true&filter_molecules=true&order_molecules=true&filtering=PAINS&filtering=Murcko+scaffold+hop&ordering=Morgan+Tanimoto' \
      -H 'Accept: application/json' \
      -H 'X-API-Key: YOUR_API_KEY'

    Note: Filtering may reduce the number of results. Increase n_neighbors to compensate.

    On-Premise Endpoints

    The following endpoints are available exclusively with an on-premise CHEESE installation.

    GET/embeddingsOn-Prem

    Compute CHEESE embeddings (256-dimensional vectors) for molecules.

    # Python
    params = {
        "search_input": ["Fc1ccccc1", "Clc1ccccc1"],
        "save_embs": False,
    }
    
    response = requests.get(MY_URL + "/embeddings",
        params=params, headers=headers)
    # Returns 256-dim vectors per molecule per search type
    # cURL
    curl -X GET 'http://YOUR_ONPREM_URL/embeddings?search_input=Fc1ccccc1&search_input=Clc1ccccc1&save_embs=false' \
      -H 'Accept: application/json'
    GET/centroid_embeddingsOn-Prem

    Retrieve cluster centroid embeddings for databases. Optionally include representative molecules for each cluster.

    # Python
    params = {
        "db_name": "ZINC15",
        "search_type": "espsim_shape",
        "centroid_mols": False,
    }
    
    response = requests.get(MY_URL + "/centroid_embeddings",
        params=params, headers=headers)
    # cURL
    curl -X GET 'http://YOUR_ONPREM_URL/centroid_embeddings?db_name=ZINC15&search_type=espsim_shape&centroid_mols=false' \
      -H 'Accept: application/json'
    GET/similarityOn-Prem

    Compute pairwise similarity between two molecules using euclidean or cosine distance across all similarity metrics.

    # Python
    params = {
        "smiles1": "Fc1ccccc1",
        "smiles2": "Clc1ccccc1",
        "similarity_metric": "all",
        "distance_type": "cosine",
    }
    
    response = requests.get(MY_URL + "/similarity",
        params=params, headers=headers)
    # cURL
    curl -X GET 'http://YOUR_ONPREM_URL/similarity?smiles1=Fc1ccccc1&smiles2=Clc1ccccc1&similarity_metric=all&distance_type=cosine' \
      -H 'Accept: application/json'
    GET/similarity_matrixOn-Prem

    Compute a full pairwise similarity matrix for a list of molecules. Useful for clustering and network analysis.

    # Python
    params = {
        "smiles": ["SMILES1", "SMILES2", "SMILES3"],
        "similarity_metric": "espsim_shape",
        "distance_type": "cosine",
    }
    
    response = requests.get(MY_URL + "/similarity_matrix",
        params=params, headers=headers)
    # cURL
    curl -X GET 'http://YOUR_ONPREM_URL/similarity_matrix?smiles=SMILES1&smiles=SMILES2&smiles=SMILES3&similarity_metric=espsim_shape&distance_type=cosine' \
      -H 'Accept: application/json'
    GET/visualiseOn-Prem

    Generate 2D coordinates for visualization using UMAP or PCA dimensionality reduction. Supports saving coordinates to disk.

    # Python
    params = {
        "search_input": ["Fc1ccccc1", "Clc1ccccc1", "Brc1ccccc1"],
        "search_type": "espsim_electrostatic",
        "visualisation_method": "umap",
    }
    
    response = requests.get(MY_URL + "/visualise",
        params=params, headers=headers)
    # cURL
    curl -X GET 'http://YOUR_ONPREM_URL/visualise?search_input=Fc1ccccc1&search_input=Clc1ccccc1&search_input=Brc1ccccc1&search_type=espsim_electrostatic&visualisation_method=umap' \
      -H 'Accept: application/json'

    Search Types Reference

    morgan — 2D Morgan Fingerprint

    Structural fingerprints (Morgan/ECFP) with Tanimoto similarity. Fast and reliable for structural analogs.

    espsim_shape — 3D Shape Similarity

    Based on 3D surface overlap of the best aligned pair of randomly generated conformers.

    espsim_electrostatic — 3D Electrostatic Similarity

    Best overlap of electrostatic potential (ESP) between aligned conformer pairs. Preserves protein-ligand binding properties.

    active_pairs — Activity-Based Similarity

    Similarity learned from known active compound pairs.

    References

    • Bolcato, Giovanni, Esther Heid, and Jonas Boström. "On the Value of Using 3D Shape and Electrostatic Similarities in Deep Generative Methods." Journal of Chemical Information and Modeling 62.6 (2022): 1388-1398.
    • Huang, Kexin, et al. "Therapeutics data commons: Machine learning datasets and tasks for drug discovery and development." arXiv preprint arXiv:2102.09548 (2021).
    • Sterling, Teague, and John J. Irwin. "ZINC 15–ligand discovery for everyone." Journal of chemical information and modeling 55.11 (2015): 2324-2337.