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.
Files changed (94) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +194 -194
  3. package/build/viewer/embedded.html +43 -43
  4. package/build/viewer/index.html +106 -106
  5. package/build/viewer/molstar.js +1 -1
  6. package/lib/apps/docking-viewer/index.html +36 -36
  7. package/lib/apps/viewer/embedded.html +43 -43
  8. package/lib/apps/viewer/index.html +106 -106
  9. package/lib/commonjs/mol-geo/geometry/cylinders/cylinders.d.ts +2 -2
  10. package/lib/commonjs/mol-geo/geometry/lines/lines.d.ts +0 -1
  11. package/lib/commonjs/mol-geo/geometry/points/points.d.ts +1 -1
  12. package/lib/commonjs/mol-io/reader/cif/schema/mmcif.d.ts +22 -0
  13. package/lib/commonjs/mol-io/reader/cif/schema/mmcif.js +22 -0
  14. package/lib/commonjs/mol-model/structure/export/categories/atom_site.js +68 -1
  15. package/lib/commonjs/mol-model/structure/structure/util/superposition-sifts-mapping.d.ts +21 -0
  16. package/lib/commonjs/mol-model/structure/structure/util/{superposition-db-mapping.js → superposition-sifts-mapping.js} +40 -20
  17. package/lib/commonjs/mol-model-formats/structure/basic/schema.d.ts +5 -0
  18. package/lib/commonjs/mol-model-formats/structure/common/property.d.ts +5 -2
  19. package/lib/commonjs/mol-model-formats/structure/common/property.js +20 -8
  20. package/lib/commonjs/mol-model-formats/structure/property/bonds/index-pair.d.ts +1 -0
  21. package/lib/commonjs/mol-model-formats/structure/property/bonds/index-pair.js +2 -1
  22. package/lib/commonjs/mol-model-props/sequence/{best-database-mapping.d.ts → sifts-mapping.d.ts} +7 -5
  23. package/lib/commonjs/mol-model-props/sequence/{best-database-mapping.js → sifts-mapping.js} +29 -26
  24. package/lib/{mol-model-props/sequence/themes/best-database-mapping.d.ts → commonjs/mol-model-props/sequence/themes/sifts-mapping.d.ts} +5 -5
  25. package/lib/commonjs/mol-model-props/sequence/themes/{best-database-mapping.js → sifts-mapping.js} +22 -22
  26. package/lib/commonjs/mol-plugin/behavior/dynamic/custom-props/sequence/{best-database-mapping.d.ts → sifts-mapping.d.ts} +1 -1
  27. package/lib/commonjs/mol-plugin/behavior/dynamic/custom-props/sequence/{best-database-mapping.js → sifts-mapping.js} +11 -11
  28. package/lib/commonjs/mol-plugin/behavior/dynamic/custom-props.d.ts +1 -1
  29. package/lib/commonjs/mol-plugin/behavior/dynamic/custom-props.js +2 -2
  30. package/lib/commonjs/mol-plugin/behavior/dynamic/volume-streaming/model.d.ts +2 -3
  31. package/lib/commonjs/mol-plugin-ui/structure/superposition.d.ts +4 -1
  32. package/lib/commonjs/mol-plugin-ui/structure/superposition.js +66 -30
  33. package/lib/commonjs/mol-script/language/builder.d.ts +1 -0
  34. package/lib/examples/alpha-orbitals/index.html +61 -61
  35. package/lib/examples/basic-wrapper/index.html +137 -137
  36. package/lib/examples/lighting/index.html +88 -88
  37. package/lib/examples/proteopedia-wrapper/index.html +236 -236
  38. package/lib/mol-geo/geometry/cylinders/cylinders.d.ts +2 -2
  39. package/lib/mol-geo/geometry/lines/lines.d.ts +0 -1
  40. package/lib/mol-geo/geometry/points/points.d.ts +1 -1
  41. package/lib/mol-io/reader/cif/schema/mmcif.d.ts +22 -0
  42. package/lib/mol-io/reader/cif/schema/mmcif.js +22 -0
  43. package/lib/mol-model/structure/export/categories/atom_site.js +68 -1
  44. package/lib/mol-model/structure/structure/util/superposition-sifts-mapping.d.ts +21 -0
  45. package/lib/mol-model/structure/structure/util/{superposition-db-mapping.js → superposition-sifts-mapping.js} +38 -18
  46. package/lib/mol-model-formats/structure/basic/schema.d.ts +5 -0
  47. package/lib/mol-model-formats/structure/common/property.d.ts +5 -2
  48. package/lib/mol-model-formats/structure/common/property.js +20 -8
  49. package/lib/mol-model-formats/structure/property/bonds/index-pair.d.ts +1 -0
  50. package/lib/mol-model-formats/structure/property/bonds/index-pair.js +2 -1
  51. package/lib/mol-model-props/sequence/{best-database-mapping.d.ts → sifts-mapping.d.ts} +7 -5
  52. package/lib/mol-model-props/sequence/{best-database-mapping.js → sifts-mapping.js} +28 -25
  53. package/lib/{commonjs/mol-model-props/sequence/themes/best-database-mapping.d.ts → mol-model-props/sequence/themes/sifts-mapping.d.ts} +5 -5
  54. package/lib/mol-model-props/sequence/themes/{best-database-mapping.js → sifts-mapping.js} +19 -19
  55. package/lib/mol-plugin/behavior/dynamic/custom-props/sequence/{best-database-mapping.d.ts → sifts-mapping.d.ts} +1 -1
  56. package/lib/mol-plugin/behavior/dynamic/custom-props/sequence/{best-database-mapping.js → sifts-mapping.js} +8 -8
  57. package/lib/mol-plugin/behavior/dynamic/custom-props.d.ts +1 -1
  58. package/lib/mol-plugin/behavior/dynamic/custom-props.js +1 -1
  59. package/lib/mol-plugin/behavior/dynamic/volume-streaming/model.d.ts +2 -3
  60. package/lib/mol-plugin/version.js +2 -2
  61. package/lib/mol-plugin-ui/skin/base/base.scss +32 -32
  62. package/lib/mol-plugin-ui/skin/base/components/controls-base.scss +333 -333
  63. package/lib/mol-plugin-ui/skin/base/components/controls.scss +418 -418
  64. package/lib/mol-plugin-ui/skin/base/components/help.scss +27 -27
  65. package/lib/mol-plugin-ui/skin/base/components/line-graph.scss +67 -67
  66. package/lib/mol-plugin-ui/skin/base/components/log.scss +100 -100
  67. package/lib/mol-plugin-ui/skin/base/components/misc.scss +643 -643
  68. package/lib/mol-plugin-ui/skin/base/components/sequence.scss +125 -125
  69. package/lib/mol-plugin-ui/skin/base/components/slider.scss +165 -165
  70. package/lib/mol-plugin-ui/skin/base/components/tasks.scss +99 -99
  71. package/lib/mol-plugin-ui/skin/base/components/toast.scss +83 -83
  72. package/lib/mol-plugin-ui/skin/base/components/transformer.scss +163 -163
  73. package/lib/mol-plugin-ui/skin/base/components/viewport.scss +127 -127
  74. package/lib/mol-plugin-ui/skin/base/layout/common.scss +71 -71
  75. package/lib/mol-plugin-ui/skin/base/layout/controls-landscape.scss +89 -89
  76. package/lib/mol-plugin-ui/skin/base/layout/controls-outside.scss +98 -98
  77. package/lib/mol-plugin-ui/skin/base/layout/controls-portrait.scss +108 -108
  78. package/lib/mol-plugin-ui/skin/base/layout.scss +40 -40
  79. package/lib/mol-plugin-ui/skin/base/logo.scss +12 -12
  80. package/lib/mol-plugin-ui/skin/base/normalize.scss +209 -209
  81. package/lib/mol-plugin-ui/skin/base/ui.scss +40 -40
  82. package/lib/mol-plugin-ui/skin/base/variables.scss +85 -85
  83. package/lib/mol-plugin-ui/skin/blue.scss +1 -1
  84. package/lib/mol-plugin-ui/skin/colors/blue.scss +23 -23
  85. package/lib/mol-plugin-ui/skin/colors/dark.scss +23 -23
  86. package/lib/mol-plugin-ui/skin/colors/light.scss +29 -29
  87. package/lib/mol-plugin-ui/skin/dark.scss +1 -1
  88. package/lib/mol-plugin-ui/skin/light.scss +1 -1
  89. package/lib/mol-plugin-ui/structure/superposition.d.ts +4 -1
  90. package/lib/mol-plugin-ui/structure/superposition.js +66 -30
  91. package/lib/mol-script/language/builder.d.ts +1 -0
  92. package/package.json +160 -160
  93. package/lib/commonjs/mol-model/structure/structure/util/superposition-db-mapping.d.ts +0 -13
  94. package/lib/mol-model/structure/structure/util/superposition-db-mapping.d.ts +0 -13
