Traj Desk - notice The app's agent prompt is derived from the agent skill "molecular-dynamics" (@k-dense-ai/molecular-dynamics, skill version 1.1, author Kuan-lin Huang), section "Trajectory Analysis with MDAnalysis" (load_trajectory, compute_rmsd, compute_rmsf, analyze_contacts) and its best practices, in the repository K-Dense-AI/scientific-agent-skills by K-Dense Inc. https://github.com/K-Dense-AI/scientific-agent-skills (skills/molecular-dynamics) The skill's front matter declares the MIT license. No text of the skill is redistributed verbatim; the prompt was rewritten for this app. The in-browser analysis (pdbtraj.js, mdcore.js, trajkit.js) is an independent JavaScript implementation of what MDAnalysis 2.9.0 does for these calls: the PDB topology parser and PDB coordinate reader (first model as topology, one frame per MODEL, float32 coordinates, masses from the element column or guessed from atom names), the selection keywords listed on the page (with MDAnalysis' equal precedence for and/or), align.AlignTraj(u, u, select=..., in_memory=True), rms.RMSD, rms.RMSF (Welford), AtomGroup.radius_of_gyration() and distance-based contacts. The optimal rotation is found with the quaternion eigenvector method rather than MDAnalysis' QCP code; both solve the same least-squares problem. The mass table, the element-guessing tables and the protein and nucleic residue-name lists are copied from MDAnalysis 2.9.0 (guesser/tables.py and core/selection.py; MDAnalysis 2.9.0 is packaged under the GNU LGPL v3 or later, and its tables are reproduced here as data). No other MDAnalysis, NumPy or SciPy code is included. It was checked against MDAnalysis 2.9.0 running the skill's recipes on 700 random trajectories (1-30 frames; mixed residues including HSD, MSE and CYX; ligands, water and ions; altlocs; segids or chain ids; CRYST1 records; with and without element columns; 19 kinds of selection; random reference frames, start frames, frame spacings and cutoffs) and on the 38 NMR models of PDB 1L2Y with 21 settings - about 150,000 compared values. RMSD, RMSF, per-residue RMSF and radius of gyration agree to within 2e-5 Angstrom and contacts exactly, except for selections of two atoms, whose orientation is undefined (MDAnalysis then returns an arbitrary rotation); the page refuses selections of fewer than three atoms or of atoms on one line. Two behaviours reproduced on purpose: AlignTraj has no reference-frame argument (it aligns to frame 0), and near-zero RMSD values carry MDAnalysis' QCP iteration noise of up to about 1e-3 Angstrom, which the reproduction check avoids. Defects in the skill's snippets that this app reports and works around: compute_rmsf indexes R.results.rmsf (one value per selected atom) with universe atom indices (res_atoms.indices): for the default "backbone" selection of an all-atom protein it raises IndexError (confirmed with MDAnalysis 2.9.0 on PDB 1L2Y: "index 92 is out of bounds for axis 0 with size 80"). analyze_contacts calls contacts.contact_matrix(protein.positions, ligand.positions, radius), but MDAnalysis 2.9.0 defines contact_matrix(d, radius, out=None) on a precomputed distance matrix, so the call raises TypeError. Example data (wwPDB, CC0 1.0 - https://www.wwpdb.org/about/usage-policies): trpcage-1l2y.txt: the 38 models of PDB entry 1L2Y, coordinates unmodified (header records trimmed). Neidigh, J.W., Fesinmeyer, R.M. & Andersen, N.H. (2002). Designing a 20-residue protein. Nat. Struct. Biol. 9, 425. https://doi.org/10.1038/nsb798 trpcage-wrapped.txt: the same models with residues 11-20 of models 26-38 shifted by +40 A in x and a 40 A CRYST1 record per model, to imitate a periodic wrap. Altered on purpose; not data. streptavidin-biotin-synthetic.txt: a SYNTHETIC 30-frame trajectory built from PDB entry 1STP (chain A and the biotin, water removed) by adding random rigid-body motion, residue and atom displacements, a moving 45-52 loop, a slow hinge motion of residues 65-83 and the biotin moving out of the pocket from frame 18. It is not a simulation. Weber, P.C., Ohlendorf, D.H., Wendoloski, J.J. & Salemme, F.R. (1989). Structural origins of high-affinity biotin binding to streptavidin. Science 243, 85-88 (PMID 2911722). MDAnalysis: Michaud-Agrawal, N., Denning, E.J., Woolf, T.B. & Beckstein, O. (2011). MDAnalysis: A Toolkit for the Analysis of Molecular Dynamics Simulations. J. Comput. Chem. 32, 2319-2327. https://doi.org/10.1002/jcc.21787 Gowers, R.J. et al. (2016). MDAnalysis: A Python package for the rapid analysis of molecular dynamics simulations. Proceedings of the 15th Python in Science Conference, 98-105. https://doi.org/10.25080/majora-629e541a-00e QCP (used by MDAnalysis): Theobald, D.L. (2005). Acta Cryst. A 61, 478-480; Liu, P., Agrafiotis, D.K. & Theobald, D.L. (2010). J. Comput. Chem. 31, 1561-1563.