molstar 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -20
- package/README.md +194 -194
- package/build/viewer/embedded.html +43 -43
- package/build/viewer/index.html +106 -106
- package/build/viewer/molstar.js +1 -1
- package/lib/apps/docking-viewer/index.html +36 -36
- package/lib/apps/viewer/embedded.html +43 -43
- package/lib/apps/viewer/index.html +106 -106
- package/lib/commonjs/mol-geo/geometry/cylinders/cylinders.d.ts +2 -2
- package/lib/commonjs/mol-geo/geometry/lines/lines.d.ts +0 -1
- package/lib/commonjs/mol-geo/geometry/points/points.d.ts +1 -1
- package/lib/commonjs/mol-io/reader/cif/schema/mmcif.d.ts +22 -0
- package/lib/commonjs/mol-io/reader/cif/schema/mmcif.js +22 -0
- package/lib/commonjs/mol-model/structure/export/categories/atom_site.js +68 -1
- package/lib/commonjs/mol-model/structure/structure/util/superposition-sifts-mapping.d.ts +21 -0
- package/lib/commonjs/mol-model/structure/structure/util/{superposition-db-mapping.js → superposition-sifts-mapping.js} +40 -20
- package/lib/commonjs/mol-model-formats/structure/basic/schema.d.ts +5 -0
- package/lib/commonjs/mol-model-formats/structure/common/property.d.ts +5 -2
- package/lib/commonjs/mol-model-formats/structure/common/property.js +20 -8
- package/lib/commonjs/mol-model-formats/structure/property/bonds/index-pair.d.ts +1 -0
- package/lib/commonjs/mol-model-formats/structure/property/bonds/index-pair.js +2 -1
- package/lib/commonjs/mol-model-props/sequence/{best-database-mapping.d.ts → sifts-mapping.d.ts} +7 -5
- package/lib/commonjs/mol-model-props/sequence/{best-database-mapping.js → sifts-mapping.js} +29 -26
- package/lib/{mol-model-props/sequence/themes/best-database-mapping.d.ts → commonjs/mol-model-props/sequence/themes/sifts-mapping.d.ts} +5 -5
- package/lib/commonjs/mol-model-props/sequence/themes/{best-database-mapping.js → sifts-mapping.js} +22 -22
- package/lib/commonjs/mol-plugin/behavior/dynamic/custom-props/sequence/{best-database-mapping.d.ts → sifts-mapping.d.ts} +1 -1
- package/lib/commonjs/mol-plugin/behavior/dynamic/custom-props/sequence/{best-database-mapping.js → sifts-mapping.js} +11 -11
- package/lib/commonjs/mol-plugin/behavior/dynamic/custom-props.d.ts +1 -1
- package/lib/commonjs/mol-plugin/behavior/dynamic/custom-props.js +2 -2
- package/lib/commonjs/mol-plugin/behavior/dynamic/volume-streaming/model.d.ts +2 -3
- package/lib/commonjs/mol-plugin-ui/structure/superposition.d.ts +4 -1
- package/lib/commonjs/mol-plugin-ui/structure/superposition.js +66 -30
- package/lib/commonjs/mol-script/language/builder.d.ts +1 -0
- package/lib/examples/alpha-orbitals/index.html +61 -61
- package/lib/examples/basic-wrapper/index.html +137 -137
- package/lib/examples/lighting/index.html +88 -88
- package/lib/examples/proteopedia-wrapper/index.html +236 -236
- package/lib/mol-geo/geometry/cylinders/cylinders.d.ts +2 -2
- package/lib/mol-geo/geometry/lines/lines.d.ts +0 -1
- package/lib/mol-geo/geometry/points/points.d.ts +1 -1
- package/lib/mol-io/reader/cif/schema/mmcif.d.ts +22 -0
- package/lib/mol-io/reader/cif/schema/mmcif.js +22 -0
- package/lib/mol-model/structure/export/categories/atom_site.js +68 -1
- package/lib/mol-model/structure/structure/util/superposition-sifts-mapping.d.ts +21 -0
- package/lib/mol-model/structure/structure/util/{superposition-db-mapping.js → superposition-sifts-mapping.js} +38 -18
- package/lib/mol-model-formats/structure/basic/schema.d.ts +5 -0
- package/lib/mol-model-formats/structure/common/property.d.ts +5 -2
- package/lib/mol-model-formats/structure/common/property.js +20 -8
- package/lib/mol-model-formats/structure/property/bonds/index-pair.d.ts +1 -0
- package/lib/mol-model-formats/structure/property/bonds/index-pair.js +2 -1
- package/lib/mol-model-props/sequence/{best-database-mapping.d.ts → sifts-mapping.d.ts} +7 -5
- package/lib/mol-model-props/sequence/{best-database-mapping.js → sifts-mapping.js} +28 -25
- package/lib/{commonjs/mol-model-props/sequence/themes/best-database-mapping.d.ts → mol-model-props/sequence/themes/sifts-mapping.d.ts} +5 -5
- package/lib/mol-model-props/sequence/themes/{best-database-mapping.js → sifts-mapping.js} +19 -19
- package/lib/mol-plugin/behavior/dynamic/custom-props/sequence/{best-database-mapping.d.ts → sifts-mapping.d.ts} +1 -1
- package/lib/mol-plugin/behavior/dynamic/custom-props/sequence/{best-database-mapping.js → sifts-mapping.js} +8 -8
- package/lib/mol-plugin/behavior/dynamic/custom-props.d.ts +1 -1
- package/lib/mol-plugin/behavior/dynamic/custom-props.js +1 -1
- package/lib/mol-plugin/behavior/dynamic/volume-streaming/model.d.ts +2 -3
- package/lib/mol-plugin/version.js +2 -2
- package/lib/mol-plugin-ui/skin/base/base.scss +32 -32
- package/lib/mol-plugin-ui/skin/base/components/controls-base.scss +333 -333
- package/lib/mol-plugin-ui/skin/base/components/controls.scss +418 -418
- package/lib/mol-plugin-ui/skin/base/components/help.scss +27 -27
- package/lib/mol-plugin-ui/skin/base/components/line-graph.scss +67 -67
- package/lib/mol-plugin-ui/skin/base/components/log.scss +100 -100
- package/lib/mol-plugin-ui/skin/base/components/misc.scss +643 -643
- package/lib/mol-plugin-ui/skin/base/components/sequence.scss +125 -125
- package/lib/mol-plugin-ui/skin/base/components/slider.scss +165 -165
- package/lib/mol-plugin-ui/skin/base/components/tasks.scss +99 -99
- package/lib/mol-plugin-ui/skin/base/components/toast.scss +83 -83
- package/lib/mol-plugin-ui/skin/base/components/transformer.scss +163 -163
- package/lib/mol-plugin-ui/skin/base/components/viewport.scss +127 -127
- package/lib/mol-plugin-ui/skin/base/layout/common.scss +71 -71
- package/lib/mol-plugin-ui/skin/base/layout/controls-landscape.scss +89 -89
- package/lib/mol-plugin-ui/skin/base/layout/controls-outside.scss +98 -98
- package/lib/mol-plugin-ui/skin/base/layout/controls-portrait.scss +108 -108
- package/lib/mol-plugin-ui/skin/base/layout.scss +40 -40
- package/lib/mol-plugin-ui/skin/base/logo.scss +12 -12
- package/lib/mol-plugin-ui/skin/base/normalize.scss +209 -209
- package/lib/mol-plugin-ui/skin/base/ui.scss +40 -40
- package/lib/mol-plugin-ui/skin/base/variables.scss +85 -85
- package/lib/mol-plugin-ui/skin/blue.scss +1 -1
- package/lib/mol-plugin-ui/skin/colors/blue.scss +23 -23
- package/lib/mol-plugin-ui/skin/colors/dark.scss +23 -23
- package/lib/mol-plugin-ui/skin/colors/light.scss +29 -29
- package/lib/mol-plugin-ui/skin/dark.scss +1 -1
- package/lib/mol-plugin-ui/skin/light.scss +1 -1
- package/lib/mol-plugin-ui/structure/superposition.d.ts +4 -1
- package/lib/mol-plugin-ui/structure/superposition.js +66 -30
- package/lib/mol-script/language/builder.d.ts +1 -0
- package/package.json +160 -160
- package/lib/commonjs/mol-model/structure/structure/util/superposition-db-mapping.d.ts +0 -13
- package/lib/mol-model/structure/structure/util/superposition-db-mapping.d.ts +0 -13
|
@@ -1,237 +1,237 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
|
|
6
|
-
<title>Mol* Proteopedia Wrapper</title>
|
|
7
|
-
<style>
|
|
8
|
-
* {
|
|
9
|
-
margin: 0;
|
|
10
|
-
padding: 0;
|
|
11
|
-
box-sizing: border-box;
|
|
12
|
-
}
|
|
13
|
-
#app {
|
|
14
|
-
position: absolute;
|
|
15
|
-
left: 160px;
|
|
16
|
-
top: 100px;
|
|
17
|
-
width: 600px;
|
|
18
|
-
height: 600px;
|
|
19
|
-
border: 1px solid #ccc;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
#controls {
|
|
23
|
-
position: absolute;
|
|
24
|
-
width: 130px;
|
|
25
|
-
top: 10px;
|
|
26
|
-
left: 10px;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
#controls > button {
|
|
30
|
-
display: block;
|
|
31
|
-
width: 100%;
|
|
32
|
-
text-align: left;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
#controls > hr {
|
|
36
|
-
margin: 5px 0;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
#controls > input, #controls > select {
|
|
40
|
-
width: 100%;
|
|
41
|
-
display: block;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
#volume-streaming-wrapper {
|
|
45
|
-
position: absolute;
|
|
46
|
-
top: 100px;
|
|
47
|
-
left: 780px;
|
|
48
|
-
width: 300px;
|
|
49
|
-
}
|
|
50
|
-
</style>
|
|
51
|
-
<link rel="stylesheet" type="text/css" href="molstar.css" />
|
|
52
|
-
<script type="text/javascript" src="./index.js"></script>
|
|
53
|
-
</head>
|
|
54
|
-
<body>
|
|
55
|
-
<div id='controls'>
|
|
56
|
-
<h3>Source</h3>
|
|
57
|
-
<input type='text' id='url' placeholder='url' style='width: 400px' />
|
|
58
|
-
<input type='text' id='assemblyId' placeholder='assembly id' />
|
|
59
|
-
<select id='format'>
|
|
60
|
-
<option value='cif' selected>CIF</option>
|
|
61
|
-
<option value='pdb'>PDB</option>
|
|
62
|
-
</select>
|
|
63
|
-
<input type='checkbox' id='isBinary' style="display: inline-block; width: auto" /> <label for="isBinary"> Binary</label><br />
|
|
64
|
-
</div>
|
|
65
|
-
<div id="app"></div>
|
|
66
|
-
<div id="volume-streaming-wrapper"></div>
|
|
67
|
-
<script>
|
|
68
|
-
// it might be a good idea to define these colors in a separate script file
|
|
69
|
-
var CustomColors = [0x00ff00, 0x0000ff];
|
|
70
|
-
|
|
71
|
-
// create an instance of the plugin
|
|
72
|
-
var PluginWrapper = new MolStarProteopediaWrapper();
|
|
73
|
-
|
|
74
|
-
console.log('Wrapper version', MolStarProteopediaWrapper.VERSION_MAJOR, MolStarProteopediaWrapper.VERSION_MINOR);
|
|
75
|
-
|
|
76
|
-
function $(id) { return document.getElementById(id); }
|
|
77
|
-
|
|
78
|
-
var pdbId = '1cbs', assemblyId= 'preferred', isBinary = true;
|
|
79
|
-
var url = 'https://www.ebi.ac.uk/pdbe/entry-files/download/' + pdbId + '.bcif'
|
|
80
|
-
var format = 'cif';
|
|
81
|
-
|
|
82
|
-
$('url').value = url;
|
|
83
|
-
$('url').onchange = function (e) { url = e.target.value; }
|
|
84
|
-
$('assemblyId').value = assemblyId;
|
|
85
|
-
$('assemblyId').onchange = function (e) { assemblyId = e.target.value; }
|
|
86
|
-
$('format').value = format;
|
|
87
|
-
$('format').onchange = function (e) { format = e.target.value; }
|
|
88
|
-
$('isBinary').checked = isBinary;
|
|
89
|
-
$('isBinary').onchange = function (e) { isBinary = !!e.target.checked; };
|
|
90
|
-
|
|
91
|
-
function loadAndSnapshot(params) {
|
|
92
|
-
PluginWrapper.load(params).then(() => {
|
|
93
|
-
setTimeout(() => snapshot = PluginWrapper.plugin.state.getSnapshot({ canvas3d: false /* do not save spinning state */ }), 500);
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
var representationStyle = {
|
|
98
|
-
// sequence: { coloring: 'proteopedia-custom' }, // or just { }
|
|
99
|
-
hetGroups: { kind: 'ball-and-stick' }, // or 'spacefill
|
|
100
|
-
water: { hide: true },
|
|
101
|
-
snfg3d: { hide: false }
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
PluginWrapper.init('app' /** or document.getElementById('app') */, {
|
|
105
|
-
customColorList: CustomColors
|
|
106
|
-
}).then(() => {
|
|
107
|
-
PluginWrapper.setBackground(0xffffff);
|
|
108
|
-
loadAndSnapshot({ url: url, format: format, isBinary: isBinary, assemblyId: assemblyId, representationStyle: representationStyle });
|
|
109
|
-
PluginWrapper.toggleSpin();
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
PluginWrapper.events.modelInfo.subscribe(function (info) {
|
|
113
|
-
console.log('Model Info', info);
|
|
114
|
-
listHetGroups(info);
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
addControl('Load Asym Unit', () => loadAndSnapshot({ url: url, format: format, isBinary }));
|
|
118
|
-
addControl('Load Assembly', () => loadAndSnapshot({ url: url, format: format, isBinary, assemblyId: assemblyId }));
|
|
119
|
-
|
|
120
|
-
addSeparator();
|
|
121
|
-
|
|
122
|
-
addHeader('Representation');
|
|
123
|
-
|
|
124
|
-
addControl('Custom Chain Colors', () => PluginWrapper.updateStyle({ sequence: { coloring: 'proteopedia-custom' } }, true));
|
|
125
|
-
addControl('Default Chain Colors', () => PluginWrapper.updateStyle({ sequence: { } }, true));
|
|
126
|
-
|
|
127
|
-
addControl('HET Spacefill', () => PluginWrapper.updateStyle({ hetGroups: { kind: 'spacefill' } }, true));
|
|
128
|
-
addControl('HET Ball-and-stick', () => PluginWrapper.updateStyle({ hetGroups: { kind: 'ball-and-stick' } }, true));
|
|
129
|
-
|
|
130
|
-
addControl('Hide 3DSNFG', () => PluginWrapper.updateStyle({ snfg3d: { hide: true } }, true));
|
|
131
|
-
addControl('Show 3DSNFG', () => PluginWrapper.updateStyle({ snfg3d: { hide: false } }, true));
|
|
132
|
-
|
|
133
|
-
addControl('Hide Water', () => PluginWrapper.updateStyle({ water: { hide: true } }, true));
|
|
134
|
-
addControl('Show Water', () => PluginWrapper.updateStyle({ water: { hide: false } }, true));
|
|
135
|
-
|
|
136
|
-
addSeparator();
|
|
137
|
-
|
|
138
|
-
addHeader('Camera');
|
|
139
|
-
addControl('Reset Position', () => PluginWrapper.camera.resetPosition());
|
|
140
|
-
addControl('Toggle Spin', () => PluginWrapper.camera.toggleSpin());
|
|
141
|
-
// Same as "wheel icon" and Viewport options
|
|
142
|
-
// addControl('Clip', () => PluginWrapper.viewport.setSettings({ clip: [33, 66] }));
|
|
143
|
-
// addControl('Reset Clip', () => PluginWrapper.viewport.setSettings({ clip: [1, 100] }));
|
|
144
|
-
|
|
145
|
-
addSeparator();
|
|
146
|
-
|
|
147
|
-
addHeader('Animation');
|
|
148
|
-
|
|
149
|
-
// adjust this number to make the animation faster or slower
|
|
150
|
-
// requires to "restart" the animation if changed
|
|
151
|
-
PluginWrapper.animate.modelIndex.targetFps = 30;
|
|
152
|
-
|
|
153
|
-
addControl('Play To End', () => PluginWrapper.animate.modelIndex.onceForward());
|
|
154
|
-
addControl('Play To Start', () => PluginWrapper.animate.modelIndex.onceBackward());
|
|
155
|
-
addControl('Play Palindrome', () => PluginWrapper.animate.modelIndex.palindrome());
|
|
156
|
-
addControl('Play Loop', () => PluginWrapper.animate.modelIndex.loop());
|
|
157
|
-
addControl('Stop', () => PluginWrapper.animate.modelIndex.stop());
|
|
158
|
-
|
|
159
|
-
addSeparator();
|
|
160
|
-
addHeader('Misc');
|
|
161
|
-
|
|
162
|
-
addControl('Apply Evo Cons Style', () => PluginWrapper.coloring.evolutionaryConservation());
|
|
163
|
-
addControl('Apply Evo Cons Colors', () => PluginWrapper.coloring.evolutionaryConservation({ sequence: true, het: false, keepStyle: true }));
|
|
164
|
-
addControl('Default Visuals', () => PluginWrapper.updateStyle());
|
|
165
|
-
|
|
166
|
-
addSeparator();
|
|
167
|
-
addHeader('HET Groups');
|
|
168
|
-
|
|
169
|
-
addControl('Reset', () => PluginWrapper.hetGroups.reset());
|
|
170
|
-
addHetGroupsContainer();
|
|
171
|
-
|
|
172
|
-
addSeparator();
|
|
173
|
-
addHeader('Exp. Data');
|
|
174
|
-
addControl('Init', () => PluginWrapper.experimentalData.init($('volume-streaming-wrapper')));
|
|
175
|
-
addControl('Remove', () => PluginWrapper.experimentalData.remove());
|
|
176
|
-
|
|
177
|
-
addSeparator();
|
|
178
|
-
addHeader('State');
|
|
179
|
-
|
|
180
|
-
var snapshot;
|
|
181
|
-
addControl('Set Snapshot', () => {
|
|
182
|
-
// const options = { data: true, behavior: false, animation: false, interactivity: false, canvas3d: false, camera: false, cameraTransition: false };
|
|
183
|
-
snapshot = PluginWrapper.plugin.state.getSnapshot(/** options */);
|
|
184
|
-
// console.log(JSON.stringify(snapshot, null, 2));
|
|
185
|
-
});
|
|
186
|
-
addControl('Restore Snapshot', () => {
|
|
187
|
-
if (!snapshot) return;
|
|
188
|
-
PluginWrapper.snapshot.set(snapshot);
|
|
189
|
-
});
|
|
190
|
-
addControl('Download State', () => {
|
|
191
|
-
PluginWrapper.snapshot.download('molj');
|
|
192
|
-
});
|
|
193
|
-
addControl('Download Session', () => {
|
|
194
|
-
PluginWrapper.snapshot.download('molx');
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
////////////////////////////////////////////////////////
|
|
198
|
-
|
|
199
|
-
function addHetGroupsContainer() {
|
|
200
|
-
var div = document.createElement('div');
|
|
201
|
-
div.id = 'het-groups';
|
|
202
|
-
$('controls').appendChild(div);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
function addControl(label, action) {
|
|
206
|
-
var btn = document.createElement('button');
|
|
207
|
-
btn.onclick = action;
|
|
208
|
-
btn.innerText = label;
|
|
209
|
-
$('controls').appendChild(btn);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
function addSeparator() {
|
|
213
|
-
var hr = document.createElement('hr');
|
|
214
|
-
$('controls').appendChild(hr);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
function addHeader(header) {
|
|
218
|
-
var h = document.createElement('h3');
|
|
219
|
-
h.innerText = header;
|
|
220
|
-
$('controls').appendChild(h);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
function listHetGroups(info) {
|
|
224
|
-
var div = $('het-groups');
|
|
225
|
-
div.innerHTML = '';
|
|
226
|
-
info.hetResidues.forEach(function (r) {
|
|
227
|
-
var l = document.createElement('button');
|
|
228
|
-
l.innerText = r.name;
|
|
229
|
-
l.onclick = function () {
|
|
230
|
-
PluginWrapper.hetGroups.focusFirst(r.name, { doNotLabelWaters: true });
|
|
231
|
-
};
|
|
232
|
-
div.appendChild(l);
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
</script>
|
|
236
|
-
</body>
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
|
|
6
|
+
<title>Mol* Proteopedia Wrapper</title>
|
|
7
|
+
<style>
|
|
8
|
+
* {
|
|
9
|
+
margin: 0;
|
|
10
|
+
padding: 0;
|
|
11
|
+
box-sizing: border-box;
|
|
12
|
+
}
|
|
13
|
+
#app {
|
|
14
|
+
position: absolute;
|
|
15
|
+
left: 160px;
|
|
16
|
+
top: 100px;
|
|
17
|
+
width: 600px;
|
|
18
|
+
height: 600px;
|
|
19
|
+
border: 1px solid #ccc;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
#controls {
|
|
23
|
+
position: absolute;
|
|
24
|
+
width: 130px;
|
|
25
|
+
top: 10px;
|
|
26
|
+
left: 10px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
#controls > button {
|
|
30
|
+
display: block;
|
|
31
|
+
width: 100%;
|
|
32
|
+
text-align: left;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
#controls > hr {
|
|
36
|
+
margin: 5px 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
#controls > input, #controls > select {
|
|
40
|
+
width: 100%;
|
|
41
|
+
display: block;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
#volume-streaming-wrapper {
|
|
45
|
+
position: absolute;
|
|
46
|
+
top: 100px;
|
|
47
|
+
left: 780px;
|
|
48
|
+
width: 300px;
|
|
49
|
+
}
|
|
50
|
+
</style>
|
|
51
|
+
<link rel="stylesheet" type="text/css" href="molstar.css" />
|
|
52
|
+
<script type="text/javascript" src="./index.js"></script>
|
|
53
|
+
</head>
|
|
54
|
+
<body>
|
|
55
|
+
<div id='controls'>
|
|
56
|
+
<h3>Source</h3>
|
|
57
|
+
<input type='text' id='url' placeholder='url' style='width: 400px' />
|
|
58
|
+
<input type='text' id='assemblyId' placeholder='assembly id' />
|
|
59
|
+
<select id='format'>
|
|
60
|
+
<option value='cif' selected>CIF</option>
|
|
61
|
+
<option value='pdb'>PDB</option>
|
|
62
|
+
</select>
|
|
63
|
+
<input type='checkbox' id='isBinary' style="display: inline-block; width: auto" /> <label for="isBinary"> Binary</label><br />
|
|
64
|
+
</div>
|
|
65
|
+
<div id="app"></div>
|
|
66
|
+
<div id="volume-streaming-wrapper"></div>
|
|
67
|
+
<script>
|
|
68
|
+
// it might be a good idea to define these colors in a separate script file
|
|
69
|
+
var CustomColors = [0x00ff00, 0x0000ff];
|
|
70
|
+
|
|
71
|
+
// create an instance of the plugin
|
|
72
|
+
var PluginWrapper = new MolStarProteopediaWrapper();
|
|
73
|
+
|
|
74
|
+
console.log('Wrapper version', MolStarProteopediaWrapper.VERSION_MAJOR, MolStarProteopediaWrapper.VERSION_MINOR);
|
|
75
|
+
|
|
76
|
+
function $(id) { return document.getElementById(id); }
|
|
77
|
+
|
|
78
|
+
var pdbId = '1cbs', assemblyId= 'preferred', isBinary = true;
|
|
79
|
+
var url = 'https://www.ebi.ac.uk/pdbe/entry-files/download/' + pdbId + '.bcif'
|
|
80
|
+
var format = 'cif';
|
|
81
|
+
|
|
82
|
+
$('url').value = url;
|
|
83
|
+
$('url').onchange = function (e) { url = e.target.value; }
|
|
84
|
+
$('assemblyId').value = assemblyId;
|
|
85
|
+
$('assemblyId').onchange = function (e) { assemblyId = e.target.value; }
|
|
86
|
+
$('format').value = format;
|
|
87
|
+
$('format').onchange = function (e) { format = e.target.value; }
|
|
88
|
+
$('isBinary').checked = isBinary;
|
|
89
|
+
$('isBinary').onchange = function (e) { isBinary = !!e.target.checked; };
|
|
90
|
+
|
|
91
|
+
function loadAndSnapshot(params) {
|
|
92
|
+
PluginWrapper.load(params).then(() => {
|
|
93
|
+
setTimeout(() => snapshot = PluginWrapper.plugin.state.getSnapshot({ canvas3d: false /* do not save spinning state */ }), 500);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
var representationStyle = {
|
|
98
|
+
// sequence: { coloring: 'proteopedia-custom' }, // or just { }
|
|
99
|
+
hetGroups: { kind: 'ball-and-stick' }, // or 'spacefill
|
|
100
|
+
water: { hide: true },
|
|
101
|
+
snfg3d: { hide: false }
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
PluginWrapper.init('app' /** or document.getElementById('app') */, {
|
|
105
|
+
customColorList: CustomColors
|
|
106
|
+
}).then(() => {
|
|
107
|
+
PluginWrapper.setBackground(0xffffff);
|
|
108
|
+
loadAndSnapshot({ url: url, format: format, isBinary: isBinary, assemblyId: assemblyId, representationStyle: representationStyle });
|
|
109
|
+
PluginWrapper.toggleSpin();
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
PluginWrapper.events.modelInfo.subscribe(function (info) {
|
|
113
|
+
console.log('Model Info', info);
|
|
114
|
+
listHetGroups(info);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
addControl('Load Asym Unit', () => loadAndSnapshot({ url: url, format: format, isBinary }));
|
|
118
|
+
addControl('Load Assembly', () => loadAndSnapshot({ url: url, format: format, isBinary, assemblyId: assemblyId }));
|
|
119
|
+
|
|
120
|
+
addSeparator();
|
|
121
|
+
|
|
122
|
+
addHeader('Representation');
|
|
123
|
+
|
|
124
|
+
addControl('Custom Chain Colors', () => PluginWrapper.updateStyle({ sequence: { coloring: 'proteopedia-custom' } }, true));
|
|
125
|
+
addControl('Default Chain Colors', () => PluginWrapper.updateStyle({ sequence: { } }, true));
|
|
126
|
+
|
|
127
|
+
addControl('HET Spacefill', () => PluginWrapper.updateStyle({ hetGroups: { kind: 'spacefill' } }, true));
|
|
128
|
+
addControl('HET Ball-and-stick', () => PluginWrapper.updateStyle({ hetGroups: { kind: 'ball-and-stick' } }, true));
|
|
129
|
+
|
|
130
|
+
addControl('Hide 3DSNFG', () => PluginWrapper.updateStyle({ snfg3d: { hide: true } }, true));
|
|
131
|
+
addControl('Show 3DSNFG', () => PluginWrapper.updateStyle({ snfg3d: { hide: false } }, true));
|
|
132
|
+
|
|
133
|
+
addControl('Hide Water', () => PluginWrapper.updateStyle({ water: { hide: true } }, true));
|
|
134
|
+
addControl('Show Water', () => PluginWrapper.updateStyle({ water: { hide: false } }, true));
|
|
135
|
+
|
|
136
|
+
addSeparator();
|
|
137
|
+
|
|
138
|
+
addHeader('Camera');
|
|
139
|
+
addControl('Reset Position', () => PluginWrapper.camera.resetPosition());
|
|
140
|
+
addControl('Toggle Spin', () => PluginWrapper.camera.toggleSpin());
|
|
141
|
+
// Same as "wheel icon" and Viewport options
|
|
142
|
+
// addControl('Clip', () => PluginWrapper.viewport.setSettings({ clip: [33, 66] }));
|
|
143
|
+
// addControl('Reset Clip', () => PluginWrapper.viewport.setSettings({ clip: [1, 100] }));
|
|
144
|
+
|
|
145
|
+
addSeparator();
|
|
146
|
+
|
|
147
|
+
addHeader('Animation');
|
|
148
|
+
|
|
149
|
+
// adjust this number to make the animation faster or slower
|
|
150
|
+
// requires to "restart" the animation if changed
|
|
151
|
+
PluginWrapper.animate.modelIndex.targetFps = 30;
|
|
152
|
+
|
|
153
|
+
addControl('Play To End', () => PluginWrapper.animate.modelIndex.onceForward());
|
|
154
|
+
addControl('Play To Start', () => PluginWrapper.animate.modelIndex.onceBackward());
|
|
155
|
+
addControl('Play Palindrome', () => PluginWrapper.animate.modelIndex.palindrome());
|
|
156
|
+
addControl('Play Loop', () => PluginWrapper.animate.modelIndex.loop());
|
|
157
|
+
addControl('Stop', () => PluginWrapper.animate.modelIndex.stop());
|
|
158
|
+
|
|
159
|
+
addSeparator();
|
|
160
|
+
addHeader('Misc');
|
|
161
|
+
|
|
162
|
+
addControl('Apply Evo Cons Style', () => PluginWrapper.coloring.evolutionaryConservation());
|
|
163
|
+
addControl('Apply Evo Cons Colors', () => PluginWrapper.coloring.evolutionaryConservation({ sequence: true, het: false, keepStyle: true }));
|
|
164
|
+
addControl('Default Visuals', () => PluginWrapper.updateStyle());
|
|
165
|
+
|
|
166
|
+
addSeparator();
|
|
167
|
+
addHeader('HET Groups');
|
|
168
|
+
|
|
169
|
+
addControl('Reset', () => PluginWrapper.hetGroups.reset());
|
|
170
|
+
addHetGroupsContainer();
|
|
171
|
+
|
|
172
|
+
addSeparator();
|
|
173
|
+
addHeader('Exp. Data');
|
|
174
|
+
addControl('Init', () => PluginWrapper.experimentalData.init($('volume-streaming-wrapper')));
|
|
175
|
+
addControl('Remove', () => PluginWrapper.experimentalData.remove());
|
|
176
|
+
|
|
177
|
+
addSeparator();
|
|
178
|
+
addHeader('State');
|
|
179
|
+
|
|
180
|
+
var snapshot;
|
|
181
|
+
addControl('Set Snapshot', () => {
|
|
182
|
+
// const options = { data: true, behavior: false, animation: false, interactivity: false, canvas3d: false, camera: false, cameraTransition: false };
|
|
183
|
+
snapshot = PluginWrapper.plugin.state.getSnapshot(/** options */);
|
|
184
|
+
// console.log(JSON.stringify(snapshot, null, 2));
|
|
185
|
+
});
|
|
186
|
+
addControl('Restore Snapshot', () => {
|
|
187
|
+
if (!snapshot) return;
|
|
188
|
+
PluginWrapper.snapshot.set(snapshot);
|
|
189
|
+
});
|
|
190
|
+
addControl('Download State', () => {
|
|
191
|
+
PluginWrapper.snapshot.download('molj');
|
|
192
|
+
});
|
|
193
|
+
addControl('Download Session', () => {
|
|
194
|
+
PluginWrapper.snapshot.download('molx');
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
////////////////////////////////////////////////////////
|
|
198
|
+
|
|
199
|
+
function addHetGroupsContainer() {
|
|
200
|
+
var div = document.createElement('div');
|
|
201
|
+
div.id = 'het-groups';
|
|
202
|
+
$('controls').appendChild(div);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function addControl(label, action) {
|
|
206
|
+
var btn = document.createElement('button');
|
|
207
|
+
btn.onclick = action;
|
|
208
|
+
btn.innerText = label;
|
|
209
|
+
$('controls').appendChild(btn);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
function addSeparator() {
|
|
213
|
+
var hr = document.createElement('hr');
|
|
214
|
+
$('controls').appendChild(hr);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function addHeader(header) {
|
|
218
|
+
var h = document.createElement('h3');
|
|
219
|
+
h.innerText = header;
|
|
220
|
+
$('controls').appendChild(h);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function listHetGroups(info) {
|
|
224
|
+
var div = $('het-groups');
|
|
225
|
+
div.innerHTML = '';
|
|
226
|
+
info.hetResidues.forEach(function (r) {
|
|
227
|
+
var l = document.createElement('button');
|
|
228
|
+
l.innerText = r.name;
|
|
229
|
+
l.onclick = function () {
|
|
230
|
+
PluginWrapper.hetGroups.focusFirst(r.name, { doNotLabelWaters: true });
|
|
231
|
+
};
|
|
232
|
+
div.appendChild(l);
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
</script>
|
|
236
|
+
</body>
|
|
237
237
|
</html>
|
|
@@ -48,8 +48,8 @@ export declare namespace Cylinders {
|
|
|
48
48
|
alpha: PD.Numeric;
|
|
49
49
|
quality: PD.Select<"auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest">;
|
|
50
50
|
material: PD.Group<PD.Normalize<{
|
|
51
|
-
metalness: number;
|
|
52
|
-
roughness: number;
|
|
51
|
+
metalness: number;
|
|
52
|
+
roughness: number; /** Number of cylinders */
|
|
53
53
|
bumpiness: number;
|
|
54
54
|
}>>;
|
|
55
55
|
clip: PD.Group<PD.Normalize<{
|
|
@@ -43,7 +43,7 @@ export declare namespace Points {
|
|
|
43
43
|
quality: PD.Select<"auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest">;
|
|
44
44
|
material: PD.Group<PD.Normalize<{
|
|
45
45
|
metalness: number;
|
|
46
|
-
roughness: number;
|
|
46
|
+
roughness: number; /** Number of vertices in the point cloud */
|
|
47
47
|
bumpiness: number;
|
|
48
48
|
}>>;
|
|
49
49
|
clip: PD.Group<PD.Normalize<{
|
|
@@ -203,6 +203,28 @@ export declare const mmCIF_Schema: {
|
|
|
203
203
|
* formal charge assignment normally found in chemical diagrams.
|
|
204
204
|
*/
|
|
205
205
|
pdbx_formal_charge: Schema.Int;
|
|
206
|
+
/**
|
|
207
|
+
* This data item is an ordinal which identifies distinct chemical components in the atom_site category, both
|
|
208
|
+
* polymeric and non-polymeric.
|
|
209
|
+
*/
|
|
210
|
+
pdbx_label_index: Schema.Int;
|
|
211
|
+
/**
|
|
212
|
+
* The name of additional external databases with residue level mapping.
|
|
213
|
+
*/
|
|
214
|
+
pdbx_sifts_xref_db_name: Schema.Str;
|
|
215
|
+
/**
|
|
216
|
+
* The accession code related to the additional external database entry.
|
|
217
|
+
*/
|
|
218
|
+
pdbx_sifts_xref_db_acc: Schema.Str;
|
|
219
|
+
/**
|
|
220
|
+
* The sequence position of the external database entry that corresponds
|
|
221
|
+
* to the residue mapping defined by the SIFTS process.
|
|
222
|
+
*/
|
|
223
|
+
pdbx_sifts_xref_db_num: Schema.Str;
|
|
224
|
+
/**
|
|
225
|
+
* Describes the residue type of the given UniProt match
|
|
226
|
+
*/
|
|
227
|
+
pdbx_sifts_xref_db_res: Schema.Str;
|
|
206
228
|
/**
|
|
207
229
|
* The model id corresponding to the atom site.
|
|
208
230
|
* This data item is a pointer to _ihm_model_list.model_id
|
|
@@ -211,6 +211,28 @@ export var mmCIF_Schema = {
|
|
|
211
211
|
* formal charge assignment normally found in chemical diagrams.
|
|
212
212
|
*/
|
|
213
213
|
pdbx_formal_charge: int,
|
|
214
|
+
/**
|
|
215
|
+
* This data item is an ordinal which identifies distinct chemical components in the atom_site category, both
|
|
216
|
+
* polymeric and non-polymeric.
|
|
217
|
+
*/
|
|
218
|
+
pdbx_label_index: int,
|
|
219
|
+
/**
|
|
220
|
+
* The name of additional external databases with residue level mapping.
|
|
221
|
+
*/
|
|
222
|
+
pdbx_sifts_xref_db_name: str,
|
|
223
|
+
/**
|
|
224
|
+
* The accession code related to the additional external database entry.
|
|
225
|
+
*/
|
|
226
|
+
pdbx_sifts_xref_db_acc: str,
|
|
227
|
+
/**
|
|
228
|
+
* The sequence position of the external database entry that corresponds
|
|
229
|
+
* to the residue mapping defined by the SIFTS process.
|
|
230
|
+
*/
|
|
231
|
+
pdbx_sifts_xref_db_num: str,
|
|
232
|
+
/**
|
|
233
|
+
* Describes the residue type of the given UniProt match
|
|
234
|
+
*/
|
|
235
|
+
pdbx_sifts_xref_db_res: str,
|
|
214
236
|
/**
|
|
215
237
|
* The model id corresponding to the atom site.
|
|
216
238
|
* This data item is a pointer to _ihm_model_list.model_id
|