Molstudio Lab is the scientific workbench. Its primary objects are source bytes, stable molecular identities, explicit coordinate states and reproducible results—not cinematic actors. This reference documents the algorithms and contracts present in the browser build, including their boundaries.
Local coreRuns in the browser from a named JavaScript module.
Data dependentImplemented locally, but requires the stated coordinates, topology, map or trajectory.
Optional providerAccelerates work or supplies a higher-authority method; the built-in browser tools do not require one.
00
Architecture and scientific boundary
Canonical molecular data is independent of both the WebGL viewport and the cinematic Studio document.
SourceImmutable text or binary bytes plus content identity.
Canonical modelTopology, coordinate frames, presence and provenance.
ProjectionExplicit model, altloc and assembly policy.
ResultAlgorithm, parameters, units, evidence and diagnostics.
Project / transferRevisioned records and content-addressed payloads.
The browser globals use narrow responsibilities: MolstudioMolecularIO parses coordinate archives, MolstudioScience defines workspace and job contracts, and the renderer, analysis, map, trajectory, sequence and chemistry modules consume derived views. The same modules expose CommonJS exports for focused tests. Binary coordinates and maps belong in content-addressed blobs; workspace JSON stores references and scientific state rather than duplicating payloads.
Scope rule. A visible geometry is not a scientific result. A surface mesh, contact highlight or fitted transform becomes evidence only when the corresponding calculation completes and records its algorithm, parameters, coordinate state and warnings.
Layer
Current contract
Not implied
Canonical coordinates
molstudio.molecular/1; topology separated from Float64 frames and presence masks.
No centring, model filling, protonation or missing-atom construction.
No mutation of deposited bytes by a display or edit operation.
Viewport
WebGL2 rendering of atoms, bonds and uploaded cartoon, trace, surface or density meshes.
WebGL availability does not gate parsing or local numerical analysis.
Compute
MolstudioScienceCompute supplies deterministic, cancellable browser baselines for energy, minimisation, short dynamics, electrostatics, pose hypotheses, mutation, loops and restrained map fitting.
A local baseline is not a residue-typed force field, production simulation, affinity calculation, structure prediction or validated experimental refinement.
Declared reference sets
Two published van der Waals radius sets are in use, deliberately, and every result names the one it was computed with. MolstudioMolecularIO pins RDKit’s periodic-table radii at release 2026.03.2 against a named source commit, and the analysis, surface and interface modules read that set and report it as radiiSet or radiusProvenance. The pocket, interaction-typing, advanced-analysis and preparation modules use Bondi’s 1964 values, because that is the set those probe calculations are conventionally run with; changing it would move every reported pocket volume for reasons of display rather than chemistry. Covalent radii are Cordero 2008 wherever one is used, cited rather than resembled, in conformer construction, chemical preparation and the validation bond-length screen. Atomic masses divide the same way: the chemistry module uses the IUPAC conventional atomic weights and MolstudioMolecularIO pins RDKit’s table at release 2026.03.5. A test walks every one of these tables and requires two things of each: that it names where it comes from, and that its disagreements with the others are the ones already recorded.
Two radius sets do not make one number. On a protein’s carbon, nitrogen and oxygen the two van der Waals sets stay close: carbon is 1.70 Å in both, and the widest gap of the three is nitrogen, 1.55 Å under Bondi against 1.60 Å under RDKit, which is 3.2 per cent. At a transition metal they do not stay close: zinc is 1.39 Å under Bondi and 2.10 Å under RDKit, half as much again in radius and more than three times the volume, at exactly the sites a pocket search is pointed at. A pocket envelope and a molecular surface are drawn from different radii and are not expected to coincide, and a volume from one is not comparable with an area from the other. The two mass tables differ by at most a hundredth of a dalton, on zinc, so a molecular weight computed in one module and a mass-weighted radius of gyration computed in another agree to about four significant figures and not beyond. Neither set is wrong; what would be wrong is a divergence nobody declared.
What the numbers are checked against
Where a calculation has an outside implementation, it is checked against one and the agreement is recorded rather than asserted. Superposition matches Bio.SVDSuperimposer on the 76 Cα atoms ubiquitin has in common between 1UBQ and 1UBI, both returning 0.090843501881 Å and agreeing to 2.8 × 10⁻¹⁶ with a rotation determinant of +1; the rigid fit matches a numpy Kabsch to 1 × 10⁻⁹ Å over five cases, with a mirrored set refused rather than improperly fitted. Backbone torsions match RDKit and Biopython on real φ/ψ pairs, secondary structure is measured against pydssp, buried interface areas agree with freesasa to 0.02 per cent when both are given the same radii, and solvent-accessible area is held against the closed forms it has to reproduce: one isolated sphere, and two overlapping spheres whose lost caps have an exact area. Trajectory covariance and elastic-network modes are checked against numpy eigendecompositions, the XTC and DCD readers against files written by mdtraj 1.11.1 rather than by this reader, and V2000 mol blocks, SMARTS hydrogen-count primitives and the Wildman–Crippen atom types against RDKit.
Agreement is not validation. Matching an outside implementation shows that the arithmetic is the arithmetic the module claims, which is the least a reported number owes its reader. It does not validate the method, it does not make a local baseline a production engine, and it does not make a hypothesis a measurement. Every boundary declared in the sections below still holds over a number that agrees with another program to sixteen digits.
01
Lossless identity, models and assemblies
The parser preserves deposited identity; the render projection makes lossy display choices explicit.
MolstudioMolecularIO.parse detects PDB or mmCIF, retains the exact source text and creates a deterministic source fingerprint hook. For mmCIF, data names are treated case-insensitively. The canonical atom records retain H and D, all alternate locations, occupancy, isotropic B factor, formal charge, source atom ID/serial, label and author identifiers, insertion code and model membership. PDB CONECT/SSBOND and mmCIF struct_conn records are resolved when their endpoints are unambiguous; unresolved records remain diagnostic rather than guessed.
Topology
Identity does not move
One canonical atom table contains label/auth namespaces and residue membership. Per-model source IDs remain attached to that topology. Entity, entity_poly_seq, unobserved residue/atom and secondary-structure metadata are retained separately.
Frames
Absence is first-class
Each model owns a Float64 coordinate array, Uint8 presence mask, occupancy, B factor and source-ID arrays. A missing atom is absent with NaN coordinates; coordinates are never copied from another model.
Crystallography
Deposited frame stays deposited
Unit-cell lengths/angles, space-group label and available assembly operators are metadata. Parsing never recentres or applies the unit cell, biological assembly or a camera transform to source coordinates.
Provenance
Raw source remains available
The source object is frozen and includes name, byte length, exact text and a deterministic FNV hook. That hook detects local identity; cryptographic project blobs use SHA-256 when Web Crypto is available.
Projection policy
const view = MolstudioMolecularIO.renderProjection(model, {
model: "1", // deposited model id; a number addresses a frame index
altloc: "occupancy", // occupancy | first | all | a specific altloc id
assembly: "1", // asu or a deposited assembly id
hydrogens: true// H and D are retained unless explicitly excluded
});
The projection carries atom radii, residue order, polymer runs, backbone indices, deposited secondary-structure assignment, explicit connectivity and both Float64 coordinates and Float32 render positions. Assembly transforms create instances in the projection; they do not mutate the canonical frames.
Altloc semantics. “Occupancy” chooses the highest reported occupancy within each alternate atom identity. It does not construct a globally correlated conformer across a residue or chain. Choose a specific identifier or all when that distinction matters.
02
Workspace layout and context actions
The graphics window is the instrument surface; everything else is thin furniture docked around it, and a tool’s controls sit beside the structure they change rather than over it.
Structure
Hierarchy + coordinate identity
The left panel, 206px on a desktop layout, owns the coordinate source, the explicit assembly, model and altloc controls, the object tree and the key to the three coordinate classes: deposited, predicted and derived. Those controls are scientific project state recorded in history, not transient camera settings. Each object row carries its own visibility toggle, so showing and hiding an object happens on the row rather than in a panel somewhere else; hiding is display only and changes nothing about identity, coordinates or evidence. Below 1080px with a tool docked the panel is dropped entirely so that the viewport and the tool can both be seen, which puts assembly, model and altloc out of reach until the tool is closed. That is a layout decision and not a change of state: the identity policy remains what the status readout and the project history say it is.
Viewport
Representation + picking
The centre holds a 26px row of navigation, selection and measurement controls, the linked sequence strip and the scientific viewport, which is the largest surface in the window. Hover, pick and measurement cues resolve back to stable atom addresses. The sequence strip carries a ruler above the letters, numbered by the deposited residue number rather than by position in the row: every tenth deposited number is printed over its own tick and every fifth carries a bare tick, the value taken from the author sequence number and falling back to the label sequence number. This is the distinction the ruler exists to protect. A chain deposited from residue 10, or one with a gap where residues were not modelled, would be labelled by a position index with numbers that appear nowhere in the file. Ruler cells and letter cells are both a fixed 11px so the two rows stay in register, and a three-digit number is allowed to overhang its neighbours, which are empty. The row lists only residues present in the current projection, so an unmodelled stretch shows as a jump in the numbering rather than a run of blanks; the deposited entity_poly_seq record remains the place to ask which positions are missing.
Notebook
Tools, results, history
The right panel, 252px at rest, is where tools are chosen, run and recorded. Its Tools tab is a palette rather than a wall of cards: a bar of the six families built from the panes that exist, so it cannot offer a family that is not there, a search box covering every tool in every family including the ones other modules install at load, and rows of 22px carrying a name and the short availability word the page attaches to it, with the fuller phrase on that chip’s title. Search reads its index from the live document, ranks an exact word in a tool’s name above a substring, an identifier, a description mention and a family name in that order, returns at most twelve matches, and shows the last six tools used while the box is empty. The density has a cost worth stating: a tool’s one-line description is not on screen in the palette and is not on a tooltip either, and is visible in a search result and nowhere else. Choosing a tool docks its controls in this column and hides the palette until All tools brings it back; choosing a different family closes whatever was docked. None of this changes the contract that matters. Opening a tool does not manufacture a result. Successful measurements and analyses enter Results; imports and state-changing commands enter revision history.
Query
Selection + command bar
The command bar is a console. It accepts the selection language below, and commands target stable identifiers and use the same transactional command and history contracts as graphical actions. Above the input sits a scroll-back: every status the workbench sets and every message it flashes over the viewport is echoed there and stays, so “what did that just do” is answerable without repeating the operation. Lines carry a level mark, a status set repeatedly during a drag collapses into a repeat count rather than burying the run above it, and the log keeps at most 200 lines before dropping the oldest. What the scroll-back is not: it is a session record held in the page, not evidence. It is not written into the project, not part of revision history, not covered by Undo, not included in an exported command record or provenance manifest, and it does not survive a reload. A result is a result because it is in Results, not because a line about it is in the log. Transient toasts are not echoed into it. A host that cannot create the log node is left without a log rather than with a failed operation, so the console can never be the reason something did not happen.
A tool’s controls dock in the notebook column beside the viewport, in a column of up to 430px or 42 per cent of the window. The column takes width from the viewport rather than covering it, and the viewport is resized on the next frame so it never draws at a stale aspect: a control whose effect on the structure you cannot see is a form rather than a tool, which is also why the tool search had nowhere to live while every tool took the whole screen. One mount point serves every tool, so no tool can drift onto a route of its own. The Tools button in the masthead opens a bounded chooser over a dimmed and inert workbench, listing the project actions and the six families: Inspect, Analyse, Maps + crystallography, Model + ligands, Dynamics + compute and Automate + report. Choosing a family there lists its tools; choosing a tool closes the chooser and docks the controls beside the viewport, so the chooser is a way in rather than a place to work. That full-screen route is also the fallback in a host with no dock element. Parameter-heavy work therefore no longer leaves the workbench; it takes width from it, which is the trade the layout is making.
Six named families replaced ten numbered ones, which implied an order that did not exist and split closely related work: sequence away from the structure it describes, compute away from the dynamics it runs, reports away from the scripts that produce them. Every family card opens a pane that exists and every pane is reachable from a card, both asserted in the test suite. No tool is listed in two families, because a repeated entry is the fastest way to make a large tool surface feel arbitrary: the compute family holds engine status, energy, electrostatics and job history, while minimisation, dynamics, docking, loop modelling and density fitting open from the family they belong to.
Right-click an atom, residue, object or empty viewport space for a context-specific menu. Immediate actions such as select, frame, hide, label, add a display layer or change a representation stay in the menu. Operations wanting scope, parameters, an engine or a trust decision open the docked tool with the target carried forward. The same menu is reachable from the keyboard with Shift+F10 or the context-menu key, and on touch by holding. On screens narrower than 780px, Structure, Viewport and Notebook become mutually exclusive panels so the canvas is not squeezed into a desktop grid.
Context does not change evidence. Selecting an atom through the hierarchy, sequence strip, query language or viewport must resolve to the same canonical identity and current coordinate state.
03
Scientific selection expressions
The parser produces a validated AST; evaluation returns stable atom IDs plus zero-based result indices.
chain A and resi 42-68 and backbone
ligand within 4 of protein
byres (within 3.5 of (resn ATP and not hydrogen))
(protein and chain A) near_to 4 of ligand
(selection active_site) extend 2
(q < 0.5 or b > 60) and not water
selection active_site or bonded ligand
Boolean
and binds before or; use parentheses and unary not.
Single atom
first expression and last expression choose the lowest or highest current atom-order index. An empty operand stays empty.
Classes
all none polymer protein nucleic dna rna water solvent hetero ligand metal hydrogen backbone sidechain visible selected.
Identity fields
chain, segi, resi, resn, name, elem, alt, model, index, id, object, entity. The expression field index is one-based.
Properties
b, q/occupancy, charge, x, y, z with = != < <= > >=.
Ranges + globs
Residue/model/index values accept comma or plus lists and numeric ranges. Text values accept * and ? wildcards; quote values containing spaces.
Identity matching
left in right exactly compares atom name, residue identifier/name, chain and segment; left like right exactly compares atom name and residue identifier. Both preserve source-instance, deposited-model and alternate-location namespaces while allowing correspondence between scene objects; only atoms from the left operand are returned.
Spatial
within d of expression, postfix left within d of right, left near_to d of right (excluding the right/source set), left beyond d of right, expression around d, and expression expand d. Distances must be finite and non-negative.
Entity expansion
byobject, bysegi/bysegment, bychain, byres, bycalpha, bymolecule/byfragment. Object, instance and deposited-model namespaces are retained; residue expansion includes all deposited alternate atom records in that residue.
Bond expansion
bonded includes the seed and direct neighbours; neighbor excludes the seed; postfix expression extend N follows exactly N bond steps. N must be a non-negative safe integer. Graph traversal never crosses scene-object, assembly-instance or deposited-model boundaries, and an edge between conflicting non-blank alternate IDs is not treated as a simultaneous covalent connection.
Named sets
selection name resolves stored stable atom IDs. Missing IDs fail explicitly rather than retargeting a later atom at the same index.
MolstudioScienceSelection.compile returns molstudio.science-selection/1; select returns the AST, sorted indices, stable atom IDs and count. Spatial evaluation uses the complete coordinates supplied to the call and a Cartesian cell list; entity and bond expansion have no hidden atom, component or step cap.
Atom and residue property table
Run properties or table, or choose Inspect properties… from an atom/residue context menu. The table can cover the current selection or all displayed matter and switch between atom and residue rows. It keeps the scene object, source/display instance, label/auth chain and residue namespaces, alternate location, element, occupancy, B factor, explicit charge and current X/Y/Z coordinates together instead of collapsing them into a display index.
Search and filters cover the complete result set while the table mounts at most 200 DOM rows at once. A row can select and frame its exact stable identity. CSV and JSON exports include scope, coordinate-state and provenance metadata but never embed source coordinate files. JSON preserves text losslessly; CSV neutralises spreadsheet formula prefixes from untrusted structure labels while retaining typed numeric values.
Periodic boundary condition. Selection within does not automatically use minimum-image distances. Image or unwrap the coordinates first when evaluating a periodic system.
04
Representations and geometric meaning
Display geometry is derived from one projection and can always be regenerated from its recorded parameters.
Representation
Local implementation
Scientific caveat
Cartoon / ribbon
MolstudioScienceCartoon.buildCartoon; uniform Catmull–Rom, tension ½, through protein CA or nucleic C4′/P anchors, with helix/sheet/coil dimensions. The ribbon is the surface between two guide curves splined either side of the trace along the Carson & Bugg (1986) peptide-plane direction, so the roll is read from the molecule’s own carbonyls rather than from a laboratory up vector. Turning the structure turns the mesh and changes nothing else: under an exact 120° permutation of the axes the rotated cartoon and the cartoon of the rotated structure agree to the last bit, where the laboratory-frame construction they replaced differed by 0.62 Å on a twenty-residue helix, 86 per cent of that ribbon’s own half-width. Triangles wind counter-clockwise seen from outside, so front faces point away from the spline.
A cartoon is a drawing, and the result declares that rather than leaving it to be assumed. Ribbon widths and thicknesses are display constants in ångström — 1.45 Å across a helix, 1.75 Å across a strand — and nothing in the molecule is that wide. The twist is the peptide plane’s only where the residue carries both a backbone C and O; on a C-alpha-only model, a nucleic acid, or a residue whose carbonyl was never modelled, it is a parallel transport of the trace’s own curvature and is a display choice, counted position by position in a ribbon-frame diagnostic. Where that transported roll comes to lie along the trace itself — which is what a trace doubling back on its own path does — the width direction is taken from a laboratory axis, the one construction here that does not turn with the molecule; those positions are counted in a ribbon-roll-laboratory-axis warning rather than left inside the invariance above. The flat face follows the peptide planes without lying in them, because it also contains the direction the trace travels in: over ubiquitin it stands a mean 18.1° out of the plane of the peptide it covers and up to 72.5° at Lys 63, against a 40.8° floor that no surface drawn through the C-alphas can beat. A round section — tube, loop or putty — keeps the swept frame and stands further out again, a mean 26.9° and up to 83.0° on the same structure. ribbon-face-tilt reports the mean, the worst and the floor for the structure actually drawn, so the angle a face makes in a figure is not a reading of a carbonyl’s orientation. Two residues are joined when their numbering is consecutive and their anchors are within 4.5 Å for protein or 8 Å for nucleic acid, because consecutive numbering is not evidence of a bond; neither test is a bond, and a break shorter than the distance limit is still drawn as continuous. What was dropped, joined anyway or drawn on a fallback frame is named in the diagnostics the result carries, which are enumerated under Browser module reference. The secondary structure that sets the width is whatever the input atoms carried: the assignment is made elsewhere and carries its own boundaries, set out under Alignment, RMSD and validation limits.
Trace / tube
The ordered-polymer anchor mesh can be uploaded to the renderer’s trace slot with tube-like dimensions.
Residue gaps split runs; no missing backbone is interpolated across a declared gap.
Sticks
Instanced cylinders for supplied bonds plus reduced atom spheres.
Only explicit/provided bonds are authoritative; proximity is not silently converted into chemistry.
Ball + stick
Instanced element-coloured spheres and bond cylinders.
Sphere and cylinder scales are display parameters, not atomic radii measurements.
Spacefill
Element-specific van der Waals sphere radii, read from the pinned set the render projection names with every result.
An element that set does not carry stops the projection with a RangeError naming the atom by its index in the source model, the element symbol it carried and the set and version that has no radius for it. Nothing is drawn at a substitute or generic radius, because a sphere of invented size is indistinguishable on screen from a measured one.
SES molecular surface
MolstudioScienceSurface.buildSurface with kind: 'ses'. An exact separable squared-Euclidean distance transform rolls the probe out from sampled probe-centre boundary seeds and back again, and marching tetrahedra triangulate the closure on the exact requested grid; default probe radius 1.4 Å. The result carries radiusProvenance: the fallback radius set with its version, commit and source URL, how many atoms supplied their own radius against how many took one from that table, and whatever radius provenance the projection upstream declared.
A numerical solvent-excluded boundary, and grid spacing controls re-entrant detail. A probe that is smaller than half the requested spacing but larger than zero is refused rather than approximated: the rolling step cannot represent a sphere that small, so the surface comes back inflated instead. Two carbons 3 Šapart enclose 40.7 ų, and a 0.001 Šprobe on a 0.5 Šgrid returned 60.2 ų with nothing in the result to say so. The refusal names both a probe and a spacing that would work. A probe of exactly zero is exempt, because that is the van der Waals surface computed directly rather than rolled.
VDW surface
Marching-tetrahedra mesh of the union of van der Waals spheres, with the probe radius held at zero; the same radiusProvenance record travels with it.
A visual molecular boundary, which the result says of itself in its own diagnostics: it is not a solvent-excluded surface and not a measured physical interface. It is what a zero-radius probe gives, so it is the one surface of the three that no probe-to-spacing ratio can distort.
SAS surface
Union of van der Waals spheres each inflated by the probe radius, default 1.4 Å, meshed the same way; radiusProvenance is recorded as for the other two.
The surface traced by the centre of the solvent probe, explicitly not an SES or Connolly surface: it lies one probe radius outside the van der Waals spheres and encloses a correspondingly larger volume. Because the spheres are inflated rather than rolled, the minimum probe-to-spacing ratio the solvent-excluded surface refuses below does not apply here.
Density map
MRC/CCP4 grid isosurface with absolute or sigma contour at the requested voxel stride.
Contour appearance is not a density-fit score; map registration and source must remain attached.
Surface and density mesh construction runs in isolated workers at the requested grid spacing or voxel stride. The builders do not silently lower resolution or display a partial mesh: cancellation or an allocation/runtime failure leaves the prior view intact and reports the failure. Each finished mesh reports how many components it closed into and counts any boundary or non-manifold edges it has, so an open surface is visible in the record and not only on screen. Parsing and analysis remain available when WebGL2 is unavailable.
All three surfaces declare the same three limitations, and each is worth reading before an area or a volume from one is quoted. The grid is fixed in the laboratory frame, so the area depends slightly on how the structure is oriented: over five orientations of ubiquitin the total varies by about two per cent at 0.7 Å spacing and by 0.3 per cent at 0.3 Å, which is what two superposed conformations differ by before any real difference is counted, and refining the spacing narrows it. A marching-tetrahedra mesh is inscribed in the surface it traces, so both its area and the volume it encloses are slight under-estimates, converging as the square of the spacing; a lone atom comes within half a per cent of its own sphere at 0.15 Å. And the boundary is a geometric construction from the radii the result names and the probe rolled over them, not a measurement: these meshes are built from the pinned RDKit table rather than the Bondi values the pocket search uses, so a pocket envelope and a molecular surface are not expected to coincide.
Scientific colour and scoped representations
Open the Display stack and choose Colour + scope…, or right-click the viewport and choose Colour + representation…. Choose whether the layer applies to all displayed atoms or the current selection, then choose cartoon, trace, lines, sticks, ball-and-stick, spacefill, surface or points. Selection-scoped layers retain exact stable atom IDs, so an atom-order change cannot silently recolour a different site. The same operations are available as colour b-factor selection and show sticks selection.
Categorical
Element, chain, object and residue chemistry
Element colours use an explicit CPK-style table. Chain and object colours are deterministic from stable identities. Residue class groups acidic, basic, polar, aromatic, hydrophobic, special, purine and pyrimidine residues without claiming an energy.
Annotation
Secondary structure
Helix, sheet and coil colours use the current retained annotation. Assign secondary structure… reviews a local geometry-derived assignment and applies it as a reversible display annotation; deposited/source assignments remain separate. The assignment is Kabsch and Sander’s backbone hydrogen-bond criterion by default, with the observed-backbone φ/ψ hypothesis as the selectable alternative and the declared fallback for a backbone segment that has too few carbonyl oxygens to evaluate a bond with, and the result names which of the two produced it. Neither is DSSP or STRIDE, and both carry the boundaries set out under Alignment, RMSD and validation limits.
Gradient
B factor and occupancy
B-factor colours use the observed range and report Ų. Occupancy uses the fixed physical range 0–1. A B factor is never relabelled as prediction confidence unless the source explicitly defines that semantic.
Charge
Explicit atom charge
The symmetric red–neutral–blue gradient uses explicit partial, atom or formal charge fields. It is not an electrostatic-potential map and does not infer missing charges.
Display-only contract. Colour schemes and selection masks are stored with representation layers and Undo/Redo/project state. They never alter canonical coordinates, atom properties or scientific evidence.
05
Measurements, contacts and local analysis
Every calculation operates on an explicit atom set and current coordinate frame.
Tool
Method and defaults
Output / limitation
Point distance / angle / dihedral
2/3/4 viewport-picked atoms in the exact current Cartesian coordinate state.
Å or degrees plus stable atom IDs. Coincident or degenerate endpoints error rather than return a fabricated number.
Selection centroid distance
The unweighted geometric centre of every atom in each of two explicit named selections, declared with the result as centroidWeighting; no atom-count sampling or truncation.
Distance in Å, both resolved centroids, complete endpoint atom-ID snapshots, coordinate revision and frame. This is not a centre-of-mass distance, and the two are different numbers: a selection containing a metal or a phosphate has its centre of mass pulled towards the heavy atom, by an Å or more on a small selection.
Raw selection RMSD
Unfitted Cartesian RMSD over two named selections using either exact source identity or explicit saved-selection order for a deliberate cross-source mapping. An exact identity is the matching immutable source fingerprint together with the model, the source instance, the residue and atom read under both the label and the auth namespace, and the altloc — declared with the result as atomIdentity. Both namespaces are read because a file fills one of them and leaves the other empty, and reading only the label was a silent collapse rather than a refusal: a PDB states no label entity, sequence or component, so chain and atom name were the whole identity and 602 atoms of ubiquitin chain A shared 31 of them, 134 atoms sharing the backbone O of chain A. mmCIF was not exempt either, through non-polymers, whose label sequence number is absent: the 58 waters of 1UBQ shared one identity between them, and their deposited auth numbering tells them apart.
Å, complete one-to-one stable atom pairs, endpoint source fingerprints and pair count. Missing, duplicate, mixed-source, ambiguous or unequal correspondence fails; no fitting, padding or atom dropping occurs. An identity that repeats now means two atoms the source itself does not distinguish, and the refusal names those atoms rather than the selection they came from.
Atom pairs and distances. “Contact” is geometric unless separately classified.
Clashes
Nonbonded VDW overlap against the pinned radius set [email protected], reported with every result as radiiSet; default tolerance 0.4 Å.
Pairs ranked by overlap. Not an all-atom force-field energy. These are not the Bondi 1964 radii the open-pocket calculation runs on, so a clash tolerance and a pocket volume are not drawn from the same atom sizes.
Putative H-bonds
Explicit H/D: D–H···A geometry, 3.5 Å heavy, 2.5 Å H···A, 120° minimum by default. Without H/D: labelled heavy-atom heuristic.
Candidate pairs and confidence label. No protonation, tautomer or water-network optimisation.
SASA
Shrake–Rupley sampling; 1.4 Å probe and 240 sphere points by default; per-selection. The probe radius, the sphere-point count and the radius set are all retained with the result.
Total and per-atom Ų. The sample points are held in the laboratory frame, so the shadow each neighbour casts shifts as the molecule turns and the area depends slightly on how the structure is oriented: over five orientations of ubiquitin the total varies by 1.6 per cent at 60 points, 0.31 per cent at the 240 used by default, about fifteen square Å, and 0.11 per cent at 3840. Two conformations superposed and then compared differ by that much before any real difference is counted. Raising the point count narrows it, which is what makes this quadrature rather than a defect. Hydrogens present or absent, alternate conformers and the radius set all change the area as well.
Radius of gyration
Mass-weighted by default against the pinned standard atomic weights [email protected], reported with the result as massSet; massWeighted:false weights every atom equally.
Value and centre in Å. An element the table does not carry is named and the calculation refuses, and no substitute mass is used: weight every atom equally instead, or leave the atom out of the selection. A selenomethionine measured as carbon is a number nobody can trace. An empty selection returns null rather than zero, since zero would say the molecule is a point.
Backbone dihedrals
φ: C(i−1)-N-CA-C; ψ: N-CA-C-N(i+1). Each pair carries the residue’s deposited identity and its component name.
Linked φ/ψ values only. The current local function does not assign Ramachandran regions or validation percentiles. The component name is what separates glycine, whose allowed regions are not the general ones, from the rest: without it every glycine at a positive φ reads as an outlier against the general contours, and ubiquitin has six glycines, five of them there. The sign convention is held against RDKit and against Biopython on 74 real φ/ψ pairs to a thousandth of a degree; reversed, it would give angles that are individually plausible and collectively mirror-imaged, and a Ramachandran plot flipped through the origin still looks like a Ramachandran plot.
Contact map
Atom- or residue-level minimum-distance edges between all atoms, the current selection, or its complement; sparse output with an optional matrix.
Geometric contacts at the declared cutoff. Null matrix cells mean no pair met that cutoff, not missing energetic data.
Open pockets + cavities
Probe-centre grid components with explicit probe radius, spacing and enclosure directions. Open pockets are computed against Bondi’s 1964 van der Waals radii, named in the result as atomRadiusSet, with iron and manganese, which Bondi does not tabulate, taken as 1.80 and 1.73 Å; the separate enclosed-cavity calculation uses the pinned RDKit set the rest of this table uses. The advanced-analysis grid detector names that same set on every result and refuses an element it does not carry rather than measuring it as a carbon. It read radius || 1.7 at all three points it needed one — grid bounds, probe-excluded rasterisation, lining reach — so platinum, nickel, cobalt and cadmium, none of which Bondi’s set carries, were each given carbon’s 1.70 Å: a twelve-carbon cage of radius 7 Å around one platinum returned 577.750 ų at 0.5 Å spacing, the same voxel count to the last voxel as the same cage around a carbon, against 584.125 ų for a zinc at 1.39 Å and 525.375 ų for a calcium at 2.31 Å. The pinned RDKit table puts platinum at 2.05 Å, 21 per cent wider than the radius that was actually used, and the result named neither the substitution nor the set.
Ranks open/enclosed components by geometry and reports mouth, depth, volume and lining stable identities. It does not assign druggability or binding energy. A grid coarser than the 1.9 Å probe cannot resolve a pocket more finely than the probe that defines it, and says so as a warning naming both numbers; every pocket carries the count of grid points it is made of, so a volume quoted to three figures can be read for what it is. The advanced-analysis detector counts enclosure along six directions — the three grid axes taken forward and backward — and reports that set and its count as enclosureDirectionSet and enclosureDirectionCount, with the threshold stated as four of six rather than as a bare four. Six is six at every spacing, so unlike the surfaces above, refining the grid does not narrow the orientation term: over three fixed rotations of ubiquitin chain A the enclosed volume the direction test finds averages 1269.6, 1263.5 and 1274.1 ų at 0.75, 0.5 and 0.35 Å — 0.9 per cent apart across a grid refined 2.1× — while the disagreement between the three orientations runs 1.257, 1.301 and 1.303 as a max/min ratio and does not fall at all. Reported bare, that read as one more thing a finer grid would settle: the largest pocket of ubiquitin chain A ranges 263.7 to 955.1 ų over twelve random rigid placements at the shipped defaults, and the result declared only that its estimates were resolution-dependent. Both a diagnostic and a limitation now name the direction set on every run and say that a finer grid is not the knob for it, so a volume is compared only against a run on the same coordinate frame.
Trajectory PCA
Method-of-snapshots covariance after explicit none, translation or rigid alignment; rigid is the default, and the mode chosen is retained with the eigenvalues. The covariance is divided by the number of frames less one, the unbiased sample estimator, declared as covarianceNormalisation. Exact atom selection and reference frame retained.
Eigenmodes, projections and explained variance are coordinate statistics, not kinetic modes. Periodic imaging must be resolved first. Aligning or not is the difference between measuring internal motion and measuring tumbling: over forty frames of one trajectory the leading eigenvalue is 4.653 Ų unaligned and 4.404 Ų rigidly aligned, and unaligned the eigenvalues and total variance agree with a numpy eigendecomposition to six decimal places. An alignment mode the module does not know is refused by name, false included; rigid alignment of fewer than three selected atoms, or of a coincident or collinear set, is refused rather than fitted.
Interaction fingerprint
Per-frame contact, putative H-bond, salt-bridge and hydrophobic rules across two explicit endpoint groups.
Occupancy and distance/angle summaries carry typing confidence; no interaction energy or thermodynamic probability is inferred.
Evidence labels. Local analysis results use molstudio.science-analysis-result/1 or the versioned advanced-analysis envelope, identify the algorithm/version, record parameters and units, and label evidence as computed or geometry-derived. A result is reproducible from the parameters it reports: every tunable is accepted under the name its own result declares, so handing a result’s parameters back re-runs the calculation that produced it rather than the default, and where a shorter historical name is still accepted the declared name wins. Thirty-six tunables across ten modules are held to that by a test which requires each to move the answer as well as the record, since a parameter that is recorded and then ignored gives a second run that looks exactly like the first and is a different measurement. Analyses read the exact Float64 coordinate array rather than the Float32 copy the renderer uploads, so a reported value carries no digits the calculation was never given. Advanced pocket, map, PCA and fingerprint work runs at the requested scope in an isolated cancellable worker. Cancellation or an allocation/runtime failure records no partial result.
Which residue a number is about. A residue is named by its deposited number and its deposited component name, and the internal atom-order counter is the last resort rather than the second. The number is read from the label namespace where the file carries one and from the author namespace otherwise; a PDB carries no label namespace, and that is reported as absent rather than filled from somewhere else. The one field the engine projection does fill across namespaces is the chain, because an object with no chain has nothing to group, colour or name a residue by; the residue number is never filled that way, which is why anything matching atoms between two objects decides its namespace on the residue number rather than on whichever label field happens to be present. The distinction is what makes a result matchable against the file it describes, because an index-based identifier looks exactly like a residue number while being off by a structure-dependent amount: ubiquitin’s first measurable residue was reported as residue 0 rather than Gln 2, and cytochrome P450’s camphor site came back as PHE77, TYR86 and CAM406 where the structure has Phe87, Tyr96 and CAM 422. Backbone dihedral points, interaction-fingerprint endpoints, pocket lining residues and the atoms a PCA selected all report deposited numbering, and a sweep of ten analyses over a chain numbered from 10 to 414 requires every residue number and component name a result reports to resolve in the file it came from. The same rule governs what is written out: a coordinate export states _atom_site.label_seq_id only for atoms whose source deposited one, writes the rest absent rather than numbered, and declares in the file’s own header how many rows that is and that their numbering is in _atom_site.auth_seq_id. Filling that column from the internal residue counter instead exported ubiquitin as MET 0, GLN 1, ILE 2 where the deposit says MET 1, GLN 2, ILE 3, and — the counter running on across the structure rather than restarting per entity — opened 1BNA’s second chain at 12 rather than at 1, with a correct author number beside it in every row.
Declared conventions. Clash detection, solvent-accessible area, enclosed cavities, the molecular surfaces and the render projection read RDKit’s pinned periodic table; open-pocket detection, interaction typing, the advanced-analysis module and chemical preparation use Bondi 1964; mass weighting here uses the pinned RDKit atomic weights, and the chemistry module uses the IUPAC conventional ones. Every result names the set it was computed with. The divergence between the two radius sets is at most 3.2 per cent on carbon, nitrogen and oxygen and more than three times the volume at a zinc, for the reasons declared under Architecture and scientific boundary. Neither set is wrong. A number computed from one is not comparable with a number computed from the other, which is the whole reason each result declares which it used.
Refusing rather than substituting. A coordinate that is not a finite number is refused by every analysis here, and the refusal names the atom rather than counting it: the pocket search names it by residue, residue number and atom name, and the others name it by its position in the model together with its stable atom ID. An atom silently dropped is not a smaller measurement, it is a measurement of a different molecule. A model whose atom and coordinate counts disagree is refused rather than truncated to the shorter of the two. An element the pinned radius or mass table does not cover is named and refused, and no substitute value is used. Where a number genuinely cannot be given it is null and not zero: the radius of gyration of an empty selection is null, because zero says the molecule is a point, while an atom with no contacts and no accessible area really does have zero of each. The empty answer is given only where the empty answer is true.
06
Alignment, RMSD and validation limits
Matching and fitting are separate decisions; validation is a structural screen, not a deposition report.
Sequence match
Global or local pairwise alignment
alignPair implements Needleman–Wunsch or Smith–Waterman with a linear gap penalty. Protein mode defaults to BLOSUM62; nucleic/identity scoring is available. Mapping, gaps, identity, coverage and parameters are returned.
Structure correspondence
Affine sequence-guided chain matching
MolstudioScienceStructureAlignment extracts sequences from observed polymer residues, reading one residue table shared with the sequence module it already depends on for BLOSUM62. Modified residues are polymer residues: phosphoserine, phosphothreonine, phosphotyrosine, methylated lysine, pyroglutamate, carboxyglutamate and the rest of the thirty-two the sequence module names all carry a one-letter code and enter the correspondence, so superposing a phosphorylated protein onto its unphosphorylated form pairs the residues the comparison is about rather than opening a gap at each of them and shifting the register after it. That changes what the RMSD means, not only how many pairs there are: a ten-residue chain with three phosphoserines in it produced seven pairs when the module kept its own shorter table. A component neither table lists still has no one-letter code, and two unidentifiable components are still not treated as identical. Automatic multichain assignment uses positive local affine substitution evidence normalised to the shorter observed chain, so a deposited fragment is not discarded in favour of an equal-length zero-identity decoy; if no positive assignment exists it fails and asks for an explicit map. Each chosen chain pair then receives a complete affine global traceback before coordinate pairs are built. Two sequences that align equally well several ways are ordered before the traceback runs — the longer one down the rows, equal lengths by code unit — so the correspondence belongs to the pair of chains rather than to which structure was dragged onto which. It did not before: the affine score is transpose-symmetric and never moved, while the alignment behind it did, so 15 of 600 two-object scenes built from 1UBQ chain A as ubiquitin variants at 60 per cent divergence reported a different paired-residue count, sequence identity and RMSD when the two objects were exchanged — at the widest 44 pairs at 38.6 per cent identity and 12.9906 Å against 61 pairs at 31.1 per cent and 5.1829 Å, with no diagnostic either way. Which of several equally scoring correspondences was taken is still a choice, so the rule that settled it is declared on the alignment as tieBreak and in the review’s limitations rather than left for the reader to infer. Residue renumbering does not determine correspondence and insertions/deletions become explicit gaps. Alternate atoms are resolved as one coherent residue conformer—never a silent A/B hybrid. Choose guide atoms (CA for protein; P and C4′ for nucleic acid), polymer backbone atoms, or common named atoms.
Chain assignment
Unique automatically, explicit when needed
Automatic matching accepts a unique chain assignment. Equivalent best assignments fail visibly by default; choose the moving and reference chains explicitly, or deliberately permit a deterministic tie-break whose ambiguity is recorded in diagnostics and provenance. Identity, coverage and the accepted chain mapping remain inspectable.
Robust coordinate fit
Reflection-free rigid transform
The fitter derives a proper rotation and translation without reflection, then can reject geometric outliers iteratively using the declared cutoff in Å and refinement-cycle count. Review includes initial and retained atom-pair counts, RMSD before/after fitting, the exact transform and per-residue residuals. At least three non-degenerate pairs are required. The fit is held against outside implementations rather than against itself, matching Bio.SVDSuperimposer on ubiquitin and a numpy Kabsch over five cases to the digits recorded under Architecture and scientific boundary; a mirrored point set is refused the better improper fit and comes back at the 9.58 Å a proper rotation can manage.
Compare or apply
Only placement changes
Compare only records the review without changing either object. Apply to moving object applies that reviewed transform only to the moving scene-object transform; the reference placement and both objects’ source coordinate arrays remain unchanged. An ordinary Workbench snapshot makes the prior placement recoverable with Undo.
Exact provenance
Review, reproduce, reject stale work
The result binds its alignment ID to the moving/reference object identities, scene revision, coordinate and transform fingerprints, chain choices, atom mode, affine gap scores, cutoff, cycles, ambiguity policy, correspondence, residuals and fitted transform. Application rejects a stale or altered review instead of recomputing silently.
Backbone annotation
Review a geometry-derived hypothesis
MolstudioScienceSecondaryStructure evaluates observed protein N, CA, C and O geometry and assigns from backbone hydrogen-bond topology by default: Kabsch and Sander’s electrostatic criterion, four point charges giving the energy of a backbone hydrogen bond, a bond declared below −0.5 kcal/mol, helices from consecutive n-turns and strands from parallel and antiparallel bridges. The amide hydrogen is not in the coordinates, so it is constructed 1 Å from N opposite the preceding carbonyl; proline has none and donates nothing; and a bond is sought only within one backbone segment, because a bond across a chain break would be asserted rather than observed. The φ/ψ windows, peptide-continuity thresholds and minimum run lengths remain selectable and are the declared fallback: a backbone segment in which fewer than half the residues carry a carbonyl oxygen has no bond to evaluate, so it falls back to the windows and a carbonyl-oxygen-missing diagnostic says how many segments did. The method the result reports is what actually ran: phi-psi-rules where no segment could be evaluated at all, and kabsch-sander-hydrogen-bond where some could, with the diagnostic still on the record so a partly fallen-back run is never read as a whole hydrogen-bond analysis. A method that is neither of the two is refused by name rather than quietly defaulted. The Workbench records every residue, angle, reason and diagnostic before a separate Apply action writes only a reversible scene display annotation. Source coordinates, chemistry, atom identity and deposited secondary-structure records are never overwritten.
Atom correspondence
Which namespace the identity is read from
Superposing or comparing two scene objects without explicit pairs builds the correspondence out of atom identity, and that identity is read from the namespace which numbers the residues: the label namespace where the file numbers them there, the author namespace otherwise, and the source atom serial only where neither namespace numbers anything. The namespace each object was matched in, how many distinct identities it produced and how many pairs came from an identity covering more than one atom all travel on the result, because two objects identified in different namespaces cannot match at all and an identity covering several atoms pairs them in list order rather than by identity. The rule used to be “any label field present”, and a PDB has one: the parser writes all five label fields absent, but the engine projection fills the chain from the author chain so that every object has a chain to group and colour by. The residue number was then missing from the key while the key still looked complete, and the pairs came back in list order — 1UBQ’s 70 Cα of chain A with residues 20–25 removed, fitted back onto all 76 Cα of the same entry, gave 63 of 70 pairs wrong and 12.741 Å from the PDB where the mmCIF gave 0.000 Å, and those 602 PDB atoms carried 31 distinct identities, one per atom name. The mmCIF was not exempt either: its 58 waters carry no label_seq_id and collapsed into a single identity.
Explicit atom pairs
Rigid Horn quaternion fit
rigidSuperposition remains available when correspondence is already known. It requires at least three explicitly paired points and returns rotation, translation, transformed points, residual RMSD and matched-point count; it does not choose atom correspondence.
Trajectory RMSD/RMSF
Current-frame comparison
trajectoryStatistics compares frames with a named reference without alignment and reports that limitation. Superpose or unwrap frames first when rigid motion or imaging should be removed.
Validation
Local coordinate screen
The report checks finite coordinates, alternate occupancy, polymer backbone completeness, explicit-bond length ratios and isotropic displacement summaries. A bond is compared against the sum of the two Cordero 2008 covalent radii, cited in the criteria the result carries, with default acceptance ratios of 0.55 to 1.45. The nineteen elements tabulated there are Cordero’s published values to the last decimal, and a bond to an element outside them is screened against a carbon-like 0.77 Å instead, which is a resemblance rather than a citation and is worth knowing before a ratio is quoted. This is a screening criterion, not a refinement dictionary restraint. The other two screens carry their criteria the same way, and for the same reason. The displacement summary calls an atom an outlier at |z| of 3 or more, z taken against the mean and population standard deviation of the values in scope; the alternate-conformer check calls a site over-occupied when its conformers sum above 1 plus a 0.05 tolerance, and says nothing about a sum below 1. Both cuts are chosen rather than derived and both move the count: on 1UBQ chain A the same 602 atoms give 5 displacement outliers at z of 3 and 64 at 1.5, and at z of 3.4, 6 and 99 the list is empty, so a report carrying the count without the cut could not be told from a report screened three different ways. Each screen leaves its criterion beside its count. Every issue remains traceable to source atoms.
Method boundary. Sequence-guided structural alignment uses observed polymer residues only. It is not CEalign or TM-align: it does not perform fold-independent structural correspondence, report a TM-score or recover unobserved residues. The separate geometry-derived annotation does calculate backbone hydrogen-bond energies and does pair strands from parallel and antiparallel bridges: measured against pydssp it agrees on 96.0 per cent of 656 residues over four chains, where the dihedral windows it replaced agreed on 81.1 per cent and made almost all of their errors in one direction, coil called as strand, 42 residues of 2CPP alone. It is still not DSSP or STRIDE: there is no bend or chirality assignment, an isolated bridge is not separated from a ladder, and eight states are collapsed to three, so twelve of the twenty-six residues that still differ are 3-10 and π turns reported here as helix which a three-state DSSP output does not assign at all. The result records which of the two methods produced it, so a run made under the rule windows can never be read as a hydrogen-bond analysis. Every sequence, conformer, refinement and annotation choice is retained so the result is auditable.
Validation boundary. The local report is not a replacement for wwPDB validation, MolProbity, refinement dictionaries, electron-density validation or experimental-method-specific assessment. Metrics the local screen does not calculate—such as Rfree or archive percentiles—are shown only when they are present in a retrieved deposited validation record.
07
Maps and crystallography
Volume grids and coordinate symmetry remain in their deposited frames and expose their transforms.
MRC/CCP4-compatible volumes.parseMRC detects byte order, supports modes 0, 1, 2 and 6, validates dimensions/axis permutation, reads origin, starts, sampling, cell and labels, computes statistics and produces a grid-to-Cartesian transform.
Map operations. Local calls provide voxel lookup, trilinear sampling, gradients, absolute/sigma contours, Cartesian slices, marching-tetrahedra isosurfaces and masked Pearson correlation between equally sized value arrays. The isosurface is held against a closed form rather than against its own appearance: contoured on a field whose zero level is exactly a sphere, its area and the volume it encloses come within a fifth of a per cent of 4πr² and 4πr³/3 at the finest spacing tested, both errors falling as the grid refines, with every triangle wound the same way and every vertex normal pointing away from the region the contour encloses rather than up the gradient, which in a density map points inward. A level above every value in the grid returns an empty contour, and that contour is not marked truncated, because a truncated mesh is a different claim.
Full-field volume display. Ray marching uploads the complete source field as an R32F 3D texture, samples it trilinearly in the exact grid-to-Cartesian frame and clips integration at opaque molecular depth. Each field is integrated front to back; multiple fields are deterministically composited back to front by camera depth. Interpenetrating fields remain a display approximation, not a joint physical mixture or refinement result.
Unit-cell math. The crystallography module converts Cartesian/fractional coordinates, parses x,y,z symmetry expressions with rational translations, applies symmetry/lattice operations, builds reciprocal bases and calculates d-spacing.
Symmetry mates.generateSymmetryMates creates the requested mates within an explicit radius and lattice range. Biological assemblies remain a separate deposited operator set.
Minimum image. Orthogonal and triclinic cells are supported by fractional wrapping in minimumImageDisplacement/minimumImageDistance.
Contour + slice explorer
Inspect the source map without rewriting it
Open Maps + crystallography → Contour + slice explorer, or right-click the viewport and choose Contour + slice controls…. Choose sigma-above-mean or absolute units, contour value, voxel stride, opacity and colour. X/Y/Z slice controls inspect the retained source grid with a blue/white/red scale around the map mean.
Reproducible map display
Undo, record and reopen the same view
Rebuild contour creates only a derived display mesh. Record map inspection stores the source identity, contour, slice and statistics in Results. The raw map is content-addressed inside the .molscience package and the molstudio.science-map-display/1 parameters are restored on reopen.
Crystal mates + contacts
Review before materialising
Open Maps + crystallography → Unit cell + reciprocal spacing, use the Crystal mates + contacts workspace, and choose the radius and cell range. By default every eligible mate in that search is retained; enter a mate count only when you deliberately want a ranked subset. Parsed mmCIF symmetry expressions or PDB SMTRY operators are applied in their declared coordinate system; biological-assembly operators are never substituted. Review cross-object contacts, then materialise a grouped layer or independent objects with ordinary Undo.
Traceable expansion
Operator and lattice identity survive
Every generated mate retains the source object, crystallographic operator ID/expression, lattice translation, contact criteria and crystallographic-symmetry-expansion provenance. The molstudio.science-crystal-mates/1 extension, scene geometry and source hashes survive project save/reopen.
Format and method boundary. The current local volume decoder is MRC/CCP4-compatible. DSN6, BRIX, OpenDX, MTZ/reflection processing and map calculation are not silently approximated by it. Map correlation requires already registered, equally sampled arrays; it is not refinement. A contour is display geometry: its area and the volume it encloses are checked so that the mesh is the surface it claims to be, and neither is offered as a measurement of the map or of anything in it.
07b
Computed objects: fields and geometry
Calculated grids and authored shapes are scene objects in their own right, and never pass as measured data.
One record for measured and calculated grids. A field object holds a sampled scalar field: a density map read from disk, or a potential calculated here. Both carry the same grid, contours, slices and ray-marched display, separated by a required evidence value from the core vocabulary. A computed field cannot be constructed without its producer; a deposited field cannot be constructed without its source.
Producers.MolstudioScienceFields.runProducer samples a registered producer on the grid you asked for and records the producer id, version, complete parameters and a hash of the coordinates used.
Grid potential maps. Five built-in producers sample the same grid so they overlay exactly: electrostatic potential in kcal/mol per unit charge, van der Waals potential and apolar contact potential in kcal/mol, plus hydrogen-bond donor and acceptor proximity as geometric indices between zero and one. The two energy maps are a Lennard-Jones 6-12 sum for a neutral 1.9 Å carbon probe of well depth 0.1 kcal/mol against Bondi 1964 radii, truncated at 8 Å without shifting — an atom crossing that cutoff steps the field by 1.654 × 10⁻³ kcal/mol for carbon, which is the magnitude below which a contour is an artefact of the truncation rather than a feature of the molecule — and clamped at ±10 kcal/mol, so every clash harder than the clamp reads the same and a grid point landing on a nucleus reports +10 rather than the sum of the other atoms. The two proximity maps are the maximum over nearby partners of exp(−(r − 2.9)² / (2 × 0.45²)), a Gaussian well centred on the ideal heavy-atom hydrogen-bond distance and truncated at 5 Å where it still carries 1.866 × 10⁻⁵ of its peak. Taking the maximum rather than a sum is what makes the number an index between nought and one instead of a count: a point surrounded by six partners cannot read as a better hydrogen bond than a point with one good one. Only the heavy-atom distance is used, so angles, hydrogen positions, protonation and lone-pair direction are all ignored, and one ideal distance is applied to every partner element — a sulphur partner, whose Bondi radius sum with nitrogen is 3.35 Å, is scored down to 0.6736 at 3.3 Å and 0.4111 at 3.5 Å as though it were a poor contact. A truncation asked for below ideal + 3 × width, 4.25 Å at the defaults, is raised to that floor rather than honoured, because cutting the well closer would cut it at a visible fraction of its peak; the raise is reported. Because the well width and the Lennard-Jones interaction cutoff are two different distances that one option name used to drive together, a bare cutoffAngstrom is now refused by name in favour of interactionCutoffAngstrom and proximityCutoffAngstrom. Every one of these choices reaches the record through the limitations each run reports, generated from the same objects the arithmetic reads, because the recorded parameters carry only what the caller passed.
Grids are honoured exactly. A grid request resolves from an explicit grid, a box, or the coordinates plus a padding. If the result exceeds a limit you supplied, or cannot be addressed safely, the calculation refuses and reports the arithmetic. No spacing is quietly coarsened.
Signed fields open as paired sheets. A field spanning zero opens with matched positive and negative contours in two colours, capped so an opened field always shows a sheet rather than an empty viewport.
Geometry objects. Boxes, planes, arrows and dot clouds are exact meshes with their own wire edges. A search box defaults to the wire display, and restyling never moves it.
Mesh display styles. Any mesh — surface, density contour, field contour or geometry — draws as solid, mesh (wireframe) or dots. Wire edges are deduplicated and built only when a wireframe layer first needs them.
Slab clipping. A depth window measured from the camera clips every drawn primitive — atoms, bonds, lines, surfaces, contours and geometry alike — so a scientist can see inside a structure without hiding, deleting or editing any of it. Clipping is view state: it is never recorded as a coordinate change, and loading a new structure clears it so nothing stays hidden unawares. slab 12 sets the thickness, slab 6 25 centres it at a chosen depth, slab off removes it, and ortho switches projection.
Picking. Clicking the viewport picks whichever of the nearest atom and the nearest object is actually in front. Density contours opt out of picking so a click never walks a map’s triangles.
Pockets are fields. A detected pocket is a computed field over its own sub-grid, so it inherits contour levels, display styles, colours, picking, staleness and project persistence rather than reimplementing any of them.
Calculated fields
Sample a potential and contour it
Open Analyse → Calculated fields, choose the field, grid spacing and padding, then calculate. The field appears under Computed objects in the structure panel with per-contour level, style and visibility controls. The command surface offers field electrostatic-potential spacing 0.5, field list, field show|hide|remove and style <object> solid|mesh|dots.
Stale, not silently wrong
Coordinates move, answers do not follow
A calculated field records a hash of the coordinates it used. When those coordinates change the field is marked stale and stops being drawn, rather than being recomputed behind you or left showing an answer to a question you no longer asked. Recompute re-runs the same producer with the same parameters against the coordinates now in the scene.
Recipe-first projects
Small files, exact reproduction
A calculated field saves its producer, parameters and input hash rather than tens of megabytes of samples, and is recalculated on open. Tick keep the calculated samples to store the values instead. Measured maps always keep their bytes, because they cannot be recomputed.
Binding pockets
Find them, then look at them
Open Analyse → Binding pockets. A carbon probe is sampled on the grid you choose; connected regions that are both favourable and enclosed become ranked pockets. Each one appears as its own translucent envelope in its own colour, with volume, enclosure, buriedness and lining residues. Frame moves the camera to a pocket; Select lining selects the residues around it. The command surface offers pockets spacing 0.8 level -1 volume 40 and pockets clear.
Enclosure, not appearance
What separates a pocket from the outside
A convex surface is favourable to a probe everywhere, so favourability alone would report the whole solvation shell as one pocket. Enclosure is counted as protein-solvent-protein events along seven grid directions; a region must be enclosed along at least five of them by default. Lower that requirement to admit exposed grooves — the setting is recorded with every result.
Visible search box
Dock in the box you can see
box <cx> <cy> <cz> <sx> <sy> <sz> creates or moves a wire search box as a geometry object. It participates in Undo, appears in the object list and is stored with the project. The docking tools offer Show search box to materialise the typed dimensions, and a Search region selector that makes any box object drive the pose search instead.
Surface property colouring
Paint a surface with what you measured
Open Analyse → Colour a surface by property. Choose hydrophobicity on a published scale, B factor, occupancy, atom charge, the surface’s own concavity, distance from a point, or paste your own per-residue values — a conservation score from an alignment, for example. Values reach vertices through the atom each vertex belongs to, so a colour is attributable to a named atom. Vertices with no value are drawn in the undefined colour and counted. A pasted dataset is keyed by residue in one of three forms, and which one matched is reported with the result, because “A|24 0.91” and “24 0.91” colour the same picture and mean different things: the second names residue 24 in every chain, and where that is more than one residue it is refused by name, listing them, rather than painting one chain's score on all of them. Tick the box to declare that is what the values mean and it is applied to all of them and recorded as a warning on the result. Coverage is reported against the structure as well as against the surface — 12 of 13 atoms in 1 of 2 residues, where a buried residue owning no vertices left the picture reading 7,016 of 7,016 vertices coloured. A legend stays on the viewport with the range, the unit and the source of the scale.
Pockets are geometry, not affinity. Pocket volume is the volume of grid points a carbon probe finds favourable and enclosed, not a solvent-excluded cavity volume. Counts, volumes, shapes and lining lists move with the energy level, the grid spacing, the van der Waals radii, the depth of the probe-atom well the field is sampled at, and the laboratory frame the grid is axis-aligned to, and all five are kept with every result. The frame is the one that does not look like a setting. The grid’s axes are the laboratory x, y and z and its origin is anchored to the scoped atoms’ own bounding box, so turning the structure re-phases the sampling against it and re-cuts the six-connected regions a pocket is made of; a pure translation changes nothing, because the origin travels with the atoms. Over twenty rigid rotations of cytochrome P450cam (2CPP chain A, 3204 atoms) at the shipped 0.8 Å spacing the camphor site is reported in seventeen at 48.6 to 117.8 ų, spanning 86 per cent of its mean, with 20 to 45 lining residues for the same site — and in the other three nothing meets the 40 ų floor and the count comes back nought, the largest rejected region measuring 35.8, 36.4 and 37.4 ų. Four exact quarter-turns about the axes, which permute the grid without altering a coordinate, give counts of 1 or 2 and largest volumes of 46.6, 64.5, 65.0 and 80.9 ų. It is discretisation and it converges: over those four the span falls from 53 per cent of the mean at 0.8 Å to 2.5 per cent at 0.6 Å, and the enclosed-cavity flood fill below measures the same haem cavity at 403 to 422 ų across the same placements, so the structure is not what moves. Refining gridSpacingAngstrom is what narrows it, and it is the answer to a rejected region a few ų short of the floor rather than a looser threshold. The frame was the one thing this calculation did not declare: the diagnostic that says what a pocket count depends on named the level, the spacing and the well depth and closed the list at all three, and the module’s only sentence with the word orientation in it scoped orientation to buriedness, which is the per-pocket enclosure count and not the volume. Two superposed structures compared at the default differ by 86 per cent of a volume before any real difference is counted, which is the whole reason the surfaces one section above declare their own two per cent. The frame now travels with the result as grid.frame and with the parameters a saved project keeps as gridFrame, and the limitations carry these numbers. The radii are Bondi’s 1964 values, with iron and manganese taken as 1.80 and 1.73 Å because Bondi does not tabulate them, and they are not the RDKit set the molecular surfaces and solvent-accessible areas are built from: a pocket envelope and a molecular surface are therefore not expected to coincide, and the divergence between the two sets is declared under Architecture and scientific boundary. Bondi is kept because it is the set these probe-potential calculations are conventionally run with. The energy level, the interaction cutoff, the repulsive ceiling and the atom epsilon all take effect under the names the result reports them by, so replaying a recorded parameter set reproduces the answer instead of reverting to the default while declaring the value that was asked for. The well the probe sits in is sqrt(probe epsilon × atom epsilon) deep and the atom’s half of it is the caller’s to set, so it multiplies every value in the sampled field; the record named only the probe’s frozen 0.1 kcal/mol. 2CPP chain A at 1 Å spacing finds no pocket at all at that default and six at an atom epsilon of 0.4 — the largest 462.0 ų, mean potential −1.7959 kcal/mol — and the two results carried byte-identical parameters, identical limitations and nothing anywhere naming the number that separated them, so replaying the six-pocket record returned none. Both epsilons and the depth they combine to are now on every result as probeEpsilonKcalPerMol, atomEpsilonKcalPerMol and wellDepthKcalPerMol, named in its limitations, and named beside the level and the spacing in the diagnostic that says what a pocket count depends on. The separate enclosed-cavity calculation reads all four of its own — probeRadiusAngstrom, spacingAngstrom, paddingAngstrom and minimumVolumeAngstrom3 — the same way, and the shorter spellings the Lab's own form sends go on working. Two of those four were declared and not read: a 0.5 Å grid asked for as spacingAngstrom built the 1 Å grid instead and reported 2CPP chain A's haem cavity as 403.0 ų on 77×76×60 cells under a declared spacing of 1, where the grid that was asked for, 152×150×118, measures 414.1 ų — 2.8 per cent apart, with both results carrying identical parameters — and a 500 ų floor asked for as minimumVolumeAngstrom3 filtered nothing. A grid coarser than the 1.9 Å probe cannot resolve a pocket more finely than the probe that defines it, and says so as a warning naming both numbers, with every pocket’s grid-point count on the record: 54 ų reported on a 3 Å grid was two grid points. A coordinate that is not a number is refused with the atom named by residue, number and atom name, because an atom dropped out of the grid makes every pocket a pocket of a different molecule. Ordered water is outside the scope unless it is asked for, and every result states how many atoms that removed and by what rule: water is recognised by residue name — HOH, WAT or DOD — read from the first of residueName, compId, labelCompId or authCompId the atom carries. Reading only the first three of those recognised no water at all in a model built from a PDB file, which fills none of them and carries the deposited name in authCompId alone, so hen lysozyme entered the grid as all 1147 of its atoms — its 103 ordered waters among them — under a record that said includeWater false, where the same deposited entry read as mmCIF entered as 1044. At 0.8 Å spacing with a 10 ų minimum volume and four enclosing directions that was three pockets totalling 58.4 ų, the largest 31.2 ų and lined by five waters the same result named in its own lining residues, against one 36.4 ų pocket lined by protein. An ordered water fills the kind of space this calculation looks for, so which of the two a volume describes is not a detail of the record. Finding no pocket remains a legitimate answer, and the summary says how near it came by naming the largest rejected region. Nothing here is a druggability score, a binding-affinity estimate or a claim that a pocket is a real binding site, and the receptor is treated as rigid at its current coordinates.
Calculated is not measured. A field produced in the browser carries its producer and limitations into every report, manifest and export. The built-in electrostatic potential is a point-charge field with a declared dielectric model; it is not a Poisson-Boltzmann solution, and input protonation and partial charges are neither inferred nor validated.
07c
Interfaces and buried surface
What two chains bury when they meet, measured rather than modelled.
Buried area is a difference of measurements. Each side’s solvent-accessible area is computed alone and again in the complex; the difference is what the partner covered. Interface area is half the total buried area — the usual convention — and both numbers are reported so neither has to be inferred.
A shared coordinate travels with the number it spoils. Those areas are not defined for two atoms at the same coordinates — every sample point on one sphere lies exactly on the other’s boundary, so which of the two keeps its area is settled by floating-point noise rather than by geometry — and the area calculation says so by name, as a coincident-atoms warning. That warning is now carried onto the interface result with the atom indices, and each interface counts the pairs its own three measurements met as coincidentAtomPairCount; before, only the areas and the total were read out of that call and the qualification was left behind in a result no reader of the interface ever saw. It decides answers rather than decimal places: on a two-chain model one unmerged duplicate oxygen carries the buried total from 93.212 Ų to 125.564 Ų, across the 100 Ų default minimum, so the structure reported a 62.782 Ų interface where the merged copy reports no interface at all — and both came back with an empty diagnostics array. Nothing is merged and no area is corrected; the duplicate is left where it was written and the number is published with what is wrong with it.
A difference of two quadratures moves further than either. Those areas are sampled at a fixed set of points held in the laboratory frame, so each depends slightly on how the structure is oriented, and subtracting two of them cancels the areas without cancelling the sampling error. Over twenty rigid placements of 1HEW chains A and B at the shipped 240 sphere points the buried total runs 835.0 to 856.6 Ų about a mean of 843.2 — 2.6 per cent, a swing of 21.6 Ų — where the accessible area of the same structure over the same placements runs 0.6 per cent, so the difference is 3.7 times as orientation-dependent as the quantity it is a difference of, measured on relative standard deviation — 0.66 per cent of the buried total against 0.18 of the area. The polar and apolar splits move by 3.4 and 3.3 per cent with it and the polar fraction spans 0.557 to 0.567. Twenty square angstroms is the size of a real result at a small interface, and here it is what one rotation of the same file produces. Until now the interface result said nothing about orientation anywhere — not in its five limitations, not in its diagnostics — while the accessible-area calculation one call away had been stating its own 0.31 per cent on the same quadrature all along; the size is on every interface result now. It is quadrature rather than a broken algorithm, the spread running 5.4, 2.6, 1.0 and 0.25 per cent at 60, 240, 960 and 3840 points, so raising spherePoints narrows it and no area is corrected.
Per-side detail. Interface residues are listed for each side ranked by how much each buries, with the atom sets available for selection. The buried area is split into polar and apolar by element.
Explicit contacts. Cross-interface contacts, geometric hydrogen bonds and salt bridges are counted at declared cutoffs. Without explicit hydrogens no angle criterion is applied, so the hydrogen-bond count is an upper bound on geometrically plausible bonds and says so.
Elastic network normal modes. The Gaussian network model gives the size of each residue’s fluctuation and the anisotropic model gives its direction, both from springs between nearby backbone atoms. A mode predicts the shape of a possible collective motion and never its rate, its energy or whether it occurs; eigenvalues are in the units of the chosen spring constant and are not frequencies. Zero modes are reported rather than removed — six for one rigid body, and more when the network falls into disconnected pieces at the chosen cutoff, which is the model telling you so. That count is a count of eigenvalues under a threshold, and the threshold is zeroToleranceFraction of the largest eigenvalue, so the tolerance decides both how many modes are called zero and which mode is mode 1. It is declared with the parameters and the absolute threshold it became is reported beside each count as zeroThreshold; neither used to be, and neither did maximumSweeps. On 1CRN chain A the 1e-6 default reports six zero modes and a first eigenvalue of 0.32673555, while a tolerance of 0.05 over the same 552-contact network and the byte-identical spectrum reports twelve and 1.18227280, 3.6 times larger, with a warning that the network had fallen into pieces it was never in — and both results declared the same six parameters, so nothing in either told the two readers they had run different analyses. The warning about an unexpected count now names the threshold as well as the cutoff, and an unconverged spectrum is no longer read as a statement about the network: at a two-sweep limit the same structure reported 0 zero modes and falling into 0 disconnected pieces. A tolerance outside 0 to 1 is refused by name rather than clamped to the 1e-10 floor and then declared as the number that was asked for. Predicted fluctuations are compared against deposited B factors as a check on the model, not as a validation of either. A chosen mode draws as displacement arrows at a stated display scale, since the model has no amplitude of its own.
Virtual screening. A library is filtered on its descriptors and what survives is docked into the box you can see. The ranking is the pose-search heuristic score, most negative first, and two compounds that score exactly the same are ordered by their ids in Unicode codepoint order rather than in the host’s locale collation — so uppercase sorts before lowercase, an accented letter after every unaccented one, and “a10” before “a9”, but the same run breaks ties the same way on every build. It orders these compounds against each other in this run, and is not an affinity or comparable with a score from another receptor, box or parameter set. That score sums a per-atom contact reward, so it is extensive in ligand size, and across a library of mixed sizes the order approaches a heavy-atom count ordering. Every hit therefore carries its heavy-atom count and its score per heavy atom, and every run measures how far its own ranking tracks size: the Spearman rank correlation of score against heavy-atom count, on average ranks, is reported whatever it comes to, and at a magnitude of 0.9 or above over at least six compared hits the run is warned that what it has produced is a size ordering rather than a chemistry one. Six is where a perfect order stops being cheap — three hits fall into one by chance one time in three, six one time in 360. Where there is no coefficient the reason is named rather than left as a null, because fewer than three compared pairs is not the same absence as a run in which every hit has the same score, or the same heavy-atom count, or both. Steric feasibility does not enter the rank at all, so a compound whose best pose fails the excluded-volume screen is still ranked on that pose’s score, with the verdict on the row and in the diagnostics. A pose with no receptor atom inside the scoring cutoff scores exactly zero, which is an absence of measurement rather than a neutral result: a run where that holds for every compound is refused by name instead of publishing the codepoint order of the library as a ranking, and where it holds for some, those compounds are named. Every hit records the seed it was docked with so a single row can be reproduced, though reproducing the whole ranking needs the same library order as well. The seed the whole run started from is reported as baseSeed and is accepted back under that same name, so a recorded screen replays as itself. It did not until recently: only seed was read, so handing a result’s own parameters back ran at the 20260814 default and then declared that default as though it had been chosen. Three alkanes docked into a 27-carbon block at seed 99 scored −8.9730, −7.4554 and −5.9788, and the replay of their own parameters scored −9.1552, −6.9104 and −5.2816. Nothing is dropped quietly — a compound removed by a filter is listed with the criterion that removed it, a compound that fails to dock is listed with its error, and a library above an explicitly supplied limit is refused rather than truncated. A cancelled run reports nothing rather than a partial ranking that could be mistaken for a finished one.
Nucleic acid geometry. Base pairs are classified the way the field classifies them: by which edge each base presents — Watson-Crick, Hoogsteen or sugar — and whether the two glycosidic bonds are cis or trans. The edge is decided by which edge atoms actually make hydrogen bonds, so a pair using an unexpected edge is reported as what it is rather than forced into Watson-Crick, and only a canonical combination on Watson-Crick edges in cis is called canonical. The glycosidic nitrogen carries the sugar and is excluded from pairing. Base stacking carries the rise and the lateral offset of each step, measured along the mean plane of the two bases — the bisector of their two ring normals, reported with the step as meanPlaneNormal — so a step reads the same whichever base is named first. Measured against one base’s own ring normal, which is what it was, the base that supplied it was whichever of the two sorted first by chain id then residue number: the Drew-Dickerson dodecamer reported 21 stacks for the 22 dinucleotide steps a B-form duplex has, because B/DC13-B/DG14 read offset 3.646 Å from DC13’s normal and 2.776 Å from DG14’s across a 3.5 Å cutoff, and renaming residue 13’s chain with the coordinates untouched brought it back. The rise moved with the labelling too — 3.139 Å against 4.018 Å on A/DG10-A/DC11, a quarter of a base-pair rise — on a number presented as a measurement. Against the mean plane all 22 steps stack, at 3.398 to 3.724 Å. These are still not helical-axis measurements from a fitted reference frame. Also the α to ζ and χ backbone torsions and Altona-Sundaralingam sugar pucker with its pseudorotation phase and conformation. Groove widths, where a duplex was actually recognised, are the cross-strand phosphate-to-phosphate spans between two canonical pairs two to eight base-pair steps apart, less a 5.8 Å van der Waals correction — both diagonals of every step, because two base pairs span both grooves and one diagonal measures one groove. One diagonal was taken, over the upper triangle of an array sorted by hydrogen-bond count, so which spans a duplex reported followed base composition rather than shape: the Drew-Dickerson dodecamer gave 38 of its 98 spans, narrowest 3.103 Å, and swapping the two chain identifiers in column 22 with every coordinate byte untouched gave 46 spans and 4.194 Å — 1.09 Å, 35 per cent, on the number a reader takes as the minor groove width. It is 84 spans and 3.103 Å now, whichever way round the chains are named and in whatever order the pairs arrive. The spans that cannot be measured are counted rather than dropped in silence: 14 here, each reaching a 5’-terminal nucleotide that carries no phosphorus atom. No span is called minor or major — which of a step’s two diagonals crosses the minor groove follows from the helical axis and the strand directions, and neither is fitted here. A base whose ring is not complete has no plane to fit and cannot be measured, so the residue is excluded — by name, which it was not. Deleting the single ATOM record for N1 of A/DG4 from the same dodecamer, one ring atom of one residue with the other 21 heavy atoms of it still supplied, gave 23 nucleotides, 11 pairs and 11 canonical against 24, 12 and 12, read strand A as CGCAATTCGCG, and returned an empty diagnostics array both times: a census of what could be measured, reading as a census of what was supplied, on the one class of residue — a disordered base — that is ordinary in a deposited structure. Both counts are on the result now, suppliedNucleotideCount beside nucleotideCount; every excluded residue is listed in excludedNucleotides with the ring atoms it lacks and how many of its atoms were supplied; an incomplete-base-ring warning names them, and the conventions state that the counts are of what could be measured. Its backbone torsions and sugar pucker go with it even where those atoms were supplied, and the partner it would have paired with is left unpaired — both in the limitations. Where no ring at all is complete the analysis refuses and names the residues rather than reporting an empty duplex.
Two-dimensional interaction diagram. The ligand is projected onto its own principal plane rather than re-laid-out from connectivity, so the drawing keeps the shape of the observed pose and a residue drawn to one side really is on that side. That claim rests entirely on the plane being the molecule’s rather than the coordinate file’s, and for a while it was not: the cyclic Jacobi sweep behind it was not a similarity transform, so the numbers read off its diagonal and out of its accumulated rotations were an eigen-decomposition of nothing and every projected coordinate followed the orientation the file happened to be written in. The sweep is now written out as two full matrix products and checked against closed forms and against numpy rather than against its own intent: over the 124 symmetric matrices the oracle spans — including a multiple of the identity, a rank-one matrix and the zero matrix — every eigenpair satisfies Av = λv to under 10⁻¹⁵ of the largest eigenvalue, and the eigenvalues agree with numpy.linalg.eigvalsh to 10⁻¹¹ of that scale. The plane is the one that minimises the sum of squared out-of-plane distances of the heavy atoms; the principal values reported beside it are sums of squared deviations and not variances, so a covariance computed with a 1/n or 1/(n−1) divisor is smaller by that factor. Which way the page points is a declared convention rather than a measurement: each in-plane axis turns toward positive atomic-number-weighted third moment, and the normal is u × v, so the view is from the +normal side. Where the molecule is too symmetric for either rule to decide, the diagram says so instead of giving an arbitrary choice the authority of a determined one. Benzene’s two in-plane principal values are equal at 5.7963 Ų and its weighted third moment vanishes, so the picture is fixed only up to a rotation and a reflection and the same pose could be drawn as its own mirror image from an equivalent file; adamantane’s three principal values agree to five figures, so which plane it is projected onto is not determined at all, and a 10⁻⁶ Å nudge to one atom swings the normal by 2.7°. Heavy atoms that lie on a line have no plane to be projected onto and are refused by name rather than answered with angles that would mean nothing. Contacting residues are placed in the direction they occupy; where two would overlap the later one is stepped around the ring and both the record and the drawing mark it as moved. Atoms that land on top of each other in projection are reported, never nudged apart. An edge distance is not the same measurement from one interaction type to the next, so each edge names what its number measures, and a water-mediated bridge reports the ligand-to-water leg with the second leg beside it because the ligand and the residue are not in direct contact at all. The SVG is a pure function of the diagram record, so what is exported is what was measured.
Pharmacophores. Feature points typed as donor, acceptor, hydrophobe, aromatic, positive or negative ionisable and halogen-bond donor, each with a tolerance radius. A model can be derived from a bound pose by keeping only the ligand features within a chosen distance of the receptor. Matching is greedy nearest-first geometric assignment: deterministic, never reusing one pose feature for two model points, and reported as how many features matched and how far off they were. Feature direction is not used, and nothing is moved to make a model fit. Features display as one coloured dot cloud per type, so a colour in the viewport means what the same colour means in the list.
Saving a figure. The viewport as an image, at a chosen multiple of its resolution — without this everything else the Lab draws is unreachable for a paper. The frame is rendered immediately before the pixels are read, which is what makes it work at all on a context without a preserved drawing buffer, and text and line widths scale with the image so what you get is the figure on screen at higher resolution rather than a differently proportioned one. The resolution, megapixel count and the physical width implied at 300 and 600 dpi are all reported, since a submission form asks for millimetres. PNG, JPEG and WebP; JPEG names its own cost, which in a molecular figure is an artefact on every bond and every label. There is no transparent background, because the viewport is opaque and delivering an opaque file while implying otherwise would be a lie about it. Nothing is uploaded: the file is written by the browser. png my-figure 4.
Common scaffold and chemical superposition. The largest connected substructure two ligands share, and the rigid transform that puts one on the other by it — what a ligand series is compared with. The match is induced, so six carbons in a ring never map onto six in a chain, and connected, because a scaffold is one piece and not the largest scattering of fragments. Hydrogens are left out: two analogues rarely share a scaffold’s hydrogens, and counting them would shrink every answer for a reason nobody means. The search is exhaustive within a step budget and reports whether it finished — exhausted, what comes back is a common substructure and is explicitly not claimed to be the largest, because a lower bound presented as a maximum would let somebody conclude two molecules share less than they do. Three matched atoms are the minimum a rigid transform needs and three collinear ones are still not enough; either way the reason is named rather than a rotation returned that is one of infinitely many. Two molecules can share several different substructures of the largest size, so only the size is unique: the mapping reported is one of them and its bond count is that mapping’s, not a maximum. The pair is searched in a fixed orientation rather than in the order it was given, so the same two ligands give the same answer whichever is dragged onto which — vardenafil against amoxicillin used to report seven shared bonds one way and six the other, both claiming a finished search, and testosterone against progesterone reported 0.8095 of the smaller molecule one way and 0.7143 the other. The transform is reported, never applied. Reachable as scaffold.
Displacement ellipsoids. The anisotropic displacement parameters deposited in ANISOU records, drawn as probability surfaces — the shape a crystallographer uses to show not just how much an atom moves but in which direction. The reader now keeps those parameters instead of silently discarding them. The probability enclosed is computed from the chi-squared distribution rather than read from a table, and is quoted with every result because ellipsoids drawn at 50% and 95% cannot be compared by eye. An atom whose displacement matrix is not positive definite — which poorly restrained refinements do produce — has no ellipsoid and is counted, rather than being given a confident-looking shape. None is derived from an isotropic B factor: that is a different measurement, and drawing it as an ellipsoid would invent the very direction the ellipsoid exists to show. ellipsoids 50, ellipsoids 0.95, ellipsoids off.
Sequence conservation. Paste homologous sequences and the structure is coloured by how much they agree at each residue, through the same gradient machinery as B factor. Conservation is a property of the alignment, not of the coordinates, so every result carries how many sequences it came from and how similar they were to each other — at 90% mutual identity almost every column agrees and the figure looks conserved everywhere regardless of what is constrained. A residue whose column had fewer than two observed sequences is left uncoloured rather than painted the confident end of the ramp, and an ambiguity code — X for any residue, B for aspartate or asparagine, Z for glutamate or glutamine — counts as present but is excluded from identity, entropy and similarity, because a letter that stands for two residues agrees with neither. The structure’s own chain must be in the alignment, matched on its residues rather than its name; if it is absent, or its residue count does not match, nothing is coloured and the reason is given. The gap score the sequences are aligned with is reported alongside the result, because a different penalty puts different residues in each column: chain A MKLIV against three MKPIV homologues aligns ungapped at the default −4 and Leu3 scores 0.594, while at 0 the alignment becomes MK-LIV / MKP-IV, Leu3’s column holds one observed sequence and carries nothing, and the mean conservation reads a falsely perfect 1 instead of 0.919. An empty or unreadable Gap score box is refused by name rather than read as 0 — free gaps are a thing you can ask for, not a thing a blank field should decide.
Nonbonded crosses. Lines draw bonds, so an atom nothing is bonded to — a water oxygen, a chloride, a metal ion — has no line to draw and was not drawn at all: the atom was in the structure and the display never mentioned it. The nonbonded representation draws a cross at exactly those atoms, and only those; a structure where everything is bonded shows no crosses rather than crossing out the whole thing. Arm length is a layer setting in ångström, and selection scoping still applies on top.
Ambient occlusion and outlines. Screen-space shading over the finished frame: crevices darken where geometry crowds them, and silhouettes and creases can be outlined. Both read the depth buffer of the same scene, so neither adds anything that is not there — occlusion darkens where the structure occludes itself, and an outline is drawn where the depth actually steps. Depth is linearised first, so an outline keeps its weight and an occlusion radius means ångström at every distance. Sampling is a deterministic spiral rather than a noise texture, so the same view always produces the same image and a figure reproduces. Both are off by default because each costs a second pass. outline 0.8 2, ambient 0.6 3, outline off, ambient off. There is deliberately no bloom, depth of field, colour grading or motion blur: those invent appearance a structure does not have, and a test guards against them.
Depth cue. Colour fading towards the page with distance, on by default because a structure without it reads flat. It is the cheapest thing that makes a crowded view readable: it tells the eye which of two overlapping features is in front. Strength moves the fade towards the viewer rather than changing where it sits, and the interval follows the scene unless you give it one — so the cue rescales with the structure instead of needing a number per structure. depthcue 0.8, depthcue 12 48, depthcue auto, depthcue off.
Cartoon shape. Eight shapes for the same ribbon: automatic, rectangle, arrow, oval, tube, loop, dumbbell and putty. An arrow puts a head on every strand rather than only the one ending the chain. A putty scales its radius by the deposited B factors between two radii you choose, and reports the mapping it used — it is a display scaling of what the depositor wrote, not a measurement of motion. A residue without a B factor is drawn at the mid radius and counted; a structure without any is refused, because a sausage of invented thickness in a figure outlives every caveat around it. Reachable as cartoon putty, cartoon tube and so on.
Labels. Text written into the viewport, tracking the atoms it names: element, atom name, residue name and number, chain, B factor, occupancy, formal charge, or your own note. One label per atom, residue or chain; a residue label sits on the Cα or C1′ a reader expects and says so. A label quoting a number shows the value deposited in the record, an atom carrying no such value is left unlabelled and counted, and asking to label by a column the structure does not have is refused rather than answered with zeros. Labels that land on top of each other are thinned nearest-first and the number hidden is stated — they come back as the view turns. Reachable as label residue, label resn, label b, label text … or label off.
Ligand descriptors. Constitutional counts, ring and saturation figures, Ertl topological polar surface area, and Wildman-Crippen logP and molar refractivity, feeding the Lipinski, Veber and Egan rule filters. The partition coefficient applies the published atom-contribution table verbatim, and is checked atom by atom against RDKit over 114 molecules exercising all 72 of its atom types. It remains a model of octanol-water partitioning rather than a measurement of it, and it describes the neutral species as drawn — protonation, tautomer and salt form all change it and none are inferred. A logP you measured or trust more can be supplied, takes precedence, and keeps its own source, with the calculated value still shown beside it. Polar surface area is refused rather than approximated when a polar atom’s hydrogen count is genuinely unknown.
Interaction types beyond hydrogen bonds. Aromatic stacking is typed as face-to-face or edge-to-face rather than lumped together, alongside cation-π, halogen bonds with the σ-hole angle criterion, amide–aromatic stacking and water-mediated bridges. Aromatic rings come from standard residue and nucleobase templates; a ring found only in the bond graph is reported as a planar ring, because planarity is what was measured. How flat a ring has to be to count is maximumPlanarityDeviationAngstrom, the largest distance any atom of it may sit from the plane fitted to that ring, 0.25 Å by default and declared with the other cutoffs — it was not. Both ring finders read it against a bare 0.25 Å literal that was in no parameter set and no document, so a default run declared no planarity limit at all while that limit decided which rings existed for every stacking and cation-π verdict to be taken over. It is not a small number: on 2CPP chain A the same coordinates give 50 rings and 19 interactions at 0.05 Å, 70 and 24 at the 0.25 Å default and 80 and 26 at 0.5 Å, because the bond graph’s 30 proline pyrrolidines pucker from 0.0412 to 0.3925 Å where the worst aromatic ring in the structure is 0.0549 Å. What the cutoff really decides is which puckered aliphatic rings are admitted as stacking partners, so the rings it rejects are now counted and named in a rings-rejected-for-planarity diagnostic with the deviation each was measured at, rather than vanishing, and a value that cannot govern — zero, negative, or a word — is refused by name instead of being replaced by the default, which is what 'wide' used to be: recorded in the parameters and never applied to anything. Every result carries the distances and angles that made it qualify, so the rule can be disagreed with rather than the verdict.
Grouping. Chains are the default partition. Explicit groups let one chain be measured against another part of itself; an atom can only be on one side, and overlapping groups are refused.
Interfaces
Rank a complex by what it buries
Open Analyse → Interfaces + buried surface. Choose the probe radius, sphere-point count, contact cutoff and minimum buried area, then measure; the defaults are 1.4 Å, 240 points, 4 Å and 100 Ų. The van der Waals radius set is not among the choices — it is whichever set the solvent-accessible-area calculation is pinned to, asked of that module and reported rather than selected. Select selects both sides of an interface; interfaces select interface-1 a selects one side. Pairs with no contact, and contacts below the minimum area, are counted in the diagnostics rather than quietly dropped.
Area is not affinity
What the number does not say
Buried area describes an arrangement of coordinates. It is not a binding free energy, a stability prediction, or evidence that an interface is biological rather than a crystal contact — compare against the deposited assembly definition for that. Three things move the number and all three are retained with the result: the van der Waals radius set as radiiSet, the probe radius and the sphere-point count. A fourth is not a setting at all — how the structure happens to be oriented moves the buried total by 2.6 per cent at the default 240 points, the same order as the 1.5 to 3.4 per cent the radius set is worth — and it is declared on every result too. The radius set is named on every result because an area cannot be reproduced or compared without it, not because it dwarfs the rest. These areas are measured with [email protected], the same set solvent-accessible area and clash detection use under Measurements, contacts and local analysis. Measured against freesasa running its own ProtOr radii the same buried areas come out 1.5 to 3.4 per cent low; measured against freesasa handed this set they agree to 0.02 per cent, so the whole of that difference was which radii were used and none of it was the algorithm. The Lab’s other published set, Bondi 1964, is the one the open-pocket search and interaction typing run on, and how far the two diverge — 3.2 per cent on nitrogen, and worst at the metals a pocket search is pointed at — is set out under Architecture and scientific boundary. An area quoted without the set that produced it can be neither reproduced nor compared against a published figure.
08
Trajectories and periodic boundary conditions
Trajectory frames never substitute for topology; atom count and ordering must match explicitly.
Format / operation
Current local behaviour
Boundary
DCD
Endian detection, CHARMM header, fixed-atom frames, optional fourth record, step/time metadata and orthogonal/triclinic unit-cell records; coordinates stored in Float64.
Position unit is treated as Å; time retains the declared DCD delta convention unless specified.
XTC
Compressed and small-system decoding, per-frame step/time and 3×3 box; nm positions and box values converted to Å.
Atom count must remain constant. The companion topology supplies identity and bonds.
Topology verification
Atom count is mandatory; an expected stable-ID order can also be checked.
No best-effort atom remapping is performed.
PBC
Each frame may carry a periodic box; triclinic minimum-image utilities are available.
Measurements, spatial selections and contact analysis do not enable PBC automatically. Pre-image/unwrap or call the periodic utilities explicitly.
Statistics
Per-frame RMSD and per-atom RMSF against a chosen frame.
Current statistics are unaligned and do not remove global translation/rotation.
The local decoder reads the complete DCD/XTC trajectory requested by the user and does not silently drop atoms, frames or coordinate values. Cancellation or a real allocation/runtime failure leaves the previously loaded trajectory intact. TRR and NetCDF are not decoded by the current local trajectory module.
09
Sequence and small-molecule chemistry
Sequence identity, observed coordinates and chemical preparation remain distinct records.
Sequence ↔ structure
Label or author namespace
sequenceFromTopology groups observed residues without discarding insertion codes and can use deposited entity_poly_seq to identify unobserved positions. Namespace selection is explicit, and each field falls back to the other namespace when its own is empty. A PDB file fills only the author fields, so reading the label namespace alone gave every residue a null chain and a null sequence number: the residues collapsed into one entry and a whole protein came back as a one-residue sequence. The insertion code is read under both the names the parsers write for it, without which residues 100, 100A and 100B merge into one, which is the antibody CDR case.
Polymer membership
A chain is its polymer
A residue joins a chain when it is an ATOM record, or when it is a HETATM whose component is a known amino acid or nucleotide. Waters and ligands sitting inside a chain are not members of it: counting them gave haemoglobin’s alpha chain 265 residues where the globin has 141, and read the Drew-Dickerson dodecamer as CGCGAATTCGCG followed by thirty-seven N’s, one per water. Thirty-two modified protein components carry the one-letter code of the parent component the Chemical Component Dictionary assigns them, selenomethionine included, so a structure phased that way does not read as X through the middle of its own sequence; the nucleic table does the same for modified nucleotides, so a pseudouridine reads as U and a 5-methylcytosine as C. A component neither table recognises still reads as unknown. Chain lengths come out as published: crambin 46, ubiquitin 76, hen lysozyme 129. Where a deposited entity sequence exists, the result reports completeSequence false rather than presenting what was observed as the whole sequence.
FASTA + alignment
Reproducible pairwise work
FASTA parse/format, protein/nucleic component mapping, sequence composition, DNA/RNA reverse complement and global/local linear-gap pairwise alignment are local. The substitution matrix is BLOSUM62 as NCBI publishes it, all 529 entries checked against the published table in both directions, and it is the one table the structural alignment and the conservation tools read, so the three cannot give different answers about the same pair of residues.
SDF / MOL
V2000 and V3000 records
The chemistry module reads atom coordinates, source indices, formal charges, isotope/mass differences, bond order/stereo and SDF data fields where present. A V2000 file stores a ring in its Kekulé form and the parser reads what the file says rather than perceiving over it, the same discipline it applies to SMILES; perception is a separate step with its own result. Twelve records covering charges, isotopes, radicals, stereo, multiple fragments and fused heteroaromatics are held against RDKit in both directions, the written files handed to RDKit rather than only back to this reader.
MOL2
Atoms, bonds and substructures
MOL2 records retain atom type, partial charge, substructure and bond type. Formula, adjacency, average mass and compact constitutional descriptors are derived locally. A molecular formula and an average mass count the hydrogens the record does not draw as well as the atoms it does, and carry the net charge, so acetate is C2H3O2−; where a hydrogen count cannot be settled the result says which atoms and reports the formula and mass as lower bounds rather than totals. Masses are the IUPAC conventional atomic weights, named in the result, and they are not the RDKit periodic table that MolstudioMolecularIO pins — a divergence declared under Architecture and scientific boundary rather than left to be discovered.
SMILES
Paste, review, add and dock
The local reader accepts common organic and bracket atoms, charges, isotopes, aromatic graphs, branches, ring closures, disconnected fragments and retained atom/bond stereo tokens. Starting geometry is an explicit choice between a flat two-dimensional depiction and a generated three-dimensional conformer; it adds the ligand as an independent scene object, and can open object-aware docking against a chosen receptor at a bound site, its centroid, a current/picked site or explicit XYZ centre. The exact hydrogen count each atom carries is stamped onto the record as the string states it, because a SMILES string fixes it and this is the one place in the Lab that knows it for certain.
Chemical-preparation boundary. Donor/acceptor and rotatable-bond descriptors are heuristics, but they no longer depend on hydrogens being drawn. A hydrogen count comes from the record where the record states it and otherwise from the element, the charge and the bond orders, so a molecule written without explicit hydrogens, which is nearly every SMILES, reports the donors it has: ethanol, methylamine, acetic acid, acetamide, benzamide, aspirin and glycine each used to return their acceptors and no donor at all, and a pharmacophore missing half its hydrogen-bond features still matches things, just the wrong ones. Where the count cannot be derived at all the atom is marked indeterminate and the descriptor refuses rather than answering, because a question that cannot be answered must not be answered “no”: polar surface area is refused outright rather than approximated. Aromatic nitrogen is the case valence cannot settle, since pyrrole’s nitrogen carries a hydrogen and imidazole’s second one does not while their bonds are identical, so a record that declares nothing leaves it undecided. Rotatable bonds exclude ring bonds, decided exactly by whether a bond is a bridge in the connectivity graph rather than by ring perception. Protonation, tautomerism, salt form and source bond order still change every one of these numbers and none of them are inferred. SMILES chirality and directional-bond tokens are retained but the layout does not assign CIP or E/Z labels. The local chemistry module does not assign force-field atom types, generate tautomers, perceive missing bond orders or validate stereochemistry against an external dictionary.
10
SMILES to ligand to docking
A first-class local path turns an explicit chemical graph into a reviewable scene object, then searches pose hypotheses against a separately chosen receptor.
PasteName the ligand and enter SMILES.
ReviewInspect graph, charge, formula and diagnostics.
AddCreate an independent ligand object.
SearchChoose receptor, site, box and seed.
ApplyInspect ranked poses; apply or undo.
Exact workbench procedure
Load the receptor as its own object. Import a PDB/mmCIF record and use Add as object when another object is already present. The receptor and mobile ligand remain distinct throughout the search.
Open Model + ligands → Build ligand from SMILES. Enter a ligand name, choose the starting geometry, paste the string, then choose Parse + review ligand. Starting geometry is an explicit choice between a 3D conformer, which is what a search needs, and a 2D depiction, which is a flat drawing and cannot be docked. The review reports graph atom/bond counts, fragments, baseline formula, formal charge, stereo-token count, the built geometry’s measured extent and every parser/valence diagnostic. An error disables addition rather than inventing chemistry.
Add, or add and continue directly to docking.Add ligand to scene creates an independent ball-and-stick scene object. Add ligand + choose docking site creates the same object and carries it into the docking workspace as the mobile object.
Two refusals stand in front of the search. Before a form is offered, the workbench measures whether the ligand has a three-dimensional shape at all, from the coordinates in the scene rather than from the label attached to them, and refuses a ligand whose saturated centres lie in a plane: numbers come out of a flat ligand and nothing about them looks wrong, which is why the refusal is worth more than the ranking. The check is graph-aware, so a legitimately planar molecule such as benzoic acid is not accused of it, and the thickness it turns on is measured about the molecule’s own best-fit plane rather than along a coordinate axis — the same number wherever the scene has since moved the ligand to. Measured the other way, as the smallest side of the axis-aligned bounding box, the flat depiction of ibuprofen reads 0 Å as drawn and 1.75 to 6.46 Å once a rotation has been applied to it, and the refusal fired in 16 of 500 uniformly random orientations of a molecule whose every z is exactly zero — that is, it worked in the frame the depiction is built in and almost nowhere else, while docking is the workflow that makes the ligand mobile. The threshold is 0.4 Å: below the 0.45 Å that a pyramidal centre forces on the molecule holding it, and below the 0.614 Å of the thinnest real conformer it has been calibrated against, an RDKit isopentane. The panel prints the thickness and the threshold beside the box, so a refusal that nearly happened can be told from one that was never close. Receptor and ligand are then surveyed for elements the mechanics parameter table cannot score. What is offered is a deliberate exclusion of the receptor atoms concerned, recorded with the result, or a complete supplied parameter set for a ligand atom, which cannot be excluded. A substituted element is never offered.
Choose the receptor and site centre explicitly. Site choices are the site of a bound ligand or metal where the receptor has one, Receptor geometric centre, the centroid of the current receptor selection, the last viewport-picked receptor atom, or explicit X, Y, Z coordinates in Å. Selection and picked-atom choices are enabled only when those atoms belong to the chosen receptor object. Where no bound site is found the centre defaults to the receptor’s geometric centre, which is its core rather than a pocket, and the panel says so instead of letting it pass as a site.
Declare the search. Set the X/Y/Z search-box dimensions in Å, sample count, number of retained poses and unsigned random seed. Defaults are 24 × 24 × 24 Å, 800 samples, 12 retained poses and seed 20260814. The worker evaluates the requested sample and retained-pose counts without silently reducing either. The box is drawn in the viewport where the search will happen, because a site described in a sentence cannot be told from the middle of a protein by looking.
Inspect before changing coordinates. Results are ranked and expose the run-internal heuristic plus clash, contact, electrostatic and excluded-volume diagnostics. Every pose that passes the steric screen ranks before a severely interpenetrating pose; excluded poses remain visible for diagnosis but cannot be applied. That guarantee depends on the scoring cutoff being long enough to see the overlap it screens for, so a cutoff shorter than the largest van der Waals boundary among the atoms actually present is refused with the value it needs rather than reporting a clear pose it never examined. Apply pose changes only the ligand object, writes the selected rank, score, algorithm, parameters and limitations to its derived provenance, frames the ligand and shows the site around it, and creates an Undo snapshot. The site view draws the residues within a declared radius of the ligand and hides the receptor’s blanket layers rather than deleting them, so closing it restores exactly what was on screen before. If the receptor, the ligand or their coordinates change after a search, stale pose buttons fail closed and the search must be repeated.
Draw or edit the molecular graph directly
Choose Manual atom graph… from the SMILES workspace, or right-click an active authored ligand and choose Edit molecular graph…. The editor docks in the notebook column beside the viewport, like every other tool, in a column of up to 430px: the drawing stage keeps its own minimum area and the inspector its own column, and the editor scrolls rather than shedding controls, so no graph control is hidden by the narrower mount. Below 1080px the structure panel is dropped so the editor and the viewport both have room.
Place and connect atoms visually. Choose Add atom and click empty graph space, or choose Add bond and click its two endpoints. Drag an atom to reposition it; the inspector exposes element, formal charge and exact X/Y/Z coordinates. New-bond order can be single, double, triple or aromatic.
Correct without fear. Select an atom and press Delete, or right-click it for an explicit delete action. Draft Undo and Redo cover atom, bond, charge, coordinate and layout changes before the scene is touched. Layout 2D produces a flat deterministic topology layout for reading the graph. Layout 3D runs the same conformer builder the SMILES path uses, so it is a generated local geometry rather than a drawing, and it is still not a conformational search, an ensemble or the bioactive conformer.
Validate, then commit once.Validate valence reports the local baseline screen. Add graph to scene creates an independent ligand object; Update scene object replaces the edited object as one reversible project action. Source graph, explicit bond orders and authored-coordinate provenance survive save/reopen and Studio handoff.
Supported local SMILES grammar
Construct
Accepted locally
Retention / interpretation
Atoms
Unbracketed B C N O P S F Cl Br I; bracket atoms may use any recognised periodic-table element. Unbracketed aromatic b c n o p s and bracket aromatic se as are accepted.
Element, aromatic flag, source token and character offset are retained per atom.
Bracket annotations
Isotopes 1–999; @, @@, @TH1/2, @AL1/2, @SP1–3, @TB1–20 and @OH1–30; declared H counts 1–99; formal charge magnitude ≤15; numeric atom class/map.
Chirality and bracket-H declarations are retained metadata. The layout does not assign CIP labels, validate stereochemistry or expand bracket H into positioned atoms.
Directional tokens are retained as unresolved stereochemical intent. Aromatic connectivity uses the declared local valence screen.
Rings and fragments
Ring labels 0–9 and %nn; disconnected fragments separated by ..
Ring closures must be paired and remain inside one fragment. Multiple fragments remain one object and emit a salt/counterion review warning before docking.
Parser safety bounds
20,000 characters, 4,096 atoms, 8,192 bonds, 1,024 nested branches and 2,048 ring closures.
A malformed or adversarial input that exceeds a bound throws a named error; the parser never truncates an accepted molecule.
Unsupported constructs fail at their source position. Reaction SMILES (>/<), SMARTS/query tokens and wildcard atoms (* $ ! ? & , ; { }), CXSMILES annotations (|…|), extended %(nnn) ring labels, internal whitespace and unrecognised bracket annotations are rejected with a stable error code, one-based character position and nearby source context. Unmatched/empty branches, unpaired or cross-fragment rings, conflicting ring bond types, empty fragments, consecutive/dangling bonds and self-bonds are also errors. Unsupported tokens are never guessed.
Source, coordinates and evidence
Exact source
The accepted string survives every step
The exact SMILES accepted by the parser—after removal of outer whitespace; internal whitespace is invalid—is retained byte-for-byte as the object’s .smi source. Its deterministic fingerprint, parser ID/version, parser limits, graph tokens, stereo tokens, diagnostics and stated limitations remain in the object extension, project record and restored editable graph.
Starting geometry
A drawing and a conformer are different objects
The 2D choice is a deterministic topology layout for reading a graph, and it is not a conformer: a flat ligand has no shape to dock and the docking panel refuses it. The 3D choice builds one generated local conformer, with bond lengths from Cordero 2008 covalent radii, angles from the hybridisation and the smallest ring at each atom, the graph walked in a local frame, and the built-in minimiser then closing the ring bonds the walk left open and relieving contacts. Aromaticity is perceived rather than read from the written form, so benzene written C1=CC=CC=C1 and written c1ccccc1 give identical geometry to four decimal places, and a torsion and an inversion term hold conjugated systems flat. The result reports the measured extent, the worst bond error and the closest non-bonded contact, and a relaxation that stops at its iteration limit says so, because a geometry that had not finished relaxing may be strained in every one of those three. It is one generated local geometry, not a conformational search, a conformer ensemble, a force-field minimum in any validated sense, an experimental pose or a chirality-enforcing construction; protonation and tautomer state are not inferred or enumerated.
Reproducible search
Inputs and candidates stay attributable
The receptor object, receptor-site atom IDs or XYZ centre, box dimensions, samples, retained count, seed, algorithm/version, score terms, selected pose rank and limitations are recorded. Every declared tunable is accepted under the name the result declares it by, so handing a result’s own parameters back reruns the search that produced it. Re-running against an unchanged state with the same seed is deterministic.
Reversible state
A hypothesis never overwrites silently
Applying a ranked pose records a computed derived state for the ligand only. The prior placement is recoverable with Undo; the deposited receptor coordinates and the ligand’s source graph remain unchanged.
Score and affinity boundary. The built-in search generates pose hypotheses with a generic full-periodic-table element parameter set, seeded acyclic single-bond torsion sampling and a rigid receptor. Its heuristic ranks candidates only within that run. It is not binding affinity, binding free energy, probability, exhaustive search or a validated docking result, and it omits receptor flexibility, solvation, entropy and chemistry-specific interaction typing. Its electrostatic term softens the separation by adding 0.25 Å in quadrature, 1/sqrt(r² + s²), and declares both that length and that form with the score terms. It is the same length and the same form compute.electrostatics samples a field with, so a potential read off a grid and this term are one function of separation, differing only in the dielectric — 12 by default here against 4 there — and in the weight the score applies to it. They did not agree until recently: this term took the larger of the separation and one ångström, a form that is flat inside its floor and unsoftened Coulomb outside it, so it sat above the quadrature form everywhere beyond 0.9682 Å and equalled it at that one separation alone. The two are now checked against each other at eleven separations spanning the old floor, and the ratio between them has to be the constant weight over dielectric at every one of them. No provider is required for this local workflow; an optional provider is only for a higher-authority, validated production workflow.
11
Built-in compute, providers and trust
Useful baseline computation runs in a browser worker; specialist engines remain an explicit upgrade in authority, separate from the website account boundary.
MolstudioScienceCompute version 1.10.0 runs the following CPU methods in a Web Worker. Jobs report progress, support cancellation and return molstudio.science-compute-result/1 records containing the algorithm/version, complete parameters, diagnostics and limitations. Evidence is labelled computed · local-baseline; seeded methods record their seed so a run is reproducible. Every declared tunable is accepted under the name its own result reports, so handing a result’s parameters back re-runs the calculation that produced it rather than the default.
Zero-setup default, never an invented atom type. Molecular-mechanics energy, restrained minimisation, short molecular dynamics, electrostatic fields, small-ligand and rigid macromolecular pose searches, residue mutation candidates, loop hypotheses and restrained real-space density fitting execute in the browser. Every valid chemical element retains its exact identity. The nonbonded parameters are one published set throughout: Lennard-Jones σ and ε are the UFF values of Rappe et al. (1992), machine-read from RDKit’s copy of the published table with the UFF atom type used for each element recorded, masses are IUPAC standard atomic weights and covalent radii are Cordero 2008. That matters because the Lorentz-Berthelot combining rules are calibrated within a set, and the table previously mixed uncited organic rows with UFF rows for boron, silicon, arsenic, selenium and zinc, so those pairs were using neither force field. UFF is the basis because it is the only published set that covers the periodic table, which is also what closes the dead end: 104 elements carry parameters where twenty did, and the sixteen from lawrencium onward, which UFF does not parameterise, refuse rather than borrowing another element’s values. An element outside the declared built-in parameter table must supply a complete five-field mass/covalent-radius/van-der-Waals/sigma/epsilon set or the job fails before mutation with a structured diagnostic; it is never rewritten as carbon or another element. That refusal is now also surveyed before a job is offered rather than reached several seconds into one, so every atom the table cannot score is named at once and the scientist either supplies the values or excludes those atoms from that run deliberately, with the exclusion recorded alongside the result. Table and force field carry version 2.0.0 and a content hash, so a parameter change is visible in every result that quotes them. Connecting an external provider is optional.
Built-in tool
Method and output
Scientific boundary
Energy + minimise
Versioned UFF-based generic element parameters; harmonic bonds/angles, Lennard–Jones and Coulomb terms with switched cut-off and 1–4 scaling, plus periodic torsion and inversion terms that hold a conjugated system flat. Minimisation uses restrained nonlinear conjugate gradient with frozen-atom support and a declared per-step displacement cap; a frozen index that names no atom is refused rather than dropped, so the frozen-atom count the result declares is the number of gradients that were held at zero. The result records raw and canonical element identity, charge source, every per-field parameter source and the parameter-table hash. The non-bonded settings take effect under the names the result reports them by — cutoffAngstrom and switchAngstrom inside parameters.nonbonded — as well as under the shorter cutoff and switchDistance the panels have always sent, so an energy, a minimisation or a trajectory replayed from the block its own result declared reproduces the answer instead of reverting to the 10 Å / 8 Å defaults while declaring the values that were asked for. That reversion was the widest of its kind here: on 1CRN chain A, 327 atoms, it read 416.614127 kcal/mol over 17,119 non-bonded pairs where the 5 Å cutoff that had been asked for gives 510.260709 over 2,845, with the van der Waals term crossing zero from −53.968517 to +39.678065.
Not residue typed or calibrated for thermodynamics. UFF is a generic full-periodic-table parameterisation, not a validated biomolecular force field, and energies from it are comparable only within the same declared setup. Missing charges become zero; an unparameterised element fails rather than borrowing another element’s values. There is no solvent, PME, protonation inference or guarantee of the biologically correct minimum.
Short dynamics
Seeded BAOAB Langevin split velocity-Verlet; selectable temperature, friction, timestep, frozen atoms and frame stride. Returns frames, velocities and an energy/temperature log. Centre-of-mass motion is removed at every step rather than once at the start, and the reported temperature uses the resulting degree-of-freedom count; both are recorded with the run, together with the free-atom count and the basis the degrees of freedom were counted on. Atoms are held fixed by index, and an index that names no atom of the system — past the end, negative, fractional or not a number — is refused by name rather than dropped.
In-vacuo baseline only: no explicit solvent, PBC, PME, SHAKE or barostat. Run length and atom scope are recorded; frames are hypotheses, not equilibrium sampling. The removal is not cosmetic on the small systems this is mostly used on: a Langevin thermostat re-creates centre-of-mass motion at every step, so removing it once while still subtracting three from the count reported a temperature high by about 3N/(3N−3), measured at 1.42 times target for four atoms, 1.14 for ten and 1.02 for thirty. With no friction there is no noise, the momentum stays at zero and the removal changes nothing, so energy conservation is untouched. The frozen-atom count is refused on the same grounds: an index outside the system used to be dropped from the freezing while still counting towards frozenAtoms and the degree-of-freedom count, so four bonded carbons run with frozenIndices [0, 999] held one atom, declared two, and logged 363.51 K for a 300 K run where the honest six degrees of freedom give 181.76 K — a factor of two. Three such indices took the requested count to the atom count, which switched the centre-of-mass removal off, left the thermostat’s momentum unstripped and dropped the count to its floor of one, at 1641.56 K.
Electrostatic potential
Point-charge Coulomb, screened-Coulomb or distance-dependent fields on points or a regular grid; the option named gb-like is a distance-smoothed dielectric. The separation is softened by adding a length in quadrature, 1/sqrt(r² + s²), 0.25 Å by default and clamped between 0.01 and 5 Å, reported as softeningAngstrom alongside the form it is applied in. The pose search softens its own electrostatic term with the same length and the same form, so a field sampled here and that score's electrostatic term are one function of separation.
It does not calculate Born radii and is not a Generalized Born or Poisson–Boltzmann solver. Without the softening the point-charge term diverges at an atom centre, so a grid point sitting on a nucleus would return a meaningless value rather than a large one; the floor is a stated convention, not a physical screening length. Charges and protonation must already be present; requested grid spacing and scope are retained with the result.
Pose hypotheses
Seeded rigid translations/rotations in a declared box, with acyclic single-bond torsion sampling; ranks contact, clash, Coulomb and torsion terms. Protein/peptide mode is rigid. The electrostatic term softens its separation by adding electrostaticSofteningAngstrom in quadrature, 0.25 Å by default — the same length and the same form the electrostatic potential above applies, so a potential sampled on a grid and this score's electrostatic term are one function of separation, differing only in dielectric and in the weight the score applies.
Scores rank only that run: they are not affinities, free energies or probabilities. No receptor flexibility, solvation, entropy, chemistry-specific interaction typing or search-completeness claim. A pair beyond the scoring cutoff is never examined and so cannot be found to clash, which would let an interpenetrating pose return as sterically clear; a cutoff too short to support that verdict for the atoms actually present is refused with the value it needs.
Mutation + loop hypotheses
Residue mutation uses idealised heavy-atom templates and a small χ1 library with a steric screen. Loop modelling generates seeded CA traces with approximate N/CA/C/O placement and coarse spacing, curvature and clash terms.
Not a backbone-conditioned rotamer library, fragment method, sequence-conditioned loop prediction or all-atom prediction. Candidates require inspection and subsequent preparation/minimisation. A residue is identified by model, chain, number and insertion code together, so residues 100, 100A and 100B are three residues and a mutation cannot be applied across all of them at once.
Density-guided fit
Restrained real-space optimisation increases trilinearly sampled map density while applying generic geometry and coordinate-restraint terms.
Not crystallographic or cryo-EM refinement: there is no reciprocal-space target, scattering model, occupancy/B-factor refinement, symmetry restraint, cross-validation or half-map validation.
Each built-in calculation runs the requested atom scope, iterations, steps, samples and output count in a cancellable worker. The UI does not silently reduce scientific scope or return a partial result. Cancellation or an allocation/runtime failure is reported explicitly and leaves the previous scientific state unchanged.
MolstudioScience.ScientificToolRegistry remains available for optional local-worker, local-wasm and remote providers. A provider can accelerate a compatible job or supply a separately validated, higher-authority method—for example a residue-typed force field with solvent/PBC, PB/GB electrostatics, production docking, experimental refinement, structure prediction or database-scale search. Provider descriptors declare version, capabilities, limits, validation evidence, credential requirements, isolation and whether data leaves the device.
RegisterProvider and tool/version descriptors.
ValidateSchema, hashes, compatibility and seed.
ApproveRemote execution requires per-run consent.
ExecuteProgress and AbortSignal are supported.
AcceptValidate output, hash it and attach provenance.
Validation states:unvalidated, benchmarked, validated, deprecated. Anything short of validated is carried into the result warnings.
Remote trust: registry execution rejects a remote job unless the caller passes explicit allowRemote: true for that run.
Output discipline: provider output is checked against the registered schema before becoming a successful job result. A typed coordinate, trajectory, density-map or ranked-candidate output remains inert pending review; Apply rechecks the live revision and exact structure, selection, trajectory, map and parameter hashes, then creates one reversible history transaction.
Provenance: result records retain provider/tool versions, validation status, parameters/seed, input hashes, output hash and evidence class.
Authority boundary. The built-in engines deliberately produce local baselines and labelled hypotheses. Production-scale equilibrium simulation, quantitative binding thermodynamics, validated docking/refinement, de novo structure prediction and database-scale search still need an appropriate validated engine; an optional provider can add that authority without being required for the local tools above.
12
Projects, revisions and Studio transfer
Scientific work keeps verified browser revisions and crosses into the cinematic app through an explicit typed transfer; the site-wide account is ready to carry future Lab libraries and collaboration.
Storage
IndexedDB with memory fallback
ScienceProjectStore stores workspaces, revisions, content-addressed blobs and short-lived transfers. Blob reads verify the stored hash. If IndexedDB cannot open, the memory driver is session-only and emits a diagnostic through the caller hook.
Revision
Deterministic workspace snapshots
Canonical serialisation and content identity prevent duplicate saves. Each changed save creates a reason-labelled revision; the default retains the complete revision history. A host may opt into a stated retention policy.
Portable project
molstudio.science-package/1
Package export includes the current workspace, its immutable revision lineage, exact visible Workbench history and every blob referenced by the head or any retained revision. Import verifies byte length, content identity, reference completeness and lineage before saving a workspace row; a verified blob already present in local storage may satisfy a reference. The atom table inside a project records an unstated occupancy as absent rather than as a number, and reopening restores it that way: a source file that left PDB columns 55-60 blank comes back reading “not specified”, not 0.00 — which would say the atom was modelled as absent — and not the 1.00 an exported coordinate file has to put in a column it cannot leave empty.
Command record
molstudio.mollab-command-record/1
A .mollab file is an executable, declarative display transaction for an already open project—not JavaScript and not a coordinate container. Replay first verifies the exact project id and every source fingerprint, then validates model, assembly, altloc, stable atom/object targets, complete layer styling and labels against the resulting coordinate state. Unsupported or malformed commands reject the whole record and restore the prior state; comment-only history remains an audit trail.
Named display scenes
Exact view bookmarks
Open Automate + report → Display scenes, or run scene save, scene list, scene recall and scene delete. Each named scene retains the exact camera, frame, active object, ordered layers, object visibility and stable-ID selection. Recall is one atomic Undo/Redo action. A host whose viewport renderer is unavailable is told so and no partial scene is saved or recalled, because a bookmark that restores most of a view is worse than none.
Studio handoff
molstudio.science-transfer/1
The transfer carries selected objects, coordinate evidence, source/blob references, model/frame, assembly operators, altloc policy, world transform, selections, representation hints and the optional exact current Lab view.
The exact current camera and named display scenes persist in workspace.extensions.scienceDisplayScenes when the Lab project is saved and reopened; camera data never replaces molecular sources, coordinates or results. A transfer is stored locally under an unpredictable token and opens studio.html?scienceTransfer=…. Default lifetime is 15 minutes, maximum one hour, and consumption is one-time. Studio snapshots the current cinematic project, applies every requested object and compatible display feature as one transaction, then applies a perspective Lab target, yaw, pitch, distance and field of view exactly before consuming the token. A failed object, feature or view application restores the exact prior project and leaves an unconsumed token available for retry. Studio has no orthographic camera: an orthographic Lab view remains exact provenance, a visible warning is shown, Studio explicitly frames all imported components, and no perspective approximation is substituted. It is a same-browser handoff, not a network upload. Studio may change presentation, but the payload marks scientific source and evidence separately; an interpolated display frame requires explicit acceptance, and a flattened assembly emits a provenance warning.
Recommended boundary. Analyse, validate and choose coordinate state in Lab. Transfer the chosen scientific objects to Studio for materials, camera, animation and rendering. Keep the Lab project as the authoritative source of analysis lineage.
13
Scientific automation from an empty workspace
The UI, reviewed scripts and an LLM host can invoke the same typed, revision-pinned operations.
MolstudioScienceAutomation is the construction and execution surface for Molstudio Lab. It does not assume that a structure is already loaded: an atomic plan can create a blank workspace, fetch or import sources, add multiple independent molecular objects, create a ligand from SMILES or an explicit graph, select and display targets, run analysis or compute, save the complete project, export coordinates and prepare a Studio handoff. The Automate + report family opens the reviewed transaction console with Validate, Dry run, Run and Cancel, docked in the notebook column beside the viewport like every other tool; the same console is available from the command bar with automation or api and from the viewport context menu. Where the console is docked changes nothing about the contract it enforces: a plan is validated, then dry-run, then executed atomically, and every receipt carries stable identifiers and the exact workspace revision it was pinned to.
workspace.new/save/export, source.import_text, RCSB PDB, AlphaFold DB and EMDB fetch operations are explicit. source.import_file requires a ticketId issued by the visible, user-authorized local picker; the plan receives neither a local path nor file bytes.
Objects + ligands
Build a real scene
Add, remove, rename, transform or activate stable molecular objects. ligand.from_smiles and ligand.from_graph create independent editable objects rather than cinematic props, and both build a generated three-dimensional conformer unless a plan asks for the flat depiction by name, so a plan that goes on to dock is not docking a drawing.
Alignment command
One atomic object operation
Scientific Automation and Scientific Batch both expose object.align. Supply the exact moving and reference object IDs plus automatic chains, one explicit pair, or a complete chainMappings array; guide/backbone/common atom mode; explicit alternate-location policy; outlier cutoff; cycles; nonpositive affine gap scores; and ambiguity policy. It reviews and applies one exact moving-object transform atomically. The semantic receipt records alignment/object IDs, retained pair count and RMSD before/after, refinement convergence and every structured diagnostic; an unconverged review does not apply.
Science + display
One operation surface
Named selections, scoped representation layers, registered analyses, compute jobs and explicit candidate acceptance use the same Workbench methods as direct UI actions. Scientific Batch exposes both measurement.add and measurement.create: point geometry retains its one-atom endpoint rules, while centroid distance and raw RMSD require two named selections, atomic execution, and (for RMSD) an explicit correspondence rule. Trajectory and map imports use user-authorized local file tickets.
Output
Semantic audit receipts
Receipts record plan and argument digests, revisions, step status and operation-specific semantic fields. They exclude raw source bytes, local paths, credentials and transfer tokens. A receipt is an audit record, not a standalone full-reproducibility package; retain the reviewed plan and complete Lab project with its sources, parameters, results and history.
DescribeRead exact objects, capabilities and revision.
ValidateSchema and prior-step references.
Dry runVerify the live revision, supported operations and typed reference links without mutating state.
ExecuteProgress, cancellation and staged outputs.
CommitRetain granular Lab history after success; restore the exact snapshot after failure.
Revision safety:expectedRevision must equal the live workspace revision before execution starts. A stale plan fails before any mutation.
Result references: only whole values of the form $result.<earlierStep>.<allowlistedField> are accepted. Forward, embedded, unknown-field and unresolved references are errors.
Destructive intent:workspace.new requires the literal NEW_WORKSPACE in addition to the visible reviewed Run action.
Atomicity: reversible scene and scientific mutations execute under one complete Workbench snapshot. Failed or cancelled atomic plans restore the exact prior project; saves, downloads and transfer creation remain deferred until every reversible step succeeds. Successful scientific edits retain their ordinary granular Lab history.
No arbitrary scientific scope reduction: automation forwards the requested scientific scope and parameters. Structural parser-security validation rejects malformed or unsafe JSON explicitly; it never truncates atoms, source text, frames, results or requested operations.
Receipt boundary: the deterministic receipt proves what the executor accepted and returned semantically. Reproduction still requires the reviewed plan plus the authoritative Lab project, source data, full parameters and retained result records.
Discovery is machine-readable. The current operation catalogue, argument contracts, plan schema, semantic result fields, worked example and host prompt are published under api/lab/ and are generated directly from the runtime module so UI and LLM descriptions cannot drift.
14
Browser module reference
Stable top-level globals in the current static build.
MolstudioMolecularIO
parse, parsePDB, parseMMCIF, inspect, renderProjection, sourceHash. It also owns the pinned van der Waals radius and atomic-weight tables the projection and the analysis tools read, each named with its version in the results that use it.
tokenize, parse, compile, select, evaluateAst and identity helpers.
MolstudioScienceRenderer
WebGL2 viewport, picking, atom/bond instances, mesh slots and camera projection utilities.
MolstudioScienceScene
The multi-object scientific scene. Source coordinates are copied into immutable local coordinate states and an object’s transform is applied only while projecting or querying world positions, so importing, moving, fitting, replacing, serialising and restoring an object never rewrites the source molecular record. That includes what the record does not say: a blank occupancy, B factor or formal charge is restored unstated rather than as a measured 0.00, because an atom deposited with occupancy 0.00 is one that was modelled and is not there. An absence has two forms here and one meaning: NaN inside the typed property arrays, which have no null, and null on the atom records the writers read. An unstated formal charge therefore leaves a scene coordinate export as mmCIF ? and as blank PDB columns 79-80, which is what the file that was opened said, rather than as the neutral 0 an exported structure would carry back in on re-import. Stable object and atom identifiers, selection resolution across objects, rigid superposition between two objects, object comparison, and snapshots that are validated before they are restored. Where no explicit atom pairs are given, the correspondence is built from an identity read in the namespace that numbers the residues — label where the file numbers them there, author otherwise, source atom serial where neither does — and every superposition and comparison names the namespace each object was matched in, its distinct-identity count and how many pairs came from an identity covering more than one atom. Element radii come from the same pinned MolecularIO set the import used, so an object does not change size by being put in a scene.
MolstudioScienceCartoon
Catmull-Rom polymer cartoon with automatic, rectangle, arrow, oval, tube, loop, dumbbell, and putty subtypes; putty radius follows the deposited B factors. An arrow gives every strand a head rather than only the one that ends the chain; a putty on a structure with no B factors is refused rather than drawn at an invented thickness, and the radius-to-B mapping it used is reported as a display scaling. The ribbon is Carson & Bugg’s: the surface between two guide curves offset from the trace along unit(((CA(i+1)−CA(i)) × (O(i)−C(i))) × (CA(i+1)−CA(i))), in the peptide plane and across the virtual bond, with the paper’s sign-continuity flip applied to that direction so the band turns the short way between residues. The roll is therefore the molecule’s and not the laboratory frame’s, and — save where a trace doubling back on its own path forces a width direction from a laboratory axis, which is reported when it happens — the mesh of a rotated structure is the rotated mesh; triangles wind counter-clockwise seen from outside. Where there is no peptide plane to offset along — a C-alpha-only model, a nucleic acid — the ribbon falls back to a swept frame, and where there is no carbonyl at all the roll is parallel-transported from the sharpest turn of the trace instead; the circular sections keep the swept frame in every case, having no face to place. A curvature roll is labelled in the result as a display choice rather than as the molecule’s twist, and a straight trace, which has neither curvature nor a carbonyl to take a roll from, is told that its roll carries no information at all. Chain breaks are found by distance as well as by numbering — 4.5 Å between protein anchors, 8 Å between nucleic ones — because consecutive numbering is not evidence of a bond. The anchor is the first name present rather than the last one listed, then the highest occupancy, so the same file written in a different atom order draws the same trace. Fourteen diagnostic codes account for what was not drawn or was joined anyway: residues with no anchor, non-finite coordinates, runs too short to spline, distance and numbering breaks, duplicate residue identities, alternate conformers, the frame source, an arbitrary or laboratory-axis roll, the putty scale and its missing B factors, and the measured tilt of the face out of the peptide plane. The conventions block names the spline, the subdivision count, the surface construction, the winding, what residueIndex and atomIndex address, the break distances, the residue order and identity, the alternate-conformer rule and the colour source, so two viewers that disagree about a ribbon can find out where.
MolstudioScienceCartoonWorkbench
Cartoon shape panel and the cartoon command, rebuilding the cached mesh when the shape changes and leaving the shape on screen untouched when a new one cannot be built.
MolstudioScienceSurface
Solvent-excluded rolling-probe, VDW and SAS spatial fields with complete marching-tetrahedra surface construction.
MolstudioScienceAnalysis
Contacts, clashes, putative H-bonds, SASA, radius of gyration, rigid fit, trajectory statistics and backbone dihedrals. Each result names the radius set or mass set it was computed with, and an element that set does not carry is named and refused rather than measured as carbon: the message says no substitute was used and offers an explicit radius on the atom, an unweighted calculation, or the atom left out of the selection. A residue is named by its deposited number, with the internal atom counter the last resort rather than the second, and the component name is read from the author namespace as well as the label one, because a Ramachandran point with no residue name cannot be told to be a glycine.
MolstudioScienceSecondaryStructure
Two methods, and the result says which one produced it. By default, Kabsch and Sander’s electrostatic criterion on backbone hydrogen bonds: the amide hydrogen is constructed 1 Å from N opposite the preceding carbonyl because it is not in the coordinates, proline donates nothing, a bond is one below −0.5 kcal/mol and is sought only inside a backbone segment so that a bond across a chain break is never asserted, helices come from consecutive n-turns and strands from parallel and antiparallel bridges. The observed-backbone φ/ψ rule windows are the selectable alternative and the automatic fallback for a backbone segment in which fewer than half the residues carry a carbonyl oxygen, counted in a named diagnostic; the method the result reports is phi-psi-rules where no segment could be evaluated at all and kabsch-sander-hydrogen-bond where some could, so a partly fallen-back run is never read as a whole hydrogen-bond analysis. A method that is neither is refused by name. Also peptide-continuity evaluation, minimum-run classification, per-residue diagnostics and immutable hypothesis results.
MolstudioScienceSecondaryStructureWorkbench
Exact-current-object review/apply task, reversible derived display annotation, source/deposited annotation preservation, context/command routes, result provenance and Undo integration.
MolstudioScienceStructureAlignment
Observed-polymer extraction, shared-BLOSUM62 positive-evidence automatic chain assignment plus full affine traceback for selected pairs, full explicit multichain maps, coherent residue-level alternate-conformer policy, guide/backbone/common atom pairing, iterative outlier rejection, complete pair audit records, review-bound reflection-free rigid fitting and moving-object application. It reads one residue table, shared with the sequence module it already depends on for BLOSUM62, so the thirty-two modified residues are polymer residues here as well and enter the correspondence rather than opening a gap at each of them. A component neither table lists still has no one-letter code, and two unidentifiable components are not treated as identical.
MolstudioScienceStructureAlignmentWorkbench
Compare/apply task panel, viewport context action, command routes, result provenance, project history and Undo integration for structural alignment.
MolstudioScienceAdvancedAnalysis
Open-pocket detection, atom/residue contact maps, rigid-aligned trajectory PCA/covariance and interaction-occupancy fingerprints. Its pocket enclosure test casts rays along the three grid axes only, forward and backward, so the count saturates at six however fine the grid is and the answer is quantised by the orientation of the structure in the grid as well as by the spacing. That set is declared with every result rather than left in the code: the sibling MolstudioSciencePockets counts along seven, the axes plus the four cube diagonals, and states its own quantisation the same way, so a buriedness from one is not the same measurement as a buriedness from the other.
MolstudioScienceAdvancedWorkbench
Cancellable isolated-worker task panels, result review, context routes and lossless advanced-result project envelopes.
MolstudioScienceValidation
Coordinate, alternate, completeness, explicit-bond and displacement screening. An explicit bond is compared against the sum of the two Cordero 2008 covalent radii, cited with the criteria, at default acceptance ratios of 0.55 to 1.45; it is a screening criterion and not a refinement dictionary restraint. The displacement z-cut of 3 and the alternate-conformer occupancy tolerance of 0.05 are carried the same way, because a count of outliers is a claim about a threshold as much as about a structure: 5 outlying atoms at z of 3 and 64 at 1.5 on the same 602 coordinates. Naming the published set rather than resembling it is what lets a reported outlier be checked against another program.
MolstudioScienceVolume
MRC/CCP4 parse, sampling, correlation, slice and isosurface operations.
MolstudioScienceMapWorkbench
Reproducible contour controls, orthogonal source-map slices and content-addressed map-project persistence.
Crystallographic mate/contact review, grouped or independent materialisation, provenance and project restoration.
MolstudioScienceColouring
Element, chain, object, residue-class, secondary-structure, B-factor, occupancy and explicit-charge schemes plus stable-ID selection-scoped representation layers.
MolstudioScienceProperties
Exact atom/residue property rows, stable-identity filtering and paging, selection/framing, and provenance-carrying spreadsheet-safe CSV or lossless JSON export.
MolstudioMolecularTrajectory
DCD/XTC parsing, topology verification and periodic boxes.
MolstudioScienceSequence
FASTA, topology mapping, pairwise alignment, composition and reverse complement, plus the one residue-code table and the published BLOSUM62 matrix that the alignment and conservation modules read. Chain and residue identity fall back between the author and label namespaces, since a PDB fills only the author fields. A residue joins a polymer chain when it is an ATOM record or a HETATM whose component is a known amino acid or nucleotide, so waters and ligands inside a chain are not counted as members of it, and thirty-two modified residues carry the one-letter code of their parent component rather than reading as X.
MolstudioScienceChemistry
MOL/SDF/MOL2 parse, graph, formula, descriptors and record validation. What a file says and what perception makes of it stay apart: a V2000 ring is read in the Kekulé form the file stores, and aromaticity is a separate question with its own answer. Implicit hydrogen counts come from the element, charge and bond orders where the record does not state them, and an atom whose count cannot be settled is reported as indeterminate rather than assumed bare, which makes the formula and average mass lower bounds and says so. Masses are the IUPAC conventional atomic weights, named in the result and not the same table molecular-io pins.
MolstudioScienceSmiles
SMILES graph parse, position-aware syntax errors, retained stereo tokens, valence diagnostics, and preparation of either a deterministic flat topology layout or a generated three-dimensional conformer, recorded as the coordinate authority of the object either way. The hydrogen count a bracket declares, or that valence settles, is stamped onto each atom, because a SMILES string fixes it exactly and this is the one place in the Lab that knows it for certain; an atom whose count is not settled carries that fact rather than a zero.
MolstudioSciencePreparation
Valence completion, explicit hydrogen addition, protonation hypotheses, residue mutation candidates and editable-ligand construction. Hydrogen directions are built in the atom’s own frame from the angle its hybridisation implies, taken from the conformer module’s hybridAngle so a fragment prepared here and a fragment embedded there agree, and asked about the atom’s final connectivity rather than its current one, since an oxygen with one bond is being made into a hydroxyl and a hydroxyl is 104.5 degrees. It replaces a placement that chose among twenty-two directions fixed in the laboratory frame, which gave a methyl group H-C-H angles of 90, 90 and 180 degrees, a hydroxyl proton collinear with its C-O bond, an amine at 90 and an ethene carbon at 90 where it must be 120, and which made the answer depend on how the molecule happened to be oriented in space. Only the rotation about a single bond is still chosen by looking for clashes, scored against the atoms that can actually move relative to it. Where there is nothing to score — a heavy skeleton of two atoms, where every sweep step ties — that rotation is not the molecule’s at all, and the result now says so: a hydrogen-azimuth-laboratory-axis warning naming the axis it was measured from, the centres it applied to in details.laboratoryFrameCentres, and a line in the provenance assumptions. It is worth the warning: turning ethene before adding hydrogens and turning the answer back moves all four hydrogens by up to 1.84 Å, methylamine’s five by 2.00 Å against an N-H bond of 1.01 Å, and ethane’s six by 2.00 Å, while every interatomic distance holds to 1.3 × 10⁻¹⁵ Å — an undetermined roll about a line, not a wrong geometry. Three heavy atoms give the frame a second-shell reference and the placement reproduces to 0.000 Å, and nothing is declared, because nothing was substituted. An atom with no bonded neighbour at all is the stronger case and carries its own code, hydrogen-direction-laboratory-axis. The placement is idealised: correct angles are not a claim about an energy minimum, and adding a hydrogen establishes no protonation state. Covalent radii are Cordero 2008 and van der Waals radii are Bondi 1964, both named in the result.
MolstudioScienceConformer
Builds a genuine three-dimensional conformer for a molecule that has no coordinates, such as one authored from SMILES, by the construction described under SMILES to ligand to docking. Aromaticity is perceived rather than read from the written form, so benzene written C1=CC=CC=C1 and written c1ccccc1 give identical geometry to 0.0000 Å, and the three angles at a planar centre close to 360 degrees so that a ring fusion is not asked for 348. A periodic torsion and an inversion term keep conjugated systems flat, which angles alone cannot do, since two rings sharing a bond can fold along it with every angle satisfied. It replaces a layout that set every z coordinate to plus or minus 0.18 Å and called itself 3D — against bond lengths near 1.5 Å that is a flat drawing, and docking against it ranked poses for a molecule that cannot exist. It warns when relaxation stopped at its iteration limit, with the geometry wherever the optimiser had got to. Coordinates handed to it are held fixed and come back exactly, so where a generated atom lands on top of a supplied one it is the generated atom that moves out of the overlap, whichever of the two carries the larger index: the separation step tested and moved the higher index alone, so a pair whose supplied atom held the higher index was abandoned and its 0.0500 Å contact came through all 2500 iterations of the relaxation still 0.0500 Å wide, where the same pair labelled the other way round separated to 0.5000 Å and relaxed to 3.70 Å. When both atoms of an overlap were supplied there is nothing that can move without breaking that promise; those pairs are counted in minimisation.overlapsKeptAsSupplied and named in a supplied-overlap-kept warning, because a count of zero separations otherwise reads exactly like a build that had no overlap in it. Its flatnessCheck is the same test docking uses to refuse a ligand whose saturated centres lie in a plane, and it is graph-aware, so a legitimately planar molecule such as benzoic acid is never accused of being flat. The thickness that verdict is taken from is the range of the coordinates along the normal of their best-fit plane — the eigenvector of the smallest eigenvalue of the centred second-moment matrix, reported beside it as thicknessAxis — and not the smallest side of the axis-aligned bounding box, which is what it used to be. The two agree only while the molecule lies in a coordinate plane: the RDKit 2D depiction of ibuprofen measured 0 Å as drawn and 2.242 Å after one ordinary rotation, a median of 3.574 Å and a worst of 6.458 Å over 500 uniformly random orientations, so the refusal fired in 16 of those 500 and a flat ligand docked in the other 484; about the best-fit plane the same coordinates are 1e-15 Å thick in all of them. The threshold moved with the measure, from 0.8 Å to 0.4 Å, because a bounding box is always at least as wide as the molecule is thick: at 0.8 Å the new measure would refuse real conformers, this module’s own chair cyclohexanol at 0.624 Å and an RDKit ETKDG isopentane at 0.614 Å among them. extent is still reported and is still the axis-aligned box in the frame of the coordinates as supplied; the result says so in its own conventions, and no verdict is taken from it. What the check establishes is planarity, and its limitations say what that leaves out: a drawing carrying a small jitter is the weaker case, and the ±0.18 Å alternating-z layout this module replaced measures 0.07 Å on methane but 0.482 Å on the ibuprofen depiction — above the threshold, and not refused — because the best-fit plane tilts into a wobble that correlates with where the atoms are.
MolstudioScienceLigandEditor
Direct atom/bond graph drafting, atom properties, exact coordinates, valence review, draft history and one-action scene commit. Layout 2D is a flat deterministic layout for reading the graph; Layout 3D runs the conformer builder, so it is a generated local geometry rather than a drawing and still not a conformational search or an experimental pose.
MolstudioScienceCompute
Built-in generic-element energy, restrained minimisation, short seeded dynamics, electrostatic fields, pose hypotheses, mutation/loop candidates and restrained density fitting, plus cancellable worker jobs. The nonbonded parameters are UFF (Rappe et al. 1992) throughout, machine-read from RDKit’s copy of the published table, with IUPAC masses and Cordero 2008 covalent radii, covering 104 elements; the sixteen from lawrencium onward, which UFF does not parameterise, refuse rather than borrow another element’s values. Table and force field carry a version and a content hash, so a parameter change is visible in every result that quotes them.
MolstudioScienceParameterCoverage
Surveys a receptor for elements the mechanics parameter table does not cover, before a run rather than several seconds into one. Docking a ligand into a metal-substituted structure used to fail from inside the job, naming one offending atom out of several, with nothing to do about it. The survey names them all and the docking panels offer an explicit exclusion for that run, recorded with the result — never a substituted element. An atom carrying a complete explicit five-field parameter set of its own is covered whatever its element, which is the escape hatch the compute module already honours.
MolstudioScienceProject
Content-addressed blobs, local workspaces/revisions, packages and transfer tokens.
MolstudioScienceStudioBridge
Typed transfer creation, validation, local handoff and coordinate-object resolution.
Live empty-workspace and multi-object adapter over import, scene, analysis, compute, persistence, export and Studio handoff operations.
MolstudioScienceAutomationUI
Contextual reviewed transaction console, live catalogue, diagnostics, progress ledger and plan/receipt export.
MolstudioScienceBatch
The molstudio.science-batch/1 command plan: a versioned command catalogue declaring each command’s arguments and whether it mutates, strict plan validation, plan text parsing and serialisation, dry-run previews that name every unsupported command rather than skipping it, and atomic execution returning a typed receipt. Execution is semantic-adapter-only: no eval, no Function, no shell, no filesystem paths, no network fetch and no dynamic command registration, with a one-megabyte plan limit and a declared nesting depth.
MolstudioScienceFields
Scalar field objects for measured maps and calculated potentials, with a producer registry, exact grid requests, paired contour sheets, staleness detection and recipe-first persistence.
MolstudioScienceGeometry
Non-molecular scene shapes — search boxes, planes, arrows and dot clouds — built as exact meshes with their own wire edges.
MolstudioScienceObjectsWorkbench
Computed-object list, per-contour level and style controls, object picking, command verbs and project persistence for fields and geometry.
MolstudioScienceToolSearch
Search across every tool in every family, read from the live document so tools added by other modules are found too, plus a recently-used list.
MolstudioSciencePrerequisites
Turns a tool card’s hand-written availability badge into live state: a tool is shown as needing coordinates, a polymer, a protein chain, a ligand, a map, a trajectory or a result only while that is genuinely missing, and a requirement it cannot positively disprove leaves the card untouched, because wrongly greying out a working tool is worse than saying nothing. It reads the requirement out of the badge’s own text. The current page writes the short word in the badge and the requirement phrase in its title, so nothing is being classified and no badge is currently evaluated, dimmed or relabelled: what a card says today is the wording the page was written with, not measured state. Until the page and the module agree again, read those badges as static labels.
MolstudioScienceFigureWorkbench
Saves the viewport as an image at a chosen multiple of its resolution, rendering the frame immediately before reading it back and scaling text and line widths with the image so the exported figure is the one on screen. Reports the resolution, the megapixels and the physical width the image implies at 300 and 600 dpi. There is no transparent export, because the viewport is opaque. Reachable as png.
MolstudioSciencePlots
Histogram, scatter, line and Ramachandran plot objects with explicit axis labels and domains, rendered as inline SVG and mounted into a panel. Non-finite values are omitted from a histogram and the omission is reported rather than absorbed. A Ramachandran plot carries the statement that it displays calculated φ/ψ coordinates and that residue-specific favoured and outlier classification requires an explicit reference distribution, which is not inferred from background shading.
MolstudioScienceNormalModes
Gaussian and anisotropic elastic network models with a verifiable Jacobi eigensolver, predicted fluctuations, mode collectivity and displacement arrows.
MolstudioScienceNormalModesWorkbench
Mode list, arrow display through geometry objects and the modes command.
MolstudioScienceScreening
Library preparation with descriptors, descriptor and rule filters that report every rejection, and seeded per-compound pose search ranked within one run. The order is best-pose-heuristic-score-ascending — most negative first — with equal scores broken by compound id in Unicode codepoint order rather than by the host’s collation, and the ranking conventions travel on the result so a reader never has to infer them. The seed the run started from travels with them as baseSeed, and that is the name a run accepts it under — seed is still taken, and loses to baseSeed when both are supplied — so a screen re-runs from the parameters it reported rather than from the 20260814 default. Duplicate ids are made unique against every id in the library, supplied or generated, so the tie-break stays a tie-break and each row names one compound. sizeDependence carries the Spearman rank correlation between score and heavy-atom count on average ranks, the number of hits it was computed over, the 0.9 reporting threshold, the six-hit minimum for the warning and the three-pair minimum for the coefficient itself; where the coefficient is unavailable it says which of the five conditions held rather than reporting one null for all of them. The fifth is two series of unequal length: a run cannot reach it, because it reads the scores and the heavy-atom counts off the same hits, but the exported spearman and spearmanDetail refuse it by name rather than ranking one series in full against the mean of the other. A run in which no compound had a receptor atom inside the scoring cutoff is refused as NO_RECEPTOR_CONTACT, because the resulting order would be the codepoint order of the library. The docking module’s own diagnostics travel with each hit, so a run whose every pose is severe interpenetration cannot reach a caller looking like an ordinary hit list. The two refusals that stand in front of the SMILES docking path — the flatness check on the ligand’s saturated centres, and the parameter-coverage survey that offers an explicit receptor-atom exclusion or a supplied ligand parameter set — belong to the SMILES workbench and do not run here: a screening library is docked through compute.dockLigand directly, which refuses only a scoring cutoff too short to support its own excluded-volume verdict. A flat library record is docked and ranked like any other.
MolstudioScienceScreeningWorkbench
Screening workspace with a ranked hit table, per-compound progress, cancellation, and the filtered and failed compounds listed rather than dropped.
MolstudioScienceNucleicAcids
Base pairs classified by Leontis-Westhof edge and cis/trans orientation, base stacking with its rise and offset measured along the mean plane of the two bases rather than either one’s ring normal, backbone torsions, Altona-Sundaralingam sugar pucker and groove widths. A residue whose base ring is incomplete is excluded by name in excludedNucleotides and counted against the number supplied, so the nucleotide count cannot be read as a census of the molecule handed over.
MolstudioScienceNucleicAcidsWorkbench
Pair list, torsion table, warning diagnostics and pair selection, plus the basepairs command. The summary line states how many nucleotide residues were excluded for an incomplete base ring, so the counts beside it are not read as a whole molecule.
MolstudioScienceLigandDiagram
Two-dimensional interaction diagram: the ligand projected onto its own principal plane, contacting residues placed by direction, and typed interaction edges. The frame comes from a cyclic Jacobi eigen-decomposition of the heavy-atom scatter matrix, written as explicit orthogonal similarity transforms after the in-place version it replaces stopped being one — the working matrix lost its symmetry on the first step, the convergence test never fired, and the frame the whole drawing projects onto was consequently not the molecule’s; the residuals it now meets over the oracle’s 124 symmetric matrices are quoted under Interfaces and buried surface. The result publishes the frame, the principal scatter, the out-of-plane sum of squares, the separation between consecutive principal values and the orientation margin, so a reader can reproduce every projected coordinate and judge for themselves how well the plane was determined. Two consecutive principal values differing by less than 10⁻³ of the largest leave their axes interchangeable and are reported as such; a vanishing atomic-number-weighted third moment leaves an axis direction undetermined and is reported separately, because a molecule whose plane is well determined can still have no intrinsic face. Collinear heavy atoms are refused as LIGAND_PLANE_UNDEFINED and fewer than three as LIGAND_TOO_SMALL, rather than answered with a plane chosen from the infinitely many available.
MolstudioScienceLigandDiagramWorkbench
Pure SVG rendering of the diagram with a legend, clipboard export and the diagram command.
MolstudioSciencePharmacophore
Typed feature points with tolerances, models derived from a bound pose, and deterministic nearest-first geometric matching. A donor is found from the hydrogen count the record states, or from the element, charge and bond orders where it states none, so a molecule written without explicit hydrogens reports the donors it has rather than its acceptors alone. Drawing a molecule’s hydrogens does not change its features.
MolstudioSciencePharmacophoreWorkbench
Model derivation, one coloured dot cloud per feature type in the viewport, pose matching and the pharmacophore command.
MolstudioScienceDescriptors
Ertl polar surface area, ring and saturation counts, Wildman-Crippen logP and molar refractivity, and Lipinski, Veber and Egan rule filters, with a criterion whose input is missing reported as not evaluated. The rule of five is judged on Lipinski’s own quantities, the number of O-H and N-H hydrogens and the number of N and O atoms, which are reported alongside the chemical donor and acceptor atom counts and labelled with their definitions, because thresholds of 5 and 10 were calibrated for the published quantities and comparing atom counts against them understates both.
MolstudioScienceDescriptorsWorkbench
Ligand descriptor report, an optional supplied logP that overrides the calculated one and keeps its own source, and the descriptors command.
MolstudioScienceMCS
The largest connected substructure two molecules share, matched induced — a bond in one must be a bond in the other, so a ring never maps onto a chain — and connected, because a scaffold is one piece rather than the largest scattering of fragments. Hydrogens are excluded. The search is exhaustive within a step budget and says whether it finished: exhausted, the result is a common substructure and is not claimed to be the largest. Equally large substructures are not unique, so the mapping returned is one of several and bondCount belongs to it rather than being maximised; the pair is searched in a fixed orientation so every number the result carries is a property of the two molecules and not of the order they were passed in.
MolstudioScienceMCSWorkbench
Chemical superposition: the shared scaffold between two ligands and the rigid transform placing one on the other by it, with the deviation over the scaffold. The transform is reported rather than applied. Reachable as scaffold.
MolstudioScienceEllipsoids
Anisotropic displacement ellipsoids from deposited ANISOU parameters: principal axes and semi-axis lengths at a probability surface computed by inverting the chi-squared distribution on three degrees of freedom, so any probability can be asked for and the scale factor applied is the one reported. A displacement matrix that is not positive definite describes no ellipsoid and is refused for that atom and counted; nothing is ever derived from an isotropic B factor, which says how much an atom moves and not in which direction.
MolstudioScienceEllipsoidsWorkbench
Probability panel and the ellipsoids command, computing the geometry when the representation is chosen and leaving what is on screen alone when a structure cannot show them.
MolstudioScienceConservation
Per-column agreement across an alignment: identity, Shannon entropy normalised against the disorder that many observations could show, gap fraction, and BLOSUM62 substitution similarity. A column with fewer than two observed residues carries no conservation at all rather than a high one, and the mean identity between the aligned sequences is reported because agreement among close relatives is not evidence of constraint. An ambiguity code is not a residue: X stands for any residue, B for aspartate or asparagine, Z for glutamate or glutamine, and such a position is counted as present but excluded from identity, entropy and similarity, with its own count on the column and a diagnostic on the alignment. Counted as a twenty-first letter they made the three metrics contradict each other about the same column — three alanines and one X came out 59 per cent conserved by entropy, 75 per cent identical and perfectly similar — and made AXXXG and CXXXT 60 per cent identical when nothing in them agrees. Similarity can be declined, and declining it is reported as declining it: a caller who passes similarity: false is told the substitution table was never consulted, not that none was there. Both causes of a missing similarity used to arrive as the same null and be reported as the second — ACDEF/ACDEF/ACDEY with similarity off came back saying no substitution matrix was available, while the same three sequences on the same process with the default options reported similarities of 1, 1, 1, 1 and 0.667 out of BLOSUM62, so the record sent a reader after a dependency that was never missing.
MolstudioScienceConservationWorkbench
Maps that onto the structure: aligns pasted FASTA, matches the structure’s own chain by its residues, writes per-residue values as a colourable field, and refuses rather than mis-maps when the chain is absent from the alignment or its residue count does not match. The gap score is read strictly and carried on the result: an empty or unreadable box is refused rather than coerced, since Number(‘’) is 0 and a free-gap alignment would otherwise run under the name of the −4 default. Reachable as conservation.
MolstudioScienceLabels
What a viewport label says, which atom carries it and where it sits: element, atom name, residue name and number, chain, B factor, occupancy, charge or your own text, one per atom, residue or chain. A label quoting a value shows the one deposited in the record, and an atom with no such value is left unlabelled rather than labelled with a substitute. Also the glyph-atlas and text geometry the renderer draws from.
MolstudioScienceLabelsWorkbench
Label panel, on-screen overlap thinning that reports what it hid, and the label command with familiar resn, resi and b spellings.
MolstudioScienceCrippen
Wildman-Crippen atom-contribution logP and molar refractivity, applying the published table verbatim. Hydrogens missing from the record are added first, from a declared count, a molfile hydrogen-count field, a Kekulé valence sum, or the σ positions an aromatic atom holds; an aromatic nitrogen that could carry a hydrogen or not is settled by its ring’s electron count, and refused outright when the ring does not settle it. The counts that said how many hydrogens were missing are cleared when those atoms are created, so the expanded record is self-consistent for any reader and not only this one.
MolstudioScienceAromaticity
Smallest-ring perception and Hückel 4n+2 aromaticity, including fused perimeters that are aromatic only as a whole. Aromatic bonds a record already declares are believed rather than re-derived, and the result says which of the two it came from.
MolstudioScienceSmarts
The SMARTS subset the published atom-contribution tables are written in — atom expressions, branches, and five bond symbols: single, double, triple, aromatic and the any-bond tilde. Ring closures, recursive SMARTS and stereochemistry throw while parsing rather than matching something unintended. H and X count hydrogens that may never be drawn, so the count comes from the record where the record states it and otherwise from the element, the charge and the bond orders; an atom whose count cannot be derived at all, an iron with no valence rule, makes an H or X primitive refuse rather than report no match, because a pattern that cannot be answered must not answer “no”. Held against RDKit over 966 pattern-molecule pairs with none disagreeing.
MolstudioScienceInteractionTypes
π-stacking face to face and edge to face, cation-π, halogen bonds, amide stacking and water-mediated bridges, each with the distances and angles that qualified it. Which rings exist to be typed is itself a declared cutoff, maximumPlanarityDeviationAngstrom at 0.25 Å, and the rings it rejects are named with their measured deviation rather than dropped in silence.
MolstudioScienceInteractionTypesWorkbench
Grouped interaction list, both-sides selection and the interactions command.
MolstudioScienceInterfaces
Buried solvent-accessible area per chain pair, interface residues, polar/apolar split, contacts, geometric hydrogen bonds and salt bridges, with the radius set, probe radius and sphere-point count the areas were measured with retained on every result. A buried area is a difference of two of those areas, and the sampling error does not subtract with them, so the result declares how far turning the structure moves it as well: 2.6 per cent of the buried total over twenty rigid placements of 1HEW chains A and B at the default 240 sphere points, against 0.6 per cent on the accessible area of the same structure over the same placements.
MolstudioScienceInterfacesWorkbench
Ranked interface list, per-side and whole-interface selection, framing and the interfaces command.
MolstudioScienceViewWorkbench
Viewport slab clipping and projection mode, as view state that never touches coordinates.
MolstudioScienceSurfaceProperties
Published residue scales, atom fields, surface concavity, distance and supplied per-residue datasets mapped onto surface vertices, with colourblind-safe ramps and a legend. A dataset key is read as the full residue key, as chain and residue number, or as the residue number alone; the form that matched and the atom and residue coverage travel on the result, and a key naming more than one residue is refused unless the run declares datasetKeyScope: 'every-matching-residue', which is then reported as a warning. Three atoms in chains A, B and C numbered residue 2 used to take 0.77 each from the key “2” with nothing recording that one chain's score had been copied onto the other two.
Carbon-probe potential sampling, protein-solvent-protein buriedness, connected pocket regions with volume, enclosure, lining residues and a per-pocket sub-grid. The depth of the probe-atom well the field was sampled at is stated with it, as both epsilons and the sqrt(probe × atom) they combine to, because it scales every value in the grid and was the difference between six pockets and none on 2CPP chain A under records that were otherwise identical. The scope a result was computed at is stated with it — how many of the supplied atoms were sampled and how many hydrogen and water atoms were removed first — together with the residue names and the residue-name fields the water rule reads, because a PDB-derived model carries that name in authCompId and an mmCIF-derived one in labelCompId, and reading the wrong field put every ordered water into the grid under a record that said water was out of scope.
MolstudioScienceFieldProducers
Grid potential maps on one shared grid: van der Waals, apolar contact, and hydrogen-bond donor and acceptor proximity. The two energy maps accumulate the Lennard-Jones sum here rather than delegating it to the pocket detector, which stops accumulating once the running sum crosses its ceiling and skips a pair at zero separation — shortcuts that suit pocket detection and are wrong for a displayed field, so the two can differ by up to the ceiling at clashing voxels and this module says so instead of letting a reader assume they agree. The two proximity maps take the maximum over nearby partners of a Gaussian well centred at 2.9 Å with a width of 0.45 Å, never a sum, which is what keeps the value an index between nought and one rather than a hydrogen-bond count; the donor map is computed against receptor acceptors and the acceptor map against receptor donors, both typed by element alone, so a nitrogen or oxygen with no available hydrogen still counts as a donor and organic fluorine still counts as an acceptor with Dunitz’s objection cited beside it. Hydrogens, deuteriums and waters are outside the default scope, and every run states how many of each it removed before sampling, because a hydrogen-bond map of a hydrated site with the ordered waters taken out is a different map and absence in it is not evidence. It states the rule beside the count, because a removal a reader cannot check the rule for is not a declared removal: water is recognised by the residue names HOH, WAT and DOD, read from the first of residueName, compId, labelCompId or authCompId the atom carries. Only the last of those is filled by a PDB file, and reading the first three alone left every ordered water inside the scope of every map built from a PDB while the run declared that no water had been present to remove — 1HEW read as a PDB sampled all 1147 atoms with its 103 waters scoring as hydrogen-bond acceptors, against the 1044 the same deposited entry gave through its mmCIF. Both encodings now scope the same 1044 atoms and report the same 103 removals. A scope left with no partner atom at all is refused with what the scope itself removed named in the refusal, so “no acceptor in scope” is never read as “no acceptor in the structure”. Since runProducer records only the parameters the caller passed, everything a producer chose for itself — radii, probe, cutoff, clamp, ideal distance, well width — reaches the record through the limitations each run generates from the same objects the arithmetic reads.
MolstudioSciencePocketsWorkbench
One pocket workspace: ranked list, per-pocket envelope in its own colour, framing, lining selection and the pockets command.
Open Molstudio Lab for the workbench. Use the Studio manual for cinematic authoring and rendering behaviour.