@@ -1,24 +1,24 @@
1
- $default-background: #2D3E50;
2
- $font-color: #EDF1F2;
3
- $hover-font-color: #3B9AD9;
4
- $entity-current-font-color: #FFFFFF;
5
- $msp-btn-remove-background: #BF3A31;
6
- $msp-btn-remove-hover-font-color:#ffffff;
7
- $msp-btn-commit-on-font-color: #ffffff;
8
- $entity-badge-font-color: #ccd4e0;
9
-
10
- // used in LOG
11
- $log-message: #0CCA5D;
12
- $log-info: #5E3673;
13
- $log-warning: #FCC937;
14
- $log-error: #FD354B;
15
-
16
- $logo-background: rgba(0,0,0,0.75);
17
-
18
- @function color-lower-contrast($color, $amount) {
19
- @return darken($color, $amount);
20
- }
21
-
22
- @function color-increase-contrast($color, $amount) {
23
- @return lighten($color, $amount);
1
+ $default-background: #2D3E50;
2
+ $font-color: #EDF1F2;
3
+ $hover-font-color: #3B9AD9;
4
+ $entity-current-font-color: #FFFFFF;
5
+ $msp-btn-remove-background: #BF3A31;
6
+ $msp-btn-remove-hover-font-color:#ffffff;
7
+ $msp-btn-commit-on-font-color: #ffffff;
8
+ $entity-badge-font-color: #ccd4e0;
9
+
10
+ // used in LOG
11
+ $log-message: #0CCA5D;
12
+ $log-info: #5E3673;
13
+ $log-warning: #FCC937;
14
+ $log-error: #FD354B;
15
+
16
+ $logo-background: rgba(0,0,0,0.75);
17
+
18
+ @function color-lower-contrast($color, $amount) {
19
+ @return darken($color, $amount);
20
+ }
21
+
22
+ @function color-increase-contrast($color, $amount) {
23
+ @return lighten($color, $amount);
24
24
  }
@@ -1,24 +1,24 @@
1
- $default-background: #111318;
2
- $font-color: #ccd4e0;
3
- $hover-font-color: #51A2FB;
4
- $entity-current-font-color: #68BEFD;
5
- $msp-btn-remove-background: #DE0A28;
6
- $msp-btn-remove-hover-font-color:#F2F4F7;
7
- $msp-btn-commit-on-font-color: #68BEFD;
8
- $entity-badge-font-color: #ccd4e0;
9
-
10
- // used in LOG
11
- $log-message: #0CCA5D;
12
- $log-info: #5E3673;
13
- $log-warning: #FCC937;
14
- $log-error: #FD354B;
15
-
16
- $logo-background: rgba(0,0,0,0.75);
17
-
18
- @function color-lower-contrast($color, $amount) {
19
- @return darken($color, $amount);
20
- }
21
-
22
- @function color-increase-contrast($color, $amount) {
23
- @return lighten($color, $amount);
1
+ $default-background: #111318;
2
+ $font-color: #ccd4e0;
3
+ $hover-font-color: #51A2FB;
4
+ $entity-current-font-color: #68BEFD;
5
+ $msp-btn-remove-background: #DE0A28;
6
+ $msp-btn-remove-hover-font-color:#F2F4F7;
7
+ $msp-btn-commit-on-font-color: #68BEFD;
8
+ $entity-badge-font-color: #ccd4e0;
9
+
10
+ // used in LOG
11
+ $log-message: #0CCA5D;
12
+ $log-info: #5E3673;
13
+ $log-warning: #FCC937;
14
+ $log-error: #FD354B;
15
+
16
+ $logo-background: rgba(0,0,0,0.75);
17
+
18
+ @function color-lower-contrast($color, $amount) {
19
+ @return darken($color, $amount);
20
+ }
21
+
22
+ @function color-increase-contrast($color, $amount) {
23
+ @return lighten($color, $amount);
24
24
  }
@@ -1,30 +1,30 @@
1
- // this is complement of the dark theme
2
-
3
- @function compl($color) {
4
- @return rgb(255 - red($color), 255 - green($color), 255 - blue($color));
5
- }
6
-
7
- $default-background: compl(#111318);
8
- $font-color: compl(#ccd4e0);
9
- $hover-font-color: compl(#51A2FB);
10
- $entity-current-font-color: compl(#68BEFD);
11
- $msp-btn-commit-on-font-color: compl(#68BEFD);
12
- $entity-badge-font-color: lighten(#ccd4e0,10%);
13
- $msp-btn-remove-background: #DE0A28;
14
- $msp-btn-remove-hover-font-color:#F2F4F7;
15
-
16
- // used in LOG
17
- $log-message: #0CCA5D;
18
- $log-info: #5E3673;
19
- $log-warning: #FCC937;
20
- $log-error: #FD354B;
21
-
22
- $logo-background: compl(#111318);
23
-
24
- @function color-lower-contrast($color, $amount) {
25
- @return lighten($color, $amount);
26
- }
27
-
28
- @function color-increase-contrast($color, $amount) {
29
- @return darken($color, $amount);
1
+ // this is complement of the dark theme
2
+
3
+ @function compl($color) {
4
+ @return rgb(255 - red($color), 255 - green($color), 255 - blue($color));
5
+ }
6
+
7
+ $default-background: compl(#111318);
8
+ $font-color: compl(#ccd4e0);
9
+ $hover-font-color: compl(#51A2FB);
10
+ $entity-current-font-color: compl(#68BEFD);
11
+ $msp-btn-commit-on-font-color: compl(#68BEFD);
12
+ $entity-badge-font-color: lighten(#ccd4e0,10%);
13
+ $msp-btn-remove-background: #DE0A28;
14
+ $msp-btn-remove-hover-font-color:#F2F4F7;
15
+
16
+ // used in LOG
17
+ $log-message: #0CCA5D;
18
+ $log-info: #5E3673;
19
+ $log-warning: #FCC937;
20
+ $log-error: #FD354B;
21
+
22
+ $logo-background: compl(#111318);
23
+
24
+ @function color-lower-contrast($color, $amount) {
25
+ @return lighten($color, $amount);
26
+ }
27
+
28
+ @function color-increase-contrast($color, $amount) {
29
+ @return darken($color, $amount);
30
30
  }
@@ -1,2 +1,2 @@
1
- @import 'colors/dark';
1
+ @import 'colors/dark';
2
2
  @import 'base/base';
@@ -1,2 +1,2 @@
1
- @import 'colors/light';
1
+ @import 'colors/light';
2
2
  @import 'base/base';
@@ -1,7 +1,8 @@
1
1
  /**
2
- * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
2
+ * Copyright (c) 2020-2022 mol* contributors, licensed under MIT, See LICENSE file for more info.
3
3
  *
4
4
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
5
+ * @author Sebastian Bittrich <sebastian.bittrich@rcsb.org>
5
6
  */
6
7
  /// <reference types="react" />
7
8
  import { CollapsableControls, PurePluginUIComponent } from '../base';
@@ -26,6 +27,7 @@ export declare class StructureSuperpositionControls extends CollapsableControls
26
27
  }
27
28
  export declare const StructureSuperpositionParams: {
28
29
  alignSequences: PD.BooleanParam;
30
+ traceOnly: PD.BooleanParam;
29
31
  };
30
32
  export declare type StructureSuperpositionOptions = PD.ValuesFor<typeof StructureSuperpositionParams>;
31
33
  declare type SuperpositionControlsState = {
@@ -50,6 +52,7 @@ export declare class SuperpositionControls extends PurePluginUIComponent<{}, Sup
50
52
  superposeChains: () => Promise<void>;
51
53
  superposeAtoms: () => Promise<void>;
52
54
  superposeDb: () => Promise<void>;
55
+ cameraReset(): Promise<void>;
53
56
  toggleByChains: () => void;
54
57
  toggleByAtoms: () => void;
55
58
  toggleOptions: () => void;
@@ -1,9 +1,10 @@
1
1
  import { __assign, __awaiter, __extends, __generator } from "tslib";
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  /**
4
- * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
4
+ * Copyright (c) 2020-2022 mol* contributors, licensed under MIT, See LICENSE file for more info.
5
5
  *
6
6
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
7
+ * @author Sebastian Bittrich <sebastian.bittrich@rcsb.org>
7
8
  */
8
9
  import { CollapsableControls, PurePluginUIComponent } from '../base';
9
10
  import { Icon, ArrowUpwardSvg, ArrowDownwardSvg, DeleteOutlinedSvg, HelpOutlineSvg, TuneSvg, SuperposeAtomsSvg, SuperposeChainsSvg, SuperpositionSvg } from '../controls/icons';
@@ -18,9 +19,9 @@ import { structureElementStatsLabel, elementLabel } from '../../mol-theme/label'
18
19
  import { ParameterControls } from '../controls/parameters';
19
20
  import { stripTags } from '../../mol-util/string';
20
21
  import { ToggleSelectionModeButton } from './selection';
21
- import { alignAndSuperposeWithBestDatabaseMapping } from '../../mol-model/structure/structure/util/superposition-db-mapping';
22
+ import { alignAndSuperposeWithSIFTSMapping } from '../../mol-model/structure/structure/util/superposition-sifts-mapping';
22
23
  import { PluginCommands } from '../../mol-plugin/commands';
23
- import { BestDatabaseSequenceMapping } from '../../mol-model-props/sequence/best-database-mapping';
24
+ import { SIFTSMapping } from '../../mol-model-props/sequence/sifts-mapping';
24
25
  var StructureSuperpositionControls = /** @class */ (function (_super) {
25
26
  __extends(StructureSuperpositionControls, _super);
26
27
  function StructureSuperpositionControls() {
@@ -47,7 +48,8 @@ var StructureSuperpositionControls = /** @class */ (function (_super) {
47
48
  }(CollapsableControls));
48
49
  export { StructureSuperpositionControls };
49
50
  export var StructureSuperpositionParams = {
50
- alignSequences: PD.Boolean(true, { isEssential: true, description: 'Perform a sequence alignment and use the aligned residue pairs to guide the 3D superposition.' }),
51
+ alignSequences: PD.Boolean(true, { isEssential: true, description: 'For Chain-based 3D superposition, perform a sequence alignment and use the aligned residue pairs to guide the 3D superposition.' }),
52
+ traceOnly: PD.Boolean(true, { description: 'For Chain- and Uniprot-based 3D superposition, base superposition only on CA (and equivalent) atoms.' })
51
53
  };
52
54
  var DefaultStructureSuperpositionOptions = PD.getDefaultValues(StructureSuperpositionParams);
53
55
  var SuperpositionTag = 'SuperpositionTransform';
@@ -64,14 +66,14 @@ var SuperpositionControls = /** @class */ (function (_super) {
64
66
  options: DefaultStructureSuperpositionOptions
65
67
  };
66
68
  _this.superposeChains = function () { return __awaiter(_this, void 0, void 0, function () {
67
- var query, entries, traceLocis, transforms, eA, i, il, eB, _a, bTransform, rmsd, labelA, labelB;
69
+ var query, entries, locis, transforms, eA, i, il, eB, _a, bTransform, rmsd, labelA, labelB;
68
70
  var _this = this;
69
71
  return __generator(this, function (_b) {
70
72
  switch (_b.label) {
71
73
  case 0:
72
- query = StructureSelectionQueries.trace.query;
74
+ query = (this.state.options.traceOnly ? StructureSelectionQueries.trace : StructureSelectionQueries.polymer).query;
73
75
  entries = this.chainEntries;
74
- traceLocis = entries.map(function (e, i) {
76
+ locis = entries.map(function (e, i) {
75
77
  var s = StructureElement.Loci.toStructure(e.loci);
76
78
  var loci = StructureSelection.toLociWithSourceUnits(query(new QueryContext(s)));
77
79
  return StructureElement.Loci.remap(loci, i === 0
@@ -79,10 +81,10 @@ var SuperpositionControls = /** @class */ (function (_super) {
79
81
  : loci.structure.root);
80
82
  });
81
83
  transforms = this.state.options.alignSequences
82
- ? alignAndSuperpose(traceLocis)
83
- : superpose(traceLocis);
84
+ ? alignAndSuperpose(locis)
85
+ : superpose(locis);
84
86
  eA = entries[0];
85
- i = 1, il = traceLocis.length;
87
+ i = 1, il = locis.length;
86
88
  _b.label = 1;
87
89
  case 1:
88
90
  if (!(i < il)) return [3 /*break*/, 4];
@@ -98,7 +100,10 @@ var SuperpositionControls = /** @class */ (function (_super) {
98
100
  case 3:
99
101
  ++i;
100
102
  return [3 /*break*/, 1];
101
- case 4: return [2 /*return*/];
103
+ case 4: return [4 /*yield*/, this.cameraReset()];
104
+ case 5:
105
+ _b.sent();
106
+ return [2 /*return*/];
102
107
  }
103
108
  });
104
109
  }); };
@@ -133,39 +138,57 @@ var SuperpositionControls = /** @class */ (function (_super) {
133
138
  case 3:
134
139
  ++i;
135
140
  return [3 /*break*/, 1];
136
- case 4: return [2 /*return*/];
141
+ case 4: return [4 /*yield*/, this.cameraReset()];
142
+ case 5:
143
+ _b.sent();
144
+ return [2 /*return*/];
137
145
  }
138
146
  });
139
147
  }); };
140
148
  _this.superposeDb = function () { return __awaiter(_this, void 0, void 0, function () {
141
- var input, transforms, rmsd, _i, transforms_1, xform;
142
- return __generator(this, function (_a) {
143
- switch (_a.label) {
149
+ var input, traceOnly, structures, _a, entries, failedPairs, zeroOverlapPairs, rmsd, _i, entries_1, xform, formatPairs;
150
+ return __generator(this, function (_b) {
151
+ switch (_b.label) {
144
152
  case 0:
145
153
  input = this.plugin.managers.structure.hierarchy.behaviors.selection.value.structures;
146
- transforms = alignAndSuperposeWithBestDatabaseMapping(input.map(function (s) { var _a; return (_a = s.cell.obj) === null || _a === void 0 ? void 0 : _a.data; }));
154
+ traceOnly = this.state.options.traceOnly;
155
+ structures = input.map(function (s) { var _a; return (_a = s.cell.obj) === null || _a === void 0 ? void 0 : _a.data; });
156
+ _a = alignAndSuperposeWithSIFTSMapping(structures, { traceOnly: traceOnly }), entries = _a.entries, failedPairs = _a.failedPairs, zeroOverlapPairs = _a.zeroOverlapPairs;
147
157
  rmsd = 0;
148
- _i = 0, transforms_1 = transforms;
149
- _a.label = 1;
158
+ _i = 0, entries_1 = entries;
159
+ _b.label = 1;
150
160
  case 1:
151
- if (!(_i < transforms_1.length)) return [3 /*break*/, 4];
152
- xform = transforms_1[_i];
161
+ if (!(_i < entries_1.length)) return [3 /*break*/, 4];
162
+ xform = entries_1[_i];
153
163
  return [4 /*yield*/, this.transform(input[xform.other].cell, xform.transform.bTransform)];
154
164
  case 2:
155
- _a.sent();
165
+ _b.sent();
156
166
  rmsd += xform.transform.rmsd;
157
- _a.label = 3;
167
+ _b.label = 3;
158
168
  case 3:
159
169
  _i++;
160
170
  return [3 /*break*/, 1];
161
171
  case 4:
162
- rmsd /= Math.max(transforms.length - 1, 1);
163
- this.plugin.log.info("Superposed ".concat(input.length, " structures with avg. RMSD ").concat(rmsd.toFixed(2), " \u00C5."));
164
- return [4 /*yield*/, new Promise(function (res) { return requestAnimationFrame(res); })];
172
+ rmsd /= Math.max(entries.length - 1, 1);
173
+ formatPairs = function (pairs) {
174
+ return "[".concat(pairs.map(function (_a) {
175
+ var i = _a[0], j = _a[1];
176
+ return "(".concat(structures[i].models[0].entryId, ", ").concat(structures[j].models[0].entryId, ")");
177
+ }).join(', '), "]");
178
+ };
179
+ if (zeroOverlapPairs.length) {
180
+ this.plugin.log.warn("Superposition: No UNIPROT mapping overlap between structures ".concat(formatPairs(zeroOverlapPairs), "."));
181
+ }
182
+ if (failedPairs.length) {
183
+ this.plugin.log.error("Superposition: Failed to superpose structures ".concat(formatPairs(failedPairs), "."));
184
+ }
185
+ if (!entries.length) return [3 /*break*/, 6];
186
+ this.plugin.log.info("Superposed ".concat(entries.length + 1, " structures with avg. RMSD ").concat(rmsd.toFixed(2), " \u00C5."));
187
+ return [4 /*yield*/, this.cameraReset()];
165
188
  case 5:
166
- _a.sent();
167
- PluginCommands.Camera.Reset(this.plugin);
168
- return [2 /*return*/];
189
+ _b.sent();
190
+ _b.label = 6;
191
+ case 6: return [2 /*return*/];
169
192
  }
170
193
  });
171
194
  }); };
@@ -189,7 +212,7 @@ var SuperpositionControls = /** @class */ (function (_super) {
189
212
  _this.setState({ isBusy: v });
190
213
  });
191
214
  this.subscribe(this.plugin.managers.structure.hierarchy.behaviors.selection, function (sel) {
192
- _this.setState({ canUseDb: sel.structures.every(function (s) { var _a; return !!((_a = s.cell.obj) === null || _a === void 0 ? void 0 : _a.data) && s.cell.obj.data.models.some(function (m) { return BestDatabaseSequenceMapping.Provider.isApplicable(m); }); }) });
215
+ _this.setState({ canUseDb: sel.structures.every(function (s) { var _a; return !!((_a = s.cell.obj) === null || _a === void 0 ? void 0 : _a.data) && s.cell.obj.data.models.some(function (m) { return SIFTSMapping.Provider.isApplicable(m); }); }) });
193
216
  });
194
217
  };
195
218
  Object.defineProperty(SuperpositionControls.prototype, "selection", {
@@ -227,6 +250,19 @@ var SuperpositionControls = /** @class */ (function (_super) {
227
250
  });
228
251
  });
229
252
  };
253
+ SuperpositionControls.prototype.cameraReset = function () {
254
+ return __awaiter(this, void 0, void 0, function () {
255
+ return __generator(this, function (_a) {
256
+ switch (_a.label) {
257
+ case 0: return [4 /*yield*/, new Promise(function (res) { return requestAnimationFrame(res); })];
258
+ case 1:
259
+ _a.sent();
260
+ PluginCommands.Camera.Reset(this.plugin);
261
+ return [2 /*return*/];
262
+ }
263
+ });
264
+ });
265
+ };
230
266
  SuperpositionControls.prototype.highlight = function (loci) {
231
267
  this.plugin.managers.interactivity.lociHighlights.highlightOnly({ loci: loci }, false);
232
268
  };
@@ -318,7 +354,7 @@ var SuperpositionControls = /** @class */ (function (_super) {
318
354
  return _jsxs(_Fragment, { children: [entries.length > 0 && _jsx("div", __assign({ className: 'msp-control-offset' }, { children: entries.map(function (e, i) { return _this.atomsLociEntry(e, i); }) }), void 0), entries.length < 2 && _jsx("div", __assign({ className: 'msp-control-offset msp-help-text' }, { children: _jsxs("div", __assign({ className: 'msp-help-description' }, { children: [_jsx(Icon, { svg: HelpOutlineSvg, inline: true }, void 0), "Add 1 or more selections (toggle ", _jsx(ToggleSelectionModeButton, { inline: true }, void 0), " mode) from separate structures. Selections must be limited to single atoms."] }), void 0) }), void 0), entries.length > 1 && _jsx(Button, __assign({ title: 'Superpose structures by selected atoms.', className: 'msp-btn-commit msp-btn-commit-on', onClick: this.superposeAtoms, style: { marginTop: '1px' } }, { children: "Superpose" }), void 0)] }, void 0);
319
355
  };
320
356
  SuperpositionControls.prototype.superposeByDbMapping = function () {
321
- return _jsx(_Fragment, { children: _jsx(Button, __assign({ icon: SuperposeChainsSvg, title: 'Superpose structures using database mapping.', className: 'msp-btn msp-btn-block', onClick: this.superposeDb, style: { marginTop: '1px' }, disabled: this.state.isBusy }, { children: "DB" }), void 0) }, void 0);
357
+ return _jsx(_Fragment, { children: _jsx(Button, __assign({ icon: SuperposeChainsSvg, title: 'Superpose structures using intersection of residues from SIFTS UNIPROT mapping.', className: 'msp-btn msp-btn-block', onClick: this.superposeDb, style: { marginTop: '1px' }, disabled: this.state.isBusy }, { children: "Uniprot" }), void 0) }, void 0);
322
358
  };
323
359
  SuperpositionControls.prototype.render = function () {
324
360
  return _jsxs(_Fragment, { children: [_jsxs("div", __assign({ className: 'msp-flex-row' }, { children: [_jsx(ToggleButton, { icon: SuperposeChainsSvg, label: 'Chains', toggle: this.toggleByChains, isSelected: this.state.action === 'byChains', disabled: this.state.isBusy }, void 0), _jsx(ToggleButton, { icon: SuperposeAtomsSvg, label: 'Atoms', toggle: this.toggleByAtoms, isSelected: this.state.action === 'byAtoms', disabled: this.state.isBusy }, void 0), this.state.canUseDb && this.superposeByDbMapping(), _jsx(ToggleButton, { icon: TuneSvg, label: '', title: 'Options', toggle: this.toggleOptions, isSelected: this.state.action === 'options', disabled: this.state.isBusy, style: { flex: '0 0 40px', padding: 0 } }, void 0)] }), void 0), this.state.action === 'byChains' && this.addByChains(), this.state.action === 'byAtoms' && this.addByAtoms(), this.state.action === 'options' && _jsx("div", __assign({ className: 'msp-control-offset' }, { children: _jsx(ParameterControls, { params: StructureSuperpositionParams, values: this.state.options, onChangeValues: this.setOptions, isDisabled: this.state.isBusy }, void 0) }), void 0)] }, void 0);
@@ -10,6 +10,7 @@ export declare namespace MolScriptBuilder {
10
10
  '@header': string;
11
11
  type: {
12
12
  '@header': string;
13
+ /** atom macromolecular property set */
13
14
  bool: MSymbol<import("./symbol").Arguments<import("./symbol").Arguments.PropTypes<{
14
15
  0: import("./symbol").Argument<import("./type").Type.AnyValue>;
15
16
  }>>, import("./type").Type.OneOf<boolean>>;