react-msaview 1.3.1 → 2.0.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/bundle/index.js +283 -97265
- package/dist/StructureModel.d.ts +9 -0
- package/dist/StructureModel.js +11 -0
- package/dist/StructureModel.js.map +1 -0
- package/dist/UniprotTrack.d.ts +27 -0
- package/dist/UniprotTrack.js +52 -0
- package/dist/UniprotTrack.js.map +1 -0
- package/dist/colorSchemes.d.ts +2 -2
- package/dist/colorSchemes.js +24 -29
- package/dist/colorSchemes.js.map +1 -0
- package/dist/components/AboutDlg.d.ts +0 -1
- package/dist/components/AboutDlg.js +38 -48
- package/dist/components/AboutDlg.js.map +1 -0
- package/dist/components/AddTrackDlg.d.ts +0 -1
- package/dist/components/AddTrackDlg.js +13 -13
- package/dist/components/AddTrackDlg.js.map +1 -0
- package/dist/components/AnnotationDlg.d.ts +0 -1
- package/dist/components/AnnotationDlg.js +36 -48
- package/dist/components/AnnotationDlg.js.map +1 -0
- package/dist/components/BoxTrack.d.ts +3 -4
- package/dist/components/BoxTrack.js +51 -48
- package/dist/components/BoxTrack.js.map +1 -0
- package/dist/components/DetailsDlg.d.ts +0 -1
- package/dist/components/DetailsDlg.js +7 -7
- package/dist/components/DetailsDlg.js.map +1 -0
- package/dist/components/Header.d.ts +0 -1
- package/dist/components/Header.js +39 -34
- package/dist/components/Header.js.map +1 -0
- package/dist/components/ImportForm.d.ts +0 -1
- package/dist/components/ImportForm.js +59 -71
- package/dist/components/ImportForm.js.map +1 -0
- package/dist/components/MSACanvas.d.ts +0 -1
- package/dist/components/MSACanvas.js +71 -74
- package/dist/components/MSACanvas.js.map +1 -0
- package/dist/components/MSAView.d.ts +0 -1
- package/dist/components/MSAView.js +19 -38
- package/dist/components/MSAView.js.map +1 -0
- package/dist/components/MoreInfoDlg.d.ts +2 -3
- package/dist/components/MoreInfoDlg.js +5 -5
- package/dist/components/MoreInfoDlg.js.map +1 -0
- package/dist/components/ResizeHandles.d.ts +2 -3
- package/dist/components/ResizeHandles.js +31 -32
- package/dist/components/ResizeHandles.js.map +1 -0
- package/dist/components/Rubberband.d.ts +2 -1
- package/dist/components/Rubberband.js +42 -64
- package/dist/components/Rubberband.js.map +1 -0
- package/dist/components/Ruler.d.ts +0 -15
- package/dist/components/Ruler.js +18 -87
- package/dist/components/Ruler.js.map +1 -0
- package/dist/components/SettingsDlg.d.ts +0 -1
- package/dist/components/SettingsDlg.js +29 -22
- package/dist/components/SettingsDlg.js.map +1 -0
- package/dist/components/TextTrack.d.ts +3 -4
- package/dist/components/TextTrack.js +23 -24
- package/dist/components/TextTrack.js.map +1 -0
- package/dist/components/Track.d.ts +2 -3
- package/dist/components/Track.js +38 -38
- package/dist/components/Track.js.map +1 -0
- package/dist/components/TrackInfoDlg.d.ts +5 -3
- package/dist/components/TrackInfoDlg.js +12 -13
- package/dist/components/TrackInfoDlg.js.map +1 -0
- package/dist/components/TracklistDlg.d.ts +0 -1
- package/dist/components/TracklistDlg.js +9 -9
- package/dist/components/TracklistDlg.js.map +1 -0
- package/dist/components/TreeCanvas.d.ts +0 -1
- package/dist/components/TreeCanvas.js +135 -148
- package/dist/components/TreeCanvas.js.map +1 -0
- package/dist/components/TreeRuler.d.ts +0 -1
- package/dist/components/TreeRuler.js +3 -3
- package/dist/components/TreeRuler.js.map +1 -0
- package/dist/components/VerticalGuide.d.ts +6 -0
- package/dist/components/VerticalGuide.js +30 -0
- package/dist/components/VerticalGuide.js.map +1 -0
- package/dist/components/data/seq2.d.ts +3 -3
- package/dist/components/data/seq2.js +33 -3
- package/dist/components/data/seq2.js.map +1 -0
- package/{bundle/components/Ruler.d.ts → dist/components/util.d.ts} +1 -6
- package/dist/components/util.js +69 -0
- package/dist/components/util.js.map +1 -0
- package/dist/index.d.ts +2 -4
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -0
- package/dist/layout.js +14 -20
- package/dist/layout.js.map +1 -0
- package/dist/model.d.ts +94 -74
- package/dist/model.js +232 -473
- package/dist/model.js.map +1 -0
- package/dist/parseNewick.d.ts +1 -5
- package/dist/parseNewick.js +10 -7
- package/dist/parseNewick.js.map +1 -0
- package/dist/parsers/ClustalMSA.d.ts +6 -18
- package/dist/parsers/ClustalMSA.js +55 -64
- package/dist/parsers/ClustalMSA.js.map +1 -0
- package/dist/parsers/FastaMSA.d.ts +4 -9
- package/dist/parsers/FastaMSA.js +55 -64
- package/dist/parsers/FastaMSA.js.map +1 -0
- package/dist/parsers/StockholmMSA.d.ts +8 -13
- package/dist/parsers/StockholmMSA.js +78 -107
- package/dist/parsers/StockholmMSA.js.map +1 -0
- package/dist/util.d.ts +33 -4
- package/dist/util.js +76 -24
- package/dist/util.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +30 -30
- package/src/StructureModel.ts +11 -0
- package/src/UniprotTrack.ts +60 -0
- package/src/colorSchemes.ts +520 -0
- package/src/components/AboutDlg.tsx +64 -0
- package/src/components/AddTrackDlg.tsx +74 -0
- package/src/components/AnnotationDlg.tsx +144 -0
- package/src/components/BoxTrack.tsx +225 -0
- package/src/components/DetailsDlg.tsx +28 -0
- package/src/components/Header.tsx +117 -0
- package/src/components/ImportForm.tsx +192 -0
- package/src/components/MSACanvas.tsx +297 -0
- package/src/components/MSAView.tsx +132 -0
- package/src/components/MoreInfoDlg.tsx +21 -0
- package/src/components/ResizeHandles.tsx +137 -0
- package/src/components/Rubberband.tsx +271 -0
- package/src/components/Ruler.tsx +122 -0
- package/src/components/SettingsDlg.tsx +154 -0
- package/src/components/TextTrack.tsx +120 -0
- package/src/components/Track.tsx +150 -0
- package/src/components/TrackInfoDlg.tsx +59 -0
- package/src/components/TracklistDlg.tsx +61 -0
- package/src/components/TreeCanvas.tsx +633 -0
- package/src/components/TreeRuler.tsx +12 -0
- package/src/components/VerticalGuide.tsx +50 -0
- package/src/components/data/seq2.ts +35 -0
- package/src/components/util.ts +94 -0
- package/src/declare.d.ts +2 -0
- package/src/index.ts +2 -0
- package/src/layout.ts +83 -0
- package/src/model.ts +790 -0
- package/{bundle/parseNewick.d.ts → src/parseNewick.ts} +36 -5
- package/src/parsers/ClustalMSA.ts +79 -0
- package/src/parsers/FastaMSA.ts +82 -0
- package/src/parsers/StockholmMSA.ts +137 -0
- package/src/util.ts +142 -0
- package/src/version.ts +1 -0
- package/bundle/colorSchemes.d.ts +0 -16
- package/bundle/colorSchemes.js +0 -455
- package/bundle/components/AboutDlg.d.ts +0 -5
- package/bundle/components/AboutDlg.js +0 -47
- package/bundle/components/AddTrackDlg.d.ts +0 -8
- package/bundle/components/AddTrackDlg.js +0 -26
- package/bundle/components/AnnotationDlg.d.ts +0 -11
- package/bundle/components/AnnotationDlg.js +0 -77
- package/bundle/components/BoxTrack.d.ts +0 -7
- package/bundle/components/BoxTrack.js +0 -143
- package/bundle/components/DetailsDlg.d.ts +0 -8
- package/bundle/components/DetailsDlg.js +0 -12
- package/bundle/components/Header.d.ts +0 -6
- package/bundle/components/Header.js +0 -63
- package/bundle/components/ImportForm.d.ts +0 -6
- package/bundle/components/ImportForm.js +0 -89
- package/bundle/components/MSACanvas.d.ts +0 -6
- package/bundle/components/MSACanvas.js +0 -210
- package/bundle/components/MSAView.d.ts +0 -6
- package/bundle/components/MSAView.js +0 -88
- package/bundle/components/MoreInfoDlg.d.ts +0 -6
- package/bundle/components/MoreInfoDlg.js +0 -11
- package/bundle/components/ResizeHandles.d.ts +0 -8
- package/bundle/components/ResizeHandles.js +0 -110
- package/bundle/components/Rubberband.d.ts +0 -7
- package/bundle/components/Rubberband.js +0 -196
- package/bundle/components/Ruler.js +0 -121
- package/bundle/components/SettingsDlg.d.ts +0 -8
- package/bundle/components/SettingsDlg.js +0 -40
- package/bundle/components/TextTrack.d.ts +0 -7
- package/bundle/components/TextTrack.js +0 -72
- package/bundle/components/Track.d.ts +0 -11
- package/bundle/components/Track.js +0 -81
- package/bundle/components/TrackInfoDlg.d.ts +0 -6
- package/bundle/components/TrackInfoDlg.js +0 -33
- package/bundle/components/TracklistDlg.d.ts +0 -8
- package/bundle/components/TracklistDlg.js +0 -18
- package/bundle/components/TreeCanvas.d.ts +0 -6
- package/bundle/components/TreeCanvas.js +0 -431
- package/bundle/components/TreeRuler.d.ts +0 -6
- package/bundle/components/TreeRuler.js +0 -8
- package/bundle/components/data/seq2.d.ts +0 -3
- package/bundle/components/data/seq2.js +0 -3
- package/bundle/index.d.ts +0 -4
- package/bundle/layout.d.ts +0 -23
- package/bundle/layout.js +0 -53
- package/bundle/model.d.ts +0 -364
- package/bundle/model.js +0 -894
- package/bundle/parseNewick.js +0 -94
- package/bundle/parsers/ClustalMSA.d.ts +0 -39
- package/bundle/parsers/ClustalMSA.js +0 -77
- package/bundle/parsers/FastaMSA.d.ts +0 -26
- package/bundle/parsers/FastaMSA.js +0 -78
- package/bundle/parsers/StockholmMSA.d.ts +0 -75
- package/bundle/parsers/StockholmMSA.js +0 -142
- package/bundle/util.d.ts +0 -17
- package/bundle/util.js +0 -33
- package/dist/components/package.json +0 -62
package/dist/model.js
CHANGED
|
@@ -1,210 +1,23 @@
|
|
|
1
|
-
var __assign = (this && this.__assign) || function () {
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
23
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
-
function step(op) {
|
|
26
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
-
while (_) try {
|
|
28
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
29
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
-
switch (op[0]) {
|
|
31
|
-
case 0: case 1: t = op; break;
|
|
32
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
-
default:
|
|
36
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
-
if (t[2]) _.ops.pop();
|
|
41
|
-
_.trys.pop(); continue;
|
|
42
|
-
}
|
|
43
|
-
op = body.call(thisArg, _);
|
|
44
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
49
|
-
var t = {};
|
|
50
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
51
|
-
t[p] = s[p];
|
|
52
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
53
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
54
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
55
|
-
t[p[i]] = s[p[i]];
|
|
56
|
-
}
|
|
57
|
-
return t;
|
|
58
|
-
};
|
|
59
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
60
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
61
|
-
if (ar || !(i in from)) {
|
|
62
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
63
|
-
ar[i] = from[i];
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
67
|
-
};
|
|
68
1
|
import { cast, types, addDisposer } from 'mobx-state-tree';
|
|
69
2
|
import { hierarchy, cluster } from 'd3-hierarchy';
|
|
70
|
-
import { ascending
|
|
3
|
+
import { ascending } from 'd3-array';
|
|
71
4
|
import { FileLocation, ElementId } from '@jbrowse/core/util/types/mst';
|
|
72
5
|
import { openLocation } from '@jbrowse/core/util/io';
|
|
73
6
|
import { autorun } from 'mobx';
|
|
74
7
|
import BaseViewModel from '@jbrowse/core/pluggableElementTypes/models/BaseViewModel';
|
|
75
8
|
import Stockholm from 'stockholm-js';
|
|
9
|
+
// locals
|
|
10
|
+
import { collapse, generateNodeIds, maxLength, setBrLength, skipBlanks, clamp, } from './util';
|
|
11
|
+
import TextTrack from './components/TextTrack';
|
|
12
|
+
import BoxTrack from './components/BoxTrack';
|
|
76
13
|
import ClustalMSA from './parsers/ClustalMSA';
|
|
77
14
|
import StockholmMSA from './parsers/StockholmMSA';
|
|
78
15
|
import FastaMSA from './parsers/FastaMSA';
|
|
79
16
|
import parseNewick from './parseNewick';
|
|
80
17
|
import colorSchemes from './colorSchemes';
|
|
81
|
-
import {
|
|
82
|
-
import
|
|
83
|
-
|
|
84
|
-
function skipBlanks(blanks, arg) {
|
|
85
|
-
var s = '';
|
|
86
|
-
var b = 0;
|
|
87
|
-
for (var j = 0; j < arg.length; j++) {
|
|
88
|
-
if (j === blanks[b]) {
|
|
89
|
-
b++;
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
s += arg[j];
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return s;
|
|
96
|
-
}
|
|
97
|
-
function setBrLength(d, y0, k) {
|
|
98
|
-
var _a;
|
|
99
|
-
//@ts-ignore
|
|
100
|
-
d.len = (y0 += Math.max(d.data.length || 0, 0)) * k;
|
|
101
|
-
(_a = d.children) === null || _a === void 0 ? void 0 : _a.forEach(function (d) {
|
|
102
|
-
setBrLength(d, y0, k);
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
function maxLength(d) {
|
|
106
|
-
return (d.data.length || 1) + (d.children ? max(d.children, maxLength) : 0);
|
|
107
|
-
}
|
|
108
|
-
// Collapse the node and all it's children, from
|
|
109
|
-
// https://bl.ocks.org/d3noob/43a860bc0024792f8803bba8ca0d5ecd
|
|
110
|
-
function collapse(d) {
|
|
111
|
-
if (d.children) {
|
|
112
|
-
//@ts-ignore
|
|
113
|
-
d._children = d.children;
|
|
114
|
-
//@ts-ignore
|
|
115
|
-
d._children.forEach(collapse);
|
|
116
|
-
//@ts-ignore
|
|
117
|
-
d.children = null;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
function clamp(min, num, max) {
|
|
121
|
-
return Math.min(Math.max(num, min), max);
|
|
122
|
-
}
|
|
123
|
-
var StructureModel = types.model({
|
|
124
|
-
id: types.identifier,
|
|
125
|
-
structure: types.model({
|
|
126
|
-
pdb: types.string,
|
|
127
|
-
startPos: types.number,
|
|
128
|
-
endPos: types.number,
|
|
129
|
-
}),
|
|
130
|
-
range: types.maybe(types.string),
|
|
131
|
-
});
|
|
132
|
-
var UniprotTrack = types
|
|
133
|
-
.model({
|
|
134
|
-
id: types.string,
|
|
135
|
-
accession: types.string,
|
|
136
|
-
name: types.string,
|
|
137
|
-
associatedRowName: types.string,
|
|
138
|
-
height: types.optional(types.number, 100),
|
|
139
|
-
})
|
|
140
|
-
.volatile(function () { return ({
|
|
141
|
-
error: undefined,
|
|
142
|
-
data: undefined,
|
|
143
|
-
}); })
|
|
144
|
-
.actions(function (self) { return ({
|
|
145
|
-
setError: function (error) {
|
|
146
|
-
self.error = error;
|
|
147
|
-
},
|
|
148
|
-
setData: function (data) {
|
|
149
|
-
self.data = data;
|
|
150
|
-
},
|
|
151
|
-
}); })
|
|
152
|
-
.actions(function (self) { return ({
|
|
153
|
-
afterCreate: function () {
|
|
154
|
-
var _this = this;
|
|
155
|
-
addDisposer(self, autorun(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
156
|
-
var accession, url, response, text, e_1;
|
|
157
|
-
return __generator(this, function (_a) {
|
|
158
|
-
switch (_a.label) {
|
|
159
|
-
case 0:
|
|
160
|
-
_a.trys.push([0, 3, , 4]);
|
|
161
|
-
accession = self.accession;
|
|
162
|
-
url = "https://www.uniprot.org/uniprot/" + accession + ".gff";
|
|
163
|
-
return [4 /*yield*/, fetch(url)];
|
|
164
|
-
case 1:
|
|
165
|
-
response = _a.sent();
|
|
166
|
-
if (!response.ok) {
|
|
167
|
-
throw new Error("HTTP " + response.status + " " + response.statusText + " fetching " + url);
|
|
168
|
-
}
|
|
169
|
-
return [4 /*yield*/, response.text()];
|
|
170
|
-
case 2:
|
|
171
|
-
text = _a.sent();
|
|
172
|
-
self.setData(text);
|
|
173
|
-
return [3 /*break*/, 4];
|
|
174
|
-
case 3:
|
|
175
|
-
e_1 = _a.sent();
|
|
176
|
-
self.setError(e_1);
|
|
177
|
-
return [3 /*break*/, 4];
|
|
178
|
-
case 4: return [2 /*return*/];
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
}); }));
|
|
182
|
-
},
|
|
183
|
-
}); })
|
|
184
|
-
.views(function (self) { return ({
|
|
185
|
-
get loading() {
|
|
186
|
-
return !self.data;
|
|
187
|
-
},
|
|
188
|
-
get features() {
|
|
189
|
-
var _a;
|
|
190
|
-
return (_a = self.data) === null || _a === void 0 ? void 0 : _a.split('\n').map(function (f) { return f.trim(); }).filter(function (f) { return !!f; }).filter(function (f) { return !f.startsWith('#'); }).map(function (f) {
|
|
191
|
-
var _a = f.split('\t'), seq_id = _a[0], source = _a[1], type = _a[2], start = _a[3], end = _a[4], score = _a[5], strand = _a[6], phase = _a[7], col9 = _a[8];
|
|
192
|
-
return __assign({ seq_id: seq_id, source: source, type: type, start: +start, end: +end, score: +score, strand: strand, phase: phase }, Object.fromEntries(col9
|
|
193
|
-
.split(';')
|
|
194
|
-
.map(function (f) { return f.trim(); })
|
|
195
|
-
.filter(function (f) { return !!f; })
|
|
196
|
-
.map(function (f) { return f.split('='); })
|
|
197
|
-
.map(function (_a) {
|
|
198
|
-
var key = _a[0], val = _a[1];
|
|
199
|
-
return [
|
|
200
|
-
key.trim(),
|
|
201
|
-
decodeURIComponent(val).trim().split(',').join(' '),
|
|
202
|
-
];
|
|
203
|
-
})));
|
|
204
|
-
});
|
|
205
|
-
},
|
|
206
|
-
}); });
|
|
207
|
-
var MSAModel = types
|
|
18
|
+
import { UniprotTrack } from './UniprotTrack';
|
|
19
|
+
import { StructureModel } from './StructureModel';
|
|
20
|
+
const MSAModel = types
|
|
208
21
|
.model('MsaView', {
|
|
209
22
|
id: ElementId,
|
|
210
23
|
type: types.literal('MsaView'),
|
|
@@ -244,45 +57,45 @@ var MSAModel = types
|
|
|
244
57
|
tree: types.maybe(types.string),
|
|
245
58
|
msa: types.maybe(types.string),
|
|
246
59
|
})
|
|
247
|
-
.actions(
|
|
248
|
-
setTree
|
|
60
|
+
.actions(self => ({
|
|
61
|
+
setTree(tree) {
|
|
249
62
|
self.tree = tree;
|
|
250
63
|
},
|
|
251
|
-
setMSA
|
|
64
|
+
setMSA(msa) {
|
|
252
65
|
self.msa = msa;
|
|
253
66
|
},
|
|
254
|
-
})
|
|
67
|
+
})), { tree: '', msa: '' }),
|
|
255
68
|
})
|
|
256
|
-
.volatile(
|
|
69
|
+
.volatile(() => ({
|
|
257
70
|
error: undefined,
|
|
258
71
|
margin: { left: 20, top: 20 },
|
|
259
|
-
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
260
73
|
DialogComponent: undefined,
|
|
261
|
-
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
262
75
|
DialogProps: undefined,
|
|
263
76
|
// annotations
|
|
264
77
|
annotPos: undefined,
|
|
265
|
-
})
|
|
266
|
-
.actions(
|
|
267
|
-
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
268
|
-
setDialogComponent
|
|
78
|
+
}))
|
|
79
|
+
.actions(self => ({
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
|
+
setDialogComponent(dlg, props) {
|
|
269
82
|
self.DialogComponent = dlg;
|
|
270
83
|
self.DialogProps = props;
|
|
271
84
|
},
|
|
272
|
-
setHeight
|
|
85
|
+
setHeight(height) {
|
|
273
86
|
self.height = height;
|
|
274
87
|
},
|
|
275
|
-
addStructureToSelection
|
|
88
|
+
addStructureToSelection(elt) {
|
|
276
89
|
self.selectedStructures.push(elt);
|
|
277
90
|
},
|
|
278
|
-
removeStructureFromSelection
|
|
279
|
-
|
|
91
|
+
removeStructureFromSelection(elt) {
|
|
92
|
+
const r = self.selectedStructures.find(node => node.id === elt.id);
|
|
280
93
|
if (r) {
|
|
281
94
|
self.selectedStructures.remove(r);
|
|
282
95
|
}
|
|
283
96
|
},
|
|
284
|
-
toggleStructureSelection
|
|
285
|
-
|
|
97
|
+
toggleStructureSelection(elt) {
|
|
98
|
+
const r = self.selectedStructures.find(node => node.id === elt.id);
|
|
286
99
|
if (r) {
|
|
287
100
|
self.selectedStructures.remove(r);
|
|
288
101
|
}
|
|
@@ -290,51 +103,48 @@ var MSAModel = types
|
|
|
290
103
|
self.selectedStructures.push(elt);
|
|
291
104
|
}
|
|
292
105
|
},
|
|
293
|
-
clearSelectedStructures
|
|
294
|
-
|
|
106
|
+
clearSelectedStructures() {
|
|
107
|
+
// @ts-expect-error
|
|
295
108
|
self.selectedStructures = [];
|
|
296
109
|
},
|
|
297
|
-
setError
|
|
298
|
-
if (error) {
|
|
299
|
-
console.error(error);
|
|
300
|
-
}
|
|
110
|
+
setError(error) {
|
|
301
111
|
self.error = error;
|
|
302
112
|
},
|
|
303
|
-
setMousePos
|
|
113
|
+
setMousePos(col, row) {
|
|
304
114
|
self.mouseCol = col;
|
|
305
115
|
self.mouseRow = row;
|
|
306
116
|
},
|
|
307
|
-
setRowHeight
|
|
117
|
+
setRowHeight(n) {
|
|
308
118
|
self.rowHeight = n;
|
|
309
119
|
},
|
|
310
|
-
setColWidth
|
|
120
|
+
setColWidth(n) {
|
|
311
121
|
self.colWidth = n;
|
|
312
122
|
},
|
|
313
|
-
setColorSchemeName
|
|
123
|
+
setColorSchemeName(name) {
|
|
314
124
|
self.colorSchemeName = name;
|
|
315
125
|
},
|
|
316
|
-
setScrollY
|
|
126
|
+
setScrollY(n) {
|
|
317
127
|
self.scrollY = n;
|
|
318
128
|
},
|
|
319
|
-
setScrollX
|
|
129
|
+
setScrollX(n) {
|
|
320
130
|
self.scrollX = n;
|
|
321
131
|
},
|
|
322
|
-
setTreeAreaWidth
|
|
132
|
+
setTreeAreaWidth(n) {
|
|
323
133
|
self.treeAreaWidth = n;
|
|
324
134
|
},
|
|
325
|
-
setTreeWidth
|
|
135
|
+
setTreeWidth(n) {
|
|
326
136
|
self.treeWidth = n;
|
|
327
137
|
},
|
|
328
|
-
setCurrentAlignment
|
|
138
|
+
setCurrentAlignment(n) {
|
|
329
139
|
self.currentAlignment = n;
|
|
330
140
|
},
|
|
331
|
-
toggleLabelsAlignRight
|
|
141
|
+
toggleLabelsAlignRight() {
|
|
332
142
|
self.labelsAlignRight = !self.labelsAlignRight;
|
|
333
143
|
},
|
|
334
|
-
toggleDrawTree
|
|
144
|
+
toggleDrawTree() {
|
|
335
145
|
self.drawTree = !self.drawTree;
|
|
336
146
|
},
|
|
337
|
-
toggleCollapsed
|
|
147
|
+
toggleCollapsed(node) {
|
|
338
148
|
if (self.collapsed.includes(node)) {
|
|
339
149
|
self.collapsed.remove(node);
|
|
340
150
|
}
|
|
@@ -342,110 +152,71 @@ var MSAModel = types
|
|
|
342
152
|
self.collapsed.push(node);
|
|
343
153
|
}
|
|
344
154
|
},
|
|
345
|
-
setShowOnly
|
|
155
|
+
setShowOnly(node) {
|
|
346
156
|
self.showOnly = node;
|
|
347
157
|
},
|
|
348
|
-
toggleBranchLen
|
|
158
|
+
toggleBranchLen() {
|
|
349
159
|
self.showBranchLen = !self.showBranchLen;
|
|
350
160
|
},
|
|
351
|
-
toggleBgColor
|
|
161
|
+
toggleBgColor() {
|
|
352
162
|
self.bgColor = !self.bgColor;
|
|
353
163
|
},
|
|
354
|
-
toggleNodeBubbles
|
|
164
|
+
toggleNodeBubbles() {
|
|
355
165
|
self.drawNodeBubbles = !self.drawNodeBubbles;
|
|
356
166
|
},
|
|
357
|
-
setData
|
|
167
|
+
setData(data) {
|
|
358
168
|
self.data = cast(data);
|
|
359
169
|
},
|
|
360
|
-
setMSAFilehandle
|
|
361
|
-
|
|
362
|
-
return __generator(this, function (_a) {
|
|
363
|
-
self.msaFilehandle = msaFilehandle;
|
|
364
|
-
return [2 /*return*/];
|
|
365
|
-
});
|
|
366
|
-
});
|
|
170
|
+
async setMSAFilehandle(msaFilehandle) {
|
|
171
|
+
self.msaFilehandle = msaFilehandle;
|
|
367
172
|
},
|
|
368
|
-
setTreeFilehandle
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
case 1:
|
|
377
|
-
r = (_a.sent());
|
|
378
|
-
this.setTree(r);
|
|
379
|
-
return [3 /*break*/, 3];
|
|
380
|
-
case 2:
|
|
381
|
-
self.treeFilehandle = treeFilehandle;
|
|
382
|
-
_a.label = 3;
|
|
383
|
-
case 3: return [2 /*return*/];
|
|
384
|
-
}
|
|
385
|
-
});
|
|
386
|
-
});
|
|
173
|
+
async setTreeFilehandle(treeFilehandle) {
|
|
174
|
+
if (treeFilehandle && 'blobId' in treeFilehandle) {
|
|
175
|
+
const r = await openLocation(treeFilehandle).readFile('utf8');
|
|
176
|
+
this.setTree(r);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
self.treeFilehandle = treeFilehandle;
|
|
180
|
+
}
|
|
387
181
|
},
|
|
388
|
-
setMSA
|
|
182
|
+
setMSA(result) {
|
|
389
183
|
self.data.setMSA(result);
|
|
390
184
|
},
|
|
391
|
-
setTree
|
|
185
|
+
setTree(result) {
|
|
392
186
|
self.data.setTree(result);
|
|
393
187
|
},
|
|
394
|
-
afterCreate
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
case 0:
|
|
401
|
-
treeFilehandle = self.treeFilehandle;
|
|
402
|
-
if (!treeFilehandle) return [3 /*break*/, 4];
|
|
403
|
-
_b.label = 1;
|
|
404
|
-
case 1:
|
|
405
|
-
_b.trys.push([1, 3, , 4]);
|
|
406
|
-
_a = this.setTree;
|
|
407
|
-
return [4 /*yield*/, openLocation(treeFilehandle).readFile('utf8')];
|
|
408
|
-
case 2:
|
|
409
|
-
_a.apply(this, [(_b.sent())]);
|
|
410
|
-
return [3 /*break*/, 4];
|
|
411
|
-
case 3:
|
|
412
|
-
e_2 = _b.sent();
|
|
413
|
-
this.setError(e_2);
|
|
414
|
-
return [3 /*break*/, 4];
|
|
415
|
-
case 4: return [2 /*return*/];
|
|
188
|
+
afterCreate() {
|
|
189
|
+
addDisposer(self, autorun(async () => {
|
|
190
|
+
const { treeFilehandle } = self;
|
|
191
|
+
if (treeFilehandle) {
|
|
192
|
+
try {
|
|
193
|
+
this.setTree(await openLocation(treeFilehandle).readFile('utf8'));
|
|
416
194
|
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
var msaFilehandle, _a, e_3;
|
|
421
|
-
return __generator(this, function (_b) {
|
|
422
|
-
switch (_b.label) {
|
|
423
|
-
case 0:
|
|
424
|
-
msaFilehandle = self.msaFilehandle;
|
|
425
|
-
if (!msaFilehandle) return [3 /*break*/, 4];
|
|
426
|
-
_b.label = 1;
|
|
427
|
-
case 1:
|
|
428
|
-
_b.trys.push([1, 3, , 4]);
|
|
429
|
-
_a = this.setMSA;
|
|
430
|
-
return [4 /*yield*/, openLocation(msaFilehandle).readFile('utf8')];
|
|
431
|
-
case 2:
|
|
432
|
-
_a.apply(this, [(_b.sent())]);
|
|
433
|
-
return [3 /*break*/, 4];
|
|
434
|
-
case 3:
|
|
435
|
-
e_3 = _b.sent();
|
|
436
|
-
this.setError(e_3);
|
|
437
|
-
return [3 /*break*/, 4];
|
|
438
|
-
case 4: return [2 /*return*/];
|
|
195
|
+
catch (e) {
|
|
196
|
+
console.error(e);
|
|
197
|
+
this.setError(e);
|
|
439
198
|
}
|
|
440
|
-
}
|
|
441
|
-
})
|
|
442
|
-
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
199
|
+
}
|
|
200
|
+
}));
|
|
201
|
+
addDisposer(self, autorun(async () => {
|
|
202
|
+
const { msaFilehandle } = self;
|
|
203
|
+
if (msaFilehandle) {
|
|
204
|
+
try {
|
|
205
|
+
this.setMSA(await openLocation(msaFilehandle).readFile('utf8'));
|
|
206
|
+
}
|
|
207
|
+
catch (e) {
|
|
208
|
+
console.error(e);
|
|
209
|
+
this.setError(e);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}));
|
|
213
|
+
},
|
|
214
|
+
}))
|
|
215
|
+
.views(self => {
|
|
216
|
+
let oldBlocksX = [];
|
|
217
|
+
let oldBlocksY = [];
|
|
218
|
+
let oldValX = 0;
|
|
219
|
+
let oldValY = 0;
|
|
449
220
|
return {
|
|
450
221
|
get initialized() {
|
|
451
222
|
return ((self.data.msa ||
|
|
@@ -455,10 +226,10 @@ var MSAModel = types
|
|
|
455
226
|
!self.error);
|
|
456
227
|
},
|
|
457
228
|
get blocksX() {
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
for (
|
|
229
|
+
const { scrollX, blockSize: size, colWidth } = self;
|
|
230
|
+
const ret = -(size * Math.floor(scrollX / size)) - size;
|
|
231
|
+
const b = [];
|
|
232
|
+
for (let i = ret; i < ret + size * 3; i += size) {
|
|
462
233
|
if (i + size > 0) {
|
|
463
234
|
b.push(i);
|
|
464
235
|
}
|
|
@@ -471,10 +242,10 @@ var MSAModel = types
|
|
|
471
242
|
return oldBlocksX;
|
|
472
243
|
},
|
|
473
244
|
get blocksY() {
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
for (
|
|
245
|
+
const { scrollY, blockSize: size, rowHeight } = self;
|
|
246
|
+
const ret = -(size * Math.floor(scrollY / size)) - 2 * size;
|
|
247
|
+
const b = [];
|
|
248
|
+
for (let i = ret; i < ret + size * 3; i += size) {
|
|
478
249
|
if (i + size > 0) {
|
|
479
250
|
b.push(i);
|
|
480
251
|
}
|
|
@@ -488,9 +259,9 @@ var MSAModel = types
|
|
|
488
259
|
},
|
|
489
260
|
};
|
|
490
261
|
})
|
|
491
|
-
.views(
|
|
262
|
+
.views(self => ({
|
|
492
263
|
get blocks2d() {
|
|
493
|
-
return self.blocksY.
|
|
264
|
+
return self.blocksY.flatMap(by => self.blocksX.map(bx => [bx, by]));
|
|
494
265
|
},
|
|
495
266
|
get done() {
|
|
496
267
|
return self.initialized && (self.data.msa || self.data.tree);
|
|
@@ -498,16 +269,17 @@ var MSAModel = types
|
|
|
498
269
|
get colorScheme() {
|
|
499
270
|
return colorSchemes[self.colorSchemeName];
|
|
500
271
|
},
|
|
501
|
-
get
|
|
272
|
+
get header() {
|
|
502
273
|
var _a;
|
|
503
|
-
return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.
|
|
274
|
+
return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getHeader()) || {};
|
|
504
275
|
},
|
|
505
|
-
|
|
276
|
+
getRowData(name) {
|
|
506
277
|
var _a;
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
278
|
+
const matches = name.match(/\S+\/(\d+)-(\d+)/);
|
|
279
|
+
return {
|
|
280
|
+
data: ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getRowData(name)) || {},
|
|
281
|
+
...(matches && { range: { start: +matches[1], end: +matches[2] } }),
|
|
282
|
+
};
|
|
511
283
|
},
|
|
512
284
|
get currentAlignmentName() {
|
|
513
285
|
return this.alignmentNames[self.currentAlignment];
|
|
@@ -523,7 +295,7 @@ var MSAModel = types
|
|
|
523
295
|
return [];
|
|
524
296
|
},
|
|
525
297
|
get MSA() {
|
|
526
|
-
|
|
298
|
+
const text = self.data.msa;
|
|
527
299
|
if (text) {
|
|
528
300
|
if (Stockholm.sniff(text)) {
|
|
529
301
|
return new StockholmMSA(text, self.currentAlignment);
|
|
@@ -545,38 +317,39 @@ var MSAModel = types
|
|
|
545
317
|
var _a;
|
|
546
318
|
return self.data.tree
|
|
547
319
|
? generateNodeIds(parseNewick(self.data.tree))
|
|
548
|
-
: ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getTree()) || {
|
|
320
|
+
: ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getTree()) || {
|
|
321
|
+
noTree: true,
|
|
322
|
+
branchset: [],
|
|
323
|
+
id: 'empty',
|
|
324
|
+
name: 'empty',
|
|
325
|
+
};
|
|
549
326
|
},
|
|
550
327
|
get rowNames() {
|
|
551
|
-
return this.hierarchy.leaves().map(
|
|
328
|
+
return this.hierarchy.leaves().map(node => node.data.name);
|
|
552
329
|
},
|
|
553
330
|
get mouseOverRowName() {
|
|
554
331
|
return self.mouseRow !== undefined
|
|
555
332
|
? this.rowNames[self.mouseRow]
|
|
556
333
|
: undefined;
|
|
557
334
|
},
|
|
558
|
-
getMouseOverResidue
|
|
335
|
+
getMouseOverResidue(rowName) {
|
|
559
336
|
return this.columns[rowName];
|
|
560
337
|
},
|
|
561
338
|
get root() {
|
|
562
|
-
|
|
563
|
-
.sum(
|
|
564
|
-
.sort(
|
|
565
|
-
return ascending(a.data.length || 1, b.data.length || 1);
|
|
566
|
-
});
|
|
339
|
+
let hier = hierarchy(this.tree, d => d.branchset)
|
|
340
|
+
.sum(d => (d.branchset ? 0 : 1))
|
|
341
|
+
.sort((a, b) => ascending(a.data.length || 1, b.data.length || 1));
|
|
567
342
|
if (self.showOnly) {
|
|
568
|
-
|
|
343
|
+
const res = hier.find(node => node.data.id === self.showOnly);
|
|
569
344
|
if (res) {
|
|
570
345
|
hier = res;
|
|
571
346
|
}
|
|
572
347
|
}
|
|
573
348
|
if (self.collapsed.length) {
|
|
574
349
|
self.collapsed
|
|
575
|
-
.map(
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
.filter(function (f) { return !!f; })
|
|
579
|
-
.map(function (node) { return collapse(node); });
|
|
350
|
+
.map(collapsedId => hier.find(node => node.data.id === collapsedId))
|
|
351
|
+
.filter((f) => !!f)
|
|
352
|
+
.map(node => collapse(node));
|
|
580
353
|
}
|
|
581
354
|
return hier;
|
|
582
355
|
},
|
|
@@ -585,33 +358,22 @@ var MSAModel = types
|
|
|
585
358
|
return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getStructures()) || {};
|
|
586
359
|
},
|
|
587
360
|
get inverseStructures() {
|
|
588
|
-
|
|
589
|
-
.map(function (_a) {
|
|
590
|
-
var key = _a[0], val = _a[1];
|
|
591
|
-
return val.map(function (pdbEntry) { return [pdbEntry.pdb, { id: key }]; });
|
|
592
|
-
})
|
|
593
|
-
.flat();
|
|
594
|
-
return Object.fromEntries(map);
|
|
361
|
+
return Object.fromEntries(Object.entries(this.structures).flatMap(([key, val]) => val.map(pdbEntry => [pdbEntry.pdb, { id: key }])));
|
|
595
362
|
},
|
|
596
363
|
get msaAreaWidth() {
|
|
597
|
-
|
|
364
|
+
// @ts-expect-error
|
|
598
365
|
return self.width - self.treeAreaWidth;
|
|
599
366
|
},
|
|
600
367
|
get blanks() {
|
|
601
|
-
var _this = this;
|
|
602
368
|
var _a;
|
|
603
|
-
|
|
604
|
-
|
|
369
|
+
const blanks = [];
|
|
370
|
+
const strs = this.hierarchy
|
|
605
371
|
.leaves()
|
|
606
|
-
.map(
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
.filter(function (item) { return !!item; });
|
|
612
|
-
for (var i = 0; i < ((_a = strs[0]) === null || _a === void 0 ? void 0 : _a.length); i++) {
|
|
613
|
-
var counter = 0;
|
|
614
|
-
for (var j = 0; j < strs.length; j++) {
|
|
372
|
+
.map(({ data }) => { var _a; return (_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getRow(data.name); })
|
|
373
|
+
.filter((item) => !!item);
|
|
374
|
+
for (let i = 0; i < ((_a = strs[0]) === null || _a === void 0 ? void 0 : _a.length); i++) {
|
|
375
|
+
let counter = 0;
|
|
376
|
+
for (let j = 0; j < strs.length; j++) {
|
|
615
377
|
if (strs[j][i] === '-') {
|
|
616
378
|
counter++;
|
|
617
379
|
}
|
|
@@ -623,35 +385,23 @@ var MSAModel = types
|
|
|
623
385
|
return blanks;
|
|
624
386
|
},
|
|
625
387
|
get rows() {
|
|
626
|
-
var _this = this;
|
|
627
388
|
return this.hierarchy
|
|
628
389
|
.leaves()
|
|
629
|
-
.map(
|
|
630
|
-
|
|
631
|
-
var data = _a.data;
|
|
632
|
-
return [data.name, (_b = _this.MSA) === null || _b === void 0 ? void 0 : _b.getRow(data.name)];
|
|
633
|
-
})
|
|
634
|
-
.filter(function (f) { return !!f[1]; });
|
|
390
|
+
.map(({ data }) => { var _a; return [data.name, (_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getRow(data.name)]; })
|
|
391
|
+
.filter((f) => !!f[1]);
|
|
635
392
|
},
|
|
636
393
|
get columns() {
|
|
637
|
-
|
|
638
|
-
var cols = this.columns2d;
|
|
639
|
-
return Object.fromEntries(rows.map(function (row, index) { return [row[0], cols[index]]; }));
|
|
394
|
+
return Object.fromEntries(this.rows.map((row, index) => [row[0], this.columns2d[index]]));
|
|
640
395
|
},
|
|
641
396
|
get columns2d() {
|
|
642
|
-
|
|
643
|
-
var ret = [];
|
|
644
|
-
for (var i = 0; i < strs.length; i++) {
|
|
645
|
-
ret.push(skipBlanks(this.blanks, strs[i]));
|
|
646
|
-
}
|
|
647
|
-
return ret;
|
|
397
|
+
return this.rows.map(r => r[1]).map(str => skipBlanks(this.blanks, str));
|
|
648
398
|
},
|
|
649
399
|
get colStats() {
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
for (
|
|
653
|
-
for (
|
|
654
|
-
|
|
400
|
+
const r = [];
|
|
401
|
+
const m = this.columns2d;
|
|
402
|
+
for (let i = 0; i < m.length; i++) {
|
|
403
|
+
for (let j = 0; j < m[i].length; j++) {
|
|
404
|
+
const l = r[j] || {};
|
|
655
405
|
if (!l[m[i][j]]) {
|
|
656
406
|
l[m[i][j]] = 0;
|
|
657
407
|
}
|
|
@@ -663,43 +413,45 @@ var MSAModel = types
|
|
|
663
413
|
},
|
|
664
414
|
// generates a new tree that is clustered with x,y positions
|
|
665
415
|
get hierarchy() {
|
|
666
|
-
|
|
667
|
-
|
|
416
|
+
const root = this.root;
|
|
417
|
+
const clust = cluster()
|
|
668
418
|
.size([this.totalHeight, self.treeWidth])
|
|
669
|
-
.separation(
|
|
419
|
+
.separation(() => 1);
|
|
670
420
|
clust(root);
|
|
671
|
-
setBrLength(root,
|
|
672
|
-
//@ts-ignore
|
|
673
|
-
(root.data.length = 0), self.treeWidth / maxLength(root));
|
|
421
|
+
setBrLength(root, (root.data.length = 0), self.treeWidth / maxLength(root));
|
|
674
422
|
return root;
|
|
675
423
|
},
|
|
676
424
|
get totalHeight() {
|
|
677
425
|
return this.root.leaves().length * self.rowHeight;
|
|
678
426
|
},
|
|
679
|
-
})
|
|
680
|
-
.actions(
|
|
681
|
-
addUniprotTrack
|
|
682
|
-
if (self.boxTracks.
|
|
427
|
+
}))
|
|
428
|
+
.actions(self => ({
|
|
429
|
+
addUniprotTrack(node) {
|
|
430
|
+
if (self.boxTracks.some(t => t.name === node.name)) {
|
|
683
431
|
if (self.turnedOffTracks.has(node.name)) {
|
|
684
432
|
this.toggleTrack(node.name);
|
|
685
433
|
}
|
|
686
434
|
}
|
|
687
435
|
else {
|
|
688
|
-
self.boxTracks.push(
|
|
436
|
+
self.boxTracks.push({
|
|
437
|
+
...node,
|
|
438
|
+
id: node.name,
|
|
439
|
+
associatedRowName: node.name,
|
|
440
|
+
});
|
|
689
441
|
}
|
|
690
442
|
},
|
|
691
|
-
doScrollY
|
|
443
|
+
doScrollY(deltaY) {
|
|
692
444
|
self.scrollY = clamp(-self.totalHeight + 10, self.scrollY + deltaY, 0);
|
|
693
445
|
},
|
|
694
|
-
doScrollX
|
|
446
|
+
doScrollX(deltaX) {
|
|
695
447
|
self.scrollX = clamp(-self.numColumns + (self.msaAreaWidth - 100), self.scrollX + deltaX, 0);
|
|
696
448
|
},
|
|
697
|
-
setMouseoveredColumn
|
|
449
|
+
setMouseoveredColumn(n, chain, file) {
|
|
698
450
|
var _a;
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
451
|
+
let j = 0;
|
|
452
|
+
let i = 0;
|
|
453
|
+
const { id } = self.inverseStructures[file.slice(0, -4)] || {};
|
|
454
|
+
const row = (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.getRow(id);
|
|
703
455
|
if (row) {
|
|
704
456
|
for (i = 0; i < row.length && j < n; i++) {
|
|
705
457
|
if (row[i] !== '-') {
|
|
@@ -712,7 +464,7 @@ var MSAModel = types
|
|
|
712
464
|
self.mouseCol = undefined;
|
|
713
465
|
}
|
|
714
466
|
},
|
|
715
|
-
toggleTrack
|
|
467
|
+
toggleTrack(id) {
|
|
716
468
|
if (self.turnedOffTracks.has(id)) {
|
|
717
469
|
self.turnedOffTracks.delete(id);
|
|
718
470
|
}
|
|
@@ -720,8 +472,8 @@ var MSAModel = types
|
|
|
720
472
|
self.turnedOffTracks.set(id, true);
|
|
721
473
|
}
|
|
722
474
|
},
|
|
723
|
-
})
|
|
724
|
-
.views(
|
|
475
|
+
}))
|
|
476
|
+
.views(self => ({
|
|
725
477
|
get secondaryStructureConsensus() {
|
|
726
478
|
var _a;
|
|
727
479
|
return (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.secondaryStructureConsensus;
|
|
@@ -731,11 +483,11 @@ var MSAModel = types
|
|
|
731
483
|
return (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.seqConsensus;
|
|
732
484
|
},
|
|
733
485
|
get conservation() {
|
|
734
|
-
|
|
486
|
+
const m = self.columns2d;
|
|
735
487
|
if (m.length) {
|
|
736
|
-
for (
|
|
737
|
-
|
|
738
|
-
for (
|
|
488
|
+
for (let i = 0; i < m[0].length; i++) {
|
|
489
|
+
const col = [];
|
|
490
|
+
for (let j = 0; j < m.length; j++) {
|
|
739
491
|
col.push(m[j][i]);
|
|
740
492
|
}
|
|
741
493
|
}
|
|
@@ -743,24 +495,28 @@ var MSAModel = types
|
|
|
743
495
|
return ['a'];
|
|
744
496
|
},
|
|
745
497
|
get tracks() {
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
? self.MSA.tracks.map(
|
|
749
|
-
|
|
498
|
+
const blanks = self.blanks;
|
|
499
|
+
const adapterTracks = self.MSA
|
|
500
|
+
? self.MSA.tracks.map(track => {
|
|
501
|
+
const { data } = track;
|
|
750
502
|
return {
|
|
751
|
-
model:
|
|
503
|
+
model: {
|
|
504
|
+
...track,
|
|
505
|
+
data: data ? skipBlanks(blanks, data) : undefined,
|
|
506
|
+
height: self.rowHeight,
|
|
507
|
+
},
|
|
752
508
|
ReactComponent: TextTrack,
|
|
753
509
|
};
|
|
754
510
|
})
|
|
755
511
|
: [];
|
|
756
|
-
|
|
512
|
+
const boxTracks = self.boxTracks
|
|
757
513
|
// filter out tracks that are associated with hidden rows
|
|
758
|
-
.filter(
|
|
759
|
-
.map(
|
|
514
|
+
.filter(track => !!self.rows.some(row => row[0] === track.name))
|
|
515
|
+
.map(track => ({
|
|
760
516
|
model: track,
|
|
761
517
|
ReactComponent: BoxTrack,
|
|
762
|
-
})
|
|
763
|
-
|
|
518
|
+
}));
|
|
519
|
+
const annotationTracks = self.annotatedRegions.length > 0
|
|
764
520
|
? [
|
|
765
521
|
{
|
|
766
522
|
model: {
|
|
@@ -769,13 +525,10 @@ var MSAModel = types
|
|
|
769
525
|
id: 'annotations',
|
|
770
526
|
name: 'User-created annotations',
|
|
771
527
|
data: self.annotatedRegions
|
|
772
|
-
.map(
|
|
773
|
-
|
|
528
|
+
.map(region => {
|
|
529
|
+
const attrs = region.attributes
|
|
774
530
|
? Object.entries(region.attributes)
|
|
775
|
-
.map(
|
|
776
|
-
var k = _a[0], v = _a[1];
|
|
777
|
-
return k + "=" + v.join(',');
|
|
778
|
-
})
|
|
531
|
+
.map(([k, v]) => `${k}=${v.join(',')}`)
|
|
779
532
|
.join(';')
|
|
780
533
|
: '.';
|
|
781
534
|
return [
|
|
@@ -796,57 +549,57 @@ var MSAModel = types
|
|
|
796
549
|
},
|
|
797
550
|
]
|
|
798
551
|
: [];
|
|
799
|
-
return
|
|
552
|
+
return [...adapterTracks, ...boxTracks, ...annotationTracks];
|
|
800
553
|
},
|
|
801
554
|
get turnedOnTracks() {
|
|
802
|
-
return this.tracks.filter(
|
|
555
|
+
return this.tracks.filter(f => !self.turnedOffTracks.has(f.model.id));
|
|
803
556
|
},
|
|
804
557
|
// returns coordinate in the current relative coordinate scheme
|
|
805
|
-
pxToBp
|
|
558
|
+
pxToBp(coord) {
|
|
806
559
|
return Math.floor((coord - self.scrollX) / self.colWidth);
|
|
807
560
|
},
|
|
808
|
-
rowSpecificBpToPx
|
|
561
|
+
rowSpecificBpToPx(rowName, position) {
|
|
809
562
|
var _a;
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
563
|
+
const { rowNames, rows, blanks } = self;
|
|
564
|
+
const index = rowNames.indexOf(rowName);
|
|
565
|
+
const row = rows[index][1];
|
|
566
|
+
const details = self.getRowData(rowName);
|
|
567
|
+
const offset = ((_a = details.range) === null || _a === void 0 ? void 0 : _a.start) || 0;
|
|
568
|
+
const current = position - offset;
|
|
816
569
|
if (current < 0) {
|
|
817
570
|
return 0;
|
|
818
571
|
}
|
|
819
|
-
|
|
820
|
-
|
|
572
|
+
let j = 0;
|
|
573
|
+
let i = 0;
|
|
821
574
|
for (; i < row.length; i++) {
|
|
822
575
|
if (row[i] !== '-' && j++ === current) {
|
|
823
576
|
break;
|
|
824
577
|
}
|
|
825
578
|
}
|
|
826
|
-
|
|
827
|
-
for (
|
|
828
|
-
if (blanks.
|
|
579
|
+
let count = 0;
|
|
580
|
+
for (let k = 0; k < row.length; k++) {
|
|
581
|
+
if (blanks.includes(k) && k < i + 1) {
|
|
829
582
|
count++;
|
|
830
583
|
}
|
|
831
584
|
}
|
|
832
585
|
return i - count;
|
|
833
586
|
},
|
|
834
|
-
globalBpToPx
|
|
587
|
+
globalBpToPx(position) {
|
|
835
588
|
var _a;
|
|
836
|
-
|
|
837
|
-
for (
|
|
838
|
-
if (self.blanks.
|
|
589
|
+
let count = 0;
|
|
590
|
+
for (let k = 0; k < ((_a = self.rows[0]) === null || _a === void 0 ? void 0 : _a[1].length); k++) {
|
|
591
|
+
if (self.blanks.includes(k) && k < position + 1) {
|
|
839
592
|
count++;
|
|
840
593
|
}
|
|
841
594
|
}
|
|
842
595
|
return position - count;
|
|
843
596
|
},
|
|
844
|
-
relativePxToBp
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
for (
|
|
597
|
+
relativePxToBp(rowName, position) {
|
|
598
|
+
const { rowNames, rows } = self;
|
|
599
|
+
const index = rowNames.indexOf(rowName);
|
|
600
|
+
const row = rows[index][1];
|
|
601
|
+
let k = 0;
|
|
602
|
+
for (let i = 0; i < position; i++) {
|
|
850
603
|
if (row[i] !== '-') {
|
|
851
604
|
k++;
|
|
852
605
|
}
|
|
@@ -856,9 +609,9 @@ var MSAModel = types
|
|
|
856
609
|
}
|
|
857
610
|
return k;
|
|
858
611
|
},
|
|
859
|
-
getPos
|
|
860
|
-
|
|
861
|
-
for (
|
|
612
|
+
getPos(pos) {
|
|
613
|
+
let j = 0;
|
|
614
|
+
for (let i = 0, k = 0; i < pos; i++, j++) {
|
|
862
615
|
while (j === self.blanks[k]) {
|
|
863
616
|
k++;
|
|
864
617
|
j++;
|
|
@@ -866,31 +619,37 @@ var MSAModel = types
|
|
|
866
619
|
}
|
|
867
620
|
return j;
|
|
868
621
|
},
|
|
869
|
-
})
|
|
870
|
-
.actions(
|
|
871
|
-
addAnnotation
|
|
622
|
+
}))
|
|
623
|
+
.actions(self => ({
|
|
624
|
+
addAnnotation(start, end, attributes) {
|
|
872
625
|
self.annotatedRegions.push({
|
|
873
626
|
start: self.getPos(start),
|
|
874
627
|
end: self.getPos(end),
|
|
875
|
-
attributes
|
|
628
|
+
attributes,
|
|
876
629
|
});
|
|
877
630
|
},
|
|
878
|
-
setOffsets
|
|
879
|
-
self.annotPos = { left
|
|
631
|
+
setOffsets(left, right) {
|
|
632
|
+
self.annotPos = { left, right };
|
|
880
633
|
},
|
|
881
|
-
clearAnnotPos
|
|
634
|
+
clearAnnotPos() {
|
|
882
635
|
self.annotPos = undefined;
|
|
883
636
|
},
|
|
884
|
-
})
|
|
885
|
-
|
|
886
|
-
postProcessor
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
// which case it can be reloaded on refresh
|
|
890
|
-
, ["data"]);
|
|
637
|
+
}));
|
|
638
|
+
const model = types.snapshotProcessor(types.compose(BaseViewModel, MSAModel), {
|
|
639
|
+
postProcessor(result) {
|
|
640
|
+
const snap = result;
|
|
641
|
+
const { data: { tree, msa }, ...rest } = snap;
|
|
891
642
|
// remove the MSA/tree data from the tree if the filehandle available in
|
|
892
643
|
// which case it can be reloaded on refresh
|
|
893
|
-
return
|
|
644
|
+
return {
|
|
645
|
+
data: {
|
|
646
|
+
// https://andreasimonecosta.dev/posts/the-shortest-way-to-conditionally-insert-properties-into-an-object-literal/
|
|
647
|
+
...(!result.treeFilehandle && { tree }),
|
|
648
|
+
...(!result.msaFilehandle && { msa }),
|
|
649
|
+
},
|
|
650
|
+
...rest,
|
|
651
|
+
};
|
|
894
652
|
},
|
|
895
653
|
});
|
|
896
654
|
export default model;
|
|
655
|
+
//# sourceMappingURL=model.js.map
|