Parameter Reference
Complete reference for every parameter in Hedgehog’s YAML configuration files.
config.yml
The main configuration file. Controls input/output paths, parallelism, and references to all stage-specific configs.
| Parameter | Type | Default | Description |
|---|---|---|---|
generated_mols_path | string | src/hedgehog/configs/examples/moses_1000.csv | Path to the CSV file containing generated molecules |
target_mols_path | string | src/hedgehog/configs/examples/target_mols.csv | Path to the CSV file containing reference molecules |
folder_to_save | string | results/run | Output directory where all pipeline results are saved |
n_jobs | int | -1 | Number of parallel workers for CPU-bound tasks (-1 = all available cores. Prefer an explicit smaller number such as 4 or 8.) |
sample_size | int | 10000 | Number of molecules to sample from the input file (null = use all) |
batch_size | int | 512 | Batch size for descriptor computation and other batched operations |
save_sampled_mols | bool | true | Whether to save the sampled molecule subset to disk |
large_dataset_mode | bool | false | Enable streaming chunked processing for very large pre-docking dataset statistics |
large_dataset_chunk_rows | int | 250000 | Rows per processing chunk in large dataset mode |
large_dataset_single_csv_limit | int | 1000000 | Maximum row count for also materializing compatibility CSV files from shard outputs |
large_dataset_output_format | string | csv.gz | Shard file format for large dataset row-level intermediate tables |
large_dataset_filter_data | bool | false | In large dataset mode, whether filter pass/fail results should remove molecules from downstream outputs |
large_dataset_enable_all_filters | bool | true | In large dataset mode, enable configured descriptor/structural filters as calculations even when they do not filter outputs |
pains_file_path | string | src/hedgehog/vendor/moleval/metrics/wehi_pains.csv | Path to the PAINS filter definitions file |
mcf_file_path | string | src/hedgehog/vendor/moleval/metrics/mcf.csv | Path to the MCF definitions file |
ligand_preparation_tool | string | (proprietary path) | Absolute path to an external ligand preparation binary |
protein_preparation_tool | string | (proprietary path) | Absolute path to an external protein preparation binary |
config_mol_prep | string | src/hedgehog/configs/config_mol_prep.yml | Path to the preprocessing stage config |
config_descriptors | string | src/hedgehog/configs/config_descriptors.yml | Path to the descriptors stage config |
config_structFilters | string | src/hedgehog/configs/config_structFilters.yml | Path to the structural filters stage config |
config_synthesis | string | src/hedgehog/configs/config_synthesis.yml | Path to the synthesis stage config |
config_docking | string | src/hedgehog/configs/config_docking.yml | Path to the docking stage config |
config_docking_filters | string | src/hedgehog/configs/config_docking_filters.yml | Path to the docking filters stage config |
config_weighted_score | string | src/hedgehog/configs/config_weighted_score.yml | Path to the weighted model assessment config |
config_moleval | string | src/hedgehog/configs/config_moleval.yml | Path to the MolEval reporting config |
config_mol_prep.yml
Preprocessing. Standardizes molecules before any descriptor computation. This stage aims to produce “clean” molecules by:
- removing salts and solvents and keeping the largest fragment
- disconnecting metals
- canonicalizing tautomers
- removing stereochemistry
- applying strict filters (allowed atom whitelist, no radicals, no isotopes, single fragment)
General Settings
| Parameter | Type | Default | Description |
|---|---|---|---|
run | bool | true | Enable or disable preprocessing |
n_jobs | int | -1 | Worker count for molecule preparation |
filters.allowed_atoms | list[string] | [C, N, O, S, F, Cl, Br, I, P, H] | Allowed atom symbols |
filters.require_single_fragment | bool | true | Reject multi-fragment molecules |
filters.reject_radicals | bool | true | Reject molecules with radical electrons |
filters.reject_isotopes | bool | true | Reject isotopically labeled molecules |
output.write_duplicates_removed | bool | true | Write duplicates_removed.csv when duplicates are dropped |
config_descriptors.yml
Descriptors. Controls molecular descriptor calculation, filtering borders, and plotting options.
General Settings
The descriptors stage applies both layers together:
bordersdefine generic descriptor ranges such asmolWt,logP,TPSA,hbd,hba,n_rings, andfsp3.structural_constraintsare converted into additional upper bound checks on derived descriptor columns.
Use borders to shape broad property space and structural_constraints to cap
specific motifs that can still pass those broad ranges.
Plotting Settings
| Parameter | Type | Description |
|---|---|---|
filtered_cols_to_plot | list[string] | Descriptor columns to include in filtered distribution plots |
discrete_features_to_plot | list[string] | Columns treated as discrete (bar charts instead of KDE) |
not_to_smooth_plot_by_sides | list[string] | Columns where KDE side-smoothing is disabled |
renamer | dict[string, string] | Display names for descriptors in plot labels |
config_structFilters.yml
Structural Filters. Controls structural alert screening and medicinal chemistry filters. Molecules flagged by enabled filters are removed from the pipeline.
General Settings
| Parameter | Type | Default | Description |
|---|---|---|---|
run | bool | true | Enable or disable the structural filters stage |
filter_data | bool | true | Whether to actually remove flagged molecules from downstream stages |
parse_input_n_jobs | int | -1 | Worker count for parsing input molecules |
write_per_filter_outputs | bool | true | Write per filter output folders and CSVs |
generate_plots | bool | true | Generate structural filter plots |
generate_failure_analysis | bool | true | Generate failure-analysis outputs |
combine_in_memory | bool | true | Combine enabled filter results in memory before writing the final output |
parallel_scheduler | string | processes | Default scheduler for parallel filter execution |
Structural Filter Profiles
The default structural filter configuration is the exploration profile in
config_structFilters.yml. Three named ready-to-use profile files are shipped
alongside it:
config_structFilters_strict.yml- conservative profile for high-confidence hygiene screeningconfig_structFilters_balanced.yml- practical mid-conservatism profileconfig_structFilters_exploration.yml- least conservative profile for retaining more chemistry diversity
config_synthesis.yml
Synthesis Feasibility. Controls the retrosynthesis feasibility stage, including synthesizability score thresholds.
| Parameter | Type | Default | Description |
|---|---|---|---|
run | bool | true | Enable or disable the synthesis stage |
n_jobs | int | -1 | Worker count for synthesis scoring and retrosynthesis (-1/0 = auto/all available cores) |
enabled_scores | list | sa, syba, rascore, sync, scscore, nonpher, fsscore, gasa | Synthesis score calculators to run. Optional scorers return NaN with warnings when their external dependencies are not configured |
run_retrosynthesis | bool | true | Run AiZynthFinder retrosynthetic analysis |
filter_solved_only | bool | true | Keep only molecules for which a retrosynthetic route was found |
sa_score_min | float | 1 | Minimum synthetic accessibility score (Ertl) |
sa_score_max | float | 4.5 | Maximum synthetic accessibility score (lower = easier to synthesize) |
syba_score_min | float | 0 | Minimum SYBA score (Bayesian synthesizability) |
syba_score_max | float | inf | Maximum SYBA score |
ra_score_min | float | 0.5 | Minimum retrosynthetic accessibility score |
ra_score_max | float | 1 | Maximum retrosynthetic accessibility score |
sync_auto_install | bool | true | Download the SYNC checkpoint automatically when it is missing |
sync_device | string | cpu | Torch device for SYNC inference |
sync_conformer_seed | int | 61453 | RDKit ETKDG conformer seed for SYNC inputs |
fsscore_python | string | null | null | Python interpreter for isolated FSScore worker environment |
fsscore_model_path | string | null | null | Explicit FSScore checkpoint path (*.ckpt) |
fsscore_repo_path | string | null | null | Optional FSScore checkout path used to resolve models/pretrain_graph_GGLGGL_ep242_best_valloss.ckpt |
fsscore_batch_size | int | 128 | Batch size passed to fsscore.score |
fsscore_num_workers | int | null | null | Optional dataloader worker count passed to fsscore.score |
score_filters | object | {} | Optional min/max filters for additional score columns such as sync_score, sc_score, nonpher_complexity_score, fs_score, or gasa_score |
gasa.command | string | null | Optional local command template for batch gasa scoring using {input} and {output} placeholders |
gasa.executable | string | null | Optional local executable path/name used for gasa scoring (<exe> --smiles <SMILES>) |
gasa.api_url | string | null | Optional local loopback HTTP endpoint for gasa scoring (POST {"smiles": ...}) |
gasa.timeout_seconds | float | 30 | Timeout per gasa backend call |
config_docking.yml
Docking. Controls molecular docking using SMINA, GNINA, Matcha, or any explicit combination of them. Defines the receptor, search box, and engine-specific parameters.
General Settings
| Parameter | Type | Default | Description |
|---|---|---|---|
run | bool | true | Enable or disable the docking stage |
tools | string | gnina | Docking engine selection: all, gnina, smina, matcha, or a comma-separated list such as gnina,matcha |
receptor_pdb | string | src/hedgehog/configs/examples/7EW9_apo.pdb | Path to the receptor PDB file |
auto_run | bool | true | Automatically start docking after ligand preparation |
run_in_background | bool | false | Run docking as a background process |
prepare_ligands | bool | false | Use external ligand preparation before docking. false keeps the input molecule mapping as close to 1:1 as possible; true may expand one input molecule into multiple prepared ligands |
gnina_per_process_cpu | int | gnina_config.cpu | CPU threads per GNINA process in per molecule mode |
gnina_parallel_jobs_max | int | 6 | Upper bound for auto GNINA per molecule job count |
SMINA Configuration (smina_config)
| Parameter | Type | Default | Description |
|---|---|---|---|
bin | string | smina | Path or name of the SMINA binary (resolved via PATH if not absolute) |
autobox_ligand | string | src/hedgehog/configs/examples/05C_from_7EW9.sdf | Reference ligand SDF for automatic search box definition |
autobox_add | float | 4 | Padding (Angstroms) added to each side of the autobox |
cpu | int | 32 | Number of CPU threads for docking |
seed | int | 42 | Random seed for reproducibility |
exhaustiveness | int | 8 | Search exhaustiveness (higher = more thorough, slower) |
num_modes | int | 1 | Maximum number of binding modes to generate per ligand |
GNINA Configuration (gnina_config)
| Parameter | Type | Default | Description |
|---|---|---|---|
bin | string | gnina | Path or name of the GNINA binary (resolved via PATH if not absolute) |
autobox_ligand | string | src/hedgehog/configs/examples/05C_from_7EW9.sdf | Reference ligand SDF for automatic search box definition |
autobox_add | float | 4 | Padding (Angstroms) added to each side of the autobox |
cpu | int | 8 | Number of CPU threads for docking |
seed | int | 42 | Random seed for reproducibility |
no_gpu | bool | false | Disable GPU acceleration (false keeps GPU enabled when available) |
num_modes | int | 1 | Maximum number of binding modes to generate per ligand |
Matcha Configuration (matcha_config)
| Parameter | Type | Default | Description |
|---|---|---|---|
checkout_dir | string | modules/matcha_remote | Managed Matcha checkout directory populated from GitHub |
uv_bin | string | uv | Launcher used to invoke Matcha |
autobox_ligand | string | src/hedgehog/configs/examples/05C_from_7EW9.sdf | Optional Matcha autobox reference ligand |
device | string | auto | Matcha device selection (auto, cpu, cuda, cuda:N, mps) |
n_samples | int | 20 | Number of Matcha poses generated per ligand |
scorer | string | gnina | Matcha scorer mode (gnina, custom, none) |
scorer_minimize | bool | true | Minimize poses during Matcha GNINA scoring |
physical_only | bool | false | Keep only physically valid poses in Matcha outputs |
keep_workdir | bool | false | Preserve Matcha internal work directory after the run |
When prepare_ligands is true, one input molecule may produce several
prepared ligands. This can change row counts and downstream mapping. Keep it
false for the default 1:1-oriented docking path unless you explicitly need an
external preparation workflow.
config_docking_filters.yml
Three-Dimensional Filters. Post-docking 3D filters evaluate the quality of docked poses and remove poor candidates. Five independent filters can be combined with all (every filter must pass) or any (at least one must pass) aggregation.
General Settings
| Parameter | Type | Default | Description |
|---|---|---|---|
run | bool | true | Enable or disable the docking filters stage |
run_after_docking | bool | true | Automatically run after the docking stage completes |
input_sdf | string | null | null | Path to input SDF; if null, uses docking output |
receptor_pdb | string | null | null | Path to receptor PDB; if null, uses docking config value |
Aggregation
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | all | all = molecule must pass every enabled filter; any = pass at least one |
save_metrics | bool | true | Save detailed per molecule metrics to a CSV file |
save_failed | bool | false | Save molecules that failed filtering to a separate file |
Deduplication
Docking can produce multiple poses per molecule when num_modes is greater than 1 (the default config uses num_modes: 1). After filtering, the pipeline deduplicates to unique molecules:
- All passing poses are saved to
filtered_poses.csv(full pose-level detail) - Poses are sorted by
minimizedAffinity(best affinity first) - For each unique
mol_idx, only the best-scoring pose is kept - Deduplicated molecules are saved to
filtered_molecules.csv
SMILES for the output are taken from the original ligands.csv (2D SMILES) rather than regenerated from 3D coordinates, which preserves the original stereochemistry encoding.
config_weighted_score.yml
Controls the post-run Generator Reality Assessment used by HTML reporting and RUN_INFO.md.
The scorecard is explainable and intended to rank generator behavior, not to estimate hit probability. It also reports a secondary Final Candidate Pool Quality score for the survivor set.
General Settings
| Parameter | Type | Default | Description |
|---|---|---|---|
run | bool | true | Enable or disable weighted model scoring output |
version | string | v1 | Internal scorecard schema version |
mode | string | generator_reality | Scoring mode label for the gate-aware generator score |
target_final_count | int | 100 | Target final count retained for secondary candidate-pool yield scoring |
target_final_retention | float | 0.10 | Target final retention rate for generator yield scoring |
confidence.min_final_molecules_high | int | 100 | Minimum final molecules for high confidence |
confidence.min_final_molecules_medium | int | 30 | Minimum final molecules for medium confidence |
Component Weights (weights)
| Parameter | Type | Default | Description |
|---|---|---|---|
weights.yield | float | 0.30 | Weight for final retention against target |
weights.physchem | float | 0.15 | Weight for descriptor all pass gate survival |
weights.structural | float | 0.25 | Weight for structural stage survival |
weights.synthesis | float | 0.10 | Weight for synthesis component |
weights.docking_pose | float | 0.15 | Weight for docking/pipeline pose component |
weights.diversity | float | 0.05 | Weight for diversity metrics component |
Weights are normalized over all configured components before scoring. When one component is unavailable, it is simply excluded, and the effective average is recomputed from the remaining available components.
physchem is measured from stages/02_descriptors_initial/filtered/pass_flags.csv as an all pass descriptor gate rate, so it reflects the early generated set rather than the final survivor pool. The mean flag pass rate is retained as evidence only. structural uses the stage survival rate from filtered and failed molecules, with the weakest structural filter as supporting evidence. Final descriptor files are used only as a fallback for older or partial runs. synthesis and docking_pose similarly prefer full stage evaluation artifacts before filtered or final survivor files.
Secondary Candidate Pool Weights (candidate_pool_weights)
candidate_pool_weights control the secondary Final Candidate Pool Quality score. It keeps the older survivor-pool interpretation: final-count yield saturation, mean descriptor flag pass rate, mean structural flag pass rate, and the same synthesis/docking/diversity formulas.
Yield and Structural Settings
| Parameter | Type | Default | Description |
|---|---|---|---|
yield.mode | string | retention | Use final retention for the generator score; absolute restores count-saturation yield |
yield.target_final_retention | float | 0.10 | Retention rate that maps to a full yield score |
yield.count_weight | float | 0.70 | Count-saturation weight for secondary candidate-pool yield |
yield.retention_weight | float | 0.30 | Log-retention weight for secondary candidate-pool yield |
structural.stage_pass_weight | float | 0.80 | Weight for structural stage survival |
structural.worst_filter_weight | float | 0.20 | Weight for the weakest structural filter pass rate |
Hard Caps (hard_caps)
Hard caps prevent a model from receiving a high generator score when an early AND-gate rejects most molecules.
| Parameter | Type | Default | Description |
|---|---|---|---|
hard_caps.structural_stage_pass_rate_below | float | 0.20 | Trigger threshold for structural stage survival |
hard_caps.structural_stage_pass_rate_cap | float | 60.0 | Maximum score after structural cap trigger |
hard_caps.descriptor_all_pass_rate_below | float | 0.50 | Trigger threshold for descriptor all pass survival |
hard_caps.descriptor_all_pass_rate_cap | float | 70.0 | Maximum score after descriptor cap trigger |
hard_caps.final_retention_rate_below | float | 0.05 | Trigger threshold for final retention |
hard_caps.final_retention_rate_cap | float | 70.0 | Maximum score after retention cap trigger |
Docking Thresholds (docking)
| Parameter | Type | Default | Description |
|---|---|---|---|
docking.bad_affinity | float | -6.0 | Affinity at which docking contribution starts to approach zero |
docking.good_affinity | float | -9.0 | Affinity at which docking affinity contribution reaches upper bound |
docking.bad_cnnscore | float | 0.35 | GNINA CNN score lower bound |
docking.good_cnnscore | float | 0.85 | GNINA CNN score upper bound |
docking.bad_cnnaffinity | float | 4.5 | CnnAffinity lower bound |
docking.good_cnnaffinity | float | 6.5 | CnnAffinity upper bound |
Increase strictness by moving bad_* upward and good_* downward, or relax by widening the interval.
Synthesis Thresholds (synthesis)
| Parameter | Type | Default | Description |
|---|---|---|---|
synthesis.sa_min | float | 1.0 | Easier-to-synthesize SA floor |
synthesis.sa_max | float | 4.5 | Harder-to-synthesize SA ceiling |
synthesis.ra_min | float | 0.5 | Minimum retrosynthetic accessibility minimum |
synthesis.ra_max | float | 1.0 | Retrosynthetic accessibility maximum |
synthesis.syba_midpoint | float | 0.0 | Sigmoid midpoint for SYBA |
synthesis.syba_scale | float | 50.0 | Sigmoid width for SYBA |
synthesis.target_search_time_sec | float | 30.0 | Reference retrosynthesis search time |
synthesis.search_time_scale_sec | float | 20.0 | Search-time penalty scale |
Raise or lower these to bias toward faster/easier synthetic routes.
config_moleval.yml
Controls generative evaluation metrics computed during report generation. These metrics assess diversity, scaffold coverage, and basic filter pass rates across pipeline stages.
General Settings
| Parameter | Type | Default | Description |
|---|---|---|---|
run | bool | true | Enable or disable MolEval metric computation |
n_jobs | int | -1 | Number of parallel workers for metric computation (-1 = all available cores) |
device | string | cpu | Compute device: cpu or cuda:0 (for neural metrics) |
max_molecules | int | 2000 | Subsample threshold for O(N^2) metrics; datasets larger than this are subsampled |
Metric Groups
Each flag enables or disables a group of related metrics.
| Parameter | Type | Default | Description |
|---|---|---|---|
validity | bool | false | Compute validity rate (disabled by default — always 1.0 after RDKit parsing) |
uniqueness | bool | false | Compute uniqueness rate (disabled by default — always 1.0 after deduplication) |
internal_diversity | bool | true | Compute IntDiv1 and IntDiv2 (intra-set Tanimoto diversity) |
se_diversity | bool | true | Compute sphere-exclusion diversity (SEDiv) |
scaffold_diversity | bool | true | Compute ScaffDiv and ScaffUniqueness (Murcko scaffold analysis) |
functional_groups | bool | true | Compute functional group diversity ratio (FG) |
ring_systems | bool | true | Compute ring system diversity ratio (RS) |
filters | bool | true | Compute MCF + PAINS filter passage rate |
mce18 | bool | true | Compute mean MCE-18 molecular complexity score |