-
Notifications
You must be signed in to change notification settings - Fork 181
CaviTracer more robust automatization and removal of similar channel alternatives - #2274
Open
briza81 wants to merge 20 commits into
Open
CaviTracer more robust automatization and removal of similar channel alternatives #2274briza81 wants to merge 20 commits into
briza81 wants to merge 20 commits into
Conversation
min_depth is an absolute length, while being past an opening is set by the opening's own radius. The two part company once a wide opening is retained, which is what a large surf_radius does - and that is what a pore-containing structure needs. A seed left inside such a mouth costs the whole site: every route out of it leaves by that one opening, the dedup cuts them all against it, and the chamber reports a single stub, and no pore at all since pores are built from channels sharing a seed. The floor is now max(min_depth, widest opening of the cavity), by the same clearance the dedup calls an opening radius, falling back to min_depth where a chamber holds nothing that deep. Ordinary mouths are narrower than min_depth, so the reported channels are unchanged wherever no opening was wide enough to swallow the seed.
surf_radius says what counts as the outside, and the local peel that follows decides where the erosion stops, so above about 3.5 A the reported channels stop moving - identical channel for channel from 3.5 to 20 across the test set, at no extra cost. The old default of 3 sat just below that plateau. What the value has to be large enough for is a wide pore: a probe smaller than the pore passes through it, so the lumen is taken for outside and carved away and only the pockets around it are reported, with nothing to show that anything went wrong.
1.2 A is the smallest probe that gives similar channels with and without explicit hydrogens, so the default no longer sits in the range it warns about.
...ening test asked whether one exit fell inside the other's mouth sphere, which reported one tunnel as several: sibling exits sit about a mouth radius apart, so nearly coincident openings were called distinct and the corridor test never ran. Now we compare the two mouths symmetrically instead. Sparsity now reads as the smallest centre-to-centre distance at which two openings count as separate with default 6 A.
...orm a layer one tetrahedron thick, so dropping their outgoing edges did not fully stop a route walking around a mouth through the shell behind it and surfacing elsewhere ->duplicates. An opening is now a mouth's inscribed ball rather than the tetrahedron at its centre: the search stops at the first one a route enters, routes are deduplicated there on their interior corridors, and the survivors leave by the cheapest mouth of that same opening. Their exits are compared once more, so sparsity and similarity apply as before. The reported route is the seed's own path to that mouth, not two searches spliced at the arrival.
The centerline spline gave every tetrahedron one unit of parameter however far apart consecutive circumcenters sat, so the cubic overshot the long steps and swung back. The parameter now advances by the square root of the step, which measured closest to the polyline through the same points and wandered least off it; plain chord length was worse than the index at abrupt turns. Coincident circumcenters collapse to one knot, at the separation the twin-tetrahedron test already uses. The radius profile is now shape-preserving, so the written spheres can no longer be narrower than the bottleneck reported beside them, nor wider than the widest gate.
...d of strictly cheapest variant, we now selecte whichever offers the better ending: a wider mouth or a wider bottleneck, with neither bought by narrowing the other, no more locally buried, not merely a continuation past the mouth already reached, and no more than 30% expensive on the tail past the fork where the two channel variants deviate.
...nelCalculator.findBiggestTetrahedron, which nothing has called since seeding moved to selectSeedTetrahedron/findDeepestTetrahedra.
...to calcChannelSurfaceOverlaps - both were accepted and documented but never passed on, so the occupancy map was always built at the default 0.5 A on the default 2 processes, unlike the sibling scanSurfaceCavityParameters which forwards both.
...floor was the anchor's own depth, so a point placed on a ligand or catalytic residue - deeper than the widest part of its pocket - left nothing eligible and the seed stayed on the narrow cell nearest the point, silently capping every channel of the site at that radius. The floor is now min_depth raised to the cavity's widest mouth, as the chamber pass already did for automatic seeds. start_point_search is a requirement rather than a search budget: the anchor search was an unbounded argmin, so a point that missed the void was answered with channels through whatever cavity lay nearest. Where no cavity has a tetrahedron within it, no channels are computed and a warning gives the nearest one's distance and coordinates. 0 still seeds the nearest tetrahedron as-is.
...said which void a search started from but never where, so an automatically placed seed could not be reproduced or adjusted. Each row now carries the seed's Voronoi vertex, formatted to be pasted straight back as start_point, between the site tag and the void it names so the link notes still end the row.
...hecks asked only whether any H was present, so a structure carrying its polar hydrogens and nothing else passed as protonated and could be probed below water size. Newly this test is moved to _reportAtomsInputComposition, which already reports what the input is made of, and score each kind of chain against the hydrogens per heavy atom it should carry: near 1.0 for protein, near 0.55 for nucleic acid. A mixed structure counts as protonated only when every kind of chain in it is, and the message names whichever is short. Below 70% of the expected count a probe under 1.2 A is warned about; the reverse mismatch is noted as well suggesting smaller prove fore likely fully protonated structures. Additionally, nucleic acid is also named in the composition report rather than counted among the components to warn about: so when analyzing protin-nucleic acid complex we no longer advise the user to select the protein alone.
...much they overlap, this reduces similarity/route_tolerance args with a single route_divergence
...ust-automatization
...ating alternative exits via same mouths
...d calcPoresFromChannels now leave a vis_channels.py next to the files they write, when the run was told a directory, and never overwriting one that is already there: pymol vis_channels.py -- <protein>.pdb "chl*.pqr"
briza81
commented
Sep 4, 2026
Contributor
Author
@karolamik13 pls heave a look, attaching also a bit more detailed descriptions
details.pdf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Making the calculations and its default robust wrt to different structures, limiting the need for specific parameter adjustments. Also, similar tunnel variants are better pruned.
Measured over the 21-structure testing corpus (MOLE2 + CAVER reference sets, a porin and two protonated dehalogenases), each version with its own defaults:
main(32bd69e)Eighteen of the 21 cases report fewer channels while the widest bottleneck holds or improves. Two separate things cause that, and the companion document separates them by running
main's own algorithm a third time at the branch'sinner_radiusandsurf_radius: 278 -> 212 -> 147, so the recalibrated defaults account for -66 and the deduplication for -65. The two cases that report more are the wide-pore ones, fromsurf_radius.Major changes
the two were then compared as distinct exits. A search stops at the first opening it enters, the two mouths of a pair are compared symmetrically, and duplicates are merged on how far they diverge in Angstrom (scaled by the local clearance = surface distance) . When two routes merge, the better ending is reported - a wider mouth or a wider bottleneck, with neither bought by narrowing the other.
start_pointis usually placed on a ligand or a catalytic residue, deeper than the widest part of its pocket - so nothing was eligible, the seed stayed on the narrow cell nearest the point, and every channel of that site was silently capped at its radius (3eyx reported 1.30 Å twice; the routes are 1.78 and 1.65 Å). Every automatic seed is now printed as a pasteablestart_point.Altered defaults
mainsurf_radiusinner_radiussparsitysimilarity,route_toleranceroute_divergence=0.2