Compare commits

..

3247 Commits

Author SHA1 Message Date
Alexander Rose
93a3eba66d Merge pull request #1834 from molstar/fix-aromatic-ring-hybridization
Fix aromatic ring detection not accounting for hybridization
2026-05-30 21:43:10 -07:00
Alexander Rose
41b8584fb7 Merge branch 'master' of https://github.com/molstar/molstar into fix-aromatic-ring-hybridization 2026-05-30 21:40:31 -07:00
Alexander Rose
523b17dfde Merge pull request #1824 from sbittrich/master
Non-covalent interactions: detect and visualize water bridges
2026-05-30 21:38:35 -07:00
Alexander Rose
c47b4d6078 Merge pull request #1833 from molstar/cam-anim-params
Add axis param to camera spin/rock animation
2026-05-30 21:32:01 -07:00
Alexander Rose
b94073b96f Merge branch 'master' of https://github.com/molstar/molstar into cam-anim-params 2026-05-30 21:27:45 -07:00
Alexander Rose
905eb3ec2f add default for backwards compatibility 2026-05-30 21:26:28 -07:00
Sebastian
3ae72e5c60 generic bridge visuals 2026-05-29 10:55:48 +02:00
Alexander Rose
055dfd4946 Merge pull request #1840 from giagitom/fix-premul-rgb
Fix exported image artifacts on transparent background
2026-05-26 21:58:08 -07:00
Sebastian
2601d2ba63 decouple water bridges from hbond detection 2026-05-26 16:35:38 +02:00
Sebastian
340806d774 generalized support of interaction bridges 2026-05-26 16:06:14 +02:00
Sebastian
18ad848de2 Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	CHANGELOG.md
2026-05-26 13:57:53 +02:00
giagitom
9de8334af5 Fix exported image artifacts on transparent background 2026-05-26 13:05:24 +02:00
Alexander Rose
57580a5e6b Merge pull request #1836 from giagitom/fix-cel-shading-ambient-color
Fix cel-shaded ambient color being stripped to luminance
2026-05-23 21:50:07 -07:00
giagitom
7da4a85459 Fix cel-shaded ambient color being stripped to luminance 2026-05-19 16:43:00 +02:00
Alexander Rose
b7c380fd90 Merge branch 'master' of https://github.com/molstar/molstar into fix-aromatic-ring-hybridization 2026-05-17 22:21:57 -07:00
Alexander Rose
bcd304d058 header 2026-05-17 22:19:04 -07:00
Alexander Rose
fd50a8f8e0 Fix aromatic ring detection not accounting for hybridization 2026-05-17 22:17:55 -07:00
Alexander Rose
27f251e8e4 Merge pull request #1832 from molstar/ssao-multi-fix
Fix SSAO half/quarter resolution textures for multi-scale
2026-05-17 20:15:09 -07:00
Alexander Rose
8d2a44983e remove superfluous enableAnimation param 2026-05-16 22:29:55 -07:00
Alexander Rose
f806ac1444 Add axis param to camera spin/rock animation 2026-05-16 22:25:55 -07:00
Alexander Rose
63a585d88a Merge pull request #1830 from josemduarte/ms-fix-omitwater
Fix ModelServer bugs for omitWater param in surroundingLigands endpoint
2026-05-16 22:24:58 -07:00
Alexander Rose
a4b5a16fcd Merge branch 'master' into ms-fix-omitwater 2026-05-16 22:22:42 -07:00
Alexander Rose
86bf859a63 Fix SSAO half/quarter resolution textures for multi-scale 2026-05-16 22:15:12 -07:00
Alexander Rose
1b8117d3f1 Fix Volume and Isosurface getBoundingSphere ignoring instances 2026-05-10 17:18:18 -07:00
Alexander Rose
400e2bbc45 Merge pull request #1822 from corredD/codex/dot-morton-spheres 2026-05-10 08:42:22 -07:00
Jose Duarte
e2e26c7e9c Updating changelog 2026-05-09 22:28:38 -07:00
Jose Duarte
5ca9020cbf mol-model: fix water leak in surroundingLigands query
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 22:21:49 -07:00
Jose Duarte
ea4c411d5c model-server: fix omit_water boolean parsing for REST GET requests
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 22:21:49 -07:00
Alexander Rose
ba7e3fe827 Merge branch 'master' of https://github.com/molstar/molstar into pr/corredD/1822 2026-05-09 16:03:21 -07:00
Alexander Rose
8f20571a17 Merge pull request #1827 from molstar/camera-changed-event
Camera helpers
2026-05-09 16:02:30 -07:00
Alexander Rose
c25a4247e6 Merge branch 'master' of https://github.com/molstar/molstar into camera-changed-event 2026-05-09 15:57:47 -07:00
Alexander Rose
1071d3d8ba Merge pull request #1828 from molstar/instance-granularity-improvements
Instance granularity improvements
2026-05-09 15:56:36 -07:00
Alexander Rose
e8dc046570 Merge branch 'master' of https://github.com/molstar/molstar into instance-granularity-improvements 2026-05-09 15:54:00 -07:00
Alexander Rose
27f9c2aa67 Merge pull request #1829 from molstar/mesoscale-preset
Mesoscale preset
2026-05-09 15:53:29 -07:00
Alexander Rose
a4962231c8 revert 2026-05-09 15:51:05 -07:00
Alexander Rose
8833f29ce5 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-preset 2026-05-09 15:44:01 -07:00
Alexander Rose
40b6038380 type tweak 2026-05-09 15:43:04 -07:00
Armando Pellegrini
59e16e0187 Fix State.dispose() not invoking transformer dispose for live cells (#1826)
`Transformer.Definition.dispose` is documented as "automatically called
on deleting an object," but `State.dispose()` only disposed its own event
subjects and action manager — it never iterated still-live cells to call
their per-transformer dispose. Cells holding GL buffers, mesh data, etc.
only had their dispose fired on explicit deletion (e.g. `clear()`), so
any consumer that called `plugin.dispose()` without first awaiting
`plugin.clear()` retained the callback chain, the GL buffers it points
at, and any closures captured by it.

In a long-running single-page app where the user navigates between
routes that mount/unmount a Mol* viewer, this leaked roughly 25–50 MB
of process RSS per cycle even with `plugin.dispose()` correctly called.
A 20-cycle E2E mount/unmount harness on a 1AKE structure measured a
+541 MB RSS / +266 MB JS-heap delta in the unconditional-`dispose()`
case; calling `await plugin.clear()` before `plugin.dispose()` halved
the residual leak, confirming the per-cell dispose path was missing on
the unconditional `dispose()` route.

This change walks the cell tree once (post-order via the existing
`StateTree.doPostOrder` helper) and invokes the per-transformer dispose
for every still-live cell, swallowing+warning on errors so a single
faulty transformer can't prevent siblings from cleaning up. The
existing per-cell `dispose` helper is reused for consistency with
`updateNode`/`findDeletes` semantics.

Tests cover: chained transformers, sibling subtrees, throwing-dispose
isolation, and transformers without a dispose definition.

Also adds `useDefineForClassFields: false` to the jest esbuild
transform so tests can construct `State` (the `TransientTree` parameter
property + class field pattern relies on legacy class-field semantics,
which `tsc` honors via `target: es2018` but esbuild's default `esnext`
target does not).

Fixes #1825

Co-authored-by: Armando Pellegrini <tech.tools@boltz.bio>
2026-05-09 22:17:38 +02:00
Alexander Rose
ca5a50bd53 changelog 2026-05-09 12:36:38 -07:00
Alexander Rose
bccf54fabe avoid extra allocations 2026-05-09 12:36:32 -07:00
Alexander Rose
57a790544c Add mesoscale representation preset 2026-05-09 12:31:26 -07:00
Alexander Rose
df0669598c Add presets option to ObjectList param definition 2026-05-09 12:31:11 -07:00
Alexander Rose
fb912036af Merge branch 'master' of https://github.com/molstar/molstar into pr/corredD/1822 2026-05-09 08:25:26 -07:00
Alexander Rose
9efb5cd126 Add Camera.changed event and rotation/translation setter/getter 2026-05-09 08:24:26 -07:00
Alexander Rose
08a56ad6ab Instance granularity improvements
- Add `instanceGranularity: 'auto'` as a memory guard
- Honor `instanceGranularity` in `Visual.getLoci`
2026-05-09 08:10:58 -07:00
Sebastian
2c2bd6adda tweak wb labels 2026-05-06 16:06:33 +02:00
Sebastian
b010298acb fix merge 2026-05-06 15:27:45 +02:00
Sebastian
7033a1e0b2 Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	CHANGELOG.md
2026-05-06 15:23:35 +02:00
Sebastian
8ad617acdf fix refinement 2026-05-06 15:20:34 +02:00
Sebastian
31ab6aa93e iterator improv 2026-05-06 11:32:50 +02:00
Sebastian
0a2dbe14d7 refine wb impl/vis 2026-05-06 11:11:43 +02:00
Sebastian
89d305aaa1 cl 2026-05-06 10:41:42 +02:00
Sebastian
dbb6b90fbc nci: improve wb visuals on shared legs 2026-05-06 10:37:08 +02:00
Sebastian
c57150f09f nci: filter hbonds if explained by water bridge 2026-05-06 10:22:33 +02:00
Sebastian
0b30c7344b nci: water bridge support 2026-05-06 09:56:06 +02:00
Alexander Rose
d7ad5a6e9f Fix empty transforms default in ShapeFromPly 2026-05-04 23:14:02 -07:00
Alexander Rose
86a74d1cc2 5.9.0 2026-05-03 10:45:51 -07:00
Alexander Rose
3f0f24cb99 changelog 2026-05-03 10:44:40 -07:00
Alexander Rose
b8ddc142ea schema updates 2026-05-03 00:15:31 -07:00
Alexander Rose
cccaa48589 ts6 tweaks 2026-05-03 00:12:36 -07:00
Alexander Rose
3ad355ad40 package updates 2026-05-03 00:12:23 -07:00
Alexander Rose
918186eb24 Merge pull request #1805 from molstar/proc-anim
Procedural animation
2026-05-02 16:18:22 -07:00
Alexander Rose
db4742cebf tweaks 2026-05-02 16:16:39 -07:00
Ludovic Autin
19fec3bbc1 Order DOT spheres by Morton index
Add DOT sphere impostors in Morton order so sphere LOD stride sampling remains spatially distributed.
2026-05-02 10:48:31 -07:00
Alexander Rose
7d6c77b3bd Merge branch 'master' of https://github.com/molstar/molstar into proc-anim 2026-05-02 09:34:00 -07:00
Alexander Rose
dfcc4e400d add animation support to texture-mesh geometry 2026-04-27 22:30:58 -07:00
Alexander Rose
c9734d83a2 Merge pull request #1818 from corredD/codex/fix-assembly-symmetry
Fix GraphQL POST request handling for Assembly Symmetry
2026-04-25 07:57:40 -07:00
Alexander Rose
93943cc27b changelog 2026-04-25 07:55:08 -07:00
Alexander Rose
25836b2de0 changelog 2026-04-25 07:50:28 -07:00
Alexander Rose
c6874c922d use record for headers
Co-authored-by: Copilot <copilot@github.com>
2026-04-25 07:50:21 -07:00
Ludovic Autin
0937c84f47 Fix GraphQL POST request handling 2026-04-18 22:20:57 -07:00
Alexander Rose
6a7f892d60 cleanup & changelog 2026-04-18 10:57:14 -07:00
Alexander Rose
b4cd2d0a11 Merge branch 'master' of https://github.com/molstar/molstar into proc-anim 2026-04-18 10:56:12 -07:00
Alexander Rose
2067f02830 changelog 2026-04-18 10:55:09 -07:00
Alexander Rose
6d86ada6b4 getNucleicOneLetterCode 2026-04-18 10:54:48 -07:00
Alexander Rose
f656cf09b7 Merge pull request #1813 from corredD/codex/slice-marking-optimization
Slice marking optimization
2026-04-18 10:54:14 -07:00
Alexander Rose
a891b4c551 tweaks and changelog 2026-04-18 10:50:23 -07:00
Alexander Rose
ded844c936 Merge branch 'master' of https://github.com/molstar/molstar into pr/corredD/1813 2026-04-18 10:46:58 -07:00
Alexander Rose
44b36637fd Merge pull request #1802 from molstar/ccd-bonds-deuterium
Handle CCD bonds with Deuterium atoms
2026-04-18 10:45:26 -07:00
Alexander Rose
f590bd0f0a Merge branch 'master' into ccd-bonds-deuterium 2026-04-18 10:29:12 -07:00
Alexander Rose
9474c80673 Merge pull request #1812 from molstar/8k-uhd-image-option
Add 8K UHD option to `ViewportScreenshotHelper`
2026-04-18 10:28:05 -07:00
Alexander Rose
7b48d691c8 Merge branch 'master' into 8k-uhd-image-option 2026-04-18 10:27:54 -07:00
Alexander Rose
b03146852f Merge pull request #1811 from molstar/mrc-empty-length 2026-04-18 09:34:42 -07:00
Ludovic Autin
9345f3584a Update slice marking file headers 2026-04-12 22:46:06 -07:00
Ludovic Autin
4d058aa1a8 Merge commit '94f6b864b0ede5c88b98725648178ceda5b7340b' into codex/slice-marking-optimization 2026-04-12 22:03:35 -07:00
Ludovic Autin
e7da6092aa Optimize slice marking for hover 2026-04-12 21:53:08 -07:00
David Sehnal
94f6b864b0 Fix empty PluginSpec.animations edgecase (#1810) 2026-04-12 19:37:21 +02:00
Alexander Rose
6e90447511 Add 8K UHD option to ViewportScreenshotHelper 2026-04-11 09:11:16 -07:00
Alexander Rose
b91030c4bd Handle MRC files with empty length header fields 2026-04-11 09:08:57 -07:00
dsehnal
31819dbf16 5.8.0 2026-04-03 19:28:58 +02:00
dsehnal
1665dd7d00 changelog + npm audit 2026-04-03 19:27:46 +02:00
Alexander Rose
9716fecdb9 add time only animation for exporting 2026-04-02 11:39:11 -07:00
Alexander Rose
684fd2d237 Merge branch 'master' of https://github.com/molstar/molstar into proc-anim 2026-04-01 16:34:01 -07:00
Alexander Rose
9432b9a7a7 ME: tweak size scale handling 2026-04-01 16:33:44 -07:00
Alexander Rose
3a37c95c17 scale tumble with bounding-sphere 2026-04-01 16:32:36 -07:00
Alexander Rose
6040b99c19 Merge branch 'master' of https://github.com/molstar/molstar into proc-anim 2026-04-01 14:22:50 -07:00
Alexander Rose
83bef0f0e7 proc anim panel & per-group wiggle 2026-04-01 14:22:38 -07:00
Alexander Rose
95bb3a1f81 Merge pull request #1801 from molstar/traj-static-prop-fix
Fix static model properties for trajectories
2026-04-01 10:31:29 -07:00
Alexander Rose
be677f47cb basic procedural animation 2026-03-27 12:55:00 -07:00
Alexander Rose
43bf69d09c handle ComponentBond.Entry.map changes 2026-03-27 09:35:25 -07:00
Alexander Rose
b6cc626431 cleanup 2026-03-27 09:14:46 -07:00
Alexander Rose
931fdfca9b move ccd logic to ComponentBond 2026-03-27 09:11:55 -07:00
midlik
1c10db5656 VolumeStreaming - avoid re-download on node update (#1804) 2026-03-27 11:36:14 +01:00
Paul Pillot
c4ccd8758f Replace node-fetch/@types with native fetch (#1803) 2026-03-27 08:44:29 +01:00
Alexander Rose
6c99c575bc Handle CCD bonds with Deuterium atoms 2026-03-26 16:23:32 -07:00
Alexander Rose
ae2493b6e3 Merge pull request #1798 from papillot/remove-promisify
remove utils.promisify dependency
2026-03-26 14:46:44 -07:00
Alexander Rose
bcd50c294f Merge pull request #1787 from molstar/vol-instance-slice
fix volume slice visual to handle instances
2026-03-26 14:44:31 -07:00
Alexander Rose
9c0024dbab Merge branch 'master' into vol-instance-slice 2026-03-26 14:41:42 -07:00
Alexander Rose
c15b3603c0 Merge pull request #1786 from molstar/vol-instance-refactor
volume refactoring for improved instance handling
2026-03-26 14:40:41 -07:00
Alexander Rose
70647ba972 tighter frame mode image size 2026-03-26 14:37:23 -07:00
Alexander Rose
8d19357845 reuse static props in Model._trajectoryFromModelAndCoordinates 2026-03-26 09:34:41 -07:00
Alexander Rose
8e9817c4d1 make Model.getAtomicRadii a static property 2026-03-26 09:33:32 -07:00
Alexander Rose
b16147b88c don't calculate atomic radii for fast boundary 2026-03-26 09:32:37 -07:00
Alexander Rose
9840d8f816 changelog 2026-03-25 15:35:11 -07:00
Alexander Rose
d892ccab4c fix mapping for grid image 2026-03-25 15:31:09 -07:00
Alexander Rose
65f88b3293 ensure image plane covers volume 2026-03-25 15:10:05 -07:00
Alexander Rose
9e6e5eb795 ensure image plane normal is normalized 2026-03-25 15:09:34 -07:00
Alexander Rose
2f755efeec handle voxels mapping to multiple pixels 2026-03-25 15:09:15 -07:00
Alexander Rose
012e616ec4 fix Mat4.fromPlane 2026-03-25 15:06:34 -07:00
midlik
007d0e7608 Fix areHierarchiesEqual, MVS empty selection focus, flickering tooltip (#1799)
* Fix StructureComponent.update when substructure empty

* Avoid tooltip box flickering when hovering something under it

* Fix MVS focus on empty selections

* Update CHANGELOG
2026-03-24 15:56:19 +01:00
Paul Pillot
bf313073b9 remove utils.promisify dependency
This dependency pulls a 23MB dependency graph to support nodejs v<8.0
Native alternatives exist: fs.promises, and native utils/promisify

Consistency: renaming readFile --> readFileAsync where changes were made.
2026-03-24 09:54:10 -04:00
Alexander Rose
293928f3de Merge branch 'vol-instance-refactor' of https://github.com/molstar/molstar into vol-instance-slice 2026-03-23 09:55:44 -07:00
Alexander Rose
2404f398b6 Merge branch 'master' of https://github.com/molstar/molstar into vol-instance-refactor 2026-03-23 09:55:11 -07:00
Alexander Rose
43ff6e24c8 Merge pull request #1789 from molstar/more-debug-helpers
More debug helpers
2026-03-23 09:54:24 -07:00
Alexander Rose
9e62112366 Merge branch 'master' into more-debug-helpers 2026-03-23 09:54:14 -07:00
midlik
026d6fc618 MVS VolumeStreamingExtension (#1793)
* InitVolumeStreaming refactor

* InitVolumeStreaming refactor 2

* CreateVolumeStreamingInfo autoEntries param

* MVS VolumeStreamingExtension

* Update CHANGELOG

* MVS: avoid structure focus persisting through states

* MVS VolumeStreamingExtension - collapse VolumeServer node
2026-03-21 10:32:17 +01:00
Alexander Rose
95fcd942dc refactor interior handling 2026-03-19 14:25:51 -07:00
Alexander Rose
805481db14 changelog 2026-03-19 14:06:28 -07:00
Alexander Rose
39175df025 tweaks 2026-03-19 13:55:05 -07:00
Alexander Rose
cd0f451f6b Merge branch 'master' of https://github.com/molstar/molstar into more-debug-helpers 2026-03-18 15:44:28 -07:00
Alexander Rose
fe1aa1a9bf move debug helpers to extension 2026-03-18 15:44:10 -07:00
Alexander Rose
fcfb6e6d5a Merge pull request #1788 from rjdirisio/seqres-to-sequence-toolbar
Use SEQRES to show unresolved residues in Sequence toolbar
2026-03-18 13:41:44 -07:00
Alexander Rose
c548c94575 Merge branch 'master' of https://github.com/molstar/molstar into more-debug-helpers 2026-03-18 12:50:59 -07:00
Alexander Rose
2d45f4a77c move code into getPdbxUnobsOrZeroOccResidues
- explicitely refer to mmcif enum types
2026-03-18 12:19:37 -07:00
Alexander Rose
a5ae887842 schema updates
- fix mmcif int enums
2026-03-18 12:17:28 -07:00
Ryan DiRisio
e4b53cdc6a simplify alignCompIdsToSeqres as a result of merge 2026-03-18 12:06:19 -04:00
Ryan DiRisio
c53940e67e Merge remote-tracking branch 'upstream/master' into seqres-to-sequence-toolbar 2026-03-18 12:01:10 -04:00
Alexander Rose
6d61745f0f Merge pull request #1794 from rjdirisio/fix-return-alignment-return-type
Fix return `alignment.trace()` return to match return type
2026-03-18 08:59:26 -07:00
Alexander Rose
46d86d93b0 tweak unknown residue handling in blosum scoring 2026-03-18 08:55:48 -07:00
Ryan DiRisio
11772b64fb update header 2026-03-18 11:18:07 -04:00
Ryan DiRisio
dbc8ab00c6 Merge branch 'master' into fix-return-alignment-return-type 2026-03-18 11:14:45 -04:00
Ryan DiRisio
015fad4371 trace() returns string[] rather than string 2026-03-18 11:13:07 -04:00
Ryan DiRisio
71a484586f Throw error if getEntityId not called before getEntityIdForChain 2026-03-18 11:02:15 -04:00
Ryan DiRisio
f0b06ee746 Merge remote-tracking branch 'upstream/master' into seqres-to-sequence-toolbar 2026-03-17 15:52:29 -04:00
Ryan DiRisio
b0694b886b add entity_poly_seq check in unobs test 2026-03-17 15:51:31 -04:00
Ryan DiRisio
eaf47b3169 rm excess comments 2026-03-17 15:41:48 -04:00
Ryan DiRisio
ad9046fcf2 regression tests for 1NSA 2026-03-17 15:25:07 -04:00
Ryan DiRisio
eabe4d46bc tests for SEQRES 2026-03-17 15:20:44 -04:00
Ryan DiRisio
003c5f8fb7 update file headers 2026-03-17 15:13:24 -04:00
Ryan DiRisio
68748a4a94 use -1 for unaligned residue 2026-03-17 15:11:44 -04:00
Ryan DiRisio
9bd6b8195d factor out initialLabelSeqId w/ comment 2026-03-17 15:06:53 -04:00
Ryan DiRisio
05848b651c factor out computeSeqresAlignments helper function 2026-03-17 15:02:57 -04:00
Ryan DiRisio
0a8f87dd9f factor out getEntityPolySeq
add to helperCategories
2026-03-17 15:00:09 -04:00
Ryan DiRisio
925aaa701d remove hasSeqRes, add debug log for seqres block 2026-03-17 14:53:49 -04:00
Ryan DiRisio
5be599bad4 Update CHANGELOG.md 2026-03-17 14:48:29 -04:00
Tianzhen Lin (Tangent)
e22ce53e65 Fix circular dependency crash in bundlers (esbuild, Rolldown) (#1792)
* Fix circular dependency crash in bundlers (esbuild, Rolldown)

StateTransforms uses `import * as X` namespace imports that are
assigned as object properties at module construction time. When a
bundler concatenates modules into a single scope and reorders their
initialization (as esbuild and Rolldown do), the namespace variable
can still be undefined when the object literal is evaluated, causing
a runtime crash:

  Cannot read properties of undefined (reading 'ModelUnitcell3D')

Replace direct property assignments with lazy getters so that
namespace imports are resolved at access time rather than at
construction time. This preserves the existing public API — callers
still use `StateTransforms.Representation.CreateStructureRepresentation3D`
— while making the code safe regardless of module evaluation order.

Fixes #1791

* Add changelog entry and contributor for circular dependency fix

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 15:38:48 +01:00
Alexander Rose
4c49431027 fix imports 2026-03-08 22:33:41 -07:00
Alexander Rose
4192d82ef3 file reorg 2026-03-08 22:25:27 -07:00
Alexander Rose
ce220737f2 description 2026-03-08 22:21:57 -07:00
Alexander Rose
eeb7cd2c52 add more debug helpers
- clip-object
- direct-volume
- image
- mesh
2026-03-08 22:18:30 -07:00
Alexander Rose
748111beb2 rename bounding-sphere helper and add separate debug helper 2026-03-08 22:16:59 -07:00
Alexander Rose
1f7d41c653 improve helpers drawing order 2026-03-08 22:14:46 -07:00
Alexander Rose
b9430ff387 add lines builders (box, plane, sphere) 2026-03-08 22:13:47 -07:00
Alexander Rose
6591bab035 Fix clip-object transform due to missing axis normalization 2026-03-07 10:21:21 -08:00
Ryan DiRisio
4da446aec2 skip non-polymer atoms 2026-03-02 13:01:02 -05:00
Ryan DiRisio
25c170e36d use global alignment that exists in the repo 2026-03-02 11:05:31 -05:00
Ryan DiRisio
eba18d1dce first pass at getting SEQRES data into sequence toolbar 2026-03-02 10:22:03 -05:00
Alexander Rose
2c87d01a5e fix volume slice visual to handle instances 2026-03-01 15:01:42 -08:00
Alexander Rose
e41a2baa32 volume refactoring for improved instance handling
- add Volume._localPropertyData
- move Volume.periodicity to Grid
- add optional Volume.parent
- fix Volume.getBoundingSphere to account for instances
- add periodicRange mode to VolumeInstances PluginStateTransform
- include currentVolume in VolumeViosual.setUpdateState
2026-03-01 14:56:53 -08:00
Alexander Rose
c297017749 Fix detecting sidechain-only structures as coarse-grained 2026-03-01 11:01:42 -08:00
Alexander Rose
9a0fc1faa6 changelog 2026-03-01 11:00:00 -08:00
Alexander Rose
424513f23c Merge branch 'master' of https://github.com/molstar/molstar 2026-03-01 10:58:57 -08:00
zachcp
895d672589 feat: add putty mvs to molstar (#1783) 2026-03-01 16:55:19 +01:00
Alexander Rose
0c6253ed16 formating 2026-02-28 18:23:41 -08:00
Alexander Rose
da97cd20aa 5.7.0 2026-02-28 13:43:11 -08:00
Alexander Rose
ca6d73e048 changelog 2026-02-28 13:41:30 -08:00
Alexander Rose
88b79deefa package updates
- set min node to v22
- added globals for eslint v10
2026-02-28 13:40:38 -08:00
Alexander Rose
d756e2e195 schema updates 2026-02-28 13:22:39 -08:00
Alexander Rose
2ce126a8f5 update cif-core schema 2026-02-28 13:19:05 -08:00
Alexander Rose
01e95dada0 ignore some lint commits in git blame 2026-02-28 13:16:59 -08:00
Alexander Rose
1c024f0943 Merge pull request #1778 from molstar/polyhedron
Polyhedron
2026-02-22 12:32:22 -08:00
Alexander Rose
5901e3d6a1 Merge branch 'master' into polyhedron 2026-02-22 12:29:02 -08:00
Alexander Rose
0cfe1cec66 Merge pull request #1784 from molstar/guard-xr-policy
Guard against `xr-spatial-tracking` blocked in `Permissions-Policy`
2026-02-22 12:28:44 -08:00
Alexander Rose
c1930e4142 Merge pull request #1771 from molstar/basic-streamlines
Basic streamlines
2026-02-22 12:13:39 -08:00
Alexander Rose
71375d908f Guard against xr-spatial-tracking blocked in Permissions-Policy 2026-02-22 11:31:08 -08:00
Alexander Rose
728b87d4e4 Merge branch 'master' of https://github.com/molstar/molstar into polyhedron 2026-02-21 20:58:32 -08:00
Alexander Rose
9c17698a8a rename visual to include "coordination" 2026-02-21 20:57:43 -08:00
Alexander Rose
625381c446 exclude hydrogens 2026-02-21 20:57:20 -08:00
Alexander Rose
da949a245e Merge pull request #1776 from molstar/element-parsing-fixes
Element parsing fixes
2026-02-19 20:40:44 -08:00
Alexander Rose
7000bdd15d Merge branch 'master' into element-parsing-fixes 2026-02-19 20:40:28 -08:00
Alexander Rose
adcf6a6fa8 Merge pull request #1777 from molstar/metal-coordination-style
Add `metalCoordination` style param
2026-02-19 20:40:07 -08:00
Alexander Rose
b70af9f178 Merge branch 'master' into metal-coordination-style 2026-02-19 20:39:40 -08:00
Alexander Rose
e5bdcfd781 Merge pull request #1781 from molstar/fix-unit-symmetry-groups
Fix `unitSymmetryGroups` for representations with `includeParent`
2026-02-18 20:46:15 -08:00
Alexander Rose
6049705224 Fix unitSymmetryGroups for representations with includeParent enabled 2026-02-16 19:57:56 -08:00
Alexander Rose
273d50d403 cleanup coordination data model 2026-02-15 20:59:52 -08:00
Alexander Rose
333ea724d6 Merge pull request #1779 from giagitom/text-improvements
Additional text improvements
2026-02-15 13:32:20 -08:00
giagitom
e96dca91ef Add author to text.ts 2026-02-15 13:36:34 +01:00
giagitom
41a0048f64 Simplify text frag shader, remove near-clip discard, fix bounding sphere padding 2026-02-15 13:33:44 +01:00
Alexander Rose
5e97b05bd2 Add Polyhedron representation showing coordination sites 2026-02-15 00:10:00 -08:00
Alexander Rose
ebc6b2acce Add Structure.coordination sites 2026-02-15 00:09:46 -08:00
Alexander Rose
8372408d9c Add convexHull helper 2026-02-15 00:09:17 -08:00
Alexander Rose
2c6822f5ab Add metalCoordination style param (dashed, solid) for bonds 2026-02-15 00:06:00 -08:00
Alexander Rose
7efbf46e7a Merge pull request #1774 from giagitom/text-improvements
Text label improvements
2026-02-14 23:34:01 -08:00
Alexander Rose
b6d6a518d3 Add more element-pair thresholds for bonding (Ag-S, CoSb, Ga-F) 2026-02-14 23:21:17 -08:00
Alexander Rose
2d690268f9 Handle additional elements in guessElementSymbol* (As, Li, Ga) 2026-02-14 23:20:54 -08:00
Alexander Rose
e0c794b557 Detect metal-coordination when parsing pdb 2026-02-14 23:20:25 -08:00
Alexander Rose
f91f445631 Fix parsing of single charge type_symbols (e.g., N+) in cif-core 2026-02-14 23:20:05 -08:00
giagitom
1cc367c8d8 Fix head rotation for clip-space billboard offset 2026-02-15 01:09:42 +01:00
giagitom
8c6969206d Update copyright years to 2026 2026-02-15 00:59:48 +01:00
Alexander Rose
c0479e3d46 Merge branch 'master' of https://github.com/molstar/molstar into basic-streamlines 2026-02-14 13:41:03 -08:00
Alexander Rose
22e92b38c6 Merge pull request #1775 from molstar/vertex-size
Add `vertex` and `vertexInstance` granularity for size
2026-02-14 13:40:21 -08:00
giagitom
5741709023 Hard discard near clip, revert attachment, cleanup nearFade 2026-02-14 21:11:56 +01:00
Alexander Rose
2265fc02cc per-point tube size 2026-02-14 08:56:04 -08:00
Alexander Rose
64180bef36 add min separation 2026-02-14 08:54:12 -08:00
Alexander Rose
be3caef6e9 Add vertex and vertexInstance granularity for size
- Geometry export: Support vertex-based sizing
- Add `transform` and `domain` parameters to volume-value size theme
2026-02-14 08:26:48 -08:00
giagitom
71a2f71866 Text label improvements
- Fix label attachment inversion (top/bottom and left/right)
- Improve label background vertical centering
- Add label near-clip fade out
- Handle label depth variant for correct transparent background and near fade
- Draw border under text using fragment depth to prevent overlap on adjacent characters
- Clamp border width to avoid exceeding SDF range
- Increase font atlas quality (2x font size multiplier)
- Use clip-space billboard rendering to avoid perspective distortion
2026-02-14 10:53:49 +01:00
David Sehnal
3c6152054e fix TextCtrl (#1773)
* fix TextCtrl

* header
2026-02-12 17:53:02 +01:00
Alexander Rose
080d649bf9 Streamlines support
- Add basic calculation method
 - Add custom-volume-property
 - Add representation with lines and tube-mesh visuals
2026-02-08 19:28:19 -08:00
Alexander Rose
2852b09c77 Merge pull request #1770 from molstar/line-strips 2026-02-08 15:09:12 -08:00
Paul Pillot
5e53467541 Tmalign perf tweaks (#1756)
* add computeCenter util fn

This is more efficient than using the CentroidHelper patterns.

Time improvement: 135ms --> 113ms on 4JV6/3T5I benchmark

* kabsch received array of indices

instead of array of coordinates which requires to build intermediary arrays in each caller.

* Reuse of Vec3 objects

- Avoid Vec3.create in loops
- use Vec3.squaredDistance instead of repeated double index access
- For simplifying TS manipulations, type xa, ya as Vec3 arrays.

* Reuse Positions

MinimeRmsdPositions.empty was called twice in kabsch fn. A unique call is now done with the full length and the same object is reused.
The length property is passed to ensure that only the portion that contains the required coordinates is used.

* simpler hypothenuse implementation

* missing break statements

- when score has not improved, we don't need to run again with the same parameters
- when the number of residues passing the cutoff is lower than 3, we don't need to run again with stricter cutoffs

* hint at float array

* update headers

* cache transformed coordinates, align indices

* replace ndpwScore with ndpwStructure

ndpwScore was creating an intermediate 2D array which is already cached in ndpwStructure

* trimmedKabschWithTransformedCoordinates

avoid recomputing transformed coordinates (as in trimmedKabsch) when they are already available

* cache rmsdResult and rmsdState

bestTransform must not keep a reference to result.bTransform because its value would change each time kabsch function is run.

* swap shortest structure to B

All transforms are made against the coordinates for structureB when yt is computed.

* reafactor: generalize usage of incremental sequence

Previous implementation was relying on tmpAlignA to hold the indices. It was conflictin in `tryGaplessThreading` with the call to `extendFromSeed`.
A distinct buffer has been created.

* refactor: preallocate dp arrays in constructor, uniform usage of typed arrays

* wrap tm-align in a task + useOverlay

* Skip fragment based strategy if similarity is good

Fragment based alignment takes up most of the computation time due to the O(n3) complexity of aligning fragments of different length. When the alignment is already good, this procedure does not yield improved results (observed also by the original authors).

The threshold for "similar structure" is set to a TM-score of 0.5 according to litterature.
Because it's possible to align 2 structures of very different length, and because the TM-score is normalized using the sequence length, it's important to change the reference for computation from a random choice (sequence A), to the minimal sequence length. This is consistent with the equations from the original TM-align publication (Lmin is used in scoring).

Note that the code already ensures that the shortest sequence is B (less iterations), but this commit makes the min sequence length explicit.
2026-02-08 14:49:14 +01:00
Alexander Rose
42dc579ddb changelog 2026-02-07 15:21:06 -08:00
Alexander Rose
890c758585 Geometry export
- Fix vertex-based coloring for non-mesh geometries
- Support line-strips
2026-02-07 15:20:58 -08:00
Alexander Rose
e6c77069df add frenet-frames helper 2026-02-07 15:20:14 -08:00
Alexander Rose
e7ecf98f13 add line-strips to lines geo 2026-02-07 15:19:25 -08:00
Alexander Rose
70ad32f62d Merge pull request #1769 from molstar/split-vol-visual
split volume visual code
2026-02-07 13:52:28 -08:00
Alexander Rose
69fe452055 split volume visual code 2026-02-07 10:43:12 -08:00
Alexander Rose
9edeb84f4e default to linear 2026-02-01 22:54:14 -08:00
Alexander Rose
e1db3114c8 Fix missing usePalette support in MeshExporter 2026-02-01 22:50:50 -08:00
Alexander Rose
8724badcb6 fix volume valueRef getData to select roots 2026-02-01 22:03:28 -08:00
Alexander Rose
d413f74526 Merge pull request #1764 from molstar/pqr-support
PQR support
2026-02-01 21:59:45 -08:00
Alexander Rose
6752108c5f changelog 2026-02-01 21:55:21 -08:00
Alexander Rose
9302fdadb9 undo adding pqr to mvs 2026-02-01 21:22:44 -08:00
Alexander Rose
f7048c7535 Merge branch 'master' of https://github.com/molstar/molstar into pqr-support 2026-02-01 21:20:57 -08:00
Alexander Rose
3252a3f0f3 Merge pull request #1765 from molstar/custom-volume-property 2026-02-01 12:48:28 -08:00
Alexander Rose
6805194d48 file headers 2026-01-31 17:33:52 -08:00
Alexander Rose
acf0dceb47 add CustomVolumeProperty 2026-01-31 17:30:43 -08:00
Alexander Rose
c53f500da6 add pqr support 2026-01-31 17:15:17 -08:00
midlik
defc04278e MVSData.toMVSX (#1763) 2026-01-29 16:51:54 +01:00
Alexander Rose
aa4d5e78a7 Merge pull request #1757 from giagitom/improve-outlines
disable transparent outline when near to solid mesh
2026-01-26 20:05:29 -08:00
Alexander Rose
df3a432afd Merge branch 'master' into improve-outlines 2026-01-25 22:38:19 -08:00
Alexander Rose
1b339d18cc Merge pull request #1762 from molstar/trackball-animation-axis
add axis param to trackball spin & rock animation
2026-01-25 22:37:24 -08:00
Alexander Rose
c4650c91a8 Merge branch 'master' into trackball-animation-axis 2026-01-25 22:37:15 -08:00
Alexander Rose
e3c4f19563 Merge pull request #1761 from molstar/fix-color-smoothing 2026-01-25 22:26:35 -08:00
Alexander Rose
85780a5d6a add axis param to trackball spin & rock animation 2026-01-24 12:11:50 -08:00
Alexander Rose
aab70e2ff0 Color smoothing fixes (#1747)
- use correct instance for non instance-type
- never transform for non instance-type
- add extra radius to gaussian surface boundingsphere
2026-01-24 12:09:04 -08:00
dsehnal
e859f497f1 5.6.1 2026-01-23 15:42:44 +01:00
dsehnal
6a9fed56f3 changelog 2026-01-23 15:40:54 +01:00
dsehnal
d7c2505852 npm audit 2026-01-23 15:40:31 +01:00
midlik
754dfeab91 Fix MVSAnnotationStructureComponent not updating properly (#1759)
* Fix `MVSAnnotationStructureComponent` not updating properly when parent structure changes

* lint

* fix build
2026-01-23 13:55:41 +01:00
Alexander Rose
d3b02df5b9 Disable occlusion culling in ImagePass (#1758) 2026-01-20 06:53:26 -08:00
giagitom
3d95ed729c disable transparent outline when near to solid mesh 2026-01-19 19:59:07 +01:00
Alexander Rose
9cbb4414e0 5.6.0 2026-01-18 12:11:39 -08:00
Alexander Rose
79fcfe50bc changelog 2026-01-18 11:44:42 -08:00
Alexander Rose
216d16456b package updates 2026-01-18 11:43:06 -08:00
Alexander Rose
822aaa99b0 Merge pull request #1755 from molstar/seqres-entity-lipids
Improve SEQRES use and more lipid names
2026-01-18 10:53:07 -08:00
Alexander Rose
2c683ab77d Merge pull request #1754 from molstar/fix-bounding-sphere-reuse
fix boundingSphere reuse in structure visuals
2026-01-18 10:52:44 -08:00
Alexander Rose
2ef5af6881 Merge pull request #1753 from molstar/remove-fence-canvas3d
remove fence from Canvas3D.render
2026-01-18 10:47:29 -08:00
Alexander Rose
36f18be042 add lipid components names used in amber ff 2026-01-17 18:34:32 -08:00
Alexander Rose
f093a3ab37 use PDB seqres record to deduce entity information 2026-01-17 18:31:43 -08:00
Alexander Rose
74cd42117b fix boundingSphere reuse in structure visuals
- was triggering extra calculation
- add hasBoundingSphere method to geometries
2026-01-17 17:34:53 -08:00
Alexander Rose
bb4a4e6102 remove fence from Canvas3D.render
- causes issues when the CPU is busy
- interfers with `requestAnimationFrame`
2026-01-17 17:08:13 -08:00
Alexander Rose
24a3167f9b Merge branch 'master' of https://github.com/molstar/molstar 2026-01-17 16:55:07 -08:00
Alexander Rose
214e1c20ca ignore missing plugin-state-animation 2026-01-17 16:55:02 -08:00
Alexander Rose
33cab6ddad Merge pull request #1752 from sbittrich/los
Non-covalent interactions: Prevent self-occlusion on quaternary amines
2026-01-17 16:48:55 -08:00
Alexander Rose
f4b2826bc7 Merge branch 'master' into los 2026-01-17 16:45:34 -08:00
Alexander Rose
ebaa9f2e56 use eachIntraBondedAtom (@sbittrich) 2026-01-17 16:44:36 -08:00
Alexander Rose
812b75a034 Merge pull request #1750 from sbittrich/master
Fix outline postprocessing artifacts
2026-01-17 16:34:20 -08:00
Alexander Rose
3b02a5f5ec Merge pull request #1742 from giagitom/add-wireframe-structure-visuals
Add structure wireframe visuals on molecular and gaussian surfaces
2026-01-17 13:13:12 -08:00
Alexander Rose
657d2eb1c5 Merge branch 'master' into add-wireframe-structure-visuals 2026-01-17 13:10:01 -08:00
Alexander Rose
25d87dd14d params tweaks 2026-01-17 13:09:24 -08:00
Sebastian
d2605e6e3d Merge remote-tracking branch 'upstream/master' into los
# Conflicts:
#	CHANGELOG.md
2026-01-16 14:52:47 +01:00
Sebastian
b21ebe0f55 Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	CHANGELOG.md
2026-01-16 14:51:56 +01:00
Sebastian Bittrich
2693fe8b7e actually cache __srcIndexArray__ (#1751)
Co-authored-by: Sebastian <bittrich@pharmai-discovery.com>
2026-01-16 13:15:08 +01:00
Sebastian
45279a6520 nci: prevent self-occlusion on quat amines 2026-01-16 11:36:30 +01:00
Sebastian
22f9b1a7a1 fix outline postprocessing artifacts (closes #1749) 2026-01-16 09:15:04 +01:00
zachcp
8325a58e25 20261110 hex fix clean (#1746) 2026-01-12 08:14:14 +01:00
midlik
0acc508a8f MVS text_format and group_by_fields (#1744)
* MVS: text_format

* MVS: group_by_fields params for label_from_*

* refactor

* Update CHANGELOG

* Refactor fstrings (FormatTemplate)

* Move fstrings (FormatTemplate) to src/mol-util/formatting.ts

* FormatTemplate: fix parsing of fillChar ':'

* file rename
2026-01-10 12:50:37 +01:00
giagitom
2af0cd9d6f Add structure wireframe visuals on molecular and gaussian surfaces 2026-01-04 12:57:27 +01:00
Alexander Rose
304858fcba Merge pull request #1741 from giagitom/improve-ssao-boundaries
Improve ssao boundaries
2026-01-03 09:24:07 -08:00
giagitom
ade027911c improve occlusion evaluation at boundaries 2026-01-03 17:13:33 +01:00
David Sehnal
a97e647f7a Fix to_mmCIF writing duplicate categories under certain conditions (#1739) 2026-01-03 09:59:47 +01:00
Alexander Rose
008bed0233 fix transparent ssao handling 2026-01-02 17:33:07 -08:00
Alexander Rose
bb4c04f3b9 fix ssao darkening
- instead of clamping offscreening pixels, skip samples
2026-01-02 09:48:40 -08:00
Alexander Rose
62997e5972 Merge pull request #1737 from molstar/pcg
stable random numbers (PCG)
2025-12-31 12:16:54 -08:00
Alexander Rose
a20e7bb40d Fix SSAO darkening when sampling background/offscreen pixels 2025-12-31 12:14:35 -08:00
Alexander Rose
2acfac4c85 changelog 2025-12-31 11:35:04 -08:00
Alexander Rose
a1a9d87a54 fix missing scaling 2025-12-30 23:11:53 -08:00
Alexander Rose
1ab71cc487 calculate random hemisphere vectors on demand 2025-12-30 22:39:48 -08:00
Alexander Rose
a8b19f5f3c use blue noise for ssao sample vectors
- properly sample on sphere (not in box)
2025-12-30 21:41:09 -08:00
David Sehnal
4661a4a5f0 Only show "already registered transformer" warnings in non-production builds (#1732) 2025-12-30 16:00:19 +01:00
David Sehnal
2c40abc808 Fix label_seq_id assignment in PDB parser (#1731)
* Fix `label_seq_id` assignment in PDB parser when insertion codes are present

* tweak

* changelog

* typo

* SEQRES detection in PDB parser
2025-12-30 15:59:40 +01:00
Alexander Rose
10d7bcf4c0 stable random numbers (PCG)
- ME grayscale colors
- dot offset
- SSAO hemisphere vectors
2025-12-29 20:08:10 -08:00
Alexander Rose
5f8e4e6913 Merge pull request #1735 from molstar/volsurf-12-25
volume & surface improvements
2025-12-28 21:10:32 -08:00
Alexander Rose
94fa9f124a pr feedback optim 2025-12-28 21:02:31 -08:00
David Sehnal
3e70251f38 Viewer QoL (#1734)
* Viewer QoL

* docs
2025-12-28 19:26:33 +01:00
Alexander Rose
66ed6cfa94 type fix 2025-12-27 14:39:49 -08:00
Alexander Rose
d82b6e8d0d changelog 2025-12-27 14:33:30 -08:00
Alexander Rose
5a5f6867b9 support volume floodfill before surface extraction
- for isosurface, molecular-surface, gaussian-surface
2025-12-27 14:29:05 -08:00
Alexander Rose
5cd5fc09f5 support includeParent for gaussian-surface
- disables GPU support
2025-12-27 14:15:28 -08:00
Alexander Rose
17528d5ca2 tweak gaussian-density smothness default range 2025-12-27 14:10:07 -08:00
midlik
e658a11947 MVS misc fixes (#1733)
* MVS - fix carbohydrate sizing

* MVS: color_from_uri and color_from_source take selector parameter

* MVS: Add `keepCameraOrientation` option for loading functions

* MVS: Remove dead code

* MVS: minor refactor (SelectorT)

* PR1733 feedback
2025-12-24 14:41:49 +01:00
dsehnal
4ac6f5c202 5.5.0 2025-12-22 12:50:36 +01:00
dsehnal
5726515707 changelog 2025-12-22 12:48:58 +01:00
Alexander Rose
f2ee7d1470 fix unit hash collision (#1729)
* fix unit hash collision

* cleanup

* name tweak
2025-12-22 09:53:29 +01:00
Alexander Rose
4140412e06 schema updates 2025-12-21 16:16:02 -08:00
Alexander Rose
44ed142521 package updates 2025-12-21 16:11:31 -08:00
Alexander Rose
1ae0bbc150 Merge pull request #1727 from molstar/geo-interior-coloring
per-geometry interior coloring
2025-12-21 16:03:43 -08:00
Alexander Rose
8213611293 fix bumpiness for solid interior 2025-12-21 16:00:17 -08:00
Alexander Rose
2697634a9f Merge branch 'master' of https://github.com/molstar/molstar into geo-interior-coloring 2025-12-21 15:07:42 -08:00
Alexander Rose
d7ba9e0c61 typo 2025-12-21 15:07:01 -08:00
Alexander Rose
c99c4342b7 Merge pull request #1728 from molstar/improvements-251221
General Improvements
2025-12-21 15:01:29 -08:00
Alexander Rose
f410e27d1a use camelCase 2025-12-21 14:57:46 -08:00
Alexander Rose
e6d54412cf typo 2025-12-21 14:51:48 -08:00
Alexander Rose
6238684819 tweak residue-charge coloring
- add charmm/amber protonation variants
- add common modified residues from CCD
- remove unrelated links
2025-12-21 14:33:10 -08:00
dsehnal
ea07cd89de better canvas background handling 2025-12-21 16:15:56 +01:00
dsehnal
a7330f40d7 MVS getCurrentMVSSnapshot util 2025-12-21 15:38:57 +01:00
dsehnal
92c55ffe35 Tweak ResidueChargeColorTheme params 2025-12-21 12:10:29 +01:00
David Sehnal
c21ba08fc7 Viewer improvements (#1725)
* separate exxtensions file

* subscribe method on the Viewer object

* export lib

* Add viewer.structureInteraction

* MVS tryGetPrimitivesFromLoci util

* param select indicator

* tweaks

* mapped control icon

* docs and tweaks

* viewer color themes

* tweak

* typo

* pr feedback
2025-12-21 11:35:49 +01:00
Alexander Rose
ba3a716900 interior coloring
- replace global with per-geometry system
2025-12-20 16:21:49 -08:00
Alexander Rose
3133dc1543 Fix flipSided for meshes 2025-12-20 13:55:06 -08:00
dsehnal
fe2541f9e8 tweak package.json 2025-12-19 13:19:30 +01:00
ddelalamo-takeda
27af73f97f Add TM-align structure alignment algorithm (#1723)
* Delete docs/docs/plugin/superposition.md

* Add TM-align structure alignment algorithm

Implement TM-align for structure-based protein alignment, providing an
alternative to sequence-based superposition methods. TM-align finds optimal
structural alignments regardless of sequence similarity using TM-score.

New features:
- Core TM-align algorithm (src/mol-math/linear-algebra/3d/tm-align.ts)
  - TM-score calculation with length-independent normalization
  - Dynamic programming for optimal alignment
  - Gapless threading and fragment-based initialization
  - Multiple refinement passes for accuracy (~97.7% of US-align reference)

- High-level wrapper (src/mol-model/structure/structure/util/tm-align.ts)
  - tmAlign() function accepting StructureElement.Loci inputs
  - Returns transformation matrix, TM-scores, RMSD, and alignment

- BasicWrapper API (src/examples/basic-wrapper/)
  - tmAlign(pdbId1, chain1, pdbId2, chain2, color1?, color2?)
  - sequenceAlign() - sequence-based superposition
  - loadStructures() - load without alignment
  - Example HTML pages demonstrating usage

- UI integration (src/mol-plugin-ui/structure/superposition.tsx)
  - TM-align option in superposition panel

References:
Zhang Y, Skolnick J. Nucl Acids Res 33, 2302-9 (2005)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Delete src/examples/basic-wrapper/index.html

* changing reference test case

* Restoring src/examples/basic-wrapper/index.html

* Addressing comments in pull request

* Authorship added

---------

Co-authored-by: Diego del Alamo <diego.delalamo@gmail.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 13:18:11 +01:00
Lukas Polak
e9a442ca6e Add Residue Charge color scheme (#1722)
* Add charged residue color scheme

* Changelog + file header

* Address PR comments

* Remove residue-name.ts contribution info

* PR suggestion

* Changelog reference PR
2025-12-19 13:15:51 +01:00
Alexander Rose
e86e282bb4 Fix missing gl.flush for async picking 2025-12-16 21:24:23 -08:00
Alexander Rose
213506dff0 Fix program not compiled for sync picking 2025-12-16 21:23:22 -08:00
Alexander Rose
bc7aa7c9aa Fix webgl1 shader syntax 2025-12-16 21:21:58 -08:00
Alexander Rose
b234bf8890 Fix molecular-surface when probe diameter smaller then resolution 2025-12-14 10:30:21 -08:00
Alexander Rose
36b4dcf7a8 Fix molecular-surface "auto" quality params not hidden 2025-12-13 22:07:11 -08:00
Alexander Rose
0e843c20cc 5.4.2 2025-12-07 11:00:41 -08:00
Alexander Rose
ecaf19c5fb changelog 2025-12-07 10:59:26 -08:00
Alexander Rose
f024aeef2c schema updates 2025-12-07 10:58:03 -08:00
Alexander Rose
9d9985f117 package updates 2025-12-07 10:57:55 -08:00
Alexander Rose
a0f7349ef6 reduce automatic quality on standalone HMD devices 2025-12-06 10:50:00 -08:00
Alexander Rose
01407427d2 Merge pull request #1714 from giagitom/postprocessing-improvements
postprocessing improvements
2025-12-06 10:31:39 -08:00
Alexander Rose
3dee03d9b6 cleanup & changelog 2025-12-06 10:26:59 -08:00
Alexander Rose
737f6593be Merge pull request #1712 from molstar/import-tweaks
Import tweaks
2025-12-06 10:15:41 -08:00
giagitom
068e10dd40 fix whitespaces 2025-12-05 11:16:27 +01:00
giagitom
c1ba5248b0 postprocessing improvements 2025-12-04 16:06:30 +01:00
Alexander Rose
4af0f22ac0 remove dependency between mol-util and mol-io 2025-11-23 19:19:17 -08:00
Alexander Rose
25a67e1176 remove dependency between vec4 and sphere3d 2025-11-23 19:09:06 -08:00
Alexander Rose
a8fcd501d6 remove dependency between mol-util and mol-canvas3d 2025-11-23 19:05:48 -08:00
Alexander Rose
573ee92889 remove dependency between mol-util and mol-script 2025-11-23 19:04:58 -08:00
Alexander Rose
2558d6fada remove dependency between mol-math and mol-geo 2025-11-23 19:01:11 -08:00
Alexander Rose
2cf3f8d62b move DensityTextureData type out of shared module
- not reused, depends on mol-gl
2025-11-23 19:00:12 -08:00
Alexander Rose
589d89b0d5 remove import from mol-geo in mol-gl
- too many dependencies
- not usefull, mostly for documentation
2025-11-23 18:58:31 -08:00
Alexander Rose
7cc7b77460 add missing method in gl shim 2025-11-23 18:55:40 -08:00
Alexander Rose
e8a9995bef use more direct imports
- avoid importing from re-exports
- helps to create smaller files with some bundlers
2025-11-23 18:55:11 -08:00
Alexander Rose
74ff283e00 5.4.1 2025-11-16 10:18:09 -08:00
Alexander Rose
1ecb960b82 changelog 2025-11-16 10:17:14 -08:00
Alexander Rose
387d59f97b Merge branch 'master' of https://github.com/molstar/molstar 2025-11-16 10:13:12 -08:00
Alexander Rose
d993082f24 5.4.0 2025-11-16 10:12:28 -08:00
Alexander Rose
5eaa73d56d changelog 2025-11-16 10:11:07 -08:00
Alexander Rose
b9428fd3cd Merge pull request #1708 from molstar/volume-improvements
Volume improvements
2025-11-16 10:10:11 -08:00
Alexander Rose
97d180b79d use Number.isNaN 2025-11-16 10:07:45 -08:00
Alexander Rose
25bd915ea5 optimize wrapped volume 2025-11-16 10:04:10 -08:00
Alexander Rose
f8fdffdc44 Update src/mol-model-formats/volume/ccp4.ts
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2025-11-16 09:45:14 -08:00
David Sehnal
d11aa6ea77 improve guessCifVariant (#1709) 2025-11-16 17:53:16 +01:00
Alexander Rose
fc3c7997ea package updates 2025-11-15 16:54:26 -08:00
Alexander Rose
b3aecf8de4 package updates 2025-11-15 16:46:15 -08:00
Alexander Rose
f3581e62ef schema updates 2025-11-15 16:41:09 -08:00
Alexander Rose
88e7fe508f package updates 2025-11-15 16:32:09 -08:00
Alexander Rose
98049ed02d Merge branch 'master' of https://github.com/molstar/molstar into volume-improvements 2025-11-15 16:25:44 -08:00
Alexander Rose
194092ed67 Merge pull request #1707 from rxht/text-input-chinese-support
Add Chinese language support to the text input box.
2025-11-15 16:23:21 -08:00
Alexander Rose
e96157c890 changelog 2025-11-15 16:19:40 -08:00
Alexander Rose
a028c1ef42 Merge branch 'master' of https://github.com/molstar/molstar into pr/rxht/1707 2025-11-15 16:16:32 -08:00
Alexander Rose
ad2b5e687d Volume improvements
- Add `Volume.periodicity`
- Wrap isosurfaces for periodic volumes
- Fix dimensions for slices
2025-11-15 16:09:47 -08:00
Alexander Rose
8ba19f0be4 Merge pull request #1701 from midlik/bounding-spheres
Bounding spheres include element radius
2025-11-15 09:29:55 -08:00
Alexander Rose
bccc68f6df Merge branch 'master' of https://github.com/molstar/molstar into pr/midlik/1701 2025-11-15 09:06:55 -08:00
Alexander Rose
026a05d03d formating 2025-11-15 09:06:46 -08:00
Alexander Rose
2b4741c8ee Use PluginCommands to set canvas3d props in camera behavior 2025-11-15 08:52:25 -08:00
Alexander Rose
7960ee06d4 Fix default trackball animated spin speed 2025-11-15 08:50:24 -08:00
Alexander Rose
f73f5af131 Fix direct-volume not drawn in illumination mode 2025-11-15 08:48:22 -08:00
rxht
3123110aa4 Add Chinese language support to the text input box. 2025-11-14 10:56:15 +08:00
midlik
154063638d MVS: Allow canvas background interpolation (#1704) 2025-11-13 12:02:10 +01:00
midlik
a720b98365 MVS transformed primitives (#1705)
* MVS: Fix primitives in root not being transformed with reference structure

* MultilayerColorTheme only preferSmoothing when a nested theme prefers

* MVSAnnotationColorTheme do not prefer smoothing

* Update file header
2025-11-11 16:47:35 +01:00
Adam Midlik
d4a2937e0b Merge branch 'master' into bounding-spheres 2025-11-11 15:39:20 +00:00
midlik
b0ca7ffbb7 Fix all-selector color not applying on substructure (#1700)
* Fix all-selector color not applying on substructure

* Fix CHANGELOG

* Size uniform computed from the first included location
2025-11-11 10:32:01 +01:00
David Sehnal
c42b738abe MVS: Fix appendSnapshots when loading MVSX (#1702) 2025-11-11 10:31:06 +01:00
Alexander Rose
ab0d0fec53 Merge pull request #1697 from midlik/label-boundary
Fix bounding sphere computation for 3D text
2025-11-09 17:49:50 -08:00
Alexander Rose
8d96131962 changelog 2025-11-09 17:49:27 -08:00
Alexander Rose
95bbcd8b24 Merge branch 'master' of https://github.com/molstar/molstar into pr/midlik/1697 2025-11-09 17:49:06 -08:00
Alexander Rose
a21f5c2c23 Add viewport button to toggle illumination mode 2025-11-09 16:45:26 -08:00
Adam Midlik
94b7b1281c Merge branch 'master' into bounding-spheres 2025-11-07 10:19:00 +00:00
Adam Midlik
16dba586df Relax camera limits to allow focusing any selection with >1 atom 2025-11-07 10:13:39 +00:00
midlik
72b761f959 Fix ugly camera clipping in snapshot transitions (#1699)
* Fix ugly camera clipping in snapshot transitions

* Update CHANGELOG.md

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2025-11-06 16:04:20 +01:00
Adam Midlik
943d81cbf9 Fix bounding sphere computation for 3D text 2025-11-06 09:28:09 +00:00
dsehnal
2ecdc0eafa 5.3.0 2025-11-05 14:41:21 +01:00
dsehnal
dccfd35c7a changelog 2025-11-05 14:39:06 +01:00
Dominik Andrew Tichy
9e81a4f7a6 fix: validation and default params for primitives_from_uri (#1690)
* fix: primitives default param values

* chore: changelog

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2025-11-05 14:37:00 +01:00
midlik
6f6cc73ce9 MVS: tweak param type definitions to make type bundle smaller (#1692)
* MVS: tweak param type definitions to make type bundle smaller

* MVS: add docstring to all parameter definitions

* MVS: tweak param type definitions to make type bundle smaller 2 (palettes)

* add types
2025-11-05 14:21:54 +01:00
David Sehnal
c248ae11bf fix wheel scrolling edge case (#1696) 2025-11-05 13:27:14 +01:00
dsehnal
742be03901 add index file to mvs extension 2025-11-05 09:54:26 +01:00
midlik
00009ef198 MVS: coarse annotations bugfix (#1695) 2025-11-04 23:16:24 +01:00
David Sehnal
1cb617524d MVS: Fix coarse structure selection (#1694) 2025-11-04 23:07:47 +01:00
David Sehnal
e2e348240b MVS: topology format support (#1691)
* MVS: topology format support

* bugfix

* mvs: additional coordinate formats

* fix
2025-11-04 22:16:49 +01:00
Alexander Rose
b54908492c Add Canvas3D.setAttribs 2025-11-03 23:52:26 -08:00
dsehnal
33172862bd mvs stories loading message 2025-11-02 14:07:52 +01:00
dsehnal
c5f2767efc 5.2.0 2025-10-31 17:26:52 +01:00
dsehnal
66f5a81a5d changelog 2025-10-31 17:25:24 +01:00
David Sehnal
9e90e11bfc MVS Improvements (#1684)
* MVS primitives clipping

* camera near distance
2025-10-31 16:43:59 +01:00
midlik
ab372a89d6 MVS: fix persisting tooltips and other fixes (#1688)
* MVS: Fix tooltips persisting across snapshots

* MVS: Fix CIF annotations with no selector columns being ignored

* Vec3.orthogonalize handle special cases (fixes trackpad lock in MVS)

* Update CHANGELOG
2025-10-31 14:35:56 +01:00
Adam Midlik
ea612c3acb Unit and loci bounding sphere includes VDW or coarse sphere radius 2025-10-31 12:50:51 +00:00
Adam Midlik
a1308645e5 Vec3.orthogonalize handle special cases (fixes trackpad lock in MVS) 2025-10-29 14:04:18 +00:00
David Sehnal
c6506d515f Fix CIF Parser edge case (#1687)
* Fix CIF Parser edge case

* header
2025-10-28 15:02:35 +01:00
Adam Midlik
794b705184 MVS: Fix CIF annotations with no selector columns being ignored 2025-10-28 11:56:40 +00:00
Adam Midlik
66264abe50 MVS: Fix tooltips persisting across snapshots 2025-10-28 11:25:29 +00:00
Alexander Rose
7d0f84ff72 Merge pull request #1679 from giagitom/fix-screenshot-helper-change-transparency
Handle transparency mode updates on ImagePass
2025-10-25 14:24:13 -07:00
Alexander Rose
31495ab02a simplify 2025-10-25 14:20:30 -07:00
Alexander Rose
853ad5c916 pass transparency via scene 2025-10-25 14:15:40 -07:00
Alexander Rose
51fc525215 Merge https://github.com/molstar/molstar into pr/giagitom/1679 2025-10-25 13:53:34 -07:00
dsehnal
92d1c446d4 5.1.2 2025-10-25 15:04:28 +02:00
dsehnal
f2a0ff448b mvs custom coloring fix 2025-10-25 15:03:16 +02:00
dsehnal
0ec096a980 5.1.1 2025-10-25 14:30:39 +02:00
dsehnal
44a5b83c1c fix State reconciliation with resolved refs 2025-10-25 14:29:20 +02:00
dsehnal
46c5184d40 5.1.0 2025-10-25 12:35:20 +02:00
dsehnal
7c46306929 5.1 changelog 2025-10-25 12:34:05 +02:00
Gianluca Tomasello
d7fe32d000 Fix createColorScaleByType when offsets are available (#1668)
* Fix createColorScaleByType when offsets are available

* lint-fix

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2025-10-25 12:31:39 +02:00
David Sehnal
d7beb288c3 Fullscreen mode improvements (#1683)
* Fullscreen mode improvements

* iterate on functionality

* fix imports
2025-10-25 12:29:37 +02:00
Lukas Polak
fb5da1b4d0 ExpandToFullscreen option in PluginConfig (#1666)
* Add PluginConfig.General.ExpandToFullscreen

* Simplify layout.ts

* Update CHANGELOG
2025-10-25 10:25:14 +02:00
David Sehnal
d89e254555 Custom ref resolvers in State (#1682) 2025-10-25 10:12:17 +02:00
midlik
99e11317e1 MVS: residue_index selector (#1681)
* MVS builder - add sphere and angle

* MVS: Annotations for coarse models

* MVS: Rename AtomRanges -> ElementRanges

* MVS: refactor

* MVS: Labels for coarse structures

* fix tests

* MVS: refactor IndicesAndSortings

* MVS: refactor IndicesAndSortings 2

* MVS: builder method primitives_from_uri -> primitivesFromUri

* Update CHANGELOG

* Add AtomicHierarchy.residueSourceIndex

* MVS: implement residue_index selector for annotations

* MVS: residue_index for inline selectors
2025-10-25 10:10:06 +02:00
David Sehnal
3dc6c4452d [wip] carb constants updates (#1680)
* [wip] carb constants updates

* GlycamSaccharideNames
2025-10-24 19:29:56 +02:00
midlik
3a627a878b MVS - annotations for coarse structures, tidy up builder (#1672)
* MVS builder - add sphere and angle

* MVS: Annotations for coarse models

* MVS: Rename AtomRanges -> ElementRanges

* MVS: refactor

* MVS: Labels for coarse structures

* fix tests

* MVS: refactor IndicesAndSortings

* MVS: refactor IndicesAndSortings 2

* MVS: builder method primitives_from_uri -> primitivesFromUri

* Update CHANGELOG
2025-10-24 15:47:14 +02:00
giagitom
6f9fed180d update headers 2025-10-21 21:56:37 +02:00
giagitom
5ecd176f20 Handle transparency mode updates on ImagePass 2025-10-21 21:50:42 +02:00
David Sehnal
dff3837df6 MVS tweaks (#1678) 2025-10-21 12:15:43 +02:00
Alexander Rose
e42eb31b73 Merge pull request #1675 from molstar/ar-magic-window
Support "magic window" style AR
2025-10-19 16:34:48 -07:00
Alexander Rose
721c117309 handle viewport size 2025-10-19 16:32:06 -07:00
Alexander Rose
216715b2d5 Support "magic window" style AR 2025-10-18 15:33:11 -07:00
Alexander Rose
412d4d5bcd fix clip objects for deirect-volume rendering 2025-10-18 15:27:53 -07:00
falko-apheris
2734d5754a Update example to use mol* v5 (#1673)
Rename initViewer to initViewerAsync in documentation
2025-10-16 19:14:12 +02:00
Alexander Rose
c10f9d8c78 Merge pull request #1667 from giagitom/fix-flipped-normals
fix for flipped surface normal issue
2025-10-11 16:31:45 -07:00
Alexander Rose
7140135cbe changelog 2025-10-11 16:31:05 -07:00
Alexander Rose
b5969945b4 Merge branch 'master' of https://github.com/molstar/molstar into pr/giagitom/1667 2025-10-11 16:30:22 -07:00
Alexander Rose
7f5b3bc16c remove extra variable 2025-10-11 16:28:30 -07:00
Alexander Rose
5cf7b6624b Merge pull request #1669 from papillot/pdb-conect-to-bond-order
Get bonds orders from CONECT records
2025-10-11 16:20:24 -07:00
Alexander Rose
56225b337d header 2025-10-11 16:19:51 -07:00
Paul Pillot
79b6ad6f48 Get bonds orders from CONECT records 2025-10-09 22:09:57 -04:00
giagitom
d0df53dd02 fix for flipped normal issue 2025-10-03 19:36:05 +02:00
Alexander Rose
3b97bfd9b6 5.0.0 2025-09-28 10:41:25 -07:00
Alexander Rose
9b12623131 changelog 2025-09-28 10:39:51 -07:00
Alexander Rose
425370d63e package updates 2025-09-28 10:36:37 -07:00
Alexander Rose
1666c89222 doc tweak 2025-09-28 10:30:28 -07:00
Alexander Rose
a7dd4fc555 change viewer.show-xr to allow 'auto' | 'always' | 'never' 2025-09-28 10:25:48 -07:00
Alexander Rose
9f1760fbf2 pointer: end gesture only if all button are released 2025-09-28 09:54:10 -07:00
Alexander Rose
d7fb040b77 fix shader-manager update 2025-09-21 15:40:27 -07:00
Alexander Rose
2d7c1bcea2 Merge pull request #1665 from molstar/global-defines
global defines
2025-09-21 15:27:22 -07:00
Alexander Rose
a08c434f35 add missing schema 2025-09-21 09:34:42 -07:00
Alexander Rose
45d402bb9f global defines 2025-09-20 21:08:46 -07:00
Alexander Rose
4556544043 package updates 2025-09-20 14:55:58 -07:00
Alexander Rose
921d700761 remove unused dep 2025-09-20 14:52:11 -07:00
Alexander Rose
9605783f41 defer readPixels call in texture-mesh position-iterator 2025-09-20 14:51:23 -07:00
Alexander Rose
f23329dc68 improve resource byte count logging 2025-09-20 14:48:50 -07:00
Alexander Rose
5f4ac6b2c0 remove unused properties 2025-09-20 14:36:39 -07:00
David Sehnal
f0c2961e95 use esbuild jest transformer (#1662) 2025-09-16 20:28:34 +02:00
David Sehnal
2bdaa565b4 Fix screenshot animation loop handling (#1660) 2025-09-16 20:09:33 +02:00
Jose Manuel Duarte
ab2bcde794 Add robots.txt to ModelServer (#1659) 2025-09-16 08:05:30 +02:00
Alexander Rose
0b9674e14c Merge pull request #1655 from molstar/parallel-shader-compile
Adaptive parallel shader compilation
2025-09-15 21:32:52 -07:00
Alexander Rose
07cbeb524e Merge pull request #1653 from giagitom/fix-illum-denoise
Fix illumination denoising with transparency on transparent background
2025-09-15 21:31:31 -07:00
Alexander Rose
8ff75ea2ab Merge branch 'master' into fix-illum-denoise 2025-09-15 21:31:10 -07:00
Alexander Rose
6f5db94b2f add shader-manager
- ensure required shaders for image pass
- take scene content into account
2025-09-15 21:30:12 -07:00
dsehnal
2637957141 pass isSynchronous to finalizePrograms 2025-09-15 08:59:49 +02:00
Alexander Rose
c1bb6f3987 changelog 2025-09-14 21:50:47 -07:00
Alexander Rose
d8df904951 Merge branch 'master' of https://github.com/molstar/molstar into parallel-shader-compile 2025-09-14 21:43:07 -07:00
Alexander Rose
a7ca7c922d adaptive parallel shader compile
- split shader compilation into linking and finalizing
- avoid compiling un-needed shaders
2025-09-14 21:38:27 -07:00
Alexander Rose
f257992a5a Revert "add "ready" commit queue"
This reverts commit bdd1805620.
2025-09-14 21:23:52 -07:00
김주호
62f9f6077d Update to_mmCIF function to accept multiple structures (#1658)
* update to_mmCIF function to accept multiple structures

* update changelog and code header
2025-09-12 09:51:11 +02:00
midlik
e4edb67f62 export class Layout extends PluginUIComponent (#1657) 2025-09-10 14:05:50 +02:00
dsehnal
185ccf5ca6 tweak story title 2025-09-09 11:34:09 +02:00
dsehnal
bdd1805620 add "ready" commit queue 2025-09-09 11:01:13 +02:00
Alexander Rose
29f2722851 wip 2025-09-09 00:07:07 -07:00
giagitom
b38f8b08da Fix illumination denoising with transparency on transparent background 2025-09-08 13:23:34 +02:00
Alexander Rose
6d02889f84 type fixes 2025-09-07 22:25:32 -07:00
Alexander Rose
b864634f1d spec fixes 2025-09-07 19:36:33 -07:00
Alexander Rose
248662b95c update workflow 2025-09-07 19:31:43 -07:00
Alexander Rose
0eb28bd89e schema updates 2025-09-07 18:41:12 -07:00
Alexander Rose
e466bf9ba9 package updates 2025-09-07 18:38:29 -07:00
Alexander Rose
a14c4faefd Merge pull request #1639 from giagitom/fix-transparency-check
Outlines improvements
2025-09-07 16:56:54 -07:00
Alexander Rose
b87a7f069e Merge branch 'master' into fix-transparency-check 2025-09-07 16:56:45 -07:00
Alexander Rose
674a56e2f3 Merge pull request #1590 from molstar/webxr
WebXR
2025-09-07 16:55:56 -07:00
Alexander Rose
521d8cb4f8 Merge branch 'master' of https://github.com/molstar/molstar into webxr 2025-09-07 16:53:14 -07:00
Alexander Rose
bd1d85e927 Merge pull request #1651 from molstar/picking-too-many-groups
improve picking of objects with many groups
2025-09-07 16:49:02 -07:00
Alexander Rose
4d62b928f8 improve picking of objects with many groups
- if to many groups (currently >=2^24-2) pick whole instance/object
2025-09-06 14:05:22 -07:00
Jose Manuel Duarte
014c9607d9 Use new validation/view endpoint at files.rcsb.org (#1649)
* Use new validation/view endpoint at files.rcsb.org

* Update changelog
2025-09-06 11:56:03 +02:00
midlik
98ef24fc9e Sequence color 2 (#1644)
* Sequence color extension - allow props to be provided

* typing fix
2025-09-04 19:49:20 +02:00
dsehnal
c04580377b 5.0.0-dev.13 2025-09-03 09:20:26 +02:00
David Sehnal
a492b38368 fix mutative use & assign NODE_ENV=production for prd builds (#1642)
* fix mutative use & assign NODE_ENV=production for prd builds

* fix type
2025-09-03 09:07:23 +02:00
midlik
518f21531e SequenceColor extension (#1611)
* MinimizeRmsd.Result include nAlignedElements

* SequenceColor extension

* SequenceColor extension - forceUpdate when custom prop changes

* SequenceColor extension - proper caching

* Update CHANGELOG

* SequenceColor extension - registry

* SequenceColor extension - refactor

* SequenceColor extension - minor changes

* SequenceColor extension - switch to experimentalSequenceColorTheme

* SequenceColor extension - ensureCustomProperties

* SequenceColor extension - clean

* SequenceColor extension - avoid repeated allocation for Location

* SequenceColor extension - memoizeLatest, but wrong

* SequenceColor extension - memoizeLatest fixed

* SequenceColor extension - remove unnecessary loci caching

* SequenceColor extension - clean up
2025-09-03 07:29:40 +02:00
David Sehnal
36fd40ee09 VolumeServer: Default to P1 spacegroup (#1640)
* CCP4 parser defaultToP1 option

* volume server: default to P1

* tweaks

* tweak
2025-09-02 17:47:58 +02:00
giagitom
6b8c604762 improvements 2025-09-02 17:28:16 +02:00
giagitom
c10382d1fb Handle illumination 2025-09-02 15:23:50 +02:00
Alexander Rose
0e968ae59c Fix ColorScale for continuous case without offsets 2025-09-01 16:09:12 -07:00
giagitom
1286a9e560 Fix tests 2025-09-01 22:10:49 +02:00
giagitom
bf73712781 Add packing/unpacking functions 2025-09-01 22:03:36 +02:00
giagitom
53922db113 Outlines improvements 2025-09-01 17:56:03 +02:00
giagitom
799037d657 Merge branch 'master' of https://github.com/molstar/molstar into fix-transparency-check 2025-09-01 17:52:15 +02:00
Alexander Rose
5cb7a3cc8e pixel-based size of pointer helper points 2025-08-31 18:33:46 -07:00
Alexander Rose
c14cbb258d fix size calculation and update of text geometry 2025-08-31 18:33:07 -07:00
Alexander Rose
8a860497f1 support ray-picking of text geometry
- uses extra eye camera in text shader
2025-08-31 18:32:38 -07:00
Alexander Rose
77d4d0007c Merge branch 'master' of https://github.com/molstar/molstar into webxr 2025-08-31 17:45:45 -07:00
dsehnal
005824eb24 5.0.0-dev.12 2025-08-31 10:08:11 +02:00
dsehnal
259e04a6ce move mvs validation to a separate file 2025-08-31 10:06:20 +02:00
dsehnal
966bc14c67 5.0.0-dev.11 2025-08-31 09:51:54 +02:00
David Sehnal
f752b7e155 MVS: Color map interpolation & canvas backgrounds (#1636)
* MVS: Color map interpolation

* print validation errors to plugin log

* fixes

* background postprocessing

* fix resetCanvasProps

* fix link

* add example
2025-08-31 09:36:50 +02:00
Gianluca Tomasello
255b8b9ac3 Fix renderer transparency check (#1635)
* Fix renderer transparency check

* Fading transparent outlines

* improvements
2025-08-29 17:59:26 +02:00
giagitom
15c4fb3c01 improvements 2025-08-29 15:01:31 +02:00
giagitom
9fba0c08b2 Fading transparent outlines 2025-08-28 21:26:06 +02:00
giagitom
f08dd0255d Fix renderer transparency check 2025-08-28 11:44:05 +02:00
Victoria Doshchenko
42d969bbeb MVS: example story improvements (#1632)
* add intro scene

* fixes

* add author name
2025-08-26 18:55:34 +02:00
dsehnal
fdc33e44dc 5.0.0-dev.10 2025-08-26 17:43:06 +02:00
David Sehnal
b0aa889a0a MVS: Animation improvements (#1631)
* allow interpolation "keyframing"

* animation fixes
2025-08-26 17:41:21 +02:00
David Sehnal
4d7bd53231 Additional markdown commands (#1630) 2025-08-26 06:58:40 +02:00
David Sehnal
c11cf665c9 Additional markdown extensions (#1629)
* additional markdown extensions

* fixes
2025-08-25 20:12:10 +02:00
dsehnal
a4b09d3a0c 5.0.0-dev.9 2025-08-25 17:00:54 +02:00
David Sehnal
6e488b0f80 MotM1 Story tweaks (#1627)
* tweak story

* bugfixes & tweaks

* linting

* support "discrete" scalar transform

* tweak audio path

* tweak ui
2025-08-25 08:22:36 +02:00
Alexander Rose
2cef723483 naming fix 2025-08-24 22:46:41 -07:00
ludovic autin
6164281a50 initial work on MOM number 1 with audio comments (#1624)
* initial work on MOM number 1 with audio comments

* add some TODO comments

* separate audio as mp3. Do coloring with DG scheme

* move audio in root example folder. test some query in mol-script

* salt bridge.

* better coloring

* support for entry-id test in MolScriptBuilder.

* lint

* update audio, sync animation

* cleanup

* clean up and sync audio/anim

* add reference to MOM1
2025-08-25 07:14:46 +02:00
Alexander Rose
c74a014ab7 update package.lock for ci 2025-08-24 14:54:27 -07:00
Alexander Rose
4bbf1dc8aa refactor xr input handling 2025-08-24 14:52:58 -07:00
Alexander Rose
6e53621e01 Merge branch 'master' of https://github.com/molstar/molstar into webxr 2025-08-24 13:42:49 -07:00
Alexander Rose
2db7171e2a Merge pull request #1625 from molstar/trackball-state-tweaks
Trackball & Snapshot handling tweaks
2025-08-24 13:42:24 -07:00
Alexander Rose
edfc094952 re-add the !isBusy check
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2025-08-24 13:35:37 -07:00
David Sehnal
b3e1e2900b Fix Markdown Commands query focus (#1626) 2025-08-24 13:18:36 +02:00
Alexander Rose
ba2bc206cc Merge branch 'master' of https://github.com/molstar/molstar into webxr 2025-08-23 14:59:17 -07:00
Alexander Rose
1e498d535a add SnapshotControls behavior 2025-08-23 10:44:50 -07:00
Alexander Rose
6ed969cd1b don't save behaviors in me snapshots 2025-08-23 10:42:05 -07:00
Alexander Rose
27bb4f4bca remove unused trackball param 2025-08-23 10:41:21 -07:00
Alexander Rose
6ce2139272 add canvas3d/trackball attribs
- attribs are configurable but are not saved in the state like props
2025-08-23 10:41:04 -07:00
Alexander Rose
856eff5127 ensure xr props are set each frame, make passthrough default 2025-08-23 10:19:50 -07:00
dsehnal
13cf6613a6 fix typo 2025-08-23 19:18:21 +02:00
Alexander Rose
52b141c4fa fix pointer-helper camera 2025-08-23 10:15:39 -07:00
Alexander Rose
701844ca7c remove unused uniform 2025-08-23 10:14:49 -07:00
Alexander Rose
bcc572bd18 move scale, minTargetDistance, forceFull to camera properties 2025-08-23 10:14:29 -07:00
David Sehnal
c5bb13e295 Execute markdown commands on snapshot load (#1622) 2025-08-22 18:25:24 +02:00
dsehnal
34c8257848 5.0.0-dev.8 2025-08-22 16:05:31 +02:00
David Sehnal
fcbf39c935 Markdown & MVS: Audio support (#1621)
* audio playback markdown commands

* trigger markdown commands from MVS primitives

* docs

* fix usage of mutative
2025-08-22 16:00:30 +02:00
dsehnal
46c8150b2b 5.0.0-dev.7 2025-08-21 14:05:04 +02:00
David Sehnal
af1a864daa replace immer with mutative, optimize MVS animation loading (#1618) 2025-08-21 14:03:22 +02:00
David Sehnal
3babd9399a MVS: Add backbone and line representation types (#1617) 2025-08-20 17:33:03 +02:00
David Sehnal
e57564486f mol-state: fix param normalization (#1616)
* mol-state: fix param normalization

* headers
2025-08-19 19:33:01 +02:00
midlik
464a91ac29 Add PluginConfig.Viewport.ShowReset (#1615)
* Add PluginConfig.Viewport.ShowReset

* Update CHANGELOG
2025-08-18 12:02:31 +02:00
Alexander Rose
4b58ce94ee Merge branch 'master' of https://github.com/molstar/molstar into webxr 2025-08-17 23:43:19 -07:00
Alexander Rose
16b0374eac tweak trackball forward/backward movement behavior 2025-08-16 16:10:54 -07:00
Alexander Rose
67e63dccb4 improve/fix sphere rendering for asymmetric projections 2025-08-16 14:42:03 -07:00
Alexander Rose
2cc600cc52 add xr.sceneRadiusInMeters param
- tweak mesoscale explorer xr defaults
2025-08-16 14:40:43 -07:00
Alexander Rose
27fa50a5de Merge pull request #1610 from giagitom/dpoit-monolayer-transparency
Add Monolayer transparency (exploiting dpoit)
2025-08-16 14:37:34 -07:00
David Sehnal
1e323f18f7 MVS: additional formats and trajectory support (#1613)
* MVS: additional formats and trajectory support

* refactoring

* support lammpstrj

* tweaks

* remove test code
2025-08-15 20:10:13 +02:00
midlik
2685b2b77d MVSX use Murmur hash (#1612) 2025-08-15 14:11:53 +02:00
David Sehnal
d71b47a515 MVS Stories and related updates (#1609)
* mvs-stories updates, better snapshot playback if transition is present

* Add createMVSX

* mvs: support trackball animation

* tweak

* more fine grained speed of camera spin animation

* update TrackballControlsParams.animate.spin.speed

* story-session-url arg support
2025-08-15 13:27:34 +02:00
giagitom
88cc720dd2 fix render without postprocessing 2025-08-14 23:34:45 +02:00
giagitom
201433cc91 Lint fix 2025-08-14 19:53:36 +02:00
giagitom
8582303491 Add Monolayer transparency (exploiting dpoit) 2025-08-14 19:40:24 +02:00
dsehnal
655c3edadd 5.0.0-dev.6 2025-08-14 11:37:40 +02:00
David Sehnal
a4323a4bd8 MVS animation improvements (#1608) 2025-08-14 11:33:50 +02:00
dsehnal
1b5a7d9546 5.0.0-dev.5 2025-08-13 18:44:02 +02:00
David Sehnal
f165cc4629 MVS: Animations (#1606)
* object hash

* hashed StateTransform.version

* StateTree.reuseTransformParams

* State animation data model

* mvs animation tree schema and builder

* generate animation

* snapshot animation ui

* async animation generation

* ui tweak

* ui tweak

* wrap loadMVS in task

* state snapshots animation

* snapshot transition animation

* autoplay transition

* vector and rotation matrix interpolation

* local rotation transform

* fixes and better demo

* unused import

* tweak

* changelog

* headers

* type => kind

* mat4 interpolation

* use proper time in animation loop

* animated label opacity

* typo

* add postprocessing to demo

* fix mvs postprocessing params

* add transform_matrix interpolation

* tweak

* generalize vector interpolation

* Color.interpolateHcl

* resetCanvasProps

* rename from/to to start/end

* transform def

* add frequency param

* update interpolations

* cache rotation, do not apply noise to last frame

* local_rotation => rotation_center

* changelog

* fix build

* add animation.duration_ms

* PR feedback

* add hsl color space

* default canvas bg

* scalar list interpolation

* color interpolation props
2025-08-13 18:41:56 +02:00
Alexander Rose
cb499ce42e Merge pull request #1607 from corredD/webxr
fix shadow
2025-08-12 22:51:28 -07:00
Alexander Rose
db247d6fbd remove mat4 allocation 2025-08-12 22:49:14 -07:00
Alexander Rose
23701bf8e8 always consider bounds 2025-08-12 22:47:56 -07:00
ludovic autin
2e1f2e7eec fix shadow 2025-08-12 10:58:05 -07:00
Alexander Rose
fdb3ff54f1 fix: apply model-scale to alpha-thickness 2025-08-11 22:19:52 -07:00
Alexander Rose
d5fd56718d tweak shadow pass 2025-08-10 20:52:39 -07:00
Alexander Rose
0698ac6dd5 changelog 2025-08-10 11:55:06 -07:00
Alexander Rose
825b59ab1e fix multi scale ssao update when camera scale changes 2025-08-10 11:21:17 -07:00
Alexander Rose
3086d1a5c8 Merge branch 'master' of https://github.com/molstar/molstar into webxr 2025-08-10 10:47:45 -07:00
Alexander Rose
138796862b Merge pull request #1589 from giagitom/dot-volume-improvements
Dot volume representation improvements
2025-08-10 10:44:39 -07:00
Alexander Rose
1b236f1ae5 cleanup 2025-08-10 10:42:17 -07:00
Alexander Rose
b6c2e25395 cleanup 2025-08-10 10:37:44 -07:00
giagitom
b7816986aa lint-fix 2025-08-10 13:07:54 +02:00
giagitom
437c70a75a Apply suggestions 2025-08-10 13:05:08 +02:00
giagitom
de85e0fbae Add extractBasis helper to mat4 2025-08-10 12:49:09 +02:00
Alexander Rose
8f7fda4919 cleanup 2025-08-09 23:14:48 -07:00
Alexander Rose
470ccd333f improve forward/back movement
- when camera is outside of visible boundingsphere, move a fraction of the distance to the target
2025-08-09 23:00:28 -07:00
Alexander Rose
2b6d067b0e reset xr scale when camera resets in canvas3d 2025-08-09 20:29:31 -07:00
Alexander Rose
0b928888a5 apply standard pixel scale in addition to xr resolution scale 2025-08-09 18:18:37 -07:00
Alexander Rose
28edfd44cb add xr settings to mesoscale explorer ui 2025-08-09 18:17:25 -07:00
Alexander Rose
3391c6de07 add simple culling for scaled scenes 2025-08-09 18:16:55 -07:00
Alexander Rose
12b7951700 better model scale handling for clipping and lods 2025-08-09 18:15:52 -07:00
giagitom
c527b59782 optimization 2025-08-09 21:01:33 +02:00
giagitom
3bbbac66c7 lint fix 2025-08-09 12:36:29 +02:00
giagitom
c0980bf18a Improvements in perturbation obtainment 2025-08-08 23:21:54 +02:00
giagitom
45eab19493 refactor 2025-08-08 16:57:56 +02:00
giagitom
1e2a5a5bfd - Rename property and refactor
- handle  non-orthogonal cell
2025-08-08 16:45:22 +02:00
giagitom
45edfa8014 Merge branch 'master' of https://github.com/molstar/molstar into dot-volume-improvements 2025-08-08 14:38:06 +02:00
David Sehnal
899203c855 MVS: surface_type option (#1603) 2025-08-07 11:15:44 +02:00
김주호
ef823b066b Change PDB parsing to use four-letter residue names (#1602)
* Add is4LetterResidueName option for parsing .pdb

* update metadata for request pullrequest

* Always parse PDB files using four-letter residue names. (#1601) (#1602)

* Write changelog about parsing resname 4-letter

* Update src/mol-plugin-state/formats/trajectory.ts

* Update src/mol-model-formats/structure/pdb/to-cif.ts

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2025-08-06 07:36:20 +02:00
dsehnal
33dc2015df 5.0.0-dev.4 2025-08-05 09:55:55 +02:00
dsehnal
fcf5ea420b npm audit 2025-08-05 09:54:34 +02:00
dsehnal
8d97327f8d MVS: fix passing custom primitive params 2025-08-05 09:53:58 +02:00
Alexander Rose
cbc0e857fc log entering/exiting xr 2025-08-04 22:20:10 -07:00
Alexander Rose
01ce306405 handle multiple input sources 2025-08-04 22:16:26 -07:00
Alexander Rose
a39a49e884 improve event handling and listen to device change 2025-08-03 23:08:30 -07:00
Alexander Rose
887a39dde9 more cleanup/refactoring and basic error handling 2025-08-03 18:14:31 -07:00
midlik
abc7ebba3e MVS: Fix MVSInlinePrimitiveData param type (#1592) 2025-08-03 17:48:19 +02:00
David Sehnal
73d593907e MVS cavnas molstar_postprocessing (#1598) 2025-08-03 12:04:53 +02:00
Alexander Rose
84a45fabdc cleanup/refactor
- moved button out of canvas3d
- add button to render-structure browser test
- add button to plugin viewport
2025-08-02 18:54:17 -07:00
dsehnal
0dc05e1138 5.0.0-dev.3 2025-08-02 18:21:14 +02:00
David Sehnal
dd11cacae4 Markdown Commands and MVS improvements (#1597)
* add query command to markdown extensions

* fix typo

* better postprocessing param support in MVS

* molstar_mesh/label/line_params
2025-08-02 18:19:01 +02:00
Alexander Rose
ea17902aa6 handle webxr with external "animation" control
- add Canvas3D.request/cancelAnimationFrame
- keep copy of animation callback to automatically resume
2025-08-02 07:23:46 -07:00
David Sehnal
b503259758 another io-ts import fix (#1595) 2025-08-01 06:28:26 +02:00
zachcp
1e98741e16 Update field-schema.ts (#1594) 2025-08-01 05:38:41 +02:00
dsehnal
f879519700 5.0.0-dev.2 2025-07-31 18:31:41 +02:00
zachcp
c6e175e5da Update field-schema.ts (#1593)
Follow on from #1587  to make `JS` explicit.
2025-07-31 18:29:28 +02:00
dsehnal
add75bf9c9 5.0.0-dev.1 2025-07-28 16:37:17 +02:00
dsehnal
57cbcd5fbf npm audit 2025-07-28 16:34:08 +02:00
giagitom
50a820b0ae - Add perturbatePositions property
- Fixes and improvements
2025-07-28 16:10:52 +02:00
zachcp
0a33936e06 Update field-schema.ts to point directly to PathReporter (#1587) 2025-07-28 07:48:00 +02:00
Alexander Rose
2abbb843f8 update lock file 2025-07-27 18:14:15 -07:00
Alexander Rose
32179f31c2 webxr, wip
- add pointer-helper
- add xr-manager to handle xr input and session
- support xr render loop in canvas3d
- add camera.state.minTargetDistance (don't want things too close to your eyes)
- add camera.state.forceFull to show frustum from camera to end of scene
- basic input handling (single controller)
2025-07-27 17:38:53 -07:00
Alexander Rose
7291025e09 Merge pull request #1585 from molstar/scene-scale
Scene scale
2025-07-27 17:18:57 -07:00
giagitom
0cb2c3621b Dot volume representation improvements 2025-07-28 02:07:54 +02:00
Alexander Rose
86da258280 Merge branch 'master' of https://github.com/molstar/molstar into scene-scale 2025-07-26 17:42:54 -07:00
Alexander Rose
477a80d1ca fix post-processing params hideIf logic 2025-07-26 17:40:14 -07:00
Alexander Rose
86b68018a9 add scene scaling support 2025-07-26 17:39:44 -07:00
Alexander Rose
da095d6ef9 handling move/dragt before resolving pickData breaks ray-picking 2025-07-26 16:46:08 -07:00
Alexander Rose
dc304b9e08 Merge pull request #1583 from molstar/fix-async-buffer
fix async buffer issues
2025-07-26 16:22:43 -07:00
Alexander Rose
c905fa17c4 tweak 2025-07-26 16:22:33 -07:00
Alexander Rose
a06c64e8e0 Merge pull request #1584 from molstar/pp-switch
add `enable` param for post-processing effects
2025-07-26 16:05:25 -07:00
Alexander Rose
f5441290dd Merge pull request #1567 from giagitom/box3d-spec
add tests for box3D nearestIntersectionWithRay3D
2025-07-26 16:04:59 -07:00
Alexander Rose
9f23124317 move ray box intersection code to Ray3D 2025-07-26 15:59:40 -07:00
dsehnal
8299cd638c tweaks 2025-07-26 20:37:42 +02:00
Alexander Rose
50cb08e74d Merge branch 'master' of https://github.com/molstar/molstar into fix-async-buffer 2025-07-26 07:55:21 -07:00
Alexander Rose
89552652ba Merge branch 'master' of https://github.com/molstar/molstar into pp-switch 2025-07-26 07:55:02 -07:00
Alexander Rose
37ce577813 fix text shader 2025-07-26 07:54:28 -07:00
Alexander Rose
4d9a003141 add enable param for post-processing effects
- If false, no effects are applied.
2025-07-26 07:45:59 -07:00
Alexander Rose
6f0311a53f fix async buffer issues
- mark pick-helper dirty when async pick failed
- add pixel-pack buffer wrapper
- recover pixel-pack buffer after context loss (pick buffer, hi-z pass)
2025-07-26 07:30:54 -07:00
Alexander Rose
bfd2d6b055 text shader: head rotation tweak 2025-07-26 07:23:49 -07:00
Alexander Rose
3072e60709 Merge pull request #1582 from molstar/revert-1581-fix-async-identify
Revert "fix async identify"
2025-07-26 07:22:33 -07:00
Alexander Rose
62ed8d10e3 Revert "fix async identify (#1581)"
This reverts commit 13d3c34864.
2025-07-26 07:22:12 -07:00
David Sehnal
13d3c34864 fix async identify (#1581) 2025-07-25 18:42:29 +02:00
David Sehnal
cac433efca MVS Stories: Add "Download MVS State" link (#1580) 2025-07-25 14:31:07 +02:00
dsehnal
b25ffe7151 Canvas3dInteractionHelper fix 2025-07-25 10:53:02 +02:00
David Sehnal
31074dc74c fix inv het rotation uniform (#1578) 2025-07-25 10:34:13 +02:00
giagitom
c98c01a076 fix names 2025-07-23 18:24:56 +02:00
giagitom
8966fc9396 refactor 2025-07-23 18:23:12 +02:00
dsehnal
fdbdc551e8 fix web component syntax 2025-07-22 15:25:44 +02:00
dsehnal
bb232ac3a4 pass format in mvs stories app 2025-07-22 14:37:51 +02:00
giagitom
735c25ef8d Merge branch 'master' of https://github.com/molstar/molstar into box3d-spec 2025-07-22 14:13:07 +02:00
Alexander Rose
298043313a head rotation handling tweaks 2025-07-20 22:07:37 -07:00
Alexander Rose
77cd181b91 add addCylinderFromRay3D helper function 2025-07-20 09:02:31 -07:00
Alexander Rose
b5bee042e8 add groupCount argument to Shape.create 2025-07-20 08:48:43 -07:00
Alexander Rose
4faf17ddc7 Merge pull request #1576 from molstar/headrotation
Add head rotation support
2025-07-20 08:45:15 -07:00
Alexander Rose
28774b2277 fix scale issues in cylinders & spheres shaders 2025-07-19 16:13:48 -07:00
Alexander Rose
6a7444f44e add head rotation support
- handle skybox
- handle sphere & text billboards
2025-07-19 16:13:00 -07:00
Alexander Rose
15bfa8416a Merge pull request #1575 from molstar/async-ray-picking
add async & ray picking
2025-07-19 15:16:01 -07:00
Alexander Rose
e6895ec833 cleanup, simplify AsyncPickData 2025-07-19 15:08:46 -07:00
Alexander Rose
2099ad728a add async & ray picking 2025-07-19 09:13:49 -07:00
dsehnal
72ae3fae65 5.0.0-dev.0 2025-07-19 09:30:04 +02:00
dsehnal
bb5ad78681 eslint fix 2025-07-19 09:28:44 +02:00
dsehnal
f10e88612f npm audit 2025-07-19 09:26:55 +02:00
David Sehnal
a2e582d4a9 update MVS Stories app and deploy scripts (#1574)
* update MVS Stories app and deploy scripts

* reorder changelog
2025-07-19 09:25:32 +02:00
David Sehnal
572874f4ae Rename SymmetryOperator.canonicalName to instanceId (#1571) 2025-07-19 07:46:43 +02:00
David Sehnal
b9c0347497 MVS: grid-slice volume representation, label improvements, state transitions via 3D interactions, instacing (#1570)
* MVS: grid-slice volume representation

* tweak

* type fix

* label tether support

* snapshot_key support

* custom MVSShapeRepresentation3D

* renaming

* structure and volume instancing

* fix mixin
2025-07-19 07:46:01 +02:00
midlik
089148198f MVS operator_name (#1561)
* Change symmetry operator naming

* MVS operator_name selector for inline component, color, label, tooltip

* MVS operator_name selector in annotations (component/color/label/tooltip_from_uri/source)

* Revert changes to operatorName, add canonicalOperatorName instead, rename MVS selector field operator_name -> instance_id

* Update CHANGELOG

* Remove polyfill.io in mkdocs

* MVS: MultilayerColorThemeName decide granularity smartly

* MVS: MultilayerColorThemeName refactor
2025-07-11 20:45:22 +02:00
giagitom
6fc04c3294 add tests for box3D nearestIntersectionWithRay3D 2025-07-07 18:46:06 +02:00
Alexander Rose
dc55577e22 chanelog 2025-07-06 15:28:43 -07:00
Alexander Rose
f7ba7c0511 add Ray3D and math fixes/improvements 2025-07-06 15:24:47 -07:00
Alexander Rose
ed5374fab9 improve volume visual group count update 2025-07-06 10:10:02 -07:00
Alexander Rose
9a04b4f0df instanced volume (#1557)
* wip, instanced volume

* add Orderset.isEmpty and Interval.offset

* add Box3D.addBox3D

* support volume instances

- add Volume.instances
- add Volume.InstanceIndex and Volume.SegmentIndex types
- volume loci improvements

* add volume-instance color theme

* add VolumeInstances xform

* breaking note

* trailing space

* remove setting that breaks ESlint in VSCode

* tweak angle param

* reuse volume visuals when only instance transforms change

* tweaks

---------

Co-authored-by: dsehnal <david.sehnal@gmail.com>
2025-07-06 19:04:03 +02:00
Alexander Rose
9350e539b6 Merge pull request #1566 from molstar/fix-group-count
Fix group count calculation on geometry update
2025-07-06 09:48:20 -07:00
Alexander Rose
c38377af46 Merge pull request #1564 from molstar/mol2-improvements
Mol2 Reader improvements
2025-07-05 16:57:00 -07:00
Alexander Rose
9804febd95 Merge branch 'master' into mol2-improvements 2025-07-05 16:56:51 -07:00
Alexander Rose
7936dc1840 Fix wrong instance index in calcMeshColorSmoothing 2025-07-05 15:53:08 -07:00
Alexander Rose
a033a8be36 Fix group count calculation on geometry update 2025-07-04 23:24:39 -07:00
Alexander Rose
4b84c6dcba fix typo MarchinCubes -> MarchingCubes 2025-07-04 23:22:38 -07:00
Alexander Rose
309d792fdb fix shader error when clipping flags are set without clip objects present 2025-07-04 17:51:59 -07:00
Alexander Rose
c437254680 add substructure spec 2025-07-04 16:15:55 -07:00
Alexander Rose
6fbf7c7a22 fix spec 2025-07-04 16:01:55 -07:00
Alexander Rose
86a7520b90 Mol2 Reader improvements
- Fix column count parsing
- Add support for substructure
2025-07-04 15:11:43 -07:00
David Sehnal
cd10043447 MVS: clip node support (#1553)
* MVS: clip node support

* rename transform to point_transform

* fix vec3/mat4 control overflow

* refactor mvs clipping

* unused var

* tweaks
2025-07-04 18:03:37 +02:00
David Sehnal
146e95cb23 Snapshot Markdown Improvements (#1555)
* basic markdown commands

* markdown renderers

* support markdown tables

* fix style

* indicate external links in markdown

* simplify the api

* load image from MVSX

* lint

* docs

* typo

* custom color palette support

* move manager to mol-plugin-state

* customize args parser

* better custom args parser support
2025-07-04 10:29:03 +02:00
David Sehnal
13b1e5d59c Async Viewer Init (#1394)
* async viewer init

* changelog

* tweak changelog

* make context init functions async
2025-07-01 09:52:45 +02:00
Alexander Rose
ae3efa53d6 Merge pull request #1556 from molstar/coarsegrained-unit-trait
Avoid calculating rings for coarse-grained structures
2025-06-29 22:16:32 -07:00
Alexander Rose
2e67fbe870 Merge branch 'master' into coarsegrained-unit-trait 2025-06-29 22:16:20 -07:00
dsehnal
56df6f82a7 docs tweak 2025-06-29 21:16:34 +02:00
Alexander Rose
fdd874b7a6 Merge pull request #1554 from giagitom/isosurface-fix
Fix isosurface compute shader normals when transformation matrix is applied to volume
2025-06-28 17:22:38 -07:00
Alexander Rose
f142c3ef1b lint 2025-06-28 17:20:04 -07:00
Alexander Rose
978b53e7d8 Avoid calculating rings for coarse-grained structures
- add `Unit.Traits.CoarseGrained`
2025-06-28 17:06:44 -07:00
Alexander Rose
2f3197479d Merge pull request #1550 from giagitom/illumination-fix
Fix outlines on opaque elements using illumination mode
2025-06-28 16:12:31 -07:00
Alexander Rose
6536d0ab91 Merge branch 'master' into illumination-fix 2025-06-28 16:12:09 -07:00
Alexander Rose
3bee224e7d Merge pull request #1549 from molstar/gl-refactor
WebGL related refactoring
2025-06-28 15:56:00 -07:00
Alexander Rose
3e63137977 Merge branch 'master' of https://github.com/molstar/molstar into gl-refactor 2025-06-28 15:53:29 -07:00
Alexander Rose
38d6bc6c27 tweak 2025-06-28 15:52:43 -07:00
Alexander Rose
fafe22d56b Apply suggestions from code review
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2025-06-28 15:45:32 -07:00
giagitom
a6a92bcf91 lint fix 2025-06-28 23:03:39 +02:00
giagitom
82c681f445 improve performances 2025-06-28 23:01:04 +02:00
giagitom
fbbd58b4db Fix isosurface compute shader normals when transformation matrix is applied to volume 2025-06-28 17:34:52 +02:00
David Sehnal
2dc13f082c Add custom extensions to MVS (#1547)
* Add custom extensions to MVS

* typo

* lint
2025-06-24 17:04:01 +02:00
midlik
ab5eb5993d MVS generic color themes (#1530)
* MVS: CategoricalPalette draft

* MVS: tweak param validation for union, nullable

* MVSAnnotationColorTheme: support categorical palette

* MVS: color theme categorical with list or mapping

* MVS: color theme categorical with named palette

* Add missing color lists

* Sort color lists

* MVS: color theme categorical tidyup

* MVS: color theme continuous params

* MVS: color theme continuous impl

* refactor

* MVS: color theme continuous - reverse, auto overflow_color

* MVS: color theme discrete

* file reorg

* MVS: param union does not need []

* MVS: refactor typing object params

* MVS: color theme - palette defaults in one place

* MVS: declare fields_remapping param

* MVS: implement fields_remapping param

* MVS: docs

* Update CHANGELOG

* MVS: rename fields_remapping -> field_remapping

* PR feedback

* MVS: Generic color themes - case_insensitive param

* MVS: SecondaryStructure named color dict

* Remove accidentaly added file

* Update color map descriptions

* Revert color scheme renaming, keep for v5

* Revert "Revert color scheme renaming, keep for v5"

This reverts commit 12e25c20fe.

* Added color list type "cyclical"

* Color palettes - show description in UI tooltips

* Fixed docstrings
2025-06-24 12:48:39 +02:00
Alexander Rose
2384003f5d add https support for dev server (#1548) 2025-06-24 12:41:07 +02:00
David Sehnal
3675c0afe0 Update Representation.Empty creation (#1546) 2025-06-24 12:40:50 +02:00
giagitom
d9bae488e9 Fix outlines on opaque elements using illumination mode 2025-06-23 17:58:53 +02:00
Alexander Rose
e31e5321ba refactor (abstract) webgl drawing buffer handling 2025-06-22 16:43:22 -07:00
Alexander Rose
8c7f8b8a56 remove unused WebGLContext.getDrawingBufferPixelData 2025-06-22 16:38:18 -07:00
Alexander Rose
e4dfb5148c add support for webgl multiview2 extension 2025-06-22 16:35:13 -07:00
Alexander Rose
39e2591b60 improve webgl error handling 2025-06-22 16:31:51 -07:00
David Sehnal
f8a5237024 Improve production build (#1542)
* production build using esbuild

* build browser tests with esbuild

* use tsc-alias

* remove webpack

* changelog

* update eslint to v9

* pr feedback

* update build

* include src map by default
2025-06-17 18:15:10 +02:00
MadCatX
6c2d5b9da7 Do not display NtC Tube and Confal pyramids Loci labels as verbatim text (#1543) 2025-06-16 10:45:08 +02:00
midlik
e128d85356 StringLike type include string explicitely (#1539) 2025-06-12 18:08:56 +02:00
Alexander Rose
08a929bb2f 4.18.0 2025-06-08 13:40:21 -07:00
Alexander Rose
5a54b3ef66 changelog 2025-06-08 13:37:31 -07:00
Alexander Rose
a0c897547a schema updates 2025-06-08 13:37:25 -07:00
Alexander Rose
89ce8394fd package updates 2025-06-08 13:34:08 -07:00
Alexander Rose
ea0331e95c Merge branch 'master' of https://github.com/molstar/molstar 2025-06-08 13:28:12 -07:00
Alexander Rose
9f220b55c2 fix mc scalar field diff (@giagitom) 2025-06-08 13:28:10 -07:00
Alexander Rose
acf248d58f Merge pull request #1535 from molstar/arbitrary-plane-sampling
Support sampling from arbitrary planes
2025-06-08 13:26:34 -07:00
Alexander Rose
c83b859766 type tweak 2025-06-08 13:26:21 -07:00
Alexander Rose
33a2564893 Merge branch 'master' into arbitrary-plane-sampling 2025-06-08 13:25:58 -07:00
David Sehnal
d409c4f5ea Fix SASS @import depraction warnings (#1534)
* refactor SASS to not use @import

* changelog

* typo
2025-06-08 09:33:39 +02:00
Alexander Rose
ab61e31230 header 2025-06-07 16:29:28 -07:00
Alexander Rose
ae9c2dd9d8 Support sampling from arbitrary planes
- structure plane and volume slice representations
2025-06-07 16:27:37 -07:00
David Sehnal
c17edb4928 isolatedModules and fix turbopack build (#1533)
* isolated modules tsconfig & fix errors

* fix mol-math imports

* fix turbopack builds

* fix typo

* tweak

* undo gl-shim change
2025-06-02 18:59:42 +02:00
Alexander Rose
528377eb47 Merge pull request #1532 from molstar/xray-picking
Support `pickingAlphaThreshold` when `xrayShaded` is enabled
2025-06-01 08:48:01 -07:00
Alexander Rose
c9819369d0 header 2025-05-31 11:33:18 -07:00
Alexander Rose
cdbbbfa6dd Support pickingAlphaThreshold when xrayShaded is enabled 2025-05-31 11:29:58 -07:00
David Sehnal
a1e31c79e9 MVS: FoV adjusted position Camera Info & MVSX assets in multi-snapshot states (#1531)
* FoV adjusted position Camera Info

* Fix MVSX file assets being disposed in multi-snapshot states

* pr feedback
2025-05-30 19:19:29 +02:00
midlik
e027fe46c1 MVS: Support for label_comp_id and auth_comp_id in annotations (#1529)
* MVS: Support for label_comp_id and auth_comp_id in annotations

* MVS: Primitives recognize empty substructures, distance_measurement refactor

* MVS: Primitives skipped when empty substructure, nicer default arrow caps

* MVS: Primitive angle_measurement added vector_radius param
2025-05-23 16:17:26 +02:00
dsehnal
05c4006e9d 4.17.0 2025-05-22 07:01:43 +02:00
dsehnal
191ea65c9d changelog 2025-05-22 06:58:02 +02:00
David Sehnal
3c1ee16376 remove salt bridge interaction kind (#1528) 2025-05-22 06:56:15 +02:00
David Sehnal
9ac34ee13b Add mvs-stories app (#1523)
* mvs-stories app

* update mvs-stories example

* fix build

* fix UI bug

* support search params in stories app

* merge fixes

* PR feedback

* customize build filenames

* mvs-stories loading state & dev build script fixes

* multiple context example
2025-05-22 06:49:17 +02:00
midlik
6778452d07 NodeJS ajaxGet support gzip (#1516)
* Retype string to StringLike in parsers

* Define minimal CustomString interface

* ChunkedBigString

* Test ChunkedBigString with cif2bcif

* benchmarking

* ChunkedBigString access optimization

* ChunkedBigString .length optimization

* ChunkedBigString.indexOf, tests

* ChunkedBigString remove [] in favor of charAt

* ChunkedBigString tidy up

* ChunkedBigString .substring optimization

* ChunkedBigString for browser

* ChunkedBigString for drag-and-drop

* ChunkedBigString fixes

* Simplify readFromFileInternal

* Correctly type DataResponse<'string'> as StringLike

* Update CHANGELOG

* PR feedback

* Workaround for ajaxGet in NodeJS when content gzipped

* Workaround for ajaxGet in NodeJS when content gzipped - allow aborting

* ajaxGetInternal_file_NodeJS - async read file

* Eliminate xhr2

* Remove xhr2 dependency

* Update file headers
2025-05-21 14:49:54 +02:00
Alexander Rose
7e01af1e0d 4.16.0 2025-05-20 21:07:34 -07:00
Alexander Rose
85469cbf28 changelog 2025-05-20 21:04:22 -07:00
Alexander Rose
299bdc72cd Merge pull request #1525 from molstar/mp4-export-fix-25-5-20
Fix camera interpolation during animation export
2025-05-20 21:01:41 -07:00
dsehnal
ae9f879139 use isContextLost flag instead of pausing/resuming animation 2025-05-21 05:53:26 +02:00
dsehnal
b50d83d6ea replace behavior subject with subject 2025-05-20 18:02:40 +02:00
dsehnal
2d99d8a1d0 do not pause animation during context loss 2025-05-20 17:32:45 +02:00
midlik
ea00cca1c8 MVS single state loading (#1524)
* MVS: Load single state as if multistate

* MVS: join keepCamera and keepSnapshotCamera options

* MVS: remove replaceExisting, addappendSnapshots option
2025-05-20 17:24:25 +02:00
midlik
27c3b4e698 Big strings (#1479)
* Retype string to StringLike in parsers

* Define minimal CustomString interface

* ChunkedBigString

* Test ChunkedBigString with cif2bcif

* benchmarking

* ChunkedBigString access optimization

* ChunkedBigString .length optimization

* ChunkedBigString.indexOf, tests

* ChunkedBigString remove [] in favor of charAt

* ChunkedBigString tidy up

* ChunkedBigString .substring optimization

* ChunkedBigString for browser

* ChunkedBigString for drag-and-drop

* ChunkedBigString fixes

* Simplify readFromFileInternal

* Correctly type DataResponse<'string'> as StringLike

* Update CHANGELOG

* PR feedback

* PR feedback 2
2025-05-20 11:55:20 +02:00
Alexander Rose
52942e7021 4.15.0 2025-05-19 19:31:09 -07:00
Alexander Rose
5904f694b5 changelog 2025-05-19 19:28:29 -07:00
Alexander Rose
92c0b82784 pckage updates 2025-05-19 19:28:16 -07:00
Alexander Rose
e1226fa384 type fix 2025-05-19 19:27:59 -07:00
Alexander Rose
ac2f7d1c38 lint 2025-05-19 19:27:48 -07:00
Alexander Rose
ae1742f68e Merge pull request #1520 from molstar/fix-contextlost-handling
WebGL ContextLost handling improvements
2025-05-18 14:47:36 -07:00
Alexander Rose
04e2da86fd typo 2025-05-17 16:39:06 -07:00
Alexander Rose
510182ff60 WebGL ContextLost handling improvements
- Fix missing framebuffer & drawbuffer re-attachments
- Fix missing cube texture re-initialization
- Fix missing extensions reset
- Fix timer clearing edge case
- Add reset support for geometry generated on he GPU
2025-05-17 16:36:20 -07:00
Alexander Rose
4e1da19bdd Merge pull request #1506 from sbittrich/master
IHM improvements: Enable assembly symmetry, disable volume streaming and validation report visualization
2025-05-17 13:46:26 -07:00
Alexander Rose
a3eae15446 Merge branch 'master' into master 2025-05-17 13:15:04 -07:00
David Sehnal
4334f4d1fa JSON CIF format and ligand editor example (#1510)
* wip data model and writer

* parser & test

* minimal editor example

* molstar_bond_site cif category support

* ligand graph, deletion, simple undo

* jest config

* bond editing and graph change summary

* readme

* ts config

* basic atom addition

* undo path aliases because tsc doesn't transform them

* tweak package json

* basic rgroup support

* mol parsing test and fixes

* refactoring

* molfile conversion

* refactoring and UI polish

* molfile export tweaks

* move jsonCifToMolfile

* tweak

* refactoring

* error reporting

* geometry edits

* hide selection controls

* refactoring

* tweaks

* changelog

* ligand graph tests

* SingleTaskQueue tweak

* revert Column changes

* pr feedback

* PR Feedback
2025-05-13 10:51:39 +02:00
Alexander Rose
e33ed54121 Merge pull request #1513 from midlik/fix-transparent-ssao-nodejs
Fix transparency rendering with occlusion in NodeJS
2025-05-10 08:51:41 -07:00
Adam Midlik
ae8f037192 Fix transparency rendering with occlusion in NodeJS 2025-05-09 14:12:31 +01:00
Alexander Rose
01271941dd Merge pull request #1509 from molstar/tweak-auto-quality-surface-res
adjust max resolution for auto quality
2025-05-08 22:08:33 -07:00
dsehnal
7f8be5b8c6 4.14.1 2025-05-09 07:02:52 +02:00
David Sehnal
2ab6e4b2e7 No error in Transformer.create (#1512)
* No error in Transformer.create

* header
2025-05-09 06:59:15 +02:00
Sebastian Bittrich
aa22840b12 Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	CHANGELOG.md
2025-05-08 10:36:30 -07:00
Sebastian Bittrich
c1e33fac94 PR feedback: adjust assembly symmetry logic 2025-05-08 10:23:58 -07:00
Sebastian Bittrich
a7336095ca name IHM assemblies "deposited" 2025-05-07 09:47:26 -07:00
dsehnal
4a88546181 changelog 2025-05-07 16:08:17 +02:00
dsehnal
edbc70cf6e 4.14.0 2025-05-07 16:07:49 +02:00
dsehnal
c22ad2910c npm audit 2025-05-07 16:04:36 +02:00
dsehnal
28a2b52e3c changelog 2025-05-07 16:03:53 +02:00
David Sehnal
449d572ed5 Merge branch 'master' into tweak-auto-quality-surface-res 2025-05-07 14:50:09 +02:00
Gianluca Tomasello
470227af43 Avoid grid expansion when requiring unit cell on volume server (#1502)
* Avoid grid expansion when requiring unit cell on volume server

* Increment version and use specific changelog

* change header
2025-05-07 14:49:08 +02:00
dsehnal
a0ccf46939 remove extra import 2025-05-05 08:10:03 +02:00
dsehnal
0ce8931fc5 Fix switching representation type in Volume UI 2025-05-04 18:28:19 +02:00
David Sehnal
3ddb29fc6f Add format selection option to image export UI (#1504)
* Add format selection option to image export UI

* check if webp is supported
2025-05-04 14:54:17 +02:00
Alexander Rose
1a0c65df21 changelog 2025-05-03 08:26:01 -07:00
Alexander Rose
daad1923ea adjust max resolution for auto quality (#1501) 2025-05-03 08:22:56 -07:00
David Sehnal
f34f879cf1 MVS: support updating transform states (#1505)
* MVS: support updating transform states

* changelog

* changelog

* pr feedback

* util functions & is_hidden extension
2025-05-02 12:53:38 +02:00
Sebastian Bittrich
f47b76c8af Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	CHANGELOG.md
2025-05-01 11:17:52 -07:00
Sebastian Bittrich
6ee9eb8b60 IHM: disable validation report 2025-05-01 11:16:53 -07:00
Sebastian Bittrich
915703a46d IHM: enable assembly symmetry 2025-05-01 11:13:46 -07:00
Sebastian Bittrich
61c3c19ae3 IHM: disable volume streaming 2025-05-01 11:11:50 -07:00
David Sehnal
6da9557531 Fix StructConn.residueCantorPairs (#1500) 2025-05-01 11:29:24 +02:00
Paul Lewallen
29e6d69d21 Update package.json (#1497)
Add engines field to specify required Node.js version (>=18.0.0)
2025-04-26 07:46:50 +02:00
David Sehnal
6b2b87e6c5 fix Viewer.loadTrajectory (#1496) 2025-04-24 10:44:59 +02:00
dsehnal
5299d5c0c4 changelog 2025-04-14 18:37:52 +02:00
dsehnal
7bab95f4cc 4.13.0 2025-04-14 18:04:43 +02:00
David Sehnal
35e78ce638 MVS Stories (#1484)
* ability to select a story

* rename to mvs-stories

* update kinase story

* fix ae example

* tweaks

* tweak
2025-04-14 18:00:37 +02:00
Chetan Mishra
3abbcb6949 added toggle for hiding screenshot controls (#1483)
* added toggle for hiding screenshot button

* whoops did the todolist but forgot to commit

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2025-04-14 14:38:47 +02:00
David Sehnal
c3fc893ad0 mvs: fix state builder for volumes (#1485) 2025-04-13 13:07:52 +02:00
midlik
80415a2771 MVS: support loading extensions when loading multistate files (#1470)
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2025-04-01 07:15:26 +02:00
etongfu
bfef69e2e4 Dev script update (#1473)
* feat: support host option for build-dev script

* feat: ust update the code related to the host

---------

Co-authored-by: tongfu.e <tongfu.e@xtalpi.com>
2025-04-01 07:14:39 +02:00
David Sehnal
a265a579be Update support for QA metrics (#1476)
* generalize ma_qa_metric support

* do not assume PAE is symmetric

* changelog

* Update src/extensions/model-archive/quality-assessment/prop.ts

Co-authored-by: Alexander Rose <alexander.rose@weirdbyte.de>

* Update src/extensions/model-archive/quality-assessment/prop.ts

Co-authored-by: Alexander Rose <alexander.rose@weirdbyte.de>

* lint

---------

Co-authored-by: Alexander Rose <alexander.rose@weirdbyte.de>
2025-03-31 18:51:18 +02:00
ludovic autin
c2af1b0b22 Colors from user and file (#1466)
* color, and granularity for selectrion.

* Load json colors per ingredient {"name":{"x":0,"y":0,"z":0}}

* change icon

* use functional components and simple function.
2025-03-28 18:51:42 +01:00
Sagar Pathak
b739876726 Update index.md (#1472)
Fix command typo: changed 'npm build' to 'npm run build'
2025-03-24 17:57:01 +01:00
David Sehnal
56851cc328 Improve struct_conn handling (#1468)
* improve struct_conn handling

* fix

* fix

* check same model

* Update src/mol-model-formats/structure/property/bonds/struct_conn.ts

Co-authored-by: Alexander Rose <alexander.rose@weirdbyte.de>

---------

Co-authored-by: Alexander Rose <alexander.rose@weirdbyte.de>
2025-03-24 16:49:11 +01:00
dsehnal
b719568555 mobile-friendly Kinase Story 2025-03-24 08:47:42 +01:00
Alexander Rose
f842f19912 Merge branch 'master' of https://github.com/molstar/molstar 2025-03-23 16:28:55 -07:00
Alexander Rose
d6b0dd910c guard against overly large grids 2025-03-23 16:28:52 -07:00
Alexander Rose
395eb8e8d0 Merge pull request #1454 from agdturner/pwa
For viewer to be installable as a Progressive Web App with a Service …
2025-03-23 16:28:03 -07:00
Alexander Rose
e4376c6737 try fix package-lock 2025-03-23 16:10:03 -07:00
Alexander Rose
6f23fcba8a Merge branch 'master' of https://github.com/molstar/molstar into pr/agdturner/1454 2025-03-23 16:06:17 -07:00
dsehnal
7d19bfdb9b Tweaks: kinase story edgecase fix, do not include volseg extension in Viewer by default 2025-03-17 09:30:30 +01:00
David Sehnal
6e4065f779 Interactions extension (#1463)
* move schema based element addressing from MVS to the core library

* proof of concept

* tweak

* initial visual

* tweak

* tweak structureElementLocationToSchemaItem

* show receptor residues as ball and stick

* wip data model

* custom interactions support

* add example

* wip visuals

* covalent links

* tweak

* fix bug

* cache unit features

* Add structureRef to Molecule.Structure.Selections

* optimize compute

* support multi-structure selections

* analyzeTrajectory support

* readme

* tweak

* headers

* docs

* Optimize StructureElementSchema & remove fromLoci conversion (not production ready for now, will be separate PR)

* move schema code to `StructureElement.Schema` and add fromExpression/Query/Schame functions to Loci and Bundle

* improve selection docs

* adjust covalent bond data model

* tweak fromExpression

* fix type

* remove hydrogen reference

* Fix MVS.rowsToExpression
2025-03-17 09:25:18 +01:00
Alexander Rose
c42a68b560 fix package-lock 2025-03-15 16:44:16 -07:00
Alexander Rose
c86d913b83 Merge branch 'master' of https://github.com/molstar/molstar into pr/agdturner/1454 2025-03-15 16:42:38 -07:00
Alexander Rose
0f6fa5fe15 simplify, add pwa files during deploy 2025-03-15 16:38:04 -07:00
Alexander Rose
f664cb02b1 Fix pickPadding and pickScale not updating PickHelper 2025-03-15 14:34:47 -07:00
David Sehnal
00a53de6e2 Use StructureElement.Bundle for measurements (#1453)
* Revert "Support measurements for coarse models"

This reverts commit a8a84e1dbf.

* add MultiStructureSelectionFromBundle and use it for measurements
2025-03-12 07:15:03 +01:00
Paul Pillot
b1ce5c158e fix: bond iterator starts from the same interbonds for every element (#1464)
This is causing an issue when there are multiple units having different inter-unit bonds: the `interBondCount` value is based on the `interBondIndices` length which is correct. But the iteration always starts from the `edges` index === 0. This is only correct for the first pairs of units. The iteration must be done over the `interBondIndices` to get the proper edges.

By returning indices for edges that do not correspond to the given element, the `otherIndex` property can be of bounds.
2025-03-12 06:41:59 +01:00
dsehnal
26826b61f9 fix lint error 2025-03-10 11:06:06 +01:00
Lukas Polak
f44f954a76 Implement ColorScale.createDiscrete, fix UI color palette bugs (#1459) 2025-03-09 10:53:10 +01:00
Alexander Rose
78aae8a2b4 pwa tweaks
- keep build process simple, write SW in JS
- support molstar version SW
- add `Viewer.loadFiles` to open supported files
- cleanup pwa icons
- add more file_handlers to pwa manifest
2025-03-08 15:00:23 -08:00
David Sehnal
92267d3264 MVS example tweaks (#1457)
* kinase story

* ihm-restraints

* fix typo

* tweak wwpdb links
2025-03-05 15:46:33 +01:00
Andy Turner
73ed45564e For viewer to be installable as a Progressive Web App with a Service Worker transpiled from TypeScript 2025-03-04 09:05:51 +00:00
David Sehnal
8bc2ebbeff Experimental esbuild support (#1452)
* wip esbuild

* esbuild all apps and examples

* wip dev build

* dev builds

* tweaks
2025-03-04 07:22:44 +01:00
Alexander Rose
5306d5d15a ignore renderables with empty draw count 2025-03-01 14:04:33 -08:00
Alexander Rose
3c3fb461c8 fix element-point visual not using child unit 2025-03-01 14:03:31 -08:00
dsehnal
62b3281282 fix webpack config 2025-03-01 19:20:34 +01:00
dsehnal
e85fadf15b tweak 2025-03-01 13:14:45 +01:00
dsehnal
a8a84e1dbf Support measurements for coarse models 2025-03-01 13:11:50 +01:00
David Sehnal
153599ef89 ihm-restraints example: show entity labels (#1450)
* ihm-restraints example: show entity labels

* noEntityLabels option
2025-03-01 08:37:51 +01:00
dsehnal
b67eda7cb5 4.12.1 2025-02-28 08:11:41 +01:00
dsehnal
8b431c50be npm fix 2025-02-28 08:08:58 +01:00
dsehnal
e195b048a1 4.12.0 2025-02-28 08:04:38 +01:00
dsehnal
ae5bb81b27 changelog 2025-02-28 08:01:21 +01:00
David Sehnal
8c04c57bc5 MVS Animation example (#1444)
* wip kinase story

* wip storyboard

* wip kinases

* import

* tweaks

* finish kinase story

* refactoring

* changelog

* tweaks

* tweak
2025-02-27 19:41:18 +01:00
David Sehnal
ec46a444f1 I/HM Example Improvements (#1448)
* add CoarseIndex

* IHM validation snapshots

* tweaks

* header
2025-02-25 06:44:48 +01:00
Alexander Rose
559e0326b6 fix image/slice group handling
- correctly update group count
- ignore undefined group when picking
- ensure group cover anti-aliased slice part
2025-02-22 11:06:01 -08:00
Sebastian Bittrich
82b93bc2a8 prim: fix arrow orientation and behavior along [0,-1,0] (#1447) 2025-02-22 09:11:59 +01:00
David Sehnal
62f940bc48 MVS: angle primitive (#1446) 2025-02-21 18:44:23 +01:00
David Sehnal
4e0be8e7b4 MVS: Volume Server support + Support carbohydrate representation + Camera section in Screenshot / State (#1445)
* MVS: Volume Server support + Camera section in Screenshot / State

* support carbohydrate repr
2025-02-21 07:51:10 +01:00
David Sehnal
128502edf0 MVS: Basic volumetric data support (#1443)
* mvs: basic volumetric data support

* headers
2025-02-19 09:03:04 +01:00
David Sehnal
aad4d4a86c MVS: IHM support (#1433)
* MVS: IHM support

* pr feedback

* fix cyclic import

* ihm.overlaps-seq-id-range

* Add ihm-restraints example
2025-02-18 08:18:18 +01:00
Alexander Rose
9bc7e27243 Merge pull request #1419 from molstar/slice-rotate
Add support for rotating `slice` representation around an axis & structure plane representation
2025-02-17 18:05:05 -08:00
Alexander Rose
a5111356c1 Add transform property to clip objects 2025-02-17 17:59:14 -08:00
Alexander Rose
9b11f7ffde use defaultColor for NaN values 2025-02-16 13:30:11 -08:00
Alexander Rose
93ce6d2807 Merge branch 'master' of https://github.com/molstar/molstar into slice-rotate 2025-02-16 13:27:56 -08:00
Alexander Rose
5c9d5d3a3d fix Vec3 prop check in setUpdateState 2025-02-16 13:27:09 -08:00
David Sehnal
f40307db39 Remove static uses of ColorTheme and SizeTheme fields (#1442) 2025-02-16 18:17:01 +01:00
Alexander Rose
4e6000fa6c Merge branch 'master' of https://github.com/molstar/molstar into slice-rotate 2025-02-15 16:59:16 -08:00
Alexander Rose
26e5817bf2 slice & plane-image improvements
- support trimming & rotation for boxes with non 90 deg angles
- cleanup & document params
2025-02-15 16:57:35 -08:00
Alexander Rose
8469be80d0 fix uniform slice coloring out of bounds 2025-02-15 16:40:05 -08:00
David Sehnal
029edc95c8 MVS: Additional Primitives (#1437)
* ellipsis

* box

* improve ellipsis

* improve ellipsis

* arrow primitive

* tweak arrow

* ellipsoid

* changelog

* pr feedback
2025-02-12 16:33:06 +01:00
David Sehnal
dd9aaf055f Components example (#1425)
* components example, initial code

* refactoring

* readme

* usage example

* changelog

* tweak
2025-02-11 18:08:15 +01:00
Alexander Rose
fcfb2d940c Merge branch 'master' of https://github.com/molstar/molstar into slice-rotate 2025-02-09 14:06:29 -08:00
Alexander Rose
f5b5109d0f Improve logic when to cull in renderer 2025-02-01 19:13:59 -08:00
Sebastian Bittrich
ca99c800f1 fix PDBj structure data URL (#1430) 2025-01-31 08:13:52 +01:00
Alexander Rose
dbd5570370 4.11.0 2025-01-26 11:10:06 -08:00
Alexander Rose
3f805c7a82 changelog 2025-01-26 11:07:06 -08:00
Alexander Rose
12c71dc5ba Handle Firefox's limit on vertex ids per draw 2025-01-25 16:04:34 -08:00
Alexander Rose
2fe3a926aa package updates 2025-01-25 15:59:44 -08:00
Alexander Rose
60c2096575 scss tweak 2025-01-25 15:53:52 -08:00
Alexander Rose
f4e9df5e4d schema updates 2025-01-25 15:26:06 -08:00
Alexander Rose
c304b82772 changelog 2025-01-25 15:18:39 -08:00
Alexander Rose
9edd171350 Merge pull request #1421 from molstar/volume-dot
add volume dot representation
2025-01-25 15:16:36 -08:00
Alexander Rose
f7d1bd7c04 PR tweaks 2025-01-25 14:27:59 -08:00
Alexander Rose
7422c255ab Merge branch 'master' of https://github.com/molstar/molstar into volume-dot 2025-01-25 14:26:44 -08:00
Alexander Rose
5497215784 Merge pull request #1423 from giagitom/fix-cartoon-tubular-helices
Fix tubular helices issue
2025-01-25 14:25:40 -08:00
giagitom
577bf1c77c Fix tubular helices issue 2025-01-22 16:27:40 +01:00
David Sehnal
c9bddccaf7 MVS: Initial support for customizable representation parameters (#1417)
* MVS: Initial support for customizable representation parameters

* pr feedback
2025-01-21 13:53:24 +01:00
midlik
ac292f9267 Sequence panel focus marker (#1392)
* Sequence view show focused residues

* wip

* Factor out MarkerColors

* Marker array supports "focus" marker type

* Sequence panel - separate focus marker from highlight and select

* Revert changes in mol-util/marker-actions.ts

* Simplify sequence.tsx

* Sequence panel markers follow renderer highlight colors

* Sequence panel focused range in bold

* Focus add with Ctrl, extend with Shift

* Update CHANGELOG
2025-01-21 13:15:06 +01:00
Alexander Rose
f0b8d75b10 add volume dot representation
- add volume-value size theme
2025-01-19 17:47:21 -08:00
Alexander Rose
0dacbcb3bc fix vertex based themes for spheres shader 2025-01-19 17:45:52 -08:00
Alexander Rose
0789241ea3 Add plane structure representation
- Can be colored with any structure theme
- Can be colored with the `external-volume` theme
- Can show atoms as a cutout
- Supports principal axes and bounding box as a reference frame
2025-01-18 19:36:49 -08:00
Alexander Rose
ddb0799dc4 Merge branch 'master' of https://github.com/molstar/molstar into slice-rotate 2025-01-18 17:30:36 -08:00
Alexander Rose
cbfa341fa3 Merge pull request #1411 from midlik/quick-styles
Quick styles
2025-01-18 16:57:03 -08:00
Alexander Rose
1c19bd90df Merge branch 'master' into quick-styles 2025-01-18 16:56:56 -08:00
Alexander Rose
300e5c8985 Merge pull request #1407 from sbittrich/master
Rebrand PDB-Dev as PDB-IHM
2025-01-18 16:55:24 -08:00
Alexander Rose
0861a78db6 Merge branch 'master' into master 2025-01-18 16:55:08 -08:00
Alexander Rose
a8e403ad85 Add support for rotating slice representation around an axis
- Add default color support for palette based themes
- Add support for trimming `image` geometry to a box
- Improve/fix iso-level support of `slice` representation
2025-01-18 16:45:22 -08:00
Ventura Rivera
4e350496b2 Sequence Viewer Mode Customization (#1412)
* adding flags for viewport selection controls

* adding logic to remove/keep selection controls

* adding viewport selection control feature

* package updates

* moving selectionTool options out of viewport

* updating selection controls with new properties

* updating property name to match nomenclature

* adding option for custom selection controls

* adding custom selection controls

* minor property name update

* adding property for granularity options

* reassigning StructureSelectionParams.granularity.options if custom granularity options

* adding entry for custom granularity options

* reusing Loci.Granularity to specify valid strings for granularityOptions

* Update src/mol-plugin-ui/spec.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* merging molstar/molstar:main into ventura-rivera/molstar:main

* moving granularityOption logic into componentDidMount

* moving granularityOption logic to componentDidMount and creating structureSelectionParams state

* adding modeOptions and defaultMode properties to sequenceViewer

* adding logic to customize mode controls

* CHANGELOG

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2025-01-18 10:59:07 +01:00
Alexander Rose
dd21ddcc80 math helpers 2025-01-17 22:47:42 -08:00
Alexander Rose
a88121f779 add Quat uniform mapping to vec4 2025-01-17 22:47:27 -08:00
Adam Midlik
1ab91d1979 Quick Styles: stateless UI 2025-01-17 11:17:14 +00:00
Adam Midlik
267788388d Quick Styles: UI subsection headers 2025-01-17 10:11:52 +00:00
Adam Midlik
43c0333be3 Quick Styles: postpone UI update while animation running 2025-01-14 10:33:25 +00:00
JonStargaryen
3b90a269b0 rebranding from PDB-Dev to PDB-IHM 2025-01-13 11:21:00 -08:00
Ventura Rivera
4aa5e1d7fc Structure Selection Granularity Options Customization (#1410)
* adding flags for viewport selection controls

* adding logic to remove/keep selection controls

* adding viewport selection control feature

* package updates

* moving selectionTool options out of viewport

* updating selection controls with new properties

* updating property name to match nomenclature

* adding option for custom selection controls

* adding custom selection controls

* minor property name update

* adding property for granularity options

* reassigning StructureSelectionParams.granularity.options if custom granularity options

* adding entry for custom granularity options

* reusing Loci.Granularity to specify valid strings for granularityOptions

* Update src/mol-plugin-ui/spec.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* merging molstar/molstar:main into ventura-rivera/molstar:main

* moving granularityOption logic into componentDidMount

* moving granularityOption logic to componentDidMount and creating structureSelectionParams state

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2025-01-13 16:39:25 +01:00
Adam Midlik
679db48938 Merge branch 'master' into quick-styles 2025-01-13 15:09:42 +00:00
Adam Midlik
2f96b42df7 Updated CHANGELOG 2025-01-13 15:08:12 +00:00
Adam Midlik
dd6f3bd76e Increase scrollbar visibility 2025-01-13 14:41:38 +00:00
Adam Midlik
f1b7e478c7 Remove unused stuff 2025-01-13 13:32:02 +00:00
Adam Midlik
416442aa27 entity-id color theme overrideWater param 2025-01-13 11:59:36 +00:00
Alexander Rose
a5f65b6e6f use value for uniform coloring of slices
- recovers previous behavior
2025-01-12 18:10:14 -08:00
Alexander Rose
938ac0cc8f fix image rendering issues with marking
- handle pixels without a group
- take fog into account
2025-01-11 14:47:06 -08:00
Alexander Rose
7dacf60478 plane mesh helpers 2025-01-11 14:40:16 -08:00
Alexander Rose
9cdb8a3a92 Merge pull request #1399 from molstar/improve-volume-coloring
improve volume coloring
2025-01-11 14:35:17 -08:00
Alexander Rose
242982e661 Merge branch 'master' into improve-volume-coloring 2025-01-11 14:34:58 -08:00
Alexander Rose
6da20a6989 Fix Plane3D.projectPoint 2025-01-11 09:21:33 -08:00
Alexander Rose
f27b651230 tweak spec.components.selectionTools.hide names 2025-01-11 09:17:30 -08:00
Alexander Rose
7c818c0cc9 add location related comments 2025-01-11 08:58:59 -08:00
Adam Midlik
e7d7ba26b0 Quick Styles: Add cartoon 2025-01-10 16:16:36 +00:00
Adam Midlik
7e64121059 Quick styles: two-row UI 2025-01-10 15:59:20 +00:00
Adam Midlik
894bba1d3a Quick styles: Stylized independent from preset 2025-01-10 11:14:23 +00:00
Adam Midlik
d9db775fe8 Toggle button different hover color when on and off 2025-01-10 11:07:13 +00:00
Ventura Rivera
a7fbc7b4c4 Remove viewport selection controls (#1408)
* adding flags for viewport selection controls

* adding logic to remove/keep selection controls

* adding viewport selection control feature

* package updates

* moving selectionTool options out of viewport

* updating selection controls with new properties

* updating property name to match nomenclature

* adding option for custom selection controls

* adding custom selection controls

* minor property name update
2025-01-10 11:06:14 +01:00
Alexander Rose
c0596298d6 Add support for position-location to volume-value color theme 2025-01-04 09:26:30 -08:00
Alexander Rose
8f32dde599 review tweaks 2025-01-04 09:25:01 -08:00
Alexander Rose
4d8f00900d improve volume coloring
- Add `volume-data` theme that colors positions by volume data
- Add support for color themes to `slice` representation
- Improve/fix palette support in volume color themes
2025-01-03 17:07:13 -08:00
Alexander Rose
9f3c617945 Merge pull request #1397 from molstar/color-external-structure
add external-structure theme
2025-01-02 14:45:50 -08:00
Alexander Rose
f920188cdc Merge pull request #1398 from ventura-rivera/master
fix hyperlink typo
2025-01-02 14:45:33 -08:00
Ventura Rivera
68b73503bb update changelog with doc updates 2025-01-02 12:59:35 -08:00
Ventura Rivera
e776138ecd fix hyperlink typo 2025-01-02 12:55:42 -08:00
Alexander Rose
bbacd5a9dd Merge branch 'master' into color-external-structure 2024-12-31 13:53:04 -08:00
Alexander Rose
289ecef1d7 add approxNearest to lookup3d 2024-12-31 13:31:26 -08:00
Alexander Rose
52fc3ef750 Merge pull request #1396 from molstar/float-volume-data
Support float and half-float data type
2024-12-29 18:41:53 -08:00
Alexander Rose
dffe40ac1d simplify isosurface property handling 2024-12-29 17:54:23 -08:00
Alexander Rose
f834e39ce4 add external-structure theme
- colors any geometry by structure properties
2024-12-28 17:38:49 -08:00
Alexander Rose
2bc9c6fb57 Support float and half-float data type
- direct-volume rendering
- GPU isosurface extraction
2024-12-28 14:29:17 -08:00
Alexander Rose
6e42c11f5e comments regarding webgl1 consistent bit plane counts 2024-12-28 13:08:05 -08:00
midlik
d48feeaa94 Mvs union params (#1388)
* MVS: define union params

* MVS: include defaults in param schema

* MVS: removed mvs-defaults

* MVS: union params validation

* MVS: use new param schema

* MVS: Nicely format ColorName

* MVS: primitive uses UnionParamsSchema

* MVS: mesh remove triangle_groups

* MVS: remove dead code

* MVS: reorg files and add docs for parameter system

* MVS: print-schema for union params

* MVS: remove line_colors

* MVS: Rename many primitives params

* MVS: update primitive params descriptions

* MVS: Refactor primitive Builders

* Volumes and segmentations: avoid parsing non-success response

* MVS: refactor primitive params types

* MVS: avoid repeating MVS defaults in primitives.ts

* MVS: update builder

* MVS: primitive params docstrings
2024-12-18 18:54:39 +01:00
David Sehnal
fd0ca75fc1 Volume UI improvements (#1379)
* improvements to Volumes UI

* support wheel scroll on sliders

* headers

* changelog
2024-12-17 17:55:06 +01:00
Alexander Rose
a270dcb5f5 error handling in deploy script 2024-12-15 13:49:54 -08:00
Alexander Rose
917de1175c 4.10.0 2024-12-15 10:05:40 -08:00
Alexander Rose
65945fb904 changelog 2024-12-15 10:01:58 -08:00
Alexander Rose
3b7afc6037 package updates 2024-12-15 10:01:15 -08:00
Alexander Rose
05d9ca6e68 Merge pull request #1386 from molstar/fix-handle-resize
wip, fix handle resize
2024-12-15 09:52:09 -08:00
Alexander Rose
12ee0e0f38 Fix resize handling in tests/browser 2024-12-15 09:42:03 -08:00
Alexander Rose
dbd29e749e Merge branch 'master' of https://github.com/molstar/molstar into fix-handle-resize 2024-12-15 08:52:57 -08:00
Alexander Rose
a8085111dc add support for more webgl extensions
- EXT_render_snorm
- WEBGL_render_shared_exponent
- EXT_texture_norm16
- EXT_depth_clamp
2024-12-14 11:59:18 -08:00
Alexander Rose
93798554ac Use adjoint matrix to transform normals in shaders 2024-12-14 11:55:47 -08:00
Alexander Rose
ce07c52d9f Fix addIndexPairBonds quadratic runtime case 2024-12-14 11:53:07 -08:00
Alexander Rose
fb7a247f6c Fix units transform data not fully updated when structure child changes 2024-12-14 11:51:10 -08:00
Alexander Rose
e9dfe6322d changelog 2024-12-14 11:50:27 -08:00
Alexander Rose
079187326a wip, fix handle resize 2024-12-12 21:58:15 -08:00
midlik
4dc9d037a4 MolViewSpec animations (#1348)
* MVS: Interfaces for multistate specs (wip)

* MVS: Multistate loading PoC

* MVS: Multistate loading PoC with camera

* Focus node in MOLJ: dirty impl

* PluginCommands.Camera.FocusObject

* Minor changes

* Refactoring for FocusObject

* Refactor getFocusBoundingSphere

* Move stuff to src/mol-plugin-state/manager/focus-camera/focus-object.ts

* MVS: molstarTreeToEntry include focus

* MVS: multi-state with focus

* MVS: multi-state with implicit camera

* MVS: multi-state works with video rendering

* Fix is_iOS() for NodeJS

* MVS: multi-state with canvas node

* Added PluginStateSnapshotManager.EntryParams.descriptionFormat

* MVS: mvs-render can generate MP4

* MVS: Remove dead code

* Update CHANGELOG

* MVS: Rename linger_duration_ms, transition_duration_ms

* MVS: focus node, radius* params

* PluginState.Snapshot.camera.focus allow multiple targets

* MVS: support multiple focus nodes

* MVS: Rename param radius_extend -> radius_extent

* MVS: support focus node on root

* MVS: Synchonize metadata format with backend

* MVS: change "transparency" to "opacity"

* Updated CHANGELOG
2024-12-12 13:06:23 +01:00
Alexander Rose
f36ad9ac28 Merge pull request #1380 from molstar/fix-gap-marking-consecutive
fix marking of consecutive gap elements
2024-12-09 19:21:34 -08:00
Alexander Rose
6d392de628 Merge branch 'master' into fix-gap-marking-consecutive 2024-12-09 19:21:03 -08:00
Alexander Rose
d7cd957b42 fix missing deflate header if CompressionStream is available 2024-12-09 19:15:13 -08:00
Alexander Rose
de36612bf1 changelog 2024-12-09 19:13:45 -08:00
Yakov Pechersky
d5154bcff2 Support React 19 (#1382)
By loosening `peerDependencies`
2024-12-09 15:51:34 +01:00
Alexander Rose
b44a6fa660 fix marking of consecutive gap elements 2024-12-08 16:33:58 -08:00
David Sehnal
5cc28c9471 Add ModelWithCoordinates transform (#1378)
* Add ModelWithCoordinates transform

* PR feedback
2024-12-08 18:21:13 +01:00
Alexander Rose
b42a6d4636 Merge pull request #1373 from giagitom/illumination-outlines-fix
Fix outlines on transparent background using illuminartion mode
2024-12-07 18:10:49 -08:00
Alexander Rose
efd405f44b Merge branch 'master' into illumination-outlines-fix 2024-12-07 18:10:14 -08:00
Alexander Rose
4b3932e9e2 4.9.1 2024-12-05 08:55:57 -08:00
Alexander Rose
dcb8eca29a changelog 2024-12-05 08:53:54 -08:00
midlik
ac0177aef5 Fix iOS check (#1376) 2024-12-05 10:37:15 +01:00
giagitom
316013aafd Fix transparent depth artifacts using illumination mode 2024-12-03 16:05:57 +01:00
giagitom
040d83e8d4 Fix outlines on transparent background using illuminartion mode 2024-12-03 15:26:36 +01:00
Alexander Rose
b31ed50b3a 4.9.0 2024-12-01 13:38:17 -08:00
Alexander Rose
2a9c4db97f lint 2024-12-01 13:34:35 -08:00
Alexander Rose
fbeda779ac changelog 2024-12-01 13:32:37 -08:00
Alexander Rose
89e60cfde9 Merge pull request #1372 from molstar/immutablejs5
update to immutable-js 5
2024-12-01 13:27:26 -08:00
Dominik Tichy
0845f5fd75 Fix: missing partial charges (#1368)
* fix: color missing charges green

* fix: save missing charges as undefined

* chore: updated changelog

* fix: corrected check of missing values

* fix: lint

* fix: wrong logic

* fix: removed unused functions

* fix: unecessary assignment of undefined
2024-12-01 19:38:47 +01:00
dsehnal
918b67482f update to immutable-js 5 2024-12-01 15:41:20 +01:00
Alexander Rose
3ff3ea2912 schema updates 2024-11-30 15:37:39 -08:00
Alexander Rose
b2e1d069ba add missing bytes member to File_NodeJs 2024-11-30 15:37:32 -08:00
Alexander Rose
0a409c6fdf fix missing params assignment in shape repr 2024-11-30 15:37:02 -08:00
Alexander Rose
5ce552d2cc package updates 2024-11-30 15:36:30 -08:00
Alexander Rose
8bda510378 fix wrong repr params assignment 2024-11-28 21:09:41 -08:00
midlik
ad1923f57b Servers object storage (#1355)
* ModelServer: support for GS

* VolumeServer: simple support for GS

* fetch_GS abort

* file reorg

* ModelServer/VolumeServer: dynamic import @google-cloud/storage

* ModelServer/VolumeServer: update docs

* ModelServer/VolumeServer: handle HTTP and GS errors

* ModelServer/VolumeServer: update docs

* ModelServer/VolumeServer: update docs 2

* Minor tweaks
2024-11-28 12:06:02 +01:00
Sebastian Bittrich
ba38fe2474 Membrane Server to generate MolViewSpec data (#1338)
* membrane server wip

* cleanup

* desc

* cl
2024-11-25 19:12:40 +01:00
Alexander Rose
c53b651472 Merge pull request #1359 from molstar/snapshot-manager-fix-current
PluginStateSnapshotManager.syncCurrent fix
2024-11-23 10:29:37 -08:00
Alexander Rose
2eb4f77504 Merge branch 'master' into snapshot-manager-fix-current 2024-11-23 10:29:29 -08:00
Alexander Rose
c09f30a135 Merge pull request #1353 from giagitom/x-ray-fix
Xray shading fix for high XrayEdgeFalloff
2024-11-23 10:06:41 -08:00
Alexander Rose
c60c52f563 Merge pull request #1349 from papillot/infer-valence-from-protonated-ligand
Do not infer implicit Hs when explicit Hs are set #1257
2024-11-23 10:05:51 -08:00
dsehnal
7e67678dcd PluginStateSnapshotManager.syncCurrent fix 2024-11-23 08:55:48 +01:00
giagitom
4ee33c9dcd Use clamp 2024-11-20 18:51:19 +01:00
giagitom
8a0d5eb366 Xray shading fix for high XrayEdgeFalloff 2024-11-20 15:56:22 +01:00
Paul Pillot
e18a3b452a Do not infer implicitH when explicitH are set
Instead of detecting the protonation at the level of the atom only, the protonation of the unit is detected first. If protonation is known, then the assignment of implicit hydrogens is not needed.
This avoids cases where a nitrogen on a protonated ligand gets assigned a positive charge when it has no hydrogens, because the code was assuming that protonation was unknown in that case.
2024-11-18 17:24:28 -05:00
Alexander Rose
38a508fd87 Merge pull request #1328 from sbittrich/master
Membrane orientation: improve `isApplicable` check and error handling
2024-11-16 19:26:45 -08:00
Alexander Rose
0b1fd14e09 Merge pull request #1337 from giagitom/inprove-tubular-helices
Inprove tubular helices
2024-11-16 19:22:23 -08:00
Alexander Rose
b883ddd10e Fix transform data not updated when structure child changes 2024-11-16 12:47:30 -08:00
Simeon Borko
30557d13ca Refactor value swapping in molstar-math to fix SWC (Next.js) build (#1345) (#1346)
Co-authored-by: Simeon Borko <simeon.borko@recetox.muni.cz>
2024-11-16 08:08:28 +01:00
David Sehnal
85b72ae3b0 StructConn.isExhaustive fix (#1342) 2024-11-13 18:30:40 +01:00
JonStargaryen
2ed165f9a5 extend check to all models 2024-11-11 08:39:56 -08:00
giagitom
8c5388a6ea Cleanup 2024-11-11 17:25:39 +01:00
giagitom
703ef6c273 Enable double rounded cap on tubular helices 2024-11-11 17:16:17 +01:00
giagitom
0a1c5537d2 fix trace iterator for single residue tubular helices 2024-11-11 17:14:56 +01:00
Alexander Rose
e65f5b270e Merge pull request #1331 from giagitom/postprocessing-update-fix
Fix outlines on volume and surface reps that do not disappearing
2024-11-10 09:46:48 -08:00
Alexander Rose
9185c4592f Merge pull request #1329 from sbittrich/express
Update to express v5
2024-11-10 09:44:39 -08:00
Alexander Rose
fbe44bfab7 Merge branch 'master' into express 2024-11-10 09:44:07 -08:00
Alexander Rose
f4d44621d6 improve inter unit bond performance
- use numbers instead of strings in maps
- bespoke `eachStructureGroupsBond` to iterate
2024-11-10 09:35:44 -08:00
Alexander Rose
05a87fded9 Fix bonds not shown with ignoreHydrogens on (#1315)
- Better handle mmCIF files with no entities defined by using `label_asym_id`
- Show bonds in water chains when `ignoreHydorgensVariant` is `non-polar`
2024-11-10 09:33:25 -08:00
Alexander Rose
195f7284b5 fix transparent SSAO for image rendering 2024-11-10 09:27:43 -08:00
Alexander Rose
c4a900e2ea fix occupancy check using wrong index for inter-unit bond computation 2024-11-10 09:26:03 -08:00
giagitom
e1eb686355 Fix outlines on volume and surface reps that do not disappearing 2024-11-07 14:51:15 +01:00
Sebastian Bittrich
54b4a01cc3 update to express v5 (#1311) 2024-11-05 15:42:06 -08:00
Sebastian Bittrich
f68a01183d consider coarse-grained models 2024-11-05 10:24:08 -08:00
Sebastian Bittrich
057d605135 merge 2024-11-05 10:07:42 -08:00
Sebastian Bittrich
a391bbf786 cleanup 2024-11-05 10:04:54 -08:00
Sebastian Bittrich
fdc1054060 membrane orientation: improve isApplicable check and error handling (closes #1316) 2024-11-05 10:04:30 -08:00
Alexander Rose
b4238f574a fix incudeParent handling for structure-based visuals 2024-11-04 21:10:10 -08:00
Alexander Rose
965c6a37a9 Merge pull request #1325 from molstar/structure-visuals
Structure visuals
2024-11-03 21:27:16 -08:00
Alexander Rose
35a9056368 Add more structure-based visuals
-  to avoid too many (small) render-objects
- `structure-intra-bond`, `structure-ellipsoid-mesh`, `structure-element-point`, `structure-element-cross`
2024-11-02 17:39:04 -07:00
Alexander Rose
fd96973e82 Add Structure.intraUnitBondMapping 2024-11-02 17:38:22 -07:00
Alexander Rose
8812b0d264 Merge pull request #1320 from bergwerf/delete_fence_sync
Set fenceSync to null after deleteSync.
2024-11-02 11:13:55 -07:00
Alexander Rose
597c0dbbe1 Merge branch 'master' into delete_fence_sync 2024-11-02 11:11:24 -07:00
Alexander Rose
768d7a2a4d make ViewportScreenshotHelper.download return a promise 2024-11-02 11:10:29 -07:00
Alexander Rose
30ec53ffa4 Fix operator key-based IndexPairBonds assignment
- Don't add bonds twice
- Add `IndexPairs.bySameOperator` to avoid looping over all bonds for each unit
2024-11-02 11:09:16 -07:00
Dirk Arnez
b79ffd9cfc - fixed linting issues at glb-export example (#1322) 2024-11-01 14:11:41 +01:00
Herman Bergwerf
cc7f88fd53 Set fenceSync to null after deleteSync. 2024-10-31 11:27:53 +01:00
Dirk Arnez
57c84d0159 - add glb export example (#1314)
* - add glb export example

* Update src/examples/glb-export/index.ts

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2024-10-30 08:42:36 +01:00
Alexander Rose
4daf409337 4.8.0 2024-10-27 14:42:49 -07:00
Alexander Rose
a17e886ab9 changelog 2024-10-27 14:23:12 -07:00
Alexander Rose
ebb9046184 webpack: no fallback for vm package 2024-10-27 14:21:24 -07:00
Alexander Rose
cb41c0c7f9 package updates 2024-10-27 14:09:26 -07:00
Alexander Rose
bdbc9eab64 schema updates 2024-10-27 14:09:15 -07:00
Alexander Rose
5f76620ef5 Merge pull request #1308 from molstar/operator-bonds
Improve performance of `IndexPairBonds` assignment
2024-10-27 13:58:55 -07:00
Alexander Rose
b5c1c4d32e Merge branch 'master' into operator-bonds 2024-10-27 13:58:12 -07:00
Alexander Rose
6e4777355a Merge pull request #1309 from molstar/simplify-text-frag
remove extra anti-aliasing from text shader
2024-10-27 13:57:37 -07:00
David Sehnal
7526535a8b Basic support for Predicted Aligned Error parsing and plotting (#1302)
* proof of concept

* typos

* plot interactivity

* centerline

* better axis labels, darkmode support

* plot label

* data source selection

* interactivity

* better plot labels

* make pae overpaint ghosts

* config option

* update labels

* standalone mode and AFDB example

* fix interactivity

* pr feedback

* changelog
2024-10-27 07:36:22 +01:00
Alexander Rose
2bd84b7e7c remove extra anti-aliasing from text shader 2024-10-26 22:15:19 -07:00
Alexander Rose
84e292b3e2 Merge pull request #1293 from corredD/lammps_data
Lammps data
2024-10-26 17:34:30 -07:00
Alexander Rose
152cef9c5b tweaks & cleanup 2024-10-26 17:23:36 -07:00
Alexander Rose
d76bc583c0 Merge branch 'master' of https://github.com/molstar/molstar into pr/corredD/1293 2024-10-26 17:03:55 -07:00
Alexander Rose
071fb21dd0 Merge pull request #1252 from giagitom/transparent-ssao
Transparent ssao
2024-10-26 14:25:14 -07:00
Alexander Rose
db8943bcfb tweaks & cleanup 2024-10-26 14:16:41 -07:00
Alexander Rose
2d1ce14f2e fix marking not applied in illumination pass 2024-10-26 13:54:31 -07:00
Alexander Rose
33760b0d37 Improve performance of IndexPairBonds assignment when operator keys are available 2024-10-26 13:49:09 -07:00
giagitom
1aa6f30780 Optimize outlines 2024-10-23 13:01:04 +02:00
Ludovic Autin
86c8dd5d74 Merge commit 'c37a7ebf791afb8aa60ee8170d28a2bf156e7609' into lammps_data 2024-10-22 23:26:28 -07:00
Alexander Rose
1435a5e6e6 fix calling renderBlendedTransparent twice 2024-10-22 22:26:22 -07:00
Alexander Rose
c123e55a8d Merge branch 'master' of https://github.com/molstar/molstar into pr/giagitom/1252 2024-10-22 22:19:01 -07:00
Alexander Rose
c37a7ebf79 remove unused file 2024-10-22 22:17:25 -07:00
Alexander Rose
00e228a834 fix bloom in illumination mode 2024-10-22 22:17:16 -07:00
Ludovic Autin
55f40738f2 revert registry order. 2024-10-22 21:31:25 -07:00
Ludovic Autin
4ffd69750f Merge commit '12add4d66b93438eb53e6406811b8daea83bc907' into lammps_data 2024-10-22 21:30:03 -07:00
David Sehnal
295608baae fix Safari sequence view (#1305) 2024-10-22 20:09:15 +02:00
giagitom
4429b7185f assign material color fix 2024-10-22 19:30:30 +02:00
giagitom
84fadc2e5c Rename internal properties 2024-10-22 19:20:36 +02:00
giagitom
0b3bd885ca Fixes and removing includeTransparent property 2024-10-22 19:13:21 +02:00
giagitom
51d9eda168 Outlines fixes 2024-10-21 18:27:51 +02:00
giagitom
abe10d5c7c changed name and fixed behavior of transparentAlphaThreshold 2024-10-21 15:35:26 +02:00
giagitom
e7da2333fe Add transparentAlphaThreshold to disable transparent ssao on low transparency scenes (disabled on viewport screenshot) 2024-10-21 14:55:19 +02:00
Alexander Rose
3899a95c97 add scene.transparencyMin 2024-10-21 12:12:38 +02:00
Alexander Rose
12add4d66b me: add support for 4-character PDB ID in pdb-dev loader 2024-10-20 22:34:24 -07:00
Ludovic Autin
e16c073639 renaming 2024-10-19 14:32:04 -07:00
Ludovic Autin
3c5dc56bb2 follow @arose recommandation. 2024-10-19 14:18:52 -07:00
Alexander Rose
ad2106e6f6 use moleculeId as asym_id 2024-10-18 23:10:11 -07:00
Alexander Rose
dd5aa061b8 moleculeType -> moleculeId 2024-10-18 23:09:38 -07:00
Alexander Rose
f69ad14296 add scaling factor where it made sense 2024-10-18 23:08:48 -07:00
Alexander Rose
277254b78e fix atom style type error 2024-10-18 23:08:24 -07:00
ludovic autin
3c4f2806e7 David's recommandation 2024-10-18 16:44:51 -07:00
ludovic autin
79612833d4 Merge remote-tracking branch 'upstream/master' into lammps_data 2024-10-18 16:44:02 -07:00
midlik
b4772e0cb9 Fix binarySearchPredIndexRange (#1264)
* Fix binarySearchPredIndexRange

* Tests

* binarySearchPredIndexRange - avoid param reassignment

* Update CHANGELOG
2024-10-18 16:12:27 +02:00
David Sehnal
003c5a9437 MVS: Primitives MVP (#1300)
* inline primitives (mesh, line)

* tweak

* resolved positions

* wip labels

* tooltips

* refactor primitives

* primitives from URI

* primitives focus support todo

* focusable render objects

* default label color

* move code

* label primitive

* default shape provider params

* refactoring

* support primitive instancing

* tweak

* mvs refs support

* changelog

* header

* streamline primitives from uri

* group manager and pass node data to shape

* better position typing and resolution

* imports

* fix bug

* lint

* support mesh wireframe

* lines primitive
2024-10-18 15:00:57 +02:00
ludovic autin
ff9fb450fa added unitStyle information, reorganize the io parser. Fix spelling 2024-10-17 12:25:36 -07:00
ludovic autin
136e996e4f Merge remote-tracking branch 'upstream/master' into lammps_data 2024-10-17 12:24:11 -07:00
Alexander Rose
a93b53c413 fix for "cleanup illumination pass" 2024-10-16 22:28:27 -07:00
ludovic autin
0f25421db1 selection helper/shortcut to handle atom types ( coveres regular atom types C,N,O etc.. and custom atom type like in lammps eg . 1-200 etc...) 2024-10-16 15:37:19 -07:00
ludovic autin
cde3a73bba Merge remote-tracking branch 'upstream/master' into lammps_data 2024-10-16 15:34:10 -07:00
midlik
c19130c9eb MVS transparency and additional properties (#1289)
* MVS: Transparency support

* MVS: Data model supporting additional properties

* MVS: Builder supporting additional properties

* MVS: Loading extensions, NonCovalentInteractionsExtension

* MVS: Refactor, update CHANGELOG

* MVS: Rename additional_properties -> custom

* MVS: Add "ref" to nodes

* MVS: Fix missing dealing with ref

* MVS: Builder supporting custom and ref

* MVS: minor refactor

* StateBuilder support adding tags

* MVS: Add node ref as tag

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2024-10-16 18:17:25 +02:00
giagitom
54c8801951 - Disable transparent ssao if nothing transparent to render
- Fix transparent color texture not cleared when scene.opacityAverage = 1
2024-10-15 16:22:25 +02:00
giagitom
8371a3e349 Merge remote-tracking branch 'upstream/master' into transparent-ssao 2024-10-15 14:55:20 +02:00
Alexander Rose
cca289728c add sample/blur timer mark to ssao pass 2024-10-14 23:04:59 -07:00
Alexander Rose
d9a44daa5d cleanup illumination pass
- reuse buffers from draw pass
- remove superfluous anti aliasing render
2024-10-14 22:50:45 -07:00
Alexander Rose
48ee9ef8cb fix Scene.opacityAverage calculation never 1 2024-10-14 22:46:47 -07:00
ludovic autin
ba84081888 Merge remote-tracking branch 'upstream/master' into lammps_data 2024-10-14 11:21:14 -07:00
ludovic autin
45d8059ed2 removed scale options. Fix transformation when coordinates are scaled. 2024-10-14 11:20:28 -07:00
giagitom
6e2d8653ec Fix transparent outline size 2024-10-14 17:01:30 +02:00
Alexander Rose
cca6210076 rename includeTransparency -> includeTransparent
- to be same as in outline pass
2024-10-13 22:37:28 -07:00
Alexander Rose
9f926757b2 relax ssao blur background check 2024-10-13 22:32:00 -07:00
Alexander Rose
87d83d8f9e more ssao timers 2024-10-13 22:31:15 -07:00
Alexander Rose
d16076b170 cleanup 2024-10-13 22:30:38 -07:00
Alexander Rose
cccdc53fd0 merge master 2024-10-13 22:26:56 -07:00
Alexander Rose
a312799361 Merge pull request #1297 from molstar/fix-backfaces-visible
fix backfaces visible using blended transparency on impostors
2024-10-13 13:46:39 -07:00
Alexander Rose
60c81e79ba illumination ssao fixes & cleanup 2024-10-12 09:34:32 -07:00
Alexander Rose
bd22db4252 fix backfaces visible using blended transparency on impostors 2024-10-12 09:26:15 -07:00
Alexander Rose
36b5a9e181 only request draw after interaction in illumination mode 2024-10-12 09:08:00 -07:00
ludovic autin
809cca5261 lammps can dump normalize coordinates (sx or usx), to be able to handle it, parse the bounding box, and apply the transformation in that case 2024-10-11 14:53:43 -07:00
ludovic autin
7a81ea3ba1 missing arguments 2024-10-10 13:25:41 -07:00
ludovic autin
afa51b4416 lammps is a multiscale simulation engine, coordinate scale option help bringing everything at the properscale in the viewport. I put the option in the OpenFiles state. 2024-10-10 13:21:02 -07:00
ludovic autin
95792dd3c8 Merge remote-tracking branch 'upstream/master' into lammps_data 2024-10-10 13:09:00 -07:00
Paul Pillot
e2bc15ac6b Make Loci.isSubset() strict on units comparisons (#1294)
Loci.isSubest could return true for a Loci that is a superset of the reference Loci. This was happening when the second Loci contains units that are not matched in the reference Loci. See #1292
2024-10-10 12:20:41 +02:00
ludovic autin
4e565808c6 more flexible parsing, can handle different atom_style. 2024-10-09 17:21:47 -07:00
ludovic autin
b2e2b46280 Merge remote-tracking branch 'upstream/master' into lammps_data 2024-10-08 11:52:11 -07:00
ludovic autin
462e675237 trailing space 2024-10-08 11:51:35 -07:00
ludovic autin
6e77b4ce71 added my name 2024-10-08 11:29:13 -07:00
ludovic autin
e8bd67c069 lammpstrj string format no boundary coordinates 2024-10-08 11:21:43 -07:00
Yakov Pechersky
fe502539f9 Remove remaining deprecated SASS lighten call (#1291) 2024-10-08 14:38:23 +02:00
ludovic autin
fe5afa8935 rename to lammps_data, so we can have a lammps_traj parser 2024-10-07 17:02:49 -07:00
ludovic autin
20452e762b renaming 2024-10-07 16:45:33 -07:00
ludovic autin
bc2d19338b naive lammps data parser. Lammps data are initial conformation before simulation or are dumped from a trajectory. 2024-10-07 16:11:47 -07:00
giagitom
719e141dd9 Include ssao transparent -> opaque interactions on ssgi 2024-10-07 19:38:34 +02:00
giagitom
5d9d01d251 Merge remote-tracking branch 'upstream/master' into transparent-ssao 2024-10-07 16:02:54 +02:00
Alexander Rose
39ad2f0719 changelog 2024-10-06 16:18:44 -07:00
Alexander Rose
4f06f724a4 Merge pull request #1290 from molstar/transparency-fixes
Transparency related fixes
2024-10-06 16:15:07 -07:00
Alexander Rose
d5a4b266dd wip, supporting transparent ssao with ssgi 2024-10-05 10:44:35 -07:00
Alexander Rose
e1d92a58be fix missing pre-multiplied alpha for blended & wboit with no fog 2024-10-05 10:21:30 -07:00
Alexander Rose
05ff705c25 fix direct-volume for dpoit with fog off and transparent background on 2024-10-05 10:20:40 -07:00
Alexander Rose
f1cfb29a03 renderer cleanup, remove duplicated/unused code 2024-10-05 10:08:44 -07:00
Alexander Rose
d2f354d949 only set depthTextureSupport when given 2024-10-05 10:04:28 -07:00
David Sehnal
481c6926e7 iOS transparency (#1288)
* iOS transparency

* headers

* changelog
2024-10-04 19:29:12 +02:00
giagitom
f15da87e13 Merge remote-tracking branch 'upstream/master' into transparent-ssao 2024-10-03 16:29:39 +02:00
Xavier M
c34aaf7c31 Add doc page to describe how to access component data (#1283) 2024-10-03 13:53:06 +02:00
Alexander Rose
fb6815bb7d 4.7.1 2024-09-30 20:49:18 -07:00
Alexander Rose
9c78dc76e1 changelog 2024-09-30 20:47:04 -07:00
Alexander Rose
62a0a40a49 Merge pull request #1281 from molstar/auto-res-mode-1
add resolutionMode.auto
2024-09-30 19:47:17 -07:00
Alexander Rose
8d61fa17c8 add resolution mode get param and config item 2024-09-30 19:41:47 -07:00
dsehnal
a460869d4a add resolutionMode.auto 2024-09-30 19:25:12 +02:00
Alexander Rose
a9e0d8236c 4.7.0 2024-09-29 11:12:30 -07:00
Alexander Rose
fc47276fc3 changelog 2024-09-29 11:08:07 -07:00
Huiyu CAI
c60334b97b allow nested components (#1227)
* allow nested components

* header and CHANGELOG edits

* fix header edit

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2024-09-29 20:05:41 +02:00
Alexander Rose
36d58d0ff0 Merge pull request #1273 from pechersky/sass-color
Move away from deprecated SASS explicit color by using `invert` and `change`
2024-09-29 10:30:40 -07:00
Alexander Rose
73529a890b update mesoscale-explorer style.scss 2024-09-29 10:25:44 -07:00
Yakov Pechersky
b9e88d61a1 master lock 2024-09-29 02:17:22 -04:00
Yakov Pechersky
04bfe71131 Merge branch 'master' into sass-color 2024-09-29 02:10:56 -04:00
Yakov Pechersky
b16c51825a clean up imports 2024-09-29 02:09:44 -04:00
Yakov Pechersky
12630dd9f5 fix lighten-darken -- different in light vs dark/blue 2024-09-29 02:05:43 -04:00
Yakov Pechersky
880b73a3c4 Revert "remove color-lower-contrast"
This reverts commit 12ff3aad93.
2024-09-29 02:00:09 -04:00
Yakov Pechersky
63e7ba57bc Revert "remove color-increase-contrast"
This reverts commit 745d8b80d7.
2024-09-29 01:59:20 -04:00
Alexander Rose
bc2d8a4ce1 schema updates 2024-09-28 19:44:51 -07:00
Alexander Rose
9f951dbeac package updates 2024-09-28 19:18:12 -07:00
Alexander Rose
cba1c23b4d Merge pull request #1277 from molstar/me-color-style-fixes
ME: color and style fixes
2024-09-28 18:39:16 -07:00
Alexander Rose
d63663a2ea changelog 2024-09-28 18:32:58 -07:00
Alexander Rose
41c5ebf1f3 fix entities of root group not updated 2024-09-28 18:31:10 -07:00
Alexander Rose
757cf0cd13 fix shinyDof 2024-09-28 16:49:49 -07:00
Alexander Rose
ad8d07cfaa me: only change style not color in quick-styles ui 2024-09-28 14:51:54 -07:00
giagitom
d9f7aafd72 remove unised variable 2024-09-28 15:37:52 +02:00
Alexander Rose
e0b307d1a8 Merge pull request #1276 from molstar/revert-1275-me_preset
Revert "fix preset coloring in ME"
2024-09-26 23:08:04 -07:00
Alexander Rose
729306f142 Revert "adding 'ent:' break the preset (#1275)"
This reverts commit 8568656d44.
2024-09-26 23:07:54 -07:00
giagitom
dc7f745dbe Improve postrpocessing frag and fix outlines blending issues 2024-09-26 18:52:58 +02:00
ludovic autin
8568656d44 adding 'ent:' break the preset (#1275) 2024-09-26 12:35:15 +02:00
giagitom
4dea8849be Fix dpoit blending issue when postprocessing is off 2024-09-26 11:21:39 +02:00
giagitom
a2056d31bf Improvements and transparency blend mode fix 2024-09-25 22:24:33 +02:00
giagitom
c14344d465 - Removing separatedTransparency option
- Removing includeOpacity option
2024-09-24 12:09:00 +02:00
Yakov Pechersky
b7ba8322d1 CHANGELOG 2024-09-23 15:02:57 -04:00
Yakov Pechersky
818a0dac0d npm update sass 2024-09-23 13:45:54 -04:00
Yakov Pechersky
3f96ba92ce reset lock 2024-09-23 13:45:30 -04:00
Yakov Pechersky
b356f217ab imports where necessary 2024-09-23 13:40:10 -04:00
Yakov Pechersky
a968fb0984 update sass dep 2024-09-23 13:24:13 -04:00
Yakov Pechersky
745d8b80d7 remove color-increase-contrast
use `color.adjust` instead
2024-09-23 13:20:50 -04:00
Yakov Pechersky
12ff3aad93 remove color-lower-contrast
use `color.adjust` instead
2024-09-23 13:20:02 -04:00
Alexander Rose
e8501b73a5 illumination params description 2024-09-23 09:51:50 -07:00
Yakov Pechersky
9c07da6de6 also set alpha using api 2024-09-23 12:35:53 -04:00
Yakov Pechersky
8c2e58b67c Move away from deprecate SASS explicit color by using invert
In building, saw
```
Deprecation Warning: The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0.

More info: https://sass-lang.com/d/legacy-js-api
```
Instead of using `color.channel(..., "red")`, we really were deconstructing rgb by channel just to invert.
So use the underlying SASS api directly.
2024-09-23 12:30:51 -04:00
giagitom
7242494123 Try to handle blended transparency 2024-09-23 12:49:19 +02:00
giagitom
adfea9f336 Merge branch 'master' of https://github.com/molstar/molstar into transparent-ssao 2024-09-23 11:12:02 +02:00
Alexander Rose
80d7649dbb illumination params description 2024-09-22 19:29:43 -07:00
David Sehnal
6e63bb4283 ErrorContext util & usage in MVS (#1254)
* error context util & usage in MVS

* changelog
2024-09-22 10:12:00 +02:00
Alexander Rose
ba7a4137fe changelog 2024-09-21 14:56:41 -07:00
Alexander Rose
2ca0a4291b Merge pull request #1269 from molstar/resolution-mode
Resolution mode
2024-09-21 14:54:24 -07:00
Alexander Rose
32a1a35a96 remove debug code 2024-09-21 10:36:45 -07:00
Alexander Rose
df129d8ce3 Merge branch 'master' of https://github.com/molstar/molstar into resolution-mode 2024-09-21 10:24:03 -07:00
Alexander Rose
c346da9f6d Merge pull request #1253 from molstar/illumination
Illumination mode
2024-09-21 10:23:38 -07:00
Alexander Rose
de15a3d05d add resolutionMode parameter to Canvas3DContext 2024-09-21 10:22:57 -07:00
Alexander Rose
392b42f6f0 fix impostor sphere interior normal when using orthographic projection 2024-09-21 10:10:28 -07:00
Alexander Rose
46a9b587b4 handle 0 denoise threshold 2024-09-21 10:08:30 -07:00
giagitom
1b4d42cc1e Avoid rendering textures used by getMappedDepth when ssao multiScale is off 2024-09-19 19:50:29 +02:00
giagitom
7c8f6255c5 Merge branch 'master' of https://github.com/molstar/molstar into transparent-ssao 2024-09-19 19:09:37 +02:00
Alexander Rose
3334a636c5 Merge branch 'master' of https://github.com/molstar/molstar into illumination 2024-09-15 14:48:26 -07:00
Alexander Rose
94d52dddda fix me color update 2024-09-15 14:48:10 -07:00
Alexander Rose
b35a73b50f tweak params 2024-09-15 14:01:33 -07:00
Alexander Rose
7fde6a810d Merge branch 'master' of https://github.com/molstar/molstar into illumination 2024-09-15 13:42:45 -07:00
Alexander Rose
843eae1e49 Merge pull request #1262 from molstar/shadow-multiple-lights
fix shadows with multiple lights
2024-09-15 13:41:29 -07:00
Alexander Rose
8513183684 Merge branch 'master' of https://github.com/molstar/molstar into illumination 2024-09-14 14:35:41 -07:00
Alexander Rose
790bebf302 normalize direct light for shadows 2024-09-14 14:24:30 -07:00
Alexander Rose
0fb76261e8 spec & avoid compiling tracing shaders when unsupported 2024-09-14 13:58:51 -07:00
Alexander Rose
53c69640b7 spec 2024-09-14 13:46:36 -07:00
Alexander Rose
d70cef8ad3 fix shadows with multiple lights 2024-09-14 13:42:47 -07:00
Alexander Rose
a84a23cbcc remove console.log 2024-09-14 13:27:46 -07:00
Alexander Rose
736f2dc657 ssao tweaks
- linear filter always supported for uint8
- don't use mapped depth in non-multiscale to avoid issues on some mobile devices
2024-09-14 13:17:49 -07:00
Alexander Rose
06295fd586 add shader precision formats info to webgl context 2024-09-14 13:16:00 -07:00
Alexander Rose
e9f4d95dc3 Merge pull request #1260 from molstar/xtc-parser-fix
fix no-compression xtc parser
2024-09-14 13:14:33 -07:00
Alexander Rose
223e3b6fbf Merge branch 'master' into xtc-parser-fix 2024-09-14 13:14:26 -07:00
Alexander Rose
16c967b674 changelog 2024-09-14 13:14:01 -07:00
Alexander Rose
a6a1f0621e improve viewport-screenshot tracing
- make sample count independent of performance for reproducible quality
2024-09-14 13:11:49 -07:00
Alexander Rose
60cb722343 avoid compiling tracing shaders when unsupported 2024-09-14 13:08:54 -07:00
Alexander Rose
2569fe9577 improve direct light shadows 2024-09-14 13:07:25 -07:00
Alexander Rose
be717133ef fix tracing on mobile
- specify precision highp int
2024-09-14 13:06:06 -07:00
Alexander Rose
231d585236 always wait for gpu in canvas3d.render 2024-09-14 13:04:53 -07:00
etongfu
098faf129c Fix mol2 status_bit read error (#1251)
* fix: Fix mol2 status_bit read error

* feat: Retrieve the number of columns using `streaming tokenizer` and remove readLineElements

* fix: remove useless code

* fix: fix status_bits array read error

* chore: remove dataLines code.

* chore: Add contributor information

---------

Co-authored-by: tongfu.e <tongfu.e@xtalpi.com>
2024-09-11 18:58:14 +02:00
dsehnal
0b39ad8341 fix no-compression xtc parser 2024-09-10 19:00:30 +02:00
Alexander Rose
c0117c41e6 Merge branch 'master' of https://github.com/molstar/molstar into illumination 2024-09-08 19:32:30 -07:00
Alexander Rose
0ce41e989a Merge pull request #1255 from giagitom/enable-depth-xray
Enable dXrayShaded define when using depth variant
2024-09-08 16:58:29 -07:00
Alexander Rose
b6885a0d76 improve parameter adjustment 2024-09-07 23:07:42 -07:00
Alexander Rose
125120fcab avoid rendering illumination iteration when previous gpu are not complete 2024-09-07 21:39:02 -07:00
Alexander Rose
2147a5c3fb add automatically adjusted denoise threshold 2024-09-07 11:41:09 -07:00
Alexander Rose
8c7d5b9585 remove extra timer.mark 2024-09-07 11:33:33 -07:00
Alexander Rose
aa4c36885d make userInteractionReleaseMs a param 2024-09-07 11:31:23 -07:00
Alexander Rose
4ee4788378 make "glow" from overly lit bounce rays optional 2024-09-07 11:28:57 -07:00
Alexander Rose
47aea2b12f pause canvas3d while rendering screenshot 2024-09-07 11:23:41 -07:00
Alexander Rose
490bc82ee6 properly wait for gpu to finish when rendering image 2024-09-07 11:22:21 -07:00
Alexander Rose
0d24c636a3 improve webgl timer, support optional note 2024-09-07 11:21:26 -07:00
Alexander Rose
5a81b4f375 add illumination option to viewer app 2024-09-07 11:09:59 -07:00
Alexander Rose
73b90ffb5c fix normal for approximate sphere 2024-09-07 11:09:22 -07:00
giagitom
02e795b265 Update headers 2024-09-05 01:46:31 +02:00
giagitom
325aa74331 changelog 2024-09-05 01:45:22 +02:00
giagitom
1efe2eb329 Enable dXrayShaded define when using depth variant 2024-09-05 01:37:13 +02:00
giagitom
1ba00c7fa8 Reverting changes 2024-09-05 01:32:19 +02:00
giagitom
1bfc2fe511 Ssao initialization fixes 2024-09-04 12:56:17 +02:00
dsehnal
1e895f3c8c only render first iteration of illumination when actively interacting 2024-09-03 18:18:23 +02:00
dsehnal
028c283043 undo image pass render tweak 2024-09-03 18:06:41 +02:00
dsehnal
144ed51100 fallback to standard rendering when interacting with the structure 2024-09-03 17:16:56 +02:00
Alexander Rose
e3c2ec4561 fix image.frag 2024-09-02 22:48:34 -07:00
Alexander Rose
84dd957983 temp 2024-09-02 22:38:18 -07:00
Alexander Rose
1093a4f6ad lint 2024-09-02 22:37:13 -07:00
Alexander Rose
c4fdc43aa0 changelog 2024-09-02 14:32:25 -07:00
Alexander Rose
15da722af5 add illumination pass 2024-09-02 14:24:27 -07:00
Alexander Rose
eec2d2a720 add tracing pass 2024-09-02 14:23:09 -07:00
giagitom
1766fad6f7 Enable ssao on transparency by default 2024-09-02 15:40:29 +02:00
giagitom
d4775812ad Fixes 2024-09-02 15:00:03 +02:00
giagitom
6cf887d44d remove comments 2024-09-02 09:16:56 +02:00
giagitom
bbb2bee2ae changelog 2024-09-01 21:10:39 +02:00
giagitom
73763b444e Merge remote-tracking branch 'upstream/master' into transparent-ssao 2024-09-01 21:07:05 +02:00
giagitom
9508e01e59 Add transparent ssao support 2024-09-01 19:10:59 +02:00
Alexander Rose
375db11e9b add visual density parameter to estimate object thickness 2024-08-30 13:56:56 -07:00
Alexander Rose
b1b1972684 add bloom to simple-settings ui 2024-08-29 18:54:47 -07:00
Alexander Rose
ce0d4cbc4e fix renderer.clearDepth 2024-08-29 18:52:39 -07:00
Alexander Rose
127d9bc94e me: increase ultra graphics mode thresholds 2024-08-29 18:48:20 -07:00
Alexander Rose
860df1a898 Merge pull request #1249 from molstar/fix-1245
Fix handling of PDB files
2024-08-29 18:44:33 -07:00
Alexander Rose
51b36e90f0 Merge branch 'master' into fix-1245 2024-08-29 18:44:24 -07:00
Alexander Rose
48b19e149b Merge pull request #1250 from JonStargaryen/master
Sequence Panel: Improve visuals of unmodeled sequence positions
2024-08-29 14:05:08 -07:00
Sebastian Bittrich
5a87d9dbf5 Seq Panel: adjust font color of missing positions (closes #1248) 2024-08-29 13:38:54 -07:00
Sebastian Bittrich
c07b4ba550 Seq Panel: default cursor for missing positions 2024-08-29 13:11:53 -07:00
Alexander Rose
8a99e3e3fd load no default tour 2024-08-29 10:31:06 -07:00
Alexander Rose
571f54f4e6 lint 2024-08-29 10:28:19 -07:00
Alexander Rose
15cd7b9c13 Fix handling of PDB files
- that have chains with same id separated by TER record
2024-08-29 10:22:16 -07:00
Alexander Rose
0d21b399b5 4.6.0 2024-08-28 16:26:11 -07:00
Alexander Rose
94ad0bf75c changelog 2024-08-28 16:22:54 -07:00
Alexander Rose
2c44286ca5 schema update 2024-08-28 16:20:33 -07:00
Alexander Rose
23705727ac package updates 2024-08-28 16:19:44 -07:00
Alexander Rose
0a173d230c Merge pull request #1242 from molstar/library-docs
Using esbuild documentation
2024-08-28 15:01:27 -07:00
Alexander Rose
f8987af0e8 Merge pull request #1247 from corredD/revision_p
PR for Revision
2024-08-28 14:58:17 -07:00
Alexander Rose
e046b80bf2 use now from util 2024-08-28 14:57:34 -07:00
Ludovic Autin
f8d6f1d010 timer for loadURL 2024-08-28 12:15:50 -07:00
ludovic autin
579190b9ce embedding.html page example 2024-08-28 11:09:42 -07:00
dsehnal
e44e29eb9f using esbuild docs 2024-08-27 11:35:10 +02:00
ludovic autin
589cec24e5 more timer. For some reason it doesnt report anything with MG model 2024-08-26 16:46:37 -07:00
ludovic autin
fd999953f9 default MOL loading if no url model given
timingmode for loading mesoscale model ( in loadURL function )
2024-08-26 16:34:16 -07:00
Alexander Rose
523dfe7928 Merge branch 'master' of https://github.com/molstar/molstar 2024-08-24 15:01:12 -07:00
Alexander Rose
b2f26e6b1d fix timer: no resolve when capturing stats 2024-08-24 14:59:39 -07:00
Alexander Rose
dc45bf3915 optimize camera.getPixelSize 2024-08-24 14:59:30 -07:00
Sebastian Bittrich
96e22e25cf ModelServer & VolumeServer: add health-check (#1233)
* VolumeServer: add health-check

* ModelServer: add health-check
2024-08-23 12:49:17 +02:00
Alexander Rose
051beb3c3c Merge pull request #1230 from molstar/compression-api
compression-api
2024-08-19 22:38:05 -07:00
Alexander Rose
2ba3d67520 Merge branch 'master' into compression-api 2024-08-19 22:37:57 -07:00
Alexander Rose
cd30d9c1a3 Merge pull request #1231 from molstar/cg-improvements
improve coarse-grained models handling
2024-08-19 22:37:02 -07:00
Alexander Rose
7d32aa8276 Merge pull request #1224 from molstar/screenshot-task
wrap screenshot & image generation in a Task
2024-08-19 22:36:11 -07:00
Alexander Rose
f837b46da1 Merge branch 'master' into screenshot-task 2024-08-19 22:36:03 -07:00
Alexander Rose
c6107ff694 fix hasCompressionStreamSupport 2024-08-19 22:31:36 -07:00
Alexander Rose
2e7228f88b improve coarse-grained models handling
- Add Zhang-Skolnick secondary-structure assignment method which handles coarse-grained models (#49)
- Calculate bonds for coarse-grained models
2024-08-18 13:44:57 -07:00
Alexander Rose
e8825eac5d fix cartoon representation not updated when secondary structure changes 2024-08-18 13:36:22 -07:00
Alexander Rose
1a88126af8 add pdbx_structure_determination_methodology mmcif field and Model helpers 2024-08-18 13:32:57 -07:00
Alexander Rose
c4a6eba448 compression-api 2024-08-17 19:20:48 -07:00
Alexander Rose
fc7e9501b2 add more coloring options to cartoon theme 2024-08-17 16:35:25 -07:00
Alexander Rose
1dfd52db43 add formal-charge color theme 2024-08-17 16:35:07 -07:00
Alexander Rose
5510b28656 fix polymer-gap visual coloring with cartoon theme 2024-08-17 16:34:26 -07:00
Alexander Rose
e94abdb159 Merge pull request #1120 from giagitom/tubular-alpha-helices-round-cap
Add round caps on tubular alpha helices
2024-08-17 16:07:21 -07:00
Alexander Rose
7015607244 tweaks 2024-08-17 16:05:44 -07:00
Alexander Rose
7ff37d7dcc Merge pull request #1228 from JonStargaryen/master
Support for AlphaFold DB BinaryCIF files and 4-character PDB-Dev IDs
2024-08-17 15:52:59 -07:00
Sebastian Bittrich
3abc2da106 cl 2024-08-16 14:32:50 -07:00
Sebastian Bittrich
f9c498177a PDB-Dev: support 4-char PDB ID 2024-08-16 14:31:37 -07:00
Sebastian Bittrich
872c6483be AFDB: bcif support 2024-08-16 13:55:10 -07:00
Sebastian Bittrich
53288e4e9d typo 2024-08-16 13:27:59 -07:00
giagitom
d6b045594c Round cap fixes 2024-08-14 15:04:29 +02:00
giagitom
aa86111de7 Merge branch 'master' of https://github.com/molstar/molstar into tubular-alpha-helices-round-cap 2024-08-12 10:18:27 +02:00
Alexander Rose
040473388e wrap screenshot & image generation in a Task 2024-08-10 15:38:44 -07:00
Alexander Rose
f474615729 typo 2024-08-10 15:37:06 -07:00
Alexander Rose
92559e456e passes refactor 2024-08-10 15:35:44 -07:00
Alexander Rose
b2434ea0d0 Merge pull request #1220 from molstar/bond-visibility
Avoid calculating bonds for water units when `ignoreHydrogens` is on
2024-08-10 12:38:27 -07:00
Alexander Rose
6cf0ce5574 Merge branch 'master' into bond-visibility 2024-08-10 12:38:20 -07:00
Alexander Rose
518a40f0ba defer sphere3d cloning 2024-08-10 12:36:42 -07:00
Alexander Rose
387e87bfda Merge pull request #1222 from molstar/entity-id-multi-model
Improve entity-id coloring for structures with multiple models from the same source
2024-08-10 12:03:44 -07:00
Alexander Rose
4fac2a5cd6 fix changelog dates 2024-08-10 12:01:42 -07:00
Alexander Rose
f5f3ea84d4 Improve entity-id coloring for structures with multiple models from the same source 2024-08-03 12:51:45 -07:00
Alexander Rose
4b3d470dde Avoid calculating bonds for water units when ignoreHydrogens is on
- Add `Water` trait to `Unit`
- Remove unsued code from `Structure.ofModel`
- Try reuse boundary in element-cross visual
2024-08-03 12:00:27 -07:00
Alexander Rose
8513a44e8c Improved prmtop format support (CTITLE, %COMMENT) 2024-08-03 11:53:22 -07:00
Alexander Rose
84b54d97df Fix missing Sequence UI update on state object removal 2024-08-03 11:49:09 -07:00
Alexander Rose
34606f258e tweak objectForEach type 2024-08-03 11:47:08 -07:00
Alexander Rose
2c10dd46a0 4.5.0 2024-07-28 17:34:12 -07:00
Alexander Rose
d4c80fc995 changelog 2024-07-28 17:30:50 -07:00
Alexander Rose
e1c00f65a5 package updates 2024-07-28 17:29:36 -07:00
Alexander Rose
012bc9e8e8 Merge pull request #1209 from molstar/fix-traj-color-update
ensure color-theme gets correctly updated
2024-07-28 17:27:00 -07:00
Alexander Rose
a99083107c Merge pull request #1207 from giagitom/separed-postprocessing-passes
Separed postprocessing passes
2024-07-28 17:23:15 -07:00
Alexander Rose
7e93bb0dda update filter in schema 2024-07-28 17:20:44 -07:00
giagitom
9735cce043 Merge branch 'master' of https://github.com/molstar/molstar into separed-postprocessing-passes 2024-07-28 12:53:06 +02:00
Alexander Rose
78e1d76f5e Merge branch 'master' into fix-traj-color-update 2024-07-25 22:14:54 -07:00
Alexander Rose
18b1492d54 schema update
- force missing auth_seq_id fields to be int
2024-07-25 22:13:10 -07:00
Alexander Rose
6116b2fea5 Merge pull request #1211 from molstar/ssao-filter
use texture linear filter for SSAO when available
2024-07-25 22:11:10 -07:00
Alexander Rose
6ef8fd2b64 handle missing theme updates
- Fix trajectory-index color-theme not always updated (#896)
 - Fix bond cylinders not updated on size-theme change with `adjustCylinderLength` enabled (#1215)
2024-07-25 22:08:39 -07:00
giagitom
9319805d36 Fix textue size not updating correctly 2024-07-24 11:58:21 +02:00
Alexander Rose
5027ad37d7 use texture linear filter for SSAO when available 2024-07-22 20:55:02 -07:00
Alexander Rose
70bd0c25c4 schema update
- add struct_mon_prot_cis mmcif category
2024-07-22 20:52:50 -07:00
Alexander Rose
1a5c7f5437 cleanup 2024-07-21 14:18:35 -07:00
Alexander Rose
4a9505c334 Merge branch 'master' of https://github.com/molstar/molstar into fix-traj-color-update 2024-07-20 13:40:41 -07:00
Alexander Rose
b43ec9ed45 Merge branch 'master' of https://github.com/molstar/molstar 2024-07-20 13:37:46 -07:00
Alexander Rose
eb9c6d542b package updates 2024-07-20 13:37:44 -07:00
Alexander Rose
2ec0911821 Merge pull request #1201 from rjdirisio/further-sass-syntax-fixes
Continue fixing syntax for Sass deprecation of special semantics
2024-07-20 13:31:28 -07:00
Alexander Rose
bbb34c8a27 ensure color-theme gets correctly updated
- fixes trajectory-index color-theme (#896)
2024-07-20 13:30:26 -07:00
giagitom
1bcb8d6486 Merge remote-tracking branch 'upstream/master' into separed-postprocessing-passes 2024-07-17 16:29:31 +02:00
giagitom
630b5ca203 Separated postprocessing passes 2024-07-17 16:16:53 +02:00
Alexander Rose
5b2ed784e1 Merge pull request #1204 from corredD/patch-1
Update states.tsx docs url
2024-07-16 21:02:18 -07:00
Alexander Rose
11c9a83ee7 Merge pull request #1205 from corredD/ME_fix_loadUrl
Load URL now behave like drag/drop.
2024-07-16 21:00:39 -07:00
ludovic autin
2d1b61647a Load URL now behave like drag/drop. Fix some error loading state snapshot tours 2024-07-16 11:46:25 -07:00
ludovic autin
fa3797a738 Update states.tsx docs url 2024-07-16 10:40:43 -07:00
Alexander Rose
fc60c0c980 Merge pull request #1191 from bergwerf/aromatic_links
Add unadjusted position for aromatic link dashes
2024-07-14 10:42:34 -07:00
Alexander Rose
372ca20980 simplify render-structure-grid test 2024-07-14 10:35:35 -07:00
Alexander Rose
b0aad9f1ff add missing adjust arg 2024-07-14 10:15:35 -07:00
Alexander Rose
40e45adbb0 Merge branch 'master' of https://github.com/molstar/molstar into pr/bergwerf/1191 2024-07-14 10:05:40 -07:00
Alexander Rose
5b43a2cee9 me ui header tweaks 2024-07-14 10:03:10 -07:00
Alexander Rose
a319a0daa8 update me deploy path 2024-07-13 18:44:19 -07:00
Alexander Rose
79f812d0e1 update me deploy path 2024-07-13 18:01:34 -07:00
Ryan DiRisio
45611a25a5 Continue fixing syntax 2024-07-12 12:25:57 -04:00
Ryan DiRisio
77be659915 Update misc.scss msp-no-webgl syntax to be in line with latest sass requirements (#1199)
* wrap args in ampersand for msp-no-webgl

* update changelog

---------

Co-authored-by: Ryan DiRisio <rdirisio@treeline.bio>
2024-07-12 16:54:40 +02:00
Herman Bergwerf
5986250ed9 Make Trackball spin in radians per second (#1193)
* Make Trackball spin in radians per second.

* Add line to changelog.
2024-07-08 18:03:02 +02:00
Herman Bergwerf
8156c672b0 Fix formatting. 2024-07-08 15:59:59 +02:00
Herman Bergwerf
a443512102 Merge branch 'master' into aromatic_links 2024-07-08 15:52:14 +02:00
Herman Bergwerf
4b921319a8 Improve pinch event (#1192)
* Improve pinch event.

* Apply feedback.

* Update changelog and headers.

* Add me to contributers.
2024-07-08 15:39:00 +02:00
Herman Bergwerf
6329820a87 Add line to changelog. 2024-07-08 15:14:26 +02:00
Herman Bergwerf
91e4b0c3d6 Add me to file headers. 2024-07-08 15:11:53 +02:00
Herman Bergwerf
7666617857 Alter LinkBuilderProps.position signature. 2024-07-08 15:10:04 +02:00
Herman Bergwerf
19be1090b3 Add unadjusted position for aromatic link dashes. 2024-07-07 16:39:38 +02:00
Alexander Rose
354438052e Merge pull request #1176 from papillot/hbonds_with_explicit_hydrogens
Take into account explicit hydrogens when creating and representing Hydrogen bonds (regular and weak)
2024-07-06 12:03:05 -07:00
Alexander Rose
b72444b213 Merge branch 'master' of https://github.com/molstar/molstar into pr/papillot/1176 2024-07-06 11:55:51 -07:00
Alexander Rose
179078f45c remove unused postprocessing code (#1189) 2024-07-06 11:48:53 -07:00
Alexander Rose
1dbc23fe91 dof fixes
- handle pixel ratios =! 1
- ensure transparent depths is available
2024-07-06 11:29:31 -07:00
Paul Pillot
ff4dec9fea code styling, typos 2024-07-01 09:43:10 +02:00
Paul Pillot
6ea51c07b4 update changelog, author information 2024-07-01 09:32:11 +02:00
Paul Pillot
f4cebb9195 manage weak hydrogen bonds position
Previous code was filtering on `polar` hydrogens when looking for an anchorage.
This was not necessary as an acceptor for a regular HBond has only polar hydrogens.
It was removed to make the same code compliant with weak C-H bonds.
2024-07-01 09:27:46 +02:00
Paul Pillot
cbe5f0dc7c Add ignoreHydrogens parameter to geometry options
This is different from the "Hydrogens: Show All/Hide All/Only Polar" as it is used for filtering out which contacts are represented, while the latter is used to control the display (point to the heavy atoms when H are hidden).
In other words, by considering the H atoms in the geometric constraints, some candidate H bonds are discarded (e.g. because the donor does not have H atoms in the right orientation), while the visibility of hydrogens parameters will still show the same number of hydrogen bonds, just not pointing to the same atoms.
2024-07-01 09:27:46 +02:00
Paul Pillot
0ac8b565b5 Use explicit hydrogens to calculate angles
Donor: at least one hydrogen on the donor must be within the donor angle deviation towards the acceptor (angle H-X-A < 45º)

Acceptor: use the closest H on the donor to compute the angles. Ensure that every H atom on the acceptor complies with the ideal angle (no bonded atom from acceptor should be in the way).
2024-07-01 09:27:46 +02:00
Paul Pillot
4f38d4d943 relocate hbond on hydrogens from donors only
This avoids hbonds between 2 hydrogen atoms
2024-07-01 09:27:46 +02:00
Alexander Rose
0af84eb6b5 4.4.1 2024-06-30 15:53:58 -07:00
Alexander Rose
aa2d19478b changelog 2024-06-30 15:51:28 -07:00
Alexander Rose
e035b834a6 update package-lock 2024-06-30 15:43:34 -07:00
Alexander Rose
2b2dfd9245 4.4.0 2024-06-30 15:35:36 -07:00
Alexander Rose
678790efa3 changelog 2024-06-30 15:32:59 -07:00
Alexander Rose
a121c5e2cd fix missing unit.kind check 2024-06-30 13:31:09 -07:00
Alexander Rose
47b242244e schema updates 2024-06-30 13:25:30 -07:00
Alexander Rose
2b9d3fd33a packge updates 2024-06-30 13:25:18 -07:00
Alexander Rose
81404036a2 Merge pull request #1182 from corredD/driver_tour
Mesoscale Explorer Driver tour
2024-06-30 13:15:40 -07:00
Alexander Rose
e2dc15cf0f cleanup, fixes & changelog 2024-06-30 13:14:58 -07:00
Ludovic Autin
365a91879f clean up 2024-06-30 10:10:06 -07:00
Ludovic Autin
e47e0eb51a Merge branch 'master' into driver_tour 2024-06-30 10:02:31 -07:00
Alexander Rose
390046e38f Merge pull request #1184 from JonStargaryen/master
Remove support for density data from edmaps.rcsb.org
2024-06-29 22:27:01 -07:00
Sebastian Bittrich
b8eb5191a2 rm support for edmaps.rcsb.org, closes #1127 2024-06-28 11:16:53 -07:00
ludovic autin
4cc416ca28 driver is in the extra folder of molstar.github.io 2024-06-27 11:38:30 -07:00
ludovic autin
f4b2458390 Merge branch 'master' into driver_tour 2024-06-27 10:02:39 -07:00
David Sehnal
1cad6eef74 doNotDisposeCanvas3DContext option in PluginContext.dispose (#1180)
* doNotDisposeCanvas3DContext option in PluginContext

* header
2024-06-27 15:45:05 +02:00
Alexander Rose
2923be6006 Merge pull request #1175 from corredD/list_tours
file holdng the molx available tour.
2024-06-26 21:26:14 -07:00
ludovic autin
70959641a1 Merge branch 'master' into driver_tour
# Conflicts:
#	src/apps/mesoscale-explorer/ui/panels.tsx
#	src/apps/mesoscale-explorer/ui/states.tsx
2024-06-26 10:35:43 -07:00
ludovic autin
051608f56c file holdng the molx available tour. 2024-06-24 13:13:32 -07:00
Alexander Rose
71c1a4e85b Merge pull request #1167 from corredD/ME_quick_style
Mesoscale Explorer Quick Style
2024-06-23 22:30:13 -07:00
Alexander Rose
ba06c9e413 changelog 2024-06-23 22:29:23 -07:00
Ludovic Autin
8e4dfd1ffd default collapsed for structure measurement like the quickstyle. 2024-06-23 17:59:53 -07:00
Ludovic Autin
fac8aa529f spelling + shiny style 2024-06-23 17:51:57 -07:00
Ludovic Autin
d35b4b5e62 Merge branch 'master' into ME_quick_style 2024-06-23 17:13:38 -07:00
Alexander Rose
dd1789478b Merge pull request #1161 from corredD/me_snapshot_descrption
Mesoscale Explorer Snapshot Description
2024-06-23 17:01:33 -07:00
Alexander Rose
af27a00a01 changelog 2024-06-23 17:00:55 -07:00
Ludovic Autin
17cea8f99c not sure why this changes was not in the merge. 2024-06-23 16:14:14 -07:00
Ludovic Autin
4f6d5a7dc7 Merge branch 'master' into me_snapshot_descrption
# Conflicts:
#	src/apps/mesoscale-explorer/ui/panels.tsx
use custom snapshotDescription
2024-06-23 16:08:23 -07:00
ludovic autin
857972653e Merge branch 'molstar:master' into ME_quick_style 2024-06-23 15:47:32 -07:00
Alexander Rose
98ff0f5c55 Merge pull request #1169 from molstar/customize-snapshot-desc
Ability to customize snapshot description component
2024-06-23 15:20:13 -07:00
Alexander Rose
43803a91ea Merge pull request #1170 from molstar/cel-shading-artifacts
cel-shading artifacts
2024-06-23 15:19:13 -07:00
Alexander Rose
8a1bab8bcb Merge pull request #1171 from giagitom/clean_solidInterior_transparent_cylinders
Clean solid interior transparent cylinders
2024-06-23 15:18:55 -07:00
Ludovic Autin
17a47faaff Merge branch 'master' into ME_quick_style2
# Conflicts:
#	src/apps/mesoscale-explorer/ui/panels.tsx
2024-06-23 15:10:14 -07:00
Ludovic Autin
f793167e91 cleanup, fix cel-shading spelling 2024-06-23 15:06:16 -07:00
giagitom
d1c2c8e837 Updated headers and changelog 2024-06-23 23:42:27 +02:00
giagitom
5d7ef8196e Merge branch 'master' of https://github.com/molstar/molstar into clean_solidInterior_transparent_cylinders 2024-06-23 23:39:21 +02:00
giagitom
e0715cbf5c clean solidInterior transparent cylinders 2024-06-23 23:33:11 +02:00
Alexander Rose
1af8522de3 cel-shading artifacts
- clamp metalness & roughness to look better
2024-06-23 14:30:53 -07:00
Alexander Rose
c6becd5741 Merge pull request #1166 from corredD/ME_select_behavior
Mesoscale Explorer mouse select behavior
2024-06-23 14:06:58 -07:00
Alexander Rose
0ca368f29f changelog 2024-06-23 14:06:45 -07:00
Alexander Rose
5039a448ad cleanup 2024-06-23 13:44:23 -07:00
Ludovic Autin
9ef38f02c9 code fix, and make sure style stay when changing color scheme in the tree. 2024-06-23 10:41:00 -07:00
dsehnal
66f4ff1140 fix types 2024-06-23 18:48:25 +02:00
dsehnal
cc077656a9 ability to customize snapshot description component 2024-06-23 18:30:31 +02:00
Ludovic Autin
3ef1a2ec0a remove gamma, and use exposure instead. Expose renderer/trackball advance settings in left panel.
only expose couple of quick-style.
2024-06-22 13:04:31 -07:00
ludovic autin
144bf6954e apply gamma only if > 1 2024-06-21 11:39:40 -07:00
ludovic autin
50e5538148 - Fixed shadow fallof
- Add Gamma effect
- Quick Style UI default / illustrative cell shading / DOF plastic
2024-06-21 11:32:13 -07:00
ludovic autin
efe95f92c7 also added the StructureMeasurementsControls in the right panel below the selection. 2024-06-21 10:16:06 -07:00
ludovic autin
09f858a755 mouse left click on label with snapsot key load the snapshot. mouse hover label with protein name highlight entities with the same name 2024-06-21 09:48:51 -07:00
ludovic autin
e7082d4ccc focusinfo and other ID 2024-06-19 10:44:19 -07:00
ludovic autin
732a8f4bd0 Merge branch 'master' into driver_tour
# Conflicts:
#	src/apps/mesoscale-explorer/ui/entities.tsx
#	src/apps/mesoscale-explorer/ui/panels.tsx
2024-06-19 10:00:32 -07:00
ludovic autin
82ca06b29e use MesoMarkdownAnchor for the focusInfo 2024-06-19 09:26:01 -07:00
ludovic autin
a05429f13f Merge branch 'master' into me_snapshot_descrption
# Conflicts:
#	src/apps/mesoscale-explorer/data/state.ts
#	src/apps/mesoscale-explorer/ui/entities.tsx
#	src/apps/mesoscale-explorer/ui/panels.tsx
2024-06-19 09:21:29 -07:00
Alexander Rose
377de7ad40 Merge pull request #1118 from giagitom/quantized-light
Add quantized lighting option
2024-06-18 21:50:48 -07:00
Alexander Rose
74f4d00c8d changelog 2024-06-18 21:50:21 -07:00
Alexander Rose
be3825372e lint fix 2024-06-18 21:47:12 -07:00
Alexander Rose
d62c5c9050 Merge pull request #1157 from corredD/me_selection_description
Mesoscale explorer entities selection description
2024-06-18 21:45:21 -07:00
ludovic autin
9ba5112beb revert base css class, create the custom css class in me app style.css .msp-snapshot-description-me 2024-06-17 10:15:16 -07:00
ludovic autin
048658ee39 min,max text size 2024-06-17 09:50:42 -07:00
ludovic autin
2918081dd9 Merge branch 'master' into me_selection_description 2024-06-17 09:43:03 -07:00
ludovic autin
1a67868c07 Merge branch 'master' into me_snapshot_descrption 2024-06-17 09:42:35 -07:00
Alexander Rose
525dfaddd2 add cel-shading
- celShaded geometry parameter
- celSteps renderer parameter
2024-06-16 12:45:06 -07:00
Alexander Rose
8aa12c0d31 Merge branch 'master' of https://github.com/molstar/molstar into pr/giagitom/1118 2024-06-15 14:25:47 -07:00
Alexander Rose
8cb464a686 Merge pull request #1159 from molstar/plddt-bfactor
support reading score from B-factor in pLDDT color theme
2024-06-15 14:24:09 -07:00
Alexander Rose
e0371d7e32 Update src/extensions/model-archive/quality-assessment/color/plddt.ts
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2024-06-15 14:22:43 -07:00
Ludovic Autin
e7da6bc194 duplicate preventDefault, rename function 2024-06-15 10:32:14 -07:00
ludovic autin
933869b5e1 Update src/apps/mesoscale-explorer/ui/entities.tsx
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2024-06-15 10:21:19 -07:00
Ludovic Autin
5d6adc46fe simplify get info(). fix import 2024-06-15 10:08:00 -07:00
ludovic autin
b8a98efcaf Update src/apps/mesoscale-explorer/ui/entities.tsx
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2024-06-15 10:03:58 -07:00
ludovic autin
53b358f70a Update src/apps/mesoscale-explorer/ui/entities.tsx
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2024-06-15 10:03:34 -07:00
ludovic autin
bce9e5b0ad Update src/apps/mesoscale-explorer/data/mmcif/model.ts
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2024-06-15 10:03:06 -07:00
ludovic autin
cf7f9d6aba lint 2024-06-14 11:05:02 -07:00
ludovic autin
6af1bc5def snapshot description customized component to support more advanced markdown command for highlighting and selection 2024-06-14 10:57:00 -07:00
ludovic autin
936808e271 using driver.js 1.3.1 design an introductory tour of the user interface. 2024-06-14 10:30:54 -07:00
ludovic autin
8b985d0424 rename the descriptino holder; separate from the selection UIComponent and create its own component. Change its position to below the tree. 2024-06-14 09:40:05 -07:00
ludovic autin
b290cf121a Merge branch 'master' into me_selection_description 2024-06-14 08:57:30 -07:00
Alexander Rose
89df6cec42 support reading score from B-factor in pLDDT color theme 2024-06-13 23:28:14 -07:00
Alexander Rose
fc5fc7fcdb Merge pull request #1134 from molstar/occlusion-fixes
fixes for SSAO edge artifacts
2024-06-13 23:22:17 -07:00
Alexander Rose
a1de5bb304 Merge branch 'master' of https://github.com/molstar/molstar into occlusion-fixes 2024-06-13 23:17:14 -07:00
Alexander Rose
25c8a41e91 selection description tweaks 2024-06-13 22:54:34 -07:00
ludovic autin
959249b572 added getCellDescription to generate the markdown for the given cell. For mmCIF files use the entity row info to genereate a description. 2024-06-13 11:16:55 -07:00
Alexander Rose
44610b8b1a update cif schema 2024-06-12 21:50:49 -07:00
Alexander Rose
4070453209 Merge branch 'master' of https://github.com/molstar/molstar into pr/corredD/1157 2024-06-12 21:48:10 -07:00
Alexander Rose
cf2193f4fc Merge pull request #1156 from corredD/me_camera_behavior
mesoscale explorer centerOnly behavior
2024-06-12 21:41:46 -07:00
Alexander Rose
bfc0a3d1fe changelog 2024-06-12 21:41:28 -07:00
Alexander Rose
53a2155d8c Merge branch 'master' of https://github.com/molstar/molstar into pr/corredD/1156 2024-06-12 21:40:04 -07:00
Alexander Rose
f22121521b Merge pull request #1152 from corredD/me_illustrative
enable illustrative color scheme in the tree
2024-06-12 19:52:20 -07:00
Alexander Rose
755655d067 add illustrative coloring option 2024-06-12 19:45:53 -07:00
ludovic autin
41ab186fd2 ME - entities can have description text retriev in the file in the entity field or in the manifest. The descripion appear for the current selection in the left panel and in the tips when mouse hove in the viewport. The markdown will use the same handling as the Snapshot description defined in the me_ui_label PR. 2024-06-12 12:37:35 -07:00
ludovic autin
9039c653cb centerOnly toggle is actually used. Its is exposed as a Key toggle 'c'. How can we expose all the MesoFocusLociProps in the UI ? So that user can easily toggle the centerOnly and change the transition duration... 2024-06-12 11:00:44 -07:00
ludovic autin
dde3f4ecff Merge branch 'master' into me_illustrative 2024-06-12 09:39:31 -07:00
ludovic autin
64cd05cc14 hide toggle in custom type 2024-06-11 10:24:18 -07:00
David Sehnal
593e8f4993 Improve camera interpolation (#1153)
* improve camera interpolation

* typos
2024-06-11 14:19:19 +02:00
ludovic autin
d2d9eb622f preset illustrative: false, 2024-06-10 10:11:27 -07:00
ludovic autin
ce9883517f illustrative scheme as a boolean. 2024-06-10 09:56:15 -07:00
Ludovic Autin
bc2afe1d68 Merge commit '5a2ee03b48e1822c8843d65eb18d578af0579b9f' into me_illustrative 2024-06-08 09:09:23 -07:00
Alexander Rose
5a2ee03b48 lint fix 2024-06-07 22:38:26 -07:00
ludovic autin
2d86c76788 no multispace 2024-06-07 16:56:51 -07:00
ludovic autin
7f8995a4d8 " 2024-06-07 16:50:01 -07:00
ludovic autin
64ab8bf78d enable illustrative color scheme in the tree 2024-06-07 16:44:29 -07:00
Alexander Rose
bf9663e177 handle near clip in ssao-blur 2024-06-06 23:09:02 -07:00
David Sehnal
fb729446e2 Adjust quick styles panel (#1143)
* adjust quick styles panel

* header

* Update src/mol-plugin-ui/structure/quick-styles.tsx

Co-authored-by: Paul Pillot <116235895+papillot@users.noreply.github.com>

---------

Co-authored-by: Paul Pillot <116235895+papillot@users.noreply.github.com>
2024-06-05 08:56:37 +02:00
Neli Fonseca
3e4082bf6e Decompress gzip volume (#1146)
* Created DecompressGzip transformer to render map.gz volumes correctly

* Updated changelog

* Update src/apps/viewer/app.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* Update src/apps/viewer/app.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* Update src/mol-plugin-state/transforms/data.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* Fixes bug and updated changelog

* Update src/apps/viewer/app.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* Update src/apps/viewer/app.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* Update src/apps/viewer/app.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* Update src/apps/viewer/app.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* Handle deflateData into string

* Update src/apps/viewer/app.ts

* Update src/mol-plugin-state/transforms/data.ts

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2024-06-04 12:14:49 +02:00
dsehnal
5af6a3e967 4.3.0 2024-05-26 09:18:19 +02:00
dsehnal
e718835042 lint ignore 2024-05-26 09:15:18 +02:00
dsehnal
70f0804e26 changelog 2024-05-26 09:07:40 +02:00
ludovic autin
e613a90754 await the the snapshot setting to avoid rendering while applying snap… (#1140)
* await the the snapshot setting to avoid rendering while applying snapshot. Request : export animation should take in account the trackball controller of 'rock' or 'spin' as well.

* add the updateController option when renderiing snapshot, camera rock and spin are thus taking into account

* forgot a file

* update the canvas3d using the current snapshot to allow camera rock and spin animation rendering

* changelog
2024-05-22 19:29:58 +02:00
David Sehnal
dca6affc84 fix RMSD minification bug (#1138)
* fix RMSD minification bug

* changelog
2024-05-21 14:23:21 +02:00
Alexander Rose
af33516107 fix date 2024-05-16 23:49:26 -07:00
Alexander Rose
7148c7197b fixes for SSAO edge artifacts
- add `reuseOcclusion` parameter to multi-sample pass
- add `blurBias` parameter to occlusion pass
2024-05-16 23:48:57 -07:00
giagitom
d2192d609a Fix initial and final caps 2024-05-15 15:58:22 +02:00
Gianluca Tomasello
46ad8f495f Merge branch 'master' into tubular-alpha-helices-round-cap 2024-05-14 19:22:20 +02:00
giagitom
65b2b69a64 Smooth normals 2024-05-14 19:20:36 +02:00
Gianluca Tomasello
0d9d173ef4 Merge branch 'master' into quantized-light 2024-05-13 21:02:21 +02:00
giagitom
6eaf8e1911 Adding tweaks 2024-05-13 20:59:42 +02:00
Alexander Rose
b11e24cd06 Merge pull request #1103 from corredD/dof
DOF shader
2024-05-12 17:31:46 -07:00
Alexander Rose
1a1bce8193 Merge branch 'master' into dof 2024-05-12 17:25:57 -07:00
Alexander Rose
b67f7271fc changelog & docs 2024-05-11 15:12:06 -07:00
Alexander Rose
837b838766 cleanup DofPass.update & fix webgl1 support 2024-05-11 15:04:42 -07:00
Alexander Rose
7dd42421e2 changelog 2024-05-11 14:50:47 -07:00
Alexander Rose
258dc637fc fix input/output & support transparency 2024-05-11 14:49:27 -07:00
Alexander Rose
d6c594395c make 'camera-target' the default 2024-05-11 14:49:22 -07:00
Alexander Rose
746173fe33 undo changes to shadow shader 2024-05-11 14:47:45 -07:00
Alexander Rose
e9de12e6a2 improve Timer.clear 2024-05-11 13:33:27 -07:00
ludovic autin
3bfebceaea Merge branch 'molstar:master' into dof 2024-05-10 09:37:59 -07:00
Dušan Veľký
443fc9c60c Tunnels extension (#1105)
* create algorithm

* create props

* create representation

* add examples

* add providers to index

* updated tunnel props

* updated tunnel transformers

* add interpolation and sampleRate

* rename tunnel example

* update examples

* add headers

* add author to contributors

* fix runVisualizeTunnel example

* add docs for tunnels extension

* create action to download tunnels

* add download tunnels to viewer

* fix description for shape provider

* update docs

* rename props to data-model

* rename transformers

* add headers

* add url to PluginConfig

* fix ChannelsDB type

* reimplement interpolation

* fix geometry condition

* remove fillFactor

* rename projectTunnel to index

* fix samplingRate

* remove fillFactor

* rename loci to highlight_label

* fix functions args

* create preset for structure tunnels

* rename ids

* change preset to show all tunnels

---------

Co-authored-by: Dušan Veľký <velky.dusko@gmail.com>
2024-05-08 15:37:59 +02:00
giagitom
3220ab6118 Add round caps on tubular alpha helices 2024-05-07 17:04:18 +02:00
giagitom
5c882f1aa5 Added author in headers 2024-05-06 16:19:43 +02:00
giagitom
2320518b87 Add quantized lighting option 2024-05-06 14:58:42 +02:00
Ludovic Autin
2124bead5e change header date and authors. Reduce the blurring at the edge of the inFocus area. 2024-05-05 16:47:47 -07:00
Ludovic Autin
a6077c7263 Merge branch 'master' into dof
# Conflicts:
#	src/mol-canvas3d/passes/draw.ts
#	src/mol-canvas3d/passes/postprocessing.ts
2024-05-05 10:12:31 -07:00
Alexander Rose
d98350cfb2 4.2.0 2024-05-04 18:52:14 -07:00
Alexander Rose
ae96b6cdac changelog 2024-05-04 18:49:40 -07:00
Alexander Rose
7ba6f5bf4c package updates 2024-05-04 18:49:03 -07:00
Alexander Rose
cede59c282 Merge pull request #1083 from molstar/emissive-bloom
Emissive & Bloom
2024-05-04 18:46:11 -07:00
Alexander Rose
87db52c339 Merge branch 'master' of https://github.com/molstar/molstar into emissive-bloom 2024-05-04 11:22:22 -07:00
Alexander Rose
b3d4500505 Merge pull request #1101 from midlik/load-mvs-keep-camera
Load mvs keep camera
2024-05-04 11:20:17 -07:00
Alexander Rose
2935f1340d Merge branch 'master' into load-mvs-keep-camera 2024-05-04 11:20:02 -07:00
Alexander Rose
fda3481d15 fix bumpiness artifact with xrayShaded 2024-05-04 10:50:36 -07:00
Alexander Rose
24ad3c875a handle identical sets cases in SetUTils 2024-05-04 10:48:27 -07:00
Alexander Rose
dd31c3041b fix bloom & transparent background
- need to blur alpha channel
2024-05-04 10:45:34 -07:00
Alexander Rose
8f3a3dd2be fix variable redeclaration 2024-05-04 10:43:56 -07:00
ludovic autin
6f478a3eb3 change default PPM, use colorTarget when no postprocessing is apply. 2024-05-01 09:31:53 -07:00
ludovic autin
a36c2feee4 clean up, pass center position transformed in view space 2024-05-01 08:37:22 -07:00
Ludovic Autin
a5e2946aa6 use scene center or camera target center, and blur in a plan parrallel to depth or in a sphere arround the center. 2024-05-01 00:03:57 -07:00
ludovic autin
00428254a8 work in progress using the camera target as the center of focus. 2024-04-30 14:15:58 -07:00
ludovic autin
53a57530c5 Merge branch 'master' into dof 2024-04-30 13:53:12 -07:00
Alexander Rose
d9d378b249 Merge pull request #1109 from molstar/bond-assignment-fixes
bond assignment fixes
2024-04-29 22:13:51 -07:00
Alexander Rose
98119787e9 Merge branch 'master' into bond-assignment-fixes 2024-04-29 22:13:42 -07:00
Alexander Rose
b00f650066 Merge pull request #1110 from molstar/fix-bumpiness-1107
fix bumpiness artifact
2024-04-29 22:12:45 -07:00
ludovic autin
5ee6bee130 use the distance to the visible boundingsphere center to specifiy the area in focus 2024-04-29 10:26:11 -07:00
ludovic autin
734b6001c2 Merge branch 'master' into dof 2024-04-29 09:15:09 -07:00
dsehnal
24e7456d6d lint 2024-04-29 14:51:23 +02:00
Alexander Rose
0bb596e255 expand render-shape in tests/browser
- toggling spheres visibility
2024-04-28 18:29:15 -07:00
Alexander Rose
31a6eef1a4 expand render-shape in tests/browser 2024-04-28 18:22:13 -07:00
Alexander Rose
1deead40a5 schema updates 2024-04-28 14:38:06 -07:00
Alexander Rose
628f72903d package updates 2024-04-28 14:37:42 -07:00
Alexander Rose
5d8a569aef fix bumpiness artifact 2024-04-27 18:52:57 -07:00
Alexander Rose
9604b89ee0 workaround bloom artifacts
- getImageData: no undo of pre-multiplied alpha when bloom pass is disabled
2024-04-27 18:20:34 -07:00
Alexander Rose
4627d436a6 Merge branch 'master' of https://github.com/molstar/molstar into emissive-bloom 2024-04-27 15:37:46 -07:00
Alexander Rose
10cdd6a1f0 Merge pull request #1104 from molstar/ssao-artifacts
Fix SSAO artifacts (@corredD, #1082)
2024-04-27 15:36:00 -07:00
Alexander Rose
db9cb955b0 bond assignment fixes 2024-04-27 12:44:09 -07:00
Adam Midlik
00ad11dd6b MVS: camera positioning uses sceneRadiusFactor to avoid cropping 2024-04-26 16:18:46 +01:00
Ryan DiRisio
932b59d62c return selectors for each StateTransform in each measurement (#1087)
* return selectors for each StateTransform in each measurement

* update changelog, modify file header, add name to contributors

* consistently name return selections and labels

---------

Co-authored-by: Ryan DiRisio <rdirisio@treeline.bio>
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2024-04-25 16:10:21 +02:00
Alexander Rose
86b889d48b Merge branch 'master' of https://github.com/molstar/molstar into emissive-bloom 2024-04-24 21:33:19 -07:00
Alexander Rose
9521d47b4e Fix SSAO artifacts (@corredD, #1082) 2024-04-24 21:13:19 -07:00
Alexander Rose
032cf3ad8b typo 2024-04-24 20:48:54 -07:00
Alexander Rose
b39f9a772d changelog 2024-04-24 20:39:51 -07:00
Alexander Rose
ebe727ba24 fix render-spheres example
- wrong step size in sphere geometry boundingSphere & groupmapping
- handle empty instanceGridin renderer & renderable
2024-04-24 20:38:29 -07:00
ludovic autin
e88c2df42f add citation url 2024-04-24 15:39:35 -07:00
ludovic autin
79e6a4c95d dof files 2024-04-24 15:27:59 -07:00
ludovic autin
2f56b9c491 DOF shader 2024-04-24 12:27:58 -07:00
Adam Midlik
b8551824bf Add missing await 2024-04-23 17:08:06 +01:00
Adam Midlik
8340fc0a98 MVS: fixed aggressive clipping when setting camera 2024-04-23 17:00:50 +01:00
dsehnal
10a3f92697 update gha 2024-04-22 16:10:44 +02:00
David Sehnal
da9f5927d8 Merge docs from molstar/docs (#1090)
* merge docs

* tweak actions
2024-04-22 16:00:26 +02:00
Alexander Rose
990dac6f8d handle xray-shaded in transparency check 2024-04-21 19:04:15 -07:00
Alexander Rose
1aa9c2fb22 disable emissive for transparency 2024-04-20 13:21:38 -07:00
Alexander Rose
77d5c71e61 fix bloom with transparent background 2024-04-20 13:20:13 -07:00
Adam Midlik
ae1d1a44f6 MVS: keepCamera parameter 2024-04-19 15:21:16 +01:00
Alexander Rose
904a409665 changelog 2024-04-14 16:32:53 -07:00
Alexander Rose
ab70536820 add emissive to mesoscale explorer 2024-04-14 16:16:05 -07:00
Alexander Rose
c9ef0171b4 add emissive to glb exporter 2024-04-14 16:15:57 -07:00
Alexander Rose
682b551b6e add bloom postprocessing effect 2024-04-14 16:15:38 -07:00
Alexander Rose
49cd8f7904 add emissive material support 2024-04-14 16:15:09 -07:00
Alexander Rose
a9e1373203 Merge pull request #1075 from molstar/transparency-render-refactor
refactor transparency rendering
2024-04-06 10:29:59 -07:00
Alexander Rose
368fd3a1d5 changelog 2024-04-06 10:20:48 -07:00
Alexander Rose
51ba661e54 cleanup 2024-04-06 10:20:04 -07:00
Alexander Rose
eb86b83aa5 Merge branch 'master' of https://github.com/molstar/molstar into transparency-render-refactor 2024-04-06 10:15:34 -07:00
Alexander Rose
16d5299fbd 4.1.0 2024-03-31 23:01:57 -07:00
Alexander Rose
c85aa6f979 changelog 2024-03-31 22:59:43 -07:00
Alexander Rose
dfab137696 schema updates 2024-03-31 22:59:05 -07:00
Alexander Rose
629fc65b81 package updates
- fix types
- fix webpack browserify issue
2024-03-31 22:56:54 -07:00
Alexander Rose
f06064a0c6 Merge pull request #1072 from hui2000ji/master
Reproduce pymol's surface_ramp_above_mode=1
2024-03-31 22:25:30 -07:00
Alexander Rose
fa70a0e5eb Merge branch 'master' into master 2024-03-31 22:20:44 -07:00
Alexander Rose
f1a2c5c4ee doc tweaks 2024-03-31 22:19:46 -07:00
hui2000ji
169d6323ca add Vec3.transformDirectionOffset; renam param in external-volume 2024-04-01 10:21:40 +08:00
Alexander Rose
c5b3db9960 refactor transparency rendering
- more uniform behavior for blended, wboit, dpoit
- fix issues with text & image geometry
2024-03-30 15:06:09 -07:00
Alexander Rose
fefed0a5f0 removed unused 2024-03-30 15:01:27 -07:00
Alexander Rose
d04311a989 fix type 2024-03-30 15:01:12 -07:00
Alexander Rose
0273df2c16 add rotation param to skybox 2024-03-30 08:19:16 -07:00
hui2000ji
05494953df add "normal" property to position location; add "Above Mode" to external-volume 2024-03-29 11:57:53 +08:00
midlik
d6b79de86d MVS docs reorganization (#1073) 2024-03-27 19:34:14 +01:00
hui2000ji
20327871a8 update mesh positionIt 2024-03-27 17:18:08 +08:00
Alexander Rose
dd0845038d Merge pull request #1069 from molstar/transparency-fix
Fix transparency rendering fallback
2024-03-26 22:07:18 -07:00
Alexander Rose
d5d3977506 Merge branch 'master' into transparency-fix 2024-03-26 22:07:08 -07:00
Alexander Rose
1675e18f57 Merge pull request #1070 from molstar/ssao-sampler-fix
Fix SSAO broken when `OES_texture_float_linear` is unavailable
2024-03-24 15:36:02 -07:00
Alexander Rose
d8bfe78b30 Fix SSAO broken when OES_texture_float_linear is unavailable 2024-03-24 14:56:24 -07:00
Alexander Rose
589d3465ef Merge pull request #1056 from pechersky/volume-transform
VolumeTransform to rotate a volume, like TransformStructureConformation
2024-03-24 10:14:11 -07:00
Alexander Rose
ebc63099b4 Merge branch 'master' into volume-transform 2024-03-24 10:13:57 -07:00
Alexander Rose
512a099a28 Fix transparency rendering fallback 2024-03-23 10:10:13 -07:00
midlik
d056bf3549 Fixed text rendering in headless mode (#1068)
* Fixed text rendering in headless mode

* lint
2024-03-21 06:46:46 +01:00
Alexander Rose
e2c929fa33 fix wrong width/height in InputObserver 2024-03-18 18:44:11 -07:00
David Sehnal
a619ae6687 BinaryCIF encoder fixes (#1057) 2024-03-04 17:10:02 +01:00
Yakov Pechersky
e40fc34a6f move changes to unreleased section 2024-03-04 09:07:49 -05:00
Yakov Pechersky
2734377d0a remove extra line 2024-03-01 15:51:03 -05:00
Yakov Pechersky
86575a7a15 Changelog 2024-03-01 15:50:09 -05:00
Yakov Pechersky
31227d2050 authors header 2024-03-01 15:50:03 -05:00
Yakov Pechersky
2e73a37de2 VolumeTransform to rotate a volume, like TransformStructureConformation 2024-03-01 15:27:37 -05:00
midlik
32c3ef0801 MVS: OpenApi schema in docs (#1051) 2024-02-19 18:04:06 +01:00
dsehnal
b70f2e073d 4.0.1 2024-02-19 12:56:41 +01:00
dsehnal
03b4aa1b33 changelog 2024-02-19 12:54:01 +01:00
Alexander Rose
0a4643ebe4 Revert "require WEBGL_depth_texture extension" 2024-02-17 11:26:55 -08:00
Alexander Rose
8dc3dae81e revert renderbuffer removal 2024-02-17 11:24:29 -08:00
David Sehnal
a1e2b0e5ae Bcif decoder fix (#1048)
* Fix bcif decoder

* update integerPackingSigned typing

* fix type fix
2024-02-14 18:23:22 +01:00
midlik
46af7d03bf MVSX (#1041)
* MVSX format provider

* MVS: Integration examples

* MVS: drag-and-drop support for MVSX

* MVS: support for URL param mvs-format=mvsx

* MVS: docs for MVSX

* MVS: mvs-render supports MVSX

* Update README
2024-02-14 18:22:27 +01:00
Alexander Rose
60550cfea1 4.0.0 2024-02-04 15:51:28 -08:00
Alexander Rose
5de4569ad9 changelog 2024-02-04 15:49:04 -08:00
Alexander Rose
908fb0eba9 me: fix state loading 2024-02-03 10:53:25 -08:00
Alexander Rose
e7e191a907 Merge pull request #1019 from molstar/v4-dev
V4 dev
2024-02-03 10:26:26 -08:00
Alexander Rose
de46c82c78 add mesoscale-explorer to deploy script 2024-02-03 10:17:20 -08:00
Alexander Rose
d8f3ab767e changelog 2024-02-03 10:08:46 -08:00
Alexander Rose
d34a9be20f package updates 2024-02-03 10:08:34 -08:00
Alexander Rose
78628c217f Merge branch 'master' of https://github.com/molstar/molstar into v4-dev 2024-02-03 10:06:11 -08:00
Alexander Rose
d29bf2eec2 3.45.0 2024-02-03 10:02:48 -08:00
Alexander Rose
5db60c2882 changelog 2024-02-03 10:00:17 -08:00
Alexander Rose
737846e093 schema updates 2024-02-03 09:59:52 -08:00
Alexander Rose
2ad551bdc7 package updates 2024-02-03 09:52:14 -08:00
Alexander Rose
46fa581f07 Merge pull request #1036 from russellp17/master
Move most headless context deps to optional peer dependencies and remove `@types/jpeg-js`
2024-02-03 09:43:27 -08:00
Alexander Rose
17dbe4b60e make jpeg-js a dev and optional peer dependency 2024-02-03 09:35:20 -08:00
Russell Parker
aeaf2e799a update changelog 2024-01-30 11:18:08 -05:00
Russell Parker
ef16b718c4 Move most headless context deps to optional peer deps and remove @types/jpeg-js 2024-01-30 11:17:54 -05:00
Alexander Rose
4b4f6d34a3 Merge branch 'master' of https://github.com/molstar/molstar into v4-dev 2024-01-29 22:52:55 -08:00
Alexander Rose
ab4130d42d Merge pull request #1032 from molstar/interactive-snapshots
Interative labels & related changes
2024-01-29 22:52:05 -08:00
dsehnal
9e73de89fb changelog 2024-01-28 05:32:17 +01:00
dsehnal
02cec6f8e6 support multiline PD.text and use markdown to render multi-line tooltips 2024-01-28 05:26:46 +01:00
dsehnal
e97a02473f label snapshot key & tooltip support 2024-01-28 04:35:01 +01:00
Alexander Rose
827e75ce0e Merge branch 'master' of https://github.com/molstar/molstar into v4-dev 2024-01-15 09:42:36 -08:00
Alexander Rose
22e5c9d65b Merge pull request #800 from giagitom/2-colors-cylinders
Implementing 2 colors interpolation on impostor cylinders
2024-01-15 09:06:15 -08:00
Alexander Rose
10d9120d37 hide colorMode for cartoon repr 2024-01-13 11:38:45 -08:00
Alexander Rose
e6c20d35bd Merge branch 'master' into 2-colors-cylinders 2024-01-13 10:19:54 -08:00
Alexander Rose
27bf66038d location-iterator tweaks
- consolidate BondIterator.fromGroup/.fromStructure
- use options argument in PolymerLocationIterator.fromGroup
- remove 'any' type
2024-01-13 10:16:28 -08:00
Alexander Rose
3ce6d89521 color-mode docs 2024-01-13 10:14:06 -08:00
Alexander Rose
24608ac355 stricter param types 2024-01-13 10:13:11 -08:00
Alexander Rose
da034d9502 move cylinder color mixing to vertex shader 2024-01-13 10:11:13 -08:00
Alexander Rose
581673fb9b Merge pull request #1022 from midlik/is-mvs-model-prop
check applicability of mvs repr/color 2
2024-01-10 22:11:37 -08:00
Adam Midlik
29cf97e6cf Revert package-lock.json 2024-01-10 11:04:07 +00:00
Adam Midlik
f65773d654 MVS extension: MolViewSpec components are applicable only when the model has been loaded from MolViewSpec 2024-01-09 11:50:57 +00:00
giagitom
d11c8c166a Fix 2024-01-07 19:55:06 +01:00
giagitom
ae6bd743a8 Fix nucleotide atomic bonds 2024-01-07 19:34:09 +01:00
giagitom
c1654574d0 Merge branch 'master' into 2-colors-cylinders 2024-01-07 19:09:36 +01:00
giagitom
6f506351cd Merge branch 'master' of https://github.com/molstar/molstar 2024-01-07 19:06:01 +01:00
giagitom
db83b97ff9 Use only when necessary 2024-01-07 18:41:06 +01:00
Alexander Rose
5c818b35ad remove rcsb prefix 2024-01-06 17:24:01 -08:00
Alexander Rose
b1ce20f5f5 4.0.0-beta.0 2024-01-06 10:27:59 -08:00
Alexander Rose
d1cbebf8a7 changelog & readme 2024-01-06 10:25:29 -08:00
Alexander Rose
c771cfef99 Merge pull request #1017 from molstar/mesoscale-explorer
Mesoscale explorer
2024-01-06 10:18:41 -08:00
Alexander Rose
6ee72d5e8c changelog 2024-01-06 10:12:23 -08:00
Alexander Rose
b859b3c597 fix merge issues 2024-01-06 10:07:45 -08:00
Alexander Rose
8281909620 Merge branch 'v4-dev' of https://github.com/molstar/molstar into mesoscale-explorer 2024-01-06 09:54:20 -08:00
Alexander Rose
f3c30ae4b3 fix type 2024-01-06 09:44:29 -08:00
Alexander Rose
9ad53eb0d5 set minimal node.js version to 18 2024-01-06 09:33:27 -08:00
Alexander Rose
a15e9158b4 Merge pull request #1013 from molstar/assembly-symmetry
Generalize rcsb/assembly-symmetry/ extension
2024-01-06 09:28:22 -08:00
Alexander Rose
6bfedc038e Merge branch 'v4-dev' of https://github.com/molstar/molstar into assembly-symmetry 2024-01-06 09:28:07 -08:00
Alexander Rose
966293994f Merge branch 'v4-dev' of https://github.com/molstar/molstar into v4-dev 2024-01-06 09:26:22 -08:00
Alexander Rose
09f4c857de Merge branch 'master' of https://github.com/molstar/molstar into v4-dev 2024-01-06 09:25:46 -08:00
Alexander Rose
e05bd5f0c5 3.44.0 2024-01-06 09:01:15 -08:00
Alexander Rose
a3cdc2844e changelog 2024-01-06 08:58:31 -08:00
Alexander Rose
a51947637c package updates 2024-01-06 08:58:15 -08:00
David Sehnal
72ee428f51 Update createPluginUI (#1014)
* update createPluginUI

* fix example
2024-01-06 14:34:27 +01:00
Alexander Rose
4fe203d3ea Merge pull request #1015 from molstar/webgl-depth-rt
Require `WEBGL_depth_texture` webgl extension
2024-01-03 22:22:14 -08:00
Alexander Rose
2ec32641ee remove renderbuffer use 2024-01-03 22:02:52 -08:00
Alexander Rose
8d5198f15c require WEBGL_depth_texture extension 2024-01-03 18:26:24 -08:00
Alexander Rose
d5154c7391 Merge branch 'v4-dev' of https://github.com/molstar/molstar into assembly-symmetry 2024-01-02 15:19:31 -08:00
Alexander Rose
6ee750e6bd Merge pull request #825 from molstar/immer-es6
Immer, es6 & beyond
2024-01-02 15:15:55 -08:00
Alexander Rose
ea8aa10704 Merge branch 'v4-dev' of https://github.com/molstar/molstar into immer-es6 2024-01-02 15:07:56 -08:00
Alexander Rose
19ba76a1f1 Generalize rcsb/assembly-symmetry/ extension
- Move to assembly-symmetry/
- Remove RCSB specific dependencies and prefixes
2024-01-02 14:04:56 -08:00
Alexander Rose
fc28046df4 cleanup 2024-01-02 12:55:44 -08:00
Alexander Rose
20f0416a8c Merge branch 'v4-dev' of https://github.com/molstar/molstar into mesoscale-explorer 2024-01-02 12:52:47 -08:00
Alexander Rose
1298baf60d typo 2024-01-02 12:41:55 -08:00
Alexander Rose
999b86ab81 Merge branch 'master' of https://github.com/molstar/molstar into v4-dev 2024-01-02 12:41:29 -08:00
Alexander Rose
75f2acd8eb Merge pull request #1006 from molstar/lod-cull-hiz
culling & lod support
2024-01-02 12:40:36 -08:00
Alexander Rose
1541ba10f1 tweaks 2024-01-02 12:40:15 -08:00
Christian Domínguez
00ca25ffd7 Fixed drag and drop overlay on WebKit and Safari (#1011)
* Fixed drag and drop overlay on webkit/safari. Closes #1010

* Use dataTransfer.types when dataTransfer.items is not available/empty

* Updated package.json and header for contribution
2024-01-02 21:03:54 +01:00
giagitom
302e1c659f Merge branch 'master' into 2-colors-cylinders 2023-12-26 16:43:09 +01:00
giagitom
8b4d987f94 Merge branch 'master' of https://github.com/molstar/molstar 2023-12-26 16:38:35 +01:00
Alexander Rose
c383012fd0 add stochstic/dithered transparency to fade LODs in and out 2023-12-25 12:24:29 -08:00
Alexander Rose
66b6ddc527 Merge branch 'v4-dev' of https://github.com/molstar/molstar into lod-cull-hiz 2023-12-25 12:16:17 -08:00
Alexander Rose
15d60c51a9 fix ArrayMapping calls 2023-12-25 12:16:00 -08:00
Alexander Rose
fe82cd4f2c Merge branch 'v4-dev' of https://github.com/molstar/molstar into lod-cull-hiz 2023-12-25 12:08:13 -08:00
Alexander Rose
b3e792cbc3 Merge branch 'master' of https://github.com/molstar/molstar into v4-dev 2023-12-25 12:07:46 -08:00
Alexander Rose
2f0230dc84 avoid showing (and calculating) inter-unit bonds for huge structures 2023-12-25 12:03:14 -08:00
Alexander Rose
45522ad410 add LightbulbOnOutline and Serach icons 2023-12-25 11:54:00 -08:00
giagitom
3fe80fe61a Merge branch 'master' of https://github.com/molstar/molstar 2023-12-22 00:24:16 +01:00
Gianluca Tomasello
ede1a8da07 Cartoon nucleic with sugar visual (#727)
* add handlers to MeshBuilder

* Add ring fill visual

* Add nucleotide ring bond visual

* Add nucleotide ring element visual

* Update cartoon representation

* Fix imports

* Smooth normals

* Lint fix

* Update headers and Changelog

* Fix sugar ring mid point

* rename ring -> atomic

* refactor shared nucleotide helpers

* thicknessFactor for nucleic ring/block/fill visuals

* changelog

---------

Co-authored-by: Alexander Rose <alexander.rose@weirdbyte.de>
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2023-12-21 12:02:33 +01:00
Yakov Pechersky
0199afd5f3 Expose explicit bond orders from struct_conn in mmcif (#999)
* Expose explicit bond orders from struct_conn in mmcif

StructConn was referencing the wrong column name, it was using auth_seq_id instead of label_seq_id
The latter is mandatory by https://mmcif.wwpdb.org/dictionaries/mmcif_pdbx_v50.dic/Categories/struct_conn.html
This was causing no matches found during `getEntriesFromStructConn`
for building the bond lookup.

* update CHANGELOG and file headers

* Prefer auth_seq_id, fallback to label_seq_id

* case on presence instead of

* clarify changes in CHANGELOG

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2023-12-21 11:59:26 +01:00
midlik
f8bda3617f Mvs extension - yet another pull request (#1002)
* MVS extension: support all X11 colors

* MVS extension: nicer validation messages for literal types

* MVS extension: no need to call HexColor in builder

* MVS extension: Support relative URIs

* MVS extension: docs

* MVS extension: docs - fix markdown

* MVS extension: docs

* MVS extension: docs for selectors

* MVS extension: docs for selectors

* Support for label rendering in HeadlessPluginContext

* MVS extension: CLI utils

* MVS extension: nicer component node labels

* MVS extension: labels applied in one node

* MVS extension: labels applied in one node - fixed label colors

* MVS extensions: removed unused params from "Custom Label"

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2023-12-21 11:58:10 +01:00
Sebastian Bittrich
bffd7d75e0 ModelServer SDF/MOL2 ligand export: fix atom indices for atoms not present in the CCD (#1007)
* ModelServer: fix atom indices upon additional hydrogen atoms

* cl

* ignore all non-CCD atoms
2023-12-21 11:54:54 +01:00
Alexander Rose
e1315b6642 culling & lod support
- Add culling support
    - Cull per-object and per-instance
    - Cull based on frustum and camera distance
- Add LOD support
    - Visibility based on camera distance
    - Special mode for spheres with automatic LOD levels
- Add occlusion culling (only WebGL2)
    - Hi-Z pass
    - Cull based on previous frame's Hi-Z buffer
2023-12-17 17:37:04 -08:00
Alexander Rose
205413e696 Merge branch 'v4-dev' of https://github.com/molstar/molstar into mesoscale-explorer 2023-12-17 17:03:15 -08:00
Alexander Rose
2c0a486531 Merge branch 'master' of https://github.com/molstar/molstar into v4-dev 2023-12-17 16:51:31 -08:00
Alexander Rose
90a4e019ac remove offsetZ default from measurement label 2023-12-17 12:24:08 -08:00
Alexander Rose
640426ae16 me: wip, improve selection handling 2023-12-10 21:57:35 -08:00
Alexander Rose
d1e620eed1 me: support exact filter matches 2023-12-10 21:56:29 -08:00
Alexander Rose
1a2bad7c77 me: add animation export ui 2023-12-10 21:55:36 -08:00
Alexander Rose
b6e4d7721e Merge branch 'v4-dev' of https://github.com/molstar/molstar into mesoscale-explorer 2023-12-09 10:23:48 -08:00
Alexander Rose
e5902d15e2 Merge branch 'v4-dev' of https://github.com/molstar/molstar into v4-dev 2023-12-09 10:22:38 -08:00
Alexander Rose
4e2b7b5ffc Merge branch 'master' of https://github.com/molstar/molstar into v4-dev 2023-12-09 10:21:54 -08:00
Alexander Rose
bcbab9cb9d Merge pull request #21 from arose/manifest
Manifest
2023-12-09 10:21:02 -08:00
Alexander Rose
9a4b0116eb me: add selection-info panel 2023-12-09 10:20:02 -08:00
Alexander Rose
60d0de8d88 add search icon 2023-12-09 10:19:24 -08:00
Alexander Rose
6a520d2877 me: occlusion/culling tweaks 2023-12-09 10:18:55 -08:00
dsehnal
6edbae80db Fix changelog date 2023-12-04 16:30:41 +01:00
dsehnal
aac0abed32 3.43.1 2023-12-04 16:28:02 +01:00
dsehnal
6805dd7947 Fix react-markdown dependency 2023-12-04 16:25:23 +01:00
Alexander Rose
6c9254f2b6 3.43.0 2023-12-02 13:25:52 -08:00
Alexander Rose
897d443873 changelog 2023-12-02 13:23:17 -08:00
Alexander Rose
f276ea2258 schema updates 2023-12-02 13:22:26 -08:00
Alexander Rose
58d735996e type fix 2023-12-02 13:21:47 -08:00
Alexander Rose
72b66367f3 package updates 2023-12-02 13:21:35 -08:00
midlik
c592a3b93d MVS extension - additional work (#991)
* MVS extension: deterministic transform refs, updated metadata structure

* Perf-test for `sortIfNeeded`

* MVS extension: README

* MVS extension: show loading errors in the Mol* console

* MVS extension: auto-fix rotation matrix imprecisions

* MVS extension: data format provider

* MVS extension: Updated README

* MVS extension: rename deletePrevious -> replaceExisting, default to false in "Load MVS Data" to allow loading multiple files

* Perf-test for sortIfNeeded uses Benchmark.js
2023-11-29 17:21:02 +01:00
giagitom
3e6d0c8c62 Merge branch 'master' of https://github.com/molstar/molstar 2023-11-26 21:38:09 +01:00
Alexander Rose
60ed853c02 Merge branch 'mesoscale-explorer' of https://github.com/arose/mesoscale-explorer into manifest 2023-11-26 09:57:21 -08:00
Alexander Rose
ba58b8e559 Merge branch 'v4-dev' of https://github.com/molstar/molstar into mesoscale-explorer 2023-11-26 09:56:50 -08:00
Alexander Rose
2c3d122820 Merge pull request #992 from molstar/canvas3dcontext-runtime-props
add Canvas3DContext runtime props
2023-11-26 09:51:16 -08:00
Alexander Rose
47f4b3a051 Merge branch 'v4-dev' into canvas3dcontext-runtime-props 2023-11-26 09:45:59 -08:00
Alexander Rose
daed91e1ea simplify TransparencyMode to type 2023-11-26 09:43:19 -08:00
Alexander Rose
3d0b9c98e4 change default compile target to es2018 2023-11-25 22:28:15 -08:00
Alexander Rose
966e8e764f add Canvas3DContext runtime props
- pixelScale, pickScale, transparency (blended, wboit, dpoit)
- replacing instantiation-time attribs
2023-11-25 22:09:40 -08:00
Alexander Rose
14441a4ee3 Merge branch 'master' of https://github.com/molstar/molstar into v4-dev 2023-11-25 17:07:10 -08:00
Alexander Rose
e773824fb5 improve disposal to aid GC 2023-11-25 17:06:53 -08:00
Alexander Rose
cc6a990b85 me: improve asset & app disposal 2023-11-25 16:55:05 -08:00
Alexander Rose
ffa7d66c66 improve disposal to aid GC 2023-11-25 16:25:35 -08:00
Alexander Rose
abc29ceefb Merge branch 'mesoscale-explorer' of https://github.com/arose/mesoscale-explorer into manifest 2023-11-25 10:11:27 -08:00
Alexander Rose
e2f137a495 Merge branch 'v4-dev' of https://github.com/molstar/molstar into mesoscale-explorer 2023-11-25 10:11:00 -08:00
Alexander Rose
ebbe78fb1d Merge branch 'master' of https://github.com/molstar/molstar into v4-dev 2023-11-25 10:07:41 -08:00
Alexander Rose
5d139b6db8 optimize LociSelectManager.selectOnly
- avoid superfluous loci set operations
2023-11-25 10:07:00 -08:00
Alexander Rose
8d5aad2be1 Merge pull request #986 from molstar/symop-memop
reduce memory usage of SymmetryOperator.ArrayMapping
2023-11-25 10:01:23 -08:00
Alexander Rose
e8601d3f5e Merge branch 'symop-memop' of https://github.com/molstar/molstar into symop-memop 2023-11-25 09:49:29 -08:00
Alexander Rose
c63622677a more ArrayMapping improvements
- add identity specialization
- reuse x/y/z methods
2023-11-25 09:49:26 -08:00
Alexander Rose
163cee6d66 me: move instance transforms out of params 2023-11-25 09:18:30 -08:00
Alexander Rose
cd1d2010da me: dispose zip file asset after loading 2023-11-25 09:16:53 -08:00
Alexander Rose
8f0ab2fdf9 me: add transformer update methods 2023-11-25 09:14:24 -08:00
Alexander Rose
7dbc8ab4f1 optimize LociSelectManager.selectOnly 2023-11-24 23:23:56 -08:00
Alexander Rose
6a730a6ce7 Merge branch 'v4-dev' into symop-memop 2023-11-24 18:27:55 -08:00
Alexander Rose
ca606284b3 Merge branch 'master' of https://github.com/molstar/molstar into v4-dev 2023-11-24 18:18:13 -08:00
Alexander Rose
396c530e13 tweak array mapping & add perf test 2023-11-24 18:00:30 -08:00
Alexander Rose
4cc3072165 Merge branch 'master' of https://github.com/molstar/molstar into symop-memop 2023-11-24 15:50:12 -08:00
Alexander Rose
4598841ddc add transforms & label params to ShapeFromPly 2023-11-24 15:41:38 -08:00
Alexander Rose
728414366d fix tryGetCellData data check 2023-11-24 15:40:46 -08:00
Alexander Rose
1b7b38b47e fix bump scaling with ignoreLight enabled 2023-11-24 15:39:24 -08:00
Alexander Rose
dd15b1ed29 me: expose pattern/bump params for shapes 2023-11-24 15:37:06 -08:00
Alexander Rose
446ea9173b fix bump scaling with ignoreLight enabled 2023-11-24 14:53:30 -08:00
Alexander Rose
70f8515e51 me: add support for entities from ply files 2023-11-24 13:44:12 -08:00
Alexander Rose
90fac967f2 add transforms & label params to ShapeFromPly 2023-11-24 13:42:33 -08:00
Alexander Rose
1796dfd73a me: guard against no assemblies 2023-11-24 13:24:58 -08:00
Alexander Rose
a73cb1648d me: fix state loading 2023-11-24 13:22:24 -08:00
Alexander Rose
b715205a04 fix tryGetCellData 2023-11-24 13:08:09 -08:00
Yakov Pechersky
ef17cb2cca Custom sequence viewer as a plugin spec (#988)
Factored out of #936

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2023-11-24 14:39:22 +01:00
midlik
b7b52f5c7d MVS extension (#976)
* Moved MVS extension from mol-view-spec repo

* Viewer supports URL params mvs-url, mvs-data, mvs-format

* Tests

* MVS sanity checks

* MVS extension: drag-and-drop support

* mvs-render try1

* Example CLI utility mvs-render

* Example CLI utility mvs-validate

* MVS extension: renaming

* MVS extension: fixed FOV in mvs-render

* Moved stuff to mol-util/array.ts

* Moved stuff to mol-util/object.ts

* MVS extension: renamed `additions` to `components`

* MVS extension: trying plugin.managers.camera.focusSphere

* MVS extension: refactor focus

* MVS extension: fixed label color once again

* MVS extension: camera position adjustment (compensate FOV differences)

* Fixed formula for camera focus in orthographic mode

* Moved Choice to mol-util/param-choice.ts

* Moved stuff to mol-util/json.ts

* Object.hasOwn polyfill

* MVS extension: small refactor

* Fixed bug in hashString
2023-11-24 14:38:08 +01:00
David Sehnal
79ed8e7de4 Snapshot improvements (#977)
* Snapshot improvements

* improve key UX

* markdown descriptions

* tweak button

* drag overlay fix

* package lock
2023-11-20 12:01:19 +01:00
Alexander Rose
60a2eb8a22 me: add app.loadUrl 2023-11-19 23:30:41 -08:00
Alexander Rose
b833d41c1e Merge branch 'mesoscale-explorer' of https://github.com/arose/mesoscale-explorer into manifest 2023-11-19 18:02:12 -08:00
Alexander Rose
85d2ed0132 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-11-19 18:01:34 -08:00
Alexander Rose
2552a5218f fix seconday-structure.ts file name 2023-11-19 17:29:19 -08:00
Alexander Rose
c4a4562d82 package updates 2023-11-19 17:24:37 -08:00
Alexander Rose
a3b9d30c7c target ES2018 2023-11-19 17:19:26 -08:00
Alexander Rose
a3572961ac Merge branch 'master' of https://github.com/molstar/molstar into immer-es6 2023-11-19 17:11:39 -08:00
Alexander Rose
3118a46250 reduce memory usage of SymmetryOperator.ArrayMapping 2023-11-19 17:01:50 -08:00
Alexander Rose
d238b8aee9 Merge branch 'master' of https://github.com/molstar/molstar 2023-11-19 16:38:05 -08:00
Alexander Rose
22a57d8f48 add structure-element-sphere visual to spacefill repr 2023-11-19 16:37:26 -08:00
Alexander Rose
119e8f63eb Fix missing await in HeadlessPluginContext.saveStateSnapshot 2023-11-19 15:27:04 -08:00
Alexander Rose
e6a4122d1c add no-constant-binary-expression to eslint 2023-11-18 13:30:42 -08:00
Alexander Rose
9ba5f1f540 tweak distinctColors 2023-11-18 13:26:08 -08:00
Alexander Rose
0a0ac7ee63 guard against empty cif files 2023-11-18 13:25:57 -08:00
Alexander Rose
7670df04ae use isTimingMode for UserTiming 2023-11-18 13:24:58 -08:00
Alexander Rose
98744af872 fix for compiling with es6+ 2023-11-18 13:24:46 -08:00
Alexander Rose
f4eb509887 only change camera.target for flyMode and pointerLock 2023-11-18 13:24:21 -08:00
Alexander Rose
cbb8c0536d me: wip, trajectory support 2023-11-16 23:17:44 -08:00
Alexander Rose
d7d798746c me: wip, trajectory support 2023-11-16 23:17:13 -08:00
Alexander Rose
c39d092fc1 me: no clustering step for distinctColors 2023-11-16 23:15:31 -08:00
Alexander Rose
102b69961c tweak distinctColors 2023-11-16 23:14:53 -08:00
Alexander Rose
681d64dcd9 me: flexible binary transform in generic loader 2023-11-15 22:00:57 -08:00
Alexander Rose
2083407a84 me: fix bcif loading 2023-11-15 21:30:55 -08:00
Alexander Rose
a07f90a405 me: cache some state selections 2023-11-15 21:30:23 -08:00
Alexander Rose
c7ca528778 guard against empty cif files 2023-11-15 21:28:20 -08:00
Alexander Rose
ca36264cf8 use isTimingMode for UserTiming 2023-11-15 21:27:55 -08:00
Alexander Rose
7e5b181d92 fix for compiling with es6+ 2023-11-15 21:25:27 -08:00
Alexander Rose
c538e1d0c8 wip, support binary transforms 2023-11-08 22:30:15 -08:00
Alexander Rose
75e23d73b0 me: fix MesoscaleExplorerState handling 2023-11-07 21:55:55 -08:00
Alexander Rose
39f077b066 me: add drag-and-drop support 2023-11-07 21:04:19 -08:00
Alexander Rose
78874c0024 fix return type of State.tryGetCellData 2023-11-07 20:41:10 -08:00
Alexander Rose
7069760d07 me: improve generic loader (with @corredD)
- support assemblies
- support quaternions and transformation matrices
2023-11-07 20:34:47 -08:00
Alexander Rose
df0af2b1ca fix return type of State.tryGetCellData 2023-11-07 20:32:18 -08:00
Alexander Rose
edd6419b2b me: fix MesoscaleExplorerState handling 2023-11-07 20:30:30 -08:00
giagitom
c6210ae1a0 Merge branch 'master' of https://github.com/molstar/molstar 2023-11-06 07:36:00 +01:00
Alexander Rose
446455494e Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-11-05 20:04:03 -08:00
Alexander Rose
c4bc16fe5d 3.42.0 2023-11-05 20:00:47 -08:00
Alexander Rose
988cee0047 changelog 2023-11-05 19:56:47 -08:00
Alexander Rose
39fa185f3d me: use clipPrimitive 2023-11-05 17:02:11 -08:00
Alexander Rose
cb0484bca1 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-11-05 17:00:35 -08:00
Alexander Rose
bf0707a2aa schema updates 2023-11-05 13:25:57 -08:00
Alexander Rose
9a2191e1cc package updates 2023-11-05 13:25:43 -08:00
Alexander Rose
36ead9dda3 Merge pull request #966 from molstar/clip-primitive
add clipPrimitive option to spheres geometry
2023-11-05 11:51:16 -08:00
Alexander Rose
71e1bb849e Merge branch 'master' into clip-primitive 2023-11-05 11:51:05 -08:00
David Sehnal
975cceed77 Add DragAndDropManager (#968)
* Add PluginContext.customDragAndDropHandlers

* refactor to manager
2023-11-05 14:46:51 +01:00
Alexander Rose
82065dc5b7 typo 2023-11-04 19:24:05 -07:00
Alexander Rose
39ae03ff8c skip empty multiDrawBase data items 2023-11-04 19:22:32 -07:00
Alexander Rose
45ab88f0a1 fix batched camera distance culling 2023-11-04 19:21:14 -07:00
Alexander Rose
f0d649f265 Merge pull request #972 from JonStargaryen/condensed
Add `options` support for default bond labels
2023-11-04 15:06:11 -07:00
Sebastian Bittrich
44ce5df136 cl 2023-11-03 16:01:34 -07:00
Sebastian Bittrich
b00bce69fd make bond labels honor options 2023-11-03 16:00:03 -07:00
Alexander Rose
e2e9e5f6fc add clipPrimitive option to spheres geometry
- clip whole spheres instead of cutting them
2023-10-28 22:59:18 -07:00
giagitom
36cf2853b2 Merge branch 'master' of https://github.com/molstar/molstar 2023-10-22 15:15:38 +02:00
Alexander Rose
efc322a375 lod params tweaks 2023-10-21 23:46:23 -07:00
Alexander Rose
7e792a4f90 add model info, ui tweaks 2023-10-21 16:33:54 -07:00
Alexander Rose
44b3a9b121 more coloring improvements and fixes 2023-10-21 14:09:25 -07:00
Alexander Rose
55f72e65dc Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-10-21 13:49:21 -07:00
Alexander Rose
745746f243 handle altId & insCode for bonds from PDB files 2023-10-21 13:40:37 -07:00
Alexander Rose
b5f229ba6d improve distinctColors function
- Add `sort` and `sampleCountFactor` parameters
- Fix clustering issues
2023-10-21 12:50:03 -07:00
Alexander Rose
d5a47e617a fix de-/saturate of colors with no hue 2023-10-21 12:27:58 -07:00
Alexander Rose
a200ca5b21 Merge pull request #946 from molstar/fix-pdb-insCode-labelSeq
fix handling of pdb files with insertion codes
2023-10-21 12:11:59 -07:00
Alexander Rose
65b52c8ecd Merge branch 'master' into fix-pdb-insCode-labelSeq 2023-10-21 12:11:39 -07:00
Alexander Rose
203fb2f7fe missing prop 2023-10-15 15:47:32 -07:00
Alexander Rose
492494033f type fixes 2023-10-15 15:45:14 -07:00
Alexander Rose
9de6d86a0f typo 2023-10-15 15:40:02 -07:00
Alexander Rose
23fdbdea54 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-10-15 15:30:42 -07:00
Alexander Rose
8fa9c19346 add ui for loading entries from pdb & pdb-dev 2023-10-15 15:29:16 -07:00
Alexander Rose
ab10007d60 fix hiz error with zero size viewport 2023-10-15 15:28:19 -07:00
Alexander Rose
7a6094298b typo 2023-10-15 14:13:58 -07:00
dsehnal
ab34a59677 3.41.0 2023-10-15 13:23:58 +02:00
dsehnal
7a96cdd52d changelog 2023-10-15 13:20:01 +02:00
midlik
65cad5ea4d Assembly Symmetry extension customization (#950)
* Show assembly symmetry from PDBe API (quick and dirty)

* Treat 404 from PDBe API as success

* RCSBAssemblySymmetry extension: make defaults configurable via plugin config items

* RCSBAssemblySymmetry: revert configs to default values

* RCSBAssemblySymmetry: correctly handle non-assembly structure with PDBe API
2023-10-15 13:05:50 +02:00
Alexander Rose
fe433fc7b0 load example, pdb, pdbdev via get parameter 2023-10-14 21:53:12 -07:00
Alexander Rose
ba173978d3 treat water as separate type 2023-10-14 21:49:51 -07:00
Alexander Rose
b3aed2ead7 fix clipping for merged mmcif structures 2023-10-14 21:49:11 -07:00
Alexander Rose
c57774a62e coloring improvements & tweaks 2023-10-14 21:48:16 -07:00
Alexander Rose
199b767bbd ignore shift for highlight with pointer lock 2023-10-14 21:43:14 -07:00
Alexander Rose
0c3131ff56 add ultra graphics mode 2023-10-14 21:42:11 -07:00
Alexander Rose
7433fe07f1 type fixes 2023-10-14 21:39:34 -07:00
Alexander Rose
a765ba8e3b Merge pull request #949 from JonStargaryen/master
Fix layout typo
2023-10-10 21:49:30 -07:00
Sebastian Bittrich
8594ce80a9 cl 2023-10-10 10:04:23 -07:00
Sebastian Bittrich
915797c4a4 fix layout typo 2023-10-10 09:49:24 -07:00
giagitom
70ebdc6b80 Merge branch 'fix-pdb-insCode-labelSeq' of https://github.com/molstar/molstar 2023-10-09 11:37:28 +02:00
Alexander Rose
44c69f538b fix partial polymer trace sec-struc type 2023-10-08 22:06:35 -07:00
Alexander Rose
b53a52b04d fix handling of pdb files with insertion codes 2023-10-07 21:48:17 -07:00
Alexander Rose
e4396039fd SetUtils performance tweaks 2023-10-07 13:44:02 -07:00
Alexander Rose
296b6902b1 Improve SetUtils performance
- use ES6 features
- add setutils perf test
2023-10-07 13:42:23 -07:00
Alexander Rose
0795f06f28 Merge branch 'master' of https://github.com/molstar/molstar into immer-es6 2023-10-07 11:12:46 -07:00
Alexander Rose
a01f159889 add transparency to advanced simple-settings 2023-10-07 11:01:56 -07:00
Alexander Rose
4ea2eadb78 reorder bottom instance grid for performance 2023-10-07 11:01:29 -07:00
David Sehnal
e548a3ed85 add PluginContext.initialized promise (#935) 2023-10-02 19:46:02 +02:00
Alexander Rose
0e326bd4de Merge pull request #20 from arose/upscaling
[WIP] added various props
2023-09-30 13:19:48 -07:00
Alexander Rose
c1de7df9fb tweak graphics mode 2023-09-30 13:18:49 -07:00
Alexander Rose
3addc567a9 changelog 2023-09-30 12:10:15 -07:00
Alexander Rose
4d2d127dcc Merge branch 'master' of https://github.com/molstar/molstar into upscaling 2023-09-30 12:09:51 -07:00
Alexander Rose
fc44e66b26 3.40.1 2023-09-30 10:53:23 -07:00
Alexander Rose
98f3f5a23b changelog 2023-09-30 10:50:23 -07:00
Alexander Rose
f2f10d0cb5 3.40.0 2023-09-30 10:47:30 -07:00
Alexander Rose
aed1056d6c Merge pull request #932 from molstar/sharpening
Sharpening
2023-09-30 10:42:59 -07:00
Alexander Rose
be47ac09c9 schema updates 2023-09-30 10:37:27 -07:00
Alexander Rose
d5e7797a40 package updates 2023-09-30 10:33:44 -07:00
Alexander Rose
0aeac628c7 Merge pull request #929 from molstar/better-bounding-spheres
fix bounding sphere calculations for "element-like" visuals
2023-09-30 10:21:03 -07:00
Alexander Rose
668d617cd7 Merge branch 'master' into better-bounding-spheres 2023-09-30 10:20:46 -07:00
Alexander Rose
62ed993f0d changelog 2023-09-30 10:19:23 -07:00
Alexander Rose
aa0a008a41 gracefully handle missing HTMLImageElement 2023-09-30 10:02:12 -07:00
Alexander Rose
89f01f202d add sharpening postprocessing pass 2023-09-30 09:39:15 -07:00
Alexander Rose
733190f7a0 scale outline by pixelRatio 2023-09-30 09:38:44 -07:00
Alexander Rose
50429aacfa fix setSize not always applied to passes 2023-09-30 09:37:58 -07:00
David Sehnal
fa541bdbd3 hide right panel (#922) 2023-09-29 14:51:48 +02:00
Sebastian Bittrich
77d173afed Update RCSB PDB validation report URL (#930)
* update RCSB PDB valrep URL

* cl

* https & more tweaks
2023-09-29 14:51:07 +02:00
Alexander Rose
1415a21c09 fix spec 2023-09-28 22:17:04 -07:00
Alexander Rose
dd2593475a refactor transparency graphics variant handling 2023-09-28 21:55:28 -07:00
dsehnal
a934001ae8 fix bounding sphere calculations 2023-09-28 18:18:48 +02:00
midlik
e5d4606437 Add blockIndex parameter to TrajectoryFromMmCif (#928) 2023-09-28 16:45:19 +02:00
Alexander Rose
350dddd83a wip, add canvas3dcontext props
- transparency (replacing enableWboit/enableDpoit)
- add canvas3dcontext to snapshot
2023-09-27 22:19:36 -07:00
Alexander Rose
7566dd4e9a wip, add canvas3dcontext props
- pixelScale
- pickScale
- move pickPadding to canvas3d props
2023-09-26 21:48:54 -07:00
Alexander Rose
cb04c74c60 wip, support changing pixel-scale 2023-09-24 22:02:45 -07:00
Alexander Rose
ad937f8fe5 make hi-Z min-level a parameter 2023-09-24 22:02:00 -07:00
Alexander Rose
66017cf166 top/bottom level instance-grid 2023-09-24 22:01:19 -07:00
Alexander Rose
898f0d6462 add sharpening postprocessing 2023-09-16 22:15:37 -07:00
Alexander Rose
cf90418f89 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-09-16 22:06:30 -07:00
Alexander Rose
fb16cd0070 typo 2023-09-16 22:06:08 -07:00
Alexander Rose
5ca126be94 also call hiZ.render with multiSample enabled 2023-09-16 22:02:48 -07:00
Alexander Rose
7a8de81e6f me: improve lod transparency with alphaThickness 2023-09-16 22:01:23 -07:00
Alexander Rose
143760f7db Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-09-16 21:50:17 -07:00
Alexander Rose
c427549b8d add support for webgl extensions
- EXT_conservative_depth
- WEBGL_stencil_texturing
- EXT_clip_control
2023-09-16 21:47:08 -07:00
Alexander Rose
310300bde8 add alphaThickness parameter for spheres 2023-09-16 12:13:34 -07:00
Alexander Rose
11604b9e8f add MultiSampleParams.reduceFlicker 2023-09-16 12:08:38 -07:00
Alexander Rose
973b326157 hi-z: support non-canvas viewports 2023-09-10 14:35:26 -07:00
Alexander Rose
c37c63d990 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-09-09 23:28:46 -07:00
Alexander Rose
cc1bf482f2 add support for WEBGL_clip_cull_distance 2023-09-09 12:27:22 -07:00
Alexander Rose
61a351b3d4 Merge pull request #906 from JonStargaryen/atomcount
ModelServer ligand queries: fix atom count reported by SDF/MOL/MOL2 export
2023-09-09 10:58:06 -07:00
Alexander Rose
9e91a242bf Merge branch 'master' into atomcount 2023-09-09 10:57:53 -07:00
Alexander Rose
c3daa1a162 Merge pull request #907 from JonStargaryen/ccd-aromatic
CCD extension: Make visuals for aromatic bonds configurable
2023-09-09 10:56:35 -07:00
Alexander Rose
fe086fb62e Merge branch 'master' into ccd-aromatic 2023-09-09 10:56:23 -07:00
Alexander Rose
c2217829a3 improve Canvas3DContext types 2023-09-09 10:54:14 -07:00
Alexander Rose
f30686917f hi-z improvements
- support orthographic camera
- check near plane
- math optimizations
- debug support
- disable for non-canvas viewports
- support pixelScale
2023-09-09 10:51:37 -07:00
Alexander Rose
7b18545e1d improve Canvas3DContext types 2023-09-09 10:46:45 -07:00
David Sehnal
6333c8073f Add optional CifFile to MmcifFormat.data (#912)
* Add optional CifFile to MmcifFormat.data

* fix
2023-09-08 19:24:18 +02:00
Sebastian Bittrich
2801bcf111 CCD extension: Make visuals for aromatic bonds configurable 2023-09-06 15:20:45 -07:00
Sebastian Bittrich
8a2461e157 global cl 2023-09-05 14:09:21 -07:00
Sebastian Bittrich
0a081e2a8a ModelServer version 2023-09-05 14:07:19 -07:00
Sebastian Bittrich
700a3fe95c ligand queries: fix atom count reported by SDF/MOL/MOL2 export 2023-09-05 14:06:07 -07:00
dsehnal
febc634d8b fix changelog 2023-09-05 18:49:52 +02:00
David Sehnal
0105f75bb6 InputObserver tap => click (#901) 2023-09-05 18:47:52 +02:00
David Sehnal
4cc2073eaa fix updateFocusRepr (#903) 2023-09-05 06:01:47 +02:00
Alexander Rose
b657fa15f5 add stats.culled 2023-09-04 20:46:12 -07:00
Alexander Rose
72446d06ed disable hi-Z for orthogrpahic camera 2023-09-02 20:56:02 -07:00
Alexander Rose
dd7499b7f6 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-09-02 12:19:31 -07:00
Alexander Rose
9ac204cb6e 3.39.0 2023-09-02 12:16:11 -07:00
Alexander Rose
73378bbe9d schema updates 2023-09-02 12:08:52 -07:00
Alexander Rose
9b5fd2595c package updates 2023-09-02 12:06:21 -07:00
Alexander Rose
bca2073ed0 changelog 2023-09-02 11:34:26 -07:00
Alexander Rose
f264e4d6b8 webgl tweaks
- export getBuffer
- add glEnumToString helper
2023-09-02 11:30:09 -07:00
Alexander Rose
c86c00c958 hi-z improvements
- clear hi-z buffer on scene & size changes
- check red/float reading support
- add max frame lag
- mark  hi-z buffer as ready for use
2023-09-02 11:27:49 -07:00
Alexander Rose
bbce807d5e webgl tweaks
- export getBuffer
- add glEnumToString helper
2023-09-02 11:11:05 -07:00
Sebastian Bittrich
795222b5b4 Allow toggling of hydrogens as part of LabelTextVisual (#900)
* Allow toggling of hydrogens as part of `LabelTextVisual`

* fix typo
2023-08-30 10:51:51 +02:00
Alexander Rose
25eb4450ad support iv2/3/4 uniforms 2023-08-27 12:08:57 -07:00
Alexander Rose
140df13dae improve texture print helper 2023-08-27 12:08:39 -07:00
Alexander Rose
8b132d599e add hi-z occlusion culling 2023-08-27 12:04:48 -07:00
Alexander Rose
cbaf5129f9 tweak graphics mode props 2023-08-27 11:45:37 -07:00
Alexander Rose
117e2b2a1a improve texture print helper 2023-08-27 09:56:04 -07:00
Alexander Rose
301b9287ea improve MultiDrawBaseData setup/update 2023-08-27 09:52:37 -07:00
Alexander Rose
81a738c6a6 support iv2/3/4 uniforms 2023-08-27 09:50:26 -07:00
Alexander Rose
f4d15a5a31 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-08-27 09:43:21 -07:00
Alexander Rose
792cd513a8 faster bounding rectangle for imposter spheres 2023-08-27 09:40:52 -07:00
Shinn
14e6172c33 add some elements name for guessElementSymbolString function (#883) 2023-08-03 16:25:47 +02:00
Alexander Rose
17e278cefb Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-07-30 13:10:19 -07:00
Alexander Rose
911433e056 3.38.3 2023-07-29 23:10:31 -07:00
Alexander Rose
6b585cf0d6 fix imposter spheres not updating 2023-07-29 23:07:18 -07:00
Alexander Rose
86211aaf3a 3.38.2 2023-07-24 22:58:57 -07:00
Alexander Rose
071623f5b6 changelog 2023-07-24 22:56:08 -07:00
Alexander Rose
21e514ec1e fix non-physical keys support 2023-07-24 22:55:32 -07:00
Alexander Rose
9bc0ab12e7 Merge pull request #878 from JonStargaryen/ccd-fix
Fix logic for trajectoryFromCCD
2023-07-24 22:54:17 -07:00
Sebastian Bittrich
1d1bd05400 cl 2023-07-24 13:38:22 -07:00
Sebastian Bittrich
faa750bbf9 allow entries with chem_comp_atom - fixes #877 2023-07-24 13:33:48 -07:00
Alexander Rose
e92e5c5cef 3.38.1 2023-07-22 17:41:29 -07:00
Alexander Rose
b49230ea1f fix pixel-scale not updated in SSAO pass 2023-07-22 17:37:35 -07:00
dsehnal
44ebc1d39a 3.38.0 2023-07-18 17:39:42 +02:00
dsehnal
8d8e45f4ce changelog 2023-07-18 17:35:56 +02:00
Alexander Rose
898d877aa1 support non-physical keys in bindings trigger code (#860)
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2023-07-18 17:34:53 +02:00
David Sehnal
85dba9b1a4 ability to disable extension in the default viewer (#872) 2023-07-18 17:33:33 +02:00
dsehnal
6b5e90c5fa Merge branch 'master' of https://github.com/molstar/molstar 2023-07-17 09:40:25 +02:00
dsehnal
e231fbf3d7 add LRUCache.remove 2023-07-17 09:40:06 +02:00
David Sehnal
0ee8525b2d update getStateSnapshot behavior (#858)
* update getStateSnapshot behavior

* update syncCurrent
2023-07-13 19:38:35 +02:00
midlik
106ee614e7 Add 'Chain Instance' and 'Uniform' options for 'Carbon Color' param (#868) 2023-07-12 09:31:35 +02:00
David Sehnal
34056751f9 fix distinct palette getSamples (#857) 2023-07-11 08:52:36 +02:00
Alexander Rose
cc737192ca Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-07-09 20:49:34 -07:00
Alexander Rose
1afea8a86a Merge pull request #863 from molstar/approx-spheres
add approximate option for spheres rendering
2023-07-09 20:43:29 -07:00
Alexander Rose
96d5bf2447 Merge branch 'master' of https://github.com/molstar/molstar into approx-spheres 2023-07-09 20:38:10 -07:00
Alexander Rose
f9265a7049 fix clipping of approximate spheres 2023-07-09 20:31:55 -07:00
Alexander Rose
5c57137890 fix bitwiseAnd for glsl 1.00 2023-07-09 19:02:30 -07:00
Alexander Rose
4e71618d0f Merge pull request #864 from molstar/spheres-mem
reduce spheres geo memory usage
2023-07-09 18:55:14 -07:00
Alexander Rose
de660cc233 Merge branch 'master' into spheres-mem 2023-07-09 18:55:07 -07:00
Alexander Rose
616a1dabfa Merge pull request #859 from molstar/protein-caps
add more common protein caps
2023-07-09 18:47:36 -07:00
Alexander Rose
46ea39703f Merge branch 'master' into protein-caps 2023-07-09 18:47:30 -07:00
Alexander Rose
6cf20d0c44 Merge pull request #861 from molstar/snapshot-opened-event
add opened event to PluginStateSnapshotManager
2023-07-09 18:46:39 -07:00
Alexander Rose
0737e23b70 Merge branch 'master' into snapshot-opened-event 2023-07-09 18:46:30 -07:00
Alexander Rose
70d0c15d28 Merge pull request #862 from molstar/euler
add euler math primitive
2023-07-09 18:46:03 -07:00
Alexander Rose
9272c8c5ec Merge branch 'master' into euler 2023-07-09 18:45:55 -07:00
Alexander Rose
a3349f82fc Merge pull request #865 from molstar/element-stride
add stride option to element sphere & point visuals
2023-07-09 18:45:27 -07:00
Alexander Rose
11aeb6daf4 improve handling of cellpack membrane models 2023-07-09 18:44:36 -07:00
Alexander Rose
daec7e31ff add structure-element-sphere visual 2023-07-09 18:44:09 -07:00
Alexander Rose
c98cdc9360 improve cellpack mmcif detection 2023-07-09 18:42:17 -07:00
Alexander Rose
4d399edbdd add stride option to element sphere & point visuals 2023-07-09 11:25:56 -07:00
Alexander Rose
64598eba96 fix vertex count 2023-07-09 11:04:36 -07:00
Alexander Rose
aa25874775 reduce spheres geo memory usage
- derive mapping from VertexID
- pull position and group from texture
2023-07-08 22:27:45 -07:00
Alexander Rose
dccc06d497 tweaks to approximate spheres rendering 2023-07-08 16:19:02 -07:00
Alexander Rose
c000526cf8 add approximate option for spheres rendering 2023-07-08 16:05:24 -07:00
Alexander Rose
2166ab455c add euler math primitive 2023-07-08 15:41:14 -07:00
Alexander Rose
4de9ce01fc package updates 2023-07-08 15:40:20 -07:00
Alexander Rose
f543fd5683 exports 2023-07-08 13:25:56 -07:00
Alexander Rose
8535013ee5 add scissors icon 2023-07-08 13:25:29 -07:00
Alexander Rose
320ab77f8e properly switch-off fog 2023-07-08 13:23:39 -07:00
Alexander Rose
982feef0c6 add opened event to PluginStateSnapshotManager 2023-07-08 12:05:51 -07:00
Alexander Rose
bd6d04cefb add more common protein caps 2023-07-08 12:00:24 -07:00
Alexander Rose
250013570d tweak graphics-mode handling 2023-07-08 11:56:26 -07:00
David Sehnal
5e1c351efc fix display issue with sifts mapping (#854)
* fix display issue with sifts mapping

* update header
2023-07-06 20:30:01 +02:00
Alexander Rose
35739ab71b handle petworld using asymId for multiple entities 2023-07-04 19:48:32 -07:00
Alexander Rose
bb765968f1 fix missing uFog uniform 2023-07-03 23:15:57 -07:00
Alexander Rose
eb25d66359 add graphics mode to me app 2023-07-03 22:56:41 -07:00
Alexander Rose
3db28708c3 add option to approximate sphere impostors 2023-07-03 22:54:50 -07:00
Alexander Rose
4fb18b9afd properly switch-off fog 2023-07-03 22:53:28 -07:00
Alexander Rose
28693177cd more unit merging; split petworld membrane 2023-07-01 10:50:50 -07:00
Alexander Rose
cd2ac77469 merge non-instanced units in mmcif loader 2023-06-25 19:29:34 -07:00
Alexander Rose
8777f907ee reduce Spheres memory usage
- derive mapping from VertexID
- pull position and group from texture
2023-06-24 15:17:59 -07:00
Alexander Rose
5a6ac41b28 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-06-21 21:03:53 -07:00
Alexander Rose
61a294c889 3.37.1 2023-06-20 22:02:56 -07:00
Alexander Rose
71fbd6baab changelog 2023-06-20 21:58:53 -07:00
Alexander Rose
33430a836a fix lines, text, points rendering 2023-06-20 21:58:32 -07:00
Alexander Rose
2ac34f96f5 fix cellpack cif detection 2023-06-19 22:17:23 -07:00
Alexander Rose
de5d60f4d2 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-06-18 16:24:37 -07:00
Alexander Rose
f428e9f39e fix issues with wboit/dpoit in large scenes
- remove unneeded depth check (depth texture support required for wboit/dpoit)
2023-06-18 16:15:24 -07:00
Alexander Rose
72e3a31750 fix issues with wboit/dpoit in large scenes
- remove unneeded depth check (depth texture support required for wboit/dpoit)
2023-06-18 16:07:10 -07:00
Alexander Rose
5bcb0b19e5 support more structure formats 2023-06-18 12:56:52 -07:00
Alexander Rose
0277581684 generic loader improvements 2023-06-17 23:53:03 -07:00
Alexander Rose
d508988ba4 use inverted-xray 2023-06-17 00:17:03 -07:00
Alexander Rose
7352799270 Merge branch 'mesoscale-explorer' of https://github.com/arose/mesoscale-explorer into generic-loader 2023-06-16 23:57:26 -07:00
Alexander Rose
7b524dda7c Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-06-16 23:56:47 -07:00
Alexander Rose
2d26425cbe 3.37.0 2023-06-16 23:46:03 -07:00
Alexander Rose
f6030aee25 changelog 2023-06-16 23:42:22 -07:00
Alexander Rose
609e03f7d2 add mipmap-based blur for image backgrounds 2023-06-16 23:12:13 -07:00
Alexander Rose
ba12a8bbee add contextHash to SizeTheme 2023-06-16 22:29:38 -07:00
Alexander Rose
947f293844 Merge pull request #839 from molstar/xray-inverted
add inverted xray-shaded option
2023-06-16 22:26:55 -07:00
Alexander Rose
fbff0e769c Merge branch 'master' into xray-inverted 2023-06-16 22:26:47 -07:00
Alexander Rose
3798223d39 Merge pull request #840 from molstar/model-export-name
Model export name
2023-06-16 22:26:22 -07:00
Alexander Rose
ac9c23dc65 3.36.1-model-export-name.0 2023-06-12 22:22:35 -07:00
Alexander Rose
096f492ccb add ability to set a file name for structures 2023-06-12 22:09:13 -07:00
Alexander Rose
ba96da9354 add inverted xray-shaded option 2023-06-11 15:31:24 -07:00
Alexander Rose
6c1d17bac5 3.36.1 2023-06-11 12:44:43 -07:00
Alexander Rose
ad2ccf4e07 fix changelog 2023-06-11 12:41:59 -07:00
Alexander Rose
dc1b7b4693 3.36.0 2023-06-11 12:28:28 -07:00
Alexander Rose
59e4e2b31d schema updates 2023-06-11 12:25:05 -07:00
Alexander Rose
d2483dc449 package updates 2023-06-11 12:23:42 -07:00
Alexander Rose
86dcf22728 ux improvements, mmcif support 2023-06-11 10:51:55 -07:00
Alexander Rose
f47823577d Merge branch 'mesoscale-explorer' of https://github.com/arose/mesoscale-explorer into generic-loader 2023-06-07 23:13:13 -07:00
Alexander Rose
671a982463 get entities/groups tweaks 2023-06-07 23:12:36 -07:00
Alexander Rose
4244c6f5e1 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-06-07 22:04:45 -07:00
Alexander Rose
d26946e9ee Merge pull request #838 from molstar/cartoon-color-nucleic
Cartoon improvements
2023-06-05 23:06:06 -07:00
Alexander Rose
cd045a6b48 fix spec 2023-06-05 22:49:43 -07:00
Alexander Rose
2407729d27 simplify sub color theme creation 2023-06-05 22:43:51 -07:00
Alexander Rose
1aa22b9fa0 add saturation/lightness to uniform color theme 2023-06-05 22:42:34 -07:00
Alexander Rose
b00b0827c8 fix circular deps 2023-06-05 21:33:19 -07:00
Alexander Rose
fe4df71d02 wip, generic loader
- zip with json manifest
2023-06-05 00:08:15 -07:00
Alexander Rose
8f03e07632 tweak clip props handling
- don't force instance variant
2023-06-04 18:35:31 -07:00
Alexander Rose
5958b31a6d add Euler math primitive 2023-06-04 18:15:12 -07:00
Alexander Rose
35c9f39a69 add cartoon color theme
- separates colorings for for mainchain and sidechain visuals
- uses isSecondary mechanism of LocationIterator
2023-06-03 11:15:33 -07:00
Alexander Rose
7dd420cc18 add nucleicProfile param to cartoon repr 2023-06-03 11:13:08 -07:00
Alexander Rose
ace991da5d optimize select/highlight
- highlight whole repr when possible
- make cellpack entity structures their own roots
2023-05-29 23:21:33 -07:00
Alexander Rose
5e9bc89c75 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-05-29 15:35:34 -07:00
Alexander Rose
1d434c259a ignore LociLabelManager without providers 2023-05-29 15:01:26 -07:00
Alexander Rose
6d193edd68 add keyReleased event 2023-05-29 15:01:14 -07:00
Alexander Rose
8d0c80f270 various tweaks
- add MesoSelectLoci behavior
- add MesoscaleState transform
- show groupBy only if there is more than one option
- make groupBy and filter state-savable
2023-05-29 15:00:38 -07:00
Alexander Rose
2ae36e181d add keyReleased event 2023-05-29 14:57:26 -07:00
Alexander Rose
52692a405d ignore LociLabelManager without providers 2023-05-29 14:57:08 -07:00
Alexander Rose
9bf859d6ed Merge pull request #835 from JonStargaryen/channels
Adjust VolumeRepresentation#setState
2023-05-29 11:41:33 -07:00
Sebastian Bittrich
207230d565 check against _state 2023-05-29 11:16:17 -07:00
Alexander Rose
b7a673f38e Merge pull request #731 from JonStargaryen/master
Parse CCD Files
2023-05-29 11:11:57 -07:00
Sebastian Bittrich
2204e4e0d0 merge upstream 2023-05-29 09:24:11 -07:00
Sebastian Bittrich
6276365766 update setState of unit repr 2023-05-29 09:18:07 -07:00
Sebastian Bittrich
505b04c92d merge upstream 2023-05-29 08:56:37 -07:00
Alexander Rose
0a91a35cf3 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-05-28 12:37:46 -07:00
Alexander Rose
fc84dcb037 Merge pull request #836 from molstar/structure-selection-snapshot
add snapshot support for structure selections
2023-05-28 12:32:37 -07:00
Alexander Rose
103b0dcebd Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-05-27 13:26:03 -07:00
Alexander Rose
2f29ff7314 Merge pull request #826 from molstar/graph-bonds
Graph & bonds calc tweaks & fixes
2023-05-27 11:07:56 -07:00
Alexander Rose
b37f043876 Merge branch 'master' into graph-bonds 2023-05-27 11:07:45 -07:00
Alexander Rose
f0e725f65c tweak CCD coordinate type handling 2023-05-27 11:01:27 -07:00
Alexander Rose
23a34e2df1 add snapshot support for structure selections 2023-05-27 10:14:46 -07:00
Alexander Rose
d11e242b70 fix background occlusion handling 2023-05-27 10:07:58 -07:00
Sebastian Bittrich
d9af0ca068 cl 2023-05-26 14:04:31 -07:00
Sebastian Bittrich
b7f10acbf0 adjust VolumeRepresentation#setState - closes #210 2023-05-26 13:59:45 -07:00
Sebastian Bittrich
43749ccdbd merge 2023-05-23 09:24:46 -07:00
David Sehnal
3bf4a8f8e6 optimize computeInterUnitBonds (#830) 2023-05-23 09:08:00 +02:00
Alexander Rose
f0ae1b3347 fix EdgeBuilder.addNextEdge for loop edges 2023-05-22 23:27:06 -07:00
Alexander Rose
99809d25b9 remove erroneous bounding-box overlap test 2023-05-22 23:25:08 -07:00
Sebastian Bittrich
e83c0af67c meta 2023-05-22 13:10:47 -07:00
Sebastian Bittrich
2ddf94313e Merge remote-tracking branch 'upstream/master' 2023-05-22 13:08:41 -07:00
Sebastian Bittrich
da5965c956 meta 2023-05-22 13:04:58 -07:00
Sebastian Bittrich
31be0af3c9 shrink diff 2023-05-22 12:55:23 -07:00
Sebastian Bittrich
38c550b245 factor out to extension 2023-05-22 11:59:57 -07:00
Sebastian Bittrich
95a7a2cef9 rm CCDCoordinateTypeProp 2023-05-22 09:16:28 -07:00
giagitom
5934f355c2 Fixes and added changelog entry 2023-05-22 17:02:25 +02:00
giagitom
225d051dd6 Merge branch 'master' into 2-colors-cylinders 2023-05-22 16:50:59 +02:00
Alexander Rose
1a1ec51736 fix bbox overlap test in Structure.eachUnitPair 2023-05-20 22:46:59 -07:00
Alexander Rose
299aae56c1 typing improvements 2023-05-20 19:22:04 -07:00
Alexander Rose
781824c961 operators in IndexPairBonds as directed property 2023-05-20 19:21:40 -07:00
Alexander Rose
fae4aae99f update immer to v10 (#819) 2023-05-20 17:56:11 -07:00
Alexander Rose
6acc87abc6 change build target to ES6 2023-05-20 17:55:05 -07:00
Sebastian Bittrich
930cfa2590 comment 2023-05-15 11:45:39 -07:00
Sebastian Bittrich
35439f01aa rather heavy-handed tracking of ideal/model coords 2023-05-15 11:44:04 -07:00
Alexander Rose
af489e8cc5 fix interactivity granularity 2023-05-14 22:49:57 -07:00
Alexander Rose
a15f2ed456 mesoscale state cleanup 2023-05-14 22:21:50 -07:00
Alexander Rose
9c921fd061 adjust lod-level stride by sizeFactor 2023-05-14 22:21:27 -07:00
Alexander Rose
e719c54e2b Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-05-14 11:59:27 -07:00
Alexander Rose
71121e52af 3.35.0 2023-05-14 11:50:42 -07:00
Alexander Rose
c08155717f changelog 2023-05-14 11:47:29 -07:00
Alexander Rose
de4164e7a4 package updates 2023-05-14 11:47:04 -07:00
Alexander Rose
e34d1242a9 Merge pull request #820 from molstar/cantor-mol-script
add cantor-pairing functions to mol-script
2023-05-14 11:40:18 -07:00
Alexander Rose
5b82641018 add sign to core.math in mol-script 2023-05-13 18:22:21 -07:00
Alexander Rose
de2f0c27b2 add trunc to core.math in mol-script 2023-05-13 18:08:19 -07:00
Alexander Rose
71e2afe781 tweak principal-axes spec 2023-05-13 16:30:23 -07:00
Alexander Rose
3cba621fcf add cantor-pairing functions to mol-script 2023-05-13 16:22:50 -07:00
Alexander Rose
d79a2077c1 package updates 2023-05-13 12:37:21 -07:00
Alexander Rose
6925547b5f Merge pull request #804 from giagitom/single-aromatic-dash-count
Enable odd dash count (1,3,5)
2023-05-13 11:41:12 -07:00
Alexander Rose
84aae8cf0a Merge branch 'master' into single-aromatic-dash-count 2023-05-13 11:17:47 -07:00
Alexander Rose
bdb42e39ec Merge pull request #809 from giagitom/principal-axis-spec
Adding principal axes spec
2023-05-13 10:23:29 -07:00
Alexander Rose
6edd54ee6d use Vec3.isFinite as name 2023-05-13 10:12:47 -07:00
Alexander Rose
198f884d8b Merge pull request #817 from molstar/pdb-assemblies-fix
Fix Archive PDB assembly loading
2023-05-13 10:04:34 -07:00
Alexander Rose
2c7d0a6721 comment 2023-05-13 10:03:39 -07:00
Alexander Rose
7ef15ede0d mesh exporter improvements
- set alphaMode and doubleSided in glTF export
- fix flipped cylinder caps
2023-05-13 09:45:27 -07:00
Sebastian Bittrich
3d96298b55 Merge remote-tracking branch 'upstream/master' 2023-05-12 14:45:40 -07:00
Sebastian Bittrich
964f045e56 refactor 2023-05-12 11:52:18 -07:00
Sebastian Bittrich
d3364ac109 control what coord set to show 2023-05-12 11:28:51 -07:00
Sebastian Bittrich
a5b963c919 hide hydrogens by default 2023-05-12 09:41:56 -07:00
Gianluca Tomasello
d6fcbbf543 Merge branch 'master' into single-aromatic-dash-count 2023-05-12 15:16:02 +02:00
giagitom
f2e7e2eaf2 Fix unequeal aromatic dashes 2023-05-12 15:13:06 +02:00
giagitom
01c4c63114 Merge brunch master 2023-05-12 15:10:50 +02:00
Sebastian Bittrich
22f9bc4ff1 swap ideal/model labels, handle entirely missing coords 2023-05-11 15:42:13 -07:00
Sebastian Bittrich
c6c4350638 align differing atom sets 2023-05-11 11:28:40 -07:00
giagitom
a17a0c4527 Added changelog record 2023-05-11 16:37:25 +02:00
giagitom
8e507012c1 Merge branch 'master' into principal-axis-spec 2023-05-11 16:14:20 +02:00
giagitom
beb4351dc9 Add check to avoid non-finite origin vector 2023-05-11 16:13:16 +02:00
dsehnal
afbb940721 headers 2023-05-11 13:24:17 +02:00
dsehnal
f5c619a4c7 Fix Archive PDB assembly loading 2023-05-11 13:23:28 +02:00
Sebastian Bittrich
1b0401dff5 filter for present valuekind 2023-05-09 14:50:37 -07:00
valasatava
649e779100 Add HYP to the list of amino acids (#815)
* add modified amino acid "hydroxyproline" (HYP) present in collagen molecules to the list of amino acids

* update changelog
2023-05-09 16:27:42 +02:00
Alexander Rose
18c4de4c0f Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-05-07 20:43:13 -07:00
Alexander Rose
f61e0e72a8 move web3dsurvey analytics into iframe
- only deployed on molstar.org
2023-05-07 20:41:29 -07:00
Alexander Rose
803f75fdde Merge pull request #797 from molstar/ignore-hydrogens-interactions
support ignoreHydrogens for interactions
2023-05-07 19:56:33 -07:00
Alexander Rose
718d314eda Merge branch 'master' into ignore-hydrogens-interactions 2023-05-07 19:56:19 -07:00
Alexander Rose
adab6b0a6a Merge pull request #812 from valasatava/pdb-to-cif-header
Parse HEADER record when reading PDB file
2023-05-06 16:49:36 -07:00
Alexander Rose
d295ed2eca add options to mesh-exporter
- lines/points as triangles
- include hidden
- primitives qaulity
2023-05-06 16:35:01 -07:00
Yana Rose
d18cbfa8cf update the date in the added file header 2023-05-05 12:33:39 -07:00
Yana Rose
59f881c4be handle empty HEADER record 2023-05-05 12:32:39 -07:00
JonStargaryen
0295e0ef63 factor out CoordinateType 2023-05-05 09:41:46 -07:00
Yana Rose
dcdb95a055 update changelog 2023-05-04 22:11:36 -07:00
Yana Rose
e379d27722 add my name to package.json's contributors 2023-05-04 22:11:22 -07:00
Yana Rose
41fbe0d2b7 update headers of modified files 2023-05-04 22:11:05 -07:00
Yana Rose
1231666b06 restore package-lock 2023-05-04 21:52:56 -07:00
Yana Rose
b302bb8455 parse header when reading PDB file 2023-05-04 21:30:02 -07:00
Sebastian Bittrich
6e82405600 fix merge 2023-05-04 16:25:52 -07:00
Sebastian Bittrich
a678893bdb wip 2023-05-04 16:20:28 -07:00
Alexander Rose
430348a3cd support points & lines in glTF export (#810) 2023-05-03 19:23:40 +02:00
midlik
315401c166 struct-conn extension (#802)
* struct-conn extension toy example

* Minor changes (David's feedback)

* Showing struct_conn visuals

* Removed Interactions visual

* Caching struct_conns

* Removed testing buttons in index.html, updated CHANGELOG

* Addressed most of PR feedback

* Fixed structure node selection, docs

* Addressed feedback round 2
2023-05-03 18:01:51 +02:00
giagitom
b309c545f5 - Fixed dashes spacing
- Added changelog entry
2023-05-03 17:51:02 +02:00
David Sehnal
60b5d2d39b fix labels & optimize getData (#811) 2023-05-03 15:37:24 +02:00
David Sehnal
eb749a2a16 State.updateNode fix for Null parents (#807) 2023-05-02 16:12:38 +02:00
Dominik Tichy
6db96001a3 Partial atomic charges extension (#808)
* feat: partial charges extension

* chore: pullrequest actions

* feat: example

* fix: review changes

* fix: updated example structure categories

* fix(changelog): shorter description

* fix: code review changes

* fix: cosmetic changes
2023-05-02 16:09:42 +02:00
giagitom
257370ad58 - Removing unused variables
- Supporting meshes and lines
- Remove non-stub cap from last (if odd) dash
2023-05-01 22:02:33 +02:00
Alexander Rose
a12820bab9 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-04-30 21:11:27 -07:00
Alexander Rose
557bf63b55 prevent dragging of snapshot images 2023-04-30 21:10:24 -07:00
giagitom
0e32e0a785 lint-fix 2023-04-30 16:22:30 +02:00
giagitom
f2c607a4b2 Adding principal axes spec 2023-04-30 16:03:07 +02:00
David Sehnal
0d12a9e118 PluginState.setSnapshot fix (#805) 2023-04-27 12:34:44 +02:00
giagitom
02f418c8c5 Fix 2023-04-26 15:31:24 +02:00
giagitom
c59ae908b8 Implement 2 colors interpolation on impostor cylinders 2023-04-26 15:24:15 +02:00
giagitom
ba618c9e4a Allow for single aromatic dash count 2023-04-26 14:56:42 +02:00
Alexander Rose
de5b7f31f9 add custom sizeFactor for some cellpack entities 2023-04-25 22:21:18 -07:00
Alexander Rose
e264abb57c prevent dragging of snapshot images 2023-04-25 21:03:50 -07:00
Alexander Rose
46a84799b1 no componentManager in state 2023-04-25 20:58:02 -07:00
David Sehnal
ebd3ebe7b2 fix struct conn for waters (#803) 2023-04-25 16:25:39 +02:00
Alexander Rose
af451db432 group-by support for entities 2023-04-22 21:53:34 -07:00
Alexander Rose
804117475b lint fixes 2023-04-22 10:18:59 -07:00
Alexander Rose
09ab8d6219 Merge pull request #796 from MadCatX/ntc-tube-uniform-color
Add a uniform color theme for NtC tube that still paints the residue and segment dividers in a different color
2023-04-22 10:18:05 -07:00
Alexander Rose
f3a5369690 support ignoreHydrogens for interactions 2023-04-22 09:56:21 -07:00
Michal Malý
8bf2fe624d Add a uniform color theme for NtC tube that still paints the residue and
segment dividers in a different color
2023-04-20 17:38:55 +02:00
Alexander Rose
5ac435c6d1 only calculate instance-grid if there are instances 2023-04-16 12:54:09 -07:00
Alexander Rose
aab3759da2 fix file-info use 2023-04-16 12:46:52 -07:00
Alexander Rose
db1174bd32 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-04-16 12:23:07 -07:00
Alexander Rose
50c1b667c5 3.34.0 2023-04-16 12:19:38 -07:00
Alexander Rose
360031d37c Merge branch 'master' of https://github.com/molstar/molstar 2023-04-16 12:09:47 -07:00
Alexander Rose
9ec873e0db changelog 2023-04-16 11:58:31 -07:00
Alexander Rose
c830a720b0 package updates 2023-04-16 11:56:32 -07:00
Alexander Rose
1aa7d1e0f7 Merge pull request #782 from molstar/eachLocation
add eachLocation to representation/visual interface
2023-04-16 11:53:44 -07:00
Alexander Rose
c5c8de8628 Merge branch 'master' of https://github.com/molstar/molstar into eachLocation 2023-04-16 11:44:45 -07:00
Alexander Rose
74c6d6f5a1 changelog 2023-04-16 11:44:03 -07:00
Russell Parker
2bff0faff7 Address Node incompatibility in mol-util/file-info (#787)
* Alter getFileInfo to avoid `instanceof WebAPIClass` and simple renames

* Remove note

* Fix potentially bad `window` reference
2023-04-13 23:41:21 +02:00
dsehnal
4df028aa77 readAllLinesAsync fix 2023-04-13 20:33:05 +02:00
dsehnal
47c2d153aa tweak readLinesAsync 2023-04-13 20:25:20 +02:00
Alexander Rose
18be09e9d5 fix .getAllLoci for representations with structure.child 2023-04-12 23:28:16 -07:00
Alexander Rose
55e940e88c fix rendering with very small viewport and SSAO 2023-04-12 23:25:57 -07:00
Alexander Rose
7a3fc2047e Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-04-08 13:31:51 -07:00
Alexander Rose
e246f4e5ca add eachLocation to representation/visual interface 2023-04-08 10:17:00 -07:00
Alexander Rose
5e1bb4b106 Merge pull request #778 from MadCatX/ntc-tube-missing-atoms
Fix rendering of NtC tube when some of the required atoms are missing
2023-04-08 09:55:51 -07:00
Alexander Rose
0b2889bb99 Merge branch 'master' into ntc-tube-missing-atoms 2023-04-08 09:55:44 -07:00
Alexander Rose
2994caf411 Merge pull request #779 from MadCatX/restore-vertex-array-per-program
Fix broken rendering caused by changes in 291d7abb78
2023-04-08 09:53:55 -07:00
Alexander Rose
e157993a0f Merge branch 'master' of https://github.com/molstar/molstar into pr/MadCatX/779 2023-04-08 09:42:53 -07:00
Alexander Rose
6c7c9afc34 fix spec 2023-04-08 09:40:10 -07:00
Alexander Rose
2d0b17d93c improve trackball keyState handling with modifiers 2023-04-08 09:29:57 -07:00
midlik
033c613c89 Added "Zoom All", "Orient Axes", "Reset Axes" buttons (#776)
* Added "Zoom All", "Orient Axes", "Reset Axes" buttons

* Addressed PR776 feedback
2023-04-08 10:06:39 +02:00
Michal Malý
1985eb59dd Do not reuse vertex arrays among programs 2023-04-06 15:00:54 +02:00
Michal Malý
1cf6cbf8a3 changelog 2023-04-06 12:32:21 +02:00
Michal Malý
0b42379c34 Do not draw a NtC tube segment unless we have all required atoms 2023-04-06 12:20:13 +02:00
Alexander Rose
414c349974 changelog 2023-04-03 21:56:59 -07:00
Alexander Rose
cf6d5f7194 Merge pull request #774 from giagitom/markingDepth-avoid-alpha-0-rendering
Marking depth avoid alpha 0 rendering
2023-04-03 21:54:18 -07:00
Alexander Rose
949f5207b4 add ModifiersKeys.areNone 2023-04-03 21:46:28 -07:00
Alexander Rose
a1da374b32 add ModifiersKeys.areNone 2023-04-03 21:44:11 -07:00
giagitom
5460322d4a Update changelog 2023-04-03 12:50:27 +02:00
giagitom
8b2da0b787 avoid rendering of alpha 0 renderables on renderMarkingDepth 2023-04-03 12:46:11 +02:00
Alexander Rose
f2e5c8a30f Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-04-02 12:54:04 -07:00
Alexander Rose
3eaf4dacaf 3.33.0 2023-04-02 12:48:10 -07:00
Alexander Rose
d66d9b4dd7 changelog 2023-04-02 12:46:11 -07:00
Alexander Rose
cc52279e01 package updates 2023-04-02 12:45:42 -07:00
Alexander Rose
34b9a46f2d add camera controls behavior 2023-04-02 12:39:56 -07:00
Alexander Rose
0def474f6d Merge pull request #773 from molstar/model-conf-fields
include occupancy & B_iso_or_equiv in model conformation
2023-04-02 12:31:34 -07:00
Alexander Rose
e0ea9a2855 Merge branch 'master' into model-conf-fields 2023-04-02 12:31:21 -07:00
midlik
2bc381fe05 Forsake lazy imports (#772)
* Removed LazyImports (gl, pngjs, jpeg-js required as param of HeadlessPluginConstructor)

* Added a few methods to HeadlessPluginContext for rendering image without saving to file

* Updated CHANGELOG

* Lint

* Rolled back removing @types/jpeg-js from deps
2023-04-02 18:47:22 +02:00
Alexander Rose
95d84b9dbe Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-04-01 23:36:17 -07:00
Alexander Rose
1f78994ac0 changelog 2023-04-01 23:36:07 -07:00
Alexander Rose
fb3cd3bf52 include occupancy & B_iso_or_equiv in model conformation 2023-04-01 19:49:24 -07:00
Alexander Rose
c4414c7cc4 Merge pull request #581 from molstar/mmcif/parse-all-blocks
add TrajectoryFromMmCif loadAllBlocks param
2023-04-01 16:25:56 -07:00
Alexander Rose
e2f2ceb7a9 Merge branch 'master' into mmcif/parse-all-blocks 2023-04-01 16:25:45 -07:00
Alexander Rose
641e7efb11 improve camera when toggeling pointer-lock/fly-mode 2023-04-01 16:13:31 -07:00
Alexander Rose
e5e02e966f Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-04-01 11:47:30 -07:00
Alexander Rose
11f2ef50ef add Frustum3D and Plane3D math primitives 2023-04-01 11:43:52 -07:00
Alexander Rose
869ecfaf71 improve typing of toArray methods 2023-04-01 11:33:01 -07:00
Alexander Rose
cb8731815c changelog & param tweaks 2023-04-01 11:02:06 -07:00
Alexander Rose
a9177ad362 Merge branch 'master' of https://github.com/molstar/molstar into mmcif/parse-all-blocks 2023-04-01 10:44:49 -07:00
Alexander Rose
ad116df73b fix camera project/unproject
- was wrong when using offset viewport
2023-03-31 23:37:52 -07:00
Alexander Rose
f30b3a410c init camera for fly mode
- like for pointer-lock
2023-03-30 22:32:58 -07:00
Alexander Rose
c440ba2d4b gl tweaks
- add more docs
- clean schema types
2023-03-30 22:16:11 -07:00
Alexander Rose
a3267dafdb Merge pull request #762 from molstar/multi-scale-ssao
add multi-scale ssao
2023-03-30 22:13:43 -07:00
dsehnal
7a1e83733c throttle canvas resize events 2023-03-30 15:00:24 +02:00
Russell Parker
7cb96ce983 Handle resizing viewer element when window remains the same size (#763)
* Handle resizing viewer element when window remains the same size

* Fix bad rebase

* Fall back to window resize event listener when ResizeObserver not defined

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2023-03-30 14:51:20 +02:00
jpattle
a73633d0c3 Selection and focus improvements (#742)
* Updated measurements so that the toggle selection button is not shown if selection mode is turned off

* Updated selection controls so that they cannot be turned off if selection mode is not shown

* Extended camera focus bindings to allow override of behaviour to reset camera focus on click

* Exported default bindings for selection and focus so that they can be more easily selectively overridden

* Added description to changelog and headers to modified files

* Fixed spacing in text for toggling selection mode

* Updated camera bindings to not be a breaking change by setting the new bindings to be optional and using default values when undefined

* resolved linting issues with camera bindings

* updated superposition UI to hide selection toggle button when selection mode is disabled

* updated the default value for click to reset camera bindings
2023-03-30 14:49:35 +02:00
Alexander Rose
b2f8e8dd4e fix spec 2023-03-30 00:07:25 -07:00
Alexander Rose
291d7abb78 gl improvements
- remove unneccesary return values
- reuse vertex array among programs
- typo fixes
- cleanup material-textures
2023-03-29 23:50:30 -07:00
Alexander Rose
32873d787b fix theme smoothing not updated 2023-03-29 23:22:55 -07:00
Alexander Rose
e243d71abf cleanup level, light, clip assignments 2023-03-29 23:19:27 -07:00
Alexander Rose
2689d3f21a more input/controls fixes & tweaks
- no identify when pointer-lock & controls movement
- limit controls key bindings to viewport
- take controls minDistance into account for movement
2023-03-28 23:22:55 -07:00
dsehnal
c1bc008114 Fix JSX reference 2023-03-28 10:04:36 +02:00
Alexander Rose
254578460a input/controls fixes & tweaks
- assign trackball bindings in setProps
- remove cross element in input-observer dispose
- improve key event target handling
- add center dot to pointer-lock crosshair
2023-03-27 23:09:57 -07:00
Alexander Rose
f5467dd3b9 allow intra-residue contacts in single-residue models 2023-03-27 22:39:32 -07:00
Alexander Rose
9eb8714e11 add multi-scale ssao 2023-03-26 00:14:49 -07:00
Alexander Rose
847678ea56 improve canvas3d consoleStats 2023-03-26 00:14:05 -07:00
Alexander Rose
f08729a402 apply bumpiness as lightness with ignoreLight 2023-03-25 23:57:18 -07:00
Alexander Rose
a7c91257a7 Merge pull request #752 from molstar/input-controls
input/controls improvements
2023-03-25 23:52:10 -07:00
Alexander Rose
835369a91e change dragRotateZ binding to drag left+shift+ctrl 2023-03-25 10:50:38 -07:00
Alexander Rose
62554b522f add key bindings for fly mode & reset view 2023-03-25 10:32:02 -07:00
Alexander Rose
fd041cd4c3 change dragRotateZ binding to left+alt 2023-03-25 10:31:05 -07:00
Alexander Rose
cfbb68c8ef improve contrast of pointer-lock cross 2023-03-25 10:30:05 -07:00
dsehnal
d7acec4f7d tweak moveCamera 2023-03-25 11:58:06 +01:00
dsehnal
7da46bca8b scale move speed by frametime 2023-03-24 19:52:11 +01:00
Sebastian Bittrich
66b4fcdc2c simplify 2023-03-23 08:48:58 -07:00
Alexander Rose
c480579ca8 add web3dsurvey analytics code (only molstar.org) 2023-03-22 20:13:01 -07:00
Alexander Rose
e1a5ad16f1 ssao improvements
- make bias a global param
- add a 4th level by default
2023-03-22 20:07:30 -07:00
Alexander Rose
512ec4f8ea Merge pull request #16 from arose/ssao-levels
[DRAFT] ssao levels
2023-03-21 23:31:58 -07:00
Alexander Rose
bc46b07ee1 refactor ssao levels as multi-scale option 2023-03-21 23:06:23 -07:00
Alexander Rose
f750f1581e Merge branch 'master' of https://github.com/molstar/molstar into ssao-levels 2023-03-21 21:11:13 -07:00
Alexander Rose
00ff1a1eae Merge branch 'master' of https://github.com/molstar/molstar into input-controls 2023-03-21 20:19:33 -07:00
dsehnal
ae795f8ad3 3.32.0 2023-03-20 09:29:41 +01:00
dsehnal
9d3c071689 changelog 2023-03-20 09:26:48 +01:00
David Sehnal
01cb23f566 add setFSModule (#755) 2023-03-20 09:24:45 +01:00
Alexander Rose
fe8a9799ab add exposure parameter (#751)
* add exposure parameter

* add missing uniform

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2023-03-20 09:16:51 +01:00
David Sehnal
4f18154681 Marking improvements (#750)
* better marking identify

* changelog

* tweak

* type tweak

* simplify ui mouse move handling

---------

Co-authored-by: Alexander Rose <alexander.rose@weirdbyte.de>
2023-03-20 09:15:51 +01:00
Alexander Rose
2114c4a3ad type fixes 2023-03-19 15:12:42 -07:00
Alexander Rose
2ca41b2b51 package updates 2023-03-19 15:11:58 -07:00
Alexander Rose
6605a2019e Merge pull request #753 from giagitom/dpoit-avoid-alpha-0-rendering
Dpoit avoid alpha 0 rendering
2023-03-19 14:10:43 -07:00
giagitom
8b1ed5f183 Including wboit 2023-03-19 21:05:25 +01:00
giagitom
f11a1b788f Updated changelog 2023-03-19 19:54:30 +01:00
giagitom
7928e24c54 Avoid rendering of fully transparent renderables 2023-03-19 19:51:01 +01:00
Alexander Rose
5dbca41da6 fix blurry occlusion in screenshots 2023-03-18 19:01:33 -07:00
Alexander Rose
f3fa54addf input/controls improvements 2023-03-18 15:34:46 -07:00
Alexander Rose
e24dc0a680 handle cellpack missing asymid 2023-03-18 10:46:41 -07:00
Alexander Rose
e636397f90 ensure marking edges are at least one pixel wide 2023-03-15 20:56:08 -07:00
Sebastian Bittrich
1f3e20704d better applicable check 2023-03-15 16:05:06 -07:00
Sebastian Bittrich
cc9bdd4f14 add ccd hierarchy preset 2023-03-15 16:01:54 -07:00
Russell Parker
6d76bf120d Change nodejs-shim conditional to avoid checking document (#740) 2023-03-08 17:43:38 +01:00
Alexander Rose
a50e81551f use ssao-scale for gl viewport/scissor 2023-03-06 22:48:31 -08:00
Alexander Rose
94cd5abf30 add lod-levels-preset param 2023-03-05 21:13:09 -08:00
Alexander Rose
cec33fa6a7 add support for examples 2023-03-04 10:37:02 -08:00
Alexander Rose
7b14a45582 skip ssao level when too close wrt to radius 2023-02-26 21:44:47 -08:00
Alexander Rose
86512bcea1 tweak ssao-blur thresholds 2023-02-26 19:16:37 -08:00
Alexander Rose
f0efffceaa half/quarter res depth for distant ssao samples 2023-02-26 19:08:57 -08:00
Alexander Rose
8b37a9509f tweak ssao-blur 2023-02-26 19:07:35 -08:00
Alexander Rose
de61956bf7 wip, ssao teaks 2023-02-25 21:40:58 -08:00
Alexander Rose
c1bc8fc262 adjust lod preset 2023-02-25 15:31:22 -08:00
Alexander Rose
797e6a5318 Merge branch 'mesoscale-explorer' of https://github.com/arose/mesoscale-explorer into ssao-levels 2023-02-25 15:25:06 -08:00
Alexander Rose
bd41f45370 fix adjustPluginProps 2023-02-25 15:15:49 -08:00
Alexander Rose
7946b7403c Merge pull request #18 from arose/lod-radius-scale
Lod radius scale
2023-02-25 15:12:23 -08:00
Alexander Rose
eccf6e21e0 Merge branch 'mesoscale-explorer' of https://github.com/arose/mesoscale-explorer into lod-radius-scale 2023-02-25 15:09:01 -08:00
Alexander Rose
41c40da6c7 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-02-25 15:04:49 -08:00
Alexander Rose
975f45eb01 package updates 2023-02-25 15:02:21 -08:00
Alexander Rose
f2399d3179 Merge pull request #737 from molstar/pp-improvements
Post-processing improvements
2023-02-25 14:45:48 -08:00
Alexander Rose
b26d62a067 webgl1 compat 2023-02-25 14:09:13 -08:00
Alexander Rose
926d6cbd46 reduce over-blurring occlusion at larger view distances 2023-02-25 13:52:18 -08:00
Alexander Rose
7ea47d2a99 use pixel-size for max depth difference 2023-02-25 13:31:44 -08:00
Alexander Rose
89ad8cfc15 fix orthographic camera defines not updated 2023-02-25 13:17:03 -08:00
Alexander Rose
302a309aff add occlussion color 2023-02-25 13:03:12 -08:00
Sebastian Bittrich
fbc74c0012 Merge remote-tracking branch 'upstream/master' 2023-02-24 14:27:24 -08:00
Sebastian Bittrich
27a953795c use ComponentBond.Provider 2023-02-24 14:17:48 -08:00
dsehnal
c3e62bc2e5 3.31.4 2023-02-24 13:13:06 +01:00
dsehnal
c2ab322bd2 Stop animation loop on dispose 2023-02-24 13:10:35 +01:00
jump2cn
aeab0f235c allow link cylinder/line dashCount set to '0' (#735) 2023-02-23 10:52:56 +01:00
dsehnal
ae2285599f 3.31.3 2023-02-22 20:44:32 +01:00
dsehnal
104ab757d2 Update fs import in data-source.ts 2023-02-22 20:37:34 +01:00
Sebastian Bittrich
6ada52bc0b names 2023-02-21 14:33:37 -08:00
Sebastian Bittrich
c526cb9f08 consolidate params 2023-02-21 13:51:26 -08:00
Sebastian Bittrich
a1662d76fb parse CCD files 2023-02-21 13:41:40 -08:00
Alexander Rose
25a4c18dce Merge branch 'mesoscale-explorer' of https://github.com/arose/mesoscale-explorer into ssao-levels 2023-02-18 14:04:40 -08:00
Alexander Rose
0fe4eda8ae shape, ensure lodLevels update 2023-02-18 12:47:04 -08:00
Alexander Rose
de84a8c8c5 tweak minNear param max 2023-02-18 11:42:45 -08:00
Alexander Rose
4fa135daf0 fix near clipping avoidance in impostor shaders 2023-02-18 11:33:36 -08:00
Alexander Rose
e244a17b57 add cellSize to LodParams for testing 2023-02-18 11:25:31 -08:00
Alexander Rose
7b61d78a9e ensure lodLevels update 2023-02-18 11:24:39 -08:00
Alexander Rose
b5540c7fe9 Merge branch 'mesoscale-explorer' of https://github.com/arose/mesoscale-explorer into lod-radius-scale 2023-02-18 10:24:48 -08:00
Alexander Rose
1c48509a17 consolidate cellpack & petworld ext into meso app
- remove petworld & cellpack ext for now
- automatically detect cif type
2023-02-18 10:20:00 -08:00
midlik
9870cb4082 Fixed degenerate case (1-point) in PCA (#725)
* Fixed degenerate case (1-point) in PCA - now correctly returns identity matrix

* Changelog
2023-02-17 20:08:21 +01:00
Alexander Rose
b2924761ab update impostor bond visuals on sizeFactor changes 2023-02-12 22:06:18 -08:00
Alexander Rose
bf08b24991 increase minNear to reduce banding 2023-02-12 21:27:13 -08:00
Alexander Rose
0151ee1387 tweak lodLevel presets 2023-02-12 20:56:13 -08:00
Alexander Rose
eb6d5586cd fix near clipping avoidance in impostor shaders 2023-02-12 20:37:07 -08:00
Alexander Rose
f66f1f545e Merge branch 'mesoscale-explorer' of https://github.com/arose/mesoscale-explorer into lod-radius-scale 2023-02-12 11:05:54 -08:00
Alexander Rose
5a3f245ac0 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-02-12 11:05:11 -08:00
Alexander Rose
9c5f451878 3.31.2 2023-02-12 09:19:17 -08:00
Alexander Rose
6a5fb85c5a changelog 2023-02-12 09:13:40 -08:00
Alexander Rose
2aef5fb3e5 fix use of WEBGL_provoking_vertex 2023-02-12 09:12:24 -08:00
Jose Manuel Duarte
63a9aef5eb Fixing exit code for volume packer (#714)
* Fixing exit code for pack.ts

* Changelog

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2023-02-12 14:37:02 +01:00
Alexander Rose
e36fe8c707 fix polymer trace update logic 2023-02-11 21:26:03 -08:00
Alexander Rose
fc7af1f60c add lod to entities ui (for testing) 2023-02-11 13:23:01 -08:00
Alexander Rose
258cc1ef66 add scaleBias to lodLevels, consider element count 2023-02-11 13:14:39 -08:00
Alexander Rose
b3727f3774 fix getUnitsByEntity 2023-02-11 11:47:08 -08:00
Alexander Rose
b627d6a612 add mesoscale-explorer to webpack viewer config 2023-02-11 11:46:37 -08:00
Alexander Rose
918b83133e Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-02-11 11:45:35 -08:00
Alexander Rose
0585f7b9ca timer, mark ssao 2023-02-11 10:53:47 -08:00
Alexander Rose
25ab0d7799 fix outline artefact with opaque behind transparent 2023-02-11 10:49:43 -08:00
Alexander Rose
ea313a442c remove pca transform from components ui focus
- too distracting
2023-02-11 10:45:09 -08:00
Alexander Rose
6aed941fc9 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-02-05 20:07:59 -08:00
Alexander Rose
57a63e0381 3.31.1 2023-02-05 16:35:19 -08:00
Alexander Rose
c525812aee changelog 2023-02-05 16:30:41 -08:00
Alexander Rose
e602705e6d 3.31.0 2023-02-05 16:19:17 -08:00
Alexander Rose
b7d126b39b package updates 2023-02-05 16:13:46 -08:00
Alexander Rose
80b2864da8 remove unused travis file 2023-02-05 16:13:36 -08:00
Alexander Rose
36ba6f035a increase max intensity in light/ambient params 2023-02-05 15:45:39 -08:00
Alexander Rose
b22e5bb7dd tweak stats.calls 2023-02-05 15:41:09 -08:00
Alexander Rose
eca70d7536 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-02-05 15:14:44 -08:00
Alexander Rose
b84bbdace2 refactor PCA focus some more 2023-02-05 15:08:17 -08:00
Alexander Rose
750b2f69fc Merge pull request #710 from molstar/console-stats-timing
add consoleStats, improve timer
2023-02-05 14:00:51 -08:00
Alexander Rose
6ffe051a8e Merge branch 'master' of https://github.com/molstar/molstar 2023-02-05 13:43:36 -08:00
Alexander Rose
bc3640b264 add asymIds to OperatorGroup 2023-02-05 13:43:27 -08:00
Alexander Rose
8746b6e2f4 Observable canvas commit 2023-02-05 13:41:42 -08:00
dsehnal
445977d99b Fix data-source node workaround 2023-02-05 22:34:38 +01:00
Alexander Rose
0f0185e18c add fast boundary helper and unit trait 2023-02-05 13:34:33 -08:00
Alexander Rose
adf8e2932f Merge pull request #17 from arose/optimize-load
Optimize cellpack assembly creation, unit bbox computation & and show commit visual progress
2023-02-05 13:31:25 -08:00
dsehnal
a748b1581e refactor PCA focus 2023-02-05 22:24:40 +01:00
Alexander Rose
e35cde3d6b remove unused code 2023-02-05 13:07:32 -08:00
Alexander Rose
bbbb960b50 cellpack assembly transform 2023-02-05 12:35:56 -08:00
Alexander Rose
47a63e8906 Merge branch 'mesoscale-explorer' of https://github.com/arose/mesoscale-explorer into optimize-load 2023-02-05 11:29:34 -08:00
Ke Ma
af1e06203b Dev focus pca (#624)
* viewer camera change based on Pca

* minor code refactor

* update author

* Update src/mol-plugin-state/manager/focus-camera/focus-first-residue.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* Update src/mol-plugin-state/manager/focus-camera/focus-first-residue.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* Update src/mol-plugin-state/manager/focus-camera/focus-first-residue.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* Update src/mol-plugin-state/manager/focus-camera/focus-first-residue.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* Update src/mol-plugin-state/manager/focus-camera/focus-first-residue.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* Update src/mol-plugin-ui/structure/components.tsx

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* Update src/mol-plugin-state/manager/focus-camera/focus-first-residue.ts

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>

* revise

* deepclone

* chunked-array

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2023-02-05 20:27:25 +01:00
dsehnal
e9cbd06652 cellpack symmetry build optimization 2023-02-05 19:08:01 +01:00
Alexander Rose
356cf008ce add consoleStats, improve timer 2023-02-04 19:25:08 -08:00
Alexander Rose
07284e7e3d handle null-texture in calcTextureMeshColorSmoothing 2023-02-04 13:58:02 -08:00
Alexander Rose
72055442b7 add Color.contrast/.luminance 2023-02-04 10:30:14 -08:00
Alexander Rose
5fa7d84c23 axes camera-helper tweaks 2023-02-03 07:59:26 -08:00
midlik
de46f08bf4 Minor changes regarding HeadlessPluginContext (#708)
* Minor changes regarding HeadlessPluginContext

* Tweaks
2023-02-03 12:31:39 +01:00
Alexander Rose
fde395e2fa Merge pull request #705 from molstar/camera-helper-params
add axes camera-helper customization options
2023-02-01 08:10:47 -08:00
midlik
da1e55250e Added HeadlessPluginContext, Canvas3DRenderer, image-renderer example (#700)
* Added HeadlessPluginContext, Canvas3DRenderer, image-renderer example

* Fixed dependencies in package.json

* Removed gl from deps

* Removed gl, pngjs, jpeg-js from dependencies, importing via LazyImports

* Updated docs in src/examples/image-renderer/index.ts

* Added gl, pngjs, jpeg-js to optionalDependencies

* Canvas3DRenderer: default cameraResetDurationMs: 0 (necessary when changing camera between renderings)

---------

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2023-02-01 16:56:38 +01:00
Alexander Rose
a4ab117d14 support WEBGL_provoking_vertex 2023-01-31 19:56:03 -08:00
Alexander Rose
4cd7088eb8 add axes camera-helper customization options 2023-01-31 19:41:14 -08:00
Alexander Rose
8e1876fc25 update camera/handle helper on pixelRatio changes 2023-01-31 19:35:09 -08:00
Alexander Rose
29693ebe8c fix text zOffset with orthographic projection 2023-01-31 19:09:36 -08:00
Alexander Rose
a8ee7bfcbe fix uModelView construction 2023-01-31 19:04:46 -08:00
Alexander Rose
97fb6c044c Merge branch 'mesoscale-explorer' of https://github.com/arose/mesoscale-explorer into ssao-levels 2023-01-29 21:49:15 -08:00
Alexander Rose
85c5575b96 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-01-29 16:41:04 -08:00
Alexander Rose
2037dad03d 3.30.0 2023-01-29 16:28:11 -08:00
Alexander Rose
0a9fb603f6 changelog 2023-01-29 16:22:25 -08:00
Alexander Rose
0b7dadd345 package updates 2023-01-29 16:21:56 -08:00
Alexander Rose
a3645f5acc use single channel for downsampled depth when possible 2023-01-29 16:08:58 -08:00
Alexander Rose
92f409d6fc fix downsampled ssao 2023-01-29 16:08:18 -08:00
Alexander Rose
4ada0a0d29 use single channel for downsampled depth when possible 2023-01-29 15:13:08 -08:00
Alexander Rose
54714c06af fix downsampled ssao 2023-01-29 13:41:42 -08:00
Alexander Rose
c28dd8135c perf tweaks
- reuse vec3 in getMatrices
- fast path in createElementSphereImpostor
2023-01-28 23:08:39 -08:00
Alexander Rose
d3e674b135 use fast boundary for petworld structure 2023-01-28 17:24:34 -08:00
Alexander Rose
253d872599 add fast boundary helper and unit trait 2023-01-28 17:24:00 -08:00
Alexander Rose
b8ca8a9b34 refactor cellpack/petworld hierarchy creation 2023-01-28 17:00:46 -08:00
Alexander Rose
d180c26ca1 cache entity units mapping
- fix quadratic behavior
2023-01-28 14:01:12 -08:00
Alexander Rose
b51e50978e improve calcInstanceGrid perf 2023-01-28 11:28:32 -08:00
Alexander Rose
b897cfd028 perf tweaks
- reuse vec3 in getMatrices
- fast path in createElementSphereImpostor
2023-01-28 11:23:05 -08:00
Alexander Rose
2ce8863709 tweaks 2023-01-28 10:29:08 -08:00
dsehnal
37362968d9 buildAssembly improvements for lipid layer 2023-01-24 10:38:19 +01:00
dsehnal
800393bc2b Observable canvas commit 2023-01-23 23:54:39 +01:00
dsehnal
7a111c49f4 optimize assembly creation & bbbox computation 2023-01-23 13:48:53 +01:00
Alexander Rose
756ea140e2 ssao levels 2023-01-22 20:45:03 -08:00
Alexander Rose
f9400c2547 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-01-22 14:23:30 -08:00
Alexander Rose
3baa03ccdc adjust outlines based on view distance 2023-01-22 14:21:37 -08:00
Alexander Rose
659e96d93c Merge pull request #699 from MadCatX/ntc_tube_discontinuity
Fix NtC tube and Confal pyramids mesh when there are discontinuous chains
2023-01-22 14:14:51 -08:00
Alexander Rose
1a52c2bab4 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-01-22 11:50:24 -08:00
Alexander Rose
365d7d46fd fix SSAO artefacts with high bias values 2023-01-22 11:47:17 -08:00
Alexander Rose
f8284508e1 Merge pull request #695 from molstar/state-images
state snapshot images
2023-01-22 11:45:16 -08:00
Alexander Rose
e9c36c2375 fix boundary-helper regression 2023-01-19 21:43:57 -08:00
Michal Malý
5d269fd77c Check for discontinuities when buiilding Confal pyramids mesh 2023-01-17 17:30:30 +01:00
Michal Malý
0064293e01 Unregister ConfalPyramids 2023-01-17 17:30:30 +01:00
Michal Malý
ba4b6f70d3 Draw gaps in NtC tube if there are discontinuities in a chain 2023-01-17 17:30:28 +01:00
Alexander Rose
b4b79a6102 meso app, enable snapshot images 2023-01-16 13:24:07 -08:00
Alexander Rose
9d056a85ec state snapshot images 2023-01-15 22:59:33 -08:00
Alexander Rose
3ed17fce6b update gh workflow gl version 2023-01-15 22:53:34 -08:00
Alexander Rose
d656dd0d18 improve boundary calculation performance 2023-01-15 22:49:07 -08:00
Alexander Rose
b9054723d7 state snapshot images 2023-01-15 22:45:32 -08:00
Alexander Rose
ed37890519 cellpack/petworld preset tweak 2023-01-15 22:42:59 -08:00
Alexander Rose
22dc6bb1ea improve instance-grid creation performance 2023-01-15 22:39:57 -08:00
Alexander Rose
0917713613 improve boundary calculation performance 2023-01-15 22:38:55 -08:00
Alexander Rose
0b6be09678 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-01-15 14:14:43 -08:00
Alexander Rose
27c92085c7 changelog 2023-01-15 14:06:53 -08:00
Alexander Rose
94e9462af8 Merge pull request #526 from MadCatX/ntc_tube_2
Add NtC Tube representation
2023-01-15 14:05:29 -08:00
Michal Malý
2e52ccf5d8 Add NtC Tube representation 2023-01-15 22:18:13 +01:00
Michal Malý
b15196a284 Reset ConfalPyramidsIterator internal state correctly when switching
chains
2023-01-15 22:08:45 +01:00
Michal Malý
d29cc85439 Factor out common Dnatco code 2023-01-15 22:08:41 +01:00
Alexander Rose
30367cf239 lint spacing 2023-01-15 11:10:16 -08:00
Alexander Rose
500fdd31d7 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-01-15 10:13:42 -08:00
Alexander Rose
dcf9d1c3bb 3.29.0 2023-01-15 10:06:42 -08:00
Alexander Rose
c0c2e4ce4a changelog 2023-01-15 10:01:35 -08:00
Alexander Rose
3557f4e738 schema updates 2023-01-15 10:00:38 -08:00
Alexander Rose
6595c00cff package updates 2023-01-15 09:58:20 -08:00
Alexander Rose
ca9a566c25 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-01-15 09:07:31 -08:00
Alexander Rose
c612018ba8 Merge pull request #693 from molstar/dim-unmarked
support dim unmarked groups & marker edge strength
2023-01-15 09:04:35 -08:00
Alexander Rose
ec06ef2dfb fix missing uniforms 2023-01-14 13:14:16 -08:00
Alexander Rose
2febf45700 support dim unmarked groups & marker edge strength 2023-01-14 12:46:26 -08:00
Alexander Rose
3e6066a1a1 add .getCenter and .center to Camera 2023-01-14 12:41:41 -08:00
Alexander Rose
b61e5c76db add default to ParamDefinition.Values type 2023-01-14 12:40:13 -08:00
Alexander Rose
bdee4859f2 generic loci support for overpaint, substance, clipping 2023-01-14 12:39:25 -08:00
Alexander Rose
8386bf2ec6 wip, mesoscale-explorer app 2023-01-14 12:24:45 -08:00
Alexander Rose
a50443589f add .getCenter and .center to Camera 2023-01-14 12:06:13 -08:00
Alexander Rose
fd74bfe9c2 add default to ParamDefinition.Values type 2023-01-14 12:03:33 -08:00
Alexander Rose
f82693103a support dim unmarked groups & marker edge strength 2023-01-14 12:02:32 -08:00
Alexander Rose
cff72bcb67 fix 2023-01-09 20:27:57 -08:00
Alexander Rose
e3326fca29 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-01-09 20:19:43 -08:00
Alexander Rose
b5e45aae95 Merge pull request #692 from molstar/misc2
Misc2
2023-01-09 20:18:01 -08:00
Alexander Rose
7fd12c5622 tweaks/fixes 2023-01-09 20:16:33 -08:00
Alexander Rose
47442be989 changelog 2023-01-08 21:30:41 -08:00
Alexander Rose
3a484dc41a make SymmetryOperator.createMapping monomorphic 2023-01-08 21:25:23 -08:00
Alexander Rose
9a2dfd7e57 improve calculateInvariantBoundingSphere 2023-01-08 21:25:07 -08:00
Alexander Rose
c9a168a138 improve checks in UnitsRepresentation setVisualState 2023-01-08 21:24:35 -08:00
Alexander Rose
3726f28eeb defer calculation of more scene properties 2023-01-08 21:24:21 -08:00
Alexander Rose
ead25d6a9c tweak BoundaryHelper performance 2023-01-08 21:24:14 -08:00
Alexander Rose
55f4abb6be add repr/theme registry .clear method 2023-01-08 21:24:04 -08:00
Alexander Rose
7ccf376beb wip, explorer ui 2023-01-08 21:20:00 -08:00
Alexander Rose
8678ac301c improve checks in UnitsRepresentation setVisualState 2023-01-08 21:08:00 -08:00
Alexander Rose
dde6f10b22 defer calculation of more scene properties 2023-01-08 21:06:22 -08:00
Alexander Rose
f9f41dac6a make SymmetryOperator.createMapping monomorphic 2023-01-08 21:05:10 -08:00
Alexander Rose
af6ab0ec9e tweak BoundaryHelper performance 2023-01-08 20:56:20 -08:00
Alexander Rose
485e91796b improve calculateInvariantBoundingSphere 2023-01-08 20:53:59 -08:00
Alexander Rose
2451ad3f0a add repr/theme registry .clear method 2023-01-08 20:49:23 -08:00
Alexander Rose
b0125d139a Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2023-01-08 20:48:29 -08:00
dsehnal
2e013fafc8 Add StructureElement.Loci.forEachLocation 2023-01-05 13:07:21 +01:00
Alexander Rose
d0069b9684 wip, explorer state ui 2023-01-02 16:01:42 -08:00
dsehnal
0809379f91 update build badge 2023-01-02 14:23:36 +01:00
dsehnal
0d4a95f5af workflow name 2023-01-02 14:21:30 +01:00
Alexander Rose
ed6a6f71ce Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2022-12-31 12:08:48 -08:00
David Sehnal
2e9129a71c Fix some cyclic imports & reduce const enum usage (#680)
* fix mol-theme/color

* fix mol-theme/size

* remove unnecessary const enums

* remove Column.ValueType const enum

* NumberTypes

* ValueKindConst => ValueKinds

* more const enum fixes

* more const enums

* readme

* update filename

* typing

* FeatureTypes
2022-12-31 11:22:18 +01:00
David Sehnal
7384bebf4e Fix some cyclic imports & reduce const enum usage (#680)
* fix mol-theme/color

* fix mol-theme/size

* remove unnecessary const enums

* remove Column.ValueType const enum

* NumberTypes

* ValueKindConst => ValueKinds

* more const enum fixes

* more const enums

* readme

* update filename

* typing

* FeatureTypes
2022-12-31 11:22:05 +01:00
Alexander Rose
a042e72f28 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2022-12-30 20:46:24 -08:00
Alexander Rose
0e197b1885 Merge pull request #683 from molstar/misc
Misc tweaks
2022-12-30 20:45:46 -08:00
Alexander Rose
54697ae0d5 changelog 2022-12-30 10:16:30 -08:00
Alexander Rose
7b6eb9337e add input-color picker 2022-12-29 21:51:42 -08:00
Alexander Rose
a94fb84052 add isDisabled to ParameterMappingControl 2022-12-29 21:51:27 -08:00
Alexander Rose
528aeb1873 only update clip defines if changed 2022-12-29 21:51:18 -08:00
Alexander Rose
e7b35daf45 improve structure/unit areEqual methods
- always equal when objects are identical
2022-12-29 21:51:06 -08:00
Alexander Rose
7d10971617 avoid cloning of structure repr params 2022-12-29 21:50:49 -08:00
Alexander Rose
6ac12fd457 wip, mesoscale explorer app 2022-12-29 21:49:14 -08:00
Alexander Rose
0abedba665 avoid cloning of structure repr params 2022-12-29 11:42:59 -08:00
Alexander Rose
8bc688a491 improve structure/unit areEqual methods
- always equal when objects are identical
2022-12-29 10:20:36 -08:00
Alexander Rose
46524b19ab only update clip defines if changed 2022-12-29 10:17:32 -08:00
Alexander Rose
a9bcd4c1c6 add isDisabled to ParameterMappingControl 2022-12-29 10:16:52 -08:00
Alexander Rose
a355be9c0f add input-color picker 2022-12-27 12:02:22 -08:00
dsehnal
3d83211503 fix dropFiles bug 2022-12-24 12:51:09 +01:00
dsehnal
cd8c8fa020 Merge branch 'master' of https://github.com/molstar/molstar 2022-12-23 14:28:16 +01:00
Alexander Rose
4b663baa88 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2022-12-22 21:39:20 -08:00
David Sehnal
4c03009357 Volume Quick Color Select Control (#677)
* changelog

* volume quick select control

* tweak
2022-12-22 08:53:27 +01:00
Alexander Rose
047f547863 support tags in StructureBuilder.createStructure 2022-12-21 20:25:03 -08:00
Alexander Rose
83c62c614b Merge branch 'master' of https://github.com/molstar/molstar 2022-12-21 20:24:22 -08:00
Alexander Rose
c39b3569de add escapeRegExp util 2022-12-21 20:24:06 -08:00
Alexander Rose
22402280a7 wip, mesoscale explorer app 2022-12-21 20:13:02 -08:00
Alexander Rose
7e9872871d support tags in StructureBuilder.createStructure 2022-12-21 20:12:09 -08:00
Alexander Rose
6c595377a3 add escapeRegExp util 2022-12-21 20:11:14 -08:00
dsehnal
7fea62aa46 changelog 2022-12-20 14:28:07 +01:00
midlik
d816f510ea Volseg more tweaks 2 (#675)
* Volseg: Fixed not loading volume section from state

* Volseg: Double-sided meshes (still ugly)

* Mesh extension: Detection (and correction) of inverted meshes

* Meshes extension: Fixed transparent backfaces, tidy up

* Removed duplicated classes in Meshes and Volseg extensions

* Changelog
2022-12-20 14:24:31 +01:00
Alexander Rose
56ed5a784d Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2022-12-19 16:19:59 -08:00
dsehnal
c2064aa318 3.28.0 2022-12-20 00:37:33 +01:00
dsehnal
109709ce8b Merge branch 'master' of https://github.com/molstar/molstar 2022-12-20 00:34:53 +01:00
midlik
b200725762 Volseg more tweaks (#674)
* Volseg: Fixed not loading volume section from state

* Volseg: Double-sided meshes (still ugly)

* Mesh extension: Detection (and correction) of inverted meshes
2022-12-20 00:34:40 +01:00
dsehnal
9cf34bf987 changelog 2022-12-20 00:27:00 +01:00
Alexander Rose
be3a91bb14 package updates 2022-12-19 15:21:10 -08:00
Alexander Rose
fc948d8b27 fix gpu mc use of float16 2022-12-19 14:41:12 -08:00
midlik
8774658f4e Volseg: Fixed not loading volume section from state (#672)
* Volseg: Fixed not loading volume section from state

* Volseg: Double-sided meshes (still ugly)
2022-12-19 23:19:53 +01:00
David Sehnal
0bf32148af Viewer setting for volumes and segmentations (#673) 2022-12-19 23:10:40 +01:00
David Sehnal
97d158b615 Volseg extenison tweaks (#671)
* improve currentVolume behavior

* use different iso-value if 1sigma isnt present in the data
2022-12-19 22:16:09 +01:00
Alexander Rose
b772dea188 tweak ignoreHydrogens non-polar handling (#669) 2022-12-19 21:59:55 +01:00
Alexander Rose
5c8f0b35ec changelog 2022-12-19 10:33:36 -08:00
dsehnal
1b382653f2 add volume controls to Volseg extension 2022-12-19 16:49:30 +01:00
midlik
c7cee63c97 Volumes & Segmentations extension (#668)
* Created CellStar state action

* CellStar: download metadata

* Right panel - CellStar UI

* CellStar: Lattice segmenatation and fitted PDB models

* CellStar: Support for source-database entry ID from metadata

* CellStar: Mesh segmentation

* CellStar: Switching between multiple entries

* CellStar: Changed default API URL

* UI updates

* CellStar: Clicking on meshes shows annotations...

* support info in Converted param

* support color/size in VolumeRepresentation3DHelpers.getDefaultParams

* support multi-visual volume representations

- repr can provide list of keys
- create visual for each key

* add volume segmentation support

- segmentation property
- segment loci & location

* add volume-segment color theme

* add volume segment representation

* use optional chaining

* add support for volume segmentation cif

* improve isosurface bounding-sphere

* fix segcif schema type

* CellStar: Highlighting segments on hover in the right panel

* CellStar: Using new Mol*-native segment visualization

* lint

* Segmentation volume can have custom segment labels

* CellStar: Segment labels for Mol*-native segments

* CellStar: Removed old implementation of segments

* CellStar: Rename CellStarLatticeSegmentationData2 -> CellStarLatticeSegmentationData

* CellStar: Default volume server is https://cellstar.ncbr.muni.cz

* CellStar: debugging

* CellStar: Fixed bug in LatticeSegmentation (scaling)

* CellStar: Partially savable state

* CellStar: WaitingSlider

* CellStar: Opacity changed via params

* Savable state for opacity

* CellStar: Changing UI in animations

* CellStar: Savable state for whole current UI

* CellStar: Savable state for segment labels

* CellStar: Source can be 'idr', CellStarVolumeServerConfig.DefaultServer

* CellStar: Select segment for lattice segmentation

* CellStar: Select segment, complete

* CellStar: Changes visible labels to "Volume & Segmentation"

* CellStar: Drop list with available entries

* CellStar: Volume type switching (partial)

* CellStar: Trying to set direct-volume control points

* CellStar: Volume visual switching

* Mesh extension: removed molstar-lib-imports

* CellStar: Global options

* CellStar: Updated file headers and `CHANGELOG.md`

* CellStar: UI controls disabled while executing change

* CellStar: Hidden state nodes, fixed bug with removed global state

* CellStar: Volume opacity slider

* CellStar extension renamed to Volseg

* UI tweaks

Co-authored-by: Alexander Rose <alexander.rose@weirdbyte.de>
2022-12-19 16:15:23 +01:00
Alexander Rose
fbb9f09536 tweak interior in presets 2022-12-17 21:25:38 -08:00
Alexander Rose
d8e5b9a5c6 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2022-12-17 21:18:44 -08:00
Alexander Rose
ba9474fa62 add stencil related webgl state and format 2022-12-16 21:47:05 -08:00
Alexander Rose
b7ec7ea686 Merge pull request #665 from molstar/solid-impostor
Solid impostors
2022-12-16 21:41:14 -08:00
Alexander Rose
74560adb08 changelog 2022-12-16 21:20:52 -08:00
Alexander Rose
e6a303bdda Merge branch 'master' of https://github.com/molstar/molstar into solid-impostor 2022-12-16 21:19:19 -08:00
David Sehnal
7afcf0bb68 Show histogram in direct volume control point settings (#666) 2022-12-16 20:02:46 +01:00
Alexander Rose
7aae2d0616 fix impostor sphere near clipping 2022-12-15 22:06:06 -08:00
dsehnal
9255505a3b 3.27.0 2022-12-15 13:02:37 +01:00
dsehnal
6c0dfd338d changelog 2022-12-15 12:59:45 +01:00
David Sehnal
c306e988c8 Ability to show only polar hydrogens (#663) 2022-12-15 12:26:34 +01:00
Alexander Rose
86f7a8b273 add impostor solidInterior param 2022-12-14 22:50:15 -08:00
David Sehnal
2428a8efab Merge pull request #660 from molstar/struct-conn-ions-fix
Fix struct_conn bond assignment for ions
2022-12-14 10:20:22 +01:00
Alexander Rose
cba12e487f wip, solid impostor flag 2022-12-13 23:59:08 -08:00
dsehnal
e98d7931ca Fix import 2022-12-13 18:01:59 +01:00
dsehnal
f8e2d2e3d0 tweak hasStructConnRecord 2022-12-13 17:57:31 +01:00
dsehnal
4455bab6ac Fix struct_conn bond assignment for ions 2022-12-13 16:06:19 +01:00
David Sehnal
b21fb27041 Merge pull request #658 from molstar/action-params
ApplyActionControl param handling
2022-12-13 15:20:31 +01:00
dsehnal
5402ee0019 ApplyActionControl param handling 2022-12-13 15:16:19 +01:00
David Sehnal
02654ea57b Merge pull request #657 from molstar/fix-qa-assignment
Fix QualityAssessment assignment
2022-12-13 09:33:13 +01:00
dsehnal
9cd4aeabaa Merge branch 'master' of https://github.com/molstar/molstar into fix-qa-assignment 2022-12-13 09:32:42 +01:00
dsehnal
d788511a83 header 2022-12-13 09:32:20 +01:00
Alexander Rose
378b5b8096 Merge pull request #643 from arussell123/master
Add include transparent parameter for outlines
2022-12-12 21:58:49 -08:00
Alexander Rose
e26eb2f751 Merge branch 'master' into master 2022-12-12 21:58:25 -08:00
Alexander Rose
26264b15f7 tweaks 2022-12-12 21:56:34 -08:00
Alexander Rose
309e3dd981 impostor per-pixel object clipping 2022-12-12 21:51:39 -08:00
Alexander Rose
4ff5ed3b5d fix cylinder imposter cap normals 2022-12-12 21:18:37 -08:00
dsehnal
270a757756 changelog 2022-12-12 18:39:41 +01:00
dsehnal
79e4030ab4 fix qa assignment 2022-12-12 18:35:52 +01:00
David Sehnal
fd86927e04 Merge pull request #655 from MKampfrath/access-modifiers
change access modifiers
2022-12-12 16:36:38 +01:00
MKampfrath
df3a7e5037 change access modifiers 2022-12-12 16:30:40 +01:00
Alice Russell
fefc6f14c9 Change is outline enabled to is transparant outline enabled 2022-12-12 10:43:14 +00:00
Alexander Rose
923fbef0e4 remove superfluous check 2022-12-11 20:45:26 -08:00
Alexander Rose
601bd5ba7a improve impostor shaders
- fix sphere near-clipping with orthographic projection
- fix cylinder near-clipping
- add interior cylinder caps
2022-12-10 21:47:16 -08:00
Alexander Rose
5798f20c41 lint fix 2022-12-10 21:41:25 -08:00
David Sehnal
f2e26f91a8 Merge pull request #647 from dwilliams-nobias/animation-once-stops
Animation "once" fails to stop for many frames under certain conditions
2022-12-08 16:53:27 +01:00
David Sehnal
e2cdc45be6 Merge branch 'master' into animation-once-stops 2022-12-08 16:53:15 +01:00
Alice Russell
96493bc75e Fix linting 2022-12-07 14:26:48 +00:00
Alice Russell
d78ad4a78e Merge remote-tracking branch 'upstream/master' 2022-12-07 12:25:22 +00:00
Alice Russell
0c54b0dd6e Add option to toogle transparent outline 2022-12-07 12:21:31 +00:00
Alexander Rose
65310e52de guard against issue with bumpiness in impostors 2022-12-06 22:48:22 -08:00
David Williams
285d3cd9b8 Requested changes for pull request 2022-12-06 17:36:48 -08:00
David Williams
10486abb64 Add example molecule with 1,000 animation frames 2022-12-06 17:32:44 -08:00
David Williams
8c1a9fc988 Correctly check for duration "once" for fixed or computed duration 2022-12-06 16:57:27 -08:00
Alexander Rose
b067b0eed5 Merge branch 'master' of https://github.com/molstar/molstar into mesoscale-explorer 2022-12-04 12:20:32 -08:00
Alexander Rose
7bdd0b470b 3.26.0 2022-12-04 12:18:09 -08:00
Alexander Rose
b7a51f12bf changelog 2022-12-04 12:12:22 -08:00
Alexander Rose
e002ac5474 Merge pull request #644 from molstar/power-pref
support power-preference webgl attribute
2022-12-04 12:09:46 -08:00
Alexander Rose
211d339ce0 Merge branch 'master' into power-pref 2022-12-04 12:09:39 -08:00
Alexander Rose
509fb14473 Merge pull request #645 from molstar/structure-mol-surf
add structure molecular surface visual
2022-12-04 12:09:14 -08:00
Alexander Rose
ef838a1b83 Merge branch 'master' into structure-mol-surf 2022-12-04 12:09:05 -08:00
Alexander Rose
f84b5b633d improve Representation typing 2022-12-04 09:45:12 -08:00
Alexander Rose
8ec8c1170d comment 2022-12-04 09:32:02 -08:00
David Sehnal
920b98e4d1 Merge pull request #604 from molstar/volume-theme
by-volume-value theme
2022-12-04 09:18:32 +01:00
dsehnal
c80f52d4bc Merge branch 'master' of https://github.com/molstar/molstar into volume-theme 2022-12-04 09:14:41 +01:00
dsehnal
0b6aa42daf tweaks 2022-12-04 09:14:06 +01:00
Alexander Rose
04dc6427ef update SaccharideNames 2022-12-03 22:00:24 -08:00
Alexander Rose
77e366b484 schema updates 2022-12-03 21:58:04 -08:00
Alexander Rose
add7cfa0f2 package updates 2022-12-03 21:53:00 -08:00
Alexander Rose
14d4fa142c changelog 2022-12-03 21:46:55 -08:00
Alexander Rose
7fe1617f25 shadow param tweaks 2022-12-03 21:46:30 -08:00
Alexander Rose
cbe4cb521c add structure molecular surface visual 2022-12-03 21:32:54 -08:00
Alexander Rose
d6dffe89d6 Merge pull request #1 from arose/lod-cull
Lod cull
2022-12-03 21:12:53 -08:00
Alexander Rose
0107159b84 changelog 2022-12-03 18:21:50 -08:00
Alexander Rose
c106b99d5d fix renderer spec 2022-12-03 18:18:10 -08:00
Alexander Rose
2f695ca68f changelog 2022-12-03 17:40:57 -08:00
Alexander Rose
461592f6e3 add shadow to petworld preset 2022-12-03 17:31:53 -08:00
Alexander Rose
ccf3b5c75d Merge branch 'master' of https://github.com/molstar/molstar into lod-cull 2022-12-03 16:24:48 -08:00
Alexander Rose
a40702cda4 compat docs 2022-12-03 12:19:26 -08:00
Alexander Rose
7c394525c1 Merge pull request #637 from molstar/sss
Screen-space shadows
2022-12-03 10:59:05 -08:00
Alexander Rose
12ed051fea Merge pull request #606 from jpattle/remove-caps-from-ligand-query
Remove common protein caps from ligand query
2022-12-03 10:41:00 -08:00
Alexander Rose
014913c635 support power-preference webgl attribute 2022-12-03 10:17:57 -08:00
Alexander Rose
369e45c282 handle bounds in shadow screen fade 2022-12-03 10:02:14 -08:00
Alice Russell
2892caec0c Update changelog 2022-12-02 12:31:56 +00:00
Alice Russell
eb609e918a linting fixes 2022-12-02 12:28:51 +00:00
Alice Russell
9217e58845 Add option to set minimum alpha value for outlines to be shown 2022-12-02 12:12:22 +00:00
Alexander Rose
a5ad456b52 Merge branch 'master' of https://github.com/molstar/molstar into lod-cull 2022-11-28 11:45:06 -08:00
Alexander Rose
26b633618a tweak cellpack shadow params 2022-11-27 22:22:29 -08:00
Alexander Rose
e3054d6ee1 shadows bonds check 2022-11-27 22:07:23 -08:00
Alexander Rose
0b6294f4ec check for shadow in PostprocessingPass.isEnabled 2022-11-26 22:33:11 -08:00
Alexander Rose
7b130dc0f3 cleanup 2022-11-26 22:09:24 -08:00
Alexander Rose
d93c128c25 cleanup 2022-11-26 22:04:41 -08:00
Alexander Rose
e1dd74775e refactor sss
- only sss, remove other ao implementations
- tweak params
- make sss a separate renderable
2022-11-26 21:47:08 -08:00
Alexander Rose
e61e706607 Merge branch 'master' of https://github.com/molstar/molstar into fake_shadow 2022-11-25 21:13:35 -08:00
jpattle
a57d46deaa Merge branch 'master' into remove-caps-from-ligand-query 2022-11-21 08:58:41 +00:00
Alexander Rose
60efdc0071 3.25.1 2022-11-20 10:43:31 -08:00
Alexander Rose
4dc1155a9e changelog 2022-11-20 10:38:07 -08:00
Alexander Rose
5cabe6fb42 fix auto structure-quality for coarse models 2022-11-20 10:37:30 -08:00
Alexander Rose
42239c305f better handle single-element units in Structure.eachUnitPair 2022-11-20 10:25:26 -08:00
ludovic autin
fd3c763349 All parameters exposed to try to find best parameters for different representation. 2022-11-18 09:13:42 -08:00
ludovic autin
daa9bbf2c9 fix trailing space 2022-11-17 09:31:21 -08:00
ludovic autin
c7dad00908 fake screen space shadow, second pass ssao 2022-11-17 09:28:00 -08:00
ludovic autin
24317717e8 Merge remote-tracking branch 'upstream/master' into forkdev 2022-11-16 14:01:04 -08:00
dsehnal
dd3eac6db6 3.25.0 2022-11-16 00:15:41 +01:00
dsehnal
1606f8517f changelog 2022-11-16 00:12:57 +01:00
David Sehnal
3a98401ada Merge pull request #623 from JonStargaryen/master
Fix Handling of Gzipped Assets by Reverting #615
2022-11-16 00:11:02 +01:00
Alexander Rose
4764251241 operator key tweaks 2022-11-14 21:48:44 -08:00
Sebastian Bittrich
3de04b7b9d CHANGELOG 2022-11-14 13:17:15 -08:00
Sebastian Bittrich
04908495e9 Revert "keep asset url to detect compression"
This reverts commit 2bc45c25fe.
2022-11-14 13:13:06 -08:00
Alexander Rose
357243c717 set marking off by default for mesoscale loaders 2022-11-13 22:39:00 -08:00
Alexander Rose
23f1d57064 Merge branch 'master' of https://github.com/molstar/molstar into lod-cull 2022-11-13 21:21:22 -08:00
Alexander Rose
3c835c848e 3.24.0 2022-11-13 20:56:58 -08:00
Alexander Rose
0f1788f122 changelog 2022-11-13 20:51:24 -08:00
Alexander Rose
3d72e700a4 package updates 2022-11-13 20:48:33 -08:00
Alexander Rose
a5cf41e65f fix viewport color for transparent background (#617) 2022-11-13 20:47:30 -08:00
Alexander Rose
7029bc41d7 Merge pull request #621 from molstar/theme-strength
add theme strength to 3d repr state
2022-11-13 20:22:14 -08:00
Alexander Rose
b87d40c844 changelog 2022-11-13 20:21:41 -08:00
Alexander Rose
9e154376d3 Merge branch 'master' of https://github.com/molstar/molstar into theme-strength 2022-11-13 20:18:56 -08:00
Alexander Rose
4a9fdbce57 Merge pull request #619 from molstar/opkey
add key to symmetry operator
2022-11-13 20:18:12 -08:00
Alexander Rose
775e335292 remove cantor-pair use 2022-11-13 20:11:42 -08:00
Alexander Rose
e553bf4deb add theme strength to 3d repr state 2022-11-12 21:58:13 -08:00
Alexander Rose
db0e09ec6e add more webgl extensions
- draw_buffers_indexed
- parallel_shader_compile
- fbo_render_mipmap
2022-11-12 20:34:18 -08:00
Alexander Rose
ba50760f92 add key to symmetry operator
- molql operatorKey
- index-pair operator prop
2022-11-12 20:30:33 -08:00
Alexander Rose
a56a2500d4 improve cellpack cif support 2022-11-12 20:27:34 -08:00
Alexander Rose
4950bb9e0a various lod tweaks & fixes 2022-11-12 16:25:24 -08:00
Alexander Rose
7fc409a8d1 cellpack & petworld cif loader improvements 2022-11-12 10:16:14 -08:00
Alexander Rose
f52872718c emulate gl_DrawID as needed 2022-11-12 09:44:08 -08:00
Alexander Rose
abca6e3bf7 share vertex-array between program variants 2022-11-12 09:32:20 -08:00
David Sehnal
524e6d4f81 Merge pull request #615 from JonStargaryen/master
keep asset url to detect compression
2022-11-11 07:47:44 +01:00
ludovic autin
db93a669ab Merge branch 'molstar:master' into forkdev 2022-11-10 13:59:26 -08:00
Sebastian Bittrich
423f5b0502 CHANGELOG 2022-11-10 13:16:27 -08:00
Sebastian Bittrich
2bc45c25fe keep asset url to detect compression 2022-11-10 13:13:49 -08:00
Alexander Rose
4fedef90c7 adjust radius for lod in sphere shader 2022-11-08 21:44:02 -08:00
Alexander Rose
69ca72ff86 rename MultiDrawInstancedData to MultiDrawBaseData 2022-11-08 21:42:30 -08:00
Jason Pattle
d341463f67 Removed unneccessary wholeResidues query from new ligand selection query as the atomGroups residue-test already covers this functionality 2022-11-07 08:37:16 +00:00
Alexander Rose
19d1ecb36a add (slow) texture-mesh position iterator 2022-11-06 23:27:17 -08:00
Alexander Rose
ffe4047f97 fix vertex color/overpaint in direct-volume shader 2022-11-06 22:24:36 -08:00
Alexander Rose
15a3c29e7a adjust external-volume theme file name 2022-11-06 22:23:15 -08:00
Alexander Rose
6a32f85e60 Merge pull request #603 from giagitom/transparent-bg-fixes 2022-11-06 16:42:27 -08:00
Alexander Rose
542a4725ad add elements-based lod levels for spheres 2022-11-06 15:14:14 -08:00
Alexander Rose
5d8bd6f474 support rendering elements-based lod levels 2022-11-06 15:13:32 -08:00
Alexander Rose
d8b98cc39d add instance-grid culling support 2022-11-06 15:00:05 -08:00
Alexander Rose
1d558c32d5 add per-object lod support 2022-11-06 13:13:32 -08:00
Alexander Rose
72c560e5a2 fix missing material texture disposal 2022-11-06 12:54:25 -08:00
Alexander Rose
268246e1ef cleanup types 2022-11-06 12:51:19 -08:00
Alexander Rose
8957f8a55f ignore built-ins in checkActiveUniforms 2022-11-06 12:50:14 -08:00
Alexander Rose
cdf7a1dfe8 add InstanceGrid to group instances spatially 2022-11-06 12:49:57 -08:00
Alexander Rose
398d82f359 frustum culling of whole render-objects 2022-11-06 12:43:53 -08:00
Alexander Rose
11fb1b655f support changing offset of gl attributes 2022-11-06 12:38:31 -08:00
Alexander Rose
5032a2538a add Plane3D and Frustum3D math objects 2022-11-06 12:31:24 -08:00
Alexander Rose
cabc0e5344 remove multi draw emulation from compat
- can't emulate gl_DrawID there
2022-11-05 11:12:55 -07:00
Alexander Rose
fe1414dd6b improve typing of various toArray functions 2022-11-05 09:00:59 -07:00
Jason Pattle
42ff593004 Added missing semicolon; linting 2022-11-02 10:06:26 +00:00
Jason Pattle
5140af4e6f Added myself as a contributor to package.json 2022-11-02 09:56:07 +00:00
Jason Pattle
0f5b4c00a9 Updated changelog 2022-11-02 09:54:57 +00:00
Jason Pattle
feb69f4987 Excluded whole residues which match any common protein caps from the ligand selection query 2022-11-02 09:49:44 +00:00
Jason Pattle
84eb9a58ca Added names for common protein caps 2022-11-02 09:49:07 +00:00
dsehnal
fbd96f473a External Volume theme features 2022-11-01 11:54:27 +01:00
dsehnal
69228157dc fix typo 2022-10-31 15:42:13 +01:00
dsehnal
6808f32b8d by-volume-value theme 2022-10-31 15:41:10 +01:00
giagitom
f29c62ec33 Transparent bg fix 2022-10-30 12:06:32 +01:00
Alexander Rose
13cee09a1c fix multi draw webgl extension handling
- no gl_DrawID when emulated
- add missing .bind(gl/ext)
- use typed arrays in signatures
2022-10-30 00:18:16 -07:00
Alexander Rose
d77981230b mmcif schema update 2022-10-29 12:15:29 -07:00
Alexander Rose
eb5c6bd30a add support for more webgl extensions
- WEBGL_draw_instanced_base_vertex_base_instance
- WEBGL_multi_draw_instanced_base_vertex_base_instance
2022-10-27 21:29:58 -07:00
dsehnal
e2b92c15f0 PluginContext.initContainer options 2022-10-27 08:41:01 +02:00
Alexander Rose
6f5e6f2fe2 improve Vec3 and Box3D
- add Vec3.clamp
- add Vec3.transformDirection
- add Box3D.addSphere3D
- add Box3D.intersectsSphere3D
- add Box3D.containsSphere3D
2022-10-26 22:32:23 -07:00
Alexander Rose
fc8c932874 add stride param to element sphere/point visual 2022-10-26 22:10:32 -07:00
Alexander Rose
784523e635 misc tweaks 2022-10-26 22:09:01 -07:00
Alexander Rose
56db418949 improve canvas3d consoleStats 2022-10-26 22:02:30 -07:00
Alexander Rose
31d6e81a59 add basic petworld extension 2022-10-26 22:01:34 -07:00
Alexander Rose
6356628c80 add support for webgl multiDraw extension 2022-10-26 21:58:51 -07:00
dsehnal
14614f4803 3.23.0 2022-10-19 13:11:47 +02:00
dsehnal
37d3489b07 changelog 2022-10-19 13:09:02 +02:00
David Sehnal
f81225cc0d Merge pull request #592 from molstar/volume/defaults-for-em
Change EM Volume Streaming default Auto
2022-10-19 13:08:17 +02:00
dsehnal
eb47f43940 Change EM Volume Streaming default Auto 2022-10-19 13:05:16 +02:00
dsehnal
7618a5e2c9 pr template 2022-10-19 12:41:24 +02:00
David Sehnal
ab3ff842b2 Merge pull request #590 from molstar/reusable-canvas
Built-in support for mouting/unmounting PluginContext
2022-10-19 09:55:31 +02:00
dsehnal
82f0f92c15 remove unused code 2022-10-18 15:20:48 +02:00
dsehnal
545d9434d8 Add PluginContext.initContainer/canvas3dInitialized and their usage 2022-10-18 09:16:08 +02:00
dsehnal
bbc43d5113 Add PluginContext.mount/unmount 2022-10-18 08:41:29 +02:00
dsehnal
a6709acf65 3.22.0 2022-10-17 20:44:13 +02:00
dsehnal
509a027742 changelog 2022-10-17 20:41:35 +02:00
David Sehnal
7244023233 Merge pull request #589 from molstar/picking-granuality-v2
Volume.PickingGranuality custom property
2022-10-17 20:39:47 +02:00
dsehnal
c5f987d8b2 getSliceLoci tweak 2022-10-17 20:36:39 +02:00
dsehnal
793696d4c0 Volume slice granuality 2022-10-17 20:34:11 +02:00
dsehnal
305ca05f04 tweaks 2022-10-17 20:24:48 +02:00
dsehnal
f4d7d1920a typos 2022-10-17 20:12:19 +02:00
dsehnal
458aad0161 Volume.PickingGranuality custom property 2022-10-17 20:05:56 +02:00
dsehnal
9e3132461f 3.21.0 2022-10-17 17:32:57 +02:00
dsehnal
8301291215 changelog 2022-10-17 17:29:52 +02:00
David Sehnal
daed14e228 Merge pull request #588 from midlik/picking-whole-isosurfaces
New volume isosurface param pickingGranularity: voxels|surfaces
2022-10-17 17:27:34 +02:00
David Sehnal
7db82c5ba5 Merge pull request #584 from arussell123/master
Prevent component controls collapsing when option is selected
2022-10-17 16:43:01 +02:00
Alexander Rose
91d03c22c2 3.20.0 2022-10-16 21:42:39 -07:00
Alexander Rose
bc188f0d2b changelog 2022-10-16 21:37:18 -07:00
Alexander Rose
3981225824 package updates 2022-10-16 21:34:59 -07:00
Alexander Rose
1886d9d72f add structure-index color theme 2022-10-16 21:28:06 -07:00
Alexander Rose
2a7dec8892 Merge pull request #583 from jpattle/model-index-carbon-color
Model index updates & carbon color
2022-10-16 19:43:23 -07:00
Alexander Rose
35d4a5b297 Merge branch 'master' into model-index-carbon-color 2022-10-16 19:39:22 -07:00
Alexander Rose
26345bfa50 tweak 2022-10-16 17:42:43 -07:00
Alexander Rose
8c9b8676dd handle 'not enough samples' in distinctColors 2022-10-16 16:43:50 -07:00
Alexander Rose
5593c7a75f add Model.MaxIndex and use in model-index theme 2022-10-16 16:37:09 -07:00
Alexander Rose
5b70c14ffe tweak theme descriptions 2022-10-16 16:35:51 -07:00
Alexander Rose
5e4d611044 tweak changelog 2022-10-16 16:33:52 -07:00
David Sehnal
7ab9d57156 Merge pull request #545 from giagitom/lookup3d
adding nearest and distance to point methods to lookup3d
2022-10-14 21:46:33 +02:00
Adam Midlik
9ea6f51126 New volume isosurface param pickingGranularity: voxels|surfaces 2022-10-13 00:57:39 +02:00
giagitom
649fe4f4f0 Lint fix 2022-10-12 16:57:56 +02:00
giagitom
53df86c585 Avoid using unnecessary extractMinimum from heap if k=1 on nearest search, add nearest method as unreleased. 2022-10-12 16:14:51 +02:00
Alice Russell
87c708e3c1 Remove action state from being set to undefined when action selected to stop options from minimising on selection 2022-10-12 10:58:30 +01:00
Jason Pattle
ba927b0490 returned clone of theme params for model and trajectory index themes, added contributor name 2022-10-12 08:30:52 +01:00
Jason Pattle
2a09725c98 added the new model-index color theme as an option in the illustrative color-theme 2022-10-12 08:30:10 +01:00
Jason Pattle
9fa0d17933 removed carbon color adjustment option 2022-10-12 08:29:45 +01:00
Jason Pattle
8d9f8a996a Updated change log with changes to model-index and element-symbol 2022-10-12 08:29:17 +01:00
giagitom
8814b60d0b Increased performances of lookup3d nearest search. 2022-10-11 18:12:27 +02:00
Jason Pattle
541c07c53a Added a parameter to make adjusting the carbon color by the same saturation and lightness carbon colors optional 2022-10-11 16:19:17 +01:00
Jason Pattle
6cbed80815 updated the default color palette and removed the redundant model color map 2022-10-11 16:07:44 +01:00
Jason Pattle
a3c1fdc0f4 Added the model index theme provider as an option for the carbon color when selecting the element-symbol color theme 2022-10-11 15:53:05 +01:00
Jason Pattle
ddf789b01c added a new model-index color theme based off the trajectory index theme but instead using the Model.Index structure property 2022-10-11 15:50:23 +01:00
Jason Pattle
ab86cc0bf3 Renamed the model-index color theme file to trajectory-index 2022-10-11 15:37:04 +01:00
Jason Pattle
dc8fab5820 [BREAKING CHANGE] renamed the model-index color theme and its usages to trajectory-index to better reflect the functionality of the color theme 2022-10-11 15:35:29 +01:00
giagitom
813c4f845a Merge branch 'master' into lookup3d 2022-10-09 15:10:37 +02:00
dsehnal
509e6bc2d8 add TrajectoryFromMmCif.loadAllBlocks param 2022-10-09 14:36:33 +02:00
Alexander Rose
6ed42e9521 add mipmap-based blur for skybox backgrounds 2022-10-08 14:54:29 -07:00
Alexander Rose
fb01ba60ec use resources object to get textures for smaa pass 2022-10-08 14:08:07 -07:00
Alexander Rose
ea4210ded5 add willReadFrequently option to sdf text 2d context 2022-10-08 14:06:25 -07:00
Alexander Rose
75e5cf54d6 remove deprecated vscode extension from recommendations 2022-10-08 14:05:12 -07:00
Jason Pattle
7cebc85a95 fixed linting warnings 2022-10-06 13:02:15 +01:00
Jason Pattle
c00faafa6d Returned a clone of the element symbol params instead of the original const, removing a todo comment 2022-10-06 11:42:53 +01:00
Jason Pattle
c9b14f0742 Updated the element symbol color theme so that the carbon color is also adjusted by saturation and brightness props 2022-10-06 09:13:33 +01:00
Alexander Rose
9624137c0d 3.19.0 2022-10-01 17:26:48 -07:00
Alexander Rose
3eb433368f changelog 2022-10-01 17:21:18 -07:00
Alexander Rose
58691f4f5f package updates 2022-10-01 17:19:59 -07:00
Alexander Rose
5e9295abd5 changelog 2022-10-01 15:45:17 -07:00
Alexander Rose
6ed0ae55b2 fix black artifacts
- on specular highlights with transparent background
2022-10-01 15:34:54 -07:00
Alexander Rose
84448d0aa1 Merge branch 'master' of https://github.com/molstar/molstar 2022-10-01 13:51:58 -07:00
Alexander Rose
31ced24966 Merge pull request #573 from molstar/optimize-binary-packing
Optimize BinaryCIF integer packing
2022-10-01 13:51:21 -07:00
Alexander Rose
24681840af debug tweaks 2022-10-01 13:34:50 -07:00
Alexander Rose
5d28aa4f2e add cameraClipping.minNear param 2022-10-01 13:32:09 -07:00
Alexander Rose
7dabdf3085 dpoit fixes
- when post-processing is off
- when rendering direct-volumes
2022-10-01 13:26:10 -07:00
giagitom
d7cbd5570c Implement lookup & grid nearest search using fibonacci heap 2022-09-30 15:44:10 +02:00
dsehnal
80011d4aea optimize BinaryCIF integer packing 2022-09-29 17:30:26 +02:00
David Sehnal
c6fe440a01 Merge pull request #569 from russellp17/fix-empty-texture-error-on-empty-canvas
Fix "empty textures" error on empty canvas
2022-09-27 16:52:28 +02:00
Russell Parker
ba8d6dc3fa Fix "empty textures" error on empty canvas 2022-09-27 10:24:55 -04:00
giagitom
378f4f8304 Merge branch 'master' into lookup3d 2022-09-19 10:22:43 +02:00
Alexander Rose
aa414485a5 3.18.0 2022-09-17 11:55:04 -07:00
Alexander Rose
3a35a5d66a changelog 2022-09-17 11:49:08 -07:00
Alexander Rose
43b0a72b09 package updates 2022-09-17 11:49:01 -07:00
Alexander Rose
521ac2d13f stereo camera improvements
- fix param updates not applied
- better param ranges and description
- add timer.mark for left/right camera
2022-09-17 11:43:18 -07:00
Alexander Rose
30520c50c2 fix changelog 2022-09-17 11:39:40 -07:00
Alexander Rose
819f07eba3 Merge pull request #533 from giagitom/dpoit
Integration of Dual depth peeling - OIT method
2022-09-17 11:36:56 -07:00
Alexander Rose
d8d6aa7136 wboit, tweak timer.mark 2022-09-17 11:34:48 -07:00
giagitom
0bdcfea276 Merge branch 'master' into lookup3d 2022-09-16 17:45:20 +02:00
giagitom
718f76313f Adding nearest method to lookup3d at unit and structure level. 2022-09-16 17:32:07 +02:00
Alexander Rose
ed75a365d8 dpoit, cleanup 2022-09-12 22:38:49 -07:00
Alexander Rose
f5ff13ffe4 dpoit, fix transparent background 2022-09-12 22:38:26 -07:00
Alexander Rose
44c69b1716 dpoit, fix depthMask not off 2022-09-12 22:27:03 -07:00
Alexander Rose
559ca7ffb8 Merge branch 'master' of https://github.com/molstar/molstar into pr/giagitom/533 2022-09-12 22:22:55 -07:00
Alexander Rose
524f34e8c1 3.17.0 2022-09-11 14:38:51 -07:00
Alexander Rose
d749be11f0 type fixes 2022-09-11 14:34:21 -07:00
Alexander Rose
13dc9ff3cb package updates 2022-09-11 14:12:57 -07:00
Alexander Rose
24b4fce326 improve RG texture format handling 2022-09-10 17:21:20 -07:00
Alexander Rose
f506210bf8 dpoit, fix webgl1 support
- in webgl1 drawbuffers must be in the same format for some reason
2022-09-10 17:12:59 -07:00
Alexander Rose
cb0cbd06ce Merge branch 'master' of https://github.com/molstar/molstar into pr/giagitom/533 2022-09-10 16:02:43 -07:00
Alexander Rose
3356239089 fix click event triggered after move 2022-09-10 15:57:07 -07:00
Alexander Rose
9a5b2edc08 cleanup unused variable 2022-09-10 15:39:07 -07:00
Alexander Rose
2d41b4bd83 dpoit, use half float for color textures when available 2022-09-10 15:36:54 -07:00
Alexander Rose
58f7758ee1 add note to MAX_DPOIT_DEPTH constant 2022-09-10 15:30:28 -07:00
Alexander Rose
9dbb642883 more blend back handling cleanup 2022-09-10 15:26:49 -07:00
Alexander Rose
c5222e4d1d Merge branch 'master' of https://github.com/molstar/molstar into pr/giagitom/533 2022-09-10 14:54:57 -07:00
Alexander Rose
a5a695a17c Merge pull request #514 from yakomaxa/molql_integration_PR
Integration of pymol/vmd/jmol transpilers from MolQL project (WIP rasmol transpiler)
2022-09-10 14:51:53 -07:00
Alexander Rose
7d1dc86cfb Merge branch 'master' into molql_integration_PR 2022-09-10 14:50:27 -07:00
Alexander Rose
03224f914a transpiler helper cleanup 2022-09-10 14:49:03 -07:00
Alexander Rose
1cf1f07232 Merge pull request #552 from molstar/perf-caveat
add support for failIfMajorPerformanceCaveat
2022-09-10 13:43:37 -07:00
Alexander Rose
838d36a74e Merge branch 'master' into perf-caveat 2022-09-10 13:43:24 -07:00
Alexander Rose
6c9300d01b fix useBehavior handling 2022-09-10 13:42:52 -07:00
Alexander Rose
3059f7efef Merge pull request #553 from molstar/pdb-ter
fix handling of PDB TER records
2022-09-10 12:51:08 -07:00
Alexander Rose
fbce7d9afa Merge branch 'master' into pdb-ter 2022-09-10 12:50:59 -07:00
Alexander Rose
1c9f3ed9fa simplify ter record check 2022-09-10 12:50:22 -07:00
Alexander Rose
8c47d2d400 Merge pull request #554 from molstar/repr-getAllLoci
add repr.getAllLoci
2022-09-10 12:46:13 -07:00
Alexander Rose
8a18f25b5d Merge branch 'master' into repr-getAllLoci 2022-09-10 12:46:05 -07:00
Alexander Rose
e7ae0058ed Merge pull request #555 from molstar/bond-key-prop
add key property to intra- and inter-bonds
2022-09-10 12:45:39 -07:00
Alexander Rose
98bf3a3e33 tweak per-group transparency cutoff 2022-09-09 23:45:02 -07:00
Alexander Rose
379fcd4494 dpoit, render volumes with standard blending 2022-09-09 23:13:15 -07:00
Alexander Rose
8589777bac Merge branch 'master' of https://github.com/molstar/molstar into pr/giagitom/533 2022-09-09 22:27:45 -07:00
Alexander Rose
c10a21ecbd add key property to intra- and inter-bonds 2022-09-09 22:19:57 -07:00
Alexander Rose
eddc616b14 add repr.getAllLoci 2022-09-09 19:23:46 -07:00
Alexander Rose
70fc1a9579 support residue ranges in jmol atom expressions 2022-09-09 15:59:14 -07:00
Alexander Rose
f27ec4d6a4 formatting 2022-09-09 15:36:08 -07:00
Alexander Rose
1e6e956e2d improve pymol keywords
- rename polymer.protein and polymer.nucleic
- fix guide "C4'"
2022-09-09 15:35:46 -07:00
Alexander Rose
0a2a3530d1 fix handling of PDB TER records 2022-09-09 13:20:15 -07:00
Alexander Rose
9e4c820e26 add support for failIfMajorPerformanceCaveat 2022-09-09 12:31:40 -07:00
Alexander Rose
05290bfe9e update renderer spec resource counts 2022-09-08 18:40:43 -07:00
Alexander Rose
607f4ce353 dpoit: fix drawbuffer setup and blend to target 2022-09-08 18:10:31 -07:00
Alexander Rose
4b819ead1d formating 2022-09-08 18:08:53 -07:00
Alexander Rose
d07d9d3f31 add missing dpoitIterations param 2022-09-08 18:08:16 -07:00
Alexander Rose
d08776bf19 Merge branch 'master' of https://github.com/molstar/molstar into pr/yakomaxa/514 2022-09-07 18:37:37 -07:00
Alexander Rose
7a61fd44fd remove rasmol transpiler
- functionallity integrated into jmol transpiler
2022-09-07 18:32:43 -07:00
Alexander Rose
151da1487c formatting 2022-09-07 18:28:45 -07:00
Alexander Rose
e3f6dfad5b improve jmol transpiler
- add basic within function
- add basic backbone and protein keyword
- allow withspace in parans
2022-09-07 18:06:15 -07:00
Alexander Rose
32080ce918 improve jmol transpiler
- add resno ranges
- add bracketed resnames
- allow comma as OR
2022-09-07 15:16:28 -07:00
Alexander Rose
aedb2138c8 Merge pull request #548 from molstar/interactions-parent-display
add parentDisplay param to interactions repr
2022-09-06 12:19:25 -07:00
Alexander Rose
90e6938f1c Merge branch 'master' into interactions-parent-display 2022-09-06 11:57:02 -07:00
David Sehnal
eadff35250 Merge pull request #547 from molstar/sifts-alignment/residue-test
alignAndSuperposeWithSIFTSMapping includeResidueTest option
2022-09-05 15:11:53 +02:00
Alexander Rose
487450ec64 show only 'between' interaction in docking-viewer 2022-09-04 22:41:35 -07:00
Alexander Rose
f2f730bab5 fix parentDisplay 'between' logic 2022-09-04 22:41:06 -07:00
Alexander Rose
ceecee37a7 add parentDisplay param to interactions repr 2022-09-02 22:19:45 -07:00
dsehnal
394377bea9 alignAndSuperposeWithSIFTSMapping update 2022-09-02 15:50:58 +02:00
dsehnal
2b47818deb alignAndSuperposeWithSIFTSMapping includeResidueTest option 2022-09-02 15:38:06 +02:00
giagitom
9f72465052 remove unnecessary 2022-09-02 10:21:56 +02:00
giagitom
ac33b4a322 Adding distanceToVec in sphere3d namespace 2022-09-02 10:20:51 +02:00
giagitom
911c844e54 Remove logs and unused variables 2022-09-01 18:09:04 +02:00
giagitom
12b9655565 adding nearest and distance to point methods to lookup3d 2022-09-01 17:41:09 +02:00
dsehnal
2935717a06 Canvas3DParams fix 2022-08-29 16:49:30 +02:00
dsehnal
2c8d2cfa21 3.16.0 2022-08-25 17:55:54 +02:00
dsehnal
d67c0eb757 ViewportHelpContent fix 2022-08-25 17:53:10 +02:00
giagitom
7bcbcd5a7f Exposed dpoitIterations parameter 2022-08-25 16:07:36 +02:00
giagitom
1c06e7f36e Merge branch 'master' into dpoit 2022-08-24 18:44:30 +02:00
giagitom
407297adc0 added dpoit-enable query string 2022-08-24 18:21:34 +02:00
giagitom
b082b31562 Remove logs, changelog, set wboit as default option 2022-08-24 18:19:59 +02:00
giagitom
fcbeb0f82f Add defines for direct-volume 2022-08-24 17:42:08 +02:00
dsehnal
7094f8f265 Improve Viewer theming & label customization 2022-08-24 15:26:24 +02:00
giagitom
48aaa13420 Fix missing texture format 2022-08-24 15:24:30 +02:00
giagitom
d2434cf91f Merge branch 'master' into dpoit 2022-08-24 15:09:13 +02:00
giagitom
8dbe0d2793 Lint-fix 2022-08-24 14:37:33 +02:00
giagitom
7b308cf984 Keep wboit as default OIT method 2022-08-24 14:34:44 +02:00
giagitom
520af504aa Throw an error if wboit and dpoit are both enabled 2022-08-24 14:29:40 +02:00
giagitom
4bee130599 Added credits and contributions + lint-fix 2022-08-24 14:12:12 +02:00
dsehnal
19a9ed3e19 3.15.0 2022-08-23 19:00:36 +02:00
dsehnal
0dac1b93ae changelog 2022-08-23 18:57:45 +02:00
dsehnal
e824863de1 lint 2022-08-23 18:56:07 +02:00
David Sehnal
9ff8becd62 Merge pull request #530 from midlik/volume-streaming-camera-target
Volume streaming camera target (without caching)
2022-08-23 18:53:11 +02:00
Adam Midlik
fcaa1bcfa8 Merge branch 'master' into volume-streaming-camera-target 2022-08-23 18:39:37 +02:00
giagitom
39f51bcc4f Integration of Dual depth peeling - OIT method 2022-08-23 17:09:53 +02:00
Adam Midlik
1b904ee2c9 Addressed PR comments 2022-08-23 17:03:32 +02:00
yakomaxa
e2baafc426 lint 2022-08-23 18:13:14 +09:00
yakomaxa
6dabe73002 Update pymol keywords and properties 2022-08-23 17:16:10 +09:00
David Sehnal
d9b2b99c86 Merge pull request #531 from molstar/safari-wboit
add missing depth renderbuffer to wboit pass
2022-08-23 09:40:27 +02:00
Alexander Rose
bdf23a7c4e add missing depth renderbuffer to wboit pass
- fix wboit in Safari >=15
2022-08-22 23:39:50 -07:00
yakomaxa
c1723e0806 lint 2022-08-21 21:59:10 +09:00
yakomaxa
93590bd482 Remove comment line in vmd keyword 2022-08-21 21:54:38 +09:00
yakomaxa
fbaa9d9e58 Finally enabled selection by negative-valued residue index in RasMol 2022-08-21 21:48:47 +09:00
yakomaxa
ba78a8558c Finally enabled selection by negative-valued residue index 2022-08-21 21:39:20 +09:00
yakomaxa
513be04352 lint PyMOL 2022-08-21 21:38:43 +09:00
yakomaxa
15317aa11b give pymol the ability to deal with negatively indexed residue numbering 2022-08-21 19:37:20 +09:00
yakomaxa
93e107f333 give pymol the ability to deal with negatively indexed residue numbering 2022-08-21 19:32:45 +09:00
yakomaxa
655b334b0a Updated rasmol parser and spec 2022-08-21 17:14:29 +09:00
yakomaxa
95cc1c58a6 remove comment and unused character and functions 2022-08-21 16:56:20 +09:00
yakomaxa
0511d3e599 Unparenthesized residue range enabled in RasMol and parenthesized was un-activated 2022-08-21 16:51:38 +09:00
yakomaxa
92a41b5c46 Unparenthesized residue range enabled in RasMol, which should be ported to Jmol 2022-08-21 16:48:41 +09:00
yakomaxa
be16837c8c Remove unused lines 2022-08-21 15:51:41 +09:00
yakomaxa
bf5f26cb12 Remove comment-out lines. Moved un-bracketed residue name to the supported feature 2022-08-21 15:44:09 +09:00
yakomaxa
ccbcef7eff lint 2022-08-21 15:33:49 +09:00
yakomaxa
d02a97b7f0 un-bracketed residue-name and un-parenthesized residue number is enabeled in RasMol 2022-08-21 15:31:48 +09:00
yakomaxa
e0ca413c54 Remove needless substitutions to a temporary variable x 2022-08-21 10:42:32 +09:00
yakomaxa
a272fc1c05 Remove comment-out lines 2022-08-21 10:39:44 +09:00
yakomaxa
2c3f74d4ea Remove a comment-out line 2022-08-21 10:38:40 +09:00
yakomaxa
c65b2fc0fd Remove a comment-out line 2022-08-21 10:37:25 +09:00
yakomaxa
fd725adf27 Added TODO comment for comment-out functions 2022-08-21 10:36:47 +09:00
yakomaxa
ceba6da91f Remove comment-out lines 2022-08-21 10:27:57 +09:00
yakomaxa
064e7d42ee Remove a comment-out import 2022-08-21 10:26:56 +09:00
yakomaxa
cfdbf0c614 Remove comment-out lines 2022-08-21 10:25:33 +09:00
yakomaxa
436777fe34 Remove a comment-out import and a comment-out piece of code 2022-08-21 10:22:45 +09:00
yakomaxa
f08aa46222 Remove two comment-out import 2022-08-21 10:20:58 +09:00
yakomaxa
e099ac514a Remove three comment-out console.log 2022-08-21 10:19:56 +09:00
yakomaxa
873755f619 Remove comment-out unused import 2022-08-21 10:18:49 +09:00
yakomaxa
2094b7cf83 Update changelog mentioning this feature 2022-08-21 10:16:49 +09:00
yakomaxa
6ffdd81bb1 remove commented console.log 2022-08-21 10:14:32 +09:00
yakomaxa
a69cb17602 remove default paramerter and added whitespace before } 2022-08-21 10:12:56 +09:00
yakomaxa
7c82a9fd6e update transpile.ts 2022-08-21 10:11:59 +09:00
yakomaxa
10d9a6c83d removed console.log in try and replaced it by console.error in catch 2022-08-21 10:01:56 +09:00
Alexander Rose
e474e9b090 3.14.0 2022-08-20 16:43:16 -07:00
Alexander Rose
837f9a6c74 changelog 2022-08-20 16:37:46 -07:00
Alexander Rose
c357aed7bb schema updates 2022-08-20 16:36:48 -07:00
Alexander Rose
59ffddfd8d update packages 2022-08-20 16:33:17 -07:00
Alexander Rose
fb3accaa36 Merge pull request #528 from molstar/safari-surf-fix
wrap gl_VertexID in int()
2022-08-20 15:45:14 -07:00
Alexander Rose
b3e79544ad Merge branch 'master' into safari-surf-fix 2022-08-20 15:44:30 -07:00
Alexander Rose
2ee0f3bf97 Merge pull request #515 from molstar/background-pass
Background pass
2022-08-20 15:41:32 -07:00
Alexander Rose
a56b5edc4e cleanup 2022-08-20 15:32:01 -07:00
Alexander Rose
f2d71b6551 Merge branch 'master' into background-pass 2022-08-20 15:25:20 -07:00
Alexander Rose
ef560ddc03 Merge pull request #529 from molstar/webgl-state
Webgl state
2022-08-20 15:22:04 -07:00
Alexander Rose
2e30ffe1bc Merge branch 'master' into webgl-state 2022-08-20 15:21:54 -07:00
Alexander Rose
325b5e9297 Merge pull request #527 from molstar/custom-prop-fix
fix CustomElementProperty coloring
2022-08-20 15:21:01 -07:00
Alexander Rose
ae9e04b8d4 reduce number of webgl state changes
- add viewport and scissor to state object
- add hasOpaque to scene object
2022-08-20 12:04:51 -07:00
Alexander Rose
ab0010122b handle renderable rendering edge cases
- fix text background rendering for opaque text
- fix helper scenes not shown when rendering directly to draw target
2022-08-20 12:04:04 -07:00
Alexander Rose
08d736ecdc image loading error handling and other tweaks 2022-08-20 11:54:51 -07:00
Alexander Rose
9c362c8ffd Merge branch 'master' of https://github.com/molstar/molstar into background-pass 2022-08-20 11:07:57 -07:00
Alexander Rose
62c8778560 Merge pull request #513 from molstar/inter-bonds-props
expose inter-bonds props & improve performance
2022-08-20 11:06:04 -07:00
Alexander Rose
2fe0665e12 simplify box3d functions 2022-08-20 10:57:40 -07:00
Alexander Rose
14a957f517 Merge branch 'master' of https://github.com/molstar/molstar into inter-bonds-props 2022-08-20 10:56:14 -07:00
Alexander Rose
087010d0a1 Merge pull request #525 from molstar/pairBonds-maxDistance
set some IndexPairBonds maxDistance to Infinity
2022-08-20 10:54:12 -07:00
Alexander Rose
f92657310a Merge branch 'master' into pairBonds-maxDistance 2022-08-20 10:54:03 -07:00
Alexander Rose
19e91400b5 fix CustomElementProperty coloring
- can't check data availabilty in isApplicable because it is obtained on demand
2022-08-20 10:14:21 -07:00
Alexander Rose
7885fb7b4f wrap gl_VertexID in int()
-fix GPU surfaces rendering in Safari with WebGL2
2022-08-20 10:12:51 -07:00
Alexander Rose
331bec11ee cleanup comment 2022-08-20 10:08:47 -07:00
Adam Midlik
f6ed650ef6 Refactoring, cleaning 2022-08-19 15:17:50 +02:00
Adam Midlik
df9ce6add9 Volume Streaming Around Camera - parameter Radius is relative to FOV 2022-08-19 12:42:10 +02:00
Adam Midlik
28ee47d501 Volume Streaming Around Camera - avoid chain-reaction updates 2022-08-19 11:29:52 +02:00
Adam Midlik
df2da479ad Volume Streaming - corrected help text for Detail Level (range is 1-7) 2022-08-19 10:23:00 +02:00
Adam Midlik
46eb9d8baf Volume Streaming - correct init value of Selection Detail and Dynamic Detail when View type changes 2022-08-19 10:21:08 +02:00
Adam Midlik
b6be871a21 Volume Streaming all types use MonoQueue 2022-08-18 23:28:11 +02:00
Adam Midlik
ce2367fc0a Volume streaming Around Focus uses MonoQueue (i.e. never queuing more than 1 update) 2022-08-18 19:27:53 +02:00
dsehnal
f219cd6c8b prefer webgl1 in Safari 16 2022-08-18 17:39:18 +02:00
yakomaxa
7789e8cfea deleted package-lock.json 2022-08-18 19:58:30 +09:00
Alexander Rose
e697624064 prefer WebGL1 for more Safari versions
-avoid broken GPU surfaces rendering
2022-08-17 22:08:17 -07:00
Alexander Rose
92ffdeb5bf don't include glycam names in default saccharides 2022-08-17 21:57:55 -07:00
Alexander Rose
ddefe7e542 package updates 2022-08-17 21:50:54 -07:00
Alexander Rose
fb4019c041 changelog 2022-08-17 21:39:14 -07:00
Alexander Rose
46026e047e set some IndexPairBonds maxDistance to Infinity
- for MOL/SDF and MOL2 (without symmetry) models
- avoid filtering by element-based rules
2022-08-17 21:38:06 -07:00
yakomaxa
51a9effcaa Added a sentence on transpilers in CHANGELOG.md 2022-08-17 12:07:12 +09:00
yakomaxa
fc3b953a8e Added whitespace remover to prefixRemoveKet in helper.ts and update rasmol.spec.ts 2022-08-17 11:55:45 +09:00
yakomaxa
a2ded3cecc Small update for RasMol parser 2022-08-17 10:28:39 +09:00
yakomaxa
ffb1390b51 added conditional evalation to inComplement 2022-08-17 10:15:18 +09:00
yakomaxa
3b92591c05 added conditional evaluation to disjunct and invert 2022-08-17 10:08:15 +09:00
yakomaxa
f173ddcf00 removed comment-out lines from rasmol parser.ts 2022-08-16 22:50:35 +09:00
yakomaxa
f78306f624 removed unused abbr. from rasmol operators.ts 2022-08-16 22:41:18 +09:00
yakomaxa
9852c9301e Changed list name in respective examples.ts and now examples.spec.ts runs without error 2022-08-16 20:07:44 +09:00
yakomaxa
2e4f3de604 debugging example.spec.ts 2022-08-16 19:47:11 +09:00
yakomaxa
300dd97353 Added spec, debugged Jmol parser, removed unused definition from RasMol properties/operators 2022-08-16 19:34:13 +09:00
yakomaxa
8e29ade83a minor change of language name: Rasmol -> RasMol 2022-08-16 16:52:34 +09:00
Alexander Rose
971c770f6a add experimental warning for transpiled scripts 2022-08-15 22:03:24 -07:00
Alexander Rose
0dfad5a757 imporve labels of skybox params 2022-08-15 20:55:45 -07:00
Alexander Rose
a0495f8aae fix SSAO renderable initialization 2022-08-15 20:55:27 -07:00
yakomaxa
7d31a06ae4 Updated atom-set.ts according to suggestion by dsehnal 2022-08-16 12:50:02 +09:00
KoyaS
c5319ad7b1 Update package.json
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-08-16 12:38:31 +09:00
KoyaS
f8bdb28ea6 Update package.json
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-08-16 12:38:18 +09:00
KoyaS
2f8806d7c2 Update src/mol-script/runtime/query/table.ts
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-08-16 12:37:55 +09:00
KoyaS
7d0a181c12 Update src/mol-model/structure/query/queries/atom-set.ts
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-08-16 12:37:46 +09:00
KoyaS
27cb7e53ed Update src/mol-script/runtime/query/table.ts
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-08-16 12:37:36 +09:00
KoyaS
ee5154b510 Update src/mol-script/runtime/query/table.ts
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-08-16 12:37:20 +09:00
KoyaS
080837201a Update src/mol-script/runtime/query/table.ts
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-08-16 12:36:44 +09:00
KoyaS
656e6c0d94 Update src/mol-script/runtime/query/table.ts
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-08-16 12:36:17 +09:00
KoyaS
b018f61bab Update src/mol-script/runtime/query/table.ts
conditional evaluation

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-08-16 12:35:37 +09:00
yakomaxa
b03b306848 Enabling some numerical properties and cleaning by lint 2022-08-16 06:17:58 +09:00
yakomaxa
19bf5c2b3e [SER]3:A.CA type of selection enabled 2022-08-16 05:27:30 +09:00
yakomaxa
c22a716cf9 Update helper.ts for RasMol 2022-08-16 04:35:26 +09:00
yakomaxa
220c65da92 Parentheses re-enabled in RasMol 2022-08-16 04:27:17 +09:00
yakomaxa
675f4b86f8 Minor update of RasMol mode 2022-08-16 04:18:00 +09:00
yakomaxa
d31b3522b2 Added myself as author in package.json. Thanks. 2022-08-15 21:12:22 +09:00
yakomaxa
4ed2bab1d7 cleaning by lint 2022-08-15 20:56:20 +09:00
yakomaxa
a572872806 Updated author information and removed notes 2022-08-15 20:53:47 +09:00
yakomaxa
e3ca23db0b Remove needless setting of class members and added revised author information 2022-08-15 20:24:23 +09:00
KoyaS
67eb16a53f Merge pull request #18 from yakomaxa/rasmol
Merge from RasMol branch and begin answering the reviewers
2022-08-15 20:12:23 +09:00
yakomaxa
d7421cd1a3 Removed unwanted file 2022-08-15 20:00:48 +09:00
yakomaxa
c2e68ced66 cleaning by lint 2022-08-15 19:39:54 +09:00
yakomaxa
10cf0db050 Within operator was implemented in RasMol 2022-08-15 19:38:14 +09:00
yakomaxa
08f1a1dcfe Added experimental within to rasmol 2022-08-15 18:03:16 +09:00
yakomaxa
11bf352295 Added experimental within to rasmol 2022-08-15 15:39:57 +09:00
yakomaxa
5fd560b30a Added experimental within to rasmol 2022-08-15 15:38:38 +09:00
KoyaS
e6d01ca246 Merge pull request #17 from yakomaxa/molql_integration_PR
Molql integration pr
2022-08-15 13:03:55 +09:00
Alexander Rose
1610f05b83 Merge branch 'master' of https://github.com/molstar/molstar into inter-bonds-props 2022-08-14 16:28:21 -07:00
Alexander Rose
8202b75cda Merge branch 'master' of https://github.com/molstar/molstar into background-pass 2022-08-14 16:26:47 -07:00
Alexander Rose
4904bae5a6 background pass improvements
- add PluginConfig.Background.Styles
- file support, asset management
- opacity, saturation, lightness controls for skybox/image
- coverage controls for image/gradient
- add backgrounds extension with examples
- image handling for build/watch (webpack, cpx)
2022-08-14 16:24:28 -07:00
Alexander Rose
04c06db02c Merge pull request #519 from MadCatX/gzip_files
Allow download of Gzipped files
2022-08-14 14:52:10 -07:00
Alexander Rose
0ddf2fa00d typing tweaks 2022-08-14 14:37:30 -07:00
Alexander Rose
8776143ec2 revert to mol-script in StructureSelectionFromScript 2022-08-14 14:07:39 -07:00
Alexander Rose
080c8e7af3 add basic scipt language selector 2022-08-14 14:06:12 -07:00
Michal Malý
a96f94b676 Allow download of Gzipped files 2022-08-14 17:11:35 +02:00
yakomaxa
64998e762b cleaning by lint and adding comments 2022-08-14 11:15:50 +09:00
yakomaxa
b508da5ccc cleaning by lint 2022-08-14 11:06:24 +09:00
KoyaS
84a492655a Merge pull request #16 from yakomaxa/molql_integration_PR
Molql integration pr
2022-08-14 10:57:07 +09:00
yakomaxa
9b9cfe4138 rasmol -> pymol 2022-08-14 10:55:11 +09:00
yakomaxa
f362a7086a rasmol update 2022-08-14 10:54:31 +09:00
KoyaS
9e9ec57a5f Merge pull request #14 from yakomaxa/rasmol
merge from rasmol branch
2022-08-14 04:09:15 +09:00
yakomaxa
da6a153985 Construction of rasmol selection command has nearly finished 2022-08-14 04:03:48 +09:00
yakomaxa
b4bde3f510 Rasmol parser WIP 5 2022-08-14 03:31:08 +09:00
yakomaxa
8a5cebd635 Rasmol parser WIP 4 2022-08-14 03:23:54 +09:00
Alexander Rose
ebdfc694c2 Merge pull request #520 from MadCatX/clean_up_pyramids
Change the lookup logic of NtC steps from residues
2022-08-13 11:19:30 -07:00
yakomaxa
ddf2733d3c Rasmol parser WIP 3 2022-08-14 00:36:37 +09:00
yakomaxa
cf65bfbcd0 Rasmol parser WIP 2 2022-08-13 23:03:26 +09:00
yakomaxa
03cce830bc Rasmol parser WIP 2022-08-13 21:43:05 +09:00
yakomaxa
913cf4c3e9 developing rasmol residue-range selector WIP 2022-08-13 12:44:14 +09:00
yakomaxa
2ccce0beaf developing rasmol residue-range selector WIP 2022-08-13 12:43:07 +09:00
yakomaxa
52239f71cd refined rasmol keywords 2022-08-13 11:20:41 +09:00
KoyaS
d9265af2e8 Merge pull request #13 from yakomaxa/molql_integration_PR
Added transpilers/_spec and checked that they pass the test
2022-08-13 08:57:48 +09:00
yakomaxa
5877f6a627 Added transpilers/_spec and checked that they pass the test 2022-08-13 02:43:54 +09:00
Michal Malý
7f29340797 Change the lookup logic of NtC steps from residues 2022-08-12 15:29:26 +02:00
KoyaS
e3e982c051 Merge pull request #11 from yakomaxa/molql_integration_PR
merge from molql_integration_PR
2022-08-12 18:07:23 +09:00
yakomaxa
17f09ff3de Cleaning and lint 2022-08-12 18:00:45 +09:00
yakomaxa
7a73416c03 Cleaning and lint 2022-08-12 17:44:29 +09:00
yakomaxa
0f799d44ad Found a bug in withSameAtomProperties in filter.ts, where propSet and currentProps are placed inversely in isSuperSet() 2022-08-12 16:08:42 +09:00
yakomaxa
24ebd44f87 remove namedAtomProperty from vmd/parser.ts, removed as any from definition of withSameAtomProperties, un-commented out the continue line in filter.ts 2022-08-12 10:06:44 +09:00
KoyaS
572b10e655 Merge pull request #9 from yakomaxa/molql_integration_PR
merge from molql_integration_pr branch
2022-08-12 07:11:15 +09:00
yakomaxa
60361c176b Updated pick function in filter.ts. This enebles VMD keywords like backbone and many more. 2022-08-12 06:29:13 +09:00
yakomaxa
b232a2c58f Updated atom-set.ts and filter.ts, which leads to correct behavior of inorganic in PyMOL. The bound_to operator was found to behave differently from original PyMOL even in MolQL implementation: it's just mistake in logic. 2022-08-12 06:19:20 +09:00
yakomaxa
2a44ac56fb cleaning by lint 2022-08-12 01:18:56 +09:00
yakomaxa
d0340a3257 The function called by filter.withSameAtomProperties is debugged and almost everything works fine now. 2022-08-11 23:54:57 +09:00
yakomaxa
e708a53ddb atom-set.ts table.ts updates 2022-08-11 22:11:15 +09:00
yakomaxa
23cdd70198 updated atomCount and many problem solved 2022-08-11 21:20:55 +09:00
yakomaxa
ba4bc30a78 remove trash file 2022-08-11 14:28:31 +09:00
yakomaxa
e516ea146d Update for atomCount and countQuery in table.ts 2022-08-11 14:26:10 +09:00
yakomaxa
61af638fe4 Update atom-set 2022-08-11 13:59:56 +09:00
yakomaxa
7a0af4142f Now PyMOL within operator works. The key was to replace xs['max-radius'] -> xs['max-radius'](ctx) in table.ts 2022-08-11 10:52:56 +09:00
yakomaxa
1aa8d596a3 Updates for queryInSelection in src/mol-script/runtime/query/table.ts was reverted (made bug) 2022-08-11 10:30:09 +09:00
yakomaxa
a457810623 queryInSelection in src/mol-script/runtime/query/table.ts was updated 2022-08-11 10:18:16 +09:00
yakomaxa
4bccb7ab84 VMD jmol rasmol parser debugged 2022-08-11 09:46:15 +09:00
yakomaxa
fcd5b2ce0a VMD parser debugged 2022-08-11 09:36:32 +09:00
yakomaxa
57a1184a16 VMD parser updated, now math function to value comparison enabled 2022-08-11 09:22:37 +09:00
Adam Midlik
ef176efed8 Volume streaming 'Around Camera' - prototype 2022-08-11 01:39:22 +02:00
yakomaxa
9943e0317d VMD jmol and rasmol parser updated 2022-08-11 08:39:21 +09:00
yakomaxa
ae11c1c904 VMD keyword update 2022-08-11 03:33:28 +09:00
yakomaxa
f937e069ca Clearning by Lint 2022-08-11 02:41:43 +09:00
yakomaxa
c9326da47b Implemented subset of atomSet: atomCount, queryCount and propertySet, which enables some of PyMOL operators. Implementation should be reviewed as byring is not working, and inorganic working incorrectly 2022-08-11 02:32:45 +09:00
yakomaxa
4698c05f9c re-implementation of VMD's exwithin without using wihtin 2022-08-10 21:41:03 +09:00
yakomaxa
15fd2cd5a0 let transpile.ts show what the query is 2022-08-10 21:27:25 +09:00
yakomaxa
193eb11095 Set some operators that lacks corresponding implementation to isUnsupported : true 2022-08-10 16:34:35 +09:00
yakomaxa
59cc0096cd fixing typo in example of pymol operator: resname CA -> name CA 2022-08-10 16:28:51 +09:00
yakomaxa
6bd7390eb8 Debbuged asAtoms in helper.ts, which enables operation using this function such as byresidue and neighbor. In addition, min-spelling in neighbor operation fixed: neighbour -> neighbor 2022-08-10 16:21:06 +09:00
yakomaxa
eabeb18f34 pymol 2022-08-10 16:11:54 +09:00
yakomaxa
4b6f539ba3 debugging wrapValue in helper.ts : property.head -> property.head.name : This enables secondary structure selection for VMD via valuesTest in helper.ts 2022-08-09 22:22:08 +09:00
yakomaxa
ea55fc5f41 debugging VMD mode 2022-08-09 22:05:04 +09:00
yakomaxa
94787229a4 testLevel in helper.ts was debuged and now comes back in vmd/parser.ts 2022-08-09 19:24:34 +09:00
Alexander Rose
113d0b5141 add background pass
- skybox, image, horizontal/radial gradient
2022-08-07 13:27:06 -07:00
Alexander Rose
163285b0a9 cleanup 2022-08-07 13:20:52 -07:00
Alexander Rose
9f1cf5377a add sceneRadiusFactor param 2022-08-07 13:17:52 -07:00
Alexander Rose
c37636215b expose fov camera param 2022-08-07 13:14:57 -07:00
KoyaS
0cb162022c Merge pull request #6 from yakomaxa/enable_not_and
Enabled NOT operation
2022-08-07 17:45:45 +09:00
yakomaxa
5ff2ca311e structure-query.generator.query-in-selection was implemented: this enables NOT operation. In addition, tranpiler/helper.ts was fixed to use B.struct.generator.all() instead of B.struct.generator.atomGroups(). B.struct.generator.atomGroups() is not working for some reason, which was also met in the keyword 'all' in all of vmd/pymol/jmol parser.ts 2022-08-07 17:42:15 +09:00
KoyaS
44b8d452a8 Merge pull request #5 from yakomaxa/enable_not_and
structure-query.modifier.intersectby was implemented
2022-08-07 15:55:08 +09:00
yakomaxa
82ccb1ab23 structure-query.modifier.intersectBy was implemented: this enables AND operation 2022-08-07 15:51:06 +09:00
yakomaxa
feb8b94e30 modified _spec: I don't understand what these _spec things do 2022-08-07 10:19:03 +09:00
yakomaxa
5adc73e277 removed unsused modules from package.json 2022-08-07 10:18:41 +09:00
KoyaS
c4ac983fc7 Merge pull request #4 from molstar/master
merge from head repository
2022-08-07 08:40:03 +09:00
yakomaxa
5ba7ba3aac Cleaning before PR. Note that many tests fail. 2022-08-07 08:34:22 +09:00
yakomaxa
e879479b3d removed mock-extension for language selector and reverted src/mol-plugin-state/transforms/representation.ts to the original 2022-08-07 07:36:39 +09:00
yakomaxa
7b49463297 NamedAtomProperties was added to vmd parser 2022-08-07 06:16:29 +09:00
Alexander Rose
1f77b19ced changelog 2022-08-06 13:45:29 -07:00
Alexander Rose
9853ebf02f Merge pull request #507 from MadCatX/add_pyramid_labels
Add labels for Confal pyramids
2022-08-06 13:42:02 -07:00
Alexander Rose
6e13aa0bc9 expose inter-bonds props & improve performance 2022-08-06 13:31:10 -07:00
yakomaxa
66600c3373 deleted unused comment lines in monadic-parser.ts 2022-08-07 02:39:22 +09:00
yakomaxa
19401c4bc6 Activated RangeListProperty in vmd/parser.ts with hardcoded 'atom-test' line 2022-08-07 02:38:21 +09:00
yakomaxa
bfc8660c5e replaced structure. -> structure-query. in transpiler directory 2022-08-07 02:21:52 +09:00
yakomaxa
6a83dc56ba reverted vmd parser and properties to original 2022-08-07 02:12:21 +09:00
KoyaS
82df9d8cad Merge pull request #3 from yakomaxa/rasmol
Rasmol transpiler added
2022-08-05 23:47:28 +09:00
yakomaxa
dd30fef078 Added many properties and keywords for PyMOL and rasmol 2022-08-05 23:38:41 +09:00
yakomaxa
79feb5a1cc rasmol branch launched 2022-08-05 20:48:16 +09:00
yakomaxa
0665524b11 refined VMD: RangeListProperty in vmd/parser.ts is not working for unknown reasons, so it was substituted by NamedAtomProperties: This limits the selection like 'residue 10 to 50' and 'residue 10' 2022-08-05 20:36:32 +09:00
yakomaxa
d45367e840 Refining VMD parser and properties 2022-08-05 13:32:46 +09:00
Michal Malý
1b7f0e0f1e Add example mmCIF to allow testing of Confal pyramids 2022-08-04 10:09:50 +02:00
Michal Malý
18cb3360b5 Update changelog 2022-08-04 09:56:28 +02:00
yakomaxa
cb0d988efc Updated language-select/ui, refactored transpile.ts and monadic-parser.ts 2022-08-03 22:52:07 +09:00
yakomaxa
fc0c556967 updated default value for Script and added mock-up for language-selector 2022-08-03 21:31:53 +09:00
yakomaxa
00970164db Debugged all in jmol 2022-08-03 03:24:35 +09:00
yakomaxa
7c3d76e9fe Merge branch 'master' of github:yakomaxa/molstar_my 2022-08-03 02:50:43 +09:00
yakomaxa
190c1f9620 Added pymol, jmol and vmd alongside mol-script: pymol is now enabled 2022-08-03 02:49:52 +09:00
KoyaS
f532325147 Merge pull request #2 from yakomaxa/PyMOL
added all and polymer.protein to keywords of pymol
2022-08-02 13:25:09 +09:00
yakomaxa
278dcb8808 added all and polymer.protein to keywords of pymol 2022-08-02 13:10:42 +09:00
Michal Malý
6fec598b96 Add labels for Confal pyramids 2022-08-01 14:46:35 +02:00
KoyaS
309c25e10b Merge pull request #1 from yakomaxa/jmol
Added Jmol transpiler (not enabled)
2022-07-31 23:05:06 +09:00
yakomaxa
6df728ea3e added jmol transplier (not enabled) 2022-07-31 23:01:11 +09:00
yakomaxa
dcf4ef6d74 added jmol transpiler 2022-07-31 22:49:20 +09:00
yakomaxa
4de1369a5a added jmol transpiler 2022-07-31 22:46:58 +09:00
yakomaxa
2ccfdb1280 added _spec (not tested whether it works) 2022-07-31 21:58:43 +09:00
yakomaxa
9fbf800639 added _spec (not tested whether it works) 2022-07-31 21:58:09 +09:00
yakomaxa
577daf64df PyMOL mode was successfully enabled (though mol-script is disabled...) 2022-07-31 12:27:15 +09:00
yakomaxa
0b1943e9b3 Now it worksgit add src/mol-script/transpile.ts 2022-07-31 12:17:25 +09:00
yakomaxa
30bd2dd876 Compiles but not boot 2022-07-31 12:04:38 +09:00
yakomaxa
cecd4d4179 Compiles but not working again 2022-07-31 11:15:58 +09:00
yakomaxa
364baab18d Added transpile.ts and all.ts 2022-07-31 10:30:37 +09:00
yakomaxa
bb3d4d2171 Added default export 2022-07-31 10:00:36 +09:00
yakomaxa
2355faf899 compiles but not working 2022-07-31 01:54:27 +09:00
yakomaxa
858e0b24ff now with few errors 2022-07-31 00:03:22 +09:00
yakomaxa
f7d0ed3988 Added additional modules 2022-07-30 23:17:21 +09:00
David Sehnal
40096ecdfb Merge pull request #502 from giagitom/master 2022-07-27 10:05:35 +02:00
giagitom
43061b80b8 Deliver defaultAttribs to Passes constructor 2022-07-26 19:24:31 +02:00
Alexander Rose
aa3d657d42 3.13.0 2022-07-24 17:11:08 -07:00
Alexander Rose
b0ef385769 changelog 2022-07-24 17:05:47 -07:00
Alexander Rose
dcf24e6292 Merge pull request #496 from JonStargaryen/master
Download CCD from Configurable URL
2022-07-24 17:04:28 -07:00
Alexander Rose
2fdd77737c Merge pull request #499 from molstar/immediate-isolevel
enable immediateUpdate for iso level
2022-07-24 17:02:55 -07:00
Alexander Rose
31c98ef1ba package updates 2022-07-23 13:40:23 -07:00
Alexander Rose
ceeec2c13a enable immediateUpdate for iso level 2022-07-23 13:36:15 -07:00
Alexander Rose
cc82e0cff8 Merge pull request #498 from molstar/varying-group
Varying group
2022-07-23 13:19:10 -07:00
Alexander Rose
29fc6c59e9 support constant group in gpu mc 2022-07-23 13:18:16 -07:00
Alexander Rose
aa931fab7b add dVaryingGroup to avoid flat qualifier more 2022-07-23 13:06:35 -07:00
Alexander Rose
8e2585a5c0 add material annotation support for textures 2022-07-23 11:26:34 -07:00
Alexander Rose
c115047f74 handle principal axes of points in a plane 2022-07-23 11:06:01 -07:00
Alexander Rose
0ac58cb137 changelog 2022-07-23 11:02:01 -07:00
Alexander Rose
492e0977c3 Merge pull request #494 from giagitom/master
only update camera state if manualReset is off
2022-07-23 10:57:36 -07:00
JonStargaryen
e8a09e81f3 fix short arg names 2022-07-21 14:02:57 -07:00
JonStargaryen
4fcc2c6208 download CCD from configurable URL 2022-07-21 09:50:01 -07:00
giagitom
e3523dc5fe only update camera state if manualReset is off 2022-07-20 18:04:03 +02:00
dsehnal
acf6c31a36 3.12.1 2022-07-20 15:43:33 +02:00
dsehnal
339b2e696c PluginBehavior dispose logic 2022-07-20 15:40:30 +02:00
Alexander Rose
6417fd49d6 3.12.0 2022-07-17 16:28:26 -07:00
Alexander Rose
374fd4db65 changelog 2022-07-17 16:23:08 -07:00
Alexander Rose
0b70dd9e38 Merge pull request #487 from molstar/fix/struct_conn-parsing
struct_conn parsing fix
2022-07-17 16:20:45 -07:00
dsehnal
55b19a7922 changelog 2022-07-17 18:01:28 +02:00
dsehnal
beb1b2655e scan all entities when looking for struct_conn etries
- solves PDB loading issue
2022-07-17 17:58:57 +02:00
Alexander Rose
6a81e48c3a package updates 2022-07-16 13:20:19 -07:00
Alexander Rose
f9841dd3df improve CellPack's adjustStyle option
- disable colorMarker
- set component options
- enable marking w/o ghost
2022-07-16 13:02:04 -07:00
Alexander Rose
b563c773c1 avoid using flat qualifier in shaders
- causing slowdown
2022-07-16 13:01:33 -07:00
Alexander Rose
dcda649d9d add colorMarker option to Renderer
- disables the highlight and select marker at a shader level
- faster rendering of large scenes in some cases.
2022-07-16 12:58:49 -07:00
Alexander Rose
d6cfd23ae5 fix missing material annotation for some uniforms
- causing unnecessary uniform updates
2022-07-16 12:31:38 -07:00
Alexander Rose
b69f62c9a4 remove use of isnan in impostor shaders
- not needed and causing slowdown
2022-07-16 12:28:40 -07:00
Alexander Rose
582ee7d623 bind shared textures only once per pass 2022-07-16 12:27:16 -07:00
ludovic autin
9e69f5dcfa Merge branch 'master' of https://github.com/corredD/molstar-proto into forkdev
# Conflicts:
#	CHANGELOG.md
2022-07-05 08:51:25 -07:00
dsehnal
7c4202186d 3.11.0 2022-07-04 16:30:54 +02:00
dsehnal
7c56e4c09d fix unused import 2022-07-04 16:28:24 +02:00
dsehnal
b10b466c61 changelog 2022-07-04 16:25:23 +02:00
David Sehnal
80d1986c61 Merge pull request #474 from molstar/composable-superposition
coordinate system support for superposition
2022-07-04 16:24:45 +02:00
dsehnal
7f9e413604 coordinate system support for superposition 2022-07-04 16:23:51 +02:00
Alexander Rose
4dfbc3830f Merge pull request #466 from molstar/cellpack-tweaks
Cellpack tweaks
2022-07-03 14:18:26 -07:00
Alexander Rose
46cdefa9ee add adjustStyle option to LoadCellPackModel 2022-07-02 12:48:05 -07:00
Alexander Rose
f857ea6095 fix missing rename
- forceInstanceTheme -> instanceGranularity
2022-07-01 06:34:27 -07:00
Alexander Rose
994920f99f fix shader compilation
- support instance texture params for overpaint, substance, transparency
2022-06-29 22:28:10 -07:00
ludovic autin
409ed9ad67 Merge branch 'forkdev' of https://github.com/corredD/molstar-proto into forkdev
# Conflicts:
#	CHANGELOG.md
2022-06-28 08:11:29 -07:00
Alexander Rose
130d4096d5 Merge branch 'master' of https://github.com/molstar/molstar into cellpack-tweaks 2022-06-26 17:50:14 -07:00
Alexander Rose
d5659529d7 3.10.2 2022-06-26 17:34:46 -07:00
Alexander Rose
f6e06ab16e changelog 2022-06-26 17:29:48 -07:00
Alexander Rose
4245eaf1b2 improve use of gl_VertexID when possible 2022-06-26 17:29:21 -07:00
Alexander Rose
c41bd702e2 remove superfluous shader varying 2022-06-26 17:25:14 -07:00
Alexander Rose
3911145f87 Merge branch 'master' of https://github.com/molstar/molstar into cellpack-tweaks 2022-06-26 14:54:15 -07:00
Alexander Rose
350f5c4266 3.10.1 2022-06-26 14:17:31 -07:00
Alexander Rose
ed4056bc8b changelog 2022-06-26 14:04:20 -07:00
Alexander Rose
0d96fa21b7 schema updates 2022-06-26 14:03:09 -07:00
Alexander Rose
0ee8d33d36 package updates 2022-06-26 13:30:44 -07:00
Alexander Rose
64cedec12b fix groupCount updating TextureMesh-based visuals 2022-06-26 12:42:26 -07:00
Alexander Rose
a16eaca42e finalize instanceGranularity 2022-06-26 12:27:02 -07:00
dsehnal
366b3b1b75 3.10.0 2022-06-24 15:59:45 +02:00
dsehnal
33963c085a ShowTrajectoryControls option 2022-06-24 15:56:39 +02:00
Alexander Rose
f3b18ef518 fix & simplify lociApply for instanceGranularity 2022-06-20 22:33:24 -07:00
Alexander Rose
bca1b45fd4 tweak name
- useInstanceGranularity -> instanceGranularity
2022-06-20 22:00:21 -07:00
Alexander Rose
3448d5ef03 Merge branch 'master' of https://github.com/molstar/molstar into cellpack-tweaks 2022-06-20 21:23:32 -07:00
David Sehnal
0f5a6194ff Merge pull request #455 from molstar/support-glycam-names
Support glycam names
2022-06-20 13:37:16 +02:00
David Sehnal
9266faec59 Merge branch 'master' into support-glycam-names 2022-06-20 13:37:10 +02:00
Alexander Rose
94347c6dde cleanup app.ts (#450) 2022-06-19 19:38:43 -07:00
Alexander Rose
7a07701be0 3.9.1 2022-06-19 19:21:25 -07:00
Alexander Rose
42519a4f75 changelog 2022-06-19 19:16:15 -07:00
Alexander Rose
c898c16430 package updates 2022-06-19 19:15:06 -07:00
Alexander Rose
318863bd18 fix missing aromatic bond display
- simplify code to always show when aromatic
2022-06-19 19:05:58 -07:00
Alexander Rose
ce94760d02 fix missing uGroupCount update for visuals 2022-06-19 18:51:16 -07:00
Alexander Rose
99759b5282 add useInstanceGranularity option
- for marker, transparency, clipping, overpaint, substance data
- saves memory
2022-06-19 18:45:31 -07:00
dsehnal
d9d8562ed9 changelog 2022-06-13 19:52:44 +02:00
dsehnal
dee55ea874 support glycam names 2022-06-13 19:52:14 +02:00
dsehnal
da413cc9e6 added missing super.componentWillUnmount 2022-06-10 14:53:26 +02:00
David Sehnal
c72e93a13d Merge pull request #452 from simeonborko/sborko/screenshot-unmount
DownloadScreenshotControls: componentWillUnmount
2022-06-10 14:46:19 +02:00
Simeon Borko
21f910a3ca DownloadScreenshotControls: componentWillUnmount
This should solve the error:

Warning: Can't perform a React state update on an unmounted component.
This is a no-op, but it indicates a memory leak in your application.
To fix, cancel all subscriptions and asynchronous tasks in the componentWillUnmount method.
2022-06-10 10:04:31 +02:00
ludovic autin
06e78e19d0 Merge branch 'forkdev' of https://github.com/corredD/molstar-proto into forkdev 2022-05-31 09:55:03 -07:00
Alexander Rose
2c51edb4c2 changelog 2022-05-30 19:20:41 -07:00
Alexander Rose
da2c893721 Merge branch 'master' of https://github.com/molstar/molstar into cellpack-tweaks 2022-05-30 19:18:49 -07:00
Alexander Rose
e7ce693e50 3.9.0 2022-05-30 11:46:42 -07:00
Alexander Rose
29e8fe7904 fix types 2022-05-30 11:41:40 -07:00
Alexander Rose
baf3a6077e package updates 2022-05-30 11:32:05 -07:00
Alexander Rose
e030e7a32d changelog 2022-05-30 11:29:23 -07:00
Alexander Rose
125566ed75 only call renderBlendedTransparent when needed 2022-05-30 11:27:58 -07:00
Alexander Rose
c51cb67519 Merge pull request #447 from molstar/pick-drawbuffers
use drawbuffers for picking
2022-05-29 23:35:53 -07:00
Alexander Rose
57f086b530 Merge branch 'master' into pick-drawbuffers 2022-05-29 23:32:57 -07:00
Alexander Rose
d1e17785b8 Merge pull request #446 from molstar/webgl-timer
Webgl timing support
2022-05-29 23:32:29 -07:00
Alexander Rose
774328a1d8 Merge branch 'master' into webgl-timer 2022-05-29 23:31:13 -07:00
Alexander Rose
175a0f48fa lint fix 2022-05-29 23:30:36 -07:00
Alexander Rose
60b91ff032 Merge branch 'master' into pick-drawbuffers 2022-05-29 11:11:29 -07:00
David Sehnal
2b003bc5b0 Merge pull request #445 from aliaksei-chareshneu/fix_bad_axis_order
Add check that a data block contains volume data before parsing
2022-05-29 16:00:10 +02:00
David Sehnal
029a2fcab1 Merge branch 'master' into fix_bad_axis_order 2022-05-29 15:59:52 +02:00
Alexander Rose
aa47f7fe4a use instances to create dna/rna curves
- much less memory use (but can't show as single cartoon)
2022-05-28 19:49:56 -07:00
Alexander Rose
a828113d9b use drawbuffers for picking 2022-05-28 13:17:35 -07:00
Alexander Rose
ab4d509eda fix rendering volumes
- when wboit is switched off and postprocessing is enabled
2022-05-28 13:13:35 -07:00
Alexander Rose
1296f32fa8 tweak alpha-orbitals example 2022-05-28 11:54:33 -07:00
Alexander Rose
5aa1ec9876 add timing mode 2022-05-28 11:43:13 -07:00
Alexander Rose
f2cf1ab226 add support for GPU timer queries 2022-05-28 11:20:22 -07:00
Alexander Rose
2d34c2a40b fix Scene.clear not clearing primitives/volumes 2022-05-28 11:07:03 -07:00
Aliaksei
a7181e865c Skipping server data block
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-05-28 08:16:58 +02:00
Aliaksei
0a71b788b3 Apply suggestions from code review
fix bugs and optimizing the code related to iteration over data blocks

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-05-27 18:22:00 +02:00
aliaksei-chareshneu
1ed3d84043 fix to skip block with header SERVER 2022-05-27 14:26:42 +02:00
aliaksei-chareshneu
f472b75d0d iterate over all blocks as even 0th can contain data 2022-05-27 13:53:08 +02:00
aliaksei-chareshneu
072a9d1ccd add name and email to header; add changelog entry 2022-05-27 12:19:51 +02:00
aliaksei-chareshneu
8e26d1be68 fix bad axis ordering bug 2022-05-27 10:34:48 +02:00
Alexander Rose
c5871e9025 3.8.2 2022-05-22 08:36:50 -07:00
Alexander Rose
f26911b358 changelog 2022-05-22 08:31:57 -07:00
Alexander Rose
3a595b80b5 package updates 2022-05-22 08:30:15 -07:00
Alexander Rose
45760ddd41 fix Scene.opacityAverage not handling xray shaded 2022-05-22 08:22:39 -07:00
Alexander Rose
447d068bf1 3.8.1 2022-05-14 11:59:03 -07:00
Alexander Rose
7e1642a4a3 changelog 2022-05-14 11:53:55 -07:00
Alexander Rose
7781267e78 package updates 2022-05-14 11:53:18 -07:00
Alexander Rose
f824fdcfed improve scene marker/opacity average calculation 2022-05-14 11:43:24 -07:00
Alexander Rose
79dd441967 Merge pull request #436 from JonStargaryen/master
Fix Polymer Chain Instance Coloring
2022-05-09 22:41:33 -07:00
Sebastian Bittrich
9dcf9c0785 CHANGELOG 2022-05-09 15:58:22 -07:00
Sebastian Bittrich
83569462c6 fix instance coloring 2022-05-09 15:53:26 -07:00
Alexander Rose
947e169c3a Merge pull request #434 from JonStargaryen/master
proposed fix for headless-gl issues
2022-05-06 22:29:40 -07:00
Sebastian Bittrich
e6b36c52d1 CHANGELOG 2022-05-06 09:11:40 -07:00
Sebastian Bittrich
7fed3b84fa Merge remote-tracking branch 'upstream/master' 2022-05-06 09:08:53 -07:00
Sebastian Bittrich
cbc941f193 simplify array uniform check 2022-05-06 09:08:22 -07:00
Alexander Rose
a7ef0fb85f add interesting pdb entry 2022-05-05 22:41:16 -07:00
Alexander Rose
d10c36eaf5 fix issues with marking camera/handle helper 2022-05-05 22:40:52 -07:00
Sebastian Bittrich
e4c3a66753 proposed fix for headless-gl issues 2022-05-04 11:50:42 -07:00
Alexander Rose
f58f2cdc90 3.8.0 2022-04-30 16:11:07 -07:00
Alexander Rose
8f2676e91e schema updates 2022-04-30 16:05:30 -07:00
Alexander Rose
89d397898e changelog 2022-04-30 15:24:26 -07:00
Alexander Rose
2dc32be9ee Merge pull request #427 from molstar/transparent-object-outline
Transparent object outline
2022-04-30 15:08:46 -07:00
Alexander Rose
769220bd82 Merge pull request #421 from molstar/color-theme-typing
better color theme typing
2022-04-30 15:06:06 -07:00
Alexander Rose
c75aa5dd52 improve transparency & outlines
- proper per-group transparency with wboit off
- fixed outlines with transparent backgound
2022-04-30 12:53:14 -07:00
Alexander Rose
88f1cfd8c4 fix ignoreLight for direct-volume with webgl1 2022-04-30 09:24:39 -07:00
Alexander Rose
108279c1aa add clearDepth & blendColor to WebGLState 2022-04-30 08:42:01 -07:00
Alexander Rose
8150490aac Merge branch 'master' of https://github.com/molstar/molstar into transparent-object-outline 2022-04-30 08:39:16 -07:00
Alexander Rose
9497aa6362 package updates 2022-04-30 08:38:07 -07:00
Alexander Rose
3769da48a1 handle building GridLookup3D with zero cell size 2022-04-29 20:18:40 -07:00
Alexander Rose
3c21fcd53a fix FormatRegistry.isApplicable
- was returning true for unregistered formats
2022-04-29 20:16:09 -07:00
Alexander Rose
102ef2795d handle outlines for per-group transparency
- fix allowTransparentBackfaces for per-group transparency
2022-04-23 23:02:11 -07:00
Alexander Rose
0befa253c2 add WebGLState.depthFunc 2022-04-23 20:07:41 -07:00
Alexander Rose
87189cee58 support outlines for transparent objects
- cleanup of renderer and draw pass
2022-04-23 15:19:01 -07:00
Alexander Rose
3284f13fc6 fix spec of emptyDepthTexture in Renderer 2022-04-23 15:17:20 -07:00
Alexander Rose
70d219b120 improve Renderer.renderPick typing 2022-04-23 15:13:38 -07:00
Alexander Rose
a5ed3a08ea add Scene.getOpacityAverage 2022-04-23 15:12:16 -07:00
Alexander Rose
3665e7e999 expose RenderTarget.depthRenderbuffer 2022-04-23 15:10:40 -07:00
Alexander Rose
9b583b23ae add Renderbuffer.detachFramebuffer 2022-04-23 15:10:16 -07:00
Alexander Rose
d602415e98 check if WEBGL_depth_texture is supported 2022-04-23 15:09:44 -07:00
Alexander Rose
2c49a423e2 type assertion 2022-04-21 19:47:13 -07:00
Alexander Rose
8a266e70c8 fix handling of struct_conf mmCIF field (#425) 2022-04-21 19:46:50 -07:00
Alexander Rose
0df3bcd65d document supported file formats 2022-04-19 17:43:33 -07:00
dsehnal
f5ecf5648e 3.7.0 2022-04-13 20:04:01 +02:00
dsehnal
821f82fc3f changelog 2022-04-13 20:01:04 +02:00
David Sehnal
92305fe628 Merge pull request #420 from molstar/transparentBackfaces
improve transparentBackfaces handling
2022-04-13 19:57:29 +02:00
David Sehnal
17fe57b8a5 Merge pull request #423 from jpattle/option-to-disable-drag-overlay
Added an option to disable the drag overlay
2022-04-13 16:31:21 +02:00
Jason Pattle
47433a51d3 Added an option to the components spec to allow disabling of the drag-and-drop overlap for Molstar that loads files into the viewer. By default the drag overlay is enabled, just as it was before 2022-04-13 15:00:03 +01:00
Alexander Rose
e090827ced Merge branch 'master' of https://github.com/molstar/molstar into transparentBackfaces 2022-04-10 13:20:22 -07:00
Alexander Rose
856e6a8b74 use ColorTypeLocation as default
- for backwards compatibility
- most used
2022-04-09 19:27:06 -07:00
Alexander Rose
a813b4d40e Merge branch 'master' of https://github.com/molstar/molstar into color-theme-typing 2022-04-09 16:53:17 -07:00
dsehnal
98afc27442 fix react typing 2022-04-09 21:24:14 +02:00
Alexander Rose
9d4f28a395 fix type deps 2022-04-09 11:36:17 -07:00
Alexander Rose
50266d9a56 package updates 2022-04-09 11:20:28 -07:00
Alexander Rose
602a532cf2 better color theme typing 2022-04-09 10:38:03 -07:00
Alexander Rose
b23d610c94 improve transparentBackfaces handling
- off: don't show (default)
- on: show with transparency
- opaque: show fully opaque
2022-04-09 10:17:41 -07:00
Alexander Rose
119c43d527 fix xrayShaded for texture-mesh geometries 2022-04-09 10:04:06 -07:00
Alexander Rose
124feeb790 color theme tweaks
- add optional grid property
- handle dColorType_direct for non direct-volume shaders
2022-04-09 09:57:31 -07:00
dsehnal
2c0e7e84da 3.6.2 2022-04-05 17:59:48 +02:00
dsehnal
0d1e105343 changelog 2022-04-05 17:57:14 +02:00
dsehnal
f040c89ab3 React 18 friendly useBehavior hook 2022-04-05 17:51:13 +02:00
David Sehnal
5e9d8298ef Merge pull request #415 from JonStargaryen/master
ModelServer Ligand Export: Fix Alternate Locations & Mismatching Atoms
2022-04-05 17:49:16 +02:00
Sebastian Bittrich
7766ca2793 CHANGELOG 2022-04-04 11:36:39 -07:00
Sebastian Bittrich
fb2f22f120 Merge remote-tracking branch 'upstream/master' 2022-04-04 11:33:01 -07:00
Sebastian Bittrich
146fed3504 CHANGELOG 2022-04-04 11:32:51 -07:00
Sebastian Bittrich
0b7a6e3375 cleanup 2022-04-04 10:55:44 -07:00
Sebastian Bittrich
f1fbdeaca0 handle missing atoms (ignore hydrogen, fail for heavy) 2022-04-04 10:49:40 -07:00
Sebastian Bittrich
ee7e37f6bc handle deuterated part 2 2022-04-04 09:45:42 -07:00
Sebastian Bittrich
861f665ab3 handle deuterated 2022-04-04 09:17:39 -07:00
dsehnal
456de23ad4 remove console.log 2022-04-03 14:45:41 +02:00
dsehnal
6d3578c17e fix alpha orbitals example 2022-04-03 14:08:31 +02:00
dsehnal
57da7267e2 3.6.1 2022-04-03 13:50:46 +02:00
dsehnal
578b764406 fix react 18 ui: use hooks for overlay components 2022-04-03 13:48:05 +02:00
dsehnal
f65a38a085 TransformControlBase fix 2022-04-03 13:00:09 +02:00
dsehnal
d187757bbc 3.6.0 2022-04-03 11:19:12 +02:00
dsehnal
df83b24cf4 changelog 2022-04-03 11:16:16 +02:00
dsehnal
8e31ce0f5b react 18 support 2022-04-03 11:15:47 +02:00
David Sehnal
4f69eb7963 Merge pull request #414 from molstar/lowercase-str-column
lowercase column schema
2022-04-03 10:53:08 +02:00
Alexander Rose
4b9009216b mmcif schema: use lowercase instead of uppercase 2022-04-02 22:49:57 -07:00
Alexander Rose
895076c837 Merge branch 'master' of https://github.com/molstar/molstar into lowercase-str-column 2022-04-02 16:31:15 -07:00
Alexander Rose
6e398ee64a gh action 2022-04-02 16:13:24 -07:00
Alexander Rose
c2177272b5 gh action 2022-04-02 16:07:32 -07:00
Alexander Rose
4877de5839 re-add gl support to gh action 2022-04-02 15:55:22 -07:00
Alexander Rose
3cb9d10126 fix shader tests & cleanup shader code 2022-04-02 15:52:39 -07:00
Alexander Rose
23c53cd9fb fix disable-wboit Viewer GET param 2022-04-02 15:42:33 -07:00
Alexander Rose
3471743a63 changelog 2022-04-02 15:26:25 -07:00
Alexander Rose
1b0b1809ef handle case-insensitve mmcif fields
- support upper/lower case transforms
- handle case transform for CifField to Column
2022-04-02 15:24:01 -07:00
dsehnal
0833cffead fix undefined value handling and update alised type 2022-04-02 21:48:15 +02:00
Alexander Rose
a0a8ae88b7 Merge branch 'master' of https://github.com/molstar/molstar into lowercase-str-column 2022-04-02 12:27:40 -07:00
David Sehnal
e415cbeca4 Merge pull request #413 from molstar/allowTransparentBackfaces
add allowTransparentBackfaces parameter
2022-04-02 21:00:43 +02:00
dsehnal
4c15c93381 lowercase column schema 2022-04-02 20:54:35 +02:00
Alexander Rose
bd19822112 add allowTransparentBackfaces parameter
- for mesh, spheres, cylinders, texture-mesh geometries
2022-04-01 19:18:24 -07:00
Sebastian Bittrich
b87beb4a6e better msg for UNL 2022-04-01 16:58:32 -07:00
Sebastian Bittrich
62a58facb2 better error msg for unknown components 2022-04-01 15:51:00 -07:00
Sebastian Bittrich
5fa8178df7 fix handling of alternate locations in ligand-encoder#_getAtoms 2022-04-01 11:47:59 -07:00
David Sehnal
d6043e7d1f Merge pull request #411 from JonStargaryen/master
fix volume streaming for entries with multiple contour lists
2022-04-01 13:35:57 +02:00
Sebastian Bittrich
8e432dfbb4 CHANGELOG 2022-03-30 09:27:40 -07:00
Sebastian Bittrich
324ab3744b fix volume streaming for entries with multiple contour lists 2022-03-30 09:19:36 -07:00
Alexander Rose
33ee4d0418 Merge pull request #409 from JonStargaryen/master
Fix unit mapping in bondedAtomicPairs MolScript query
2022-03-29 18:11:59 -07:00
Alexander Rose
cbb104ccba Merge branch 'master' into master 2022-03-29 18:11:37 -07:00
Alexander Rose
0bda5461ae Merge pull request #403 from molstar/pdb-conect
improve pdb parsing
2022-03-29 18:01:56 -07:00
Sebastian Bittrich
4096a03de1 CHANGELOG 2022-03-29 11:40:46 -07:00
Sebastian Bittrich
fbee5f83df fix mapping issues in bondedAtomicPairs 2022-03-29 11:34:53 -07:00
Alexander Rose
84a1b19850 improve Model.hasSecondaryStructure
- check ModelSecondaryStructure.Provider.isApplicable
2022-03-28 18:51:54 -07:00
Alexander Rose
1df5bd6d03 make use of PDB TER record 2022-03-28 18:47:00 -07:00
Alexander Rose
8bd4221a85 improve pdb parsing
- handle non unique atom and chain names
- fixes #156
2022-03-26 11:26:20 -07:00
Alexander Rose
4d97ccdfb3 improve bonds assignment of coarse grained models
- check for IndexPairBonds and exhaustive StructConn
2022-03-26 11:22:04 -07:00
Alexander Rose
ca5e57ddbf fix aromatic rings assignment 2022-03-26 11:17:46 -07:00
Alexander Rose
ed6511799b check model and coordinates element count 2022-03-26 11:15:19 -07:00
Alexander Rose
9b1223ec15 improve webgl error/type handling 2022-03-26 11:12:28 -07:00
Alexander Rose
97210ee67a avoid calculating actionItems for isDisabled check 2022-03-26 11:11:22 -07:00
David Sehnal
308d1003ad Merge pull request #401 from molstar/dependabot/npm_and_yarn/minimist-1.2.6
Bump minimist from 1.2.5 to 1.2.6
2022-03-25 14:07:50 +01:00
dependabot[bot]
ce9e193958 Bump minimist from 1.2.5 to 1.2.6
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-25 12:50:11 +00:00
dsehnal
2a83afa8c1 3.5.0 2022-03-25 13:49:33 +01:00
dsehnal
8891fa328b cif2bcif BCIF => CIF conversion support 2022-03-25 13:45:00 +01:00
David Sehnal
a23c06c456 Merge pull request #399 from MadCatX/dnatco-changeable-colors
Make Confal pyramids colors changeable
2022-03-22 13:25:32 +01:00
Michal Malý
34e87121e1 Make Confal pyramids colors changeable 2022-03-21 09:07:49 +01:00
Alexander Rose
6e5c20f442 improve surface bounding-sphere
- use exact max radius to expand structure/unit sphere
2022-03-19 12:21:55 -07:00
Alexander Rose
8ac3bec451 improve color-smoothing
- use padded box
2022-03-19 12:20:12 -07:00
Alexander Rose
5128d0f405 improve Sphere3D.expand & Box3D.fromSphere3D
- ensure extrema are within radius
- avoid degenerate box for low number of points
2022-03-19 12:19:39 -07:00
Alexander Rose
6ae2121391 guard against zero window.devicePixelRatio 2022-03-19 11:43:41 -07:00
David Sehnal
749e0c5a47 Merge pull request #396 from MadCatX/dnatco-off-by-one
DNATCO extension: Fix off-by-one error in element lookup
2022-03-17 09:21:11 +01:00
Michal Malý
7b55ef85e1 DNATCO extension: Fix missing Confal pyramids in some structures 2022-03-17 07:47:47 +01:00
Alexander Rose
23ec35d1f9 3.4.0 2022-03-13 13:12:32 -07:00
Alexander Rose
ff089c2b9f changelog 2022-03-13 12:50:44 -07:00
Alexander Rose
1ab088718a package updates 2022-03-13 12:49:03 -07:00
Alexander Rose
0cb2e5857a Merge pull request #393 from molstar/zenodo-import
Zenodo import
2022-03-13 12:19:04 -07:00
Alexander Rose
7c5ae5d7ee tweak guessElementSymbolString 2022-03-13 12:16:12 -07:00
Alexander Rose
6e2665d98d Merge branch 'master' of https://github.com/molstar/molstar into zenodo-import 2022-03-12 18:03:45 -08:00
Alexander Rose
b3b4692237 add top format support 2022-03-12 17:46:29 -08:00
Alexander Rose
55ff1d4999 add nctraj format support 2022-03-12 14:17:58 -08:00
Alexander Rose
511c839237 add prmtop format support 2022-03-12 13:48:10 -08:00
Alexander Rose
384cd6e5d9 add trr format support 2022-03-12 13:02:50 -08:00
Alexander Rose
6fd9dcc72e split structure formats into topology & coordinates 2022-03-12 11:51:03 -08:00
Alexander Rose
12ca06fe91 fix handling of empty symmetry cell data 2022-03-12 11:44:27 -08:00
Alexander Rose
652f6c651b fix wrong element assignment 2022-03-12 10:58:33 -08:00
Alexander Rose
7dd808a772 add custom import controls 2022-03-12 10:52:43 -08:00
Alexander Rose
945e55f8a7 add formated file size 2022-03-07 22:06:22 -08:00
Alexander Rose
866a30abe5 cleanup getFileInfo 2022-03-07 22:05:11 -08:00
Alexander Rose
f0e33e1e4e fix legend of hydrophobicity color theme 2022-03-07 21:44:57 -08:00
Alexander Rose
8723ca38b4 improve saccharide detection 2022-03-07 21:31:33 -08:00
Alexander Rose
efffca0026 zenode import fixes 2022-03-06 21:57:42 -08:00
Alexander Rose
6c5eb3035f remove default record id 2022-03-06 17:55:52 -08:00
Alexander Rose
0bf385f2ca add zip file support to zenodo extension 2022-03-06 17:37:39 -08:00
Alexander Rose
9d5f51f513 improve handling of compressed files
- fix loading of some compressed files within sessions
- ignore some hidden MACOSX files
2022-03-06 17:32:56 -08:00
Alexander Rose
a1448131d8 add Zenodo import extension 2022-03-06 11:12:21 -08:00
Alexander Rose
664cacc7ac add LoadTrajectory action 2022-03-06 11:11:16 -08:00
Alexander Rose
1aec37dd05 fix 2022-03-06 11:09:51 -08:00
Alexander Rose
3ff2c0840e Merge pull request #392 from molstar/assert-unreachable
make use of assertUnreachable
2022-03-06 11:06:04 -08:00
Alexander Rose
5ca3c3ac52 Update src/mol-script/language/parser.ts 2022-03-06 11:04:58 -08:00
Alexander Rose
714ee50965 Update src/mol-script/language/parser.ts
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-03-06 11:03:33 -08:00
Alexander Rose
ae1df3c5aa Update src/mol-script/language/parser.ts
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-03-06 11:03:28 -08:00
Alexander Rose
28afb39550 make use of assertUnreachable 2022-03-05 10:18:40 -08:00
Alexander Rose
3466a8a024 Merge pull request #389 from molstar/cif-check-present
fix handling of mmcif with empty label_asym_id
2022-03-05 09:20:19 -08:00
Alexander Rose
90db3321f5 changelog
Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
2022-03-05 09:20:04 -08:00
Alexander Rose
bf4e5ed7c2 normalize mmcif data 2022-03-04 22:47:14 -08:00
Alexander Rose
d3b2c20c26 normalize atom_site early 2022-03-03 18:31:54 -08:00
Alexander Rose
c3afabb4b1 spelling 2022-03-02 19:50:30 -08:00
Alexander Rose
18cc9790d1 fix handling of mmcif with empty label_asym_id 2022-03-02 19:17:31 -08:00
Alexander Rose
d5ed3aa674 3.3.1 2022-02-27 18:45:45 -08:00
Alexander Rose
cfb9c9acfe changelog 2022-02-27 18:40:48 -08:00
Alexander Rose
67feef0b1d add option to ignore ions for inter-unit bonds 2022-02-27 18:40:27 -08:00
Alexander Rose
e0192ab5aa fix issue with unit boundary reuse
- do at visual level instead
2022-02-27 18:03:41 -08:00
Alexander Rose
eae7c11c55 3.3.0 2022-02-27 13:03:01 -08:00
Alexander Rose
b8251e1ade changelog 2022-02-27 12:57:51 -08:00
Alexander Rose
2ff2b9f348 schema updates 2022-02-27 12:50:48 -08:00
Alexander Rose
164e3f3343 package updates 2022-02-27 12:47:45 -08:00
Alexander Rose
4901a1bd87 rename occlusion scaleFactor to resolutionScale 2022-02-27 12:16:37 -08:00
Alexander Rose
cd194cca65 Merge pull request #385 from molstar/traj-anim
Coordinate trajectory related improvements
2022-02-27 12:04:28 -08:00
Alexander Rose
1748efbc18 Merge branch 'master' of https://github.com/molstar/molstar into traj-anim 2022-02-27 12:03:54 -08:00
Alexander Rose
4d60b40403 fix interUnitBonds parent check 2022-02-27 12:02:36 -08:00
Alexander Rose
6e5a41879f Merge pull request #386 from molstar/improve-ao
Improve AO performance
2022-02-27 11:58:50 -08:00
Alexander Rose
c5f9eb54da set default occlusion scaleFactor to 1 2022-02-26 23:51:21 -08:00
Alexander Rose
aebbfeb061 add support for lower resolution AO
- downsample depth for AO
- add scaleFactor param
- full res for image/video
2022-02-26 22:23:52 -08:00
Alexander Rose
a0a5a6b578 add encoder spec
- mostly as example
2022-02-26 17:43:37 -08:00
Alexander Rose
6bdafb85d7 Check if marking passes are needed
- add Scene.getMarkerAverage
2022-02-26 13:30:05 -08:00
Alexander Rose
0dd7debf5d reuse occlusion in multi-sample pass 2022-02-26 13:02:53 -08:00
Alexander Rose
962b9ee7af Merge pull request #378 from molstar/ar-bonds
fix visuals for aromatic/delocalized bonds
2022-02-26 11:34:42 -08:00
Alexander Rose
15bcc5df88 Merge branch 'master' into ar-bonds 2022-02-26 11:26:29 -08:00
Alexander Rose
8495d834c8 add getTripletIndices & triplets to UnitResonance 2022-02-26 11:25:35 -08:00
Alexander Rose
7282399709 fix/improve canRemap handling in IntraUnitBonds 2022-02-26 10:56:32 -08:00
Alexander Rose
780bdd6e7e don't compute InterUnitBonds when parent ones empty 2022-02-26 10:53:54 -08:00
Alexander Rose
ad08e7c67f reuse unit boundary if it has not changed too much 2022-02-26 10:52:26 -08:00
Alexander Rose
ff089964ca improve line visuals in polymerAndLigand preset 2022-02-26 10:50:02 -08:00
Alexander Rose
990191529a reuse Model.CoarseGrained for coordinate trajectories 2022-02-26 10:48:05 -08:00
Alexander Rose
ce1bec12b4 fix mononucleotides detected as polymer components 2022-02-26 10:46:51 -08:00
Alexander Rose
703ea9af53 change line geometry default scaleFactor to 2
- 3 is too big after fixing line rendering
2022-02-26 10:45:51 -08:00
David Sehnal
df0227ae1e Merge pull request #383 from molstar/batch-highlights
Resolve marking in main render loop
2022-02-24 07:46:44 +01:00
dsehnal
486d12b6ac Fix multisample pass "forceOn" 2022-02-24 07:20:03 +01:00
dsehnal
9c18375ab4 typo 2022-02-23 23:34:09 +01:00
dsehnal
e1708aed68 dispose mark buffer 2022-02-23 19:09:40 +01:00
dsehnal
a42d778b84 changelog 2022-02-23 12:04:38 +01:00
dsehnal
7692b59c7c resolve marking in main render loop insread of eagerly 2022-02-23 11:59:29 +01:00
dsehnal
82de9b36b3 addRing check tweak 2022-02-22 16:02:11 +01:00
dsehnal
49b3c8f65f ring computation algorithm fixes 2022-02-22 13:16:32 +01:00
Alexander Rose
90ad32d936 add ring example PDB IDs 2022-02-21 13:48:43 -08:00
David Sehnal
2509e91f1a Merge pull request #381 from russellp17/disable-ts-config-for-sourceMappingURL
Disable ts config that leads to sourceMappingURL comment
2022-02-21 15:20:00 +01:00
David Sehnal
80dc2219e4 Merge pull request #380 from russellp17/allow-react-16-in-peer-dependency
Allow React ^16.14.0 as peer dependency
2022-02-21 15:10:33 +01:00
Russell Parker
931cb0fa7d Disable ts config that leads to sourceMappingURL comment in transpilation 2022-02-21 08:24:09 -05:00
Russell Parker
4383f2ea90 Allow React ^16.14.0 as peer dependency 2022-02-21 08:20:55 -05:00
dsehnal
add79dc242 ring computation algorithm fix 2022-02-21 14:15:13 +01:00
Alexander Rose
b6e142f04c move delocalizedTriplets code to unit.resonance 2022-02-20 16:28:42 -08:00
Alexander Rose
105f6c3041 fix visuals for aromatic/delocalized bonds 2022-02-20 12:50:44 -08:00
Alexander Rose
4babbb65c1 fix spec 2022-02-19 17:22:25 -08:00
Alexander Rose
878159f7ed fix texture warnings (#319)
- bind real texture to tDepth in renderer
- ensure textures are not empty; init as 1x1(x1)
2022-02-19 16:59:03 -08:00
Alexander Rose
c320386019 changelog 2022-02-19 14:23:37 -08:00
Alexander Rose
1e7a0159f0 Merge pull request #377 from JonStargaryen/master
parse contour-level from emdb v3 header files
2022-02-19 14:20:48 -08:00
JonStargaryen
bbf4f1d1d3 break early 2022-02-19 11:02:30 -08:00
Alexander Rose
8cd1c69c76 css tweaks, fixes #376 2022-02-19 10:46:06 -08:00
JonStargaryen
2372a878ac parse contour-level from emdb v3 header files 2022-02-19 09:12:20 -08:00
ludovic autin
9a1d746170 Merge branch 'master' of https://github.com/molstar/molstar into forkdev 2021-11-17 10:06:49 -08:00
ludovic autin
ef87ce3507 Merge branch 'master' of https://github.com/molstar/molstar into forkdev 2021-11-10 14:35:24 -08:00
ludovic autin
2b9053eac4 Merge branch 'master' of https://github.com/molstar/molstar into forkdev 2021-11-01 10:21:08 -07:00
ludovic autin
116ef719be Merge branch 'master' of https://github.com/molstar/molstar into forkdev 2021-09-20 09:17:09 -07:00
1314 changed files with 240525 additions and 52958 deletions

View File

@@ -1,3 +0,0 @@
node_modules/*
build/*
lib/*

View File

@@ -1,120 +0,0 @@
{
"env": {
"browser": true,
"node": true
},
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module",
"ecmaFeatures": {
"impliedStrict": true
}
},
"rules": {
"indent": "off",
"arrow-parens": [
"off",
"as-needed"
],
"brace-style": "off",
"comma-spacing": "off",
"space-infix-ops": "error",
"comma-dangle": "off",
"eqeqeq": [
"error",
"smart"
],
"import/order": "off",
"no-eval": "warn",
"no-new-wrappers": "warn",
"no-trailing-spaces": "error",
"no-unsafe-finally": "warn",
"no-var": "error",
"spaced-comment": "error",
"semi": "warn",
"no-restricted-syntax": [
"error",
{
"selector": "ExportDefaultDeclaration",
"message": "Default exports are not allowed"
}
],
"no-throw-literal": "error",
"key-spacing": "error",
"object-curly-spacing": ["error", "always"],
"array-bracket-spacing": "error",
"space-in-parens": "error",
"computed-property-spacing": "error",
"prefer-const": ["error", {
"destructuring": "all",
"ignoreReadBeforeAssign": false
}],
"space-before-function-paren": "off",
"func-call-spacing": "off",
"no-multi-spaces": "error",
"block-spacing": "error",
"keyword-spacing": "off",
"space-before-blocks": "error",
"semi-spacing": "error"
},
"overrides": [
{
"files": ["**/*.ts", "**/*.tsx"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": ["tsconfig.json", "tsconfig.commonjs.json"],
"sourceType": "module"
},
"plugins": [
"@typescript-eslint"
],
"rules": {
"@typescript-eslint/ban-types": "off",
"@typescript-eslint/class-name-casing": "off",
"@typescript-eslint/indent": [
"error",
4
],
"@typescript-eslint/member-delimiter-style": [
"off",
{
"multiline": {
"delimiter": "none",
"requireLast": true
},
"singleline": {
"delimiter": "semi",
"requireLast": false
}
}
],
"@typescript-eslint/prefer-namespace-keyword": "warn",
"@typescript-eslint/quotes": [
"error",
"single",
{
"avoidEscape": true,
"allowTemplateLiterals": true
}
],
"@typescript-eslint/semi": [
"off",
null
],
"@typescript-eslint/type-annotation-spacing": "error",
"@typescript-eslint/brace-style": [
"error",
"1tbs", { "allowSingleLine": true }
],
"@typescript-eslint/comma-spacing": "error",
"@typescript-eslint/space-before-function-paren": ["error", {
"anonymous": "always",
"named": "never",
"asyncArrow": "always"
}],
"@typescript-eslint/func-call-spacing": ["error"],
"@typescript-eslint/keyword-spacing": ["error"]
}
}
]
}

14
.git-blame-ignore-revs Normal file
View File

@@ -0,0 +1,14 @@
# added semicolons to linting rules
fb0634a0f4aab3764b7e6368e38d8dea7615e591
# new linting rules (no default exports, no named tuples)
6c5224f33e9de20fe9967a82536c269bacf29738
# lint: add space-in-parens rule
1d21787e7ea1971817813c008351541e4640c261
# lint: add object-curly-spacing rule
b31302ba3ad4ab7f98aedd500b762be642374ff0
# fix eslint warnings
3b1513adc0048dc4879f1d70874b3e56aaffd10e

11
.github/pull_request_template.md vendored Normal file
View File

@@ -0,0 +1,11 @@
<!-- Thank you for contributing to Mol* -->
# Description
## Actions
- [ ] Added description of changes to the `[Unreleased]` section of `CHANGELOG.md`
- [ ] Updated headers of modified files
- [ ] Added my name to `package.json`'s `contributors`
- [ ] (Optional but encouraged) Improved documentation in `docs`

62
.github/workflows/docs.yml vendored Normal file
View File

@@ -0,0 +1,62 @@
name: Build & Deploy Docs
on:
push:
branches: master
paths:
- docs/**
- ".github/workflows/docs.yml"
pull_request:
branches: master
paths:
- docs/**
- ".github/workflows/docs.yml"
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 👨🏼‍💻 checkout
uses: actions/checkout@v4
- name: 🐍 python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: ⛓️ dependencies
run: |
pip install mkdocs-material
- name: 🔧 build site
run: |
cd docs
mkdocs build
deploy:
runs-on: ubuntu-latest
needs: build
if: github.ref == 'refs/heads/master'
steps:
- name: 👨🏼‍💻 checkout
uses: actions/checkout@v4
- name: 🐍 python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: ⛓️ dependencies
run: |
pip install mkdocs-material
- name: 🔧 build site
run: |
cd docs
mkdocs build
- name: 🚢 deploy docs
uses: peaceiris/actions-gh-pages@v4
with:
deploy_key: ${{ secrets.DOCS_DEPLOY_KEY }}
external_repository: molstar/docs
publish_branch: gh-pages
publish_dir: ./docs/site

View File

@@ -1,6 +1,10 @@
name: Build
on:
push:
branches: master
pull_request:
branches: master
jobs:
build:
@@ -9,12 +13,12 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 17
node-version: 20
- run: npm ci
- run: sudo apt-get install xvfb
- name: Lint
run: npm run lint
- name: Test
run: xvfb-run --auto-servernum npm run jest
run: npm install --no-save "gl@^6.0.2" && xvfb-run --auto-servernum npm run jest
- name: Build
run: npm run build

8
.gitignore vendored
View File

@@ -1,5 +1,7 @@
build/
deploy/
lib/
docs/site/
node_modules/
debug.log
@@ -10,4 +12,8 @@ tsconfig.commonjs.tsbuildinfo
*.sublime-workspace
.idea
.DS_Store
.DS_Store
tmp/
dev.pem
dev-key.pem

View File

@@ -1,18 +0,0 @@
language: node_js
os: linux
sudo: required
dist: trusty
before_install:
- sudo apt-get install -y mesa-utils
- sudo apt-get install -y xvfb
- sudo apt-get install -y libgl1-mesa-dri
- sudo apt-get install -y libglapi-mesa
- sudo apt-get install -y libosmesa6
- sudo apt-get install -y gcc-4.9
- sudo apt-get install -y libstdc++6
- sudo apt-get install -y libxi-dev
node_js:
- "12"
- "10"
before_script:
- export DISPLAY=:99.0; sh -e /etc/init.d/xvfb start

View File

@@ -6,7 +6,6 @@
"recommendations": [
"dbaeumer.vscode-eslint",
"firsttris.vscode-jest-runner",
"msjsdiag.debugger-for-chrome",
"slevesque.shader",
"stpn.vscode-graphql",
"wayou.vscode-todo-highlight"

View File

@@ -6,9 +6,4 @@
"*.vert.ts": "glsl",
"*.gql.ts": "graphql"
},
"eslint.options": {
"overrideConfig": {
"ignorePatterns": ["webpack.config.js", "scripts/*"],
},
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
[![License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](./LICENSE)
[![npm version](https://badge.fury.io/js/molstar.svg)](https://www.npmjs.com/package/molstar)
[![Build Status](https://travis-ci.org/molstar/molstar.svg?branch=master)](https://travis-ci.org/molstar/molstar)
[![Build](https://github.com/molstar/molstar/actions/workflows/node.yml/badge.svg)](https://github.com/molstar/molstar/actions/workflows/node.yml)
[![Gitter](https://badges.gitter.im/molstar/Lobby.svg)](https://gitter.im/molstar/Lobby)
# Mol*
@@ -84,7 +84,16 @@ Wipes the `build` and `lib` directories and `.tsbuildinfo` files.
Runs the cleanup script prior to building the project, forcing a full rebuild of the project.
Use these commands to resolve occassional build failures which may arise after some dependency updates. Once done, `npm run build` should work again. Note that full rebuilds take more time to complete.
Use these commands to resolve occasional build failures which may arise after some dependency updates. Once done, `npm run build` should work again. Note that full rebuilds take more time to complete.
### Develop with `esbuild`
Experimental support for faster builds with `esbuild`
- `npm run dev:all` - watch mode for all apps and examples
- `npm run dev:viewer` - watch mode for viewer
- `npm run dev:apps` - watch mode for all apps
- `npm run dev:examples` - watch mode for all examples
- `npm run dev -- -a <app name 1> <app name 2> -e <example name 1> ...` - watch mode for specified apps/examples. `-a`/`-e` with without any names will build everything.
### Build for production:
NODE_ENV=production npm run build
@@ -103,7 +112,6 @@ From the root of the project:
and navigate to `build/viewer`
### Code generation
**CIF schemas**
@@ -118,17 +126,16 @@ and navigate to `build/viewer`
**Ion names**
node --max-old-space-size=4096 lib/commonjs/cli/chem-comp-dict/create-ions.js src/mol-model/structure/model/types/ions.ts
node --max-old-space-size=8192 lib/commonjs/cli/chem-comp-dict/create-ions.js src/mol-model/structure/model/types/ions.ts
**Saccharide names**
**GraphQL schemas**
node node_modules//@graphql-codegen/cli/bin -c src/extensions/rcsb/graphql/codegen.yml
node --max-old-space-size=8192 lib/commonjs/cli/chem-comp-dict/create-saccharides.js src/mol-model/structure/model/types/saccharides.ts
### Other scripts
**Create chem comp bond table**
node --max-old-space-size=4096 lib/commonjs/cli/chem-comp-dict/create-table.js build/data/ccb.bcif -b
node --max-old-space-size=8192 lib/commonjs/cli/chem-comp-dict/create-table.js build/data/ccb.bcif -b
**Test model server**
@@ -138,7 +145,7 @@ and navigate to `build/viewer`
export NODE_PATH="lib"; node build/state-docs
**Convert any CIF to BinaryCIF**
**Convert any CIF to BinaryCIF (or vice versa)**
node lib/commonjs/servers/model/preprocess -i file.cif -ob file.bcif
@@ -148,6 +155,11 @@ Or
node lib/commonjs/cli/cif2bcif
E.g.
node lib/commonjs/cli/cif2bcif src.cif out.bcif.gz
node lib/commonjs/cli/cif2bcif src.bcif.gz out.cif
## Development
### Installation
@@ -159,13 +171,12 @@ If node complains about a missing acorn peer dependency, run the following comma
### Editor
To get syntax highlighting for shader and graphql files add the following to Visual Code's settings files and make sure relevant extensions are installed in the editor.
To get syntax highlighting for shader files add the following to Visual Code's settings files and make sure relevant extensions are installed in the editor.
"files.associations": {
"*.glsl.ts": "glsl",
"*.frag.ts": "glsl",
"*.vert.ts": "glsl",
"*.gql.ts": "graphql"
"*.vert.ts": "glsl"
},
## Publish
@@ -179,9 +190,14 @@ To get syntax highlighting for shader and graphql files add the following to Vis
npm publish
## Deploy
To prepare apps and demos for https://molstar.org deploy, run:
npm run test
npm run build
node ./scripts/deploy.js # currently updates the viewer on molstar.org/viewer
npm run deploy:local
To commit these changes remotely to the `molstar/molstar.github.io` repo:
npm run deploy:remote
## Contributing
Just open an issue or make a pull request. All contributions are welcome.

1
breaking-v6-changes.md Normal file
View File

@@ -0,0 +1 @@
- Remove `checkeredCanvasBackground` from `PluginContext` and `PluginContainer`

View File

@@ -14,6 +14,7 @@ chemical.melting_point
chemical_formula.moiety
chemical_formula.sum
chemical_formula.iupac
chemical_formula.weight
atom_type.symbol
@@ -25,6 +26,8 @@ atom_type_scat.source
space_group.crystal_system
space_group.name_h-m_full
space_group.name_h-m_alt
space_group.name_hall
space_group.it_number
space_group_symop.operation_xyz
1 audit.block_doi
14 chemical_formula.weight chemical_formula.iupac
15 atom_type.symbol chemical_formula.weight
16 atom_type.description atom_type.symbol
17 atom_type.description
18 atom_type_scat.dispersion_real
19 atom_type_scat.dispersion_imag
20 atom_type_scat.source
26 cell.length_b space_group_symop.operation_xyz
27 cell.length_c cell.length_a
28 cell.angle_alpha cell.length_b
29 cell.length_c
30 cell.angle_alpha
31 cell.angle_beta
32 cell.angle_gamma
33 cell.volume

View File

@@ -107,6 +107,7 @@ entity.id
entity.type
entity.src_method
entity.pdbx_description
entity.pdbx_parent_entity_id
entity.formula_weight
entity.pdbx_number_of_molecules
entity.details
@@ -262,6 +263,7 @@ software.version
struct.entry_id
struct.title
struct.pdbx_descriptor
struct.pdbx_structure_determination_methodology
struct_asym.id
struct_asym.pdbx_blank_PDB_chainid_flag
@@ -366,18 +368,43 @@ struct_site.details
struct_site_gen.id
struct_site_gen.site_id
struct_site_gen.pdbx_num_res
struct_site_gen.label_comp_id
struct_site_gen.auth_asym_id
struct_site_gen.auth_atom_id
struct_site_gen.auth_comp_id
struct_site_gen.auth_seq_id
struct_site_gen.details
struct_site_gen.label_alt_id
struct_site_gen.label_asym_id
struct_site_gen.label_atom_id
struct_site_gen.label_comp_id
struct_site_gen.label_seq_id
struct_site_gen.pdbx_auth_ins_code
struct_site_gen.auth_comp_id
struct_site_gen.auth_asym_id
struct_site_gen.auth_seq_id
struct_site_gen.label_atom_id
struct_site_gen.label_alt_id
struct_site_gen.pdbx_num_res
struct_site_gen.symmetry
struct_site_gen.details
struct_site_keywords.site_id
struct_site_keywords.text
struct_mon_prot_cis.pdbx_id
struct_mon_prot_cis.auth_asym_id
struct_mon_prot_cis.auth_comp_id
struct_mon_prot_cis.auth_seq_id
struct_mon_prot_cis.label_alt_id
struct_mon_prot_cis.label_asym_id
struct_mon_prot_cis.label_comp_id
struct_mon_prot_cis.label_seq_id
struct_mon_prot_cis.pdbx_PDB_ins_code
struct_mon_prot_cis.pdbx_PDB_ins_code_2
struct_mon_prot_cis.pdbx_PDB_model_num
struct_mon_prot_cis.pdbx_auth_asym_id_2
struct_mon_prot_cis.pdbx_auth_comp_id_2
struct_mon_prot_cis.pdbx_auth_ins_code
struct_mon_prot_cis.pdbx_auth_ins_code_2
struct_mon_prot_cis.pdbx_auth_seq_id_2
struct_mon_prot_cis.pdbx_label_asym_id_2
struct_mon_prot_cis.pdbx_label_comp_id_2
struct_mon_prot_cis.pdbx_label_seq_id_2
struct_mon_prot_cis.pdbx_omega_angle
symmetry.entry_id
symmetry.cell_setting
@@ -849,6 +876,17 @@ ma_qa_metric_local.metric_value
ma_qa_metric_local.model_id
ma_qa_metric_local.ordinal_id
ma_qa_metric_local_pairwise.ordinal_id
ma_qa_metric_local_pairwise.model_id
ma_qa_metric_local_pairwise.label_asym_id_1
ma_qa_metric_local_pairwise.label_comp_id_1
ma_qa_metric_local_pairwise.label_seq_id_1
ma_qa_metric_local_pairwise.label_asym_id_2
ma_qa_metric_local_pairwise.label_comp_id_2
ma_qa_metric_local_pairwise.label_seq_id_2
ma_qa_metric_local_pairwise.metric_id
ma_qa_metric_local_pairwise.metric_value
ma_software_group.group_id
ma_software_group.ordinal_id
ma_software_group.software_id
1 atom_sites.entry_id
107 entity_poly.nstd_linkage entity_poly.type
108 entity_poly.nstd_monomer entity_poly.nstd_linkage
109 entity_poly.pdbx_seq_one_letter_code entity_poly.nstd_monomer
110 entity_poly.pdbx_seq_one_letter_code
111 entity_poly.pdbx_seq_one_letter_code_can
112 entity_poly.pdbx_strand_id
113 entity_poly.pdbx_target_identifier
263 struct_conn.ptnr1_label_seq_id struct_conn.ptnr1_label_comp_id
264 struct_conn.ptnr1_label_atom_id struct_conn.ptnr1_label_seq_id
265 struct_conn.pdbx_ptnr1_label_alt_id struct_conn.ptnr1_label_atom_id
266 struct_conn.pdbx_ptnr1_label_alt_id
267 struct_conn.pdbx_ptnr1_PDB_ins_code
268 struct_conn.pdbx_ptnr1_standard_comp_id
269 struct_conn.ptnr1_symmetry
368 pdbx_reference_entity_link.details symmetry.space_group_name_H-M
369 pdbx_reference_entity_list.prd_id pdbx_molecule.instance_id
370 pdbx_reference_entity_list.ref_entity_id pdbx_molecule.prd_id
371 pdbx_reference_entity_list.component_id pdbx_molecule.asym_id
372 pdbx_reference_entity_list.type pdbx_molecule_features.prd_id
373 pdbx_molecule_features.name
374 pdbx_molecule_features.type
375 pdbx_molecule_features.class
376 pdbx_molecule_features.details
377 pdbx_reference_entity_list.details pdbx_reference_entity_link.prd_id
378 pdbx_reference_entity_link.link_id
379 pdbx_reference_entity_link.link_class
380 pdbx_reference_entity_poly_link.prd_id pdbx_reference_entity_link.ref_entity_id_1
381 pdbx_reference_entity_poly_link.ref_entity_id pdbx_reference_entity_link.entity_seq_num_1
382 pdbx_reference_entity_poly_link.link_id pdbx_reference_entity_link.comp_id_1
pdbx_reference_entity_poly_link.atom_id_1
pdbx_reference_entity_poly_link.comp_id_1
pdbx_reference_entity_poly_link.entity_seq_num_1
pdbx_reference_entity_poly_link.atom_id_2
383 pdbx_reference_entity_poly_link.comp_id_2 pdbx_reference_entity_link.atom_id_1
384 pdbx_reference_entity_poly_link.entity_seq_num_2 pdbx_reference_entity_link.ref_entity_id_2
385 pdbx_reference_entity_link.entity_seq_num_2
386 pdbx_reference_entity_link.comp_id_2
387 pdbx_reference_entity_link.atom_id_2
388 pdbx_reference_entity_link.value_order
389 pdbx_reference_entity_link.component_1
390 pdbx_reference_entity_link.component_2
391 pdbx_reference_entity_link.details
392 pdbx_reference_entity_list.prd_id
393 pdbx_reference_entity_list.ref_entity_id
394 pdbx_reference_entity_list.component_id
395 pdbx_reference_entity_list.type
396 pdbx_reference_entity_list.details
397 pdbx_reference_entity_poly_link.prd_id
398 pdbx_reference_entity_poly_link.ref_entity_id
399 pdbx_reference_entity_poly_link.link_id
400 pdbx_reference_entity_poly_link.atom_id_1
401 pdbx_reference_entity_poly_link.comp_id_1
402 pdbx_reference_entity_poly_link.entity_seq_num_1
403 pdbx_reference_entity_poly_link.atom_id_2
404 pdbx_reference_entity_poly_link.comp_id_2
405 pdbx_reference_entity_poly_link.entity_seq_num_2
406 pdbx_reference_entity_poly_link.value_order
407 pdbx_reference_entity_poly_link.component_id
408 pdbx_reference_entity_poly_link.value_order pdbx_struct_assembly.id
409 pdbx_reference_entity_poly_link.component_id pdbx_struct_assembly.details
410 pdbx_struct_assembly.id pdbx_struct_assembly.method_details
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892

15
data/pwa/README.md Normal file
View File

@@ -0,0 +1,15 @@
The files in this directory are used for deploying the Mol* Viewer as a PWA (Progressive Web App) at https://molstar.org/viewer/. They may serve as an example for creating your own PWA but wont work as-is. See `/script/deploy.js` for where these files are copied and how they are transformed during deployment.
## PWA features
- The Service Worker will cache static resources so the Viewer can be used without internet access. This works without installing, i.e., also in Firefox.
- Once installed, file types listed in the Manifest can be opened from, e.g., the Windows File Explorer.
## Notes for development
In Chrome you can see a list of installed PWAs at chrome://apps/. A right-click opens a menu with an option uninstall.
The Chrome Dev Tools have a section 'Application' to inspect and manage PWA aspects like the Manifest and Service Workers.

BIN
data/pwa/logo-144.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,39 @@
{
"id": "https://molstar.org/viewer/",
"name": "Mol* Viewer",
"short_name": "Mol*",
"description": "Mol* Viewer: a modern web app for 3D visualization and analysis of large biomolecular structures.",
"start_url": "./index.html",
"theme_color": "#eeece7",
"background_color": "#eeece7",
"display": "standalone",
"icons": [
{
"src": "favicon.ico",
"sizes": "48x48"
},
{
"src": "logo-144.png",
"sizes": "144x144"
}
],
"file_handlers": [
{
"action": "./index.html",
"accept": {
"application/vnd.molstar": [".molx", ".molj"],
"text/plain": [
".mol", ".mol2", ".sdf", ".sd", ".pdb", ".ent", ".pdbqt", ".cif", ".mcif", ".mmcif", ".xyz", ".gro", ".lammpstrj",
".cub", ".cube", ".dx"
],
"application/octet-stream": [
".bcif",
".dxbin", ".ccp4", ".mrc", ".map", ".dsn6", ".brix"
]
}
}
],
"launch_handler": {
"client_mode": ["auto"]
}
}

44
data/pwa/pwa.js Normal file
View File

@@ -0,0 +1,44 @@
/**
* Copyright (c) 2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Andy Turner <agdturner@gmail.com>
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
window.addEventListener('molstarViewerCreated', e => {
const viewer = e.detail.viewer;
// Handle incoming files
if ('launchQueue' in window) {
launchQueue.setConsumer((launchParams) => {
if (!launchParams.files.length) return;
const files = [];
for (const fileHandle of launchParams.files) {
files.push(fileHandle.getFile());
}
Promise.all(files).then((files) => {
viewer.loadFiles(files);
});
});
}
});
// Register Progressive Web App service worker.
if ('serviceWorker' in navigator) {
window.addEventListener('load', function () {
navigator.serviceWorker.register('./sw.js')
.then(function (registration) {
// Registration was successful
if (molstar.isDebugMode) {
console.log('ServiceWorker registration successful with scope: ', registration.scope);
}
}, function (err) {
// registration failed :(
if (molstar.isDebugMode) {
console.error('ServiceWorker registration failed: ', err);
}
});
});
}

60
data/pwa/sw.js Normal file
View File

@@ -0,0 +1,60 @@
/**
* Copyright (c) 2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Andy Turner <agdturner@gmail.com>
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
/** version from package.json, to be filled in during deployment */
const VERSION = '__MOLSTAR_VERSION__';
const CACHE_NAME = `molstar-viewer-${VERSION}`;
// The static resources that the app needs to function.
const APP_STATIC_RESOURCES = [
'favicon.ico',
'index.html',
'molstar.css',
'molstar.js',
'manifest.webmanifest',
'logo-144.png',
'pwa.js'
];
async function cacheStaticResources() {
const cache = await caches.open(CACHE_NAME);
await cache.addAll(APP_STATIC_RESOURCES);
await self.skipWaiting(); // Ensures the new service worker takes control immediately.
}
async function deleteOldCaches() {
const keys = await caches.keys();
await Promise.all(
keys.map((key) => {
if (key !== CACHE_NAME) {
return caches.delete(key);
}
}),
);
await self.clients.claim(); // Ensures the new service worker takes control immediately.
}
async function respondWithCacheFirst(request) {
// Try to match the request with the cache
const cachedResponse = await caches.match(request);
return cachedResponse || fetch(request);
}
self.addEventListener('install', (event) => {
// console.log(`Service Worker version ${VERSION} installed.`);
event.waitUntil(cacheStaticResources());
});
self.addEventListener('activate', (event) => {
// console.log(`Service Worker version ${VERSION} activated.`);
event.waitUntil(deleteOldCaches());
});
self.addEventListener('fetch', (event) => {
event.respondWith(respondWithCacheFirst(event.request));
});

11
docs/README.md Normal file
View File

@@ -0,0 +1,11 @@
# Mol* Developer Documentation
Contributions to the documentations are highly welcome! Please make a pull request with your changes.
Requires Python 3.x to build. From this directory:
```
pip install mkdocs-material
mkdocs serve
```

View File

@@ -0,0 +1,41 @@
# Convert CIF to BinaryCIF
BinaryCIF is an efficient, binary flavor of the CIF format. See [specification](https://github.com/molstar/BinaryCIF) and [publication](https://doi.org/10.1371/journal.pcbi.1008247) for further details.
This script reads data in CIF format and converts it lossless to a BinaryCIF file that can be read by Mol* or other
applications.
## Example
```sh
node lib/commonjs/cli/cif2bcif/index.js file.cif file.bcif
```
## Usage
| Argument | Description |
| --- | --- |
| `src` | Source CIF to convert (can be gzipped) |
| `out` | Generated BinaryCIF output path |
| `-c` | Path to optional config file |
| `-f` | Path to optional filter file |
```sh
index.js [-h] [-c CONFIG] [-f FILTER] src out
```
### Config file
Controls how certain columns will be encoded. This is a JSON array of instructions:
```ts
interface EncodingStrategyHint {
categoryName: string,
columnName: string,
encoding: 'pack' | 'rle' | 'delta' | 'delta-rle',
precision?: number
}
```
Identify a particular CIF columns by its name and override the encoding by Integer Packing, Run-Length Encoding, Delta
Encoding, or Delta & Run-Length Encoding. You can optionally control the precision if dealing with float values.
### Filter file
Specifies which categories and columns will be written. This is a plain text file, each line represents one entry.
You can specify explicitly which categories or columns to include by adding `category_name` or
`category_name.field_name`. You can also choose to ignore some categories or columns by adding `!category_name` or
`!category_name.field_name`.

View File

@@ -0,0 +1,25 @@
# Create Table from CCD
The [Chemical Component Dictionary (CCD)](https://www.wwpdb.org/data/ccd) is as an external reference file describing
all residue and small molecule components found in PDB entries. The
[Protonation Variants Companion Dictionary (PVCD)](https://www.wwpdb.org/data/ccd) enumerates protonation variants of
canonical amino acids.
This script bundles all `chem_comp_bond` information from the CCD and the PVCD into a single file for later use.
Optionally, it can also generate a second output file that contains all `chem_comp_atom` information.
## Example
```sh
node --max-old-space-size=4096 lib/commonjs/cli/chem-comp-dict/create-table.js build/data/ccb.bcif -b
```
## Usage
| Argument | Description |
| --- | --- |
| `out` | Generated file output path |
| `--forceDownload`, `-f` | Force download of CCD and PVCD |
| `--binary`, `-b` | Output as BinaryCIF |
| `--ccaOut`, `-a` | File output path of optionally generated chem_comp_atom |
```sh
create-table.js [-h] [--forceDownload] [--binary] [--ccaOut CCAOUT] out
```

View File

@@ -0,0 +1,20 @@
# Extract Ions from CCD
The [Chemical Component Dictionary (CCD)](https://www.wwpdb.org/data/ccd) is as an external reference file describing
all residue and small molecule components found in PDB entries.
This script extracts all ions from the CCD and provides their names as TypeScript set.
## Example
```sh
node --max-old-space-size=4096 lib/commonjs/cli/chem-comp-dict/create-ions.js src/mol-model/structure/model/types/ions.ts
```
## Usage
| Argument | Description |
| --- | --- |
| `out` | Generated file output path |
| `--forceDownload`, `-f` | Force download of CCD |
```sh
create-ions.js [-h] [--forceDownload] out
```

View File

@@ -0,0 +1,119 @@
# Model Server
Provides access to molecular 1D, 2D, and 3D (sub-)structure models of molecules. Substructures are described by the
mol-script (MolQL) language. It has the ability to include additional data to mmCIF “on the fly”, e.g. integrate
primary PDB archival data from [Chemical Component Dictionary (CCD)](https://www.wwpdb.org/data/ccd),
[Protonation Variants Companion Dictionary (PVCD)](https://www.wwpdb.org/data/ccd) and
[Biologically Interesting moleculeReference Dictionary (BIRD)](https://www.wwpdb.org/data/bird).
## Example
```sh
node lib/commonjs/servers/model/server --sourceMap pdb-bcif '/opt/data/bcif/${id}.bcif'
```
## Usage
| Argument | Description |
| --- | --- |
| `--version`, `-v` | Show program's version number and exit. |
| `--cfg` | JSON config file path. If a property is not specified, cmd line param/OS variable/default value are used. |
| `--printCfg` | Print current config for validation and exit. |
| `--cfgTemplate` | Prints default JSON config template to be modified and exit. |
| `--apiPrefix` | Specify the prefix of the API, i.e. &lt;host&gt;/&lt;apiPrefix&gt;/&lt;API queries&gt; |
| `--defaultPort` | Specify the port the server is running on |
| `--cacheMaxSizeInBytes` | Read structures are cached, this specifies the cache size, 0 for off. |
| `--cacheEntryTimeoutMs` | Specify in ms how long to keep entries in cache. |
| `--requestTimeoutMs` | The maximum number of ms the server spends on a request. |
| `--queryTimeoutMs` | The maximum time the server dedicates to executing a query in ms. Does not include the time it takes to read and export the data. |
| `--shutdownTimeoutMinutes` | Server will shut down after this amount of minutes, 0 for off. |
| `--shutdownTimeoutVarianceMinutes` | Modifies the shutdown timer by +/- `timeoutVarianceMinutes` (to avoid multiple instances shutting at the same time) |
| `--maxQueryManyQueries` | Maximum number of queries allowed by the query-many at a time |
| `--defaultSource` | modifies which 'sourceMap' source to use by default |
| `--sourceMap` | Map `id`s for a `source` to a file path. Example: `pdb-bcif '../../data/bcif/${id}.bcif'` - JS expressions can be used inside `${}`, e.g. `${id.substr(1, 2)}/${id}.mdb` Can be specified multiple times. The `SOURCE` variable (e.g. `pdb-bcif`) is arbitrary and depends on how you plan to use the server. Supported formats: cif, bcif, cif.gz, bcif.gz |
| `--sourceMapUrl` | Same as `--sourceMap` but for URL. `--sourceMapUrl src url format` Example: `pdb-cif 'https://www.ebi.ac.uk/pdbe/entry-files/download/${id}_updated.cif' cif` Supported formats: cif, bcif, cif.gz, bcif.gz. Supported protocols: http://, https://, gs:// |
```sh
node lib/commonjs/servers/model/server [-h] [-v]
[--cfg CFG]
[--printCfg]
[--cfgTemplate]
[--apiPrefix PREFIX]
[--defaultPort PORT]
[--cacheMaxSizeInBytes CACHE_SIZE]
[--cacheEntryTimeoutMs CACHE_TIMEOUT]
[--requestTimeoutMs REQUEST_TIMEOUT]
[--queryTimeoutMs QUERY_TIMEOUT]
[--shutdownTimeoutMinutes TIME]
[--shutdownTimeoutVarianceMinutes VARIANCE]
[--maxQueryManyQueries QUERY_MANY_LIMIT]
[--defaultSource DEFAULT_SOURCE]
[--sourceMap SOURCE PATH]
[--sourceMapUrl SOURCE PATH SOURCE_MAP_FORMAT]
```
### Production Use
In production, it is required to use a service that will keep the server running, such as [forever.js](https://github.com/foreverjs/forever).
### Memory Issues
Sometimes nodejs might run into problems with memory. This is usually resolved by adding the ``--max-old-space-size=8192`` parameter.
### Preprocessor Example
The preprocessor application allows addiing custom data to CIF files and/or
[convert CIF to BinaryCIF](./convert-to-bcif.md).
```sh
node lib/commonjs/servers/model/preprocess
```
### Preprocessor Usage
| Argument | Description |
| --- | --- |
| `--input`, `-i` | Input filename |
| `--outCIF`, `-oc` | Output CIF filename |
| `--outBCIF`, `-ob` | Output BinaryCIF filename |
| `--cfg`, `-c` | Config file path |
| `--folderIn`, `-fin` | Convert folder |
| `--folderOutCIF`, `-foc` | Convert folder text output |
| `--folderOutBCIF`, `-fob` | Convert folder binary output |
| `--folderNumProcesses`, `-fp` | Convert folder number processes |
Example cfg.json:
```ts
{
"numProcesses": 1,
"customProperties": {
"sources": [ "wwpdb" ],
"params": {
"wwPDB": {
"chemCompBondTablePath": "./build/data/ccb.bcif"
}
}
}
}
```
### Local Mode
The server can be run in local/file based mode using
```sh
node lib/commonjs/servers/model/query
```
### Custom Properties
This feature is still in development.
It is possible to provide property descriptors that transform data to internal representation and define how it should
be exported into one or mode CIF categories. Examples of this are located in the ``mol-model-props`` module and are
linked to the server in the config and ``servers/model/properties``.
## From NPM
```
npm install --production molstar
cd ./model-server
```
(or ``node node_modules\.bin\model-server`` in Windows).
The NPM package contains all the tools mentioned in the previous sections as "binaries":
- ``model-server``
- ``model-server-query``
- ``model-server-preprocess``

View File

@@ -0,0 +1,22 @@
# Plugin State Server
Provides a simple backend for online storing and sharing of Mol* sessions used by
[``mol-plugin``](https://github.com/molstar/molstar/tree/master/src/mol-plugin) and
[``mol-state``](https://github.com/molstar/molstar/tree/master/src/mol-state) modules.
## Example
```sh
node lib/commonjs/servers/plugin-state --workding-folder ~
```
## Usage
| Argument | Description |
| --- | --- |
| `--working-folder` | Working folder path |
| `--port` | Server port. Alternatively, use ENV variable PORT. |
| `--api-prefix` | Server API prefix |
| `--max-states` | Maximum number of states to save |
```sh
node lib/commonjs/servers/plugin-state [-h] --working-folder WORKING_FOLDER [--port PORT] [--api-prefix API_PREFIX] [--max-states MAX_STATES]
```

View File

@@ -1,9 +1,9 @@
Zika Virus
==========
# VolumeServer Examples
## Zika Virus
![Zika Virus](img/zika_downsampled.png)
1TQN
====
## 1TQN
![1tqn](img/1tqn_downsampled.png)

View File

@@ -1,5 +1,4 @@
How it works
============
## VolumeServer: How it works
This document provides a high level overview of how the DensityServer works.

View File

Before

Width:  |  Height:  |  Size: 292 KiB

After

Width:  |  Height:  |  Size: 292 KiB

View File

Before

Width:  |  Height:  |  Size: 310 KiB

After

Width:  |  Height:  |  Size: 310 KiB

View File

@@ -0,0 +1,126 @@
# VolumeServer
## What is VolumeServer
Provides near-instantaneous access to volumetric data including density maps (for instance, from X-ray crystallography
or cryo-electron microscopy experiments), spatial distribution data, output from electrostatic calculations. It works by
utilizing adaptive downsampling (similar to how Google Earth works).
It uses the text based CIF and BinaryCIF formats to deliver the data to the client.
For quick info about the benefits of using the server, check out the [examples](examples.md).
## Installing and Running
Requires nodejs 8+.
### From GitHub
```
git clone https://github.com/molstar/molstar
npm install
```
Afterwards, build the project source:
```
npm run build:lib
```
and run the server by
```
node lib/commonjs/servers/volume/server
```
### From NPM
```
npm install --production molstar
./volume-server
```
(or ``node node_modules\.bin\volume-server`` in Windows).
The NPM package contains all the tools mentioned here as "binaries":
- ``volume-server``
- ``volume-server-pack``
- ``volume-server-query``
#### Production use
In production it is required to use a service that will keep the server running, such as [forever.js](https://github.com/foreverjs/forever).
#### Memory issues
Sometimes nodejs might run into problems with memory. This is usually resolved by adding the ``--max-old-space-size=8192`` parameter.
### Preparing the Data
For the server to work, CCP4/MAP (models 0, 1, 2 are supported) input data need to be converted into a custom block format.
To achieve this, use the ``pack`` application (``node lib/commonjs/servers/volume/pack`` or ``volume-server-pack`` binary from the NPM package).
### Local Mode
The program ``lib/commonjs/servers/volume/query`` (``volume-server-query`` in NPM package) can be used to query the data without running a http server.
### Navigating the Source Code
The source code is split into 2 mains parts: ``pack`` and ``server``:
- The ``pack`` part provides the means of converting CCP4 files into the internal block format.
- The ``server`` includes
- ``query``: the main part of the server that handles a query. ``execute.ts`` is the "entry point".
- ``algebra``: linear, "coordinate", and "box" algebra provides the means for calculations necessary to concent a user query into a menaningful response.
- API wrapper that handles the requests.
## Consuming the Data
The data can be consumed in any (modern) browser using the [ciftools library](https://github.com/molstar/ciftools) (or any other piece of code that can read text or binary CIF).
The [Data Format](./response-data-format.md) document gives a detailed description of the server response format.
As a reference/example of the server usage is available in Mol* ``mol-plugin`` module.
## Hosting the server
### Example
```sh
node lib/commonjs/servers/volume/server --idMap x-ray '/opt/data/xray/${id}.mdb'
```
### Usage
| Argument= | Description |
| --- | --- |
| `--cfg` | JSON config file path. If a property is not specified, cmd line param/OS variable/default value are used. |
| `--printCfg` | Print current config for validation and exit. |
| `--cfgTemplate` | Prints default JSON config template to be modified and exit. |
| `--apiPrefix` | Specify the prefix of the API, i.e. &lt;host&gt;/&lt;apiPrefix&gt;/&lt;API queries&gt; |
| `--defaultPort` | Specify the port the server is running on |
| `--shutdownTimeoutMinutes` | Server will shut down after this amount of minutes, 0 for off. |
| `--shutdownTimeoutVarianceMinutes` | Modifies the shutdown timer by +/- `timeoutVarianceMinutes` (to avoid multiple instances shutting at the same time) |
| `--idMap` | Map `id`s for a `type` to a file path. Example: `x-ray '../../data/mdb/xray/${id}-ccp4.mdb'` - JS expressions can be used inside `${}`, e.g. `${id.substr(1, 2)}/${id}.mdb` - Can be specified multiple times. - The `TYPE` variable (e.g. `x-ray`) is arbitrary and depends on how you plan to use the server. By default, Mol* Viewer uses `x-ray` and `em`, but any particular use case may vary. - If using URL, it can be http://, https://, gs:// or file:// protocol.|
| `--maxRequestBlockCount` | Maximum number of blocks that could be read in 1 query. This is somewhat tied to the ``maxOutputSizeInVoxelCountByPrecisionLevel`` in that the `&lt;maximum number of voxel&gt; = maxRequestBlockCount * &lt;block size&gt;^3`. The default block size is 96 which corresponds to 28,311,552 voxels with 32 max blocks. |
| `--maxFractionalBoxVolume` | The maximum fractional volume of the query box (to prevent queries that are too big). |
| `--maxOutputSizeInVoxelCountByPrecisionLevel` | What is the (approximate) maximum desired size in voxel count by precision level - Rule of thumb: `&lt;response gzipped size&gt;` in `[&lt;voxel count&gt; / 8, &lt;voxel count&gt; / 4]`. The maximum number of voxels is tied to maxRequestBlockCount. |
```sh
node lib/commonjs/servers/volume/server [-h] [-v]
[--cfg CFG]
[--printCfg]
[--cfgTemplate]
[--apiPrefix PREFIX]
[--defaultPort PORT]
[--shutdownTimeoutMinutes TIME]
[--shutdownTimeoutVarianceMinutes VARIANCE]
[--idMap TYPE PATH]
[--maxRequestBlockCount COUNT]
[--maxFractionalBoxVolume VOLUME]
[--maxOutputSizeInVoxelCountByPrecisionLevel LEVEL [LEVEL ...]]
```

View File

@@ -1,10 +1,8 @@
Data Format
===========
# VolumeServer: Response Data Format
This document describes the CIF categories and fields generated by the server.
Query info
----------
## Query info
The reponse always contains a data block called ``SERVER`` with this format:
@@ -28,8 +26,7 @@ _density_server_result.query_box_b[1] 35.737
_density_server_result.query_box_b[2] 32.037001
```
Query data
----------
## Query data
If the query completed successfully with a non-empty result the response will contain one or more data blocks that correpond to the
"channels" present in the data (e.g. for x-ray data there will be ``2Fo-Fc`` and ``Fo-Fc``) channels.
@@ -41,6 +38,7 @@ data_2FO-FC
#
_volume_data_3d_info.name 2Fo-Fc
```
### Axis order
Axis order determines the order of axes of ``origin``, ``dimensions`` and ``sample_count`` fields. It also specifies

View File

@@ -0,0 +1,4 @@
# Interactions extension
The Interactions extension enables computing or providing custom interactions between multiple selections/structures.
For usage, see the [example source code](https://github.com/molstar/molstar/tree/master/src/examples/interactions).

View File

@@ -0,0 +1,3 @@
# MolViewSpec
Please see the [standalone MolViewSpec documentation](https://molstar.org/mol-view-spec-docs/).

View File

@@ -0,0 +1,112 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Replace "latest" by the specific version you want to use, e.g. "4.0.0" -->
<script src="https://cdn.jsdelivr.net/npm/molstar@latest/build/viewer/molstar.js"></script>
<!-- Replace "latest" by the specific version you want to use, e.g. "4.0.0" -->
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/molstar@latest/build/viewer/molstar.css" />
</head>
<body>
<h1>Integration of Mol* with MolViewSpec Extension</h1>
<p>
This page demonstrates several methods to integrate Mol* Viewer in a web page and use MolViewSpec functionality.
See the source HTML to see the actual code.
</p>
<h2>Method 1: Get MVS view from a server and pass to the viewer</h2>
<p>
The recommended method is to serve the MVS view files by your server (either as static files or generated by the
server on-demand) and call the <code>loadMvsFromUrl</code> method to retrieve and load them.
This example uses a MVS view file from the address specified in the <code>sourceUrl</code> variable.
If the MVS view file contains relative references, they will be resolved as relative to <code>sourceUrl</code>.
</p>
<div id="viewer1" style="position: relative; width: 500px; height: 500px;"></div>
<script>
const sourceUrl = 'https://raw.githubusercontent.com/molstar/molstar/master/examples/mvs/1h9t_domain_labels.mvsj';
molstar.Viewer.create('viewer1', { layoutIsExpanded: false, layoutShowControls: false })
.then(viewer => viewer.loadMvsFromUrl(sourceUrl, 'mvsj'));
</script>
<p>
A variation of this method uses <code>molstar.PluginExtensions.mvs.loadMVS</code> instead of
<code>loadMvsFromUrl</code> and allows replacing the MVS view after it has been loaded.
</p>
<div id="viewer1b" style="position: relative; width: 500px; height: 500px;"></div>
<button onclick="loadView1();">View 1</button>
<button onclick="loadView2();">View 2</button>
<script>
let theViewer;
function load(viewer, url, replace) {
fetch(url)
.then(response => response.text())
.then(text => molstar.PluginExtensions.mvs.MVSData.fromMVSJ(text))
.then(mvsData => molstar.PluginExtensions.mvs.loadMVS(viewer.plugin, mvsData, { sourceUrl: url, sanityChecks: true, replaceExisting: replace }));
}
function loadView1() {
load(theViewer, 'https://raw.githubusercontent.com/molstar/molstar/master/examples/mvs/1cbs.mvsj', true);
}
function loadView2() {
load(theViewer, 'https://raw.githubusercontent.com/molstar/molstar/master/examples/mvs/1cbs-focus.mvsj', true);
}
molstar.Viewer.create('viewer1b', { layoutIsExpanded: false, layoutShowControls: false })
.then(viewer => {
theViewer = viewer;
loadView1();
});
</script>
<h2>Method 2: Construct MVS view on frontend and pass to the viewer</h2>
<p>
Another option is to utilize the MVS builder provided by the extension to build the view on frontend and then
pass it to the viewer. This example builds the view in plain JavaScript, directly in a &lt;script&gt; tag in
HTML. However, for a better developer experience consider writing the code in TypeScript.
If the built MVS view contains relative references, they will be resolved as relative to the URL of this HTML
page.
</p>
<div id="viewer2" style="position: relative; width: 500px; height: 500px;"></div>
<script>
// Build an ad-hoc MVS view
const builder = molstar.PluginExtensions.mvs.MVSData.createBuilder();
const structure = builder
.download({ url: 'https://www.ebi.ac.uk/pdbe/entry-files/1cbs.bcif' })
.parse({ format: 'bcif' })
.modelStructure({});
structure
.component({ selector: 'polymer' })
.representation({ type: 'cartoon' })
.color({ color: 'green' });
structure
.component({ selector: 'ligand' })
.label({ text: 'Retinoic acid' })
.focus({})
.representation({ type: 'ball_and_stick' })
.color({ color: '#cc3399' });
const mvsData = builder.getState();
// Initialize viewer and load MVSJ
const mvsj = molstar.PluginExtensions.mvs.MVSData.toMVSJ(mvsData);
molstar.Viewer.create('viewer2', { layoutIsExpanded: false, layoutShowControls: false })
.then(viewer => viewer.loadMvsData(mvsj, 'mvsj'));
// // Alternative initialization and loading (avoids encoding and again decoding the data, allows changing the view by using `replaceExisting: true`):
// molstar.Viewer.create('viewer2', { layoutIsExpanded: false, layoutShowControls: false })
// .then(viewer => molstar.PluginExtensions.mvs.loadMVS(viewer.plugin, mvsData, { sourceUrl: undefined, sanityChecks: true, replaceExisting: false }));
</script>
<p>
Again, there is variation with using <code>molstar.PluginExtensions.mvs.loadMVS</code> instead of
<code>loadMvsData</code>.
</p>
</body>
</html>

View File

@@ -0,0 +1,118 @@
# wwPDB StructConn extension
The STRUCT_CONN category in the mmCIF file format contains details about the connections between portions of the structure. These can be hydrogen bonds, salt bridges, disulfide bridges and so on (see more at <https://mmcif.wwpdb.org/dictionaries/mmcif_pdbx_v40.dic/Categories/struct_conn.html>).
**wwPDB StructConn extension** in Mol* provides functionality to retrieve and visualize these connections.
The extension exposes three functions, located in `src/extensions/wwpdb/struct-conn/index.ts`.
- `getStructConns` - to retrieve struct_conn records from a loaded structure
- `inspectStructConn` - to visualize a struct_conn
- `clearStructConnInspections` - to remove visulizations created by `inspectStructConn`
## Example 1
The following example is a minimal HTML using this functionality:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="./favicon.ico" type="image/x-icon">
<title>Mol* Viewer</title>
<link rel="stylesheet" type="text/css" href="molstar.css" />
</head>
<body style="margin: 0px;">
<div style="position: absolute; width: 100%; height: 10%; padding-block: 10px;">
<button onclick="molstar.PluginExtensions.wwPDBStructConn.inspectStructConn(molstarViewer.plugin, '5elb', 'disulf1');">disulf1</button>
<button onclick="molstar.PluginExtensions.wwPDBStructConn.inspectStructConn(molstarViewer.plugin, '5elb', 'disulf2');">disulf2</button>
<button onclick="molstar.PluginExtensions.wwPDBStructConn.inspectStructConn(molstarViewer.plugin, '5elb', 'covale1');">covale1</button>
<button onclick="molstar.PluginExtensions.wwPDBStructConn.inspectStructConn(molstarViewer.plugin, '5elb', 'covale2');">covale2</button>
<button onclick="molstar.PluginExtensions.wwPDBStructConn.inspectStructConn(molstarViewer.plugin, '5elb', 'covale3');">covale3</button>
<button onclick="molstar.PluginExtensions.wwPDBStructConn.inspectStructConn(molstarViewer.plugin, '5elb', 'covale4');">covale4</button>
<button onclick="molstar.PluginExtensions.wwPDBStructConn.inspectStructConn(molstarViewer.plugin, '5elb', 'metalc1');">metalc1</button>
<button onclick="molstar.PluginExtensions.wwPDBStructConn.inspectStructConn(molstarViewer.plugin, '5elb', 'metalc2');">metalc2</button>
<button onclick="molstar.PluginExtensions.wwPDBStructConn.inspectStructConn(molstarViewer.plugin, '5elb', 'metalc3');">metalc3</button>
<button onclick="molstar.PluginExtensions.wwPDBStructConn.inspectStructConn(molstarViewer.plugin, '5elb', 'metalc4');">metalc4</button>
<button onclick="molstar.PluginExtensions.wwPDBStructConn.clearStructConnInspections(molstarViewer.plugin, '5elb');">CLEAR</button>
</div>
<div id="app" style="position: absolute; top: 10%; width: 100%; height: 90%;"></div>
<script type="text/javascript" src="./molstar.js"></script>
<script type="text/javascript">
var molstarViewer;
molstar.Viewer.create('app', { layoutIsExpanded: false }).then(viewer => {
molstarViewer = viewer;
viewer.loadPdb('5elb');
});
</script>
</body>
</html>
```
The PDB ID (`'5elb'`) can be replaced be `undefined`, in which case the functions will apply to the first loaded structure.
## Example 2
This is a more elaborated example, which automatically loads `5elb` (or any PDB entry given in the URL after `?pdb=`), retrieves the list of struct_conns, and creates a button for each struct_conn.
Be aware that some of the struct_conns may be present in the deposited model but not in the preferred assembly (default view). The presented example will raise a dialog window with error message in such cases, e.g. `disulf6` in entry `5elb`.
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="./favicon.ico" type="image/x-icon">
<title>Mol* Viewer - StructConn Extension Demo</title>
<link rel="stylesheet" type="text/css" href="molstar.css" />
</head>
<style>
body { margin: 0px; }
#app { position: absolute; width: 85%; height: 100%; }
#controls { position: absolute; right: 0; width: 15%; height: 100%; display: flex; flex-direction: column; overflow-y: scroll; }
h1 { text-align: center; margin: 12px; font-weight: bold; font-size: 120%; }
button { margin: 4px; margin-top: 0px; }
</style>
<body>
<div id="app"></div>
<div id="controls">
<h1 id="pdb-id">Loading...</h1>
<button onclick="clearInspections();">CLEAR</button>
</div>
<script type="text/javascript" src="./molstar.js"></script>
<script type="text/javascript">
var pdbId = window.location.search.match(/[?&]pdb=(\w+)/i)?.[1]?.toLowerCase() ?? '5elb';
var molstarViewer;
function inspect(structConnId) {
if (molstarViewer?.plugin) {
molstar.PluginExtensions.wwPDBStructConn.inspectStructConn(molstarViewer.plugin, pdbId, structConnId).then(nSelectedAtoms => {
if (nSelectedAtoms < 2) alert('Some of the interacting atoms were not found :(\n(maybe not present in the viewed assembly)');
});
}
}
function clearInspections() {
if (molstarViewer?.plugin) {
molstar.PluginExtensions.wwPDBStructConn.clearStructConnInspections(molstarViewer.plugin, pdbId);
}
}
molstar.Viewer.create('app', { layoutIsExpanded: false }).then(viewer => {
molstarViewer = viewer;
return viewer.loadPdb(pdbId);
}).then(() => {
const structConns = molstar.PluginExtensions.wwPDBStructConn.getStructConns(molstarViewer.plugin, pdbId);
const controls = document.getElementById('controls');
for (const structConnId in structConns) {
const button = document.createElement('button');
button.innerText = structConnId;
button.addEventListener('click', () => inspect(structConnId));
controls.appendChild(button);
};
document.getElementById('pdb-id').innerHTML = pdbId;
});
</script>
</body>
</html>
```

View File

@@ -0,0 +1,118 @@
# Tunnel Visualization Extension
This documentation outlines the usage of the Mol* extension for visualizing tunnels in molecular structures. The extension integrates with Mol* to render 3D representations of tunnels using specified data sources and properties.
The extension is a key component in ChannelsDB (https://channelsdb2.biodata.ceitec.cz/), enabling users to visualize tunnels within molecules directly from the database. While it is used with ChannelsDB, users can also input their own data or connect to different databases, ensuring versatility across various research environments.
## Data Types
The primary data types involved in tunnel visualization are:
### Tunnel
A Tunnel object contains the actual tunnel data necessary for visualization. It consists of:
- `data`: An array of `Profile` objects that describe the tunnel at various points.
- `props`: Properties such as the tunnel's type, ID, and optional labels or descriptions.
### Profile
A `Profile` object in a `Tunnel` holds detailed geometric and physical properties of a tunnel at specific points along its length. These properties include:
- `Charge`: The electric charge at a specific point in the tunnel.
- `Radius`: The overall radius of the tunnel at this point.
- `FreeRadius`: The radius of the tunnel not obstructed by any molecular elements.
- `T`: Temperature factor or a similar property related to the point.
- `Distance`: Distance along the tunnel's path from the start.
- `X`, `Y`, `Z`: Coordinates of the point in 3D space.
These profiles are crucial for understanding the physical and chemical environment inside the tunnel, allowing for detailed analysis and visualization.
Example:
```json
"Profile": [
{
"Radius": 1.49,
"FreeRadius": 1.49,
"T": 0,
"Distance": 0,
"X": -19.152,
"Y": -22.654,
"Z": -13.034,
"Charge": 0
},
{
"Radius": 1.524,
"FreeRadius": 1.524,
"T": 0.00625,
"Distance": 0.087,
"X": -19.162,
"Y": -22.596,
"Z": -12.969,
"Charge": 0
},
{
"Radius": 1.56,
"FreeRadius": 1.56,
"T": 0.0125,
"Distance": 0.174,
"X": -19.171,
"Y": -22.539,
"Z": -12.905,
"Charge": 0
}
]
```
## Transformers Usage
The extension uses several transformations to process and visualize tunnel data:
### Tunnels Data Transformer
- `Purpose`: Converts a collection of Tunnel data into a state object.
- `Usage`:
```typescript
update.toRoot().apply(TunnelsFromRawData, { data: tunnels });
```
### Tunnel Data Provider
- `Purpose`: Converts single Tunnel data into a state object for individual processing.
- `Usage`:
```typescript
update.toRoot().apply(TunnelFromRawData, {
data: {
data: tunnel.Profile,
props: { id: tunnel.Id, type: tunnel.Type }
}
});
```
### Tunnel Shape Provider
- `Purpose`: Provides the shapes for rendering the tunnel based on WebGL context and shape parameters.
- `Usage`:
```typescript
update.apply(TunnelShapeProvider, {
webgl,
}).apply(StateTransforms.Representation.ShapeRepresentation3D);
```
## Visualization Examples
To help users understand how to use these transformations in practice, include detailed examples:
### Visualizing Multiple Tunnels
This example (see `src/extensions/sb-ncbr/tunnels/examples.ts#L19`) demonstrates how to visualize multiple tunnels from a fetched dataset.
```typescript
update.toRoot()
.apply(TunnelsFromRawData, { data: tunnels })
.apply(SelectTunnel)
.apply(TunnelShapeProvider, { webgl })
.apply(StateTransforms.Representation.ShapeRepresentation3D);
```
### Visualizing a Single Tunnel
This example (see `src/extensions/sb-ncbr/tunnels/examples.ts#L46`) shows how to visualize a single tunnel.
```typescript
update.toRoot()
.apply(TunnelFromRawData, {
data: {
data: tunnel.Profile,
props: { id: tunnel.Id, type: tunnel.Type }
}
})
.apply(TunnelShapeProvider, { webgl })
.apply(StateTransforms.Representation.ShapeRepresentation3D);
```

43
docs/docs/index.md Normal file
View File

@@ -0,0 +1,43 @@
# Installation
## NPM Package
```
yarn add molstar
```
or
```
npm install molstar
```
Mol* code can then be imported from the ``molstar/lib/...`` namespace, e.g.
```ts
import { PluginContext } from 'molstar/lib/mol-plugin/context';
```
## Clone from GitHub
```
git clone https://github.com/molstar/molstar.git
cd molstar
npm install
npm run build
```
--------------------
For a watch task to automatically rebuild the source code on changes, run
```
npm run dev
```
or if working just with the Viewer app for better performance
```
npm run dev:viewer
```

View File

@@ -0,0 +1,59 @@
# Exporting components
Export components data can be useful to reproduce the same view in a different visualization software.
To do that, one would need to loop over all components, extract its selection (for example by using atom indices) and its representations (type, coloring and sizing).
### Getting assets / molecular files
```js
for (const { asset, file } of plugin.managers.asset.assets) {
const isFile = asset.asset.kind === 'url'
console.log(asset.asset.id)
console.log(isFile)
const data = await file.arrayBuffer()
}
```
### Getting components per structure
```js
import { PluginStateObject as PSO } from 'molstar/lib/mol-plugin-state/objects';
//...
const componentManager = plugin.managers.structure.component;
for (const structure of componentManager.currentStructures) {
if (!structure.properties) {
continue;
}
const cell = plugin.state.data.select(structure.properties.cell.transform.ref)[0];
if (!cell || !cell.obj) {
continue;
}
const structureData = (cell.obj as PSO.Molecule.Structure).data;
for (const component of structure.components) {
if (!component.cell.obj) {
continue;
}
// For each component in each structure, display the content of the selection
Structure.eachAtomicHierarchyElement(component.cell.obj.data, {
atom: location => console.log(location.element)
});
for (const rep of component.representations) {
// For each representation of the component, display its type
console.log(rep.cell?.transform?.params?.type?.name)
// Also display the color for each atom
const colorThemeName = rep.cell.transform.params?.colorTheme.name;
const colorThemeParams = rep.cell.transform.params?.colorTheme.params;
const theme = plugin.representation.structure.themes.colorThemeRegistry.create(
colorThemeName || '',
{ structure: structureData },
colorThemeParams
) as ColorTheme<typeof colorThemeParams>;
Structure.eachAtomicHierarchyElement(component.cell.obj.data, {
atom: loc => console.log(theme.color(loc, false))
});
}
}
}
```

View File

@@ -1,3 +1,5 @@
# Interesting PDB Entries
* Cyclic polymers (1sfi, 6dny, 1HVZ)
* B-DNA (1bna)
* Missing carbonyl oxygen (1gfl)
@@ -13,18 +15,20 @@
* DZ has C1 instead of N1 (e.g. 6I4N)
* DP has N5 instead of C5 and C7 instead of N7 (e.g. 6I4N)
* Beta & Gamma peptides (e.g. 1GAC, 6PQF)
* Helices of D-amino acids (e.g. 7QDI)
* Mixed (heterogeneous) all-atom/trace-only RNA model (1JGQ)
* Polymers with residues with missing trace atoms (e.g. 2QFJ)
* Modified RNA bases (1y26, 5L4O)
* Discontinuous chains, i.e. gaps in the sequence (3sn6)
* Lots of sheets (1cbs)
* DNA (2np2, 1d66)
* C-alpha only (2rcj)
* C-alpha only (2RCJ, 6ZIG, 5AJ2)
* Not cyclic, but termini are backbone-only and within distance but seqIds are not compatible (6SW3)
* Close backbone atoms but not linked (e.g. 4HIV)
* Non-standard residues
* Protein (1BRR, 5Z6Y)
* DNA (5D3G)
* Collagen (6JEC)
* Multiple models with different sets of ligands or missing ligands (1J6T, 1VRC, 2ICY, 1O2F)
* Long linear sugar chain (4HG6)
* Anisotropic B-factors/Ellipsoids (1EJG)
@@ -34,7 +38,17 @@
* ACE (many, e.g. 5AGU, 1E1X)
* ACY in 7ABY
* NH2 (many, e.g. 6Y13)
Assembly symmetries
* 5M30 (Assembly 1, C3 local and pseudo)
* 1RB8 (Assembly 1, I global)
* Ligands with many rings
* STU (e.g. 1U59) - many fused rings
* HT (e.g. 127D) - rings connected by a single bond
* J2C (e.g. 7EFJ) - rings connected by a single atom
* RBF (e.g. 7QF2) - three linearly fused rings
* TA1 (e.g. 1JFF) - many fused rings (incl. a 8-member rings)
* BPA (e.g. 1JDG) - many fused rings
* CLR (e.g. 3GKI) - four fused rings
* Assembly symmetries
* 5M30 (Assembly 1, C3 local and pseudo)
* 1RB8 (Assembly 1, I global)
* Deuterium atoms
* 3CWH (XUL with D and DOD)
* 8TT8 (HOH and other with D)

View File

@@ -0,0 +1,193 @@
# Building a Custom Library
This page goes over creating a custom Mol\* based library usable inside a `<script>` tag in an HTML page using the `esbuild` tool.
## Setup
- Create a new npm/yarn package
- Install `molstar` and `esbuild` packages
```
mkdir molstar-lib
cd molstar-lib
npm init
npm install molstar
npm install esbuild --save-dev
```
## Example Library Code
Create new file `src/index.ts` (or `.js` if you don't want to use TypeScript):
```ts
import { DefaultPluginSpec, PluginSpec } from 'molstar/lib/mol-plugin/spec';
import { PluginContext } from 'molstar/lib/mol-plugin/context';
export async function initViewer(element: string | HTMLDivElement, options?: { spec?: PluginSpec }) {
const parent = typeof element === 'string' ? document.getElementById(element)! as HTMLDivElement : element;
const canvas = document.createElement('canvas') as HTMLCanvasElement;
parent.appendChild(canvas);
const spec = options?.spec ?? DefaultPluginSpec();
const plugin = new PluginContext(spec);
await plugin.init();
plugin.initViewer(canvas, parent);
return plugin;
}
export async function loadStructure(
plugin: PluginContext,
url: string,
options?: { format?: string, isBinary?: boolean }
) {
const data = await plugin.builders.data.download(
{ url, isBinary: options?.isBinary }
);
const trajectory = await plugin.builders.structure.parseTrajectory(
data,
options?.format ?? 'mmcif' as any
);
const preset = await plugin.builders.structure.hierarchy.applyPreset(trajectory, 'default');
return preset;
}
```
## Building the Library
Add new commands to the `scripts` section of the `package.json` file
```json
"scripts": {
"build": "esbuild src/index.ts --bundle --outfile=./build/js/index.js --global-name=molstarLib",
"watch": "esbuild src/index.ts --bundle --outfile=./build/js/index.js --global-name=molstarLib --watch"
}
```
and run the command `npm run build` (or `watch` for interactive development experience). This will create `build/js/index.js` file which can be imported with a `<script>` tag and the exported functions called view the `molstarLib` prefix (you can customize this parameter).
## Using the Library
Create file `build/index.html`:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<title>Mol* Library Example</title>
</head>
<style>
#viewer {
position: absolute;
width: 800px;
height: 600px;
}
</style>
<script type="text/javascript" src="./js/index.js"></script>
<body>
<div id="viewer"></div>
<script type="text/javascript">
async function init() {1
const plugin = await molstarLib.initViewer("viewer");
await molstarLib.loadStructure(
plugin,
"https://models.rcsb.org/4hhb.bcif",
{ isBinary: true }
);
}
init();
</script>
</body>
</html>
```
After opening `index.html` in a browser, you should see
![lib-example](lib-example.png)
## Using Mol* React UI
The above example does not make use of the default Mol\* React UI and any UI components are therefore the author's responsibility. The below examples show how to (re)use the Mol\* React UI.
- Create `src/ui.tsx`:
```tsx
import React from 'react';
import { createRoot } from 'react-dom/client';
import { DefaultPluginUISpec, PluginUISpec } from 'molstar/lib/mol-plugin-ui/spec';
import { PluginUIContext } from 'molstar/lib/mol-plugin-ui/context';
import { Plugin } from 'molstar/lib/mol-plugin-ui/plugin';
export async function initViewerUI(element: string | HTMLDivElement, options?: { spec?: PluginUISpec }) {
const parent = typeof element === 'string' ? document.getElementById(element)! as HTMLDivElement : element;
const spec = { ...DefaultPluginUISpec(), ...options?.spec };
const plugin = new PluginUIContext(spec);
await plugin.init();
createRoot(parent).render(<Plugin plugin={plugin} />)
return plugin;
}
export async function loadStructure(plugin: PluginUIContext, url: string, options?: { format?: string, isBinary?: boolean }) {
const data = await plugin.builders.data.download({ url, isBinary: options?.isBinary });
const trajectory = await plugin.builders.structure.parseTrajectory(data, options?.format ?? 'mmcif' as any);
await plugin.builders.structure.hierarchy.applyPreset(trajectory, 'default');
}
```
- Create `src/style.scss`:
```scss
@use '../node_modules/molstar/lib/mol-plugin-ui/skin/light.scss';
```
- Create `build/ui.html`:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<title>Mol* UI Library Example</title>
</head>
<link rel="stylesheet" type="text/css" href="css/style.css" />
<style>
#viewer {
position: absolute;
inset: 0;
}
</style>
<script type="text/javascript" src="./js/ui.js"></script>
<body>
<div id="viewer"></div>
<script type="text/javascript">
async function init() {
const plugin = await molstarLib.initViewerUI("viewer", {
spec: {
layout: {
initial: {
isExpanded: true,
showControls: true,
},
},
}
});
await molstarLib.loadStructure(plugin, "https://models.rcsb.org/4hhb.bcif", { isBinary: true });
}
init();
</script>
</body>
</html>
```
- Install `sass`: `npm install sass -save-dev` (or use [`esbuild` plugin](https://www.npmjs.com/package/esbuild-sass-plugin) and `import` the scss file in `ui.tsx`)
- Add scripts to `package.json`:
```json
"build-ui": "esbuild src/ui.tsx --bundle --outfile=./build/js/ui.js --global-name=molstarLib",
"css": "sass src/style.scss ./build/css/style.css"
```
- Run `npm run build-ui` and `npm run css` (skip if using `esbuild-sass-plugin`)
- Opening `build/ui.html`:
![ui-example](ui-example.png)

View File

@@ -23,7 +23,7 @@ interface Snapshot {
When defining the state object, all components are optional, i.e., it is possible to define just the ``data`` component.
Example state is available [here](example-state.json). In the plugin, it is possible to create and load these objects using ``Download JSON``
Example state is available [here](./example-state.json). In the plugin, it is possible to create and load these objects using ``Download JSON``
and ``Open JSON`` buttons in the ``State Snapshots`` section.
# State Tree
@@ -69,7 +69,7 @@ interface Transform.Props {
}
```
"Built-in" data state transforms and description of their parameters are defined in ``mol-plugin/state/transforms``. Behavior transforms are defined in ``mol-plugin/behavior``. Auto-generated documentation for the transforms is also [available](transforms.md).
"Built-in" data state transforms and description of their parameters are defined in ``mol-plugin/state/transforms``. Behavior transforms are defined in ``mol-plugin/behavior``.
# Animation State

View File

@@ -0,0 +1,3 @@
# Plugin Examples
Refer to Mol* [Apps](https://github.com/molstar/molstar/tree/master/src/apps) and [Examples](https://github.com/molstar/molstar/tree/master/src/examples).

View File

@@ -0,0 +1,44 @@
Support file formats and their extensions.
## Structure
- MMCIF and CIFCORE (mmCIF and coreCIF schemas): cif, bcif, mmcif, mcif
- GRO: gro
- MOL: mol
- MOL2: mol2
- PDB/PDBQT: pdb, ent, pdbqt
- SDF: sdf, sd
- XYZ: xyz
## Topology
Need to be loaded together with Coordinates.
- PRMTOP: prmtop, parm7
- PSF: psf
- TOP: top
## Coordinates
Need to be loaded together with a Structure or Topology.
- DCD: dcd
- NCTRAJ: nc, nctraj
- TRR: trr
- XTC: xtc
## Volume
- CCP4/MRC/MAP: ccp4, mrc, map
- CUBE (may include a Structure): cub, cube
- DSN6/BRIX: dsn6, brix
- DX and DXBIN: dx, dxbin
- DSCIF (DensityServer CIF schema): cif, bcif
## Shape
- PLY

View File

@@ -0,0 +1,301 @@
# Creating Plugin Instance
## Intro
What is a plugin? A plugin is a collection of modules that provide functionality to the `Mol*` UI. The plugin is responsible for managing the state of the viewer, internal and user interactions. It has been a previous point of confusion for new users of `Mol*` to associate the __viewer__ part of the library with what is further referred to as the __plugin__. These two are closely connected in the `molstar-plugin-ui` module, which is the user-facing part of the library and ultimately provides the viewer, but they are ultimately distinct.
It is recommended that you inspect the general class structure of [`PluginInitWrapper`](https://github.com/molstar/molstar/blob/6edbae80db340134341631f669eec86543a0f1a8/src/mol-plugin-ui/plugin.tsx#L41), [`PluginUIContext`](https://github.com/molstar/molstar/blob/6edbae80db340134341631f669eec86543a0f1a8/src/mol-plugin-ui/context.ts#L12) and [`PluginUIComponent`](https://github.com/molstar/molstar/blob/6edbae80db340134341631f669eec86543a0f1a8/src/mol-plugin-ui/base.tsx#L16) to better understand the flow of data and events in the plugin.
A passing analogy is that a [ `PluginContext` ](https://github.com/molstar/molstar/blob/6edbae80db340134341631f669eec86543a0f1a8/src/mol-plugin/context.ts#L71) is the engine that powers computation, rendering, events and subscriptions inside the molstar UI. All UI components depend on `PluginContext`.
There are 4 basic ways of instantiating the Mol* plugin.
## ``Viewer`` wrapper
- The most basic usage is to use the ``Viewer`` wrapper. This is best suited for use cases that do not require custom behavior and are mostly about just displaying a structure.
- See ``Viewer`` class is defined in [src/apps/viewer/app.ts](https://github.com/molstar/molstar/blob/master/src/apps/viewer/app.ts) for available methods
- See [options.ts](https://github.com/molstar/molstar/blob/master/src/apps/viewer/options.ts) for available plugin options
- See [embedded.html](https://github.com/molstar/molstar/blob/master/src/apps/viewer/embedded.html) and [mvs.html](https://github.com/molstar/molstar/blob/master/src/apps/viewer/mvs.html) for example usage
- Importing `molstar.js` will expose `molstar.lib` namespace that allow accessing various functionality without a bundler such as WebPack or esbuild. See the `mvs` example above for basic usage.
- Alternative color themes can be used by importing `theme/dark.css` (or `light/blue`) instead of `molstar.css`
### molstar.js and molstar.css sources
- Download `molstar` NPM package and use the files from `build/viewer` diractory
- Use `jsdelivr` CDN
- `<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/molstar@latest/build/viewer/molstar.js" />`
- `<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/molstar@latest/build/viewer/molstar.css" />`
- `@latest` can be replaced by a specific Mol* version, e.g., `@5.4.2`
- Clone & build the GitHub repository
- This option allows for quite straightforward extension customization, e.g., not including movie export, which reduces the bundle size by ~0.5MB
### Bundle size
By default, the `Viewer` includes all the available extensions. This increases the bundle size significantly, especially by including the `mp4-export`, which is responsible for almost `0.5MB` of compressed bundle size.
It is quite easy to reduce this bundle size by cloning the Mol\* repository, editing [extensions.ts](https://github.com/molstar/molstar/blob/master/src/apps/viewer/options.ts) and rebuilding it with `npm run build:apps`. The new build will be available
in the `build/viewer` directory (the JS file you will find there is uncompressed, but your hosting setup should include automatic gzip compression, significantly reducing the size).
Alternatively, you can explore building your own "viewer" using the base Mol\* library. For this, see the options below.
### Example
```HTML
<style>
#app {
position: absolute;
left: 100px;
top: 100px;
width: 800px;
height: 600px;
}
</style>
<!--
molstar.js and .css are obtained from
- the folder build/viewer after cloning and building the molstar package
- from the build/viewer folder in the Mol* NPM package
-->
<link rel="stylesheet" type="text/css" href="./molstar.css" />
<script type="text/javascript" src="./molstar.js"></script>
<div id="app"></div>
<script type="text/javascript">
molstar.Viewer.create('app', {
layoutIsExpanded: false,
layoutShowControls: false,
layoutShowRemoteState: false,
layoutShowSequence: true,
layoutShowLog: false,
layoutShowLeftPanel: true,
viewportShowExpand: true,
viewportShowSelectionMode: false,
viewportShowAnimation: false,
pdbProvider: 'rcsb',
emdbProvider: 'rcsb',
}).then(viewer => {
viewer.loadPdb('7bv2');
viewer.loadEmdb('EMD-30210', { detail: 6 });
});
</script>
```
### Using WebPack/esbuild/...
When using WebPack (or other bundler) with the Mol* NPM package installed, the viewer class can be imported using
```ts
import { Viewer } from 'molstar/lib/apps/viewer/app'
function initViewer(target: string | HTMLElement) {
return Viewer.create(target, { /* options */}) // returns a Promise
}
```
## ``PluginContext`` with built-in React UI
- For more customization options it is possible to use the [``PluginContext``](https://github.com/molstar/molstar/blob/master/src/mol-plugin/context.ts) directly.
- When creating the plugin instance it is possible to customize the [``PluginSpec``](https://github.com/molstar/molstar/blob/master/src/mol-plugin/spec.ts).
- The default [``PluginSpec``](https://github.com/molstar/molstar/blob/master/src/mol-plugin/spec.ts) is available [here](https://github.com/molstar/molstar/blob/master/src/mol-plugin/spec.ts).
- [``PluginConfig``](https://github.com/molstar/molstar/blob/master/src/mol-plugin/config.ts) object provides additional customization options.
- See the [Viewer State Management](viewer-state.md) section for more information on customizing things like background.
- See the [Data State Management](data-state.md) section for more information on build the state.
```ts
import { DefaultPluginUISpec, PluginUISpec } from 'molstar/lib/mol-plugin-ui/spec';
import { createPluginUI } from 'molstar/lib/mol-plugin-ui';
import { renderReact18 } from 'molstar/lib/mol-plugin-ui/react18';
import { PluginConfig } from 'molstar/lib/mol-plugin/config';
const MySpec: PluginUISpec = {
...DefaultPluginUISpec(),
config: [
[PluginConfig.VolumeStreaming.Enabled, false]
]
}
async function createPlugin(parent: HTMLElement) {
const plugin = await createPluginUI({
target: parent,
spec: MySpec,
render: renderReact18
});
const data = await plugin.builders.data.download({ url: '...' }, { state: { isGhost: true } });
const trajectory = await plugin.builders.structure.parseTrajectory(data, format);
await this.plugin.builders.structure.hierarchy.applyPreset(trajectory, 'default');
return plugin;
}
createPlugin(document.getElementById('app')!); // app is a <div> element with position: relative
```
To use the plugin (with the React UI) inside another React app:
A single-plugin setup is shown the example below. In order to initialize multiple
plugins, each with its own context and viewport, some extra steps are required (docs section to be added).
```ts
import { useEffect, createRef } from "react";
import { createPluginUI } from "molstar/lib/mol-plugin-ui";
import { renderReact18 } from "molstar/lib/mol-plugin-ui/react18";
import { PluginUIContext } from "molstar/lib/mol-plugin-ui/context";
/* Might require extra configuration,
see https://webpack.js.org/loaders/sass-loader/ for example.
create-react-app should support this natively. */
import "molstar/lib/mol-plugin-ui/skin/light.scss";
declare global {
interface Window {
molstar?: PluginUIContext;
}
}
export function MolStarWrapper() {
const parent = createRef<HTMLDivElement>();
// In debug mode of react's strict mode, this code will
// be called twice in a row, which might result in unexpected behavior.
useEffect(() => {
// By default, react will call each useEffect twice if using Strict mode in
// debug build, it is recommended to disable strict mode for this reason if possible
async function init() {
window.molstar = await createPluginUI({
target: parent.current as HTMLDivElement,
render: renderReact18
});
const data = await window.molstar.builders.data.download(
{ url: "https://files.rcsb.org/download/3PTB.pdb" }, /* replace with your URL */
{ state: { isGhost: true } }
);
const trajectory =
await window.molstar.builders.structure.parseTrajectory(data, "pdb");
await window.molstar.builders.structure.hierarchy.applyPreset(
trajectory,
"default"
);
}
init();
return () => {
window.molstar?.dispose();
window.molstar = undefined;
};
}, []);
return <div ref={parent} style={{ width: 640, height: 480 }}/>;
}
```
Furthermore, if it is desirable in your project to use the `molstar`'s React UI components, but you wish to alter or rearrange the layout, you should take a look at the signatures of [ `PluginUIComponent` ](https://github.com/molstar/molstar/blob/6edbae80db340134341631f669eec86543a0f1a8/src/mol-plugin-ui/base.tsx#L16) which every "control" subclasses.
[ `SequenceView` ](https://github.com/molstar/molstar/blob/6edbae80db340134341631f669eec86543a0f1a8/src/mol-plugin-ui/sequence.tsx#L221C4-L221C4), for example, can be used separately from the `PluginUI`. Yet you would need to pass the `PluginUIContext` to it in order for it to observe the changes in the state of the plugin. This can be done via a `PluginContextContainer`:
```typescript
// your_app.plugin: PluginUIContext
...
<div className="your_custom_ui">
<PluginContextContainer plugin={your_app.plugin}>
<SequenceView />
</PluginContextContainer>
</div>
```
## Directly using Mol* React UI
```ts
class MolStarWrapper {
private resolveInit: () => void;
initialized = new Promise<boolean>(res => { this.resolveInit = () => res(true); });
private initCalled = false;
plugin: PluginUIContext;
async init() {
if (this.initCalled) return;
this.initCalled = true;
this.plugin = ...;
await this.plugin.init();
this.resolveInit();
}
}
function MolStar({ model }: { model: MolStarWrapper }) {
const [initialized, setInitialized] = useState(false);
useEffect(() => {
async function init() {
await model.init();
setInitialized(true);
}
init();
}, [model]);
if (!initialized) return <>Loading</>;
return <div style={{ ..., position: 'relative' }}>
<Plugin plugin={model.plugin} />
</div>;
}
```
## ``PluginContext`` without built-in React UI
- The [``PluginContext``](https://github.com/molstar/molstar/blob/master/src/mol-plugin/context.ts) can be instantiated without using the default React UI.
```HTML
<div id='molstar-parent' style='position: absolute; top: 0; left: 0; right: 0; bottom: 0'>
<canvas id='molstar-canvas' style='position: absolute; top: 0; left: 0; right: 0; bottom: 0'></canvas>
</div>
```
```ts
import { DefaultPluginSpec, PluginSpec } from 'molstar/lib/mol-plugin/spec';
import { PluginContext } from 'molstar/lib/mol-plugin/context';
import { PluginConfig } from 'molstar/lib/mol-plugin/config';
const MySpec: PluginSpec = {
...DefaultPluginSpec(),
config: [
[PluginConfig.VolumeStreaming.Enabled, false]
]
}
async function init() {
const plugin = new PluginContext(MySpec);
await plugin.init();
const canvas = <HTMLCanvasElement> document.getElementById('molstar-canvas');
const parent = <HTMLDivElement> document.getElementById('molstar-parent');
if (!(await plugin.initViewerAsync(canvas, parent))) {
console.error('Failed to init Mol*');
return;
}
// Example url:"https://files.rcsb.org/download/3j7z.pdb"
// Example url:"https://files.rcsb.org/download/5AFI.cif"
const data = await plugin.builders.data.download({ url: '...' }, { state: { isGhost: true } });
const trajectory = await plugin.builders.structure.parseTrajectory(data, format); //format is 'mmcif' or 'pdb' etc.
await plugin.builders.structure.hierarchy.applyPreset(trajectory, 'default');
}
```
## ``Canvas3D`` without built-in state management
- The ``PluginContext`` object from the above examples can be completely omitted.
- See [Browser Tests](https://github.com/molstar/molstar/tree/master/src/tests/browser) for example usage.
```ts
const canvas = document.getElementById('canvas'); // parent <canvas> element
const canvas3d = Canvas3D.create(Canvas3DContext.fromCanvas(canvas));
canvas3d.animate();
// use the canvas3d object here
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

View File

@@ -0,0 +1,107 @@
# Markdown Extension Manager
The `markdownExtensions` manager in `PluginContext.manager` allows customizing
the `Markdown` React component to enable executing commands and rendering custom content.
The main use case of this is enriching [MolViewSpec](`https://molstar.org/mol-view-spec`) support.
## API
- `PluginContext.manager.markdownExtensions.register*` functions can be used to register extensions and state/data resolvers to make the the manager work with plugin extension
- `PluginContext.manager.markdownExtensions.remove*` can be used to dynamically remove the above
## Commands
Extends Markdown Hyperlink syntax to support expressions of the form `[title](!c1=v1&c2=v2&...)` into an executable command. The command can be executed either on click, mouse enter, or mouse leave.
Generally, the command should be URL encoded, e.g., `a b` => `a%20b` (in JS, `encodeURIComponent`, in Python `urllib.parse.quote_plus/urlencode`).
### Built-in Commands
- `center-camera` - Centers the camera
- `apply-snapshot=key` - Loads snapshots with the provided key
- `next-snapshot[=-1|1]` - Loads next/previous snapshot, the direction is optional and default to `1`
- `play-snapshots` - Starts playback of state snapshots
- `play-transition` - Plays an animation associated with the given snapshot
- `stop-animation` - Stops currently playing animation
- `focus-refs=ref1,ref2,...` - On click, focuses nodes with the provided refs
- `highlight-refs=ref1,ref2,...` - On mouse over, highlights the provided refs
- `query=...&lang=...&action=highlight,focus&focus-radius=...`
- `query` is an expression (e.g., `resn HEM` when using PyMol syntax)
- (optional) `lang` is one of `mol-script` (default), `pymol`, `vmd`, `jmol`
- (optional) `action` is an array of `highlight` (default), `focus` (multiple actions can be specified)
- (optional) `focus-radius` is extra distance applied when focusing the selection (default is `3`)
- Example: `[HEM](!query=resn%20HEM%26lang=pymol&action=highlight,focus)` highlights or focuses the HEM residue (the query must be URL encoded because it contains spaces and possibly other special characters)
- `play-audio=src`, `toggle-audio[=src]`, `stop-audio`, `pause-audio`, `dispose-audio` - Audio playback support
## Custom Content
Extends Markdown Image syntax to support expressions of the form `![alt](!c1=v1&c2=v2&...)` to render custom elements instead.
### Built-in Custom Content
- `color-swatch=color` - Renders a box with the provided color
- Color palettes:
- `color-palette-name=name` - Renders a gradient with the provided named color palette (see `mol-util/color/lists.ts` for supported color schemes)
- `color-palette-colors=color1,color2` - Renders a gradient with the provided colors
- `color-palette-width=CCS-value` - Specifies the width of the element, defaults to `150px`
- `color-palette-height=CCS-value` - Specified the height of the element, defaults to `0.5em`
- `color-palette-discrete` - Renders discrete color list instead of interpolating
## Example
```markdown
### Highlight/Focus:
- ![blue](!color-swatch=blue) [polymer](!highlight-refs=polymer&focus-refs=polymer)
- ![blue](!color-swatch=red) [ligand](!highlight-refs=ligand&focus-refs=ligand)
- [both](!highlight-refs=polymer,ligand&focus-refs=polymer,ligand)
### Color Palettes
|name|visual|
|---:|---|
|viridis|![viridis](!color-palette-name=viridis)|
|rainbow (discrete)|![simple-rainbow](!color-palette-name=simple-rainbow&color-palette-discrete)|
|custom|![custom](!color-palette-colors=red,#00ff00,rgb(0,0,255))|
### Camera controls
- [center](!center-camera)
### Image embedded in MVSX file
![mvsx image](logo.png)
```
This works with the MolViewSpec state built by:
```py
import molviewspec as mvs
builder = mvs.create_builder()
assets = {
"1cbs.cif": "https://files.wwpdb.org/download/1cbs.cif",
"logo.png": "https://molstar.org/img/molstar-logo.png",
}
model = (
builder.download(url="1cbs.cif")
.parse(format="mmcif")
.model_structure()
)
(
model.component(selector="polymer")
.representation(ref="polymer")
.color(color="blue")
)
(
model.component(selector="ligand")
.representation(ref="ligand")
.color(color="red")
)
mvsx = mvs.MVSX(
data=builder.get_state(
description="""...""" # inline the code above
),
assets=assets
)
```

View File

@@ -0,0 +1,190 @@
# Selections
## Basic Concepts
### Location
The selection model in Mol\* is based on a generic concept called *location*. A location is a pointer to a selectable element within a scene. For example:
- A structure element location (an atom or a coarse element) is an object composed of `{ structure: Structure, unit: Unit, element: UnitIndex }` (you can think of a `Unit` as a generalized chain)
- A bond location is very similar to structure element, requiring pointers to two units and elements
- A "shape" (generally a mesh) location consists of pointer to the parent shape and a group of triangles
### Loci
Structures and other renderable elements generally consist of many locations and simply using a list of locations would be
prohibitively expensive (e.g., large selections in structures with hundreds of thousands of atoms).
This is why Mol\* introduces
the concept of `Loci` &mdash; a compressed representation of multiple locations. Instead of having a list of structure element locations (`{ structure: Structure, unit: Unit, element: UnitIndex }[]`), the representation becomes (simplified) `{ structure: Structure, unit: Unit, elements: OrderedSet<UnitIndex> }`. The ordered set can be further compressed for continuous ranges, keeping only the index of the 1st and last element.
### Bundle
Locations and loci point to the raw JavaScript data structures representing the underlying molecules, making them not serializable in JSON. A *bundle* is a serializable version of the loci.
### Structure Queries
Defining selections directly using the loci would be very cumbersome. For this reason, Mol\* includes the [MolQl query language](https://molql.org) to help define selections.
## Selection Methods
Assuming you have a model already loaded into the plugin (see [Creating Plugin Instance](./instance.md)), these are some of the methods you can use to create selections.
### MolQL (`mol-script`) language
[MolQL](https://molql.org) (`mol-script`) is a language for addressing crystallographic structures and is a part of the Mol* library found at `https://github.com/molstar/molstar/tree/master/src/mol-script`. It can be used against the Molstar plugin as a query language and transpiled against multiple external molecular visualization libraries(see [here](https://github.com/molstar/molstar/tree/master/src/mol-script/transpilers)).
**Example:** Querying a structure for a specific chain and residue range
Select residues with `12<res_id<200 of chain with auth_asym_id=A`
```typescript
import { compileIdListSelection } from 'molstar/lib/mol-script/util/id-list'
const query = compileIdListSelection('A 12-200', 'auth');
window.molstar?.managers.structure.selection.fromCompiledQuery('add',query);
```
### Selection Queries
Another way to create a selection is via a `SelectionQuery` object. This is a more programmatic way to create a selection. The following example shows how to select a chain and a residue range using a `SelectionQuery` object.
This relies on the concept of `Expression` which is basically a intermediate representation between a Molscript statement and a selection query.
**Example:** Select residues 10-15 of chains A and F in a structure using a `SelectionQuery` object
```typescript
import { MolScriptBuilder as MS, MolScriptBuilder } from 'molstar/lib/mol-script/language/builder';
import { Expression } from 'molstar/lib/mol-script/language/expression';
import { StructureSelectionQuery } from 'molstar/lib/mol-plugin-state/helpers/structure-selection-query'
export function select_multiple() {
const args = [['A', 10, 15], ['F', 10, 15]]
const groups: Expression[] = [];
for (var chain of args) {
groups.push(MS.struct.generator.atomGroups({
'chain-test': MS.core.rel.eq([MolScriptBuilder.struct.atomProperty.macromolecular.auth_asym_id(), chain[0]]),
'residue-test': MS.core.rel.inRange([MolScriptBuilder.struct.atomProperty.macromolecular.label_seq_id(), chain[1], chain[2]])
}));
}
var sq = StructureSelectionQuery('residue_range_10_15_in_A_and_F', MS.struct.combinator.merge(groups))
mstar.managers.structure.selection.fromSelectionQuery('set', sq)
}
```
Complex queries can be constructed by combining primitive queries at the level of [`chain-test`, `residue-test`, `entity-test`, etc] (https://github.com/molstar/molstar/blob/6edbae80db340134341631f669eec86543a0f1a8/src/mol-script/language/symbol-table/structure-query.ts#L88C4-L94C112) by combining them via logical connectives provided in the `MolscriptBuilder.core.rel` as above.
Inspect these examples to get a better feeling for this syntax: `https://github.com/molstar/molstar/blob/6edbae80db340134341631f669eec86543a0f1a8/src/mol-plugin-state/helpers/structure-selection-query.ts#L88-L580`
Furthermore, a query made this way can be converted to a `Loci` object which is important in many parts of the libary:
```typescript
// Select residue 124 of chain A and convert to Loci
const Q = MolScriptBuilder;
var sel = Script.getStructureSelection(Q => Q.struct.generator.atomGroups({
'chain-test': Q.core.rel.eq([Q.struct.atomProperty.macromolecular.auth_asym_id(), A]),
'residue-test': Q.core.rel.eq([Q.struct.atomProperty.macromolecular.label_seq_id(), 124]),
}), objdata)
let loci = StructureSelection.toLociWithSourceUnits(sel);
```
### Query Functions
Instead of building expressions, query functions can be created directly, e.g.:
```ts
import { atoms } from 'mol-model/structure/query/queries/generators';
const query = atoms({
residueTest: ctx => {
const seqId = StructureProperties.residue.label_seq_id(ctx.element);
return seqId > 10 && seqId < 25;
},
});
const selection = query(new QueryContext(structure));
// ...
```
### Selection Schema
For simple selections, the `StructureElement.Schema` can be used to reference elements within a protein structure using mmCIF `atom_site` field names, e.g.:
```ts
const ala121: StructureElement.Schema = { label_asym_id: 'A', label_seq_id: 121 };
const residues: StructureElement.Schema = {
items: {
auth_asym_id: ['A', 'B'],
auth_seq_id: [10, 11],
}
};
const loci = StructureElement.Loci.fromSchema(structure, residues);
```
Usually, a code editor such as VS Code will auto-suggest all the available field names.
### Using the `hierarchy` manager
It is possible to select a subcomponent's data directly from the plugin manager.
```typescript
import { Structure } from '../mol-model/structure';
const ligandData = plugin.managers.structure.hierarchy.selection.structures[0]?.components[0]?.cell.obj?.data;
const ligandLoci = Structure.toStructureElementLoci(ligandData as any);
plugin.managers.camera.focusLoci(ligandLoci);
plugin.managers.interactivity.lociSelects.select({ loci: ligandLoci });
```
## Selection Events
If you want to subscribe to selection events (e.g. to change external state in your application based on a user selection), you can use: `plugin.behaviors.interaction.click.subscribe`
Here's an example of passing in a React "set" function to update selected residue positions.
```typescript
import {
Structure,
StructureProperties,
} from "molstar/lib/mol-model/structure"
// setSelected is assumed to be a "set" function returned by useState
// (selected: any[]) => void
plugin.behaviors.interaction.click.subscribe(
(event: InteractivityManager.ClickEvent) => {
const selections = Array.from(
plugin.managers.structure.selection.entries.values()
);
// This bit can be customized to record any piece information you want
const localSelected: any[] = [];
for (const { structure } of selections) {
if (!structure) continue;
Structure.eachAtomicHierarchyElement(structure, {
residue: (loc) => {
const position = StructureProperties.residue.label_seq_id(loc);
localSelected.push({ position });
},
});
}
setSelected(localSelected);
}
)
```
## Helper Functions
Given an `Expression`, `QueryFn`, or `StructureElement.Schema` it is possible to use `fromExpression/Query/Schema` functions on `StructureElement.Loci` and `StructureElement.Bundle`.
### `Viewer` app
The `Viewer` app provides the `structureInteractivity` function which allows easy selection/highlighting of the loaded structure. For example:
```ts
viewer.structureInteractivity({
elements: { beg_auth_seq_id: 10, end_auth_seq_id: 50 },
action: 'select',
});
```

View File

@@ -0,0 +1,152 @@
# Structure Superposition
Mol* provides utilities for superposing protein structures, including both sequence-independent (RMSD-based) and structure-based (TM-align) methods.
## RMSD-based Superposition
The basic superposition method uses the Kabsch algorithm to minimize RMSD between corresponding atoms:
```typescript
import { superpose } from 'molstar/lib/mol-model/structure/structure/util/superposition';
import { StructureSelection, QueryContext } from 'molstar/lib/mol-model/structure';
import { compile } from 'molstar/lib/mol-script/runtime/query/compiler';
import { MolScriptBuilder as MS } from 'molstar/lib/mol-script/language/builder';
// Create a query for C-alpha atoms
const caQuery = compile<StructureSelection>(MS.struct.generator.atomGroups({
'atom-test': MS.core.rel.eq([MS.struct.atomProperty.macromolecular.label_atom_id(), 'CA'])
}));
// Get selections from two structures
const sel1 = StructureSelection.toLociWithCurrentUnits(caQuery(new QueryContext(structure1)));
const sel2 = StructureSelection.toLociWithCurrentUnits(caQuery(new QueryContext(structure2)));
// Compute superposition (returns transformation matrices)
const transforms = superpose([sel1, sel2]);
// transforms[0].bTransform contains the Mat4 to superpose structure2 onto structure1
```
## TM-align Superposition
TM-align is a structure-based alignment algorithm that produces the TM-score, a length-independent metric for comparing protein structures. Unlike RMSD, TM-score is normalized to [0, 1] and is more robust for comparing proteins of different sizes.
### Basic Usage
```typescript
import { tmAlign } from 'molstar/lib/mol-model/structure/structure/util/tm-align';
import { StructureElement } from 'molstar/lib/mol-model/structure';
// Get C-alpha Loci from two structures (see selection examples above)
const loci1: StructureElement.Loci = /* ... */;
const loci2: StructureElement.Loci = /* ... */;
// Run TM-align
const result = tmAlign(loci1, loci2);
console.log('TM-score (normalized by structure 1):', result.tmScoreA);
console.log('TM-score (normalized by structure 2):', result.tmScoreB);
console.log('RMSD:', result.rmsd);
console.log('Aligned residues:', result.alignedLength);
// result.bTransform is a Mat4 to transform structure2 onto structure1
```
### TM-align Result
The `tmAlign` function returns a `TMAlignResult` object with the following properties:
| Property | Type | Description |
|----------|------|-------------|
| `bTransform` | `Mat4` | Transformation matrix to superpose structure B onto A |
| `tmScoreA` | `number` | TM-score normalized by length of structure A |
| `tmScoreB` | `number` | TM-score normalized by length of structure B |
| `rmsd` | `number` | RMSD of aligned residue pairs (in Angstroms) |
| `alignedLength` | `number` | Number of aligned residue pairs |
| `sequenceIdentity` | `number` | Sequence identity of aligned residues (0-1) |
| `alignmentA` | `number[]` | Indices of aligned residues in structure A |
| `alignmentB` | `number[]` | Indices of aligned residues in structure B |
### Understanding TM-score
The TM-score is calculated as:
$$\text{TM-score} = \frac{1}{L} \sum_{i=1}^{L_{ali}} \frac{1}{1 + (d_i/d_0)^2}$$
Where:
- $L$ is the length of the reference protein
- $L_{ali}$ is the number of aligned residues
- $d_i$ is the distance between the $i$-th pair of aligned residues after superposition
- $d_0 = 1.24 \sqrt[3]{L - 15} - 1.8$ is a length-dependent normalization factor
**TM-score interpretation:**
- TM-score > 0.5: Generally indicates proteins with the same fold
- TM-score > 0.17: Generally indicates proteins with random structural similarity
### Low-level API
For direct coordinate-based alignment without structures, use the `TMAlign` namespace:
```typescript
import { TMAlign } from 'molstar/lib/mol-math/linear-algebra/3d/tm-align';
// Create position arrays
const posA = TMAlign.Positions.empty(lengthA);
const posB = TMAlign.Positions.empty(lengthB);
// Fill in coordinates
for (let i = 0; i < lengthA; i++) {
posA.x[i] = /* x coordinate */;
posA.y[i] = /* y coordinate */;
posA.z[i] = /* z coordinate */;
}
// ... similarly for posB
// Compute alignment
const result = TMAlign.compute({ a: posA, b: posB });
```
### Complete Example: Aligning Two PDB Structures
```typescript
import { PluginContext } from 'molstar/lib/mol-plugin/context';
import { MolScriptBuilder as MS } from 'molstar/lib/mol-script/language/builder';
import { compile } from 'molstar/lib/mol-script/runtime/query/compiler';
import { StructureSelection, QueryContext, StructureElement } from 'molstar/lib/mol-model/structure';
import { tmAlign } from 'molstar/lib/mol-model/structure/structure/util/tm-align';
import { StateTransforms } from 'molstar/lib/mol-plugin-state/transforms';
import { Mat4 } from 'molstar/lib/mol-math/linear-algebra';
async function alignStructures(plugin: PluginContext, structure1: any, structure2: any) {
// Query for C-alpha atoms in chain A
const caQuery = compile<StructureSelection>(MS.struct.generator.atomGroups({
'chain-test': MS.core.rel.eq([MS.struct.atomProperty.macromolecular.auth_asym_id(), 'A']),
'atom-test': MS.core.rel.eq([MS.struct.atomProperty.macromolecular.label_atom_id(), 'CA'])
}));
// Get structure data
const data1 = structure1.cell?.obj?.data;
const data2 = structure2.cell?.obj?.data;
// Create selections
const sel1 = StructureSelection.toLociWithCurrentUnits(caQuery(new QueryContext(data1)));
const sel2 = StructureSelection.toLociWithCurrentUnits(caQuery(new QueryContext(data2)));
// Run TM-align
const result = tmAlign(sel1, sel2);
// Apply transformation to structure2
const b = plugin.state.data.build().to(structure2)
.insert(StateTransforms.Model.TransformStructureConformation, {
transform: { name: 'matrix', params: { data: result.bTransform, transpose: false } }
});
await plugin.runTask(plugin.state.data.updateTree(b));
return result;
}
```
## References
- Zhang Y, Skolnick J. "TM-align: a protein structure alignment algorithm based on the TM-score." *Nucleic Acids Research* 33, 2302-2309 (2005). DOI: [10.1093/nar/gki524](https://doi.org/10.1093/nar/gki524)
- Kabsch W. "A solution for the best rotation to relate two sets of vectors." *Acta Crystallographica* A32, 922-923 (1976).

View File

@@ -0,0 +1,45 @@
# Assign custom conformation to a Model
This document shows how to update model conformation dynamically using the `ModelWithCoordinates` transforms. If this does not work well with your particular use case, it is suggested to write a custom version of `ModelWithCoordinates` with similar usage as outlined in this document.
```ts
async function animateFirstXCoordinateExample(plugin: PluginContext, url: string, format: BuiltInTrajectoryFormat) {
// Load data
const _data = await plugin.builders.data.download({ url });
const trajectory = await plugin.builders.structure.parseTrajectory(_data, format);
const hierarchy = await this.plugin.builders.structure.hierarchy.applyPreset(trajectory, 'default');
if (!hierarchy) return;
// Insert ModelWithCoordinates cell to be updated in the loop bellow
const coordinatesNode = await plugin.build().to(hierarchy!.model).insert(ModelWithCoordinates).commit();
const x0 = hierarchy!.model.data!.atomicConformation.x[0];
let xOffset = 0;
async function animateFirstXCoord() {
// Normally, the whole conformation would come from an API/library call, but here we fake it:
const { x, y, z } = hierarchy!.model.data!.atomicConformation;
const nextX = [...(x as number[])];
nextX[0] = x0 + xOffset;
xOffset += 0.05;
if (xOffset > 1) xOffset = 0;
// Construct new coodinate frame from the data and commit the update.
// Rest of the state tree will reconcile automatically.
await plugin.build().to(coordinatesNode).update({
atomicCoordinateFrame: {
elementCount: x.length,
time: { value: 0, unit: 'step' },
xyzOrdering: { isIdentity: true },
x: nextX,
y,
z,
}
}).commit();
requestAnimationFrame(animateFirstXCoord);
}
animateFirstXCoord();
}
// animateFirstXCoordinateExample('https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/CID/2244/record/SDF/?record_type=3d', 'sdf');
```

View File

@@ -0,0 +1,72 @@
# Load Trajectory from a Custom Format
This section shows a high level example for loading trajectory from custom data in specialized plugin instances. A more complete solution is available for example in form of the [G3D format extension](https://github.com/molstar/molstar/tree/master/src/extensions/g3d).
## Defining and Using a Custom Transformer
```ts
import { StateTransformer } from 'molstar/lib/mol-state';
const CreateTransformer = StateTransformer.builderFactory('custom-namespace');
export interface CustomTrajectoryData {
// ...
}
export const TrajectoryFromCustomData = CreateTransformer({
name: 'trajectory-from-custom-data',
display: 'Trajectory',
from: PluginStateObject.Root,
to: PluginStateObject.Molecule.Trajectory,
params: {
data: PD.Value<CustomTrajectoryData>(void 0 as any, { isHidden: true }),
},
})({
apply({ params }) {
return Task.create('Trajectory', async (ctx) => {
const models = await customParse(params.data, ctx);
return new PluginStateObject.Molecule.Trajectory(models, {
label: 'Trajectory',
});
});
},
});
```
The ``customParse`` function can usually be implemented
by modifying/extending an [existing parser already available in Mol*](https://github.com/molstar/molstar/tree/master/src/mol-model-formats/structure).
To use the transformer:
```ts
const data: CustomTrajectoryData = await (await fetch(url)).json();
const trajectory = await plugin.build().toRoot().apply(TrajectoryFromCustomData, { data }).commit();
// Create the representation
await plugin.builders.structure.hierarchy.applyPreset(trajectory, 'default');
```
## Using Mol* to Download the Data
```ts
export const TrajectoryFromCustomData = CreateTransformer({
name: 'trajectory-from-custom-data',
display: 'Trajectory',
from: PluginStateObject.Data.String, // or PluginStateObject.Data.Binary
to: PluginStateObject.Molecule.Trajectory,
})({
apply({ a }) {
return Task.create('Trajectory', async (ctx) => {
const models = await customParse(a.data, ctx);
return new PluginStateObject.Molecule.Trajectory(models, {
label: 'Trajectory',
});
});
},
});
//////////////
const data = await plugin.builders.data.download({ url, isBinary });
const trajectory = await plugin.build().to(data).apply(TrajectoryFromCustomData, { data }).commit();
await plugin.builders.structure.hierarchy.applyPreset(trajectory, 'default');
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 KiB

View File

@@ -0,0 +1,132 @@
# Viewer State Management
## ``Canvas3D`` Properties
Properties of the [``Canvas3D``](https://github.com/molstar/molstar/blob/master/src/mol-canvas3d/canvas3d.ts) can be
changed using [``PluginCommands``](https://github.com/molstar/molstar/blob/master/src/mol-plugin/commands.ts).
### Change background, highlight, or select color
```ts
import { ColorNames } from 'molstar/lib/mol-util/color/names';
import { PluginCommands } from 'molstar/lib/mol-plugin/commands';
const renderer = plugin.canvas3d!.props.renderer;
PluginCommands.Canvas3D.SetSettings(plugin, { settings: { renderer: { ...renderer, backgroundColor: ColorNames.red /* or: 0xff0000 as Color */ } } });
```
Similarly, `highlightColor` and `selectColor` can be updated.
## Interactivity
Interactivity in Mol* is based on the concept of ``Loci``. A ``Loci`` usually references a collection of objects and can be created by a [``Selection``](selections.md). For example, the
``Loci`` captures all atoms in the chain with label_asym_id B of a protein:
```ts
import { Script } from 'molstar/lib/mol-script/script';
import { StructureSelection } from 'molstar/lib/mol-model/structure/query';
const data = plugin.managers.structure.hierarchy.current.structures[0]?.cell.obj?.data;
if (!data) return;
const selection = Script.getStructureSelection(Q => Q.struct.generator.atomGroups({
'chain-test': Q.core.rel.eq(['B', Q.ammp('label_asym_id')])
}), data);
const loci = StructureSelection.toLociWithSourceUnits(selection);
```
A ``Loci`` can be used to trigger custom [``Behaviors``](#behaviors).
### Log message to Mol* console
The built-in console in the bottom center of the plugin shows log entries.
```ts
plugin.log.message('This message will appear in the Mol* console');
```
Other log levels are: `info`, `warn`, and `error`.
### Show toast message
Toast messages will appear in the bottom right of the plugin and will linger for a limited time before disappearing.
```ts
import { PluginCommands } from 'molstar/lib/mol-plugin/commands';
PluginCommands.Toast.Show(plugin, {
title: 'Custom Message',
message: 'A custom toast message that will disappear after 2 seconds.',
key: 'toast-custom',
timeoutMs: 2000
});
```
## Behaviors
The state of the Mol* plugin is usually governed by dynamic behaviors which can be set up in initial plugin specification or updated during the plugin runtime. This allows for high modularity and customizability of individual plugin instances.
### Highlight ``Loci``
Highlighting adds a transient overpaint to a representation that will linger until the mouse enters hovers over another
object. Highlights can be applied to a previously defined ``Loci`` by:
```ts
plugin.managers.interactivity.lociHighlights.highlightOnly({ loci }); // loci: Loci
```
Reset all highlights by:
```ts
plugin.managers.interactivity.clearHighlights();
```
### Select ``Loci``
Selected elements will appear with distinct visuals and, if applicable, the corresponding sequence positions will be
shown in the Sequence Viewer panel. Selections persist until removed, for example by clicking the background. A ``Loci``
is selected by:
```ts
plugin.managers.interactivity.lociSelects.select({ loci }); // loci: Loci
```
Deselect a specific ``Loci`` by:
```ts
plugin.managers.interactivity.lociSelects.deselect({ loci }); // loci: Loci
```
To deselect everything:
```ts
plugin.managers.interactivity.lociSelects.deselectAll();
```
### Focus ``Loci``
The focus representation shows a ``Loci`` in ball-and-stick representation and, additionally, visualizes non-covalent
interactions between atoms of the ``Loci`` as well as interactions with surrounding residues (default: 5 Å).
```ts
plugin.managers.structure.focus.setFromLoci(loci);
```
Extend an existing focus representation by:
```ts
plugin.managers.structure.focus.addFromLoci(loci); // loci: Loci
```
Reset by:
```ts
plugin.managers.structure.focus.clear();
```
### Zoom ``Loci``
A ``Loci`` can also be used to manipulate the camera. Zoom in by:
```ts
plugin.managers.camera.focusLoci(loci); // loci: Loci
```
Restore the default camera position by:
```ts
plugin.managers.camera.reset();
```
### Turn off view resetting on new representations
A new representation via something like
```ts
.apply(StateTransforms.Representation.VolumeRepresentation3D, ...)
```
can reset the view to make the whole representation visible.
When one wants to keep the view the same instead of having the rep reset the view,
keep the view constant by:
```ts
plugin.canvas3d?.setProps({ camera: { manualReset: true } });
```

65
docs/mkdocs.yml Normal file
View File

@@ -0,0 +1,65 @@
site_name: Mol* Developer Documentation
theme:
name: material
# 404 page
static_templates:
- 404.html
# Necessary for search to work properly
include_search_page: false
search_index_only: true
# Default values, taken from mkdocs_theme.yml
language: en
font:
text: Roboto
code: Roboto Mono
favicon: assets/favicon.png
icon:
logo: logo
markdown_extensions:
- pymdownx.highlight
- pymdownx.superfences
- pymdownx.arithmatex:
generic: true
# Scripts for rendering Latex equations (in addition to pymdownx.arithmatex):
extra_javascript:
- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
nav:
- 'index.md'
- Plugin:
- Creating Instance: 'plugin/instance.md'
- Examples: plugin/examples.md
- Custom Library: 'plugin/custom-library.md'
- Selections: 'plugin/selections.md'
- Superposition: 'plugin/superposition.md'
- Viewer State: 'plugin/viewer-state.md'
- Data State: 'plugin/data-state.md'
- File Formats: 'plugin/file-formats.md'
- CIF Schemas: 'plugin/cif-schemas.md'
- Managers:
- Markdown Extensions: 'plugin/managers/markdown-extensions.md'
- State Transforms:
- Custom Trajectory: 'plugin/transforms/custom-trajectory.md'
- Custom Conformation: 'plugin/transforms/custom-conformation.md'
- Data Access Tools:
- 'data-access-tools/model-server.md'
- Volume Server:
- Overview: 'data-access-tools/volume-server/index.md'
- Examples: 'data-access-tools/volume-server/examples.md'
- How it Works: 'data-access-tools/volume-server/how-it-works.md'
- Data Format: 'data-access-tools/volume-server/response-data-format.md'
- 'data-access-tools/plugin-state-server.md'
- 'data-access-tools/convert-to-bcif.md'
- 'data-access-tools/create-ccd-table.md'
- 'data-access-tools/extract-ccd-ions.md'
- Extensions:
- MolViewSpec: 'extensions/mvs/index.md'
- wwPDB StructConn: 'extensions/struct-conn.md'
- Tunnels: 'extensions/tunnels.md'
- Interactions: 'extensions/interactions.md'
- Misc:
- Interesting PDB entries: misc/interesting-pdb-entries.md
- Exporting component data: misc/exporting-components.md
repo_url: https://github.com/molstar/docs

View File

@@ -1,69 +0,0 @@
Model Server
============
Model Server is a tool for preprocessing and querying macromolecular structure data.
Installing and Running
=====================
Requires nodejs 8+.
## From GitHub
```
git clone https://github.com/molstar/molstar
npm install
```
Afterwards, build the project source:
```
npm run build-tsc
```
and run the server by
```
node lib/commonjs/servers/model/server/server
```
## From NPM
```
npm install --production molstar
./model-server
```
(or ``node node_modules\.bin\model-server`` in Windows).
The NPM package contains all the tools mentioned here as "binaries":
- ``model-server``
- ``model-server-query``
- ``model-server-preprocess``
### Production use
In production it is required to use a service that will keep the server running, such as [forever.js](https://github.com/foreverjs/forever).
### Memory issues
Sometimes nodejs might run into problems with memory. This is usually resolved by adding the ``--max-old-space-size=8192`` parameter.
## Preprocessor
The preprocessor application allows to add custom data to CIF files and/or convert CIF to BinaryCIF. ``node lib/commonjs/servers/model/preprocess`` or ``model-server-preprocess`` binary from the NPM package.
## Local Mode
The server can be run in local/file based mode using ``node lib/commonjs/servers/model/query`` (``model-server-query`` binary from the NPM package).
Custom Properties
=================
This feature is still in development.
It is possible to provide property descriptors that transform data to internal representation and define how it should be exported into one or mode CIF categories. Examples of this are located in the ``mol-model-props`` module and are linked to the server in the config and ``servers/model/properties``.

View File

@@ -1,738 +0,0 @@
# Mol* Plugin State Transformer Reference
* [build-in.root](#build-in-root)
* [ms-plugin.download](#ms-plugin-download)
* [ms-plugin.read-file](#ms-plugin-read-file)
* [ms-plugin.parse-cif](#ms-plugin-parse-cif)
* [ms-plugin.parse-ccp4](#ms-plugin-parse-ccp4)
* [ms-plugin.parse-dsn6](#ms-plugin-parse-dsn6)
* [ms-plugin.trajectory-from-mmcif](#ms-plugin-trajectory-from-mmcif)
* [ms-plugin.trajectory-from-pdb](#ms-plugin-trajectory-from-pdb)
* [ms-plugin.model-from-trajectory](#ms-plugin-model-from-trajectory)
* [ms-plugin.structure-from-model](#ms-plugin-structure-from-model)
* [ms-plugin.structure-assembly-from-model](#ms-plugin-structure-assembly-from-model)
* [ms-plugin.structure-symmetry-from-model](#ms-plugin-structure-symmetry-from-model)
* [ms-plugin.structure-selection](#ms-plugin-structure-selection)
* [ms-plugin.structure-complex-element](#ms-plugin-structure-complex-element)
* [ms-plugin.custom-model-properties](#ms-plugin-custom-model-properties)
* [ms-plugin.volume-from-ccp4](#ms-plugin-volume-from-ccp4)
* [ms-plugin.volume-from-dsn6](#ms-plugin-volume-from-dsn6)
* [ms-plugin.representation-highlight-loci](#ms-plugin-representation-highlight-loci)
* [ms-plugin.representation-select-loci](#ms-plugin-representation-select-loci)
* [ms-plugin.default-loci-label-provider](#ms-plugin-default-loci-label-provider)
* [ms-plugin.structure-representation-3d](#ms-plugin-structure-representation-3d)
* [ms-plugin.explode-structure-representation-3d](#ms-plugin-explode-structure-representation-3d)
* [ms-plugin.volume-representation-3d](#ms-plugin-volume-representation-3d)
* [ms-plugin.focus-loci-on-select](#ms-plugin-focus-loci-on-select)
* [ms-plugin.pdbe-structure-quality-report-prop](#ms-plugin-pdbe-structure-quality-report-prop)
* [ms-plugin.rcsb-assembly-symmetry-prop](#ms-plugin-rcsb-assembly-symmetry-prop)
* [ms-plugin.structure-animation](#ms-plugin-structure-animation)
* [ms-plugin.scene-labels](#ms-plugin-scene-labels)
----------------------------
## <a name="build-in-root"></a>build-in.root :: () -> ()
*For internal use.*
----------------------------
## <a name="ms-plugin-download"></a>ms-plugin.download :: Root -> String | Binary
*Download string or binary data from the specified URL*
### Parameters
- **url**: String *(Resource URL. Must be the same domain or support CORS.)*
- **label**?: String
- **isBinary**?: true/false *(If true, download data as binary (string otherwise))*
### Default Parameters
```js
{
"url": "https://www.ebi.ac.uk/pdbe/static/entry/1cbs_updated.cif"
}
```
----------------------------
## <a name="ms-plugin-read-file"></a>ms-plugin.read-file :: Root -> String | Binary
*Read string or binary data from the specified file*
### Parameters
- **file**: JavaScript File Handle
- **label**?: String
- **isBinary**?: true/false *(If true, open file as as binary (string otherwise))*
### Default Parameters
```js
{}
```
----------------------------
## <a name="ms-plugin-parse-cif"></a>ms-plugin.parse-cif :: String | Binary -> Cif
*Parse CIF from String or Binary data*
----------------------------
## <a name="ms-plugin-parse-ccp4"></a>ms-plugin.parse-ccp4 :: Binary -> Ccp4
*Parse CCP4/MRC/MAP from Binary data*
----------------------------
## <a name="ms-plugin-parse-dsn6"></a>ms-plugin.parse-dsn6 :: Binary -> Dsn6
*Parse CCP4/BRIX from Binary data*
----------------------------
## <a name="ms-plugin-trajectory-from-mmcif"></a>ms-plugin.trajectory-from-mmcif :: Cif -> Trajectory
*Identify and create all separate models in the specified CIF data block*
### Parameters
- **blockHeader**?: String *(Header of the block to parse. If none is specifed, the 1st data block in the file is used.)*
### Default Parameters
```js
{}
```
----------------------------
## <a name="ms-plugin-trajectory-from-pdb"></a>ms-plugin.trajectory-from-pdb :: String -> Trajectory
----------------------------
## <a name="ms-plugin-model-from-trajectory"></a>ms-plugin.model-from-trajectory :: Trajectory -> Model
*Create a molecular structure from the specified model.*
### Parameters
- **modelIndex**: Numeric value *(Zero-based index of the model)*
### Default Parameters
```js
{
"modelIndex": 0
}
```
----------------------------
## <a name="ms-plugin-structure-from-model"></a>ms-plugin.structure-from-model :: Model -> Structure
*Create a molecular structure from the specified model.*
----------------------------
## <a name="ms-plugin-structure-assembly-from-model"></a>ms-plugin.structure-assembly-from-model :: Model -> Structure
*Create a molecular structure assembly.*
### Parameters
- **id**?: String *(Assembly Id. Value 'deposited' can be used to specify deposited asymmetric unit.)*
### Default Parameters
```js
{}
```
----------------------------
## <a name="ms-plugin-structure-symmetry-from-model"></a>ms-plugin.structure-symmetry-from-model :: Model -> Structure
*Create a molecular structure symmetry.*
### Parameters
- **ijkMin**: 3D vector [x, y, z]
- **ijkMax**: 3D vector [x, y, z]
### Default Parameters
```js
{
"ijkMin": [
-1,
-1,
-1
],
"ijkMax": [
1,
1,
1
]
}
```
----------------------------
## <a name="ms-plugin-structure-selection"></a>ms-plugin.structure-selection :: Structure -> Structure
*Create a molecular structure from the specified query expression.*
### Parameters
- **query**: Value
- **label**?: String
### Default Parameters
```js
{}
```
----------------------------
## <a name="ms-plugin-structure-complex-element"></a>ms-plugin.structure-complex-element :: Structure -> Structure
*Create a molecular structure from the specified model.*
### Parameters
- **type**: One of 'atomic-sequence', 'water', 'atomic-het', 'spheres'
### Default Parameters
```js
{
"type": "atomic-sequence"
}
```
----------------------------
## <a name="ms-plugin-custom-model-properties"></a>ms-plugin.custom-model-properties :: Model -> Model
### Parameters
- **properties**: Array of *(A list of property descriptor ids.)*
### Default Parameters
```js
{
"properties": []
}
```
----------------------------
## <a name="ms-plugin-volume-from-ccp4"></a>ms-plugin.volume-from-ccp4 :: Ccp4 -> Data
*Create Volume from CCP4/MRC/MAP data*
### Parameters
- **voxelSize**: 3D vector [x, y, z]
### Default Parameters
```js
{
"voxelSize": [
1,
1,
1
]
}
```
----------------------------
## <a name="ms-plugin-volume-from-dsn6"></a>ms-plugin.volume-from-dsn6 :: Dsn6 -> Data
*Create Volume from DSN6/BRIX data*
### Parameters
- **voxelSize**: 3D vector [x, y, z]
### Default Parameters
```js
{
"voxelSize": [
1,
1,
1
]
}
```
----------------------------
## <a name="ms-plugin-representation-highlight-loci"></a>ms-plugin.representation-highlight-loci :: Root -> Behavior
----------------------------
## <a name="ms-plugin-representation-select-loci"></a>ms-plugin.representation-select-loci :: Root -> Behavior
----------------------------
## <a name="ms-plugin-default-loci-label-provider"></a>ms-plugin.default-loci-label-provider :: Root -> Behavior
----------------------------
## <a name="ms-plugin-structure-representation-3d"></a>ms-plugin.structure-representation-3d :: Structure -> Representation3D
### Parameters
- **type**: Object { name: string, params: object } where name+params are:
- **cartoon**:
Object with:
- **alpha**: Numeric value
- **useFog**: true/false
- **highlightColor**: Color as 0xrrggbb
- **selectColor**: Color as 0xrrggbb
- **quality**: One of 'custom', 'auto', 'highest', 'higher', 'high', 'medium', 'low', 'lower', 'lowest'
- **doubleSided**: true/false
- **flipSided**: true/false
- **flatShaded**: true/false
- **unitKinds**: Array of 'atomic', 'spheres', 'gaussians'
- **sizeFactor**: Numeric value
- **linearSegments**: Numeric value
- **radialSegments**: Numeric value
- **aspectRatio**: Numeric value
- **arrowFactor**: Numeric value
- **visuals**: Array of 'polymer-trace', 'polymer-gap', 'nucleotide-block', 'direction-wedge'
- **ball-and-stick**:
Object with:
- **alpha**: Numeric value
- **useFog**: true/false
- **highlightColor**: Color as 0xrrggbb
- **selectColor**: Color as 0xrrggbb
- **quality**: One of 'custom', 'auto', 'highest', 'higher', 'high', 'medium', 'low', 'lower', 'lowest'
- **doubleSided**: true/false
- **flipSided**: true/false
- **flatShaded**: true/false
- **unitKinds**: Array of 'atomic', 'spheres', 'gaussians'
- **sizeFactor**: Numeric value
- **detail**: Numeric value
- **linkScale**: Numeric value
- **linkSpacing**: Numeric value
- **radialSegments**: Numeric value
- **sizeAspectRatio**: Numeric value
- **visuals**: Array of 'element-sphere', 'intra-link', 'inter-link'
- **carbohydrate**:
Object with:
- **alpha**: Numeric value
- **useFog**: true/false
- **highlightColor**: Color as 0xrrggbb
- **selectColor**: Color as 0xrrggbb
- **quality**: One of 'custom', 'auto', 'highest', 'higher', 'high', 'medium', 'low', 'lower', 'lowest'
- **doubleSided**: true/false
- **flipSided**: true/false
- **flatShaded**: true/false
- **unitKinds**: Array of 'atomic', 'spheres', 'gaussians'
- **detail**: Numeric value
- **sizeFactor**: Numeric value
- **linkScale**: Numeric value
- **linkSpacing**: Numeric value
- **radialSegments**: Numeric value
- **linkSizeFactor**: Numeric value
- **visuals**: Array of 'carbohydrate-symbol', 'carbohydrate-link', 'carbohydrate-terminal-link'
- **distance-restraint**:
Object with:
- **alpha**: Numeric value
- **useFog**: true/false
- **highlightColor**: Color as 0xrrggbb
- **selectColor**: Color as 0xrrggbb
- **quality**: One of 'custom', 'auto', 'highest', 'higher', 'high', 'medium', 'low', 'lower', 'lowest'
- **doubleSided**: true/false
- **flipSided**: true/false
- **flatShaded**: true/false
- **unitKinds**: Array of 'atomic', 'spheres', 'gaussians'
- **linkScale**: Numeric value
- **linkSpacing**: Numeric value
- **radialSegments**: Numeric value
- **sizeFactor**: Numeric value
- **molecular-surface**:
Object with:
- **alpha**: Numeric value
- **useFog**: true/false
- **highlightColor**: Color as 0xrrggbb
- **selectColor**: Color as 0xrrggbb
- **quality**: One of 'custom', 'auto', 'highest', 'higher', 'high', 'medium', 'low', 'lower', 'lowest'
- **doubleSided**: true/false
- **flipSided**: true/false
- **flatShaded**: true/false
- **unitKinds**: Array of 'atomic', 'spheres', 'gaussians'
- **resolution**: Numeric value
- **radiusOffset**: Numeric value
- **smoothness**: Numeric value
- **useGpu**: true/false
- **ignoreCache**: true/false
- **sizeFactor**: Numeric value
- **lineSizeAttenuation**: true/false
- **visuals**: Array of 'gaussian-surface', 'gaussian-wireframe'
- **molecular-volume**:
Object with:
- **alpha**: Numeric value
- **useFog**: true/false
- **highlightColor**: Color as 0xrrggbb
- **selectColor**: Color as 0xrrggbb
- **quality**: One of 'custom', 'auto', 'highest', 'higher', 'high', 'medium', 'low', 'lower', 'lowest'
- **isoValueNorm**: Numeric value *(Normalized Isolevel Value)*
- **renderMode**: One of 'isosurface', 'volume'
- **controlPoints**: A list of 2d vectors [xi, yi][]
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **unitKinds**: Array of 'atomic', 'spheres', 'gaussians'
- **resolution**: Numeric value
- **radiusOffset**: Numeric value
- **smoothness**: Numeric value
- **point**:
Object with:
- **alpha**: Numeric value
- **useFog**: true/false
- **highlightColor**: Color as 0xrrggbb
- **selectColor**: Color as 0xrrggbb
- **quality**: One of 'custom', 'auto', 'highest', 'higher', 'high', 'medium', 'low', 'lower', 'lowest'
- **sizeFactor**: Numeric value
- **pointSizeAttenuation**: true/false
- **pointFilledCircle**: true/false
- **pointEdgeBleach**: Numeric value
- **unitKinds**: Array of 'atomic', 'spheres', 'gaussians'
- **spacefill**:
Object with:
- **alpha**: Numeric value
- **useFog**: true/false
- **highlightColor**: Color as 0xrrggbb
- **selectColor**: Color as 0xrrggbb
- **quality**: One of 'custom', 'auto', 'highest', 'higher', 'high', 'medium', 'low', 'lower', 'lowest'
- **doubleSided**: true/false
- **flipSided**: true/false
- **flatShaded**: true/false
- **unitKinds**: Array of 'atomic', 'spheres', 'gaussians'
- **sizeFactor**: Numeric value
- **detail**: Numeric value
- **colorTheme**: Object { name: string, params: object } where name+params are:
- **carbohydrate-symbol**:
Object with:
- **chain-id**:
Object with:
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **cross-link**:
Object with:
- **domain**: Interval [min, max]
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **element-index**:
Object with:
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **element-symbol**:
Object with:
- **molecule-type**:
Object with:
- **polymer-id**:
Object with:
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **polymer-index**:
Object with:
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **residue-name**:
Object with:
- **secondary-structure**:
Object with:
- **sequence-id**:
Object with:
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **shape-group**:
Object with:
- **unit-index**:
Object with:
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **uniform**:
Object with:
- **value**: Color as 0xrrggbb
- **sizeTheme**: Object { name: string, params: object } where name+params are:
- **physical**:
Object with:
- **shape-group**:
Object with:
- **uniform**:
Object with:
- **value**: Numeric value
### Default Parameters
```js
{
"type": {
"name": "cartoon",
"params": {
"alpha": 1,
"useFog": true,
"highlightColor": 16737945,
"selectColor": 3407641,
"quality": "auto",
"doubleSided": false,
"flipSided": false,
"flatShaded": false,
"unitKinds": [
"atomic",
"spheres"
],
"sizeFactor": 0.2,
"linearSegments": 8,
"radialSegments": 16,
"aspectRatio": 5,
"arrowFactor": 1.5,
"visuals": [
"polymer-trace"
]
}
},
"colorTheme": {
"name": "polymer-id",
"params": {
"list": "RedYellowBlue"
}
},
"sizeTheme": {
"name": "uniform",
"params": {
"value": 1
}
}
}
```
----------------------------
## <a name="ms-plugin-explode-structure-representation-3d"></a>ms-plugin.explode-structure-representation-3d :: Representation3D -> Obj
### Parameters
- **t**: Numeric value
### Default Parameters
```js
{
"t": 0
}
```
----------------------------
## <a name="ms-plugin-volume-representation-3d"></a>ms-plugin.volume-representation-3d :: Data -> Representation3D
### Parameters
- **type**: Object { name: string, params: object } where name+params are:
- **isosurface**:
Object with:
- **alpha**: Numeric value
- **useFog**: true/false
- **highlightColor**: Color as 0xrrggbb
- **selectColor**: Color as 0xrrggbb
- **quality**: One of 'custom', 'auto', 'highest', 'higher', 'high', 'medium', 'low', 'lower', 'lowest'
- **doubleSided**: true/false
- **flipSided**: true/false
- **flatShaded**: true/false
- **isoValue**: - **absolute**: Numeric value
- **relative**: Numeric value
- **sizeFactor**: Numeric value
- **lineSizeAttenuation**: true/false
- **visuals**: Array of 'solid', 'wireframe'
- **direct-volume**:
Object with:
- **alpha**: Numeric value
- **useFog**: true/false
- **highlightColor**: Color as 0xrrggbb
- **selectColor**: Color as 0xrrggbb
- **quality**: One of 'custom', 'auto', 'highest', 'higher', 'high', 'medium', 'low', 'lower', 'lowest'
- **isoValueNorm**: Numeric value *(Normalized Isolevel Value)*
- **renderMode**: One of 'isosurface', 'volume'
- **controlPoints**: A list of 2d vectors [xi, yi][]
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **colorTheme**: Object { name: string, params: object } where name+params are:
- **carbohydrate-symbol**:
Object with:
- **chain-id**:
Object with:
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **cross-link**:
Object with:
- **domain**: Interval [min, max]
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **element-index**:
Object with:
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **element-symbol**:
Object with:
- **molecule-type**:
Object with:
- **polymer-id**:
Object with:
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **polymer-index**:
Object with:
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **residue-name**:
Object with:
- **secondary-structure**:
Object with:
- **sequence-id**:
Object with:
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **shape-group**:
Object with:
- **unit-index**:
Object with:
- **list**: One of 'OrangeRed', 'PurpleBlue', 'BluePurple', 'Oranges', 'BlueGreen', 'YellowOrangeBrown', 'YellowGreen', 'Reds', 'RedPurple', 'Greens', 'YellowGreenBlue', 'Purples', 'GreenBlue', 'Greys', 'YellowOrangeRed', 'PurpleRed', 'Blues', 'PurpleBlueGreen', 'Spectral', 'RedYellowGreen', 'RedBlue', 'PinkYellowGreen', 'PurpleGreen', 'RedYellowBlue', 'BrownWhiteGreen', 'RedGrey', 'PurpleOrange', 'Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1', 'Magma', 'Inferno', 'Plasma', 'Viridis', 'Cividis', 'Twilight', 'Rainbow', 'RedWhiteBlue'
- **uniform**:
Object with:
- **value**: Color as 0xrrggbb
- **sizeTheme**: Object { name: string, params: object } where name+params are:
- **physical**:
Object with:
- **shape-group**:
Object with:
- **uniform**:
Object with:
- **value**: Numeric value
### Default Parameters
```js
{
"type": {
"name": "isosurface",
"params": {
"alpha": 1,
"useFog": true,
"highlightColor": 16737945,
"selectColor": 3407641,
"quality": "auto",
"doubleSided": false,
"flipSided": false,
"flatShaded": false,
"isoValue": {
"kind": "relative",
"stats": {
"min": 0,
"max": 0,
"mean": 0,
"sigma": 0
},
"relativeValue": 2
},
"sizeFactor": 1,
"lineSizeAttenuation": false,
"visuals": [
"solid"
]
}
},
"colorTheme": {
"name": "uniform",
"params": {
"value": 13421772
}
},
"sizeTheme": {
"name": "uniform",
"params": {
"value": 1
}
}
}
```
----------------------------
## <a name="ms-plugin-focus-loci-on-select"></a>ms-plugin.focus-loci-on-select :: Root -> Behavior
### Parameters
- **minRadius**: Numeric value
- **extraRadius**: Numeric value *(Value added to the boundning sphere radius of the Loci.)*
### Default Parameters
```js
{
"minRadius": 10,
"extraRadius": 4
}
```
----------------------------
## <a name="ms-plugin-pdbe-structure-quality-report-prop"></a>ms-plugin.pdbe-structure-quality-report-prop :: Root -> Behavior
### Parameters
- **autoAttach**: true/false
### Default Parameters
```js
{
"autoAttach": false
}
```
----------------------------
## <a name="ms-plugin-rcsb-assembly-symmetry-prop"></a>ms-plugin.rcsb-assembly-symmetry-prop :: Root -> Behavior
### Parameters
- **autoAttach**: true/false
### Default Parameters
```js
{
"autoAttach": false
}
```
----------------------------
## <a name="ms-plugin-structure-animation"></a>ms-plugin.structure-animation :: Root -> Behavior
### Parameters
- **rotate**: true/false
- **rotateValue**: Numeric value
- **explode**: true/false
- **explodeValue**: Numeric value
### Default Parameters
```js
{
"rotate": false,
"rotateValue": 0,
"explode": false,
"explodeValue": 0
}
```
----------------------------
## <a name="ms-plugin-scene-labels"></a>ms-plugin.scene-labels :: Root -> Behavior
### Parameters
- **alpha**: Numeric value
- **useFog**: true/false
- **highlightColor**: Color as 0xrrggbb
- **selectColor**: Color as 0xrrggbb
- **quality**: One of 'custom', 'auto', 'highest', 'higher', 'high', 'medium', 'low', 'lower', 'lowest'
- **fontFamily**: One of 'sans-serif', 'monospace', 'serif', 'cursive'
- **fontQuality**: One of '0', '1', '2', '3', '4'
- **fontStyle**: One of 'normal', 'italic', 'oblique'
- **fontVariant**: One of 'normal', 'small-caps'
- **fontWeight**: One of 'normal', 'bold'
- **sizeFactor**: Numeric value
- **borderWidth**: Numeric value
- **borderColor**: Color as 0xrrggbb
- **offsetX**: Numeric value
- **offsetY**: Numeric value
- **offsetZ**: Numeric value
- **background**: true/false
- **backgroundMargin**: Numeric value
- **backgroundColor**: Color as 0xrrggbb
- **backgroundOpacity**: Numeric value
- **attachment**: One of 'bottom-left', 'bottom-center', 'bottom-right', 'middle-left', 'middle-center', 'middle-right', 'top-left', 'top-center', 'top-right'
- **levels**: Array of 'structure', 'polymer', 'ligand'
### Default Parameters
```js
{
"alpha": 1,
"useFog": true,
"highlightColor": 16737945,
"selectColor": 3407641,
"quality": "auto",
"fontFamily": "sans-serif",
"fontQuality": 3,
"fontStyle": "normal",
"fontVariant": "normal",
"fontWeight": "normal",
"sizeFactor": 1,
"borderWidth": 0,
"borderColor": 8421504,
"offsetX": 0,
"offsetY": 0,
"offsetZ": 0,
"background": true,
"backgroundMargin": 0.2,
"backgroundColor": 16775930,
"backgroundOpacity": 0.9,
"attachment": "middle-center",
"levels": []
}
```
----------------------------

View File

@@ -1,86 +0,0 @@
What is VolumeServer
=====================
VolumeServer is a service for accessing subsets of volumetric density data. It automatically downsamples the data depending on the volume of the requested region to reduce the bandwidth requirements and provide near-instant access to even the largest data sets.
It uses the text based CIF and BinaryCIF formats to deliver the data to the client.
For quick info about the benefits of using the server, check out the [examples](examples.md).
Installing and Running
=====================
Requires nodejs 8+.
## From GitHub
```
git clone https://github.com/molstar/molstar
npm install
```
Afterwards, build the project source:
```
npm run build-tsc
```
and run the server by
```
node lib/commonjs/servers/volume/server
```
## From NPM
```
npm install --production molstar
./volume-server
```
(or ``node node_modules\.bin\volume-server`` in Windows).
The NPM package contains all the tools mentioned here as "binaries":
- ``volume-server``
- ``volume-server-pack``
- ``volume-server-query``
### Production use
In production it is required to use a service that will keep the server running, such as [forever.js](https://github.com/foreverjs/forever).
### Memory issues
Sometimes nodejs might run into problems with memory. This is usually resolved by adding the ``--max-old-space-size=8192`` parameter.
## Preparing the Data
For the server to work, CCP4/MAP (models 0, 1, 2 are supported) input data need to be converted into a custom block format.
To achieve this, use the ``pack`` application (``node lib/commonjs/servers/volume/pack`` or ``volume-server-pack`` binary from the NPM package).
## Local Mode
The program ``lib/commonjs/servers/volume/pack`` (``volume-server-query`` in NPM package) can be used to query the data without running a http server.
## Navigating the Source Code
The source code is split into 2 mains parts: ``pack`` and ``server``:
- The ``pack`` part provides the means of converting CCP4 files into the internal block format.
- The ``server`` includes
- ``query``: the main part of the server that handles a query. ``execute.ts`` is the "entry point".
- ``algebra``: linear, "coordinate", and "box" algebra provides the means for calculations necessary to concent a user query into a menaningful response.
- API wrapper that handles the requests.
Consuming the Data
==================
The data can be consumed in any (modern) browser using the [ciftools library](https://github.com/molstar/ciftools) (or any other piece of code that can read text or binary CIF).
The [Data Format](DataFormat.md) document gives a detailed description of the server response format.
As a reference/example of the server usage is available in Mol* ``mol-plugin`` module.

111
eslint.config.mjs Normal file
View File

@@ -0,0 +1,111 @@
import { defineConfig } from "eslint/config";
import globals from "globals";
import typescriptEslint from "@typescript-eslint/eslint-plugin";
import tsParser from "@typescript-eslint/parser";
export default defineConfig([{
ignores: [
"node_modules/*",
"build/*",
"deploy/*",
"docs/site/*",
"lib/*",
"eslint.config.mjs",
"build.mjs",
]
},{
languageOptions: {
globals: {
...globals.browser,
...globals.node,
},
ecmaVersion: 2018,
sourceType: "module",
parserOptions: {
ecmaFeatures: {
impliedStrict: true,
},
},
},
rules: {
indent: "off",
"arrow-parens": ["off", "as-needed"],
"brace-style": ["error", "1tbs", {
allowSingleLine: true,
}],
"comma-spacing": "off",
"space-infix-ops": "off",
"comma-dangle": "off",
quotes: ["warn", "single", { "allowTemplateLiterals": true, "avoidEscape": true }],
eqeqeq: ["error", "smart"],
"import/order": "off",
"no-eval": "warn",
"no-extend-native": "warn",
"no-new-wrappers": "warn",
"no-trailing-spaces": "error",
"no-unsafe-finally": "warn",
"no-self-compare": "warn",
"no-var": "error",
"spaced-comment": "error",
semi: "warn",
"no-restricted-syntax": ["error", {
selector: "ExportDefaultDeclaration",
message: "Default exports are not allowed",
}],
"no-throw-literal": "error",
"key-spacing": "error",
"object-curly-spacing": ["error", "always"],
"array-bracket-spacing": "error",
"space-in-parens": "error",
"computed-property-spacing": "error",
"prefer-const": ["error", {
destructuring: "all",
ignoreReadBeforeAssign: false,
}],
"space-before-function-paren": "off",
"func-call-spacing": "off",
"no-multi-spaces": "error",
"block-spacing": "error",
"keyword-spacing": "warn",
"space-before-blocks": "error",
"semi-spacing": "error",
"no-constant-binary-expression": "error",
},
}, {
files: ["**/*.ts", "**/*.tsx"],
plugins: {
"@typescript-eslint": typescriptEslint,
},
languageOptions: {
parser: tsParser,
ecmaVersion: 5,
sourceType: "module",
parserOptions: {
project: ["tsconfig.eslint.json"],
},
},
rules: {
"@typescript-eslint/ban-types": "off",
"@typescript-eslint/class-name-casing": "off",
"@typescript-eslint/member-delimiter-style": ["off", {
multiline: {
delimiter: "none",
requireLast: true,
},
singleline: {
delimiter: "semi",
requireLast: false,
},
}],
"@typescript-eslint/prefer-namespace-keyword": "warn",
"@typescript-eslint/semi": ["off", null],
},
}]);

File diff suppressed because it is too large Load Diff

75130
examples/7qpd.fw2.cif Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,456 @@
forcefield_3904
RDKit 3D
49 52 0 0 0 0 0 0 0 0999 V2000
7.1950 23.7840 6.1780 C 0 0 0 0 0 0 0 0 0 0 0 0
5.7810 23.6440 6.1320 O 0 0 0 0 0 0 0 0 0 0 0 0
5.0380 24.7500 6.4550 C 0 0 0 0 0 0 0 0 0 0 0 0
4.8270 25.8570 5.6380 C 0 0 0 0 0 0 0 0 0 0 0 0
4.0460 26.9150 6.0970 C 0 0 0 0 0 0 0 0 0 0 0 0
3.4760 26.8670 7.3710 C 0 0 0 0 0 0 0 0 0 0 0 0
3.6720 25.7630 8.2160 C 0 0 0 0 0 0 0 0 0 0 0 0
3.0720 25.7780 9.4800 N 0 0 0 0 0 0 0 0 0 0 0 0
1.8090 25.4470 9.9650 C 0 0 0 0 0 0 0 0 0 0 0 0
0.8080 26.1730 9.4160 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.4770 25.9480 9.8040 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.5110 26.6810 9.2540 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.0950 27.9270 8.6960 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.1890 28.9860 8.9110 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.6300 30.4110 8.7600 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.7130 31.4650 8.9780 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.4040 31.2910 10.3270 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.9520 29.8780 10.4990 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.8690 28.8240 10.2810 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.7400 24.9710 10.7610 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.8850 24.4940 11.3660 N 0 0 0 0 0 0 0 0 0 0 0 0
-1.4690 23.5570 12.1930 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.1090 23.4080 12.1480 N 0 0 0 0 0 0 0 0 0 0 0 0
0.3700 24.3040 11.2380 C 0 0 0 0 0 0 0 0 0 0 0 0
1.6480 24.4860 10.8910 N 0 0 0 0 0 0 0 0 0 0 0 0
4.4600 24.7130 7.7330 C 0 0 0 0 0 0 0 0 0 0 0 0
7.5263 23.8168 7.2264 H 0 0 0 0 0 0 0 0 0 0 0 0
7.6649 22.9280 5.6716 H 0 0 0 0 0 0 0 0 0 0 0 0
7.4879 24.7155 5.6716 H 0 0 0 0 0 0 0 0 0 0 0 0
5.2751 25.8961 4.6342 H 0 0 0 0 0 0 0 0 0 0 0 0
3.8776 27.7913 5.4538 H 0 0 0 0 0 0 0 0 0 0 0 0
2.8616 27.7104 7.7192 H 0 0 0 0 0 0 0 0 0 0 0 0
3.6420 26.0930 10.2520 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.1673 28.2555 9.1874 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.9189 27.8009 7.6175 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.9466 28.8274 8.1294 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.8310 30.5615 9.5009 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.2424 30.5222 7.7366 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.2524 32.4632 8.9392 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.4689 31.3496 8.1873 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.6781 31.4924 11.1285 H 0 0 0 0 0 0 0 0 0 0 0 0
-4.2475 31.9954 10.3749 H 0 0 0 0 0 0 0 0 0 0 0 0
-4.3529 29.7723 11.5179 H 0 0 0 0 0 0 0 0 0 0 0 0
-4.7404 29.7213 9.7481 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.1096 28.9239 11.0705 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.3427 27.8318 10.3148 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.1334 22.9663 12.8408 H 0 0 0 0 0 0 0 0 0 0 0 0
0.4510 22.7600 12.6820 H 0 0 0 0 0 0 0 0 0 0 0 0
4.6312 23.8345 8.3724 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 2 0
4 5 1 0
5 6 2 0
6 7 1 0
7 8 1 0
8 9 1 0
9 10 2 0
10 11 1 0
11 12 1 0
12 13 1 0
13 14 1 0
14 15 1 0
15 16 1 0
16 17 1 0
17 18 1 0
18 19 1 0
11 20 2 0
20 21 1 0
21 22 2 0
22 23 1 0
23 24 1 0
24 25 2 0
7 26 2 0
26 3 1 0
25 9 1 0
19 14 1 0
24 20 1 0
1 27 1 0
1 28 1 0
1 29 1 0
4 30 1 0
5 31 1 0
6 32 1 0
8 33 1 0
13 34 1 0
13 35 1 0
14 36 1 0
15 37 1 0
15 38 1 0
16 39 1 0
16 40 1 0
17 41 1 0
17 42 1 0
18 43 1 0
18 44 1 0
19 45 1 0
19 46 1 0
22 47 1 0
23 48 1 0
26 49 1 0
M END
> <ligandCode> (1)
forcefield_3904
> <ligandName> (1)
klr_22
$$$$
forcefield_3905
RDKit 3D
49 52 0 0 0 0 0 0 0 0999 V2000
6.5460 25.1350 3.8360 N 0 0 0 0 0 0 0 0 0 0 0 0
5.2550 25.5560 3.9960 C 0 0 0 0 0 0 0 0 0 0 0 0
4.5630 25.8360 3.0240 O 0 0 0 0 0 0 0 0 0 0 0 0
4.7190 25.6170 5.3820 C 0 0 0 0 0 0 0 0 0 0 0 0
4.0120 26.7570 5.7730 C 0 0 0 0 0 0 0 0 0 0 0 0
3.4880 26.8570 7.0690 C 0 0 0 0 0 0 0 0 0 0 0 0
3.6630 25.8340 8.0050 C 0 0 0 0 0 0 0 0 0 0 0 0
3.1640 25.8720 9.3110 N 0 0 0 0 0 0 0 0 0 0 0 0
1.9510 25.5250 9.9030 C 0 0 0 0 0 0 0 0 0 0 0 0
0.8900 26.1930 9.3960 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.3560 25.9480 9.8850 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.4490 26.6220 9.3800 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.1050 27.7730 8.6070 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.7010 29.0180 9.2810 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.5340 30.2520 8.3770 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.5490 31.3650 8.6570 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.0430 31.3400 10.0950 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.7320 30.0170 10.4330 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.1730 28.8170 9.6630 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.5160 25.0110 10.9050 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.5980 24.5310 11.6140 N 0 0 0 0 0 0 0 0 0 0 0 0
-1.0930 23.6490 12.4490 C 0 0 0 0 0 0 0 0 0 0 0 0
0.2630 23.5390 12.3140 N 0 0 0 0 0 0 0 0 0 0 0 0
0.6490 24.4020 11.3310 C 0 0 0 0 0 0 0 0 0 0 0 0
1.8910 24.6070 10.8850 N 0 0 0 0 0 0 0 0 0 0 0 0
4.3890 24.7010 7.5990 C 0 0 0 0 0 0 0 0 0 0 0 0
4.9170 24.5890 6.3060 C 0 0 0 0 0 0 0 0 0 0 0 0
7.0340 24.6220 4.5560 H 0 0 0 0 0 0 0 0 0 0 0 0
6.8360 24.9760 2.8790 H 0 0 0 0 0 0 0 0 0 0 0 0
3.8658 27.5811 5.0592 H 0 0 0 0 0 0 0 0 0 0 0 0
2.9275 27.7591 7.3554 H 0 0 0 0 0 0 0 0 0 0 0 0
3.7800 26.2290 10.0270 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.0105 27.8693 8.5543 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.5056 27.6720 7.5875 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.1446 29.1858 10.2149 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.5231 30.6584 8.5280 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.7027 29.9170 7.3429 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.0722 32.3370 8.4626 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.4156 31.2068 7.9983 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.1848 31.4776 10.7693 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.7762 32.1504 10.2201 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.6091 29.8266 11.5094 H 0 0 0 0 0 0 0 0 0 0 0 0
-4.7879 30.1213 10.1428 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.2575 27.9194 10.2932 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.7539 28.7064 8.7355 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.6897 23.0698 13.1690 H 0 0 0 0 0 0 0 0 0 0 0 0
0.8800 22.9330 12.8360 H 0 0 0 0 0 0 0 0 0 0 0 0
4.5467 23.8809 8.3150 H 0 0 0 0 0 0 0 0 0 0 0 0
5.4866 23.6927 6.0193 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 2 0
2 4 1 0
4 5 2 0
5 6 1 0
6 7 2 0
7 8 1 0
8 9 1 0
9 10 2 0
10 11 1 0
11 12 1 0
12 13 1 0
13 14 1 0
14 15 1 0
15 16 1 0
16 17 1 0
17 18 1 0
18 19 1 0
11 20 2 0
20 21 1 0
21 22 2 0
22 23 1 0
23 24 1 0
24 25 2 0
7 26 1 0
26 27 2 0
27 4 1 0
25 9 1 0
19 14 1 0
24 20 1 0
1 28 1 0
1 29 1 0
5 30 1 0
6 31 1 0
8 32 1 0
13 33 1 0
13 34 1 0
14 35 1 0
15 36 1 0
15 37 1 0
16 38 1 0
16 39 1 0
17 40 1 0
17 41 1 0
18 42 1 0
18 43 1 0
19 44 1 0
19 45 1 0
22 46 1 0
23 47 1 0
26 48 1 0
27 49 1 0
M END
> <ligandCode> (2)
forcefield_3905
> <ligandName> (2)
1oiy-1
$$$$
forcefield_14264
RDKit 3D
50 53 0 0 0 0 0 0 0 0999 V2000
4.9220 23.4040 3.0090 N 0 0 0 0 0 0 0 0 0 0 0 0
5.8970 24.7200 3.4040 S 0 0 0 0 0 6 0 0 0 0 0 0
7.2120 24.2200 3.7260 O 0 0 0 0 0 0 0 0 0 0 0 0
5.6670 25.6980 2.3670 O 0 0 0 0 0 0 0 0 0 0 0 0
5.1310 25.2890 4.8970 C 0 0 0 0 0 0 0 0 0 0 0 0
4.3720 26.4580 4.8910 C 0 0 0 0 0 0 0 0 0 0 0 0
3.7730 26.8990 6.0760 C 0 0 0 0 0 0 0 0 0 0 0 0
3.9290 26.1970 7.2780 C 0 0 0 0 0 0 0 0 0 0 0 0
3.3430 26.5790 8.4890 N 0 0 0 0 0 0 0 0 0 0 0 0
2.1400 26.2820 9.1290 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0830 26.9670 8.6370 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.1520 26.7740 9.1730 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.2430 27.4630 8.6800 O 0 0 0 0 0 0 0 0 0 0 0 0
-0.9280 28.7750 8.2140 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.2060 29.6320 8.2420 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.2120 29.0810 9.2730 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.1810 30.1570 9.7450 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.4520 31.3060 10.4440 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.0250 31.5210 9.9360 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.8770 31.1190 8.4740 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.3060 25.8730 10.2240 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.3770 25.4460 10.9810 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.8720 24.5730 11.8270 C 0 0 0 0 0 0 0 0 0 0 0 0
0.4750 24.4190 11.6520 N 0 0 0 0 0 0 0 0 0 0 0 0
0.8530 25.2430 10.6320 C 0 0 0 0 0 0 0 0 0 0 0 0
2.0880 25.3990 10.1410 N 0 0 0 0 0 0 0 0 0 0 0 0
4.7090 25.0260 7.2550 C 0 0 0 0 0 0 0 0 0 0 0 0
5.3130 24.5730 6.0780 C 0 0 0 0 0 0 0 0 0 0 0 0
4.1960 23.3080 3.7210 H 0 0 0 0 0 0 0 0 0 0 0 0
5.4460 22.5390 2.8810 H 0 0 0 0 0 0 0 0 0 0 0 0
4.2447 27.0304 3.9603 H 0 0 0 0 0 0 0 0 0 0 0 0
3.1666 27.8167 6.0634 H 0 0 0 0 0 0 0 0 0 0 0 0
3.8380 27.2640 9.0420 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.1661 29.2261 8.8668 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.5358 28.7227 7.1876 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.6885 29.5690 7.2555 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.7847 28.2635 8.8106 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.6467 28.7218 10.1456 H 0 0 0 0 0 0 0 0 0 0 0 0
-4.7231 30.5555 8.8747 H 0 0 0 0 0 0 0 0 0 0 0 0
-4.8753 29.7014 10.4664 H 0 0 0 0 0 0 0 0 0 0 0 0
-4.0232 32.2317 10.2804 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.3803 31.0434 11.5098 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.7667 32.5851 10.0403 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.3511 30.8895 10.5336 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.5603 31.7316 7.8675 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.8284 31.2816 8.1841 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.4619 24.0333 12.5825 H 0 0 0 0 0 0 0 0 0 0 0 0
1.0910 23.8110 12.1720 H 0 0 0 0 0 0 0 0 0 0 0 0
4.8468 24.4538 8.1843 H 0 0 0 0 0 0 0 0 0 0 0 0
5.9261 23.6598 6.0846 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 2 0
2 4 2 0
2 5 1 0
5 6 2 0
6 7 1 0
7 8 2 0
8 9 1 0
9 10 1 0
10 11 2 0
11 12 1 0
12 13 1 0
13 14 1 0
14 15 1 0
15 16 1 0
16 17 1 0
17 18 1 0
18 19 1 0
19 20 1 0
12 21 2 0
21 22 1 0
22 23 2 0
23 24 1 0
24 25 1 0
25 26 2 0
8 27 1 0
27 28 2 0
28 5 1 0
26 10 1 0
20 15 1 0
25 21 1 0
1 29 1 0
1 30 1 0
6 31 1 0
7 32 1 0
9 33 1 0
14 34 1 0
14 35 1 0
15 36 1 0
16 37 1 0
16 38 1 0
17 39 1 0
17 40 1 0
18 41 1 0
18 42 1 0
19 43 1 0
19 44 1 0
20 45 1 0
20 46 1 0
23 47 1 0
24 48 1 0
27 49 1 0
28 50 1 0
M END
> <ligandCode> (3)
forcefield_14264
> <ligandName> (3)
1h1s
$$$$
forcefield_14265
RDKit 3D
50 53 0 0 0 0 0 0 0 0999 V2000
5.9560 25.0880 4.1850 N 0 0 0 0 0 0 0 0 0 0 0 0
5.6880 24.2300 5.6100 S 0 0 0 0 0 6 0 0 0 0 0 0
4.9010 23.0800 5.2270 O 0 0 0 0 0 0 0 0 0 0 0 0
6.9470 24.1160 6.3060 O 0 0 0 0 0 0 0 0 0 0 0 0
4.6500 25.3510 6.5050 C 0 0 0 0 0 0 0 0 0 0 0 0
4.3190 26.5790 5.9340 C 0 0 0 0 0 0 0 0 0 0 0 0
3.4970 27.4490 6.6410 C 0 0 0 0 0 0 0 0 0 0 0 0
3.0220 27.0950 7.9100 C 0 0 0 0 0 0 0 0 0 0 0 0
3.3680 25.8770 8.5100 C 0 0 0 0 0 0 0 0 0 0 0 0
2.9060 25.4620 9.7630 N 0 0 0 0 0 0 0 0 0 0 0 0
1.6520 25.1280 10.2760 C 0 0 0 0 0 0 0 0 0 0 0 0
0.6590 25.9320 9.8350 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.6150 25.7270 10.2650 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.6410 26.5420 9.8330 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.2650 27.5510 8.8940 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.4150 28.9670 9.4830 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.0650 29.8960 8.4420 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.7130 31.1080 9.0990 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.8410 30.6980 10.0490 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.6490 29.3080 10.6570 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.1750 28.9600 10.8270 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.8720 24.6910 11.1610 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.0060 24.2140 11.7870 N 0 0 0 0 0 0 0 0 0 0 0 0
-1.5910 23.2030 12.5210 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.2430 23.0050 12.3980 N 0 0 0 0 0 0 0 0 0 0 0 0
0.2320 23.9470 11.5330 C 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 24.1080 11.1380 N 0 0 0 0 0 0 0 0 0 0 0 0
4.1890 25.0030 7.7800 C 0 0 0 0 0 0 0 0 0 0 0 0
6.4350 24.4790 3.5180 H 0 0 0 0 0 0 0 0 0 0 0 0
5.1080 25.4920 3.7910 H 0 0 0 0 0 0 0 0 0 0 0 0
4.7020 26.8549 4.9404 H 0 0 0 0 0 0 0 0 0 0 0 0
3.2187 28.4186 6.2023 H 0 0 0 0 0 0 0 0 0 0 0 0
2.3612 27.7900 8.4488 H 0 0 0 0 0 0 0 0 0 0 0 0
3.5640 25.4960 10.5280 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.2150 27.3950 8.6054 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.9312 27.4715 8.0223 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.4134 29.3591 9.7135 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.2920 30.2413 7.7397 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.8482 29.3296 7.9168 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.9484 31.6568 9.6685 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.1423 31.7400 8.3076 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.8921 31.4320 10.8667 H 0 0 0 0 0 0 0 0 0 0 0 0
-4.7682 30.6682 9.4579 H 0 0 0 0 0 0 0 0 0 0 0 0
-4.1367 29.2806 11.6426 H 0 0 0 0 0 0 0 0 0 0 0 0
-4.0960 28.5721 9.9724 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.7122 29.6974 11.4994 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.1140 27.9439 11.2440 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.2486 22.5915 13.1563 H 0 0 0 0 0 0 0 0 0 0 0 0
0.3120 22.2980 12.8550 H 0 0 0 0 0 0 0 0 0 0 0 0
4.4733 24.0335 8.2150 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 2 0
2 4 2 0
2 5 1 0
5 6 2 0
6 7 1 0
7 8 2 0
8 9 1 0
9 10 1 0
10 11 1 0
11 12 2 0
12 13 1 0
13 14 1 0
14 15 1 0
15 16 1 0
16 17 1 0
17 18 1 0
18 19 1 0
19 20 1 0
20 21 1 0
13 22 2 0
22 23 1 0
23 24 2 0
24 25 1 0
25 26 1 0
26 27 2 0
9 28 2 0
28 5 1 0
27 11 1 0
21 16 1 0
26 22 1 0
1 29 1 0
1 30 1 0
6 31 1 0
7 32 1 0
8 33 1 0
10 34 1 0
15 35 1 0
15 36 1 0
16 37 1 0
17 38 1 0
17 39 1 0
18 40 1 0
18 41 1 0
19 42 1 0
19 43 1 0
20 44 1 0
20 45 1 0
21 46 1 0
21 47 1 0
24 48 1 0
25 49 1 0
28 50 1 0
M END
> <ligandCode> (4)
forcefield_14265
> <ligandName> (4)
1oiu
$$$$

File diff suppressed because it is too large Load Diff

28000
examples/long_animation.sdf Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,115 @@
{
"metadata": {
"title": "Example MolViewSpec - 1cbs with labelled and zoomed ligand",
"version": "1",
"timestamp": "2023-11-24T10:45:49.873Z"
},
"root": {
"kind": "root",
"children": [
{
"kind": "download",
"params": {
"url": "https://www.ebi.ac.uk/pdbe/entry-files/1cbs.bcif"
},
"children": [
{
"kind": "parse",
"params": {
"format": "bcif"
},
"children": [
{
"kind": "structure",
"params": {
"type": "model"
},
"children": [
{
"kind": "component",
"params": {
"selector": "polymer"
},
"children": [
{
"kind": "representation",
"params": {
"type": "cartoon"
},
"children": [
{
"kind": "color",
"params": {
"color": "green"
}
},
{
"kind": "color",
"params": {
"selector": {
"label_asym_id": "A",
"end_label_seq_id": 50
},
"color": "#6688ff"
}
}
]
},
{
"kind": "label",
"params": {
"text": "Protein"
}
}
]
},
{
"kind": "component",
"params": {
"selector": "ligand"
},
"children": [
{
"kind": "focus",
"params": {
"direction": [0.5, 0, -1],
"up": [0.365, 0.913, 0.183]
}
},
{
"kind": "representation",
"params": {
"type": "ball_and_stick"
},
"children": [
{
"kind": "color",
"params": {
"color": "#cc3399"
}
}
]
},
{
"kind": "label",
"params": {
"text": "Retinoic Acid"
}
}
]
}
]
}
]
}
]
},
{
"kind": "canvas",
"params": {
"background_color": "#ffffee"
}
}
]
}
}

117
examples/mvs/1cbs.mvsj Normal file
View File

@@ -0,0 +1,117 @@
{
"metadata": {
"title": "Example MolViewSpec - 1cbs with labelled protein and ligand",
"version": "1",
"timestamp": "2023-11-24T10:38:17.483Z"
},
"root": {
"kind": "root",
"children": [
{
"kind": "download",
"params": {
"url": "https://www.ebi.ac.uk/pdbe/entry-files/1cbs.bcif"
},
"children": [
{
"kind": "parse",
"params": {
"format": "bcif"
},
"children": [
{
"kind": "structure",
"params": {
"type": "model"
},
"children": [
{
"kind": "component",
"params": {
"selector": "polymer"
},
"children": [
{
"kind": "representation",
"params": {
"type": "cartoon"
},
"children": [
{
"kind": "color",
"params": {
"color": "green"
}
},
{
"kind": "color",
"params": {
"selector": {
"label_asym_id": "A",
"beg_label_seq_id": 1,
"end_label_seq_id": 50
},
"color": "#6688ff"
}
}
]
},
{
"kind": "label",
"params": {
"text": "Protein"
}
}
]
},
{
"kind": "component",
"params": {
"selector": "ligand"
},
"children": [
{
"kind": "representation",
"params": {
"type": "ball_and_stick"
},
"children": [
{
"kind": "color",
"params": {
"color": "#cc3399"
}
}
]
},
{
"kind": "label",
"params": {
"text": "Retinoic Acid"
}
}
]
}
]
}
]
}
]
},
{
"kind": "canvas",
"params": {
"background_color": "#ffffee"
}
},
{
"kind": "camera",
"params": {
"target": [17, 21, 27],
"position": [41, 34, 69],
"up": [-0.129,0.966,-0.224]
}
}
]
}
}

BIN
examples/mvs/1h9t.mvsx Normal file

Binary file not shown.

View File

@@ -0,0 +1,67 @@
{
"metadata": {
"title": "Example MolViewSpec - 1h9t colored by external annotation",
"version": "1",
"timestamp": "2023-11-24T10:47:33.182Z"
},
"root": {
"kind": "root",
"children": [
{
"kind": "download",
"params": {
"url": "https://www.ebi.ac.uk/pdbe/entry-files/1h9t.bcif"
},
"children": [
{
"kind": "parse",
"params": {
"format": "bcif"
},
"children": [
{
"kind": "structure",
"params": {
"type": "model"
},
"children": [
{
"kind": "component",
"params": {
"selector": "polymer"
},
"children": [
{
"kind": "representation",
"params": {
"type": "cartoon"
},
"children": [
{
"kind": "color",
"params": {
"selector": "all",
"color": "white"
}
},
{
"kind": "color_from_uri",
"params": {
"uri": "./1h9t_domains.json",
"format": "json",
"schema": "all_atomic"
}
}
]
}
]
}
]
}
]
}
]
}
]
}
}

View File

@@ -0,0 +1,583 @@
{
"metadata": {
"title": "Example MolViewSpec - 1h9t colored and labelled by external annotation",
"version": "1",
"timestamp": "2023-11-24T10:48:28.677Z"
},
"root": {
"kind": "root",
"children": [
{
"kind": "download",
"params": {
"url": "https://www.ebi.ac.uk/pdbe/entry-files/1h9t.bcif"
},
"children": [
{
"kind": "parse",
"params": {
"format": "bcif"
},
"children": [
{
"kind": "structure",
"params": {
"type": "model"
},
"children": [
{
"kind": "component",
"params": {
"selector": "protein"
},
"children": [
{
"kind": "representation",
"params": {
"type": "cartoon"
},
"children": [
{
"kind": "color",
"params": {
"selector": "all",
"color": "white"
}
},
{
"kind": "color_from_uri",
"params": {
"uri": "./1h9t_domains.json",
"format": "json",
"schema": "all_atomic"
}
}
]
}
]
},
{
"kind": "component",
"params": {
"selector": "nucleic"
},
"children": [
{
"kind": "representation",
"params": {
"type": "ball_and_stick"
},
"children": [
{
"kind": "color",
"params": {
"selector": "all",
"color": "white"
}
},
{
"kind": "color_from_uri",
"params": {
"uri": "./1h9t_domains.json",
"format": "json",
"schema": "all_atomic"
}
}
]
}
]
},
{
"kind": "component",
"params": {
"selector": "ion"
},
"children": [
{
"kind": "representation",
"params": {
"type": "surface"
},
"children": [
{
"kind": "color_from_uri",
"params": {
"uri": "./1h9t_domains.json",
"format": "json",
"schema": "all_atomic"
}
}
]
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "A",
"beg_label_seq_id": 9,
"end_label_seq_id": 83
}
},
"children": [
{
"kind": "label",
"params": {
"text": "DNA-binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "B",
"beg_label_seq_id": 9,
"end_label_seq_id": 83
}
},
"children": [
{
"kind": "label",
"params": {
"text": "DNA-binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "A",
"beg_label_seq_id": 84,
"end_label_seq_id": 231
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Acyl-CoA\nbinding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "B",
"beg_label_seq_id": 84,
"end_label_seq_id": 231
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Acyl-CoA binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "C"
}
},
"children": [
{
"kind": "label",
"params": {
"text": "DNA X"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "D"
}
},
"children": [
{
"kind": "label",
"params": {
"text": "DNA Y"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "D",
"atom_id": 4016
}
},
"children": [
{
"kind": "label",
"params": {
"text": "DNA Y O5'"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "D",
"atom_id": 4391
}
},
"children": [
{
"kind": "label",
"params": {
"text": "DNA Y O3'"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "E"
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Gold"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "H"
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Gold"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "F"
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Chloride"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "G"
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Chloride"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "I"
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Chloride"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "A",
"label_seq_id": 57
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Ligand binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "A",
"label_seq_id": 67
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Ligand binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "A",
"label_seq_id": 121
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Ligand binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "A",
"label_seq_id": 125
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Ligand binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "A",
"label_seq_id": 129
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Ligand binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "A",
"label_seq_id": 178
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Ligand binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "A",
"beg_label_seq_id": 203,
"end_label_seq_id": 205
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Ligand binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "B",
"label_seq_id": 67
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Ligand binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "B",
"label_seq_id": 121
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Ligand binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "B",
"label_seq_id": 125
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Ligand binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "B",
"label_seq_id": 129
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Ligand binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "B",
"label_seq_id": 178
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Ligand binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": {
"label_asym_id": "B",
"beg_label_seq_id": 203,
"end_label_seq_id": 205
}
},
"children": [
{
"kind": "label",
"params": {
"text": "Ligand binding"
}
}
]
},
{
"kind": "component",
"params": {
"selector": "all"
},
"children": [
{
"kind": "focus",
"params": {
"direction": [-0.3, -0.1, -1]
}
}
]
}
]
}
]
}
]
},
{
"kind": "canvas",
"params": {
"background_color": "#eeffee"
}
}
]
}
}

View File

@@ -0,0 +1,155 @@
[
{
"label_asym_id": "A",
"beg_label_seq_id": 9,
"end_label_seq_id": 83,
"color": "#dd6600",
"tooltip": "DNA-binding"
},
{
"label_asym_id": "A",
"beg_label_seq_id": 84,
"end_label_seq_id": 231,
"color": "#008800",
"tooltip": "Acyl-CoA binding"
},
{
"label_asym_id": "B",
"beg_label_seq_id": 9,
"end_label_seq_id": 83,
"color": "#cc8800",
"tooltip": "DNA-binding"
},
{
"label_asym_id": "B",
"beg_label_seq_id": 84,
"end_label_seq_id": 231,
"color": "#008888",
"tooltip": "Acyl-CoA binding"
},
{
"label_asym_id": "C",
"color": "#1100aa",
"tooltip": "DNA X"
},
{
"label_asym_id": "D",
"color": "#dddddd",
"tooltip": "DNA Y"
},
{
"label_asym_id": "D",
"atom_id": 4016,
"color": "#ff0044",
"tooltip": "DNA Y - O5'"
},
{
"label_asym_id": "D",
"atom_id": 4391,
"color": "#4400ff",
"tooltip": "DNA Y - O3'"
},
{
"label_asym_id": "E",
"color": "#ffff00",
"tooltip": "Gold"
},
{
"label_asym_id": "H",
"color": "#ffff00",
"tooltip": "Gold"
},
{
"label_asym_id": "F",
"color": "#00dd00",
"tooltip": "Chloride"
},
{
"label_asym_id": "G",
"color": "#00dd00",
"tooltip": "Chloride"
},
{
"label_asym_id": "I",
"color": "#00dd00",
"tooltip": "Chloride"
},
{
"label_asym_id": "A",
"label_seq_id": 57,
"color": "#ff0000",
"tooltip": "Ligand binding site"
},
{
"label_asym_id": "A",
"label_seq_id": 67,
"color": "#ff0000",
"tooltip": "Ligand binding site"
},
{
"label_asym_id": "A",
"label_seq_id": 121,
"color": "#ff0000",
"tooltip": "Ligand binding site"
},
{
"label_asym_id": "A",
"label_seq_id": 125,
"color": "#ff0000",
"tooltip": "Ligand binding site"
},
{
"label_asym_id": "A",
"label_seq_id": 129,
"color": "#ff0000",
"tooltip": "Ligand binding site"
},
{
"label_asym_id": "A",
"label_seq_id": 178,
"color": "#ff0000",
"tooltip": "Ligand binding site"
},
{
"label_asym_id": "A",
"beg_label_seq_id": 203,
"end_label_seq_id": 205,
"color": "#ff0000",
"tooltip": "Ligand binding site"
},
{
"label_asym_id": "B",
"label_seq_id": 67,
"color": "#ff0000",
"tooltip": "Ligand binding site"
},
{
"label_asym_id": "B",
"label_seq_id": 121,
"color": "#ff0000",
"tooltip": "Ligand binding site"
},
{
"label_asym_id": "B",
"label_seq_id": 125,
"color": "#ff0000",
"tooltip": "Ligand binding site"
},
{
"label_asym_id": "B",
"label_seq_id": 129,
"color": "#ff0000",
"tooltip": "Ligand binding site"
},
{
"label_asym_id": "B",
"beg_label_seq_id": 203,
"end_label_seq_id": 205,
"color": "#ff0000",
"tooltip": "Ligand binding site"
}
]

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,264 @@
%VERSION VERSION_STAMP = V0001.000 DATE = 11/04/25 11:55:47
%FLAG TITLE
%FORMAT(20a4)
alanine-dipeptide.solvated.pdb
%FLAG POINTERS
%FORMAT(10I8)
22 7 12 9 25 11 39 19 0 0
99 3 9 11 19 7 11 20 0 0
0 0 0 0 0 0 0 1 10 0
0 1
%FLAG ATOM_NAME
%FORMAT(20a4)
H1 CH3 H2 H3 C O N H CA HA CB HB1 HB2 HB3 C O N H C H1
H2 H3
%FLAG ATOMIC_NUMBER
%FORMAT(10I8)
1 6 1 1 6 8 7 1 6 1
6 1 1 1 6 8 7 1 6 1
1 1
%FLAG RESIDUE_LABEL
%FORMAT(20a4)
ACE ALA NME
%FLAG RESIDUE_POINTER
%FORMAT(10I8)
1 7 17
%FLAG RESIDUE_NUMBER
%FORMAT(20I4)
1 2 3
%FLAG RESIDUE_ICODE
%FORMAT(20a4)
%FLAG RESIDUE_CHAINID
%FORMAT(20a4)
B B B
%FLAG SOLVENT_POINTERS
%FORMAT(3I8)
0 1 0
%FLAG ATOMS_PER_MOLECULE
%FORMAT(10I8)
22
%FLAG MASS
%FORMAT(5E16.8)
3.02400000E+00 5.96200000E+00 3.02400000E+00 3.02400000E+00 1.20100000E+01
1.60000000E+01 1.19940000E+01 3.02400000E+00 9.99400000E+00 3.02400000E+00
5.96200000E+00 3.02400000E+00 3.02400000E+00 3.02400000E+00 1.20100000E+01
1.60000000E+01 1.19940000E+01 3.02400000E+00 5.96200000E+00 3.02400000E+00
3.02400000E+00 3.02400000E+00
%FLAG CHARGE
%FORMAT(5E16.8)
2.04636429E+00 -6.67300626E+00 2.04636429E+00 2.04636429E+00 1.08823576E+01
-1.03484442E+01 -7.57501011E+00 4.95464337E+00 6.14091510E-01 1.49969529E+00
-3.32556975E+00 1.09880469E+00 1.09880469E+00 1.09880469E+00 1.08841798E+01
-1.03484442E+01 -7.57501011E+00 4.95464337E+00 -2.71512270E+00 1.77849648E+00
1.77849648E+00 1.77849648E+00
%FLAG AMBER_ATOM_TYPE
%FORMAT(20a4)
a0 a1 a0 a0 a2 a3 a4 a5 a1 a6 a1 a0 a0 a0 a2 a3 a4 a5 a1 a6
a6 a6
%FLAG ATOM_TYPE_INDEX
%FORMAT(10I8)
1 2 1 1 3 4 5 6 2 7
2 1 1 1 3 4 5 6 2 7
7 7
%FLAG NONBONDED_PARM_INDEX
%FORMAT(10I8)
1 2 4 7 11 16 22 2 3 5
8 12 17 23 4 5 6 9 13 18
24 7 8 9 10 14 19 25 11 12
13 14 15 20 26 16 17 18 19 20
21 27 22 23 24 25 26 27 28
%FLAG LENNARD_JONES_ACOEF
%FORMAT(5E16.8)
7.51607703E+03 9.71708117E+04 1.04308023E+06 8.61541883E+04 9.24822269E+05
8.19971662E+05 5.44261042E+04 6.47841732E+05 5.74393458E+05 3.79876399E+05
8.96776989E+04 9.95480466E+05 8.82619071E+05 6.06829343E+05 9.44293233E+05
1.07193645E+02 2.56678134E+03 2.27577560E+03 1.02595236E+03 2.12601181E+03
1.39982777E-01 4.98586847E+03 6.78771368E+04 6.01816484E+04 3.69471530E+04
6.20665998E+04 5.94667299E+01 3.25969625E+03
%FLAG LENNARD_JONES_BCOEF
%FORMAT(5E16.8)
2.17257828E+01 1.26919150E+02 6.75612247E+02 1.12529845E+02 5.99015525E+02
5.31102864E+02 1.11805549E+02 6.26720080E+02 5.55666449E+02 5.64885984E+02
1.36131731E+02 7.36907417E+02 6.53361429E+02 6.77220874E+02 8.01323529E+02
2.59456373E+00 2.06278363E+01 1.82891803E+01 1.53505284E+01 2.09604198E+01
9.37598976E-02 1.76949863E+01 1.06076943E+02 9.40505981E+01 9.21192137E+01
1.13252062E+02 1.93248820E+00 1.43076527E+01
%FLAG NUMBER_EXCLUDED_ATOMS
%FORMAT(10I8)
6 7 4 3 7 3 10 4 10 7
6 3 2 1 7 3 5 4 3 2
1 1
%FLAG EXCLUDED_ATOMS_LIST
%FORMAT(10I8)
2 3 4 5 6 7 3 4 5 6
7 8 9 4 5 6 7 5 6 7
6 7 8 9 10 11 15 7 8 9
8 9 10 11 12 13 14 15 16 17
9 10 11 15 10 11 12 13 14 15
16 17 18 19 11 12 13 14 15 16
17 12 13 14 15 16 17 13 14 15
14 15 15 16 17 18 19 20 21 22
17 18 19 18 19 20 21 22 19 20
21 22 20 21 22 21 22 22 0
%FLAG BOND_FORCE_CONSTANT
%FORMAT(5E16.8)
3.40000000E+02 4.34000000E+02 3.17000000E+02 5.70000000E+02 4.90000000E+02
3.37000000E+02 3.10000000E+02
%FLAG BOND_EQUIL_VALUE
%FORMAT(5E16.8)
1.09000000E+00 1.01000000E+00 1.52200000E+00 1.22900000E+00 1.33500000E+00
1.44900000E+00 1.52600000E+00
%FLAG BONDS_INC_HYDROGEN
%FORMAT(10I8)
0 3 1 3 6 1 3 9 1 18
21 2 24 27 1 30 33 1 30 36
1 30 39 1 48 51 2 54 57 1
54 60 1 54 63 1
%FLAG BONDS_WITHOUT_HYDROGEN
%FORMAT(10I8)
3 12 3 12 15 4 12 18 5 18
24 6 24 42 3 24 30 7 42 48
5 42 45 4 48 54 6
%FLAG ANGLE_FORCE_CONSTANT
%FORMAT(5E16.8)
3.50000000E+01 5.00000000E+01 5.00000000E+01 5.00000000E+01 8.00000000E+01
7.00000000E+01 5.00000000E+01 8.00000000E+01 8.00000000E+01 6.30000000E+01
6.30000000E+01
%FLAG ANGLE_EQUIL_VALUE
%FORMAT(5E16.8)
1.91113553E+00 1.91113553E+00 2.09439510E+00 2.06018665E+00 2.10137642E+00
2.03505391E+00 2.12755636E+00 2.14500965E+00 1.91462619E+00 1.92160751E+00
1.93906080E+00
%FLAG ANGLES_INC_HYDROGEN
%FORMAT(10I8)
0 3 6 1 0 3 9 1 0 3
12 2 6 3 9 1 6 3 12 2
9 3 12 2 12 18 21 3 18 24
27 2 21 18 24 4 24 30 33 2
24 30 36 2 24 30 39 2 27 24
30 2 27 24 42 2 33 30 36 1
33 30 39 1 36 30 39 1 42 48
51 3 48 54 57 2 48 54 60 2
48 54 63 2 51 48 54 4 57 54
60 1 57 54 63 1 60 54 63 1
%FLAG ANGLES_WITHOUT_HYDROGEN
%FORMAT(10I8)
3 12 15 5 3 12 18 6 12 18
24 7 15 12 18 8 18 24 30 9
18 24 42 10 24 42 45 5 24 42
48 6 30 24 42 11 42 48 54 7
45 42 48 8
%FLAG DIHEDRAL_FORCE_CONSTANT
%FORMAT(5E16.8)
8.00000000E-01 8.00000000E-02 2.50000000E+00 2.50000000E+00 2.00000000E+00
1.55555556E-01 1.10000000E+00 0.00000000E+00 0.00000000E+00 8.00000000E-01
1.80000000E+00 4.20000000E-01 2.70000000E-01 5.50000000E-01 1.58000000E+00
4.50000000E-01 4.00000000E-01 2.00000000E-01 2.00000000E-01 1.05000000E+01
%FLAG DIHEDRAL_PERIODICITY
%FORMAT(5E16.8)
1.00000000E+00 3.00000000E+00 2.00000000E+00 2.00000000E+00 1.00000000E+00
3.00000000E+00 2.00000000E+00 1.00000000E+00 1.00000000E+00 3.00000000E+00
2.00000000E+00 3.00000000E+00 2.00000000E+00 3.00000000E+00 2.00000000E+00
1.00000000E+00 3.00000000E+00 2.00000000E+00 1.00000000E+00 2.00000000E+00
%FLAG DIHEDRAL_PHASE
%FORMAT(5E16.8)
0.00000000E+00 3.14159265E+00 3.14159265E+00 3.14159265E+00 0.00000000E+00
0.00000000E+00 3.14159265E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00
0.00000000E+00 0.00000000E+00 0.00000000E+00 3.14159265E+00 3.14159265E+00
3.14159265E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.14159265E+00
%FLAG SCEE_SCALE_FACTOR
%FORMAT(5E16.8)
1.20000000E+00 0.00000000E+00 1.20000000E+00 1.20000000E+00 0.00000000E+00
1.20000000E+00 0.00000000E+00 1.20000000E+00 1.20000000E+00 1.20000000E+00
0.00000000E+00 1.20000000E+00 0.00000000E+00 1.20000000E+00 0.00000000E+00
0.00000000E+00 1.20000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00
%FLAG SCNB_SCALE_FACTOR
%FORMAT(5E16.8)
2.00000000E+00 0.00000000E+00 2.00000000E+00 2.00000000E+00 0.00000000E+00
2.00000000E+00 0.00000000E+00 2.00000000E+00 2.00000000E+00 2.00000000E+00
0.00000000E+00 2.00000000E+00 0.00000000E+00 2.00000000E+00 0.00000000E+00
0.00000000E+00 2.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00
%FLAG DIHEDRALS_INC_HYDROGEN
%FORMAT(10I8)
0 3 12 15 1 0 3 -12 15 2
3 12 18 21 3 6 3 12 15 1
6 3 -12 15 2 9 3 12 15 1
9 3 -12 15 2 15 12 18 21 4
15 12 -18 21 5 18 24 30 33 6
18 24 30 36 6 18 24 30 39 6
24 42 48 51 3 27 24 30 33 6
27 24 30 36 6 27 24 30 39 6
27 24 42 45 1 27 24 -42 45 2
42 24 30 33 6 42 24 30 36 6
42 24 30 39 6 45 42 48 51 4
45 42 -48 51 5 21 18 -24 -12 7
51 48 -54 -42 7 51 48 54 60 8
21 18 24 30 8 42 48 54 57 8
6 3 12 18 9 42 48 54 63 8
51 48 54 57 8 21 18 24 42 8
0 3 12 18 9 42 48 54 60 8
27 24 42 48 8 21 18 24 27 8
51 48 54 63 8 9 3 12 18 9
12 18 24 27 8
%FLAG DIHEDRALS_WITHOUT_HYDROGEN
%FORMAT(10I8)
3 12 18 24 3 12 18 24 30 10
12 18 -24 30 11 12 18 -24 30 5
12 18 24 42 12 12 18 -24 42 13
15 12 18 24 3 18 24 42 48 14
18 24 -42 48 15 18 24 -42 48 16
24 42 48 54 3 30 24 42 48 17
30 24 -42 48 18 30 24 -42 48 19
45 42 48 54 3 15 12 -18 -3 20
45 42 -48 -24 20 18 24 42 45 8
30 24 42 45 8
%FLAG SOLTY
%FORMAT(5E16.8)
%FLAG HBOND_ACOEF
%FORMAT(5E16.8)
%FLAG HBOND_BCOEF
%FORMAT(5E16.8)
%FLAG HBCUT
%FORMAT(5E16.8)
%FLAG TREE_CHAIN_CLASSIFICATION
%FORMAT(20a4)
BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA
BLA BLA
%FLAG JOIN_ARRAY
%FORMAT(10I8)
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0
%FLAG IROTAT
%FORMAT(10I8)
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0
%FLAG BOX_DIMENSIONS
%FORMAT(5E16.8)
9.00000000E+01 3.00000000E+01 3.00000000E+01 3.00000000E+01
%FLAG RADIUS_SET
%FORMAT(1a80)
0
%FLAG RADII
%FORMAT(5E16.8)
0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00
0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00
0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00
0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00
0.00000000E+00 0.00000000E+00
%FLAG SCREEN
%FORMAT(5E16.8)
0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00
0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00
0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00
0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00
0.00000000E+00 0.00000000E+00
%FLAG IPOL
%FORMAT(1I8)
0

View File

@@ -0,0 +1,26 @@
CRYST1 30.000 30.000 30.000 90.00 90.00 90.00 P 1 1
ATOM 1 H1 ACE A 1 2.000 1.000 -0.000 0.00 0.00 H
ATOM 2 CH3 ACE A 1 2.000 2.090 0.000 0.00 0.00 C
ATOM 3 H2 ACE A 1 1.486 2.454 0.890 0.00 0.00 H
ATOM 4 H3 ACE A 1 1.486 2.454 -0.890 0.00 0.00 H
ATOM 5 C ACE A 1 3.427 2.641 -0.000 0.00 0.00 C
ATOM 6 O ACE A 1 4.391 1.877 -0.000 0.00 0.00 O
ATOM 7 N ALA A 2 3.555 3.970 -0.000 0.00 0.00 N
ATOM 8 H ALA A 2 2.733 4.556 -0.000 0.00 0.00 H
ATOM 9 CA ALA A 2 4.853 4.614 -0.000 0.00 0.00 C
ATOM 10 HA ALA A 2 5.408 4.316 0.890 0.00 0.00 H
ATOM 11 CB ALA A 2 5.661 4.221 -1.232 0.00 0.00 C
ATOM 12 HB1 ALA A 2 5.123 4.521 -2.131 0.00 0.00 H
ATOM 13 HB2 ALA A 2 6.630 4.719 -1.206 0.00 0.00 H
ATOM 14 HB3 ALA A 2 5.809 3.141 -1.241 0.00 0.00 H
ATOM 15 C ALA A 2 4.713 6.129 0.000 0.00 0.00 C
ATOM 16 O ALA A 2 3.601 6.653 0.000 0.00 0.00 O
ATOM 17 N NME A 3 5.846 6.835 0.000 0.00 0.00 N
ATOM 18 H NME A 3 6.737 6.359 -0.000 0.00 0.00 H
ATOM 19 C NME A 3 5.846 8.284 0.000 0.00 0.00 C
ATOM 20 H1 NME A 3 4.819 8.648 0.000 0.00 0.00 H
ATOM 21 H2 NME A 3 6.360 8.648 0.890 0.00 0.00 H
ATOM 22 H3 NME A 3 6.360 8.648 -0.890 0.00 0.00 H
TER 23 NME A 3
CONECT 5 7
CONECT 15 17

View File

@@ -0,0 +1,14 @@
alanine-dipeptide.solvated.pdb
22
0.7494821 1.2436848 0.8743532 1.0856344 2.2423820 0.5955986
0.4304414 2.9747953 1.0671825 1.0497815 2.3544810 -0.4880289
2.5015950 2.4471725 1.0820421 3.1003812 1.5343071 1.6479120
3.0220696 3.6519467 0.8741013 2.4411554 4.3533213 0.4373955
4.3920715 4.0500473 1.2160543 4.7674596 3.4172266 2.0202454
5.2805058 3.8202998 -0.0180103 4.9565949 4.4537317 -0.8438106
6.3180425 4.0583459 0.2164072 5.2327259 2.7740601 -0.3200050
4.4431625 5.5106563 1.7135265 3.4307644 6.2198007 1.6891606
5.6170320 5.9613562 2.1744082 6.3997462 5.3231585 2.1616313
5.8784762 7.3296314 2.6320299 5.1056278 8.0184146 2.2908769
5.9253575 7.3544224 3.7207393 6.8360338 7.6745804 2.2419090
30.0000000 30.0000000 30.0000000 90.0000000 90.0000000 90.0000000

33089
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "molstar",
"version": "3.2.0",
"version": "5.9.0",
"description": "A comprehensive macromolecular library.",
"homepage": "https://github.com/molstar/molstar#readme",
"repository": {
@@ -10,29 +10,30 @@
"bugs": {
"url": "https://github.com/molstar/molstar/issues"
},
"engines": {
"node": ">=22.0.0"
},
"scripts": {
"lint": "eslint .",
"lint-fix": "eslint . --fix",
"test": "npm install --no-save \"gl@^5.0.0\" && npm run lint && jest",
"test": "npm install --no-save \"gl@^6.0.2\" && npm run lint && jest",
"jest": "jest",
"build": "npm run build-tsc && npm run build-extra && npm run build-webpack",
"clean": "node ./scripts/clean.js",
"clean": "node ./scripts/clean.js --all",
"clean:build": "node ./scripts/clean.js --build",
"build": "npm run build:apps && npm run build:lib",
"build:apps": "node ./scripts/build.mjs -a -e --prd",
"build:lib": "concurrently \"tsc --incremental\" \"tsc --build tsconfig.commonjs.json --incremental\" && npm run build:lib-extra",
"build:lib-extra": "node scripts/write-version.mjs && cpx \"src/**/*.{scss,html,ico,jpg}\" lib/ && cpx \"src/**/*.{scss,html,ico,jpg}\" lib/commonjs/ && tsc-alias -p tsconfig.json",
"rebuild": "npm run clean && npm run build",
"build-viewer": "npm run build-tsc && npm run build-extra && npm run build-webpack-viewer",
"build-tsc": "concurrently \"tsc --incremental\" \"tsc --build tsconfig.commonjs.json --incremental\"",
"build-extra": "cpx \"src/**/*.{scss,html,ico}\" lib/",
"build-webpack": "webpack --mode production --config ./webpack.config.production.js",
"build-webpack-viewer": "webpack --mode production --config ./webpack.config.viewer.js",
"watch": "concurrently -c \"green,green,gray,gray\" --names \"tsc,srv,ext,wpc\" --kill-others \"npm:watch-tsc\" \"npm:watch-servers\" \"npm:watch-extra\" \"npm:watch-webpack\"",
"watch-viewer": "concurrently -c \"green,gray,gray\" --names \"tsc,ext,wpc\" --kill-others \"npm:watch-tsc\" \"npm:watch-extra\" \"npm:watch-webpack-viewer\"",
"watch-viewer-debug": "concurrently -c \"green,gray,gray\" --names \"tsc,ext,wpc\" --kill-others \"npm:watch-tsc\" \"npm:watch-extra\" \"npm:watch-webpack-viewer-debug\"",
"watch-tsc": "tsc --watch --incremental",
"watch-servers": "tsc --build tsconfig.commonjs.json --watch --incremental",
"watch-extra": "cpx \"src/**/*.{scss,html,ico}\" lib/ --watch",
"watch-webpack": "webpack -w --mode development --stats minimal",
"watch-webpack-viewer": "webpack -w --mode development --stats minimal --config ./webpack.config.viewer.js",
"watch-webpack-viewer-debug": "webpack -w --mode development --stats minimal --config ./webpack.config.viewer.debug.js",
"dev": "node ./scripts/build.mjs",
"dev:all": "node ./scripts/build.mjs -a -e -bt",
"dev:viewer": "node ./scripts/build.mjs -a viewer",
"dev:apps": "node ./scripts/build.mjs -a",
"dev:examples": "node ./scripts/build.mjs -e",
"dev:browser-tests": "node ./scripts/build.mjs -bt",
"serve": "http-server -p 1338 -g",
"deploy:local": "npm run clean:build && npm run build:apps && node ./scripts/deploy.js --local",
"deploy:remote": "npm run clean:build && npm run build:apps && node ./scripts/deploy.js",
"model-server": "node lib/commonjs/servers/model/server.js",
"model-server-watch": "nodemon --watch lib lib/commonjs/servers/model/server.js",
"volume-server-test": "node lib/commonjs/servers/volume/server.js --idMap em 'test/${id}.mdb' --defaultPort 1336",
@@ -43,11 +44,15 @@
},
"files": [
"lib/",
"build/viewer/"
"build/viewer/",
"build/mvs-stories/"
],
"bin": {
"cif2bcif": "lib/commonjs/cli/cif2bcif/index.js",
"cifschema": "lib/commonjs/cli/cifschema/index.js",
"mvs-validate": "lib/commonjs/cli/mvs/mvs-validate.js",
"mvs-render": "lib/commonjs/cli/mvs/mvs-render.js",
"mvs-print-schema": "lib/commonjs/cli/mvs/mvs-print-schema.js",
"model-server": "lib/commonjs/servers/model/server.js",
"model-server-query": "lib/commonjs/servers/model/query.js",
"model-server-preprocess": "lib/commonjs/servers/model/preprocess.js",
@@ -69,13 +74,15 @@
"js"
],
"transform": {
"\\.ts$": "ts-jest"
"\\.ts$": ["esbuild-jest-transform", { "tsconfigRaw": "{\"compilerOptions\":{\"useDefineForClassFields\":false}}" }]
},
"moduleDirectories": [
"node_modules",
"lib"
],
"testURL": "http://localhost/",
"testEnvironmentOptions": {
"url": "http://localhost/"
},
"testRegex": "\\.spec\\.ts$"
},
"author": "Mol* Contributors",
@@ -87,74 +94,115 @@
"Ludovic Autin <autin@scripps.edu>",
"Michal Malý <michal.maly@ibt.cas.cz>",
"Jiří Černý <jiri.cerny@ibt.cas.cz>",
"Panagiotis Tourlas <panagiot_tourlov@hotmail.com>"
"Panagiotis Tourlas <panagiot_tourlov@hotmail.com>",
"Adam Midlik <midlik@gmail.com>",
"Koya Sakuma <koya.sakuma.work@gmail.com>",
"Gianluca Tomasello <giagitom@gmail.com>",
"Ke Ma <mark.ma@rcsb.org>",
"Jason Pattle <jpattle@exscientia.co.uk>",
"David Williams <dwilliams@nobiastx.com>",
"Zhenyu Zhang <jump2cn@gmail.com>",
"Russell Parker <russell@benchling.com>",
"Dominik Tichy <tichydominik451@gmail.com>",
"Yana Rose <yana.v.rose@gmail.com>",
"Yakov Pechersky <ffxen158@gmail.com>",
"Christian Dominguez <christian.99dominguez@gmail.com>",
"Cai Huiyu <szmun.caihy@gmail.com>",
"Ryan DiRisio <rjdiris@gmail.com>",
"Dušan Veľký <dvelky@mail.muni.cz>",
"Neli Fonseca <neli@ebi.ac.uk>",
"Paul Pillot <paul.pillot@tandemai.com>",
"Herman Bergwerf <post@hbergwerf.nl>",
"Eric E <etongfu@outlook.com>",
"Xavier Martinez <xavier.martinez.xm@gmail.com>",
"Alex Chan <smalldirkalex@gmail.com>",
"Simeon Borko <simeon.borko@gmail.com>",
"Ventura Rivera <venturaxrivera@gmail.com>",
"Andy Turner <agdturner@gmail.com>",
"Lukáš Polák <admin@lukaspolak.cz>",
"Chetan Mishra <chetan.s115@gmail.com>",
"Zach Charlop-Powers <zach.charlop.powers@gmail.com>",
"Kim Juho <juho_kim@outlook.com>",
"Victoria Doshchenko <doshchenko.victoria@gmail.com>",
"Diego del Alamo <diego.delalamo@gmail.com>",
"Tianzhen Lin (Tangent) <tangent@usa.net>"
],
"license": "MIT",
"devDependencies": {
"@graphql-codegen/add": "^3.1.1",
"@graphql-codegen/cli": "^2.5.0",
"@graphql-codegen/time": "^3.1.1",
"@graphql-codegen/typescript": "^2.4.3",
"@graphql-codegen/typescript-graphql-files-modules": "^2.1.1",
"@graphql-codegen/typescript-graphql-request": "^4.3.4",
"@graphql-codegen/typescript-operations": "^2.2.4",
"@types/cors": "^2.8.12",
"@types/gl": "^4.1.0",
"@types/jest": "^27.4.0",
"@typescript-eslint/eslint-plugin": "^5.10.2",
"@typescript-eslint/parser": "^5.10.2",
"@types/cors": "^2.8.19",
"@types/gl": "^6.0.5",
"@types/jest": "^30.0.0",
"@types/pngjs": "^6.0.5",
"@types/react": "^18.3.28",
"@types/react-dom": "^18.3.7",
"@types/webxr": "^0.5.24",
"@typescript-eslint/eslint-plugin": "^8.59.1",
"@typescript-eslint/parser": "^8.59.1",
"benchmark": "^2.1.4",
"concurrently": "^7.0.0",
"cpx2": "^4.1.2",
"crypto-browserify": "^3.12.0",
"css-loader": "^6.6.0",
"eslint": "^8.8.0",
"extra-watch-webpack-plugin": "^1.0.3",
"file-loader": "^6.2.0",
"fs-extra": "^10.0.0",
"graphql": "^16.3.0",
"http-server": "^14.1.0",
"jest": "^27.5.0",
"mini-css-extract-plugin": "^2.5.3",
"path-browserify": "^1.0.1",
"raw-loader": "^4.0.2",
"sass": "^1.49.7",
"sass-loader": "^12.4.0",
"simple-git": "^3.1.1",
"stream-browserify": "^3.0.0",
"style-loader": "^3.3.1",
"ts-jest": "^27.1.3",
"typescript": "^4.5.5",
"webpack": "^5.68.0",
"webpack-cli": "^4.9.2"
"concurrently": "^9.2.1",
"cpx2": "^8.0.2",
"css-loader": "^7.1.4",
"esbuild": "^0.28.0",
"esbuild-jest-transform": "^2.0.1",
"esbuild-sass-plugin": "^3.7.0",
"eslint": "^10.3.0",
"fs-extra": "^11.3.4",
"globals": "^17.6.0",
"http-server": "^14.1.1",
"jest": "^30.3.0",
"jpeg-js": "^0.4.4",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"sass": "^1.99.0",
"simple-git": "^3.36.0",
"tsc-alias": "^1.8.17",
"typescript": "^6.0.3"
},
"dependencies": {
"@types/argparse": "^2.0.10",
"@types/benchmark": "^2.1.1",
"@types/compression": "1.7.2",
"@types/express": "^4.17.13",
"@types/node": "^16.11.22",
"@types/node-fetch": "^2.5.12",
"@types/react": "^17.0.39",
"@types/react-dom": "^17.0.11",
"@types/swagger-ui-dist": "3.30.1",
"@types/argparse": "^2.0.17",
"@types/benchmark": "^2.1.5",
"@types/compression": "1.8.1",
"@types/express": "^5.0.6",
"@types/node": "^22.19.17",
"@types/swagger-ui-dist": "3.30.6",
"argparse": "^2.0.1",
"body-parser": "^1.19.1",
"compression": "^1.7.4",
"cors": "^2.8.5",
"express": "^4.17.2",
"compression": "^1.8.1",
"cors": "^2.8.6",
"express": "^5.2.1",
"h264-mp4-encoder": "^1.0.12",
"immer": "^9.0.12",
"immutable": "^4.0.0",
"node-fetch": "^2.6.7",
"rxjs": "^7.5.2",
"swagger-ui-dist": "^4.5.0",
"tslib": "^2.3.1",
"util.promisify": "^1.1.1",
"xhr2": "^0.2.1"
"immutable": "^5.1.5",
"io-ts": "^2.2.22",
"mutative": "^1.3.0",
"react-markdown": "^10.1.0",
"remark-gfm": "^4.0.1",
"rxjs": "^7.8.2",
"swagger-ui-dist": "^5.32.5",
"tslib": "^2.8.1"
},
"peerDependencies": {
"react": "^17.0.2",
"react-dom": "^17.0.2"
"@google-cloud/storage": "^7.14.0",
"canvas": "^2.11.2",
"gl": "^6.0.2",
"jpeg-js": "^0.4.4",
"pngjs": "^6.0.0",
"react": ">=16.14.0",
"react-dom": ">=16.14.0"
},
"peerDependenciesMeta": {
"@google-cloud/storage": {
"optional": true
},
"canvas": {
"optional": true
},
"gl": {
"optional": true
},
"jpeg-js": {
"optional": true
},
"pngjs": {
"optional": true
}
}
}

350
scripts/build.mjs Normal file
View File

@@ -0,0 +1,350 @@
/**
* Copyright (c) 2017-2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
* @author Eric E <etongfu@@outlook.com>
*/
import * as esbuild from 'esbuild';
import * as fs from 'fs';
import * as path from 'path';
import * as argparse from 'argparse';
import { sassPlugin } from 'esbuild-sass-plugin';
import * as os from 'os';
const Apps = [
// Apps
{ kind: 'app', name: 'viewer', themes: ['light', 'dark', 'blue'] },
{ kind: 'app', name: 'docking-viewer' },
{ kind: 'app', name: 'mesoscale-explorer' },
{ kind: 'app', name: 'mvs-stories', globalName: 'mvsStories', filename: 'mvs-stories.js' },
// Examples
{ kind: 'example', name: 'proteopedia-wrapper' },
{ kind: 'example', name: 'basic-wrapper' },
{ kind: 'example', name: 'lighting' },
{ kind: 'example', name: 'alpha-orbitals' },
{ kind: 'example', name: 'alphafolddb-pae' },
{ kind: 'example', name: 'mvs-stories' },
{ kind: 'example', name: 'ihm-restraints' },
{ kind: 'example', name: 'interactions' },
{ kind: 'example', name: 'ligand-editor' },
];
function findApp(name, kind) {
return Apps.find(a => a.name === name && a.kind === kind);
}
function mkDir(dir) {
try {
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
} catch (error) {
console.error(`Failed to create directory ${dir}:`, error);
process.exit(1);
}
}
function handleFileError(error, operation, path) {
console.error(`Failed to ${operation} ${path}:`, error);
process.exit(1);
}
function fileLoaderPlugin(options) {
mkDir(options.out);
return {
name: 'file-loader',
setup(build) {
build.onLoad({ filter: /\.jpg$/ }, async (args) => {
try {
const name = path.basename(args.path);
mkDir(path.resolve(options.out, 'images'));
await fs.promises.copyFile(args.path, path.resolve(options.out, 'images', name));
return {
contents: `images/${name}`,
loader: 'text',
};
} catch (error) {
handleFileError(error, 'copy', args.path);
}
});
build.onLoad({ filter: /\.(html|ico)$/ }, async (args) => {
const name = path.basename(args.path);
await fs.promises.copyFile(args.path, path.resolve(options.out, name));
return {
contents: '',
loader: 'empty',
};
});
},
};
}
function examplesCssRenamePlugin({ root }) {
return {
name: 'example-css-rename',
setup(build) {
build.onEnd(async () => {
if (fs.existsSync(path.resolve(root, 'index.css'))) {
await fs.promises.rename(
path.resolve(root, 'index.css'),
path.resolve(root, 'molstar.css')
);
}
});
}
};
}
function resolveEntryPath(path) {
if (!fs.existsSync(path)) {
return path + 'x'; // fallback to .tsx
}
return path;
}
function getPaths(app) {
if (app.kind === 'app') {
return {
prefix: `./build/${app.name}`,
entry: resolveEntryPath(`./src/apps/${app.name}/index.ts`),
outfile: `./build/${app.name}/${app.filename || 'molstar.js'}`,
};
}
if (app.kind === 'example') {
return {
prefix: `./build/examples/${app.name}`,
entry: resolveEntryPath(`./src/examples/${app.name}/index.ts`),
outfile: `./build/examples/${app.name}/${app.filename || 'index.js'}`,
};
}
if (app.kind === 'browser-test') {
return {
prefix: `./build/tests/browser`,
entry: resolveEntryPath(`./src/tests/browser/${app.name}.ts`),
outfile: `./build/tests/browser/${app.name}.js`,
};
}
throw new Error(`Unknown app kind: ${app.kind}`);
}
async function createBundle(app) {
const { name, kind } = app;
const { prefix, entry, outfile } = getPaths(app);
const ctx = await esbuild.context({
entryPoints: [entry],
tsconfig: './tsconfig.json',
bundle: true,
minify: isProduction,
minifyIdentifiers: false,
sourcemap: includeSourceMap,
globalName: app.globalName || 'molstar',
outfile,
plugins: [
fileLoaderPlugin({ out: prefix }),
sassPlugin({
type: 'css',
silenceDeprecations: ['import'],
logger: {
warn: (msg) => console.warn(msg),
debug: () => { },
}
}),
...(kind === 'example' ? [examplesCssRenamePlugin({ root: prefix })] : []),
],
external: ['crypto', 'fs', 'path', 'stream'],
loader: {
},
color: true,
logLevel: 'info',
define: {
'process.env.NODE_ENV': JSON.stringify(NODE_ENV_PRD ? 'production' : 'development'),
'process.env.DEBUG': JSON.stringify(process.env.DEBUG || false),
__MOLSTAR_PLUGIN_VERSION__: JSON.stringify(VERSION),
__MOLSTAR_BUILD_TIMESTAMP__: `${TIMESTAMP}`,
},
});
await ctx.rebuild();
if (!isProduction) await ctx.watch();
}
async function createTheme(appName, themeName) {
// const { prefix, entry, outfile } = getPaths(app);
const ctx = await esbuild.context({
entryPoints: [resolveEntryPath(`./src/apps/${appName}/theme/${themeName}.ts`)],
tsconfig: './tsconfig.json',
bundle: true,
minify: isProduction,
minifyIdentifiers: false,
sourcemap: false,
outfile: `./build/${appName}/theme/${themeName}.js`,
plugins: [
// fileLoaderPlugin({ out: prefix }),
sassPlugin({
type: 'css',
silenceDeprecations: ['import'],
logger: {
warn: (msg) => console.warn(msg),
debug: () => { },
}
}),
],
color: true,
logLevel: 'info',
define: {
'process.env.NODE_ENV': JSON.stringify(NODE_ENV_PRD ? 'production' : 'development'),
'process.env.DEBUG': JSON.stringify(process.env.DEBUG || false),
},
});
await ctx.rebuild();
if (!isProduction) await ctx.watch();
}
function findBrowserTests(names) {
const dir = path.resolve('./src', 'tests', 'browser');
let files = fs.readdirSync(dir).filter(file => file.endsWith('.ts')).map(file => file.replace('.ts', ''));
if (names.length) {
files = files.filter(file => names.includes(file));
}
return files.map(name => ({ kind: 'browser-test', name }));
}
const argParser = new argparse.ArgumentParser({
add_help: true,
description: 'Mol* Build'
});
argParser.add_argument('--prd', {
help: 'Create a production build.',
required: false,
action: 'store_true',
});
argParser.add_argument('--no-src-map', {
help: 'Do not include source map.',
required: false,
action: 'store_true',
});
argParser.add_argument('--apps', '-a', {
help: 'Apps to build.',
required: false,
nargs: '*',
});
argParser.add_argument('--examples', '-e', {
help: 'Examples to build.',
required: false,
nargs: '*',
});
argParser.add_argument('--browser-tests', '-bt', {
help: 'Browser Tests to build.',
required: false,
nargs: '*',
});
argParser.add_argument('--port', '-p', {
help: 'Port.',
required: false,
default: 1338,
type: 'int',
});
argParser.add_argument('--host', {
help: 'Show all available host addresses.',
required: false,
action: 'store_true',
});
const args = argParser.parse_args();
const isProduction = !!args.prd;
const includeSourceMap = !args.no_src_map;
const NODE_ENV_PRD = isProduction || process.env.NODE_ENV === 'production';
const VERSION = isProduction ? JSON.parse(fs.readFileSync('./package.json', 'utf8')).version : '(dev build)';
const TIMESTAMP = Date.now();
const apps = (!args.apps ? [] : (args.apps.length ? args.apps.map(a => findApp(a, 'app')).filter(a => a) : Apps.filter(a => a.kind === 'app')));
const examples = (!args.examples ? [] : (args.examples.length ? args.examples.map(e => findApp(e, 'example')).filter(a => a) : Apps.filter(a => a.kind === 'example')));
const browserTests = (!args.browser_tests ? [] : findBrowserTests(args.browser_tests));
console.log('Apps:', apps.map(a => a.name));
console.log('Examples:', examples.map(e => e.name));
console.log('Browser Tests', browserTests.map(e => e.name));
console.log('');
function getLocalIPs() {
const interfaces = os.networkInterfaces();
const ips = [];
for (const name of Object.keys(interfaces)) {
for (const iface of interfaces[name]) {
// Skip internal and non-IPv4 addresses
if (iface.internal || iface.family !== 'IPv4') continue;
ips.push(iface.address);
}
}
return ips;
}
async function main() {
const promises = [];
console.log(isProduction ? 'Building apps...' : 'Initial build...');
for (const app of apps) {
promises.push(createBundle(app));
if (app.themes) {
for (const theme of app.themes) {
promises.push(createTheme(app.name, theme));
}
}
}
for (const example of examples) promises.push(createBundle(example));
for (const browserTest of browserTests) promises.push(createBundle(browserTest));
await Promise.all(promises);
if (isProduction) {
console.log('Done.');
process.exit(0);
}
console.log('Initial build complete.');
const certfile = './dev.pem';
const keyfile = './dev-key.pem';
const sslEnabled = fs.existsSync(certfile) && fs.existsSync(keyfile);
const protocol = sslEnabled ? 'https' : 'http';
const ctx = await esbuild.context({});
ctx.serve({
servedir: './',
port: args.port,
host: '0.0.0.0', // Always listen on all interfaces
certfile: sslEnabled ? certfile : undefined,
keyfile: sslEnabled ? keyfile : undefined,
});
console.log('');
console.log(`Server URL: ${protocol}://localhost:${args.port}`);
if (args.host) {
console.log('Available host addresses:');
const ips = getLocalIPs();
ips.forEach(ip => console.log(` ${protocol}://${ip}:${args.port}`));
}
console.log('');
console.log('Watching for changes...');
console.log('');
console.log('Press Ctrl+C to stop.');
}
main().catch((err) => {
console.error(err);
process.exit(1);
});

View File

@@ -6,6 +6,7 @@
const fs = require('fs');
const path = require('path');
const argparse = require('argparse');
function removeDir(dirPath) {
for (const ent of fs.readdirSync(dirPath)) {
@@ -24,11 +25,29 @@ function remove(entryPath) {
fs.unlinkSync(entryPath);
}
const toClean = [
path.resolve(__dirname, '../build'),
path.resolve(__dirname, '../lib'),
path.resolve(__dirname, '../tsconfig.tsbuildinfo'),
];
const argParser = new argparse.ArgumentParser({
add_help: true,
description: 'Clean Script'
});
argParser.add_argument('--build', { required: false, action: 'store_true' });
argParser.add_argument('--lib', { required: false, action: 'store_true' });
argParser.add_argument('--all', { required: false, action: 'store_true' });
const args = argParser.parse_args();
const toClean = [];
if (args.build || args.all) {
toClean.push(path.resolve(__dirname, '../build'));
toClean.push(path.resolve(__dirname, '../deploy/data'));
}
if (args.lib || args.all) {
toClean.push(
path.resolve(__dirname, '../lib'),
path.resolve(__dirname, '../tsconfig.tsbuildinfo'),
);
}
console.log('\n###', 'cleaning', toClean.join(', '));
toClean.forEach(ph => {
if (fs.existsSync(ph)) {

View File

@@ -1,21 +1,34 @@
/**
* Copyright (c) 2019-2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
* Copyright (c) 2019-2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
* @author David Sehnal <david.sehnal@gmail.com>
*/
const git = require('simple-git');
const path = require('path');
const fs = require("fs");
const fse = require("fs-extra");
const fs = require('fs');
const fse = require('fs-extra');
const argparse = require('argparse');
const remoteUrl = "https://github.com/molstar/molstar.github.io.git";
const VERSION = require(path.resolve(__dirname, '../package.json')).version;
const MVS_STORIES_VERSION = require(path.resolve(__dirname, '../src/apps/mvs-stories/version.ts')).VERSION;
const remoteUrl = 'https://github.com/molstar/molstar.github.io.git';
const dataDir = path.resolve(__dirname, '../data/');
const buildDir = path.resolve(__dirname, '../build/');
const deployDir = path.resolve(buildDir, 'deploy/');
const localPath = path.resolve(deployDir, 'molstar.github.io/');
const deployDir = path.resolve(__dirname, '../deploy/');
const localPath = path.resolve(deployDir, 'data/');
const repositoryPath = path.resolve(deployDir, 'molstar.github.io/');
const analyticsTag = /<!-- __MOLSTAR_ANALYTICS__ -->/g;
const analyticsCode = `<!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "c414cbae2d284ea995171a81e4a3e721"}'></script><!-- End Cloudflare Web Analytics -->`;
const analyticsCode = `<!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "c414cbae2d284ea995171a81e4a3e721"}'></script><!-- End Cloudflare Web Analytics --><iframe src="https://web3dsurvey.com/collector-iframe.html" style="width: 1px; height: 1px;"></iframe>`;
const manifestTag = /<!-- __MOLSTAR_MANIFEST__ -->/g;
const manifestCode = `<link rel="manifest" href="./manifest.webmanifest">`;
const pwaTag = /<!-- __MOLSTAR_PWA__ -->/g;
const pwaCode = `<script src='./pwa.js'></script>`;
function log(command, stdout, stderr) {
if (command) {
@@ -31,30 +44,117 @@ function addAnalytics(path) {
fs.writeFileSync(path, result, 'utf8');
}
function addManifest(path) {
const data = fs.readFileSync(path, 'utf8');
const result = data.replace(manifestTag, manifestCode);
fs.writeFileSync(path, result, 'utf8');
}
function addPwa(path) {
const data = fs.readFileSync(path, 'utf8');
const result = data.replace(pwaTag, pwaCode);
fs.writeFileSync(path, result, 'utf8');
}
function addVersion(path) {
const data = fs.readFileSync(path, 'utf8');
const result = data.replace('__MOLSTAR_VERSION__', VERSION);
fs.writeFileSync(path, result, 'utf8');
}
function copyViewer() {
console.log('\n###', 'copy viewer files');
const viewerBuildPath = path.resolve(buildDir, '../build/viewer/');
const viewerBuildPath = path.resolve(buildDir, 'viewer/');
const viewerDeployPath = path.resolve(localPath, 'viewer/');
fse.copySync(viewerBuildPath, viewerDeployPath, { overwrite: true });
addAnalytics(path.resolve(viewerDeployPath, 'index.html'));
addManifest(path.resolve(viewerDeployPath, 'index.html'));
addPwa(path.resolve(viewerDeployPath, 'index.html'));
const pwaDataPath = path.resolve(dataDir, 'pwa/');
fse.copySync(pwaDataPath, viewerDeployPath, { overwrite: true });
addVersion(path.resolve(viewerDeployPath, 'sw.js'));
}
function copyMe() {
console.log('\n###', 'copy me files');
const meBuildPath = path.resolve(buildDir, 'mesoscale-explorer/');
const meDeployPath = path.resolve(localPath, 'me/viewer/');
fse.copySync(meBuildPath, meDeployPath, { overwrite: true });
addAnalytics(path.resolve(meDeployPath, 'index.html'));
}
function copyMVSStories() {
console.log('\n###', 'copy MVS stories files');
const mvsStoriesBuildPath = path.resolve(buildDir, 'mvs-stories/');
const mvsStoriesDeployPath = path.resolve(localPath, `stories-viewer/v${MVS_STORIES_VERSION}/`);
fse.copySync(mvsStoriesBuildPath, mvsStoriesDeployPath, { overwrite: true });
addAnalytics(path.resolve(mvsStoriesDeployPath, 'index.html'));
// TODO: add PWA
// addManifest(path.resolve(mvsStoriesDeployPath, 'index.html'));
// addPwa(path.resolve(mvsStoriesDeployPath, 'index.html'));
}
function copyDemo(name) {
console.log('\n###', `copy demo files for ${name}`);
const demoBuildPath = path.resolve(buildDir, `examples/${name}/`);
const demoDeployPath = path.resolve(localPath, `demos/${name}/`);
fse.copySync(demoBuildPath, demoDeployPath, { overwrite: true });
addAnalytics(path.resolve(demoDeployPath, 'index.html'));
}
function copyDemos() {
console.log('\n###', 'copy demos files');
const lightingBuildPath = path.resolve(buildDir, '../build/examples/lighting/');
const lightingDeployPath = path.resolve(localPath, 'demos/lighting/');
fse.copySync(lightingBuildPath, lightingDeployPath, { overwrite: true });
addAnalytics(path.resolve(lightingDeployPath, 'index.html'));
const orbitalsBuildPath = path.resolve(buildDir, '../build/examples/alpha-orbitals/');
const orbitalsDeployPath = path.resolve(localPath, 'demos/alpha-orbitals/');
fse.copySync(orbitalsBuildPath, orbitalsDeployPath, { overwrite: true });
addAnalytics(path.resolve(orbitalsDeployPath, 'index.html'));
copyDemo('lighting');
copyDemo('alpha-orbitals');
copyDemo('mvs-stories');
}
function copyFiles() {
copyViewer();
copyDemos();
try {
copyViewer();
copyMe();
copyMVSStories();
copyDemos();
} catch (e) {
console.error(e);
}
}
function copyToRepository() {
console.log('\n###', 'copy repository files');
fse.copySync(localPath, repositoryPath, { overwrite: true });
}
function syncRepository() {
console.log('\n###', 'sync repository');
if (!fs.existsSync(path.resolve(repositoryPath, '.git/'))) {
console.log('\n###', 'clone repository');
git()
.outputHandler(log)
.clone(remoteUrl, repositoryPath)
.fetch(['--all'])
.exec(copyToRepository);
} else {
console.log('\n###', 'update repository');
git()
.outputHandler(log)
.fetch(['--all'])
.reset(['--hard', 'origin/master'])
.exec(copyToRepository);
}
}
function commit() {
console.log('\n###', 'commit changes');
git()
.outputHandler(log)
.add(['-A'])
.commit(`Updated Apps and Demos
- Mol* version: ${VERSION}
- MVS Stories version: ${MVS_STORIES_VERSION}`)
.push();
}
if (!fs.existsSync(localPath)) {
@@ -62,26 +162,28 @@ if (!fs.existsSync(localPath)) {
fs.mkdirSync(localPath, { recursive: true });
}
process.chdir(localPath);
const argParser = new argparse.ArgumentParser({
add_help: true,
description: 'Mol* Deploy'
});
argParser.add_argument('--local',{
help: 'Do not commit to remote repository.',
required: false,
action: 'store_true',
});
const args = argParser.parse_args();
if (!fs.existsSync(path.resolve(localPath, '.git/'))) {
console.log('\n###', 'clone repository');
git()
.outputHandler(log)
.clone(remoteUrl, localPath)
.fetch(['--all'])
.exec(copyFiles)
.add(['-A'])
.commit('updated viewer & demos')
.push();
} else {
console.log('\n###', 'update repository');
git()
.outputHandler(log)
.fetch(['--all'])
.reset(['--hard', 'origin/master'])
.exec(copyFiles)
.add(['-A'])
.commit('updated viewer & demos')
.push();
}
copyFiles();
if (args.local) {
process.exit(0);
}
if (!fs.existsSync(repositoryPath)) {
console.log('\n###', 'create repositoryPath');
fs.mkdirSync(repositoryPath, { recursive: true });
}
process.chdir(repositoryPath);
syncRepository();
commit();

16
scripts/write-version.mjs Normal file
View File

@@ -0,0 +1,16 @@
/**
* Copyright (c) 2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import * as fs from 'fs';
const VERSION = JSON.parse(fs.readFileSync('./package.json', 'utf8')).version;
const TIMESTAMP = Date.now();
const file = `export var PLUGIN_VERSION = '${VERSION}';\nexport var PLUGIN_VERSION_DATE = new Date(${TIMESTAMP})`;
const files = ['./lib/mol-plugin/version.js', './lib/commonjs/mol-plugin/version.js'];
for (const f of files) {
if (!fs.existsSync(f)) continue;
fs.writeFileSync(f, file);
}

View File

@@ -9,6 +9,7 @@ import { Structure } from '../../mol-model/structure';
import { BuiltInTrajectoryFormat } from '../../mol-plugin-state/formats/trajectory';
import { PluginStateObject as PSO, PluginStateTransform } from '../../mol-plugin-state/objects';
import { createPluginUI } from '../../mol-plugin-ui';
import { renderReact18 } from '../../mol-plugin-ui/react18';
import { PluginUIContext } from '../../mol-plugin-ui/context';
import { PluginLayoutControlsDisplay } from '../../mol-plugin/layout';
import { DefaultPluginUISpec, PluginUISpec } from '../../mol-plugin-ui/spec';
@@ -26,7 +27,7 @@ import { ObjectKeys } from '../../mol-util/type-helpers';
import './index.html';
import { ShowButtons, StructurePreset, ViewportComponent } from './viewport';
require('mol-plugin-ui/skin/light.scss');
import '../../mol-plugin-ui/skin/light.scss';
export { PLUGIN_VERSION as version } from '../../mol-plugin/version';
export { setDebugMode, setProductionMode } from '../../mol-util/debug';
@@ -58,20 +59,22 @@ class Viewer {
}
static async create(elementOrId: string | HTMLElement, colors = [Color(0x992211), Color(0xDDDDDD)], showButtons = true) {
const o = { ...DefaultViewerOptions, ...{
layoutIsExpanded: false,
layoutShowControls: false,
layoutShowRemoteState: false,
layoutShowSequence: true,
layoutShowLog: false,
layoutShowLeftPanel: true,
const o = {
...DefaultViewerOptions, ...{
layoutIsExpanded: false,
layoutShowControls: false,
layoutShowRemoteState: false,
layoutShowSequence: true,
layoutShowLog: false,
layoutShowLeftPanel: true,
viewportShowExpand: true,
viewportShowControls: false,
viewportShowSettings: false,
viewportShowSelectionMode: false,
viewportShowAnimation: false,
} };
viewportShowExpand: true,
viewportShowControls: false,
viewportShowSettings: false,
viewportShowSelectionMode: false,
viewportShowAnimation: false,
}
};
const defaultSpec = DefaultPluginUISpec();
const spec: PluginUISpec = {
@@ -126,7 +129,7 @@ class Viewer {
? document.getElementById(elementOrId)
: elementOrId;
if (!element) throw new Error(`Could not get element with id '${elementOrId}'`);
const plugin = await createPluginUI(element, spec);
const plugin = await createPluginUI({ target: element, spec, render: renderReact18 });
(plugin.customState as any) = {
colorPalette: {
@@ -135,18 +138,16 @@ class Viewer {
}
};
plugin.behaviors.canvas3d.initialized.subscribe(v => {
if (v) {
PluginCommands.Canvas3D.SetSettings(plugin, { settings: {
renderer: {
...plugin.canvas3d!.props.renderer,
backgroundColor: ColorNames.white,
},
camera: {
...plugin.canvas3d!.props.camera,
helper: { axes: { name: 'off', params: {} } }
}
} });
PluginCommands.Canvas3D.SetSettings(plugin, {
settings: {
renderer: {
...plugin.canvas3d!.props.renderer,
backgroundColor: ColorNames.white,
},
camera: {
...plugin.canvas3d!.props.camera,
helper: { axes: { name: 'off', params: {} } }
}
}
});
@@ -166,7 +167,7 @@ class Viewer {
structures.push({ ref: structureProperties?.ref || structure.ref });
}
// remove current structuresfrom hierarchy as they will be merged
// remove current structures from hierarchy as they will be merged
// TODO only works with using loadStructuresFromUrlsAndMerge once
// need some more API metho to work with the hierarchy
this.plugin.managers.structure.hierarchy.updateCurrent(this.plugin.managers.structure.hierarchy.current.structures, 'remove');

View File

@@ -1,5 +1,5 @@
/**
* Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
* Copyright (c) 2020-2024 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
@@ -31,7 +31,8 @@ function shinyStyle(plugin: PluginContext) {
postprocessing: {
...plugin.canvas3d!.props.postprocessing,
occlusion: { name: 'off', params: {} },
outline: { name: 'off', params: {} }
shadow: { name: 'off', params: {} },
outline: { name: 'off', params: {} },
}
} });
}
@@ -43,17 +44,13 @@ function occlusionStyle(plugin: PluginContext) {
},
postprocessing: {
...plugin.canvas3d!.props.postprocessing,
occlusion: { name: 'on', params: {
samples: 64,
radius: 8,
bias: 1.0,
blurKernelSize: 13
} },
outline: { name: 'on', params: {
scale: 1.0,
threshold: 0.33,
color: Color(0x0000),
} }
includeTransparent: true,
} },
shadow: { name: 'off', params: {} },
}
} });
}
@@ -201,14 +198,14 @@ const InteractionsPreset = StructureRepresentationPresetProvider({
const components = {
ligand: await presetStaticComponent(plugin, structureCell, 'ligand'),
surroundings: await plugin.builders.structure.tryCreateComponentFromSelection(structureCell, ligandSurroundings, `surroundings`),
interactions: await plugin.builders.structure.tryCreateComponentFromSelection(structureCell, ligandPlusSurroundings, `interactions`)
interactions: await presetStaticComponent(plugin, structureCell, 'ligand'),
};
const { update, builder, typeParams } = StructureRepresentationPresetProvider.reprBuilder(plugin, params);
const representations = {
ligand: builder.buildRepresentation(update, components.ligand, { type: 'ball-and-stick', typeParams: { ...typeParams, material: CustomMaterial, sizeFactor: 0.3 }, color: 'element-symbol', colorParams: { carbonColor: { name: 'element-symbol', params: {} } } }, { tag: 'ligand' }),
ballAndStick: builder.buildRepresentation(update, components.surroundings, { type: 'ball-and-stick', typeParams: { ...typeParams, material: CustomMaterial, sizeFactor: 0.1, sizeAspectRatio: 1 }, color: 'element-symbol', colorParams: { carbonColor: { name: 'element-symbol', params: {} } } }, { tag: 'ball-and-stick' }),
interactions: builder.buildRepresentation(update, components.interactions, { type: InteractionsRepresentationProvider, typeParams: { ...typeParams, material: CustomMaterial }, color: InteractionTypeColorThemeProvider }, { tag: 'interactions' }),
interactions: builder.buildRepresentation(update, components.interactions, { type: InteractionsRepresentationProvider, typeParams: { ...typeParams, material: CustomMaterial, includeParent: true, parentDisplay: 'between' }, color: InteractionTypeColorThemeProvider }, { tag: 'interactions' }),
label: builder.buildRepresentation(update, components.surroundings, { type: 'label', typeParams: { ...typeParams, material: CustomMaterial, background: false, borderWidth: 0.1 }, color: 'uniform', colorParams: { value: Color(0x000000) } }, { tag: 'label' }),
};

View File

@@ -0,0 +1,308 @@
/**
* Copyright (c) 2022-2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { Mp4Export } from '../../extensions/mp4-export';
import { DataFormatProvider } from '../../mol-plugin-state/formats/provider';
import { createPluginUI } from '../../mol-plugin-ui';
import { renderReact18 } from '../../mol-plugin-ui/react18';
import { PluginUIContext } from '../../mol-plugin-ui/context';
import { DefaultPluginUISpec, PluginUISpec } from '../../mol-plugin-ui/spec';
import { PluginConfig } from '../../mol-plugin/config';
import { PluginLayoutControlsDisplay } from '../../mol-plugin/layout';
import { PluginSpec } from '../../mol-plugin/spec';
import '../../mol-util/polyfill';
import { ObjectKeys } from '../../mol-util/type-helpers';
import { SaccharideCompIdMapType } from '../../mol-model/structure/structure/carbohydrates/constants';
import { Backgrounds } from '../../extensions/backgrounds';
import { LeftPanel, RightPanel } from './ui/panels';
import { Color } from '../../mol-util/color';
import { SpacefillRepresentationProvider } from '../../mol-repr/structure/representation/spacefill';
import { PluginBehaviors } from '../../mol-plugin/behavior';
import { MesoFocusLoci } from './behavior/camera';
import { GraphicsMode, MesoscaleState } from './data/state';
import { MesoSelectLoci } from './behavior/select';
import { Transparency } from '../../mol-gl/webgl/render-item';
import { LoadModel, loadExampleEntry, loadPdb, loadPdbIhm, loadUrl, openState } from './ui/states';
import { Asset } from '../../mol-util/assets';
import { AnimateCameraSpin } from '../../mol-plugin-state/animation/built-in/camera-spin';
import { AnimateCameraRock } from '../../mol-plugin-state/animation/built-in/camera-rock';
import { AnimateStateSnapshots } from '../../mol-plugin-state/animation/built-in/state-snapshots';
import { MesoViewportSnapshotDescription } from './ui/entities';
export { PLUGIN_VERSION as version } from '../../mol-plugin/version';
export { setDebugMode, setProductionMode, setTimingMode, consoleStats } from '../../mol-util/debug';
export type ExampleEntry = {
id: string,
label: string,
url: string,
type: 'molx' | 'molj' | 'cif' | 'bcif',
description?: string,
link?: string,
}
export type MesoscaleExplorerState = {
examples?: ExampleEntry[],
graphicsMode: GraphicsMode,
illumination: boolean,
stateRef?: string,
driver?: any,
stateCache: { [k: string]: any },
}
//
const Extensions = {
'backgrounds': PluginSpec.Behavior(Backgrounds),
'mp4-export': PluginSpec.Behavior(Mp4Export),
};
const DefaultMesoscaleExplorerOptions = {
customFormats: [] as [string, DataFormatProvider][],
extensions: ObjectKeys(Extensions),
layoutIsExpanded: true,
layoutShowControls: true,
layoutShowRemoteState: true,
layoutControlsDisplay: 'reactive' as PluginLayoutControlsDisplay,
layoutShowSequence: true,
layoutShowLog: true,
layoutShowLeftPanel: true,
collapseLeftPanel: false,
collapseRightPanel: false,
disableAntialiasing: PluginConfig.General.DisableAntialiasing.defaultValue,
pixelScale: PluginConfig.General.PixelScale.defaultValue,
pickScale: PluginConfig.General.PickScale.defaultValue,
transparency: 'blended' as Transparency,
preferWebgl1: PluginConfig.General.PreferWebGl1.defaultValue,
allowMajorPerformanceCaveat: PluginConfig.General.AllowMajorPerformanceCaveat.defaultValue,
powerPreference: PluginConfig.General.PowerPreference.defaultValue,
resolutionMode: PluginConfig.General.ResolutionMode.defaultValue,
illumination: false,
viewportShowExpand: PluginConfig.Viewport.ShowExpand.defaultValue,
viewportShowControls: PluginConfig.Viewport.ShowControls.defaultValue,
viewportShowSettings: PluginConfig.Viewport.ShowSettings.defaultValue,
viewportShowSelectionMode: true,
viewportShowAnimation: false,
viewportShowTrajectoryControls: false,
pluginStateServer: PluginConfig.State.DefaultServer.defaultValue,
volumeStreamingServer: PluginConfig.VolumeStreaming.DefaultServer.defaultValue,
volumeStreamingDisabled: !PluginConfig.VolumeStreaming.Enabled.defaultValue,
pdbProvider: PluginConfig.Download.DefaultPdbProvider.defaultValue,
emdbProvider: PluginConfig.Download.DefaultEmdbProvider.defaultValue,
saccharideCompIdMapType: 'default' as SaccharideCompIdMapType,
graphicsMode: 'quality' as GraphicsMode,
driver: undefined
};
type MesoscaleExplorerOptions = typeof DefaultMesoscaleExplorerOptions;
export class MesoscaleExplorer {
constructor(public plugin: PluginUIContext) {
}
async loadExample(id: string) {
const entries = (this.plugin.customState as MesoscaleExplorerState).examples || [];
const entry = entries.find(e => e.id === id);
if (entry !== undefined) {
await loadExampleEntry(this.plugin, entry);
}
}
async loadUrl(url: string, type: 'molx' | 'molj' | 'cif' | 'bcif') {
await loadUrl(this.plugin, url, type);
}
async loadPdb(id: string) {
await loadPdb(this.plugin, id);
}
/**
* @deprecated Scheduled for removal in v5. Use {@link loadPdbIhm | loadPdbIhm(id: string)} instead.
*/
async loadPdbDev(id: string) {
await this.loadPdbIhm(id);
}
async loadPdbIhm(id: string) {
await loadPdbIhm(this.plugin, id);
}
static async create(elementOrId: string | HTMLElement, options: Partial<MesoscaleExplorerOptions> = {}) {
const definedOptions = {} as any;
// filter for defined properies only so the default values
// are property applied
for (const p of Object.keys(options) as (keyof MesoscaleExplorerOptions)[]) {
if (options[p] !== void 0) definedOptions[p] = options[p];
}
const o: MesoscaleExplorerOptions = { ...DefaultMesoscaleExplorerOptions, ...definedOptions };
const defaultSpec = DefaultPluginUISpec();
const spec: PluginUISpec = {
actions: defaultSpec.actions,
behaviors: [
PluginSpec.Behavior(PluginBehaviors.Camera.CameraAxisHelper),
PluginSpec.Behavior(PluginBehaviors.Camera.CameraControls),
PluginSpec.Behavior(PluginBehaviors.State.SnapshotControls),
PluginSpec.Behavior(MesoFocusLoci),
PluginSpec.Behavior(MesoSelectLoci),
PluginSpec.Behavior(PluginBehaviors.Representation.SelectLoci),
...o.extensions.map(e => Extensions[e]),
],
animations: [
AnimateCameraSpin,
AnimateCameraRock,
AnimateStateSnapshots,
],
customParamEditors: defaultSpec.customParamEditors,
customFormats: o?.customFormats,
layout: {
initial: {
isExpanded: o.layoutIsExpanded,
showControls: o.layoutShowControls,
controlsDisplay: o.layoutControlsDisplay,
regionState: {
bottom: 'full',
left: o.collapseLeftPanel ? 'collapsed' : 'full',
right: o.collapseRightPanel ? 'hidden' : 'full',
top: 'full',
}
},
},
components: {
...defaultSpec.components,
controls: {
...defaultSpec.components?.controls,
top: 'none',
bottom: 'none',
left: LeftPanel,
right: RightPanel,
},
remoteState: 'none',
viewport: {
snapshotDescription: MesoViewportSnapshotDescription,
}
},
config: [
[PluginConfig.General.DisableAntialiasing, o.disableAntialiasing],
[PluginConfig.General.PixelScale, o.pixelScale],
[PluginConfig.General.PickScale, o.pickScale],
[PluginConfig.General.Transparency, o.transparency],
[PluginConfig.General.PreferWebGl1, o.preferWebgl1],
[PluginConfig.General.AllowMajorPerformanceCaveat, o.allowMajorPerformanceCaveat],
[PluginConfig.General.PowerPreference, o.powerPreference],
[PluginConfig.General.ResolutionMode, o.resolutionMode],
[PluginConfig.Viewport.ShowExpand, o.viewportShowExpand],
[PluginConfig.Viewport.ShowControls, o.viewportShowControls],
[PluginConfig.Viewport.ShowSettings, o.viewportShowSettings],
[PluginConfig.Viewport.ShowSelectionMode, o.viewportShowSelectionMode],
[PluginConfig.Viewport.ShowAnimation, o.viewportShowAnimation],
[PluginConfig.Viewport.ShowTrajectoryControls, o.viewportShowTrajectoryControls],
[PluginConfig.State.DefaultServer, o.pluginStateServer],
[PluginConfig.State.CurrentServer, o.pluginStateServer],
[PluginConfig.VolumeStreaming.DefaultServer, o.volumeStreamingServer],
[PluginConfig.VolumeStreaming.Enabled, !o.volumeStreamingDisabled],
[PluginConfig.Download.DefaultPdbProvider, o.pdbProvider],
[PluginConfig.Download.DefaultEmdbProvider, o.emdbProvider],
[PluginConfig.Structure.SaccharideCompIdMapType, o.saccharideCompIdMapType],
]
};
const element = typeof elementOrId === 'string'
? document.getElementById(elementOrId)
: elementOrId;
if (!element) throw new Error(`Could not get element with id '${elementOrId}'`);
const plugin = await createPluginUI({
target: element,
spec,
render: renderReact18,
onBeforeUIRender: async plugin => {
let examples: MesoscaleExplorerState['examples'] = undefined;
try {
examples = await plugin.fetch({ url: '../examples/list.json', type: 'json' }).run();
// extend the array with file tour.json if it exists
const tour = await plugin.fetch({ url: '../examples/tour.json', type: 'json' }).run();
if (tour) {
examples = examples?.concat(tour);
}
} catch (e) {
console.log(e);
}
(plugin.customState as MesoscaleExplorerState) = {
examples,
graphicsMode: o.graphicsMode,
illumination: o.illumination,
driver: o.driver,
stateCache: {},
};
await MesoscaleState.init(plugin);
}
});
plugin.canvas3d?.setProps({
renderer: {
backgroundColor: Color(0x101010),
},
cameraFog: { name: 'off', params: {} },
hiZ: { enabled: true },
xr: {
disablePostprocessing: false,
sceneRadiusInMeters: 0.75,
},
});
plugin.representation.structure.registry.clear();
plugin.representation.structure.registry.add(SpacefillRepresentationProvider);
plugin.state.setSnapshotParams({
image: true,
componentManager: false,
structureSelection: true,
});
plugin.managers.lociLabels.clearProviders();
plugin.managers.dragAndDrop.addHandler('mesoscale-explorer', (files) => {
const sessions = files.filter(f => {
const fn = f.name.toLowerCase();
return fn.endsWith('.molx') || fn.endsWith('.molj');
});
if (sessions.length > 0) {
openState(plugin, sessions[0]);
} else {
plugin.runTask(plugin.state.data.applyAction(LoadModel, {
files: files.map(f => Asset.File(f)),
}));
}
return true;
});
plugin.state.events.object.created.subscribe(e => {
(plugin.customState as MesoscaleExplorerState).stateCache = {};
});
plugin.state.events.object.removed.subscribe(e => {
(plugin.customState as MesoscaleExplorerState).stateCache = {};
});
return new MesoscaleExplorer(plugin);
}
handleResize() {
this.plugin.layout.events.updated.next(void 0);
}
dispose() {
this.plugin.dispose();
}
}

View File

@@ -0,0 +1,99 @@
/**
* Copyright (c) 2023-2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { Loci } from '../../../mol-model/loci';
import { ParamDefinition as PD } from '../../../mol-util/param-definition';
import { PluginBehavior } from '../../../mol-plugin/behavior';
import { ButtonsType, ModifiersKeys } from '../../../mol-util/input/input-observer';
import { Binding } from '../../../mol-util/binding';
import { PluginCommands } from '../../../mol-plugin/commands';
import { Sphere3D } from '../../../mol-math/geometry';
import { StructureElement } from '../../../mol-model/structure';
const B = ButtonsType;
const M = ModifiersKeys;
const Trigger = Binding.Trigger;
const Key = Binding.TriggerKey;
const DefaultMesoFocusLociBindings = {
clickCenter: Binding([
Trigger(B.Flag.Primary, M.create()),
Trigger(B.Flag.Trigger),
], 'Camera center', 'Click element using ${triggers}'),
clickCenterFocus: Binding([
Trigger(B.Flag.Secondary, M.create()),
], 'Camera center and focus', 'Click element using ${triggers}'),
keyCenterOnly: Binding([Key('C')], 'Center Only Toggle', 'Press ${triggers}'),
};
export const MesoFocusLociParams = {
minRadius: PD.Numeric(8, { min: 1, max: 50, step: 1 }),
extraRadius: PD.Numeric(4, { min: 1, max: 50, step: 1 }, { description: 'Value added to the bounding-sphere radius of the Loci' }),
durationMs: PD.Numeric(250, { min: 0, max: 1000, step: 1 }, { description: 'Camera transition duration' }),
centerOnly: PD.Boolean(true, { description: 'Keep current camera distance' }),
bindings: PD.Value(DefaultMesoFocusLociBindings, { isHidden: true }),
};
type MesoFocusLociProps = PD.Values<typeof MesoFocusLociParams>
export const MesoFocusLoci = PluginBehavior.create<MesoFocusLociProps>({
name: 'camera-meso-focus-loci',
category: 'interaction',
ctor: class extends PluginBehavior.Handler<MesoFocusLociProps> {
register(): void {
this.subscribeObservable(this.ctx.behaviors.interaction.click, ({ current, button, modifiers }) => {
const { canvas3d } = this.ctx;
if (!canvas3d) return;
const loci = Loci.normalize(current.loci, this.ctx.managers.interactivity.props.granularity);
const sphere = Loci.getBoundingSphere(loci) || Sphere3D();
const { clickCenter, clickCenterFocus } = this.params.bindings;
const { durationMs, extraRadius, minRadius, centerOnly } = this.params;
const radius = Math.max(sphere.radius + extraRadius, minRadius);
if (Binding.match(clickCenter, button, modifiers)) {
// left mouse button
if (Loci.isEmpty(current.loci)) {
PluginCommands.Camera.Reset(this.ctx, { });
return;
}
if (StructureElement.Loci.is(current.loci)) {
if (centerOnly) {
const snapshot = canvas3d.camera.getCenter(sphere.center);
canvas3d.requestCameraReset({ durationMs, snapshot });
} else {
this.ctx.managers.camera.focusSphere(sphere, this.params);
}
}
} else if (Binding.match(clickCenterFocus, button, modifiers)) {
// right mouse button
if (Loci.isEmpty(current.loci)) {
PluginCommands.Camera.Reset(this.ctx, { });
return;
}
if (centerOnly) {
const snapshot = canvas3d.camera.getCenter(sphere.center, radius);
canvas3d.requestCameraReset({ durationMs, snapshot });
} else {
this.ctx.managers.camera.focusSphere(sphere, this.params);
}
}
});
this.subscribeObservable(this.ctx.behaviors.interaction.key, ({ code, key, modifiers }) => {
if (!this.ctx.canvas3d) return;
const b = { ...DefaultMesoFocusLociBindings, ...this.params.bindings };
const { centerOnly } = this.params;
if (Binding.matchKey(b.keyCenterOnly, code, modifiers, key)) {
this.params.centerOnly = !centerOnly;
}
});
}
},
params: () => MesoFocusLociParams,
display: { name: 'Camera Meso Focus Loci on Canvas' }
});

View File

@@ -0,0 +1,209 @@
/**
* Copyright (c) 2023-2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { EveryLoci, Loci } from '../../../mol-model/loci';
import { ParamDefinition as PD } from '../../../mol-util/param-definition';
import { PluginBehavior } from '../../../mol-plugin/behavior';
import { ButtonsType, ModifiersKeys } from '../../../mol-util/input/input-observer';
import { Binding } from '../../../mol-util/binding';
import { PluginStateObject as SO } from '../../../mol-plugin-state/objects';
import { Structure, StructureElement } from '../../../mol-model/structure';
import { StateSelection } from '../../../mol-state';
import { StateTreeSpine } from '../../../mol-state/tree/spine';
import { Representation } from '../../../mol-repr/representation';
import { MarkerAction } from '../../../mol-util/marker-action';
import { PluginContext } from '../../../mol-plugin/context';
import { MesoscaleState, expandAllGroups, getCellDescription, getEveryEntity } from '../data/state';
const B = ButtonsType;
const M = ModifiersKeys;
const Trigger = Binding.Trigger;
const DefaultMesoSelectLociBindings = {
click: Binding([
Trigger(B.Flag.Primary, M.create()),
Trigger(B.Flag.Trigger),
], 'Click', 'Click element using ${triggers}'),
clickToggleSelect: Binding([
Trigger(B.Flag.Primary, M.create({ shift: true })),
Trigger(B.Flag.Primary, M.create({ control: true })),
], 'Toggle select', 'Click element using ${triggers}'),
hoverHighlightOnly: Binding([
Trigger(B.Flag.None, M.create({ shift: true })),
Trigger(B.Flag.None, M.create({ control: true })),
], 'Highlight', 'Hover element using ${triggers}'),
};
const MesoSelectLociParams = {
bindings: PD.Value(DefaultMesoSelectLociBindings, { isHidden: true }),
};
type MesoSelectLociProps = PD.Values<typeof MesoSelectLociParams>
export const MesoSelectLoci = PluginBehavior.create<MesoSelectLociProps>({
name: 'camera-meso-select-loci',
category: 'interaction',
ctor: class extends PluginBehavior.Handler<MesoSelectLociProps> {
private spine: StateTreeSpine.Impl;
private lociMarkProvider = (interactionLoci: Representation.Loci, action: MarkerAction) => {
if (!this.ctx.canvas3d) return;
this.ctx.canvas3d.mark(interactionLoci, action);
};
private applySelectMark(ref: string, clear?: boolean) {
const cell = this.ctx.state.data.cells.get(ref);
if (cell && SO.isRepresentation3D(cell.obj)) {
this.spine.current = cell;
const so = this.spine.getRootOfType(SO.Molecule.Structure);
if (so) {
if (clear) {
this.lociMarkProvider({ loci: Structure.Loci(so.data) }, MarkerAction.Deselect);
}
const loci = this.ctx.managers.structure.selection.getLoci(so.data);
this.lociMarkProvider({ loci }, MarkerAction.Select);
}
}
}
register(): void {
this.subscribeObservable(this.ctx.behaviors.interaction.click, ({ current, button, modifiers }) => {
if (!this.ctx.canvas3d || this.ctx.isBusy) return;
const { click, clickToggleSelect } = this.params.bindings;
if (Binding.match(clickToggleSelect, button, modifiers)) {
if (Loci.isEmpty(current.loci)) {
this.ctx.managers.interactivity.lociSelects.deselectAll();
return;
}
const loci = Loci.normalize(current.loci, modifiers.control ? 'entity' : this.ctx.managers.interactivity.props.granularity);
this.ctx.managers.interactivity.lociSelects.toggle({ loci }, false);
if (StructureElement.Loci.is(current.loci)) {
const cell = this.ctx.helpers.substructureParent.get(current.loci.structure);
const d = getCellDescription(cell!);
MesoscaleState.set(this.ctx, { focusInfo: `${d}` });
}
}
if (Binding.match(click, button, modifiers)) {
if (Loci.isEmpty(current.loci)) {
MesoscaleState.set(this.ctx, { focusInfo: '', filter: '' });
return;
}
const snapshotKey = current.repr?.props?.snapshotKey?.trim() ?? '';
if (snapshotKey) {
this.ctx.managers.snapshot.applyKey(snapshotKey);
} else {
if (StructureElement.Loci.is(current.loci)) {
const cell = this.ctx.helpers.substructureParent.get(current.loci.structure);
const d = getCellDescription(cell!);
MesoscaleState.set(this.ctx, { focusInfo: `${d}`, filter: `${cell?.obj?.label}` });
expandAllGroups(this.ctx);
}
}
}
});
this.ctx.managers.interactivity.lociSelects.addProvider(this.lociMarkProvider);
this.subscribeObservable(this.ctx.behaviors.interaction.hover, ({ current, button, modifiers }) => {
if (!this.ctx.canvas3d || this.ctx.isBusy) return;
const pointerLock = !!this.ctx.canvas3dContext?.input.pointerLock;
const { hoverHighlightOnly } = this.params.bindings;
if (!pointerLock && Binding.match(hoverHighlightOnly, button, modifiers)) {
if (Loci.isEmpty(current.loci)) {
this.ctx.managers.interactivity.lociHighlights.clearHighlights();
return;
}
if (StructureElement.Loci.is(current.loci)) {
if (modifiers.control) {
this.ctx.managers.interactivity.lociHighlights.highlightOnly({ repr: current.repr, loci: EveryLoci }, false);
} else {
const loci = Loci.normalize(current.loci, this.ctx.managers.interactivity.props.granularity);
this.ctx.managers.interactivity.lociHighlights.highlightOnly({ repr: current.repr, loci }, false);
}
}
}
if (Loci.isEmpty(current.loci)) {
this.ctx.behaviors.labels.highlight.next({ labels: [] });
this.ctx.canvas3d?.mark({ loci: EveryLoci }, MarkerAction.RemoveHighlight);
} else {
const labels: string[] = [];
if (StructureElement.Loci.is(current.loci)) {
const cell = this.ctx.helpers.substructureParent.get(current.loci.structure);
const d = getCellDescription(cell!);
labels.push(d);
} else {
const loci = Loci.normalize(current.loci, this.ctx.managers.interactivity.props.granularity);
if (loci.kind === 'group-loci') {
if ('shape' in current.loci && current.loci.shape.geometry.kind === 'text') {
const qname = current.repr?.props.customText;
// highlight protein with same name
const entities = getEveryEntity(this.ctx, qname);
for (const r of entities) {
const repr = r.obj?.data.repr;
if (repr) {
this.ctx.canvas3d?.mark({ repr, loci: EveryLoci }, MarkerAction.Highlight);
}
}
}
labels.push(loci.shape.getLabel(0, 0));
}
}
this.ctx.behaviors.labels.highlight.next({ labels });
}
});
this.ctx.managers.interactivity.lociHighlights.addProvider(this.lociMarkProvider);
let dimDisabled = false;
this.subscribeObservable(this.ctx.behaviors.interaction.keyReleased, ({ code, modifiers }) => {
if (!this.ctx.canvas3d) return;
if ((code.startsWith('Shift') && !modifiers.control) || (code.startsWith('Control') && !modifiers.shift)) {
if (dimDisabled) {
dimDisabled = false;
this.ctx.canvas3d?.setProps({ renderer: { dimStrength: 1 } }, true);
}
this.ctx.managers.interactivity.lociHighlights.clearHighlights();
}
});
this.subscribeObservable(this.ctx.behaviors.interaction.key, ({ modifiers }) => {
if (!this.ctx.canvas3d) return;
if (!dimDisabled && modifiers.control && modifiers.shift) {
dimDisabled = true;
this.ctx.canvas3d?.setProps({ renderer: { dimStrength: 0 } });
}
});
this.subscribeObservable(this.ctx.state.events.object.created, ({ ref }) => this.applySelectMark(ref));
// re-apply select-mark to all representation of an updated structure
this.subscribeObservable(this.ctx.state.events.object.updated, ({ ref, obj, oldObj, oldData, action }) => {
const cell = this.ctx.state.data.cells.get(ref);
if (cell && SO.Molecule.Structure.is(cell.obj)) {
const structure: Structure = obj.data;
const oldStructure: Structure | undefined = action === 'recreate' ? oldObj?.data :
action === 'in-place' ? oldData : undefined;
if (oldStructure &&
Structure.areEquivalent(structure, oldStructure) &&
Structure.areHierarchiesEqual(structure, oldStructure)) return;
const reprs = this.ctx.state.data.select(StateSelection.children(ref).ofType(SO.Molecule.Structure.Representation3D));
for (const repr of reprs) this.applySelectMark(repr.transform.ref, true);
}
});
}
unregister() {
this.ctx.managers.interactivity.lociSelects.removeProvider(this.lociMarkProvider);
this.ctx.managers.interactivity.lociHighlights.removeProvider(this.lociMarkProvider);
}
constructor(ctx: PluginContext, params: MesoSelectLociProps) {
super(ctx, params);
this.spine = new StateTreeSpine.Impl(ctx.state.data.cells);
}
},
params: () => MesoSelectLociParams,
display: { name: 'Camera Meso Select Loci on Canvas' }
});

View File

@@ -0,0 +1,175 @@
/**
* Copyright (c) 2019-2023 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
* @author Ludovic Autin <ludovic.autin@gmail.com>
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { SortedArray } from '../../../../mol-data/int';
import { SymmetryOperator } from '../../../../mol-math/geometry';
import { Mat4 } from '../../../../mol-math/linear-algebra';
import { ModelSymmetry } from '../../../../mol-model-formats/structure/property/symmetry';
import { CustomStructureProperty } from '../../../../mol-model-props/common/custom-structure-property';
import { ElementIndex, EntityIndex, Model, Structure, Unit } from '../../../../mol-model/structure';
import { Assembly, Symmetry } from '../../../../mol-model/structure/model/properties/symmetry';
import { PluginStateObject as PSO, PluginStateTransform } from '../../../../mol-plugin-state/objects';
import { PluginContext } from '../../../../mol-plugin/context';
import { Task } from '../../../../mol-task';
import { ParamDefinition as PD } from '../../../../mol-util/param-definition';
function createModelChainMap(model: Model) {
const builder = new Structure.StructureBuilder();
const units = new Map<string, Unit>();
const { label_asym_id, _rowCount } = model.atomicHierarchy.chains;
const { offsets } = model.atomicHierarchy.chainAtomSegments;
for (let i = 0; i < _rowCount; i++) {
const elements = SortedArray.ofBounds(offsets[i] as ElementIndex, offsets[i + 1] as ElementIndex);
const unit = builder.addUnit(Unit.Kind.Atomic, model, SymmetryOperator.Default, elements, Unit.Trait.FastBoundary);
units.set(label_asym_id.value(i), unit);
}
return units;
}
function buildCellpackAssembly(model: Model, assembly: Assembly) {
const coordinateSystem = SymmetryOperator.create(assembly.id, Mat4.identity(), { assembly: { id: assembly.id, operId: 0, operList: [] } });
const assembler = Structure.Builder({
coordinateSystem,
label: model.label,
});
const units = createModelChainMap(model);
for (const g of assembly.operatorGroups) {
for (const oper of g.operators) {
for (const id of g.asymIds!) {
const u = units.get(id);
if (u) {
assembler.addWithOperator(u, oper);
} else {
console.log(`missing asymId '${id}'`);
}
}
}
}
return assembler.getStructure();
}
export { CellpackAssembly };
type CellpackAssembly = typeof CellpackAssembly
const CellpackAssembly = PluginStateTransform.BuiltIn({
name: 'cellpack-assembly',
display: { name: 'Cellpack Assembly' },
from: PSO.Molecule.Model,
to: PSO.Molecule.Structure,
params: {
id: PD.Text('', { label: 'Asm Id', description: 'Assembly Id (use empty for the 1st assembly)' }),
}
})({
canAutoUpdate({ newParams }) {
return true;
},
apply({ a, params }, plugin: PluginContext) {
return Task.create('Build Structure', async ctx => {
const model = a.data;
let id = params.id;
let asm: Assembly | undefined = void 0;
const symmetry = ModelSymmetry.Provider.get(model);
// if no id is specified, use the 1st assembly.
if (!id && symmetry && symmetry.assemblies.length !== 0) {
id = symmetry.assemblies[0].id;
}
if (!symmetry || symmetry.assemblies.length === 0) {
plugin.log.warn(`Model '${model.entryId}' has no assembly, returning model structure.`);
} else {
asm = Symmetry.findAssembly(model, id || '');
if (!asm) {
plugin.log.warn(`Model '${model.entryId}' has no assembly called '${id}', returning model structure.`);
}
}
const base = Structure.ofModel(model);
if (!asm) {
const label = { label: 'Model', description: Structure.elementDescription(base) };
return new PSO.Molecule.Structure(base, label);
}
const s = buildCellpackAssembly(model, asm);
const objProps = { label: `Assembly ${id}`, description: Structure.elementDescription(s) };
return new PSO.Molecule.Structure(s, objProps);
});
},
dispose({ b }) {
b?.data.customPropertyDescriptors.dispose();
}
});
type UnitsByEntity = Map<EntityIndex, Unit[]>;
const UnitsByEntity = CustomStructureProperty.createSimple<UnitsByEntity>('units_by_entity', 'root');
function getUnitsByEntity(structure: Structure): UnitsByEntity {
if (UnitsByEntity.get(structure).value) {
return UnitsByEntity.get(structure).value!;
}
const atomicIndex = structure.model.atomicHierarchy.index;
const map: UnitsByEntity = new Map();
for (const ug of structure.unitSymmetryGroups) {
const u = ug.units[0] as Unit.Atomic;
const e = atomicIndex.getEntityFromChain(u.chainIndex[u.elements[0]]);
if (!map.has(e)) map.set(e, []);
const entityUnits = map.get(e)!;
for (let i = 0, il = ug.units.length; i < il; ++i) {
entityUnits.push(ug.units[i]);
}
}
UnitsByEntity.set(structure, { value: map }, map);
return map;
}
export { CellpackStructure };
type CellpackStructure = typeof CellpackStructure
const CellpackStructure = PluginStateTransform.BuiltIn({
name: 'cellpack-structure',
display: { name: 'Cellpack Structure' },
from: PSO.Root,
to: PSO.Molecule.Structure,
params: {
structureRef: PD.Text(''),
entityId: PD.Text('')
}
})({
canAutoUpdate({ newParams }) {
return true;
},
apply({ a, params, dependencies }) {
return Task.create('Build Structure', async ctx => {
const parent = dependencies![params.structureRef].data as Structure;
const { entities } = parent.model;
const idx = entities.getEntityIndex(params.entityId);
const unitsByEntity = getUnitsByEntity(parent);
const units = unitsByEntity.get(idx) || [];
const structure = Structure.create(units);
const description_label = entities.data.pdbx_description.value(idx)[0] || 'model';
const label = description_label.split('.').at(-1) || a.label;
const description = entities.data.pdbx_parent_entity_id.value(idx) || label;
return new PSO.Molecule.Structure(structure, { label, description: description }); // `${a.description}`
});
},
dispose({ b }) {
b?.data.customPropertyDescriptors.dispose();
}
});

View File

@@ -0,0 +1,233 @@
/**
* Copyright (c) 2019-2026 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
* @author Ludovic Autin <ludovic.autin@gmail.com>
*/
import { PluginStateObject } from '../../../../mol-plugin-state/objects';
import { StructureRepresentation3D } from '../../../../mol-plugin-state/transforms/representation';
import { PluginContext } from '../../../../mol-plugin/context';
import { SpacefillRepresentationProvider } from '../../../../mol-repr/structure/representation/spacefill';
import { StateObjectRef, StateObjectSelector, StateBuilder } from '../../../../mol-state';
import { Color } from '../../../../mol-util/color';
import { ColorNames } from '../../../../mol-util/color/names';
import { GraphicsMode, MesoscaleGroup, MesoscaleState, getDistinctBaseColors, getDistinctGroupColors, getGraphicsModeProps, getMesoscaleGroupParams } from '../state';
import { CellpackAssembly, CellpackStructure } from './model';
function getSpacefillParams(color: Color, sizeFactor: number, graphics: GraphicsMode, merge?: boolean) {
const gmp = getGraphicsModeProps(graphics === 'custom' ? 'quality' : graphics);
return {
type: {
name: 'spacefill',
params: {
...SpacefillRepresentationProvider.defaultValues,
ignoreHydrogens: false,
instanceGranularity: true,
ignoreLight: true,
lodLevels: gmp.lodLevels,
quality: 'lowest', // avoid 'auto', triggers boundary calc
sizeFactor,
clip: {
variant: merge ? 'pixel' : 'instance',
objects: [],
},
clipPrimitive: true,
approximate: gmp.approximate,
alphaThickness: gmp.alphaThickness,
visuals: [merge ? 'structure-element-sphere' : 'element-sphere'],
interior: {
color: Color.fromNormalizedRgb(0, 0, 0),
colorStrength: 0.15,
substance: { metalness: 0.0, roughness: 1.0, bumpiness: 0.0 },
substanceStrength: 1,
}
},
},
colorTheme: {
name: 'uniform',
params: {
value: color,
saturation: 0,
lightness: 0,
}
},
sizeTheme: {
name: 'physical',
params: {
scale: 1,
}
},
};
}
function getSizeFactor(name: string): number {
switch (name) {
case 'dLDL':
return 2.5;
case 'iLDL':
return 5;
case 'NP_CA':
case 'POL_CA':
case 'FactorH1':
case 'iIgM_Antibody_5mer':
// case 'MG_271_272_273_274_192MER': // has a coarse and an atomic part
return 2;
default: return 1;
}
}
export async function createCellpackHierarchy(plugin: PluginContext, trajectory: StateObjectRef<PluginStateObject.Molecule.Trajectory>) {
const builder = plugin.builders.structure;
const state = plugin.state.data;
const model = await builder.createModel(trajectory, { modelIndex: 0 });
const entities = model.data!.entities.data;
const compGroups = new Map<string, StateObjectSelector>();
const compIds = new Map<string, { idx: number, members: Map<string, number> }>();
const compColors = new Map<string, Color[]>();
const funcGroups = new Map<string, StateObjectSelector>();
const funcIds = new Map<string, { idx: number, size: number }>();
const funcColors = new Map<string, Color[]>();
const graphicsMode = MesoscaleState.get(plugin).graphics;
const groupParams = getMesoscaleGroupParams(graphicsMode);
const base = await state.build()
.to(model)
.apply(CellpackAssembly, { id: '' })
.commit();
const compRoot = await state.build()
.toRoot()
.apply(MesoscaleGroup, { ...groupParams, root: true, index: -1, tag: 'comp:', label: 'compartment', color: { type: 'custom', illustrative: false, value: ColorNames.white, variability: 20, shift: 0, lightness: 0, alpha: 1, emissive: 0 } }, { tags: 'group:comp:', state: { isCollapsed: false, isHidden: groupParams.hidden } })
.commit();
const funcRoot = await state.build()
.toRoot()
.apply(MesoscaleGroup, { ...groupParams, root: true, index: -1, tag: 'func:', label: 'function', color: { type: 'custom', illustrative: false, value: ColorNames.white, variability: 20, shift: 0, lightness: 0, alpha: 1, emissive: 0 } }, { tags: 'group:func:', state: { isCollapsed: false, isHidden: groupParams.hidden } })
.commit();
if (entities._rowCount > 1) {
for (let i = 0; i < entities._rowCount; i++) {
const description = entities.pdbx_description.value(i)[0] || 'unknown compartment';
const d = description.split('.');
const n = d.slice(0, -1).join('.');
const l = d.at(-1)!;
if (!compIds.has(n)) {
compIds.set(n, { idx: compIds.size, members: new Map() });
}
const cm = compIds.get(n)!;
cm.members.set(l, cm.members.size);
const f = entities.details.value(i) || 'unknown function';
if (!funcIds.has(f)) {
funcIds.set(f, { idx: funcIds.size, size: 0 });
}
funcIds.get(f)!.size += 1;
}
//
const baseCompColors = getDistinctBaseColors(compIds.size, 0);
const compIdEntries = Array.from(compIds.entries());
for (let i = 0; i < compIdEntries.length; ++i) {
const [n, m] = compIdEntries[i];
const groupColors = getDistinctGroupColors(m.members.size, baseCompColors[i], 20, 0);
compColors.set(n, groupColors);
}
//
const baseFuncColors = getDistinctBaseColors(funcIds.size, 0);
const funcIdEntries = Array.from(funcIds.entries());
for (let i = 0; i < funcIdEntries.length; ++i) {
const [n, m] = funcIdEntries[i];
const groupColors = getDistinctGroupColors(m.size, baseFuncColors[i], 20, 0);
funcColors.set(n, groupColors);
}
//
for (let i = 0; i < entities._rowCount; i++) {
const description = entities.pdbx_description.value(i)[0] || 'unknown compartment';
const nodes = description.split('.');
for (let j = 0, jl = nodes.length - 1; j < jl; ++j) {
const n = nodes.slice(0, j + 1).join('.');
const p = nodes.slice(0, j).join('.');
if (!compGroups.has(n)) {
const colorIdx = compIds.get(n)?.idx;
const color = colorIdx !== undefined ? baseCompColors[colorIdx] : ColorNames.white;
const label = nodes[j];
const parent = compGroups.get(p) ?? compRoot;
parent.cell!.state.isCollapsed = false;
const group = await state.build()
.to(parent)
.apply(MesoscaleGroup, { ...groupParams, root: parent === compRoot, index: colorIdx, tag: `comp:${n}`, label, color: { type: 'generate', illustrative: false, value: color, variability: 20, shift: 0, lightness: 0, alpha: 1, emissive: 0 } }, { tags: [`group:comp:${n}`, `comp:${p}`], state: { isCollapsed: true, isHidden: groupParams.hidden } })
.commit({ revertOnError: true });
compGroups.set(n, group);
}
}
const f = entities.details.value(i) || 'unknown function';
if (!funcGroups.has(f)) {
const colorIdx = funcIds.get(f)?.idx;
const color = colorIdx !== undefined ? baseFuncColors[colorIdx] : ColorNames.white;
const group = await state.build()
.to(funcRoot)
.apply(MesoscaleGroup, { ...groupParams, index: colorIdx, tag: `func:${f}`, label: f, color: { type: 'custom', illustrative: false, value: color, variability: 20, shift: 0, lightness: 0, alpha: 1, emissive: 0 } }, { tags: [`group:func:${f}`, 'func:'], state: { isCollapsed: true, isHidden: groupParams.hidden } })
.commit({ revertOnError: true });
funcGroups.set(f, group);
}
}
//
await state.transaction(async () => {
try {
const dependsOn = [base.ref];
plugin.animationLoop.stop({ noDraw: true });
let build: StateBuilder.Root | StateBuilder.To<any> = state.build();
for (let i = 0; i < entities._rowCount; i++) {
const description = entities.pdbx_description.value(i)[0] || 'model';
const d = description.split('.');
const n = d.slice(0, -1).join('.');
const l = d.at(-1)!;
const f = entities.details.value(i) || 'unknown function';
const color = compColors.get(n)![compIds.get(n)!.members.get(l)!];
const sizeFactor = getSizeFactor(l);
build = build
.toRoot()
.apply(CellpackStructure, { structureRef: base.ref, entityId: entities.id.value(i) }, { dependsOn })
.apply(StructureRepresentation3D, getSpacefillParams(color, sizeFactor, graphicsMode), { tags: [`comp:${n}`, `func:${f}`] });
}
await build.commit();
} catch (e) {
console.error(e);
plugin.log.error(e);
} finally {
plugin.animationLoop.start();
}
}).run();
} else {
const dependsOn = [base.ref];
const merge = (
base.data &&
base.data.model.entities.data._rowCount === 1 &&
base.data.unitSymmetryGroups.length > 100 &&
base.data.unitSymmetryGroups.some(usg => usg.units.length > 1)
);
await state.build()
.toRoot()
.apply(CellpackStructure, { structureRef: base.ref, entityId: entities.id.value(0) }, { dependsOn })
.apply(StructureRepresentation3D, getSpacefillParams(ColorNames.lightgray, 1, graphicsMode, merge), { tags: [`comp:`, `func:`] })
.commit();
}
}

View File

@@ -0,0 +1,140 @@
/**
* Copyright (c) 2023 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { Mat4 } from '../../../../mol-math/linear-algebra/3d/mat4';
import { ElementIndex, Model, Structure, Unit } from '../../../../mol-model/structure';
import { PluginStateObject as SO, PluginStateTransform } from '../../../../mol-plugin-state/objects';
import { Task } from '../../../../mol-task';
import { StateObject, StateTransformer } from '../../../../mol-state';
import { ParamDefinition as PD } from '../../../../mol-util/param-definition';
import { SymmetryOperator } from '../../../../mol-math/geometry';
import { mergeUnits, partitionUnits } from '../util';
import { Assembly, Symmetry } from '../../../../mol-model/structure/model/properties/symmetry';
import { ModelSymmetry } from '../../../../mol-model-formats/structure/property/symmetry';
import { SortedArray } from '../../../../mol-data/int';
import { GenericInstances, getTransforms } from './preset';
import { Asset } from '../../../../mol-util/assets';
import { PluginContext } from '../../../../mol-plugin/context';
import { deepEqual } from '../../../../mol-util';
function createModelChainMap(model: Model) {
const builder = new Structure.StructureBuilder();
const units = new Map<string, Unit>();
const { label_asym_id, _rowCount } = model.atomicHierarchy.chains;
const { offsets } = model.atomicHierarchy.chainAtomSegments;
for (let i = 0; i < _rowCount; i++) {
const elements = SortedArray.ofBounds(offsets[i] as ElementIndex, offsets[i + 1] as ElementIndex);
const unit = builder.addUnit(Unit.Kind.Atomic, model, SymmetryOperator.Default, elements, Unit.Trait.FastBoundary);
units.set(label_asym_id.value(i), unit);
}
return units;
}
function buildAssembly(model: Model, assembly: Assembly) {
const coordinateSystem = SymmetryOperator.create(assembly.id, Mat4.identity(), { assembly: { id: assembly.id, operId: 0, operList: [] } });
const assembler = Structure.Builder({
coordinateSystem,
label: model.label,
});
const units = createModelChainMap(model);
for (const g of assembly.operatorGroups) {
for (const oper of g.operators) {
for (const id of g.asymIds!) {
const u = units.get(id);
if (u) {
assembler.addWithOperator(u, oper);
} else {
console.log(`missing asymId '${id}'`);
}
}
}
}
return assembler.getStructure();
}
const EmptyInstances: GenericInstances<Asset> = {
positions: { data: [] },
rotations: { variant: 'euler', data: [] }
};
export { StructureFromGeneric };
type StructureFromGeneric = typeof StructureFromGeneric
const StructureFromGeneric = PluginStateTransform.BuiltIn({
name: 'structure-from-generic',
display: { name: 'Structure from Generic', description: 'Create a molecular structure from Generic models.' },
from: SO.Molecule.Model,
to: SO.Molecule.Structure,
params: {
instances: PD.Value<GenericInstances<Asset>>(EmptyInstances),
label: PD.Optional(PD.Text('')),
description: PD.Optional(PD.Text('')),
cellSize: PD.Numeric(500, { min: 0, max: 10000, step: 100 }),
}
})({
apply({ a, params }, plugin: PluginContext) {
return Task.create('Build Structure', async ctx => {
const transforms = await getTransforms(plugin, params.instances);
if (transforms.length === 0) return StateObject.Null;
const model = a.data;
const label = params.label || model.label;
const base = Structure.ofModel(a.data);
let structure: Structure;
if (transforms.length === 1 && Mat4.isIdentity(transforms[0])) {
const symmetry = ModelSymmetry.Provider.get(model);
const id = symmetry?.assemblies[0]?.id;
const asm = Symmetry.findAssembly(model, id || '');
if (asm) {
structure = buildAssembly(model, asm);
} else {
const mergedUnits = partitionUnits(base.units, params.cellSize);
structure = Structure.create(mergedUnits, { label });
}
} else {
const assembler = Structure.Builder({ label });
const unit = mergeUnits(base.units, 0);
for (let i = 0, il = transforms.length; i < il; ++i) {
const t = transforms[i];
const op = SymmetryOperator.create(`op-${i}`, t);
assembler.addWithOperator(unit, op);
}
structure = assembler.getStructure();
}
const props = { label, description: params.description || Structure.elementDescription(structure) };
return new SO.Molecule.Structure(structure, props);
});
},
update({ newParams, oldParams }, plugin: PluginContext) {
if (deepEqual(newParams, oldParams)) {
return StateTransformer.UpdateResult.Unchanged;
}
if (oldParams.instances) releaseInstances(plugin, oldParams.instances);
return StateTransformer.UpdateResult.Recreate;
},
dispose({ b, params }, plugin: PluginContext) {
b?.data.customPropertyDescriptors.dispose();
if (params?.instances) releaseInstances(plugin, params.instances);
}
});
function releaseInstances(plugin: PluginContext, instances: GenericInstances<Asset>) {
if (!Array.isArray(instances.positions.data)) {
plugin.managers.asset.release(instances.positions.data.file);
}
if (!Array.isArray(instances.rotations.data)) {
plugin.managers.asset.release(instances.rotations.data.file);
}
}

View File

@@ -0,0 +1,586 @@
/**
* Copyright (c) 2023-2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { Mat4 } from '../../../../mol-math/linear-algebra/3d/mat4';
import { StateBuilder, StateObjectSelector } from '../../../../mol-state';
import { PluginContext } from '../../../../mol-plugin/context';
import { SpacefillRepresentationProvider } from '../../../../mol-repr/structure/representation/spacefill';
import { Color } from '../../../../mol-util/color';
import { utf8Read } from '../../../../mol-io/common/utf8';
import { Mat3, Quat, Vec3 } from '../../../../mol-math/linear-algebra';
import { GraphicsMode, MesoscaleGroup, MesoscaleState, getGraphicsModeProps, getMesoscaleGroupParams } from '../state';
import { ColorNames } from '../../../../mol-util/color/names';
import { ShapeRepresentation3D, StructureRepresentation3D } from '../../../../mol-plugin-state/transforms/representation';
import { ParseCif, ParsePly, ReadFile } from '../../../../mol-plugin-state/transforms/data';
import { ModelFromTrajectory, ShapeFromPly, TrajectoryFromGRO, TrajectoryFromMOL, TrajectoryFromMOL2, TrajectoryFromMmCif, TrajectoryFromPDB, TrajectoryFromSDF, TrajectoryFromXYZ } from '../../../../mol-plugin-state/transforms/model';
import { Euler } from '../../../../mol-math/linear-algebra/3d/euler';
import { Asset } from '../../../../mol-util/assets';
import { Clip } from '../../../../mol-util/clip';
import { StructureFromGeneric } from './model';
import { getFileNameInfo } from '../../../../mol-util/file-info';
import { NumberArray } from '../../../../mol-util/type-helpers';
import { BaseGeometry } from '../../../../mol-geo/geometry/base';
import { ParamDefinition as PD } from '../../../../mol-util/param-definition';
function getSpacefillParams(color: Color, sizeFactor: number, graphics: GraphicsMode, clipVariant: Clip.Variant) {
const gmp = getGraphicsModeProps(graphics === 'custom' ? 'quality' : graphics);
return {
type: {
name: 'spacefill',
params: {
...SpacefillRepresentationProvider.defaultValues,
ignoreHydrogens: true,
instanceGranularity: true,
ignoreLight: true,
lodLevels: gmp.lodLevels.map(l => {
return {
...l,
stride: Math.max(1, Math.round(l.stride / Math.pow(sizeFactor, l.scaleBias)))
};
}),
quality: 'lowest', // avoid 'auto', triggers boundary calc
sizeFactor,
clip: {
variant: clipVariant,
objects: [],
},
clipPrimitive: true,
approximate: gmp.approximate,
alphaThickness: gmp.alphaThickness,
interior: {
color: Color.fromNormalizedRgb(0, 0, 0),
colorStrength: 0.15,
substance: { metalness: 0.0, roughness: 1.0, bumpiness: 0.0 },
substanceStrength: 1,
}
},
},
colorTheme: {
name: 'uniform',
params: {
value: color,
saturation: 0,
lightness: 0,
}
},
sizeTheme: {
name: 'physical',
params: {
scale: 1,
}
},
};
}
function getPlyShapeParams(color: Color, clipVariant: Clip.Variant) {
return {
...PD.getDefaultValues(BaseGeometry.Params),
instanceGranularity: true,
ignoreLight: true,
clip: {
variant: clipVariant,
objects: [],
},
quality: 'custom',
doubleSided: true,
coloring: {
name: 'uniform',
params: { color }
},
grouping: {
name: 'none',
params: {}
},
material: {
metalness: 0.0,
roughness: 1.0,
bumpiness: 1.0,
},
bumpAmplitude: 0.1,
bumpFrequency: 0.1 / 10,
};
}
export async function createGenericHierarchy(plugin: PluginContext, file: Asset.File) {
const asset = await plugin.runTask(plugin.managers.asset.resolve(file, 'zip'));
let manifest: GenericManifest;
// TODO: remove special handling for martini prototype
if (asset.data['instanced_structure.json']) {
const d = asset.data['instanced_structure.json'];
const t = utf8Read(d, 0, d.length);
const martini = JSON.parse(t) as { model: string, positions: Vec3[], rotations: Vec3[], function: string }[];
console.log(martini);
manifest = martiniToGeneric(martini);
} else if (asset.data['manifest.json']) {
const d = asset.data['manifest.json'];
const t = utf8Read(d, 0, d.length);
manifest = JSON.parse(t) as GenericManifest;
} else {
throw new Error('no manifest found');
}
console.log(manifest);
const state = plugin.state.data;
const graphicsMode = MesoscaleState.get(plugin).graphics;
const groupParams = getMesoscaleGroupParams(graphicsMode);
async function addGroup(g: GenericGroup, cell: StateObjectSelector, parent: string) {
const group = await state.build()
.to(cell)
.apply(MesoscaleGroup, { ...groupParams, index: undefined, tag: `${g.root}:${g.id}`, label: g.label || g.id, description: g.description, color: { type: 'custom', illustrative: false, value: ColorNames.white, variability: 20, shift: 0, lightness: 0, alpha: 1, emissive: 0 } }, { tags: [`group:${g.root}:${g.id}`, g.root === parent ? `${g.root}:` : `${g.root}:${parent}`], state: { isCollapsed: true, isHidden: groupParams.hidden } })
.commit();
if (g.children) {
for (const c of g.children) {
await addGroup(c, group, g.id);
}
}
}
for (const r of manifest.roots) {
const root = await state.build()
.toRoot()
.apply(MesoscaleGroup, { ...groupParams, root: true, index: -1, tag: `${r.id}:`, label: r.label || r.id, description: r.description, color: { type: 'custom', illustrative: false, value: ColorNames.white, variability: 20, shift: 0, lightness: 0, alpha: 1, emissive: 0 } }, { tags: `group:${r.id}:`, state: { isCollapsed: false, isHidden: groupParams.hidden } })
.commit();
if (r.children) {
for (const c of r.children!) {
await addGroup(c, root, r.id);
}
}
}
const transformAssets = new Map<string, Asset>();
const getTransformAsset = (file: string) => {
if (!transformAssets.has(file)) {
const d = asset.data[file];
transformAssets.set(file, Asset.File(new File([d], file)));
}
return transformAssets.get(file)!;
};
const getAssetInstances = (instances: GenericInstances<string>): GenericInstances<Asset> => {
return {
positions: {
data: Array.isArray(instances.positions.data)
? instances.positions.data
: {
file: getTransformAsset(instances.positions.data.file),
view: instances.positions.data.view,
},
type: instances.positions.type,
},
rotations: {
data: Array.isArray(instances.rotations.data)
? instances.rotations.data
: {
file: getTransformAsset(instances.rotations.data.file),
view: instances.rotations.data.view,
},
variant: instances.rotations.variant,
type: instances.rotations.type,
}
};
};
await state.transaction(async () => {
try {
plugin.animationLoop.stop({ noDraw: true });
let build: StateBuilder.Root | StateBuilder.To<any> = state.build();
for (const ent of manifest.entities) {
const d = asset.data[ent.file];
const info = getFileNameInfo(ent.file);
const isBinary = ['bcif'].includes(info.ext);
const t = isBinary ? d : utf8Read(d, 0, d.length);
const file = Asset.File(new File([t], ent.file));
const color = (ent.color) ? Color.fromRgb(ent.color[0], ent.color[1], ent.color[2]) : ColorNames.skyblue;
const sizeFactor = ent.sizeFactor || 1;
const tags = ent.groups.map(({ id, root }) => `${root}:${id}`);
const instances = ent.instances && getAssetInstances(ent.instances);
const description = ent.description;
const label = ent.label || ent.file.split('.')[0];
build = build
.toRoot()
.apply(ReadFile, { file, label, isBinary });
if (['gro', 'cif', 'mmcif', 'mcif', 'bcif', 'pdb', 'ent', 'xyz', 'mol', 'sdf', 'sd', 'mol2'].includes(info.ext)) {
if (['gro'].includes(info.ext)) {
build = build.apply(TrajectoryFromGRO);
} else if (['cif', 'mmcif', 'mcif', 'bcif'].includes(info.ext)) {
build = build.apply(ParseCif).apply(TrajectoryFromMmCif);
} else if (['pdb', 'ent'].includes(info.ext)) {
build = build.apply(TrajectoryFromPDB);
} else if (['xyz'].includes(info.ext)) {
build = build.apply(TrajectoryFromXYZ);
} else if (['mol'].includes(info.ext)) {
build = build.apply(TrajectoryFromMOL);
} else if (['sdf', 'sd'].includes(info.ext)) {
build = build.apply(TrajectoryFromSDF);
} else if (['mol2'].includes(info.ext)) {
build = build.apply(TrajectoryFromMOL2);
}
let clipVariant: Clip.Variant = 'pixel';
if (ent.instances) {
if (Array.isArray(ent.instances.positions.data)) {
clipVariant = ent.instances.positions.data.length <= 3 ? 'pixel' : 'instance';
} else {
const byteLength = ent.instances.positions.data.view
? ent.instances.positions.data.view.byteLength
: asset.data[ent.instances.positions.data.file].length;
clipVariant = byteLength <= 3 * 4 ? 'pixel' : 'instance';
}
}
build = build
.apply(ModelFromTrajectory, { modelIndex: 0 })
.apply(StructureFromGeneric, { instances, label, description })
.apply(StructureRepresentation3D, getSpacefillParams(color, sizeFactor, graphicsMode, clipVariant), { tags });
} else if (['ply'].includes(info.ext)) {
if (['ply'].includes(info.ext)) {
const transforms = await getTransforms(plugin, instances);
const clipVariant = transforms.length === 1 ? 'pixel' : 'instance';
build = build
.apply(ParsePly)
.apply(ShapeFromPly, { label, transforms })
.apply(ShapeRepresentation3D, getPlyShapeParams(color, clipVariant), { tags });
}
} else {
console.warn(`unknown file format '${info.ext}'`);
}
}
await build.commit();
} catch (e) {
console.error(e);
plugin.log.error(e);
} finally {
plugin.animationLoop.start();
}
}).run();
asset.dispose();
}
//
type GenericRoot = {
id: string
label?: string
description?: string
children: GenericGroup[]
}
type GenericGroup = {
id: string
/** reference to `${GenericRoot.id}` */
root: string
label?: string
description?: string
children?: GenericGroup[]
}
type GenericEntity = {
/**
* the entity file name
*
* the following extensions/formats are supported
*
* structures
* - gro
* - cif, mmcif, mcif, bcif
* - pdb, ent
* - xyz
* - mol
* - sdf, sd
* - mol2
*
* meshes
* - ply
*/
file: string
label?: string
description?: string
color?: number[]
groups: {
/** reference to `${GenericGroup.id}` */
id: string,
/** reference to `${GenericGroup.root}` */
root: string
}[]
/**
* defaults to a single, untransformed instance
*/
instances?: GenericInstances<string>
/**
* defaults to 1 (assuming fully atomic structures)
* for C-alpha only structures set to 2
* for Martini coarse-grained set to 1.5
*/
sizeFactor?: number
}
type BinaryData<T extends string | Asset> = {
file: T,
view?: {
byteOffset: number,
byteLength: number
}
}
export type GenericInstances<T extends string | Asset> = {
/**
* translation vectors in Angstrom
* [x0, y0, z0, ..., xn, yn, zn] with n = count - 1
*/
positions: {
/**
* either the data itself or a pointer to binary data
*/
data: number[] | BinaryData<T>
/**
* how to interpret the data
* defaults to `{ kind: 'Array', type: 'Float32' }`
*/
type?: { kind: 'Array', type: 'Float32' }
// TODO: maybe worthwhile in the future, mirroring encoders from BinaryCIF
// | { kind: 'IntegerPackedFixedPoint', byteCount: number, srcSize: number, factor: number, srcType: 'Float32' }
}
/**
* euler angles in XYZ order
* [x0, y0, z0, ..., xn, yn, zn] with n = count - 1
*
* quaternion rotations in XYZW order
* [x0, y0, z0, w0, ..., xn, yn, zn, wn] with n = count - 1
*
* rotation matrices in row-major order
* [m00_0, m01_0, m02_0, ..., m20_n, m21_n, m22_n] with n = count - 1
*/
rotations: {
variant: 'euler' | 'quaternion' | 'matrix',
/**
* either the data itself or a pointer to binary data
*/
data: number[] | BinaryData<T>
/**
* how to interpret the data
* defaults to `{ kind: 'Array', type: 'Float32' }`
*/
type?: { kind: 'Array', type: 'Float32' }
}
}
type GenericFrame = {
time: number
entities: {
file: string
instances: GenericInstances<string>
}[]
}
type GenericTrajectory = {
label?: string
description?: string
frames: GenericFrame[]
}
type GenericManifest = {
label?: string
description?: string
roots: GenericRoot[]
entities: GenericEntity[]
trajectories?: GenericTrajectory[]
}
//
const p = Vec3();
const q = Quat();
const m = Mat3();
const e = Euler();
async function getPositions(plugin: PluginContext, p: GenericInstances<Asset>['positions']): Promise<NumberArray> {
if (Array.isArray(p.data)) {
return p.data;
} else {
const a = await plugin.runTask(plugin.managers.asset.resolve(p.data.file, 'binary'));
const o = p.data.view?.byteOffset || 0;
const l = p.data.view?.byteLength || a.data.byteLength;
return new Float32Array(a.data.buffer, o + a.data.byteOffset, l / 4);
}
};
async function getRotations(plugin: PluginContext, r: GenericInstances<Asset>['rotations']): Promise<NumberArray> {
if (Array.isArray(r.data)) {
return r.data;
} else {
const a = await plugin.runTask(plugin.managers.asset.resolve(r.data.file, 'binary'));
const o = r.data.view?.byteOffset || 0;
const l = r.data.view?.byteLength || a.data.byteLength;
return new Float32Array(a.data.buffer, o + a.data.byteOffset, l / 4);
}
};
export async function getTransforms(plugin: PluginContext, instances?: GenericInstances<Asset>) {
const transforms: Mat4[] = [];
if (instances) {
const positions = await getPositions(plugin, instances.positions);
const rotations = await getRotations(plugin, instances.rotations);
for (let i = 0, il = positions.length / 3; i < il; ++i) {
Vec3.fromArray(p, positions, i * 3);
if (instances.rotations.variant === 'matrix') {
Mat3.fromArray(m, rotations, i * 9);
const t = Mat4.fromMat3(Mat4(), m);
Mat4.setTranslation(t, p);
transforms.push(t);
} else if (instances.rotations.variant === 'quaternion') {
Quat.fromArray(q, rotations, i * 4);
const t = Mat4.fromQuat(Mat4(), q);
Mat4.setTranslation(t, p);
transforms.push(t);
} else if (instances.rotations.variant === 'euler') {
Euler.fromArray(e, rotations, i * 3);
Quat.fromEuler(q, e, 'XYZ');
const t = Mat4.fromQuat(Mat4(), q);
Mat4.setTranslation(t, p);
transforms.push(t);
}
}
} else {
transforms.push(Mat4.identity());
}
return transforms;
}
//
type MartiniManifest = {
model: string,
positions: Vec3[],
rotations: Vec3[],
function: string
}[]
function martiniToGeneric(martini: MartiniManifest): GenericManifest {
const functionRoot: GenericRoot = {
id: 'function',
label: 'Function',
description: 'Functional classification',
children: [],
};
const entities: GenericEntity[] = [];
const seenGroups = new Set<string>();
const membraneGroup = {
id: 'membane',
root: 'function',
label: 'Membrane',
children: [] as GenericGroup[],
};
functionRoot.children!.push(membraneGroup);
seenGroups.add(membraneGroup.id);
const lipidsGroup = {
id: 'lipid',
root: 'function',
label: 'Lipid',
children: [] as GenericGroup[],
};
membraneGroup.children!.push(lipidsGroup);
seenGroups.add(lipidsGroup.id);
const upperGroup = {
id: 'upper',
root: 'function',
label: 'Upper Leaflet',
};
lipidsGroup.children!.push(upperGroup);
seenGroups.add(upperGroup.id);
const lowerGroup = {
id: 'lower',
root: 'function',
label: 'Lower Leaflet',
};
lipidsGroup.children!.push(lowerGroup);
seenGroups.add(lowerGroup.id);
const memprotGroup = {
id: 'memprot',
root: 'function',
label: 'Transmembrane Protein',
};
membraneGroup.children!.push(memprotGroup);
seenGroups.add(memprotGroup.id);
for (const e of martini) {
const label = e.model.split('.')[0];
const group = e.function || 'Metabolite';
const positions = {
data: e.positions.flat().map(x => Math.round((x * 10) * 100) / 100)
};
const rotations = {
data: e.rotations.flat().map(x => Math.round(x * 100) / 100),
variant: 'euler' as const,
};
if (group.includes('lower leaflet')) {
entities.push({
file: e.model,
label: label.substring(15),
groups: [{ root: 'function', id: 'lower' }],
instances: { positions, rotations },
sizeFactor: 1.5,
});
} else if (group.includes('upper leaflet')) {
entities.push({
file: e.model,
label: label.substring(15),
groups: [{ root: 'function', id: 'upper' }],
instances: { positions, rotations },
sizeFactor: 1.5,
});
} else if (group.length === 4) {
entities.push({
file: e.model,
label: label.substring(17),
groups: [{ root: 'function', id: 'memprot' }],
instances: { positions, rotations },
sizeFactor: 1.5,
});
} else {
if (!seenGroups.has(group)) {
functionRoot.children!.push({
id: group,
root: 'function',
label: group,
});
seenGroups.add(group);
}
entities.push({
file: e.model,
label,
groups: [{ root: 'function', id: group }],
instances: { positions, rotations },
sizeFactor: 1.5,
});
}
}
return {
label: 'Martini',
description: 'Martini coarse-grained model',
roots: [functionRoot],
entities,
};
}

View File

@@ -0,0 +1,203 @@
/**
* Copyright (c) 2023 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { SortedArray } from '../../../../mol-data/int';
import { SymmetryOperator } from '../../../../mol-math/geometry';
import { Mat4 } from '../../../../mol-math/linear-algebra';
import { ModelSymmetry } from '../../../../mol-model-formats/structure/property/symmetry';
import { CustomStructureProperty } from '../../../../mol-model-props/common/custom-structure-property';
import { ElementIndex, EntityIndex, Model, Structure, Unit } from '../../../../mol-model/structure';
import { Assembly, Symmetry } from '../../../../mol-model/structure/model/properties/symmetry';
import { PluginStateObject as PSO, PluginStateTransform } from '../../../../mol-plugin-state/objects';
import { PluginContext } from '../../../../mol-plugin/context';
import { StateTransformer } from '../../../../mol-state/transformer';
import { Task } from '../../../../mol-task';
import { deepEqual } from '../../../../mol-util';
import { ParamDefinition as PD } from '../../../../mol-util/param-definition';
import { partitionUnits } from '../util';
function createModelChainMap(model: Model) {
const builder = new Structure.StructureBuilder();
const units = new Map<string, Unit>();
const { label_asym_id, _rowCount } = model.atomicHierarchy.chains;
const { offsets } = model.atomicHierarchy.chainAtomSegments;
for (let i = 0; i < _rowCount; i++) {
const elements = SortedArray.ofBounds(offsets[i] as ElementIndex, offsets[i + 1] as ElementIndex);
const unit = builder.addUnit(Unit.Kind.Atomic, model, SymmetryOperator.Default, elements, Unit.Trait.FastBoundary);
units.set(label_asym_id.value(i), unit);
}
return units;
}
function buildAssembly(model: Model, assembly: Assembly) {
const coordinateSystem = SymmetryOperator.create(assembly.id, Mat4.identity(), { assembly: { id: assembly.id, operId: 0, operList: [] } });
const assembler = Structure.Builder({
coordinateSystem,
label: model.label,
});
const units = createModelChainMap(model);
for (const g of assembly.operatorGroups) {
for (const oper of g.operators) {
for (const id of g.asymIds!) {
const u = units.get(id);
if (u) {
assembler.addWithOperator(u, oper);
} else {
console.log(`missing asymId '${id}'`);
}
}
}
}
return assembler.getStructure();
}
export { MmcifAssembly };
type MmcifAssembly = typeof MmcifAssembly
const MmcifAssembly = PluginStateTransform.BuiltIn({
name: 'mmcif-assembly',
display: { name: 'Mmcif Assembly' },
from: PSO.Molecule.Model,
to: PSO.Molecule.Structure,
params: {
id: PD.Text('', { label: 'Asm Id', description: 'Assembly Id (use empty for the 1st assembly)' }),
}
})({
canAutoUpdate({ newParams }) {
return true;
},
apply({ a, params }, plugin: PluginContext) {
return Task.create('Build Structure', async ctx => {
const model = a.data;
let id = params.id;
let asm: Assembly | undefined = void 0;
const symmetry = ModelSymmetry.Provider.get(model);
// if no id is specified, use the 1st assembly.
if (!id && symmetry && symmetry.assemblies.length !== 0) {
id = symmetry.assemblies[0].id;
}
if (!symmetry || symmetry.assemblies.length === 0) {
plugin.log.warn(`Model '${model.entryId}' has no assembly, returning model structure.`);
} else {
asm = Symmetry.findAssembly(model, id || '');
if (!asm) {
plugin.log.warn(`Model '${model.entryId}' has no assembly called '${id}', returning model structure.`);
}
}
const base = Structure.ofModel(model);
if (!asm) {
const label = { label: 'Model', description: Structure.elementDescription(base) };
return new PSO.Molecule.Structure(base, label);
}
const s = buildAssembly(model, asm);
const objProps = { label: `Assembly ${id}`, description: Structure.elementDescription(s) };
return new PSO.Molecule.Structure(s, objProps);
});
},
update({ newParams, oldParams }) {
return deepEqual(newParams, oldParams)
? StateTransformer.UpdateResult.Unchanged
: StateTransformer.UpdateResult.Recreate;
},
dispose({ b }) {
b?.data.customPropertyDescriptors.dispose();
}
});
type UnitsByEntity = Map<EntityIndex, Unit[]>;
const UnitsByEntity = CustomStructureProperty.createSimple<UnitsByEntity>('units_by_entity', 'root');
function getUnitsByEntity(structure: Structure): UnitsByEntity {
if (UnitsByEntity.get(structure).value) {
return UnitsByEntity.get(structure).value!;
}
const atomicIndex = structure.model.atomicHierarchy.index;
const spheresIndex = structure.model.coarseHierarchy.spheres;
const map: UnitsByEntity = new Map();
for (const ug of structure.unitSymmetryGroups) {
const u = ug.units[0];
let e: EntityIndex;
if (Unit.isAtomic(u)) {
e = atomicIndex.getEntityFromChain(u.chainIndex[u.elements[0]]);
} else if (Unit.isSpheres(u)) {
e = spheresIndex.getEntityFromChain(u.coarseElements.chainElementSegments.index[u.elements[0]]);
} else {
continue;
}
if (!map.has(e)) map.set(e, []);
const entityUnits = map.get(e)!;
for (let i = 0, il = ug.units.length; i < il; ++i) {
entityUnits.push(ug.units[i]);
}
}
UnitsByEntity.set(structure, { value: map }, map);
return map;
}
export { MmcifStructure };
type MmcifStructure = typeof MmcifStructure
const MmcifStructure = PluginStateTransform.BuiltIn({
name: 'mmcif-structure',
display: { name: 'Mmcif Structure' },
from: PSO.Root,
to: PSO.Molecule.Structure,
params: {
structureRef: PD.Text(''),
entityId: PD.Text(''),
cellSize: PD.Numeric(500, { min: 0, max: 10000, step: 100 }),
}
})({
canAutoUpdate({ newParams }) {
return true;
},
apply({ a, params, dependencies }) {
return Task.create('Build Structure', async ctx => {
const parent = dependencies![params.structureRef].data as Structure;
const { entities } = parent.model;
const idx = entities.getEntityIndex(params.entityId);
const unitsByEntity = getUnitsByEntity(parent);
const units = unitsByEntity.get(idx) || [];
const unitCount = units.length;
let structure: Structure;
if (unitCount > 1 && units.every(u => u.conformation.operator.isIdentity)) {
const mergedUnits = partitionUnits(units, params.cellSize);
structure = Structure.create(mergedUnits);
} else {
structure = Structure.create(units);
}
// could also use _struct_ref.pdbx_db_accession to point to uniprot with _struct_ref.db_name == UNP
const label = entities.data.pdbx_description.value(idx).join(', ') || 'model';
const description = `*Entity id* ${entities.data.id.value(idx)} *src_method* ${entities.data.src_method.value(idx)} *type* ${entities.data.type.value(idx)}`;
return new PSO.Molecule.Structure(structure, { label, description: description });
});
},
update({ newParams, oldParams }) {
return deepEqual(newParams, oldParams)
? StateTransformer.UpdateResult.Unchanged
: StateTransformer.UpdateResult.Recreate;
},
dispose({ b }) {
b?.data.customPropertyDescriptors.dispose();
}
});

View File

@@ -0,0 +1,191 @@
/**
* Copyright (c) 2023-2026 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { MmcifFormat } from '../../../../mol-model-formats/structure/mmcif';
import { Model } from '../../../../mol-model/structure/model/model';
import { PluginStateObject } from '../../../../mol-plugin-state/objects';
import { StructureRepresentation3D } from '../../../../mol-plugin-state/transforms/representation';
import { PluginContext } from '../../../../mol-plugin/context';
import { SpacefillRepresentationProvider } from '../../../../mol-repr/structure/representation/spacefill';
import { StateObjectRef, StateObjectSelector, StateBuilder } from '../../../../mol-state';
import { Clip } from '../../../../mol-util/clip';
import { Color } from '../../../../mol-util/color';
import { ColorNames } from '../../../../mol-util/color/names';
import { GraphicsMode, MesoscaleGroup, MesoscaleState, getDistinctBaseColors, getDistinctGroupColors, getGraphicsModeProps, getMesoscaleGroupParams } from '../state';
import { MmcifAssembly, MmcifStructure } from './model';
function getSpacefillParams(color: Color, scaleFactor: number, graphics: GraphicsMode, clipVariant: Clip.Variant) {
const gmp = getGraphicsModeProps(graphics === 'custom' ? 'quality' : graphics);
return {
type: {
name: 'spacefill',
params: {
...SpacefillRepresentationProvider.defaultValues,
ignoreHydrogens: false,
instanceGranularity: false,
ignoreLight: true,
lodLevels: gmp.lodLevels.map(l => {
return {
...l,
stride: Math.max(1, Math.round(l.stride / Math.pow(scaleFactor, l.scaleBias)))
};
}),
quality: 'lowest', // avoid 'auto', triggers boundary calc
clip: {
variant: clipVariant,
objects: [],
},
clipPrimitive: true,
approximate: gmp.approximate,
alphaThickness: gmp.alphaThickness,
interior: {
color: Color.fromNormalizedRgb(0, 0, 0),
colorStrength: 0.15,
substance: { metalness: 0.0, roughness: 1.0, bumpiness: 0.0 },
substanceStrength: 1,
}
},
},
colorTheme: {
name: 'uniform',
params: {
value: color,
saturation: 0,
lightness: 0,
}
},
sizeTheme: {
name: 'physical',
params: {
scale: scaleFactor,
}
},
};
}
export async function createMmcifHierarchy(plugin: PluginContext, trajectory: StateObjectRef<PluginStateObject.Molecule.Trajectory>) {
const builder = plugin.builders.structure;
const state = plugin.state.data;
const model = await builder.createModel(trajectory, { modelIndex: 0 });
const { data: entities, subtype } = model.data!.entities;
const sd = model.data?.sourceData;
if (MmcifFormat.is(sd)) {
const pdbId = sd.data.db.struct.entry_id.value(0);
MesoscaleState.set(plugin, {
description: sd.data.db.struct.title.value(0),
link: pdbId ? `https://www.rcsb.org/structure/${pdbId}` : ''
});
}
const spheresAvgRadius = new Map<string, number>();
if (model.data!.coarseHierarchy.isDefined) {
const spheresCount = new Map<string, number>();
const spheresEntity_id = model.data!.coarseHierarchy.spheres.entity_id;
const spheresRadius = model.data!.coarseConformation.spheres.radius;
for (let i = 0, il = spheresEntity_id.rowCount; i < il; ++i) {
const entitiId = spheresEntity_id.value(i);
const radius = spheresRadius[i];
if (!spheresCount.has(entitiId)) {
spheresCount.set(entitiId, 1);
spheresAvgRadius.set(entitiId, radius);
} else {
spheresCount.set(entitiId, spheresCount.get(entitiId)! + 1);
spheresAvgRadius.set(entitiId, spheresAvgRadius.get(entitiId)! + radius);
}
}
spheresAvgRadius.forEach((v, k) => {
spheresAvgRadius.set(k, v / spheresCount.get(k)!);
});
}
const coarseGrained = Model.isCoarseGrained(model.data!);
const entGroups = new Map<string, StateObjectSelector>();
const entIds = new Map<string, { idx: number, members: Map<number, number> }>();
const entColors = new Map<string, Color[]>();
const graphicsMode = MesoscaleState.get(plugin).graphics;
const groupParams = getMesoscaleGroupParams(graphicsMode);
const base = await state.build()
.to(model)
.apply(MmcifAssembly, { id: '' })
.commit();
const units = base.data!.units;
const willBeMerged = units.length > 1 && units.every(u => u.conformation.operator.isIdentity);
const clipVariant = willBeMerged ? 'pixel' : 'instance';
const entRoot = await state.build()
.toRoot()
.apply(MesoscaleGroup, { ...groupParams, root: true, index: -1, tag: 'ent:', label: 'entity', color: { type: 'custom', illustrative: false, value: ColorNames.white, variability: 20, shift: 0, lightness: 0, alpha: 1, emissive: 0 } }, { tags: 'group:ent:', state: { isCollapsed: false, isHidden: groupParams.hidden } })
.commit();
const getEntityType = (i: number) => {
if (entities.type.value(i) === 'water') return 'water' as const;
return subtype.value(i) || 'unknown type';
};
for (let i = 0; i < entities._rowCount; i++) {
const t = getEntityType(i);
if (!entIds.has(t)) {
entIds.set(t, { idx: entIds.size, members: new Map() });
}
const cm = entIds.get(t)!;
cm.members.set(i, cm.members.size);
}
//
const baseEntColors = getDistinctBaseColors(entIds.size, 0);
const entIdEntries = Array.from(entIds.entries());
for (let i = 0; i < entIdEntries.length; ++i) {
const [t, m] = entIdEntries[i];
const groupColors = getDistinctGroupColors(m.members.size, baseEntColors[i], 20, 0);
entColors.set(t, groupColors);
}
for (let i = 0; i < entities._rowCount; i++) {
const t = getEntityType(i);
if (!entGroups.has(t)) {
const colorIdx = entIds.get(t)?.idx;
const color = colorIdx !== undefined ? baseEntColors[colorIdx] : ColorNames.white;
const group = await state.build()
.to(entRoot)
.applyOrUpdateTagged(`group:ent:${t}`, MesoscaleGroup, { ...groupParams, index: colorIdx, tag: `ent:${t}`, label: t, color: { type: 'generate', illustrative: false, value: color, variability: 20, shift: 0, lightness: 0, alpha: 1, emissive: 0 } }, { tags: `ent:`, state: { isCollapsed: true, isHidden: groupParams.hidden } })
.commit({ revertOnError: true });
entGroups.set(t, group);
}
}
//
await state.transaction(async () => {
try {
const dependsOn = [base.ref];
plugin.animationLoop.stop({ noDraw: true });
let build: StateBuilder.Root | StateBuilder.To<any> = state.build();
for (let i = 0; i < entities._rowCount; i++) {
const t = getEntityType(i);
const color = entColors.get(t)![entIds.get(t)!.members.get(i)!];
const scaleFactor = spheresAvgRadius.get(entities.id.value(i)) || (coarseGrained ? 2 : 1);
build = build
.toRoot()
.apply(MmcifStructure, { structureRef: base.ref, entityId: entities.id.value(i) }, { dependsOn })
.apply(StructureRepresentation3D, getSpacefillParams(color, scaleFactor, graphicsMode, clipVariant), { tags: [`ent:${t}`] });
}
await build.commit();
} catch (e) {
console.error(e);
plugin.log.error(e);
} finally {
plugin.animationLoop.start();
}
}).run();
}

View File

@@ -0,0 +1,140 @@
/**
* Copyright (c) 2022-2023 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { Mat4 } from '../../../../mol-math/linear-algebra/3d/mat4';
import { getMatrices, operatorGroupsProvider } from '../../../../mol-model-formats/structure/property/assembly';
import { Structure, StructureElement, StructureProperties, Trajectory, Unit } from '../../../../mol-model/structure';
import { Assembly } from '../../../../mol-model/structure/model/properties/symmetry';
import { PluginStateObject as SO, PluginStateTransform } from '../../../../mol-plugin-state/objects';
import { Task } from '../../../../mol-task';
import { Table } from '../../../../mol-data/db';
import { mmCIF_Schema } from '../../../../mol-io/reader/cif/schema/mmcif';
import { MmcifFormat } from '../../../../mol-model-formats/structure/mmcif';
import { arrayFind } from '../../../../mol-data/util';
import { StateObject, StateTransformer } from '../../../../mol-state';
import { CifField } from '../../../../mol-io/reader/cif';
import { ParamDefinition as PD } from '../../../../mol-util/param-definition';
import { mergeUnits } from '../util';
import { deepEqual } from '../../../../mol-util';
export { StructureFromPetworld };
type StructureFromPetworld = typeof StructureFromPetworld
const StructureFromPetworld = PluginStateTransform.BuiltIn({
name: 'structure-from-petworld',
display: { name: 'Structure from PetWorld', description: 'Create a molecular structure from PetWorld models.' },
from: SO.Molecule.Trajectory,
to: SO.Molecule.Structure,
params: {
modelIndex: PD.Numeric(0),
entityIds: PD.Value<string[]>([]),
}
})({
apply({ a, params }) {
return Task.create('Build Structure', async ctx => {
const s = await buildModelsAssembly(a.data, '1', params.modelIndex, params.entityIds).runInContext(ctx);
if (!s || !MmcifFormat.is(s.model.sourceData)) return StateObject.Null;
const { frame } = s.model.sourceData.data;
const pdbx_model = frame.categories.pdbx_model.getField('name')!;
const pdbx_description = frame.categories.pdbx_model.getField('description')!;
const description = pdbx_description ? pdbx_description.str(params.modelIndex) : Structure.elementDescription(s);
const label = pdbx_model.str(params.modelIndex);
const props = { label, description: description };
return new SO.Molecule.Structure(s, props);
});
},
update({ newParams, oldParams }) {
return deepEqual(newParams, oldParams)
? StateTransformer.UpdateResult.Unchanged
: StateTransformer.UpdateResult.Recreate;
},
dispose({ b }) {
b?.data.customPropertyDescriptors.dispose();
}
});
function buildModelsAssembly(trajectory: Trajectory, asmName: string, modelIndex: number, entitiyIds: string[]) {
return Task.create('Build Models Assembly', async ctx => {
const model = await Task.resolveInContext(trajectory.getFrameAtIndex(modelIndex), ctx);
if (!MmcifFormat.is(model.sourceData)) return;
const { db, frame } = model.sourceData.data;
const PDB_model_num = frame.categories.pdbx_struct_assembly_gen.getField('PDB_model_num')!;
// hack to cache models assemblies
if (!(trajectory as any).__modelsAssemblies) {
(trajectory as any).__modelsAssemblies = createModelsAssemblies(db.pdbx_struct_assembly, db.pdbx_struct_assembly_gen as StructAssemblyGen, db.pdbx_struct_oper_list, PDB_model_num);
}
const modelsAssemblies = (trajectory as any).__modelsAssemblies as ModelsAssembly[];
const modelsAssembly = arrayFind(modelsAssemblies, ma => ma.assembly.id.toLowerCase() === asmName);
if (!modelsAssembly) throw new Error(`Models Assembly '${asmName}' is not defined.`);
const { assembly } = modelsAssembly;
const assembler = Structure.Builder();
const g = assembly.operatorGroups[modelIndex];
const structure = Structure.ofModel(model);
const l = StructureElement.Location.create(structure);
const units = structure.units.filter(u => {
l.unit = u;
l.element = u.elements[0];
return entitiyIds.includes(StructureProperties.entity.id(l));
});
const unit = mergeUnits(units, 0);
for (const oper of g.operators) {
assembler.addUnit(unit.kind, unit.model, oper, unit.elements, unit.traits | Unit.Trait.FastBoundary, unit.invariantId);
}
return assembler.getStructure();
});
}
//
type StructAssembly = Table<mmCIF_Schema['pdbx_struct_assembly']>
type StructAssemblyGen = Table<mmCIF_Schema['pdbx_struct_assembly_gen']>
type StructOperList = Table<mmCIF_Schema['pdbx_struct_oper_list']>
type ModelsAssembly = { assembly: Assembly, modelNums: number[] };
function createModelsAssemblies(pdbx_struct_assembly: StructAssembly, pdbx_struct_assembly_gen: StructAssemblyGen, pdbx_struct_oper_list: StructOperList, PDB_model_num: CifField): ReadonlyArray<ModelsAssembly> {
if (!pdbx_struct_assembly._rowCount) return [];
const matrices = getMatrices(pdbx_struct_oper_list);
const assemblies: ModelsAssembly[] = [];
for (let i = 0; i < pdbx_struct_assembly._rowCount; i++) {
assemblies[assemblies.length] = createModelsAssembly(pdbx_struct_assembly, pdbx_struct_assembly_gen, i, matrices, PDB_model_num);
}
return assemblies;
}
type Matrices = Map<string, Mat4>
type Generator = { assemblyId: string, expression: string, asymIds: string[] }
function createModelsAssembly(pdbx_struct_assembly: StructAssembly, pdbx_struct_assembly_gen: StructAssemblyGen, index: number, matrices: Matrices, PDB_model_num: CifField): ModelsAssembly {
const id = pdbx_struct_assembly.id.value(index);
const details = pdbx_struct_assembly.details.value(index);
const generators: Generator[] = [];
const modelNums: number[] = [];
const { assembly_id, oper_expression, asym_id_list } = pdbx_struct_assembly_gen;
for (let i = 0, _i = pdbx_struct_assembly_gen._rowCount; i < _i; i++) {
if (assembly_id.value(i) !== id) continue;
generators[generators.length] = {
assemblyId: id,
expression: oper_expression.value(i),
asymIds: asym_id_list.value(i)
};
modelNums[modelNums.length] = PDB_model_num.int(i);
}
const assembly = Assembly.create(id, details, operatorGroupsProvider(generators, matrices));
return { assembly, modelNums };
}

View File

@@ -0,0 +1,140 @@
/**
* Copyright (c) 2022-2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { StateBuilder, StateObjectRef } from '../../../../mol-state';
import { StructureFromPetworld } from './model';
import { Color } from '../../../../mol-util/color';
import { SpacefillRepresentationProvider } from '../../../../mol-repr/structure/representation/spacefill';
import { StructureRepresentation3D } from '../../../../mol-plugin-state/transforms/representation';
import { PluginContext } from '../../../../mol-plugin/context';
import { PluginStateObject } from '../../../../mol-plugin-state/objects';
import { GraphicsMode, MesoscaleGroup, MesoscaleState, getDistinctBaseColors, getGraphicsModeProps, getMesoscaleGroupParams } from '../state';
import { ColorNames } from '../../../../mol-util/color/names';
import { MmcifFormat } from '../../../../mol-model-formats/structure/mmcif';
import { Task } from '../../../../mol-task';
function getSpacefillParams(color: Color, graphics: GraphicsMode) {
const gmp = getGraphicsModeProps(graphics === 'custom' ? 'quality' : graphics);
return {
type: {
name: 'spacefill',
params: {
...SpacefillRepresentationProvider.defaultValues,
ignoreHydrogens: true,
instanceGranularity: true,
ignoreLight: true,
lodLevels: gmp.lodLevels,
quality: 'lowest', // avoid 'auto', triggers boundary calc
clip: {
variant: 'instance',
objects: [],
},
clipPrimitive: true,
approximate: gmp.approximate,
alphaThickness: gmp.alphaThickness,
interior: {
color: Color.fromNormalizedRgb(0, 0, 0),
colorStrength: 0.15,
substance: { metalness: 0.0, roughness: 1.0, bumpiness: 0.0 },
substanceStrength: 1,
}
},
},
colorTheme: {
name: 'uniform',
params: {
value: color,
saturation: 0,
lightness: 0,
}
},
sizeTheme: {
name: 'physical',
params: {
scale: 1,
}
},
};
}
export async function createPetworldHierarchy(plugin: PluginContext, trajectory: StateObjectRef<PluginStateObject.Molecule.Trajectory>) {
const cell = StateObjectRef.resolveAndCheck(plugin.state.data, trajectory);
const tr = cell?.obj?.data;
if (!cell || !tr) return;
if (!MmcifFormat.is(tr.representative.sourceData)) return;
const membrane: { modelIndex: number, entityIds: string[] }[] = [];
const other: { modelIndex: number, entityIds: string[] }[] = [];
for (let i = 0; i < tr.frameCount; ++i) {
const m = await Task.resolveInContext(tr.getFrameAtIndex(i));
// cannot use m.properties.structAsymMap because petworld models
// may assign the same asymId to multiple entities
const { label_asym_id, label_entity_id, _rowCount } = m.atomicHierarchy.chains;
const membraneIds: string[] = [];
const otherIds: string[] = [];
const seen = new Set<string>();
for (let i = 0; i < _rowCount; i ++) {
const entityId = label_entity_id.value(i);
if (seen.has(entityId)) continue;
const asymId = label_asym_id.value(i);
if (asymId.startsWith('MEM')) {
membraneIds.push(entityId);
} else {
otherIds.push(entityId);
}
seen.add(entityId);
}
if (membraneIds.length) {
membrane.push({ modelIndex: i, entityIds: membraneIds });
}
if (otherIds.length) {
other.push({ modelIndex: i, entityIds: otherIds });
}
}
const state = plugin.state.data;
const graphicsMode = MesoscaleState.get(plugin).graphics;
const groupParams = getMesoscaleGroupParams(graphicsMode);
const group = await state.build()
.toRoot()
.apply(MesoscaleGroup, { ...groupParams, root: true, index: -1, tag: `ent:`, label: 'entity', color: { type: 'generate', illustrative: false, value: ColorNames.white, variability: 20, shift: 0, lightness: 0, alpha: 1, emissive: 0 } }, { tags: ['group:ent:'], state: { isCollapsed: false, isHidden: groupParams.hidden } })
.commit({ revertOnError: true });
await state.build()
.to(group)
.apply(MesoscaleGroup, { ...groupParams, index: undefined, tag: `ent:mem`, label: 'Membrane', color: { type: 'uniform', illustrative: false, value: ColorNames.lightgrey, variability: 20, shift: 0, lightness: 0, alpha: 1, emissive: 0 } }, { tags: ['group:ent:mem', 'ent:', '__no_group_color__'], state: { isCollapsed: true, isHidden: groupParams.hidden } })
.commit();
const colors = getDistinctBaseColors(other.length, 0);
await state.transaction(async () => {
try {
plugin.animationLoop.stop({ noDraw: true });
let build: StateBuilder.Root | StateBuilder.To<any> = state.build();
for (let i = 0, il = membrane.length; i < il; ++i) {
build = build
.to(cell)
.apply(StructureFromPetworld, membrane[i])
.apply(StructureRepresentation3D, getSpacefillParams(ColorNames.lightgrey, graphicsMode), { tags: ['ent:mem', '__no_group_color__'] });
}
for (let i = 0, il = other.length; i < il; ++i) {
build = build
.to(cell)
.apply(StructureFromPetworld, other[i])
.apply(StructureRepresentation3D, getSpacefillParams(colors[i], graphicsMode), { tags: ['ent:'] });
}
await build.commit();
} catch (e) {
console.error(e);
plugin.log.error(e);
} finally {
plugin.animationLoop.start();
}
}).run();
}

Some files were not shown because too many files have changed in this diff Show More