ADMET Builder: Difference between revisions

From DISI
Jump to navigation Jump to search
No edit summary
m (Updated env paths for all users)
 
(One intermediate revision by one other user not shown)
Line 2: Line 2:


== Introduction ==
== Introduction ==
[[File:ADMET builder webpage.png|thumb]]


As of 7/6/26, '''ADMET Builder''' is an internal Irwin Lab web tool for submitting one or more compounds in SMILES format and receiving OpenADMET prediction results.
As of 7/6/26, '''ADMET Builder''' is an internal Irwin Lab web tool for submitting one or more compounds in SMILES format and receiving OpenADMET prediction results.
Line 20: Line 19:
* Downloadable CSV output
* Downloadable CSV output


[[File:Results.png|thumb]]
[[File:ADMET builder.png|thumb]]
[[File:ADMET builder results.png|thumb]]


Created by Benjamin "Ben" Romero (Undergrad Northwestern University '29), Summer 2026.<br>
Created by Benjamin "Ben" Romero (Undergrad Northwestern University '29), Summer 2026.<br>
Line 33: Line 33:
</pre>
</pre>


Confirm location:
If you do not have access to C7, you can [[Cluster 7|find more information here]].
 
<pre>
hostname
pwd
</pre>


== How to Open Website With SwitchyOmega ==
== How to Open Website With SwitchyOmega ==
Line 56: Line 51:
</pre>
</pre>


If the SOCKS proxy is not running, start it from a Mac terminal:
If the SOCKS proxy is not running, start it from a terminal:


<pre>
<pre>
Line 69: Line 64:


<pre>
<pre>
~/openadmet/admet-builder
/nfs/home/bromero/openadmet/admet-builder
</pre>
</pre>


Line 111: Line 106:
module load anaconda3/2025.06.0
module load anaconda3/2025.06.0
source "$(conda info --base)/etc/profile.d/conda.sh"
source "$(conda info --base)/etc/profile.d/conda.sh"
conda activate openadmet-models
conda activate /nfs/home/bromero/.conda/envs/openadmet-models/
</pre>
</pre>


Line 134: Line 129:
module load anaconda3/2025.06.0
module load anaconda3/2025.06.0
source "$(conda info --base)/etc/profile.d/conda.sh"
source "$(conda info --base)/etc/profile.d/conda.sh"
conda activate openadmet-models
conda activate /nfs/home/bromero/.conda/envs/openadmet-models/
cd ~/openadmet/admet-builder
cd /nfs/home/bromero/openadmet/admet-builder
python app.py
python app.py
</pre>
</pre>
Line 165: Line 160:
module load anaconda3/2025.06.0
module load anaconda3/2025.06.0
source "$(conda info --base)/etc/profile.d/conda.sh"
source "$(conda info --base)/etc/profile.d/conda.sh"
conda activate openadmet-models
conda activate /nfs/home/bromero/.conda/envs/openadmet-models/
cd ~/openadmet/admet-builder
cd /nfs/home/bromero/openadmet/admet-builder
python app.py
python app.py
</pre>
</pre>

Latest revision as of 22:20, 24 July 2026

ADMET Builder (OpenADMET)

Introduction

As of 7/6/26, ADMET Builder is an internal Irwin Lab web tool for submitting one or more compounds in SMILES format and receiving OpenADMET prediction results.

The current backend runs on C7 using the `openadmet-models` conda environment.

ADMET Builder returns:

  • Molecular formula
  • SMILES string
  • RDKit-generated 2D structure image
  • logD
  • Caco-2 A to B permeability
  • Caco-2 B to A permeability
  • Mouse plasma protein binding
  • Human plasma protein binding
  • Downloadable CSV output
ADMET builder.png
ADMET builder results.png

Created by Benjamin "Ben" Romero (Undergrad Northwestern University '29), Summer 2026.
Developed in the Irwin Lab at UCSF.

How to Login

Log into C7:

ssh USER@epsilon.compbio.ucsf.edu

If you do not have access to C7, you can find more information here.

How to Open Website With SwitchyOmega

If using SwitchyOmega, use:

Protocol: SOCKS5
Host: localhost
Port: 1074

Then open:

http://169.230.26.173:8501

If the SOCKS proxy is not running, start it from a terminal:

ssh -f -N -D 1074 USER@epsilon.compbio.ucsf.edu

When finished, switch SwitchyOmega back to Direct.

Where The Website Lives

Project directory on C7:

/nfs/home/bromero/openadmet/admet-builder

Important files:

app.py
static/index.html
static/styles.css
static/app.js
.gitignore

Repository

GitLab repository:

https://gitlab.docking.org/USERNAME/admet-builder

Clone using HTTPS:

git clone https://gitlab.docking.org/USERNAME/admet-builder.git
cd admet-builder

Clone using SSH:

git clone git@gitlab.docking.org:USERNAME/admet-builder.git
cd admet-builder

Environment

The backend uses the OpenADMET conda environment:

module load anaconda3/2025.06.0
source "$(conda info --base)/etc/profile.d/conda.sh"
conda activate /nfs/home/bromero/.conda/envs/openadmet-models/

Python dependencies include:

  • Flask
  • pandas
  • RDKit
  • OpenADMET models package

The OpenADMET model directory is expected at:

~/openadmet/permeability-logd-ppb-chemeleon-baseline/anvil_training

How to Start Backend

On C7:

module load anaconda3/2025.06.0
source "$(conda info --base)/etc/profile.d/conda.sh"
conda activate /nfs/home/bromero/.conda/envs/openadmet-models/
cd /nfs/home/bromero/openadmet/admet-builder
python app.py

The backend runs on:

http://0.0.0.0:8501

The browser URL is:

http://169.230.26.173:8501

Test from C7:

curl http://127.0.0.1:8501

How to Keep Backend Running

Use screen:

screen -S admet-builder
module load anaconda3/2025.06.0
source "$(conda info --base)/etc/profile.d/conda.sh"
conda activate /nfs/home/bromero/.conda/envs/openadmet-models/
cd /nfs/home/bromero/openadmet/admet-builder
python app.py

Detach:

Ctrl-A
D

Reconnect:

screen -r admet-builder

List screens:

screen -ls

Stop backend:

screen -r admet-builder
Ctrl-C
exit

Test Input

Example SMILES input:

CCO
c1ccccc1
CC(=O)Oc1ccccc1C(=O)O

Larger test molecule:

CC(C)Cc1ccc(cc1)[C@@H](C)C(=O)O

Test API With curl

Test the API from C7:

curl -X POST http://127.0.0.1:8501/predict-smiles \
  -H "Content-Type: application/json" \
  -d '{"smiles":["CCO","c1ccccc1","CC(=O)Oc1ccccc1C(=O)O"]}'

Current API Endpoint

Main endpoint:

POST /predict-smiles

Example JSON request:

{
  "smiles": [
    "CCO",
    "c1ccccc1",
    "CC(=O)Oc1ccccc1C(=O)O"
  ]
}

Example response contains:

{
  "csv": "...",
  "rows": [],
  "columns": []
}

The frontend uses this response to display the results table and automatically download the CSV.

How It Works

ADMET Builder has three major parts:

Layer Technology Purpose
Frontend HTML, CSS, JavaScript User interface, SMILES input, results table, and structure image display
Backend API Flask Receives SMILES, runs predictions, and returns results
Prediction Engine OpenADMET Generates ADMET predictions from molecular input

Backend flow:

  1. Receives SMILES strings from the website.
  2. Converts the SMILES into a temporary CSV file.
  3. Runs the OpenADMET command-line prediction tool.
  4. Reads the OpenADMET output CSV.
  5. Uses RDKit to calculate molecular formulas.
  6. Uses RDKit to generate 2D molecular structure images.
  7. Sends results back to the web interface as JSON.
  8. Provides the same results as a downloadable CSV file.

Modularity

ADMET Builder is modular by design. The frontend, backend, and prediction engine are separated so each part can be reused or replaced.

This means:

  • The frontend can be redesigned without changing the model logic.
  • The Flask backend can support new endpoints.
  • Additional OpenADMET models can be added later.
  • Other chemistry tools can be wrapped using the same backend pattern.
  • The results table can be adapted for different prediction outputs.
  • The SMILES-to-structure display can be reused in other cheminformatics apps.
  • The app can serve as a template for future scientific web interfaces.

Because of this structure, ADMET Builder can be used both as a working lab tool and as a starting point for other modular research software.

Output

The output table includes:

Column Meaning
Molecule Molecular formula calculated from the SMILES string
SMILES Input molecule string
Structure Image RDKit-generated 2D molecular structure
logD Predicted distribution coefficient
Caco-2 A to B Predicted apical-to-basolateral permeability
Caco-2 B to A Predicted basolateral-to-apical permeability
Mouse PPB Predicted mouse plasma protein binding
Human PPB Predicted human plasma protein binding

The CSV download contains the same prediction values in a machine-readable format.

Troubleshooting

Site Cannot Be Reached

Check that:

  • Backend is running on C7.
  • The app is running on port 8501.
  • SwitchyOmega is set to SOCKS5 localhost port 1074.
  • The browser is using:
http://169.230.26.173:8501

SwitchyOmega Proxy Error

If Chrome says the proxy failed, the SOCKS proxy may not be running.

Start it from a Mac terminal:

ssh -f -N -D 1074 USER@epsilon.compbio.ucsf.edu

SwitchyOmega should be:

Protocol: SOCKS5
Host: localhost
Port: 1074

Port Already In Use

Check port 8501:

ss -ltnp | grep 8501

Only kill processes owned by you:

kill PID_NUMBER

Missing pandas or Flask

This usually means the conda environment is not active.

Run:

module load anaconda3/2025.06.0
source "$(conda info --base)/etc/profile.d/conda.sh"
conda activate openadmet-models

RDKit Image Error

Make sure the app is running inside the `openadmet-models` environment, which includes RDKit.

Test RDKit:

python -c "from rdkit import Chem; print('rdkit works')"

Notes

ADMET Builder is a research tool. Its predictions are intended for screening, comparison, prioritization, and exploration.

Results should not be treated as experimental measurements.

For office-wide use without SSH/SOCKS tunnels, ADMET Builder should eventually be placed behind an internal hostname or proxy.

Attribution

Created by Benjamin "Ben" Romero (Undergrad Northwestern University '29), Summer 2026.
Developed in the Irwin Lab at UCSF.
Released as part of an open-source UCSF research tool; please credit the creator and lab when using or adapting this work.