Skip to main content

Scoring Profiles

Scoring profiles let you define custom property thresholds and weights for evaluating molecules against your specific criteria. ChemAudit includes 8 built-in presets and a visual profile builder for creating your own.

Built-in Presets​

Eight immutable presets cover common drug discovery use cases. Presets cannot be edited or deleted, but can be duplicated as a starting point for custom profiles.

PresetKey ThresholdsDescription
Drug-like (Lipinski)MW 0–500, LogP −5 to 5, HBD 0–5, HBA 0–10Lipinski Rule of Five
Lead-likeMW 200–450, LogP −1 to 4, RotB 0–7Lead-like chemical space
Fragment-like (Ro3)MW 0–300, LogP −3 to 3, HBD 0–3, HBA 0–3, RotB 0–3Fragment screening
CNS-penetrantMW 0–400, LogP 1–5, TPSA 0–90, HBD 0–2Blood-brain barrier permeable
Ghose (Amgen)MW 160–480, LogP −0.4 to 5.6, Atoms 20–70, Refractivity 40–130Ghose filter
Veber (GSK)RotB 0–10, TPSA 0–140Oral bioavailability
PPI-likeMW 400–800, LogP 2–6, RotB 5–15Protein-protein interaction space
NP-likeMW 200–800, RotB 0–10, HBD 0–5, Rings 2–20Natural product space

Using Presets​

Navigate to the Profiles page (/profiles) and click the Presets tab. Each preset shows its name, description, and up to 4 key thresholds. Click Apply to set it as your active profile, or Customize to duplicate it as a custom profile.

Custom Profile Builder​

The Custom Builder tab provides a visual editor for creating profiles with precise control over thresholds and weights.

Threshold Properties​

Eight molecular properties can be configured with minimum and maximum thresholds:

PropertySlider RangeStepUnit
Molecular Weight0–100010Da
LogP−5 to 100.5—
TPSA0–3005A²
H-Bond Donors0–101—
H-Bond Acceptors0–201—
Rotatable Bonds0–201—
Aromatic Rings0–101—
Fsp30–10.05—

Each property has a dual-range slider for setting min/max bounds and a weight input (0–2, step 0.1).

Weights​

Weights control how much each property contributes to the composite score. The default weight is 1.0. Higher weights increase the property's influence on the final score. Set a weight to 0 to exclude a property from scoring entirely.

Saving and Sharing​

  • Save — creates or updates a custom profile
  • Reset — restores default thresholds (Lipinski-like)
  • Export — downloads the profile as JSON for sharing
  • Import — loads a profile from a JSON file

How Profile Scoring Works​

Desirability Function​

Each property is evaluated using a desirability function that returns a value between 0 and 1:

  • In range (between min and max): desirability = 1.0
  • Outside range: linear falloff from 1.0 to 0.0 over a distance equal to the range width

For example, with MW thresholds of 200–500 (range width = 300):

MW ValueDesirabilityExplanation
3501.0Within range
2001.0At boundary
6500.550% beyond upper bound
8000.0100% beyond upper bound

Composite Score​

The composite profile score uses a QED-style weighted geometric mean of per-property desirabilities, scaled to 0–100:

Score = (∏ desirability_i ^ weight_i) ^ (1 / Σ weight_i) × 100

This means:

  • A single property with desirability 0 drives the entire score to 0
  • All properties must be reasonably in range for a high score
  • Properties with higher weights have more influence

Per-Property Breakdown​

The scoring result includes a per-property breakdown showing:

{
"profile_id": 1,
"profile_name": "Drug-like (Lipinski)",
"score": 85.3,
"properties": {
"mw": {
"value": 342.1,
"min": 0,
"max": 500,
"in_range": true,
"desirability": 1.0
},
"logp": {
"value": 2.3,
"min": -5,
"max": 5,
"in_range": true,
"desirability": 1.0
}
}
}

Using Profiles in Batch Processing​

Apply During Upload​

In the batch upload flow, expand the Scoring Profile sidebar to select a profile before uploading. The selected profile is applied to every molecule during processing.

# Upload batch with a scoring profile
curl -X POST http://localhost:8001/api/v1/batch/upload \
-F "file=@molecules.sdf" \
-F "profile_id=1"

Profile Score in Results​

When a profile is applied, batch results include a Profile Score column. The batch statistics also report the average profile score across all molecules.

Re-Score with Different Profile​

After processing, you can re-score a subset of molecules with a different profile using the Subset Actions panel — no need to re-upload the file. See Subset Actions for details.

API Reference​

# List all profiles (presets + custom)
curl http://localhost:8001/api/v1/profiles

# Get a single profile
curl http://localhost:8001/api/v1/profiles/1

# Create a custom profile
curl -X POST http://localhost:8001/api/v1/profiles \
-H "Content-Type: application/json" \
-d '{
"name": "My Custom Profile",
"description": "Optimized for CNS targets",
"thresholds": {
"mw": {"min": 150, "max": 400},
"logp": {"min": 1, "max": 4},
"tpsa": {"min": 20, "max": 90},
"hbd": {"min": 0, "max": 2}
},
"weights": {
"mw": 1.0,
"logp": 1.5,
"tpsa": 1.2,
"hbd": 1.0
}
}'

# Update a custom profile (presets return 400)
curl -X PUT http://localhost:8001/api/v1/profiles/9 \
-H "Content-Type: application/json" \
-d '{
"name": "Updated Profile",
"thresholds": {"mw": {"min": 100, "max": 450}}
}'

# Delete a custom profile (presets return 400)
curl -X DELETE http://localhost:8001/api/v1/profiles/9

# Duplicate any profile (including presets)
curl -X POST http://localhost:8001/api/v1/profiles/1/duplicate \
-H "Content-Type: application/json" \
-d '{"name": "My Lipinski Variant"}'

# Export profile as JSON
curl http://localhost:8001/api/v1/profiles/1/export -o profile.json

# Import profile from JSON
curl -X POST http://localhost:8001/api/v1/profiles/import \
-H "Content-Type: application/json" \
-d @profile.json

Profile response:

{
"id": 1,
"name": "Drug-like (Lipinski)",
"description": "Lipinski Rule of Five: MW<500, LogP<5, HBD<=5, HBA<=10",
"thresholds": {
"mw": {"min": 0, "max": 500},
"logp": {"min": -5, "max": 5},
"hbd": {"min": 0, "max": 5},
"hba": {"min": 0, "max": 10}
},
"weights": {
"mw": 1.0,
"logp": 1.0,
"hbd": 1.0,
"hba": 1.0
},
"is_preset": true,
"is_active": true,
"created_at": "2026-02-01T00:00:00Z",
"updated_at": "2026-02-01T00:00:00Z"
}
Preset Protection

Built-in presets cannot be modified or deleted. Attempting to update or delete a preset returns HTTP 400. Use the duplicate endpoint to create an editable copy.

Next Steps​