Skip to content

Bioactivity

molfp.bioactivity

Bioactivity class profiling: analyze fingerprint patterns across activity classes.

Given molecules with activity values (IC50, pIC50, pChEMBL, Ki, pKi), bin them into classes and analyze intra-class similarity vs inter-class separation, plus identify bits enriched in each class.

classify(activities, metric='pchembl', thresholds=None)

Bin activity values into active/intermediate/inactive classes.

Parameters:

Name Type Description Default
activities list[float] | ndarray

list/array of activity values

required
metric str

one of "pchembl", "pic50", "pki" (higher = more active) or "ic50_nm", "ki_nm" (lower = more active)

'pchembl'
thresholds dict[str, float] | None

optional dict with "active" and "inactive" cutoffs (overrides metric defaults)

None

Returns:

Type Description
list[str]

list of class labels ("active", "intermediate", "inactive")

class_similarity(smiles_list, labels, fp_type='ecfp4')

Compute intra-class and inter-class similarity statistics.

Parameters:

Name Type Description Default
smiles_list list[str]

list of SMILES

required
labels list[str]

list of class labels (same length)

required
fp_type str

fingerprint type

'ecfp4'

Returns:

Type Description
dict[str, Any]

dict with: intra_class: {class: {mean, std, min, max, n_pairs}} inter_class: {(class_a, class_b): {mean, std, min, max, n_pairs}} separation: {(class_a, class_b): inter_mean - avg(intra_a, intra_b)} class_counts: {class: count}

enriched_bits(smiles_list, labels, fp_type='ecfp4', min_enrichment=1.5)

Find fingerprint bits enriched in each activity class.

For each class, computes bit frequency and compares to the overall frequency. Enrichment ratio = class_freq / overall_freq.

Parameters:

Name Type Description Default
smiles_list list[str]

list of SMILES

required
labels list[str]

list of class labels

required
fp_type str

fingerprint type

'ecfp4'
min_enrichment float

minimum enrichment ratio to report

1.5

Returns:

Type Description
dict[str, list[tuple[int, float, float, float]]]

dict mapping class → list of (bit_idx, class_freq, overall_freq, enrichment)

dict[str, list[tuple[int, float, float, float]]]

sorted by enrichment descending.

depleted_bits(smiles_list, labels, fp_type='ecfp4', max_depletion=0.5)

Find fingerprint bits depleted (underrepresented) in each activity class.

Depletion ratio = class_freq / overall_freq. Values < max_depletion are reported.

Returns dict mapping class → list of (bit_idx, class_freq, overall_freq, depletion_ratio).

profile(smiles_list, activities, metric='pchembl', thresholds=None, fp_types=None)

Full bioactivity class profiling across multiple fingerprint types.

Parameters:

Name Type Description Default
smiles_list list[str]

list of SMILES

required
activities list[float] | ndarray

list of activity values

required
metric str

activity metric type

'pchembl'
thresholds dict[str, float] | None

optional custom thresholds

None
fp_types list[str] | None

fingerprint types to compare

None

Returns:

Type Description
dict[str, Any]

dict with: labels: class labels for each molecule class_counts: {class: count} fp_results: {fp_type: class_similarity result} best_separator: fp_type with highest mean separation