@jbrowse/plugin-wiggle 1.7.10 → 2.0.1
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/dist/BigWigAdapter/BigWigAdapter.js +176 -284
- package/dist/BigWigAdapter/BigWigAdapter.js.map +1 -0
- package/dist/BigWigAdapter/configSchema.js +12 -21
- package/dist/BigWigAdapter/configSchema.js.map +1 -0
- package/dist/BigWigAdapter/index.js +8 -14
- package/dist/BigWigAdapter/index.js.map +1 -0
- package/dist/DensityRenderer/index.d.ts +1 -1
- package/dist/DensityRenderer/index.js +152 -133
- package/dist/DensityRenderer/index.js.map +1 -0
- package/dist/LinePlotRenderer/LinePlotRenderer.d.ts +1 -1
- package/dist/LinePlotRenderer/LinePlotRenderer.js +182 -168
- package/dist/LinePlotRenderer/LinePlotRenderer.js.map +1 -0
- package/dist/LinePlotRenderer/index.js +19 -33
- package/dist/LinePlotRenderer/index.js.map +1 -0
- package/dist/LinearWiggleDisplay/components/SetColorDialog.js +95 -105
- package/dist/LinearWiggleDisplay/components/SetColorDialog.js.map +1 -0
- package/dist/LinearWiggleDisplay/components/SetMinMaxDialog.js +86 -107
- package/dist/LinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -0
- package/dist/LinearWiggleDisplay/components/Tooltip.js +147 -152
- package/dist/LinearWiggleDisplay/components/Tooltip.js.map +1 -0
- package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.js +44 -50
- package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -0
- package/dist/LinearWiggleDisplay/components/YScaleBar.js +24 -31
- package/dist/LinearWiggleDisplay/components/YScaleBar.js.map +1 -0
- package/dist/LinearWiggleDisplay/index.js +13 -42
- package/dist/LinearWiggleDisplay/index.js.map +1 -0
- package/dist/LinearWiggleDisplay/models/configSchema.js +65 -69
- package/dist/LinearWiggleDisplay/models/configSchema.js.map +1 -0
- package/dist/LinearWiggleDisplay/models/model.d.ts +16 -14
- package/dist/LinearWiggleDisplay/models/model.js +585 -696
- package/dist/LinearWiggleDisplay/models/model.js.map +1 -0
- package/dist/WiggleBaseRenderer.d.ts +3 -3
- package/dist/WiggleBaseRenderer.js +119 -129
- package/dist/WiggleBaseRenderer.js.map +1 -0
- package/dist/WiggleRPC/rpcMethods.js +182 -288
- package/dist/WiggleRPC/rpcMethods.js.map +1 -0
- package/dist/WiggleRendering.js +107 -102
- package/dist/WiggleRendering.js.map +1 -0
- package/dist/XYPlotRenderer/XYPlotRenderer.d.ts +1 -1
- package/dist/XYPlotRenderer/XYPlotRenderer.js +250 -194
- package/dist/XYPlotRenderer/XYPlotRenderer.js.map +1 -0
- package/dist/XYPlotRenderer/index.js +30 -33
- package/dist/XYPlotRenderer/index.js.map +1 -0
- package/dist/configSchema.js +47 -74
- package/dist/configSchema.js.map +1 -0
- package/dist/index.d.ts +118 -67
- package/dist/index.js +167 -242
- package/dist/index.js.map +1 -0
- package/dist/util.js +112 -143
- package/dist/util.js.map +1 -0
- package/esm/BigWigAdapter/BigWigAdapter.d.ts +24 -0
- package/esm/BigWigAdapter/BigWigAdapter.js +62 -0
- package/esm/BigWigAdapter/BigWigAdapter.js.map +1 -0
- package/{dist/LinePlotRenderer → esm/BigWigAdapter}/configSchema.d.ts +0 -0
- package/esm/BigWigAdapter/configSchema.js +11 -0
- package/esm/BigWigAdapter/configSchema.js.map +1 -0
- package/esm/BigWigAdapter/index.d.ts +1 -0
- package/esm/BigWigAdapter/index.js +2 -0
- package/esm/BigWigAdapter/index.js.map +1 -0
- package/esm/DensityRenderer/index.d.ts +6 -0
- package/esm/DensityRenderer/index.js +39 -0
- package/esm/DensityRenderer/index.js.map +1 -0
- package/esm/LinePlotRenderer/LinePlotRenderer.d.ts +4 -0
- package/esm/LinePlotRenderer/LinePlotRenderer.js +71 -0
- package/esm/LinePlotRenderer/LinePlotRenderer.js.map +1 -0
- package/esm/LinePlotRenderer/index.d.ts +3 -0
- package/esm/LinePlotRenderer/index.js +12 -0
- package/esm/LinePlotRenderer/index.js.map +1 -0
- package/esm/LinearWiggleDisplay/components/SetColorDialog.d.ts +10 -0
- package/esm/LinearWiggleDisplay/components/SetColorDialog.js +55 -0
- package/esm/LinearWiggleDisplay/components/SetColorDialog.js.map +1 -0
- package/esm/LinearWiggleDisplay/components/SetMinMaxDialog.d.ts +11 -0
- package/esm/LinearWiggleDisplay/components/SetMinMaxDialog.js +46 -0
- package/esm/LinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -0
- package/esm/LinearWiggleDisplay/components/Tooltip.d.ts +24 -0
- package/esm/LinearWiggleDisplay/components/Tooltip.js +107 -0
- package/esm/LinearWiggleDisplay/components/Tooltip.js.map +1 -0
- package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +8 -0
- package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.js +29 -0
- package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -0
- package/esm/LinearWiggleDisplay/components/YScaleBar.d.ts +7 -0
- package/esm/LinearWiggleDisplay/components/YScaleBar.js +9 -0
- package/esm/LinearWiggleDisplay/components/YScaleBar.js.map +1 -0
- package/esm/LinearWiggleDisplay/index.d.ts +3 -0
- package/esm/LinearWiggleDisplay/index.js +4 -0
- package/esm/LinearWiggleDisplay/index.js.map +1 -0
- package/esm/LinearWiggleDisplay/models/configSchema.d.ts +2 -0
- package/esm/LinearWiggleDisplay/models/configSchema.js +64 -0
- package/esm/LinearWiggleDisplay/models/configSchema.js.map +1 -0
- package/esm/LinearWiggleDisplay/models/model.d.ts +290 -0
- package/esm/LinearWiggleDisplay/models/model.js +495 -0
- package/esm/LinearWiggleDisplay/models/model.js.map +1 -0
- package/esm/WiggleBaseRenderer.d.ts +55 -0
- package/esm/WiggleBaseRenderer.js +34 -0
- package/esm/WiggleBaseRenderer.js.map +1 -0
- package/esm/WiggleRPC/rpcMethods.d.ts +31 -0
- package/esm/WiggleRPC/rpcMethods.js +70 -0
- package/esm/WiggleRPC/rpcMethods.js.map +1 -0
- package/esm/WiggleRendering.d.ts +16 -0
- package/esm/WiggleRendering.js +40 -0
- package/esm/WiggleRendering.js.map +1 -0
- package/esm/XYPlotRenderer/XYPlotRenderer.d.ts +4 -0
- package/esm/XYPlotRenderer/XYPlotRenderer.js +109 -0
- package/esm/XYPlotRenderer/XYPlotRenderer.js.map +1 -0
- package/esm/XYPlotRenderer/index.d.ts +3 -0
- package/esm/XYPlotRenderer/index.js +23 -0
- package/esm/XYPlotRenderer/index.js.map +1 -0
- package/esm/configSchema.d.ts +2 -0
- package/esm/configSchema.js +46 -0
- package/esm/configSchema.js.map +1 -0
- package/esm/index.d.ts +917 -0
- package/esm/index.js +115 -0
- package/esm/index.js.map +1 -0
- package/esm/util.d.ts +41 -0
- package/esm/util.js +123 -0
- package/esm/util.js.map +1 -0
- package/package.json +23 -15
- package/src/DensityRenderer/DensityRenderer.test.js +5 -0
- package/src/DensityRenderer/index.ts +1 -1
- package/src/LinePlotRenderer/LinePlotRenderer.js +1 -1
- package/src/LinePlotRenderer/index.js +7 -1
- package/src/LinearWiggleDisplay/components/SetColorDialog.tsx +10 -13
- package/src/LinearWiggleDisplay/components/SetMinMaxDialog.tsx +13 -11
- package/src/LinearWiggleDisplay/components/Tooltip.tsx +4 -3
- package/src/LinearWiggleDisplay/components/WiggleDisplayComponent.tsx +9 -4
- package/src/LinearWiggleDisplay/models/model.tsx +56 -65
- package/src/WiggleBaseRenderer.tsx +3 -3
- package/src/XYPlotRenderer/XYPlotRenderer.test.js +5 -0
- package/src/XYPlotRenderer/XYPlotRenderer.ts +87 -40
- package/src/XYPlotRenderer/index.ts +19 -2
- package/src/configSchema.ts +0 -23
- package/dist/BigWigAdapter/BigWigAdapter.test.js +0 -157
- package/dist/DensityRenderer/DensityRenderer.test.js +0 -84
- package/dist/LinePlotRenderer/configSchema.js +0 -70
- package/dist/WiggleRendering.test.js +0 -52
- package/dist/XYPlotRenderer/XYPlotRenderer.test.js +0 -83
- package/dist/declare.d.js +0 -1
- package/dist/index.test.js +0 -24
- package/dist/util.test.js +0 -66
- package/src/LinePlotRenderer/configSchema.js +0 -68
package/dist/util.js
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
2
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
+
if (!m) return o;
|
|
5
|
+
var i = m.call(o), r, ar = [], e;
|
|
6
|
+
try {
|
|
7
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
+
}
|
|
9
|
+
catch (error) { e = { error: error }; }
|
|
10
|
+
finally {
|
|
11
|
+
try {
|
|
12
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
+
}
|
|
14
|
+
finally { if (e) throw e.error; }
|
|
15
|
+
}
|
|
16
|
+
return ar;
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.getNiceDomain = exports.getOrigin = exports.getScale = void 0;
|
|
20
|
+
var d3_scale_1 = require("d3-scale");
|
|
16
21
|
/**
|
|
17
22
|
* produces a d3-scale from arguments. applies a "nice domain" adjustment
|
|
18
23
|
*
|
|
@@ -24,75 +29,60 @@ var _d3Scale = require("d3-scale");
|
|
|
24
29
|
* - pivotValue (number)
|
|
25
30
|
* - inverted (boolean)
|
|
26
31
|
*/
|
|
27
|
-
function getScale(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
scale
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
scale.domain(pivotValue !== undefined ? [min, pivotValue, max] : [min, max]);
|
|
57
|
-
scale.nice();
|
|
58
|
-
|
|
59
|
-
var _range = (0, _slicedToArray2.default)(range, 2),
|
|
60
|
-
rangeMin = _range[0],
|
|
61
|
-
rangeMax = _range[1];
|
|
62
|
-
|
|
63
|
-
if (rangeMin === undefined || rangeMax === undefined) {
|
|
64
|
-
throw new Error('invalid range');
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
scale.range(inverted ? range.slice().reverse() : range);
|
|
68
|
-
return scale;
|
|
32
|
+
function getScale(_a) {
|
|
33
|
+
var _b = _a.domain, domain = _b === void 0 ? [] : _b, _c = _a.range, range = _c === void 0 ? [] : _c, scaleType = _a.scaleType, pivotValue = _a.pivotValue, inverted = _a.inverted;
|
|
34
|
+
var scale;
|
|
35
|
+
var _d = __read(domain, 2), min = _d[0], max = _d[1];
|
|
36
|
+
if (min === undefined || max === undefined) {
|
|
37
|
+
throw new Error('invalid domain');
|
|
38
|
+
}
|
|
39
|
+
if (scaleType === 'linear') {
|
|
40
|
+
scale = (0, d3_scale_1.scaleLinear)();
|
|
41
|
+
}
|
|
42
|
+
else if (scaleType === 'log') {
|
|
43
|
+
scale = (0, d3_scale_1.scaleLog)();
|
|
44
|
+
scale.base(2);
|
|
45
|
+
}
|
|
46
|
+
else if (scaleType === 'quantize') {
|
|
47
|
+
scale = (0, d3_scale_1.scaleQuantize)();
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
throw new Error('undefined scaleType');
|
|
51
|
+
}
|
|
52
|
+
scale.domain(pivotValue !== undefined ? [min, pivotValue, max] : [min, max]);
|
|
53
|
+
scale.nice();
|
|
54
|
+
var _e = __read(range, 2), rangeMin = _e[0], rangeMax = _e[1];
|
|
55
|
+
if (rangeMin === undefined || rangeMax === undefined) {
|
|
56
|
+
throw new Error('invalid range');
|
|
57
|
+
}
|
|
58
|
+
scale.range(inverted ? range.slice().reverse() : range);
|
|
59
|
+
return scale;
|
|
69
60
|
}
|
|
61
|
+
exports.getScale = getScale;
|
|
70
62
|
/**
|
|
71
63
|
* gets the origin for drawing the graph. for linear this is 0, for log this is arbitrarily set to log(1)==0
|
|
72
64
|
*
|
|
73
65
|
* @param scaleType -
|
|
74
66
|
*/
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return 0;
|
|
67
|
+
function getOrigin(scaleType /* , pivot, stats */) {
|
|
68
|
+
// if (pivot) {
|
|
69
|
+
// if (pivot === 'mean') {
|
|
70
|
+
// return stats.scoreMean || 0
|
|
71
|
+
// }
|
|
72
|
+
// if (pivot === 'zero') {
|
|
73
|
+
// return 0
|
|
74
|
+
// }
|
|
75
|
+
// return parseFloat()
|
|
76
|
+
// }
|
|
77
|
+
// if (scaleType === 'z_score') {
|
|
78
|
+
// return stats.scoreMean || 0
|
|
79
|
+
// }
|
|
80
|
+
if (scaleType === 'log') {
|
|
81
|
+
return 1;
|
|
82
|
+
}
|
|
83
|
+
return 0;
|
|
95
84
|
}
|
|
85
|
+
exports.getOrigin = getOrigin;
|
|
96
86
|
/**
|
|
97
87
|
* produces a "nice" domain that actually rounds down to 0 for the min
|
|
98
88
|
* or 0 to the max depending on if all values are positive or negative
|
|
@@ -104,75 +94,54 @@ function getOrigin(scaleType) {
|
|
|
104
94
|
* - stddev
|
|
105
95
|
* - scaleType (linear or log)
|
|
106
96
|
*/
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
var _domain2 = (0, _slicedToArray2.default)(domain, 2),
|
|
119
|
-
min = _domain2[0],
|
|
120
|
-
max = _domain2[1];
|
|
121
|
-
|
|
122
|
-
if (scaleType === 'linear') {
|
|
123
|
-
if (max < 0) {
|
|
124
|
-
max = 0;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
if (min > 0) {
|
|
128
|
-
min = 0;
|
|
97
|
+
function getNiceDomain(_a) {
|
|
98
|
+
var scaleType = _a.scaleType, domain = _a.domain, bounds = _a.bounds;
|
|
99
|
+
var _b = __read(bounds, 2), minScore = _b[0], maxScore = _b[1];
|
|
100
|
+
var _c = __read(domain, 2), min = _c[0], max = _c[1];
|
|
101
|
+
if (scaleType === 'linear') {
|
|
102
|
+
if (max < 0) {
|
|
103
|
+
max = 0;
|
|
104
|
+
}
|
|
105
|
+
if (min > 0) {
|
|
106
|
+
min = 0;
|
|
107
|
+
}
|
|
129
108
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
min = 1;
|
|
109
|
+
if (scaleType === 'log') {
|
|
110
|
+
// if the min is 0, assume that it's just something
|
|
111
|
+
// with no read coverage and that we should ignore it in calculations
|
|
112
|
+
// if it's greater than 1 pin to 1 for the full range also
|
|
113
|
+
// otherwise, we may see bigwigs with fractional values
|
|
114
|
+
if (min === 0 || min > 1) {
|
|
115
|
+
min = 1;
|
|
116
|
+
}
|
|
139
117
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
if (min === undefined || max === undefined) {
|
|
143
|
-
throw new Error('invalid domain supplied to stats function');
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (minScore !== undefined && minScore !== Number.MIN_VALUE) {
|
|
147
|
-
min = minScore;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
if (maxScore !== undefined && maxScore !== Number.MAX_VALUE) {
|
|
151
|
-
max = maxScore;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
var getScaleType = function getScaleType(type) {
|
|
155
|
-
if (type === 'linear') {
|
|
156
|
-
return (0, _d3Scale.scaleLinear)();
|
|
118
|
+
if (min === undefined || max === undefined) {
|
|
119
|
+
throw new Error('invalid domain supplied to stats function');
|
|
157
120
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
var _scale = (0, _d3Scale.scaleLog)();
|
|
161
|
-
|
|
162
|
-
_scale.base(2);
|
|
163
|
-
|
|
164
|
-
return _scale;
|
|
121
|
+
if (minScore !== undefined && minScore !== Number.MIN_VALUE) {
|
|
122
|
+
min = minScore;
|
|
165
123
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
return (0, _d3Scale.scaleQuantize)();
|
|
124
|
+
if (maxScore !== undefined && maxScore !== Number.MAX_VALUE) {
|
|
125
|
+
max = maxScore;
|
|
169
126
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
}
|
|
127
|
+
var getScaleType = function (type) {
|
|
128
|
+
if (type === 'linear') {
|
|
129
|
+
return (0, d3_scale_1.scaleLinear)();
|
|
130
|
+
}
|
|
131
|
+
if (type === 'log') {
|
|
132
|
+
var scale_1 = (0, d3_scale_1.scaleLog)();
|
|
133
|
+
scale_1.base(2);
|
|
134
|
+
return scale_1;
|
|
135
|
+
}
|
|
136
|
+
if (type === 'quantize') {
|
|
137
|
+
return (0, d3_scale_1.scaleQuantize)();
|
|
138
|
+
}
|
|
139
|
+
throw new Error("undefined scaleType ".concat(type));
|
|
140
|
+
};
|
|
141
|
+
var scale = getScaleType(scaleType);
|
|
142
|
+
scale.domain([min, max]);
|
|
143
|
+
scale.nice();
|
|
144
|
+
return scale.domain();
|
|
145
|
+
}
|
|
146
|
+
exports.getNiceDomain = getNiceDomain;
|
|
147
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
2
|
+
import { AugmentedRegion as Region } from '@jbrowse/core/util/types';
|
|
3
|
+
import { Feature } from '@jbrowse/core/util/simpleFeature';
|
|
4
|
+
import { AnyConfigurationModel } from '@jbrowse/core/configuration/configurationSchema';
|
|
5
|
+
import PluginManager from '@jbrowse/core/PluginManager';
|
|
6
|
+
import { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache';
|
|
7
|
+
interface WiggleOptions extends BaseOptions {
|
|
8
|
+
resolution?: number;
|
|
9
|
+
}
|
|
10
|
+
export default class BigWigAdapter extends BaseFeatureDataAdapter {
|
|
11
|
+
private bigwig;
|
|
12
|
+
static capabilities: string[];
|
|
13
|
+
constructor(config: AnyConfigurationModel, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager);
|
|
14
|
+
private setup;
|
|
15
|
+
getRefNames(opts?: BaseOptions): Promise<string[]>;
|
|
16
|
+
refIdToName(refId: number): Promise<any>;
|
|
17
|
+
getGlobalStats(opts?: BaseOptions): Promise<import("@jbrowse/core/util/stats").FeatureStats>;
|
|
18
|
+
getFeatures(region: Region, opts?: WiggleOptions): import("rxjs").Observable<Feature>;
|
|
19
|
+
estimateRegionsStats(_regions: Region[]): Promise<{
|
|
20
|
+
featureDensity: number;
|
|
21
|
+
}>;
|
|
22
|
+
freeResources(): void;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { BigWig } from '@gmod/bbi';
|
|
2
|
+
import { BaseFeatureDataAdapter, } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
3
|
+
import { openLocation } from '@jbrowse/core/util/io';
|
|
4
|
+
import { updateStatus } from '@jbrowse/core/util';
|
|
5
|
+
import { ObservableCreate } from '@jbrowse/core/util/rxjs';
|
|
6
|
+
import SimpleFeature from '@jbrowse/core/util/simpleFeature';
|
|
7
|
+
import { map, mergeAll } from 'rxjs/operators';
|
|
8
|
+
import { readConfObject } from '@jbrowse/core/configuration';
|
|
9
|
+
import { rectifyStats } from '@jbrowse/core/util/stats';
|
|
10
|
+
export default class BigWigAdapter extends BaseFeatureDataAdapter {
|
|
11
|
+
constructor(config, getSubAdapter, pluginManager) {
|
|
12
|
+
super(config, getSubAdapter, pluginManager);
|
|
13
|
+
this.bigwig = new BigWig({
|
|
14
|
+
filehandle: openLocation(readConfObject(config, 'bigWigLocation'), this.pluginManager),
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async setup(opts) {
|
|
18
|
+
const { statusCallback = () => { } } = opts || {};
|
|
19
|
+
return updateStatus('Downloading bigwig header', statusCallback, () => this.bigwig.getHeader(opts));
|
|
20
|
+
}
|
|
21
|
+
async getRefNames(opts) {
|
|
22
|
+
const { refsByName } = await this.setup(opts);
|
|
23
|
+
return Object.keys(refsByName);
|
|
24
|
+
}
|
|
25
|
+
async refIdToName(refId) {
|
|
26
|
+
var _a;
|
|
27
|
+
const { refsByNumber } = await this.setup();
|
|
28
|
+
return (_a = refsByNumber[refId]) === null || _a === void 0 ? void 0 : _a.name;
|
|
29
|
+
}
|
|
30
|
+
async getGlobalStats(opts) {
|
|
31
|
+
const { totalSummary } = await this.setup(opts);
|
|
32
|
+
return rectifyStats(totalSummary);
|
|
33
|
+
}
|
|
34
|
+
getFeatures(region, opts = {}) {
|
|
35
|
+
const { refName, start, end } = region;
|
|
36
|
+
const { bpPerPx = 0, signal, resolution = 1, statusCallback = () => { }, } = opts;
|
|
37
|
+
return ObservableCreate(async (observer) => {
|
|
38
|
+
statusCallback('Downloading bigwig data');
|
|
39
|
+
const ob = await this.bigwig.getFeatureStream(refName, start, end, {
|
|
40
|
+
...opts,
|
|
41
|
+
basesPerSpan: bpPerPx / resolution,
|
|
42
|
+
});
|
|
43
|
+
ob.pipe(mergeAll(), map(record => {
|
|
44
|
+
return new SimpleFeature({
|
|
45
|
+
id: `${refName}:${record.start}-${record.end}`,
|
|
46
|
+
data: { ...record, refName },
|
|
47
|
+
});
|
|
48
|
+
})).subscribe(observer);
|
|
49
|
+
}, signal);
|
|
50
|
+
}
|
|
51
|
+
// always render bigwig instead of calculating a feature density for it
|
|
52
|
+
async estimateRegionsStats(_regions) {
|
|
53
|
+
return { featureDensity: 0 };
|
|
54
|
+
}
|
|
55
|
+
freeResources() { }
|
|
56
|
+
}
|
|
57
|
+
BigWigAdapter.capabilities = [
|
|
58
|
+
'hasResolution',
|
|
59
|
+
'hasLocalStats',
|
|
60
|
+
'hasGlobalStats',
|
|
61
|
+
];
|
|
62
|
+
//# sourceMappingURL=BigWigAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BigWigAdapter.js","sourceRoot":"","sources":["../../src/BigWigAdapter/BigWigAdapter.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ConfigurationSchema } from '@jbrowse/core/configuration';
|
|
2
|
+
export default ConfigurationSchema('BigWigAdapter', {
|
|
3
|
+
bigWigLocation: {
|
|
4
|
+
type: 'fileLocation',
|
|
5
|
+
defaultValue: {
|
|
6
|
+
uri: '/path/to/my.bw',
|
|
7
|
+
locationType: 'UriLocation',
|
|
8
|
+
},
|
|
9
|
+
},
|
|
10
|
+
}, { explicitlyTyped: true });
|
|
11
|
+
//# sourceMappingURL=configSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/BigWigAdapter/configSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,eAAe,mBAAmB,CAChC,eAAe,EACf;IACE,cAAc,EAAE;QACd,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE;YACZ,GAAG,EAAE,gBAAgB;YACrB,YAAY,EAAE,aAAa;SAC5B;KACF;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as configSchema } from './configSchema';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/BigWigAdapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import WiggleBaseRenderer, { RenderArgsDeserializedWithFeatures } from '../WiggleBaseRenderer';
|
|
2
|
+
export { default as ReactComponent } from '../WiggleRendering';
|
|
3
|
+
export default class DensityRenderer extends WiggleBaseRenderer {
|
|
4
|
+
draw(ctx: CanvasRenderingContext2D, props: RenderArgsDeserializedWithFeatures): Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
export declare const configSchema: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { readConfObject, ConfigurationSchema, } from '@jbrowse/core/configuration';
|
|
2
|
+
import { featureSpanPx } from '@jbrowse/core/util';
|
|
3
|
+
import { getScale } from '../util';
|
|
4
|
+
import ConfigSchema from '../configSchema';
|
|
5
|
+
import WiggleBaseRenderer from '../WiggleBaseRenderer';
|
|
6
|
+
export { default as ReactComponent } from '../WiggleRendering';
|
|
7
|
+
export default class DensityRenderer extends WiggleBaseRenderer {
|
|
8
|
+
async draw(ctx, props) {
|
|
9
|
+
const { features, regions, bpPerPx, scaleOpts, height, config } = props;
|
|
10
|
+
const [region] = regions;
|
|
11
|
+
const pivot = readConfObject(config, 'bicolorPivot');
|
|
12
|
+
const pivotValue = readConfObject(config, 'bicolorPivotValue');
|
|
13
|
+
const negColor = readConfObject(config, 'negColor');
|
|
14
|
+
const posColor = readConfObject(config, 'posColor');
|
|
15
|
+
const color = readConfObject(config, 'color');
|
|
16
|
+
let colorCallback;
|
|
17
|
+
if (color === '#f0f') {
|
|
18
|
+
const colorScale = pivot !== 'none'
|
|
19
|
+
? getScale({
|
|
20
|
+
...scaleOpts,
|
|
21
|
+
pivotValue,
|
|
22
|
+
range: [negColor, 'white', posColor],
|
|
23
|
+
})
|
|
24
|
+
: getScale({ ...scaleOpts, range: ['white', posColor] });
|
|
25
|
+
colorCallback = (feature) => colorScale(feature.get('score'));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
colorCallback = (feature) => readConfObject(config, 'color', { feature });
|
|
29
|
+
}
|
|
30
|
+
for (const feature of features.values()) {
|
|
31
|
+
const [leftPx, rightPx] = featureSpanPx(feature, region, bpPerPx);
|
|
32
|
+
const w = rightPx - leftPx + 0.3; // fudge factor for subpixel rendering
|
|
33
|
+
ctx.fillStyle = colorCallback(feature);
|
|
34
|
+
ctx.fillRect(leftPx, 0, w, height);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export const configSchema = ConfigurationSchema('DensityRenderer', {}, { baseConfiguration: ConfigSchema, explicitlyTyped: true });
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/DensityRenderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,GACpB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,OAAO,YAAY,MAAM,iBAAiB,CAAA;AAC1C,OAAO,kBAEN,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAE9D,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,kBAAkB;IAC7D,KAAK,CAAC,IAAI,CACR,GAA6B,EAC7B,KAAyC;QAEzC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;QACvE,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAA;QACxB,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;QACpD,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;QAC9D,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QACnD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC7C,IAAI,aAAa,CAAA;QACjB,IAAI,KAAK,KAAK,MAAM,EAAE;YACpB,MAAM,UAAU,GACd,KAAK,KAAK,MAAM;gBACd,CAAC,CAAC,QAAQ,CAAC;oBACP,GAAG,SAAS;oBACZ,UAAU;oBACV,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;iBACrC,CAAC;gBACJ,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;YAC5D,aAAa,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;SACvE;aAAM;YACL,aAAa,GAAG,CAAC,OAAgB,EAAE,EAAE,CACnC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;SAC/C;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE;YACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;YACjE,MAAM,CAAC,GAAG,OAAO,GAAG,MAAM,GAAG,GAAG,CAAA,CAAC,sCAAsC;YACvE,GAAG,CAAC,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;YACtC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;SACnC;IACH,CAAC;CACF;AACD,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAC7C,iBAAiB,EACjB,EAAE,EACF,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,CAC3D,CAAA"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { readConfObject } from '@jbrowse/core/configuration';
|
|
2
|
+
import { featureSpanPx } from '@jbrowse/core/util';
|
|
3
|
+
import { getScale } from '../util';
|
|
4
|
+
import WiggleBaseRenderer from '../WiggleBaseRenderer';
|
|
5
|
+
import { YSCALEBAR_LABEL_OFFSET } from '../LinearWiggleDisplay/models/model';
|
|
6
|
+
export default class LinePlotRenderer extends WiggleBaseRenderer {
|
|
7
|
+
async draw(ctx, props) {
|
|
8
|
+
const { features, regions, bpPerPx, scaleOpts, height: unadjustedHeight, ticks: { values }, displayCrossHatches, config, } = props;
|
|
9
|
+
const [region] = regions;
|
|
10
|
+
const width = (region.end - region.start) / bpPerPx;
|
|
11
|
+
const offset = YSCALEBAR_LABEL_OFFSET;
|
|
12
|
+
// the adjusted height takes into account YSCALEBAR_LABEL_OFFSET from the
|
|
13
|
+
// wiggle display, and makes the height of the actual drawn area add
|
|
14
|
+
// "padding" to the top and bottom of the display
|
|
15
|
+
const height = unadjustedHeight - offset * 2;
|
|
16
|
+
const clipColor = readConfObject(config, 'clipColor');
|
|
17
|
+
const highlightColor = readConfObject(config, 'highlightColor');
|
|
18
|
+
const scale = getScale({ ...scaleOpts, range: [0, height] });
|
|
19
|
+
const [niceMin, niceMax] = scale.domain();
|
|
20
|
+
const toY = rawscore => height - scale(rawscore) + offset;
|
|
21
|
+
const colorCallback = readConfObject(config, 'color') === '#f0f'
|
|
22
|
+
? () => 'grey'
|
|
23
|
+
: feature => readConfObject(config, 'color', { feature });
|
|
24
|
+
let lastVal;
|
|
25
|
+
for (const feature of features.values()) {
|
|
26
|
+
const [leftPx, rightPx] = featureSpanPx(feature, region, bpPerPx);
|
|
27
|
+
const score = feature.get('score');
|
|
28
|
+
const lowClipping = score < niceMin;
|
|
29
|
+
const highClipping = score > niceMax;
|
|
30
|
+
const w = rightPx - leftPx + 0.3; // fudge factor for subpixel rendering
|
|
31
|
+
const c = colorCallback(feature);
|
|
32
|
+
ctx.strokeStyle = c;
|
|
33
|
+
ctx.beginPath();
|
|
34
|
+
if (!region.reversed) {
|
|
35
|
+
ctx.moveTo(leftPx, toY(typeof lastVal !== 'undefined' ? lastVal : score));
|
|
36
|
+
ctx.lineTo(leftPx, toY(score));
|
|
37
|
+
ctx.lineTo(rightPx, toY(score));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
ctx.moveTo(rightPx, toY(typeof lastVal !== 'undefined' ? lastVal : score));
|
|
41
|
+
ctx.lineTo(rightPx, toY(score));
|
|
42
|
+
ctx.lineTo(leftPx, toY(score));
|
|
43
|
+
}
|
|
44
|
+
ctx.stroke();
|
|
45
|
+
lastVal = score;
|
|
46
|
+
if (highClipping) {
|
|
47
|
+
ctx.fillStyle = clipColor;
|
|
48
|
+
ctx.fillRect(leftPx, 0, w, 4);
|
|
49
|
+
}
|
|
50
|
+
else if (lowClipping && scaleOpts.scaleType !== 'log') {
|
|
51
|
+
ctx.fillStyle = clipColor;
|
|
52
|
+
ctx.fillRect(leftPx, height - 4, w, height);
|
|
53
|
+
}
|
|
54
|
+
if (feature.get('highlighted')) {
|
|
55
|
+
ctx.fillStyle = highlightColor;
|
|
56
|
+
ctx.fillRect(leftPx, 0, w, height);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (displayCrossHatches) {
|
|
60
|
+
ctx.lineWidth = 1;
|
|
61
|
+
ctx.strokeStyle = 'rgba(200,200,200,0.8)';
|
|
62
|
+
values.forEach(tick => {
|
|
63
|
+
ctx.beginPath();
|
|
64
|
+
ctx.moveTo(0, Math.round(toY(tick)));
|
|
65
|
+
ctx.lineTo(width, Math.round(toY(tick)));
|
|
66
|
+
ctx.stroke();
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=LinePlotRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinePlotRenderer.js","sourceRoot":"","sources":["../../src/LinePlotRenderer/LinePlotRenderer.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ConfigurationSchema } from '@jbrowse/core/configuration';
|
|
2
|
+
import ConfigSchema from '../configSchema';
|
|
3
|
+
export { default as ReactComponent } from '../WiggleRendering';
|
|
4
|
+
export { default } from './LinePlotRenderer';
|
|
5
|
+
export const configSchema = ConfigurationSchema('LinePlotRenderer', {
|
|
6
|
+
displayCrossHatches: {
|
|
7
|
+
type: 'boolean',
|
|
8
|
+
description: 'choose to draw cross hatches (sideways lines)',
|
|
9
|
+
defaultValue: false,
|
|
10
|
+
},
|
|
11
|
+
}, { baseConfiguration: ConfigSchema, explicitlyTyped: true });
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/LinePlotRenderer/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,YAAY,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAC7C,kBAAkB,EAClB;IACE,mBAAmB,EAAE;QACnB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,+CAA+C;QAC5D,YAAY,EAAE,KAAK;KACpB;CACF,EACD,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,CAC3D,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export default function SetColorDialog({ model, handleClose, }: {
|
|
3
|
+
model: {
|
|
4
|
+
color: number;
|
|
5
|
+
setColor: (arg?: string) => void;
|
|
6
|
+
setPosColor: (arg?: string) => void;
|
|
7
|
+
setNegColor: (arg?: string) => void;
|
|
8
|
+
};
|
|
9
|
+
handleClose: () => void;
|
|
10
|
+
}): JSX.Element;
|