Files
p2rank/breaking-changes.md
rdk 6fad858bc6 Audit follow-ups: bug fix, doc refresh, exception taxonomy, test hardening
Bug fix:
- PrincipalMomentsDescriptor.clampNonNegative now also clamps NaN. The
  v<0 check was false for NaN, so a NaN eigenvalue (possible if a future
  code path bypasses GridGenerator.isFiniteBox) would have propagated
  to the CSV output.

Doc refresh:
- breaking-changes.md: 2.6 entry for the multi-column descriptor
  migration + the -vis_pocket_grid / pocket_grid_vis_* renames.
- export-pocket-descriptors.md: step 4 rewrites a self-contradicting
  rationale — adding to the default list IS a breaking change for
  index-based parsers; recommends parse-by-name + breaking-changes.md
  note for future additions.
- export-pocket-grid.md: added "Adding a new per-grid-point descriptor"
  recipe (parallel to the per-pocket one); unified √3/2 precision to
  0.866 across docs and Params.groovy.
- README.md: added an "Opt-in tabular exports" subsection mentioning
  -export_pocket_descriptors, -export_pocket_grid, -vis_pocket_grid.
- testsets.sh "Full descriptor menu" now lists all seven shipped
  descriptors (was six).

Exception taxonomy:
- PocketDescriptorsRows.groovy and PocketGridBuilder.java now throw
  PrankException (was IllegalArgumentException) for user-facing config
  errors, matching the rest of the codebase.

Registry hardening:
- Both PocketDescriptorRegistry and PocketGridPointDescriptorRegistry
  now assert columnNames.size() == columnTypes.size() in register().
  A future descriptor with mismatched lists fails fast at class-load.

Quality fixes:
- PocketGridRows.getColumn uses BASE_COLS-1 instead of literal 3 for
  the pocket column. Removed dead 2-arg PocketGridRows constructor
  (only 3 test sites used it; now inlined).
- PocketGridPointContext gets a compact-constructor validator that
  rejects negative pointIndex/pocketRank, limiting blast radius of an
  int-arg swap.

Test hardening:
- VolsiteSmoothGridPointDescriptorTest + VolsiteGridPointDescriptorTest
  now pin sigma/radius in @BeforeEach AND restore in @AfterEach, so
  the Params singleton is clean for subsequent test classes.
- New tests: HIS ND1 double-flag (single atom setting donor+acceptor),
  PrincipalMoments at cardinality=2, PrincipalMoments two coincident
  points, GridGenerator NaN-box throw, PocketDescriptorRegistry
  register/unregister round-trip, MorphologicalCloser maxIters=1.
- Renamed respectsMaxIters → maxItersZeroIsNoOp (the test only covered
  the maxIters=0 case despite the general name); added maxIters=1
  companion that verifies one iteration of fill actually runs.
- Extracted RendererTestFixtures.tinyGrid (was byte-identical in both
  renderer test files); unified the volsite atomAt signatures so the
  parameter order can't get swapped between the two volsite tests.
2026-05-19 15:36:12 +02:00

4.3 KiB

Breaking changes

Introduction

This file collects backwards incompatible changes that have potential to break code that uses P2Rank.

These include:

  • changes in the command line interface
  • changes in the input/output format
  • changes in default behaviour

All changes of that type should be rare and should be all listed here.

List of changes

2.6

Evaluation
  • Ligand detection was fixed (e7fc457f) to include nucleotide ligands (GDP, GTP, ATP — classified by BioJava as NUCLEOTIDE) and amino-acid-derivative ligands (SHR-like — classified as AMINOACID) that were previously skipped because only GroupType.HETATM qualified. Any non-water group in a NONPOLYMER chain now qualifies regardless of GroupType. This changes the relevant-ligand set on datasets containing such ligands, which moves DCA/DCC numerator and denominator and thus the reported success rates.
  • For additional internal evaluation-criterion fixes during the 2.6 dev cycle see documentation/dev/evaluation-metric-fixes-2.6.md.
Pocket-descriptors export (opt-in feature)
  • Per-pocket descriptors -export_pocket_descriptors underwent a multi-column interface migration. The shipped default list now contains seven descriptors (previously six), adds principal_moments (a 3-column descriptor emitting principal_moments.lambda1/lambda2/lambda3), and reorders the existing six so num_* come first. Scripts parsing the descriptors CSV/Arrow/Parquet output by column name are unaffected; scripts parsing by column index need updating. See documentation/export-pocket-descriptors.md.
  • New opt-in -vis_pocket_grid (renamed from -export_pocket_grid_pml) emits both PyMOL .pml and ChimeraX .cxc overlay scripts. The two viz-tuning knobs were renamed for namespace consistency: pocket_grid_vis_volume_radiusvis_pocket_grid_volume_radius and pocket_grid_vis_gaussian_isovis_pocket_grid_gaussian_iso. Old names hard-fail at startup with no aliases.

2.5.1

none

2.5

none

2.4.2

none

2.4.1

Prediction
  • Scripts that execute P2Rank (shell script distro/prank and distro/prank.bat) no longer redirect log (stderr stream) to the file distro/log/prank.log. Instead, they write stderr to the console. This was done to avoid P2Rank writing to the installation directory by default, which may be forbidden on some systems. See issue #59.
Training new models
  • Type of parameter -ignore_het_groups changed from Set<String> to List<String>

2.4

Prediction

none

Training new models
  • Removed deprecated parameters -conservation_origin and -load_conservation_paths

2.3

Prediction

none

Training new models
  • parameter -extra_features was renamed to -features
  • command line format of parameters values with type List<String> and List<List<String>> has changed
    • now only comas , are delimeters and inner parentheses are respected
    • before . was used as an alternative delimeter and delimeter for inner lists, now it is part of element value
    • Examples:
      • '(a.b.c)' was interpreted as list of 3 elements, now it defines list of 1 element: a.b.c
      • list of lists value '((a.b.c),(d.e))' should be changed to '((a,b,c),(d,e))'
  • Changes in csv_file_feature
    • renamed to csv
    • introduced parameter -feat_csv_columns (type: List<String>). Names of enabled value columns from csv files must be listed here. Columns not listed are ignored.
      • Example: if you were working with one directory of csv files with one value column named pdbekb_conservation, you must now run the program with -feat_csv_columns '(pdbekb_conservation)'
    • introduced parameter -feat_csv_ignore_missing (type: boolean, default: false). If true, then feature ignores:
      • missing csv files for proteins
      • missing value columns
      • missing rows for atoms and residues

2.2

  • parameter -conservation_dir (type: String) was renamed to -conservation_dirs (type: List<String>)
  • column probability was added to *_predictions.csv output file