Pharmacophore Modeling Studio RDKit ETKDG 3D 3D feature search Research guardrails

Extract, model, search
3D pharmacophore hypotheses

Build ligand-based 3D pharmacophore hypotheses from active ligands, inspect HBA/HBD/HYD/ARO/POS/NEG/HAL features, search compound databases, compare actives vs inactives, export query JSON, and create a complete modeling report.

API status
Checking...
Model status
No model yet
Consensus features
Top match
How to create a pharmacophore modeling report
1. Add active ligandsPaste known active molecules with SMILES and IDs.
2. Extract 3D featuresGenerate RDKit 3D conformers and pharmacophore feature centers.
3. Build consensus modelCluster supported features across ligands with tolerance and support.
4. Search & reportScreen compounds, validate active/inactive separation, export report.
This is a strong research workflow for pharmacophore hypothesis generation. For final publication-grade use, validate with bioactive conformations, conformer ensembles, alignment, actives/inactives, docking, SAR, and experiments.
Scientific guardrails
First-pass ligand-based pharmacophore modeling should not be overclaimed. Coordinate clustering is useful for triage, but formal alignment and conformer-ensemble screening are needed for stronger scientific claims.
HBA HBD HYD ARO POS NEG HAL
User outputs
3D feature table Consensus model Query export Search results JSON / HTML / Word / CSV Share report
Active Ligands
3D Feature Map
Extract or build a model to see a 2D projection of 3D pharmacophore feature centers.
HBAHBDHYDAROPOSNEGHAL
Consensus Pharmacophore Model

Build a ligand-based consensus model from supported pharmacophore features across active ligands.

Query JSON

The model/query is automatically copied here after building or exporting.

Active vs Inactive Comparison
Validation Interpretation
A useful pharmacophore should fit known actives better than inactives or decoys. A positive active-inactive score separation improves confidence, but does not replace experimental validation.
Distance Matrix
Model Geometry
Use feature-feature distances to understand the 3D pharmacophore geometry and export query constraints.
Pharmacophore Feature Types
Complete Report Center
Create a complete pharmacophore modeling report, then view it here or download/share it.
Raw JSON
{}
`; } function downloadReport(type){ const data = state.lastReport || state.lastRaw; if(!data || !Object.keys(data).length){ toast('Create a report first','err'); return; } const name = slug(); if(type === 'json') download(`${name}.json`, pretty(data), 'application/json'); if(type === 'html') download(`${name}.html`, reportHTML(), 'text/html'); if(type === 'doc') download(`${name}.doc`, reportHTML(), 'application/msword'); } function featureRowsForCSV(){ return state.lastReport?.model?.features || state.lastModel?.features || state.lastExtract?.features || state.lastFeatures || []; } function downloadCSV(){ const rows = featureRowsForCSV(); if(!rows.length){ toast('No feature rows available','err'); return; } const headers = ['feature_id','type','name','x','y','z','support_count','support_fraction','importance','ligand_id']; const csvRows = rows.map(f=>[ f.feature_id || f.id || '', f.type || '', f.name || '', f.center?.[0] ?? '', f.center?.[1] ?? '', f.center?.[2] ?? '', f.support_count ?? '', f.support_fraction ?? '', f.importance ?? '', f.ligand_id ?? '' ]); const csv = [headers, ...csvRows].map(r=>r.map(x=>`"${String(x).replace(/"/g,'""')}"`).join(',')).join('\n'); download(`${slug()}-features.csv`, csv, 'text/csv'); } async function shareReport(){ const data = state.lastReport || state.lastRaw; if(!data || !Object.keys(data).length){ toast('Create a report first','err'); return; } const text = `Pharmacophore Modeling Report\nFeatures: ${$('kpi-features').textContent || '—'}\nTop match: ${$('kpi-match').textContent || '—'}\nResearch-use only.`; if(navigator.share){ try{ await navigator.share({title:'Pharmacophore Modeling Report', text}); toast('Share sheet opened'); }catch(e){} }else{ navigator.clipboard.writeText(text + '\n\n' + pretty(data).slice(0,3000)); toast('Share text copied'); } } function init(){ initTabs(); loadExample(); healthCheck(); setRaw({ready:true, app:'Pharmacophore Modeling Studio', endpoints:[ '/pharmacophore/gold/health', '/pharmacophore/gold/feature-types', '/pharmacophore/gold/extract-3d', '/pharmacophore/gold/build-model', '/pharmacophore/gold/search', '/pharmacophore/gold/score-compounds', '/pharmacophore/gold/compare-actives-inactives', '/pharmacophore/gold/distance-matrix', '/pharmacophore/gold/export-query', '/pharmacophore/gold/report' ]}); } init();