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

111 lines
4.3 KiB
Markdown

## 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`](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`](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_radius``vis_pocket_grid_volume_radius` and
`pocket_grid_vis_gaussian_iso``vis_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