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–3005
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