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 productsOverview
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 Type | Method |
|---|---|
ESPAI | AI-predicted monopole charges fitted to the Connolly surface |
RESPAI | AI-predicted restrained ESP (penalized for conformational stability) |
Gasteiger | Classical electronegativity equalization (RDKit) |
MMFF | Merck 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 representationsprojection.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
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?
| Method | Best For |
|---|---|
MCS | Query and probe share a clear common scaffold — fast, interpretable alignment based on matched atoms. |
MCS Constrained | Tightest possible overlap on the shared core, e.g. comparing binding poses or evaluating R-group changes around a fixed scaffold. |
Open3DAlign | Structurally diverse molecules that may not share a large common substructure — finds the best 3D overlay purely based on shape and atom-type overlap. |
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.
| Benchmark | Metric | Our Score | Best Score |
|---|---|---|---|
| CYP2C9_Veith | AUPRC ↑ | 0.589 | 0.794 |
| CYP2D6_Veith | AUPRC ↑ | 0.430 | 0.721 |
| CYP3A4_Veith | AUPRC ↑ | 0.693 | 0.882 |
| CYP2D6_substrate | AUPRC ↑ | 0.467 | 0.711 |
| CYP3A4_substrate | AUPRC ↑ | 0.613 | 0.680 |
| CYP2C9_substrate | AUPRC ↑ | 0.282 | 0.437 |
| Bioavailability_Ma | AUROC ↑ | 0.631 | 0.748 |
| HIA_Hou | AUROC ↑ | 0.870 | 0.988 |
| Pgp_Broccatelli | AUROC ↑ | 0.825 | 0.994 |
| BBB_Martins | AUROC ↑ | 0.763 | 0.923 |
| hERG | AUROC ↑ | 0.773 | 0.875 |
| AMES | AUROC ↑ | 0.719 | 0.865 |
| DILI | AUROC ↑ | 0.855 | 0.937 |
| Caco2_Wang | MAE ↓ | 0.377 | 0.285 |
| Lipophilicity_AstraZeneca | MAE ↓ | 0.595 | 0.533 |
| Solubility_AqSolDB | MAE ↓ | 0.883 | 0.727 |
| PPBR_AZ | MAE ↓ | 9.739 | 8.251 |
| LD50_Zhu | MAE ↓ | 0.640 | 0.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
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.
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:
- Go to cheese.deepmedchem.com and sign in
- Click "Generate API Key" in the top right corner
- Copy the API key and include it in request headers
Getting Started (Python)
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
/test— Health CheckVerify the API is running and accessible.
response = requests.get(MY_URL + "/test", headers=headers)
# {"message": "Health check successful !!"}curl -X GET 'https://api.cheese.deepmedchem.com/test' \ -H 'Accept: application/json' \ -H 'X-API-Key: YOUR_API_KEY'
/available_dbs— List Available DatabasesReturns the list of searchable molecular databases.
response = requests.get(MY_URL + "/available_dbs", headers=headers)
curl -X GET 'https://api.cheese.deepmedchem.com/available_dbs' \ -H 'Accept: application/json' \ -H 'X-API-Key: YOUR_API_KEY'
/random_molecule— Random MoleculesReturns random molecules in SMILES format from available databases.
params = {"n_mols": 5}
response = requests.get(MY_URL + "/random_molecule",
headers=headers, params=params)curl -X GET 'https://api.cheese.deepmedchem.com/random_molecule?n_mols=5' \ -H 'Accept: application/json' \ -H 'X-API-Key: YOUR_API_KEY'
/molsearch_simple— Simple SearchBasic molecular similarity search. Returns a list of SMILES strings and database IDs of similar molecules.
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 -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'
/molsearch_array— Search Multiple MoleculesSearch for multiple query molecules at once. Returns results keyed by input SMILES.
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 -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'
/batch_search— Batch SearchSearch multiple molecules in batch or centroid mode for consensus results.
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 -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'
/molsearch— Advanced SearchMain EndpointFull-featured molecular search with descriptors, predicted properties, and Morgan Tanimoto similarities.
Parameters
| Parameter | Type | Description |
|---|---|---|
search_input | str | SMILES string of the query molecule |
db_names | List[str] | Databases to search (e.g. ["ZINC15", "ENAMINE-REAL"]) |
search_type | str | 'morgan', 'espsim_electrostatic', 'espsim_shape', 'active_pairs' |
search_quality | str | 'fast', 'accurate', 'very_accurate' |
n_neighbors | int | Number of neighbors to retrieve |
descriptors | bool | Whether to include molecular descriptors |
properties | bool | Whether to include predicted ADMET properties |
filter_molecules | bool | Apply molecular filters (e.g. 'No solvents') |
order_molecules | bool | Whether to order results |
filtering | List[str] | Filters: 'PAINS', 'Murcko scaffold hop' (optional) |
ordering | List[str] | Ordering: 'Morgan Tanimoto' (optional) |
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 -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, propertiesquery_properties— Descriptors and predicted properties of the query moleculesearch_info— Timing details (embedding, search, filter, sorting, total time)
Predicted Properties
caco2_wang, lipophilicity, solubility, bioavailability, HIA, Pgp, cLogP
PPBR, VDss, BBB penetration
CYP2C9, CYP2D6, CYP3A4 inhibition
Hepatocyte clearance, microsome clearance, half-life
LD50, AMES mutagenicity, DILI, hERG liability
MW, formal charge, heavy atoms, HBA, HBD, rotatable bonds, rings, TPSA
/molsearch— With Filtering & OrderingFilter out PAINS, enforce scaffold hops, and sort results by Morgan Tanimoto similarity.
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 -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.
/embeddingsOn-PremCompute CHEESE embeddings (256-dimensional vectors) for molecules.
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 typecurl -X GET 'http://YOUR_ONPREM_URL/embeddings?search_input=Fc1ccccc1&search_input=Clc1ccccc1&save_embs=false' \ -H 'Accept: application/json'
/centroid_embeddingsOn-PremRetrieve cluster centroid embeddings for databases. Optionally include representative molecules for each cluster.
params = {
"db_name": "ZINC15",
"search_type": "espsim_shape",
"centroid_mols": False,
}
response = requests.get(MY_URL + "/centroid_embeddings",
params=params, headers=headers)curl -X GET 'http://YOUR_ONPREM_URL/centroid_embeddings?db_name=ZINC15&search_type=espsim_shape&centroid_mols=false' \ -H 'Accept: application/json'
/similarityOn-PremCompute pairwise similarity between two molecules using euclidean or cosine distance across all similarity metrics.
params = {
"smiles1": "Fc1ccccc1",
"smiles2": "Clc1ccccc1",
"similarity_metric": "all",
"distance_type": "cosine",
}
response = requests.get(MY_URL + "/similarity",
params=params, headers=headers)curl -X GET 'http://YOUR_ONPREM_URL/similarity?smiles1=Fc1ccccc1&smiles2=Clc1ccccc1&similarity_metric=all&distance_type=cosine' \ -H 'Accept: application/json'
/similarity_matrixOn-PremCompute a full pairwise similarity matrix for a list of molecules. Useful for clustering and network analysis.
params = {
"smiles": ["SMILES1", "SMILES2", "SMILES3"],
"similarity_metric": "espsim_shape",
"distance_type": "cosine",
}
response = requests.get(MY_URL + "/similarity_matrix",
params=params, headers=headers)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'
/visualiseOn-PremGenerate 2D coordinates for visualization using UMAP or PCA dimensionality reduction. Supports saving coordinates to disk.
params = {
"search_input": ["Fc1ccccc1", "Clc1ccccc1", "Brc1ccccc1"],
"search_type": "espsim_electrostatic",
"visualisation_method": "umap",
}
response = requests.get(MY_URL + "/visualise",
params=params, headers=headers)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.
