@jbrowse/plugin-bed 2.16.1 → 2.18.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/dist/BedAdapter/BedAdapter.d.ts +15 -5
- package/dist/BedAdapter/BedAdapter.js +17 -13
- package/dist/BedAdapter/configSchema.d.ts +0 -21
- package/dist/BedAdapter/configSchema.js +1 -25
- package/dist/BedAdapter/index.d.ts +1 -1
- package/dist/BedGraphAdapter/BedGraphAdapter.d.ts +24 -0
- package/dist/BedGraphAdapter/BedGraphAdapter.js +130 -0
- package/dist/BedGraphAdapter/configSchema.d.ts +15 -0
- package/dist/BedGraphAdapter/configSchema.js +19 -0
- package/dist/BedGraphAdapter/index.d.ts +2 -0
- package/dist/BedGraphAdapter/index.js +39 -0
- package/dist/BedGraphTabixAdapter/BedGraphTabixAdapter.d.ts +18 -0
- package/dist/BedGraphTabixAdapter/BedGraphTabixAdapter.js +105 -0
- package/dist/BedGraphTabixAdapter/configSchema.d.ts +29 -0
- package/dist/BedGraphTabixAdapter/configSchema.js +34 -0
- package/dist/BedGraphTabixAdapter/index.d.ts +2 -0
- package/dist/BedGraphTabixAdapter/index.js +39 -0
- package/dist/BedTabixAdapter/BedTabixAdapter.d.ts +6 -5
- package/dist/BedTabixAdapter/BedTabixAdapter.js +23 -9
- package/dist/BedTabixAdapter/configSchema.d.ts +0 -18
- package/dist/BedTabixAdapter/configSchema.js +1 -22
- package/dist/BedTabixAdapter/index.d.ts +1 -1
- package/dist/BedpeAdapter/BedpeAdapter.d.ts +4 -2
- package/dist/BedpeAdapter/BedpeAdapter.js +7 -9
- package/dist/BedpeAdapter/configSchema.d.ts +0 -7
- package/dist/BedpeAdapter/configSchema.js +1 -12
- package/dist/BedpeAdapter/index.d.ts +1 -1
- package/dist/BigBedAdapter/BigBedAdapter.d.ts +14 -6
- package/dist/BigBedAdapter/BigBedAdapter.js +72 -62
- package/dist/BigBedAdapter/configSchema.d.ts +0 -9
- package/dist/BigBedAdapter/configSchema.js +1 -13
- package/dist/BigBedAdapter/index.d.ts +1 -1
- package/dist/generateBedMethylFeature.d.ts +31 -0
- package/dist/generateBedMethylFeature.js +30 -0
- package/dist/generateRepeatMaskerFeature.d.ts +51 -0
- package/dist/generateRepeatMaskerFeature.js +41 -0
- package/dist/generateUcscTranscript.d.ts +15 -0
- package/dist/generateUcscTranscript.js +95 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +8 -4
- package/dist/types.d.ts +18 -0
- package/dist/types.js +2 -0
- package/dist/util.d.ts +184 -29
- package/dist/util.js +134 -156
- package/esm/BedAdapter/BedAdapter.d.ts +15 -5
- package/esm/BedAdapter/BedAdapter.js +18 -14
- package/esm/BedAdapter/configSchema.d.ts +0 -21
- package/esm/BedAdapter/configSchema.js +1 -25
- package/esm/BedAdapter/index.d.ts +1 -1
- package/esm/BedGraphAdapter/BedGraphAdapter.d.ts +24 -0
- package/esm/BedGraphAdapter/BedGraphAdapter.js +124 -0
- package/esm/BedGraphAdapter/configSchema.d.ts +15 -0
- package/esm/BedGraphAdapter/configSchema.js +17 -0
- package/esm/BedGraphAdapter/index.d.ts +2 -0
- package/esm/BedGraphAdapter/index.js +10 -0
- package/esm/BedGraphTabixAdapter/BedGraphTabixAdapter.d.ts +18 -0
- package/esm/BedGraphTabixAdapter/BedGraphTabixAdapter.js +102 -0
- package/esm/BedGraphTabixAdapter/configSchema.d.ts +29 -0
- package/esm/BedGraphTabixAdapter/configSchema.js +32 -0
- package/esm/BedGraphTabixAdapter/index.d.ts +2 -0
- package/esm/BedGraphTabixAdapter/index.js +10 -0
- package/esm/BedTabixAdapter/BedTabixAdapter.d.ts +6 -5
- package/esm/BedTabixAdapter/BedTabixAdapter.js +23 -9
- package/esm/BedTabixAdapter/configSchema.d.ts +0 -18
- package/esm/BedTabixAdapter/configSchema.js +1 -22
- package/esm/BedTabixAdapter/index.d.ts +1 -1
- package/esm/BedpeAdapter/BedpeAdapter.d.ts +4 -2
- package/esm/BedpeAdapter/BedpeAdapter.js +8 -10
- package/esm/BedpeAdapter/configSchema.d.ts +0 -7
- package/esm/BedpeAdapter/configSchema.js +1 -12
- package/esm/BedpeAdapter/index.d.ts +1 -1
- package/esm/BigBedAdapter/BigBedAdapter.d.ts +14 -6
- package/esm/BigBedAdapter/BigBedAdapter.js +74 -64
- package/esm/BigBedAdapter/configSchema.d.ts +0 -9
- package/esm/BigBedAdapter/configSchema.js +1 -13
- package/esm/BigBedAdapter/index.d.ts +1 -1
- package/esm/generateBedMethylFeature.d.ts +31 -0
- package/esm/generateBedMethylFeature.js +26 -0
- package/esm/generateRepeatMaskerFeature.d.ts +51 -0
- package/esm/generateRepeatMaskerFeature.js +37 -0
- package/esm/generateUcscTranscript.d.ts +15 -0
- package/esm/generateUcscTranscript.js +91 -0
- package/esm/index.d.ts +1 -1
- package/esm/index.js +8 -4
- package/esm/types.d.ts +18 -0
- package/esm/types.js +1 -0
- package/esm/util.d.ts +184 -29
- package/esm/util.js +132 -154
- package/package.json +2 -2
package/dist/util.js
CHANGED
|
@@ -1,179 +1,157 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ucscProcessedTranscript = ucscProcessedTranscript;
|
|
4
3
|
exports.makeBlocks = makeBlocks;
|
|
5
4
|
exports.featureData = featureData;
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
.forEach(block => {
|
|
18
|
-
const start = block.start;
|
|
19
|
-
const end = block.end;
|
|
20
|
-
if (thickStart >= end) {
|
|
21
|
-
// left-side UTR
|
|
22
|
-
const prime = strand > 0 ? 'five' : 'three';
|
|
23
|
-
subfeatures.push({
|
|
24
|
-
type: `${prime}_prime_UTR`,
|
|
25
|
-
start,
|
|
26
|
-
end,
|
|
27
|
-
refName,
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
else if (thickStart > start && thickStart < end && thickEnd >= end) {
|
|
31
|
-
// UTR | CDS
|
|
32
|
-
const prime = strand > 0 ? 'five' : 'three';
|
|
33
|
-
subfeatures.push({
|
|
34
|
-
type: `${prime}_prime_UTR`,
|
|
35
|
-
start,
|
|
36
|
-
end: thickStart,
|
|
37
|
-
refName,
|
|
38
|
-
}, {
|
|
39
|
-
type: 'CDS',
|
|
40
|
-
start: thickStart,
|
|
41
|
-
end,
|
|
42
|
-
refName,
|
|
43
|
-
});
|
|
5
|
+
exports.featureData2 = featureData2;
|
|
6
|
+
exports.arrayify = arrayify;
|
|
7
|
+
const generateBedMethylFeature_1 = require("./generateBedMethylFeature");
|
|
8
|
+
const generateRepeatMaskerFeature_1 = require("./generateRepeatMaskerFeature");
|
|
9
|
+
const generateUcscTranscript_1 = require("./generateUcscTranscript");
|
|
10
|
+
function defaultParser(fields, splitLine) {
|
|
11
|
+
let hasBlockCount = false;
|
|
12
|
+
const r = [];
|
|
13
|
+
for (let i = 0; i < splitLine.length; i++) {
|
|
14
|
+
if (fields[i] === 'blockCount') {
|
|
15
|
+
hasBlockCount = true;
|
|
44
16
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}, {
|
|
64
|
-
type: 'CDS',
|
|
65
|
-
start: thickStart,
|
|
66
|
-
end: thickEnd,
|
|
67
|
-
refName,
|
|
68
|
-
}, {
|
|
69
|
-
type: `${rightPrime}_prime_UTR`,
|
|
70
|
-
start: thickEnd,
|
|
71
|
-
end,
|
|
72
|
-
refName,
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
else if (thickStart <= start && thickEnd > start && thickEnd < end) {
|
|
76
|
-
// CDS | UTR
|
|
77
|
-
const prime = strand > 0 ? 'three' : 'five';
|
|
78
|
-
subfeatures.push({
|
|
79
|
-
type: 'CDS',
|
|
80
|
-
start,
|
|
81
|
-
end: thickEnd,
|
|
82
|
-
refName,
|
|
83
|
-
}, {
|
|
84
|
-
type: `${prime}_prime_UTR`,
|
|
85
|
-
start: thickEnd,
|
|
86
|
-
end,
|
|
87
|
-
refName,
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
else if (thickEnd <= start) {
|
|
91
|
-
// right-side UTR
|
|
92
|
-
const prime = strand > 0 ? 'three' : 'five';
|
|
93
|
-
subfeatures.push({
|
|
94
|
-
type: `${prime}_prime_UTR`,
|
|
95
|
-
start,
|
|
96
|
-
end,
|
|
97
|
-
refName,
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
return { ...rest, strand, type: 'mRNA', refName, subfeatures };
|
|
102
|
-
}
|
|
103
|
-
function defaultParser(fields, line) {
|
|
104
|
-
const obj = Object.fromEntries(line.split('\t').map((f, i) => [fields[i], f]));
|
|
105
|
-
const { blockStarts, blockCount, chromStarts, thickEnd, thickStart, blockSizes, ...rest } = obj;
|
|
106
|
-
return {
|
|
107
|
-
...rest,
|
|
108
|
-
blockStarts: blockStarts === null || blockStarts === void 0 ? void 0 : blockStarts.split(',').map(r => +r),
|
|
109
|
-
chromStarts: chromStarts === null || chromStarts === void 0 ? void 0 : chromStarts.split(',').map(r => +r),
|
|
110
|
-
blockSizes: blockSizes === null || blockSizes === void 0 ? void 0 : blockSizes.split(',').map(r => +r),
|
|
111
|
-
thickStart: thickStart ? +thickStart : undefined,
|
|
112
|
-
thickEnd: thickEnd ? +thickEnd : undefined,
|
|
113
|
-
blockCount: blockCount ? +blockCount : undefined,
|
|
114
|
-
};
|
|
17
|
+
r.push([fields[i], splitLine[i]]);
|
|
18
|
+
}
|
|
19
|
+
const obj = Object.fromEntries(r);
|
|
20
|
+
if (hasBlockCount) {
|
|
21
|
+
const { blockStarts, blockCount, chromStarts, thickEnd, thickStart, blockSizes, ...rest } = obj;
|
|
22
|
+
return {
|
|
23
|
+
...rest,
|
|
24
|
+
blockStarts: arrayify(blockStarts),
|
|
25
|
+
chromStarts: arrayify(chromStarts),
|
|
26
|
+
blockSizes: arrayify(blockSizes),
|
|
27
|
+
thickStart: thickStart ? +thickStart : undefined,
|
|
28
|
+
thickEnd: thickEnd ? +thickEnd : undefined,
|
|
29
|
+
blockCount: blockCount ? +blockCount : undefined,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return obj;
|
|
34
|
+
}
|
|
115
35
|
}
|
|
116
36
|
function makeBlocks({ start, uniqueId, refName, chromStarts, blockCount, blockSizes, blockStarts, }) {
|
|
117
37
|
const subfeatures = [];
|
|
118
38
|
const starts = chromStarts || blockStarts || [];
|
|
119
39
|
for (let b = 0; b < blockCount; b++) {
|
|
120
40
|
const bmin = (starts[b] || 0) + start;
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
41
|
+
const bsize = blockSizes === null || blockSizes === void 0 ? void 0 : blockSizes[b];
|
|
42
|
+
if (bsize && bsize > 0) {
|
|
43
|
+
const bmax = bmin + bsize;
|
|
44
|
+
subfeatures.push({
|
|
45
|
+
uniqueId: `${uniqueId}-${b}`,
|
|
46
|
+
start: bmin,
|
|
47
|
+
end: bmax,
|
|
48
|
+
refName,
|
|
49
|
+
type: 'block',
|
|
50
|
+
});
|
|
51
|
+
}
|
|
129
52
|
}
|
|
130
53
|
return subfeatures;
|
|
131
54
|
}
|
|
132
|
-
function featureData(line, colRef, colStart, colEnd, scoreColumn, parser, uniqueId, names) {
|
|
133
|
-
const
|
|
134
|
-
const refName =
|
|
135
|
-
const start =
|
|
136
|
-
const
|
|
137
|
-
|
|
55
|
+
function featureData({ line, colRef, colStart, colEnd, scoreColumn, parser, uniqueId, names, }) {
|
|
56
|
+
const splitLine = line.split('\t');
|
|
57
|
+
const refName = splitLine[colRef];
|
|
58
|
+
const start = Number.parseInt(splitLine[colStart], 10);
|
|
59
|
+
const end = Number.parseInt(splitLine[colEnd], 10) + (colStart === colEnd ? 1 : 0);
|
|
60
|
+
return featureData2({
|
|
61
|
+
splitLine,
|
|
62
|
+
refName,
|
|
63
|
+
start,
|
|
64
|
+
end,
|
|
65
|
+
parser,
|
|
66
|
+
uniqueId,
|
|
67
|
+
scoreColumn,
|
|
68
|
+
names,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function featureData2({ splitLine, refName, start, end, parser, uniqueId, scoreColumn, names, }) {
|
|
138
72
|
const data = names
|
|
139
|
-
? defaultParser(names,
|
|
140
|
-
: parser.parseLine(
|
|
141
|
-
const {
|
|
142
|
-
const
|
|
73
|
+
? defaultParser(names, splitLine)
|
|
74
|
+
: parser.parseLine(splitLine, { uniqueId });
|
|
75
|
+
const { strand: strand2, score: score2, chrom: _1, chromStart: _2, chromEnd: _3, ...rest } = data;
|
|
76
|
+
const score = scoreColumn ? +data[scoreColumn] : score2 ? +score2 : undefined;
|
|
77
|
+
const strand = typeof strand2 === 'string' ? (strand2 === '-' ? -1 : 1) : strand2;
|
|
78
|
+
const subfeatures = rest.blockCount
|
|
143
79
|
? makeBlocks({
|
|
144
80
|
start,
|
|
145
81
|
uniqueId,
|
|
146
82
|
refName,
|
|
83
|
+
chromStarts: rest.chromStarts,
|
|
84
|
+
blockCount: rest.blockCount,
|
|
85
|
+
blockSizes: rest.blockSizes,
|
|
86
|
+
blockStarts: rest.blockStarts,
|
|
87
|
+
})
|
|
88
|
+
: undefined;
|
|
89
|
+
if ((0, generateBedMethylFeature_1.isBedMethylFeature)({ splitLine, start, end })) {
|
|
90
|
+
return (0, generateBedMethylFeature_1.generateBedMethylFeature)({
|
|
91
|
+
splitLine,
|
|
92
|
+
uniqueId,
|
|
93
|
+
refName,
|
|
94
|
+
start,
|
|
95
|
+
end,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
else if ((0, generateRepeatMaskerFeature_1.isRepeatMaskerDescriptionField)(rest.description)) {
|
|
99
|
+
const { chromStarts, blockSizes, blockStarts, type, blockCount, thickStart, thickEnd, description, ...rest2 } = rest;
|
|
100
|
+
return (0, generateRepeatMaskerFeature_1.generateRepeatMaskerFeature)({
|
|
101
|
+
...rest2,
|
|
102
|
+
uniqueId,
|
|
103
|
+
description,
|
|
104
|
+
type,
|
|
105
|
+
score,
|
|
106
|
+
start,
|
|
107
|
+
end,
|
|
108
|
+
strand,
|
|
109
|
+
refName,
|
|
110
|
+
subfeatures,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
else if (subfeatures &&
|
|
114
|
+
(0, generateUcscTranscript_1.isUcscTranscript)({
|
|
115
|
+
strand,
|
|
116
|
+
blockCount: rest.blockCount,
|
|
117
|
+
thickStart: rest.thickStart,
|
|
118
|
+
})) {
|
|
119
|
+
const { chromStarts, blockSizes, type, blockCount, thickStart, thickEnd, description, } = rest;
|
|
120
|
+
return (0, generateUcscTranscript_1.generateUcscTranscript)({
|
|
121
|
+
...rest,
|
|
122
|
+
description,
|
|
147
123
|
chromStarts,
|
|
148
|
-
|
|
124
|
+
thickStart,
|
|
125
|
+
thickEnd,
|
|
149
126
|
blockSizes,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
})
|
|
174
|
-
: f,
|
|
175
|
-
});
|
|
127
|
+
blockCount,
|
|
128
|
+
type,
|
|
129
|
+
score,
|
|
130
|
+
start,
|
|
131
|
+
end,
|
|
132
|
+
strand,
|
|
133
|
+
refName,
|
|
134
|
+
uniqueId,
|
|
135
|
+
subfeatures,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
return {
|
|
140
|
+
...rest,
|
|
141
|
+
uniqueId,
|
|
142
|
+
score,
|
|
143
|
+
start,
|
|
144
|
+
end,
|
|
145
|
+
strand,
|
|
146
|
+
refName,
|
|
147
|
+
subfeatures,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
176
150
|
}
|
|
177
|
-
function
|
|
178
|
-
return f
|
|
151
|
+
function arrayify(f) {
|
|
152
|
+
return f !== undefined
|
|
153
|
+
? typeof f === 'string'
|
|
154
|
+
? f.split(',').map(f => +f)
|
|
155
|
+
: f
|
|
156
|
+
: undefined;
|
|
179
157
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import BED from '@gmod/bed';
|
|
2
|
-
import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
3
|
-
import { Region, Feature } from '@jbrowse/core/util';
|
|
4
1
|
import IntervalTree from '@flatten-js/interval-tree';
|
|
2
|
+
import BED from '@gmod/bed';
|
|
3
|
+
import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
4
|
+
import type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
5
|
+
import type { Feature, Region } from '@jbrowse/core/util';
|
|
5
6
|
export default class BedAdapter extends BaseFeatureDataAdapter {
|
|
6
7
|
protected bedFeatures?: Promise<{
|
|
7
8
|
header: string;
|
|
@@ -16,12 +17,21 @@ export default class BedAdapter extends BaseFeatureDataAdapter {
|
|
|
16
17
|
protected intervalTrees: Record<string, Promise<IntervalTree | undefined> | undefined>;
|
|
17
18
|
static capabilities: string[];
|
|
18
19
|
private loadDataP;
|
|
19
|
-
|
|
20
|
+
loadData(opts?: BaseOptions): Promise<{
|
|
21
|
+
header: string;
|
|
22
|
+
features: Record<string, string[]>;
|
|
23
|
+
parser: BED;
|
|
24
|
+
columnNames: string[];
|
|
25
|
+
scoreColumn: string;
|
|
26
|
+
colRef: number;
|
|
27
|
+
colStart: number;
|
|
28
|
+
colEnd: number;
|
|
29
|
+
}>;
|
|
20
30
|
getRefNames(opts?: BaseOptions): Promise<string[]>;
|
|
21
31
|
getHeader(opts?: BaseOptions): Promise<string>;
|
|
22
32
|
getNames(): Promise<string[] | undefined>;
|
|
23
33
|
private loadFeatureIntervalTreeHelper;
|
|
24
|
-
|
|
34
|
+
loadFeatureIntervalTree(refName: string): Promise<IntervalTree<any> | undefined>;
|
|
25
35
|
getFeatures(query: Region, opts?: BaseOptions): import("rxjs").Observable<Feature>;
|
|
26
36
|
freeResources(): void;
|
|
27
37
|
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
+
import IntervalTree from '@flatten-js/interval-tree';
|
|
1
2
|
import BED from '@gmod/bed';
|
|
2
|
-
import { BaseFeatureDataAdapter
|
|
3
|
+
import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
4
|
+
import { SimpleFeature, fetchAndMaybeUnzip } from '@jbrowse/core/util';
|
|
3
5
|
import { openLocation } from '@jbrowse/core/util/io';
|
|
4
6
|
import { ObservableCreate } from '@jbrowse/core/util/rxjs';
|
|
5
|
-
import { isGzip } from '@jbrowse/core/util';
|
|
6
|
-
import IntervalTree from '@flatten-js/interval-tree';
|
|
7
|
-
import { unzip } from '@gmod/bgzf-filehandle';
|
|
8
|
-
// locals
|
|
9
7
|
import { featureData } from '../util';
|
|
10
8
|
class BedAdapter extends BaseFeatureDataAdapter {
|
|
11
9
|
constructor() {
|
|
@@ -15,9 +13,7 @@ class BedAdapter extends BaseFeatureDataAdapter {
|
|
|
15
13
|
async loadDataP(opts = {}) {
|
|
16
14
|
const pm = this.pluginManager;
|
|
17
15
|
const bedLoc = this.getConf('bedLocation');
|
|
18
|
-
const
|
|
19
|
-
const buffer = isGzip(buf) ? await unzip(buf) : buf;
|
|
20
|
-
// 512MB max chrome string length is 512MB
|
|
16
|
+
const buffer = await fetchAndMaybeUnzip(openLocation(bedLoc, pm), opts);
|
|
21
17
|
if (buffer.length > 536870888) {
|
|
22
18
|
throw new Error('Data exceeds maximum string length (512MB)');
|
|
23
19
|
}
|
|
@@ -96,12 +92,20 @@ class BedAdapter extends BaseFeatureDataAdapter {
|
|
|
96
92
|
}
|
|
97
93
|
const names = await this.getNames();
|
|
98
94
|
const intervalTree = new IntervalTree();
|
|
99
|
-
|
|
95
|
+
for (let i = 0; i < lines.length; i++) {
|
|
96
|
+
const line = lines[i];
|
|
100
97
|
const uniqueId = `${this.id}-${refName}-${i}`;
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
98
|
+
const feat = new SimpleFeature(featureData({
|
|
99
|
+
line,
|
|
100
|
+
colRef,
|
|
101
|
+
colStart,
|
|
102
|
+
colEnd,
|
|
103
|
+
scoreColumn,
|
|
104
|
+
parser,
|
|
105
|
+
uniqueId,
|
|
106
|
+
names,
|
|
107
|
+
}));
|
|
108
|
+
intervalTree.insert([feat.get('start'), feat.get('end')], feat);
|
|
105
109
|
}
|
|
106
110
|
return intervalTree;
|
|
107
111
|
}
|
|
@@ -122,7 +126,7 @@ class BedAdapter extends BaseFeatureDataAdapter {
|
|
|
122
126
|
observer.next(f);
|
|
123
127
|
});
|
|
124
128
|
observer.complete();
|
|
125
|
-
}, opts.
|
|
129
|
+
}, opts.stopToken);
|
|
126
130
|
}
|
|
127
131
|
freeResources() { }
|
|
128
132
|
}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
declare const BedAdapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
|
|
2
|
-
/**
|
|
3
|
-
* #slot
|
|
4
|
-
*/
|
|
5
2
|
bedLocation: {
|
|
6
3
|
type: string;
|
|
7
4
|
defaultValue: {
|
|
@@ -9,49 +6,31 @@ declare const BedAdapter: import("@jbrowse/core/configuration/configurationSchem
|
|
|
9
6
|
locationType: string;
|
|
10
7
|
};
|
|
11
8
|
};
|
|
12
|
-
/**
|
|
13
|
-
* #slot
|
|
14
|
-
*/
|
|
15
9
|
columnNames: {
|
|
16
10
|
type: string;
|
|
17
11
|
description: string;
|
|
18
12
|
defaultValue: never[];
|
|
19
13
|
};
|
|
20
|
-
/**
|
|
21
|
-
* #slot
|
|
22
|
-
*/
|
|
23
14
|
scoreColumn: {
|
|
24
15
|
type: string;
|
|
25
16
|
description: string;
|
|
26
17
|
defaultValue: string;
|
|
27
18
|
};
|
|
28
|
-
/**
|
|
29
|
-
* #slot
|
|
30
|
-
*/
|
|
31
19
|
autoSql: {
|
|
32
20
|
type: string;
|
|
33
21
|
description: string;
|
|
34
22
|
defaultValue: string;
|
|
35
23
|
};
|
|
36
|
-
/**
|
|
37
|
-
* #slot
|
|
38
|
-
*/
|
|
39
24
|
colRef: {
|
|
40
25
|
type: string;
|
|
41
26
|
description: string;
|
|
42
27
|
defaultValue: number;
|
|
43
28
|
};
|
|
44
|
-
/**
|
|
45
|
-
* #slot
|
|
46
|
-
*/
|
|
47
29
|
colStart: {
|
|
48
30
|
type: string;
|
|
49
31
|
description: string;
|
|
50
32
|
defaultValue: number;
|
|
51
33
|
};
|
|
52
|
-
/**
|
|
53
|
-
* #slot
|
|
54
|
-
*/
|
|
55
34
|
colEnd: {
|
|
56
35
|
type: string;
|
|
57
36
|
description: string;
|
|
@@ -1,59 +1,35 @@
|
|
|
1
1
|
import { ConfigurationSchema } from '@jbrowse/core/configuration';
|
|
2
|
-
|
|
3
|
-
* #config BedAdapter
|
|
4
|
-
*/
|
|
5
|
-
function x() { } // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
2
|
+
function x() { }
|
|
6
3
|
const BedAdapter = ConfigurationSchema('BedAdapter', {
|
|
7
|
-
/**
|
|
8
|
-
* #slot
|
|
9
|
-
*/
|
|
10
4
|
bedLocation: {
|
|
11
5
|
type: 'fileLocation',
|
|
12
6
|
defaultValue: { uri: '/path/to/my.bed.gz', locationType: 'UriLocation' },
|
|
13
7
|
},
|
|
14
|
-
/**
|
|
15
|
-
* #slot
|
|
16
|
-
*/
|
|
17
8
|
columnNames: {
|
|
18
9
|
type: 'stringArray',
|
|
19
10
|
description: 'List of column names',
|
|
20
11
|
defaultValue: [],
|
|
21
12
|
},
|
|
22
|
-
/**
|
|
23
|
-
* #slot
|
|
24
|
-
*/
|
|
25
13
|
scoreColumn: {
|
|
26
14
|
type: 'string',
|
|
27
15
|
description: 'The column to use as a "score" attribute',
|
|
28
16
|
defaultValue: '',
|
|
29
17
|
},
|
|
30
|
-
/**
|
|
31
|
-
* #slot
|
|
32
|
-
*/
|
|
33
18
|
autoSql: {
|
|
34
19
|
type: 'string',
|
|
35
20
|
description: 'The autoSql definition for the data fields in the file',
|
|
36
21
|
defaultValue: '',
|
|
37
22
|
},
|
|
38
|
-
/**
|
|
39
|
-
* #slot
|
|
40
|
-
*/
|
|
41
23
|
colRef: {
|
|
42
24
|
type: 'number',
|
|
43
25
|
description: 'The column to use as a "refName" attribute',
|
|
44
26
|
defaultValue: 0,
|
|
45
27
|
},
|
|
46
|
-
/**
|
|
47
|
-
* #slot
|
|
48
|
-
*/
|
|
49
28
|
colStart: {
|
|
50
29
|
type: 'number',
|
|
51
30
|
description: 'The column to use as a "start" attribute',
|
|
52
31
|
defaultValue: 1,
|
|
53
32
|
},
|
|
54
|
-
/**
|
|
55
|
-
* #slot
|
|
56
|
-
*/
|
|
57
33
|
colEnd: {
|
|
58
34
|
type: 'number',
|
|
59
35
|
description: 'The column to use as a "end" attribute',
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import PluginManager from '@jbrowse/core/PluginManager';
|
|
1
|
+
import type PluginManager from '@jbrowse/core/PluginManager';
|
|
2
2
|
export default function BedAdapterF(pluginManager: PluginManager): void;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import IntervalTree from '@flatten-js/interval-tree';
|
|
2
|
+
import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
3
|
+
import type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
4
|
+
import type { Feature, Region } from '@jbrowse/core/util';
|
|
5
|
+
export default class BedGraphAdapter extends BaseFeatureDataAdapter {
|
|
6
|
+
protected bedFeatures?: Promise<{
|
|
7
|
+
header: string;
|
|
8
|
+
features: Record<string, string[]>;
|
|
9
|
+
columnNames: string[];
|
|
10
|
+
}>;
|
|
11
|
+
protected intervalTrees: Record<string, Promise<IntervalTree | undefined> | undefined>;
|
|
12
|
+
getNames(): Promise<string[] | undefined>;
|
|
13
|
+
private loadFeatureIntervalTreeHelper;
|
|
14
|
+
getRefNames(opts?: BaseOptions): Promise<string[]>;
|
|
15
|
+
private loadDataP;
|
|
16
|
+
loadFeatureIntervalTree(refName: string): Promise<IntervalTree<any> | undefined>;
|
|
17
|
+
loadData(opts?: BaseOptions): Promise<{
|
|
18
|
+
header: string;
|
|
19
|
+
features: Record<string, string[]>;
|
|
20
|
+
columnNames: string[];
|
|
21
|
+
}>;
|
|
22
|
+
getFeatures(query: Region, _opts?: BaseOptions): import("rxjs").Observable<Feature>;
|
|
23
|
+
freeResources(): void;
|
|
24
|
+
}
|