@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
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import PluginManager from '@jbrowse/core/PluginManager';
|
|
1
|
+
import type PluginManager from '@jbrowse/core/PluginManager';
|
|
2
2
|
export default function BedpeAdapterF(pluginManager: PluginManager): void;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { BigBed } from '@gmod/bbi';
|
|
2
2
|
import BED from '@gmod/bed';
|
|
3
|
-
import { BaseFeatureDataAdapter
|
|
4
|
-
import {
|
|
5
|
-
import { Feature } from '@jbrowse/core/util';
|
|
6
|
-
import {
|
|
3
|
+
import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
4
|
+
import type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
5
|
+
import type { Feature } from '@jbrowse/core/util';
|
|
6
|
+
import type { Region } from '@jbrowse/core/util/types';
|
|
7
|
+
import type { Observer } from 'rxjs';
|
|
7
8
|
export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
8
|
-
private
|
|
9
|
+
private cachedP?;
|
|
9
10
|
configurePre(opts?: BaseOptions): Promise<{
|
|
10
11
|
bigbed: BigBed;
|
|
11
12
|
header: import("@gmod/bbi").Header;
|
|
@@ -17,6 +18,7 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
17
18
|
parser: BED;
|
|
18
19
|
}>;
|
|
19
20
|
getRefNames(opts?: BaseOptions): Promise<string[]>;
|
|
21
|
+
getData(): Promise<Feature[]>;
|
|
20
22
|
getHeader(opts?: BaseOptions): Promise<{
|
|
21
23
|
version: number;
|
|
22
24
|
fileType: string;
|
|
@@ -25,7 +27,13 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
25
27
|
[k: string]: string;
|
|
26
28
|
};
|
|
27
29
|
}>;
|
|
28
|
-
getFeaturesHelper(query
|
|
30
|
+
getFeaturesHelper({ query, opts, observer, allowRedispatch, originalQuery, }: {
|
|
31
|
+
query: Region;
|
|
32
|
+
opts: BaseOptions;
|
|
33
|
+
observer: Observer<Feature>;
|
|
34
|
+
allowRedispatch: boolean;
|
|
35
|
+
originalQuery?: Region;
|
|
36
|
+
}): Promise<void>;
|
|
29
37
|
getFeatures(query: Region, opts?: BaseOptions): import("rxjs").Observable<Feature>;
|
|
30
38
|
freeResources(): void;
|
|
31
39
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { BigBed } from '@gmod/bbi';
|
|
2
2
|
import BED from '@gmod/bed';
|
|
3
|
-
import { BaseFeatureDataAdapter
|
|
3
|
+
import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
4
|
+
import { SimpleFeature, doesIntersect2, max, min } from '@jbrowse/core/util';
|
|
4
5
|
import { openLocation } from '@jbrowse/core/util/io';
|
|
5
6
|
import { ObservableCreate } from '@jbrowse/core/util/rxjs';
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
import { isUcscProcessedTranscript, makeBlocks, ucscProcessedTranscript, } from '../util';
|
|
7
|
+
import { firstValueFrom, toArray } from 'rxjs';
|
|
8
|
+
import { featureData2 } from '../util';
|
|
9
9
|
export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
10
10
|
async configurePre(opts) {
|
|
11
11
|
const pm = this.pluginManager;
|
|
@@ -13,22 +13,42 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
13
13
|
filehandle: openLocation(this.getConf('bigBedLocation'), pm),
|
|
14
14
|
});
|
|
15
15
|
const header = await bigbed.getHeader(opts);
|
|
16
|
-
const parser = new BED({
|
|
17
|
-
|
|
16
|
+
const parser = new BED({
|
|
17
|
+
autoSql: header.autoSql,
|
|
18
|
+
});
|
|
19
|
+
return {
|
|
20
|
+
bigbed,
|
|
21
|
+
header,
|
|
22
|
+
parser,
|
|
23
|
+
};
|
|
18
24
|
}
|
|
19
25
|
async configure(opts) {
|
|
20
|
-
if (!this.
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
26
|
+
if (!this.cachedP) {
|
|
27
|
+
this.cachedP = this.configurePre(opts).catch((e) => {
|
|
28
|
+
this.cachedP = undefined;
|
|
23
29
|
throw e;
|
|
24
30
|
});
|
|
25
31
|
}
|
|
26
|
-
return this.
|
|
32
|
+
return this.cachedP;
|
|
27
33
|
}
|
|
28
34
|
async getRefNames(opts) {
|
|
29
35
|
const { header } = await this.configure(opts);
|
|
30
36
|
return Object.keys(header.refsByName);
|
|
31
37
|
}
|
|
38
|
+
async getData() {
|
|
39
|
+
const refNames = await this.getRefNames();
|
|
40
|
+
const features = [];
|
|
41
|
+
for (const refName of refNames) {
|
|
42
|
+
const f = await firstValueFrom(this.getFeatures({
|
|
43
|
+
assemblyName: 'unknown',
|
|
44
|
+
refName,
|
|
45
|
+
start: 0,
|
|
46
|
+
end: Number.MAX_SAFE_INTEGER,
|
|
47
|
+
}).pipe(toArray()));
|
|
48
|
+
features.push(f);
|
|
49
|
+
}
|
|
50
|
+
return features.flat();
|
|
51
|
+
}
|
|
32
52
|
async getHeader(opts) {
|
|
33
53
|
const { parser, header } = await this.configure(opts);
|
|
34
54
|
const { version, fileType } = header;
|
|
@@ -40,13 +60,14 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
40
60
|
fields: Object.fromEntries(fields.map(({ name, comment }) => [name, comment])),
|
|
41
61
|
};
|
|
42
62
|
}
|
|
43
|
-
async getFeaturesHelper(query, opts, observer, allowRedispatch, originalQuery = query) {
|
|
44
|
-
|
|
63
|
+
async getFeaturesHelper({ query, opts, observer, allowRedispatch, originalQuery = query, }) {
|
|
64
|
+
var _a;
|
|
65
|
+
const { stopToken } = opts;
|
|
45
66
|
const scoreColumn = this.getConf('scoreColumn');
|
|
46
67
|
const aggregateField = this.getConf('aggregateField');
|
|
47
68
|
const { parser, bigbed } = await this.configure(opts);
|
|
48
69
|
const feats = await bigbed.getFeatures(query.refName, query.start, query.end, {
|
|
49
|
-
|
|
70
|
+
stopToken,
|
|
50
71
|
basesPerSpan: query.end - query.start,
|
|
51
72
|
});
|
|
52
73
|
if (allowRedispatch && feats.length) {
|
|
@@ -61,7 +82,17 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
61
82
|
}
|
|
62
83
|
}
|
|
63
84
|
if (maxEnd > query.end || minStart < query.start) {
|
|
64
|
-
await this.getFeaturesHelper({
|
|
85
|
+
await this.getFeaturesHelper({
|
|
86
|
+
query: {
|
|
87
|
+
...query,
|
|
88
|
+
start: minStart,
|
|
89
|
+
end: maxEnd,
|
|
90
|
+
},
|
|
91
|
+
opts,
|
|
92
|
+
observer,
|
|
93
|
+
allowRedispatch: false,
|
|
94
|
+
originalQuery: query,
|
|
95
|
+
});
|
|
65
96
|
return;
|
|
66
97
|
}
|
|
67
98
|
}
|
|
@@ -70,62 +101,36 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
70
101
|
throw new Error('found uniqueId undefined');
|
|
71
102
|
}
|
|
72
103
|
for (const feat of feats) {
|
|
73
|
-
const
|
|
104
|
+
const splitLine = [
|
|
105
|
+
query.refName,
|
|
106
|
+
`${feat.start}`,
|
|
107
|
+
`${feat.end}`,
|
|
108
|
+
...(((_a = feat.rest) === null || _a === void 0 ? void 0 : _a.split('\t')) || []),
|
|
109
|
+
];
|
|
110
|
+
const data = parser.parseLine(splitLine, { uniqueId: feat.uniqueId });
|
|
74
111
|
const aggr = data[aggregateField];
|
|
75
112
|
if (!parentAggregation[aggr]) {
|
|
76
113
|
parentAggregation[aggr] = [];
|
|
77
114
|
}
|
|
78
|
-
const { uniqueId, type, chromStart, chromStarts, blockStarts
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const f = ucscProcessedTranscript({
|
|
92
|
-
...rest,
|
|
93
|
-
uniqueId,
|
|
94
|
-
type,
|
|
95
|
-
start: feat.start,
|
|
96
|
-
end: feat.end,
|
|
97
|
-
refName: query.refName,
|
|
98
|
-
score: scoreColumn ? +data[scoreColumn] : score,
|
|
99
|
-
chromStarts,
|
|
100
|
-
blockCount,
|
|
101
|
-
blockSizes,
|
|
102
|
-
thickStart,
|
|
103
|
-
thickEnd,
|
|
104
|
-
subfeatures,
|
|
105
|
-
});
|
|
106
|
-
if (aggr) {
|
|
107
|
-
parentAggregation[aggr].push(f);
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
if (doesIntersect2(f.start, f.end, originalQuery.start, originalQuery.end)) {
|
|
111
|
-
observer.next(new SimpleFeature({ id: `${this.id}-${uniqueId}`, data: f }));
|
|
112
|
-
}
|
|
113
|
-
}
|
|
115
|
+
const { uniqueId, type, chrom, chromStart, chromEnd, description, chromStarts: chromStarts2, blockStarts: blockStarts2, blockSizes: blockSizes2, score: score2, blockCount, thickStart, thickEnd, strand, ...rest } = data;
|
|
116
|
+
const f = featureData2({
|
|
117
|
+
...rest,
|
|
118
|
+
scoreColumn,
|
|
119
|
+
splitLine,
|
|
120
|
+
parser,
|
|
121
|
+
uniqueId,
|
|
122
|
+
start: feat.start,
|
|
123
|
+
end: feat.end,
|
|
124
|
+
refName: query.refName,
|
|
125
|
+
});
|
|
126
|
+
if (aggr) {
|
|
127
|
+
parentAggregation[aggr].push(f);
|
|
114
128
|
}
|
|
115
129
|
else {
|
|
116
|
-
if (doesIntersect2(
|
|
130
|
+
if (doesIntersect2(f.start, f.end, originalQuery.start, originalQuery.end)) {
|
|
117
131
|
observer.next(new SimpleFeature({
|
|
118
132
|
id: `${this.id}-${uniqueId}`,
|
|
119
|
-
data:
|
|
120
|
-
...rest,
|
|
121
|
-
uniqueId,
|
|
122
|
-
type,
|
|
123
|
-
start: feat.start,
|
|
124
|
-
score: scoreColumn ? +data[scoreColumn] : score,
|
|
125
|
-
end: feat.end,
|
|
126
|
-
refName: query.refName,
|
|
127
|
-
subfeatures,
|
|
128
|
-
},
|
|
133
|
+
data: f,
|
|
129
134
|
}));
|
|
130
135
|
}
|
|
131
136
|
}
|
|
@@ -154,12 +159,17 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
154
159
|
getFeatures(query, opts = {}) {
|
|
155
160
|
return ObservableCreate(async (observer) => {
|
|
156
161
|
try {
|
|
157
|
-
await this.getFeaturesHelper(
|
|
162
|
+
await this.getFeaturesHelper({
|
|
163
|
+
query,
|
|
164
|
+
opts,
|
|
165
|
+
observer,
|
|
166
|
+
allowRedispatch: true,
|
|
167
|
+
});
|
|
158
168
|
}
|
|
159
169
|
catch (e) {
|
|
160
170
|
observer.error(e);
|
|
161
171
|
}
|
|
162
|
-
}, opts.
|
|
172
|
+
}, opts.stopToken);
|
|
163
173
|
}
|
|
164
174
|
freeResources() { }
|
|
165
175
|
}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
declare const BigBedAdapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
|
|
2
|
-
/**
|
|
3
|
-
* #slot
|
|
4
|
-
*/
|
|
5
2
|
bigBedLocation: {
|
|
6
3
|
type: string;
|
|
7
4
|
defaultValue: {
|
|
@@ -9,17 +6,11 @@ declare const BigBedAdapter: import("@jbrowse/core/configuration/configurationSc
|
|
|
9
6
|
locationType: string;
|
|
10
7
|
};
|
|
11
8
|
};
|
|
12
|
-
/**
|
|
13
|
-
* #slot
|
|
14
|
-
*/
|
|
15
9
|
scoreColumn: {
|
|
16
10
|
type: string;
|
|
17
11
|
description: string;
|
|
18
12
|
defaultValue: string;
|
|
19
13
|
};
|
|
20
|
-
/**
|
|
21
|
-
* #slot
|
|
22
|
-
*/
|
|
23
14
|
aggregateField: {
|
|
24
15
|
type: string;
|
|
25
16
|
description: string;
|
|
@@ -1,27 +1,15 @@
|
|
|
1
1
|
import { ConfigurationSchema } from '@jbrowse/core/configuration';
|
|
2
|
-
|
|
3
|
-
* #config BigBedAdapter
|
|
4
|
-
*/
|
|
5
|
-
function x() { } // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
2
|
+
function x() { }
|
|
6
3
|
const BigBedAdapter = ConfigurationSchema('BigBedAdapter', {
|
|
7
|
-
/**
|
|
8
|
-
* #slot
|
|
9
|
-
*/
|
|
10
4
|
bigBedLocation: {
|
|
11
5
|
type: 'fileLocation',
|
|
12
6
|
defaultValue: { uri: '/path/to/my.bb', locationType: 'UriLocation' },
|
|
13
7
|
},
|
|
14
|
-
/**
|
|
15
|
-
* #slot
|
|
16
|
-
*/
|
|
17
8
|
scoreColumn: {
|
|
18
9
|
type: 'string',
|
|
19
10
|
description: 'The column to use as a "score" attribute',
|
|
20
11
|
defaultValue: '',
|
|
21
12
|
},
|
|
22
|
-
/**
|
|
23
|
-
* #slot
|
|
24
|
-
*/
|
|
25
13
|
aggregateField: {
|
|
26
14
|
type: 'string',
|
|
27
15
|
description: 'An attribute to aggregate features with',
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import PluginManager from '@jbrowse/core/PluginManager';
|
|
1
|
+
import type PluginManager from '@jbrowse/core/PluginManager';
|
|
2
2
|
export default function BigBedAdapterF(pluginManager: PluginManager): void;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare function isBedMethylFeature({ splitLine, start, end, }: {
|
|
2
|
+
splitLine: string[];
|
|
3
|
+
start: number;
|
|
4
|
+
end: number;
|
|
5
|
+
}): boolean;
|
|
6
|
+
export declare function generateBedMethylFeature({ splitLine, uniqueId, refName, start, end, }: {
|
|
7
|
+
splitLine: string[];
|
|
8
|
+
uniqueId: string;
|
|
9
|
+
refName: string;
|
|
10
|
+
start: number;
|
|
11
|
+
end: number;
|
|
12
|
+
}): {
|
|
13
|
+
uniqueId: string;
|
|
14
|
+
refName: string;
|
|
15
|
+
start: number;
|
|
16
|
+
end: number;
|
|
17
|
+
code: string | undefined;
|
|
18
|
+
score: number;
|
|
19
|
+
strand: string | undefined;
|
|
20
|
+
color: string | undefined;
|
|
21
|
+
source: string | undefined;
|
|
22
|
+
n_valid_cov: string | undefined;
|
|
23
|
+
fraction_modified: string | undefined;
|
|
24
|
+
n_mod: string | undefined;
|
|
25
|
+
n_canonical: string | undefined;
|
|
26
|
+
n_other_mod: string | undefined;
|
|
27
|
+
n_delete: string | undefined;
|
|
28
|
+
n_fail: string | undefined;
|
|
29
|
+
n_diff: string | undefined;
|
|
30
|
+
n_nocall: string | undefined;
|
|
31
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export function isBedMethylFeature({ splitLine, start, end, }) {
|
|
2
|
+
return +(splitLine[6] || 0) === start && +(splitLine[7] || 0) === end;
|
|
3
|
+
}
|
|
4
|
+
export function generateBedMethylFeature({ splitLine, uniqueId, refName, start, end, }) {
|
|
5
|
+
const [, , , code, , strand, , , color, n_valid_cov, fraction_modified, n_mod, n_canonical, n_other_mod, n_delete, n_fail, n_diff, n_nocall,] = splitLine;
|
|
6
|
+
return {
|
|
7
|
+
uniqueId,
|
|
8
|
+
refName,
|
|
9
|
+
start,
|
|
10
|
+
end,
|
|
11
|
+
code,
|
|
12
|
+
score: +fraction_modified || 0,
|
|
13
|
+
strand,
|
|
14
|
+
color,
|
|
15
|
+
source: code,
|
|
16
|
+
n_valid_cov,
|
|
17
|
+
fraction_modified,
|
|
18
|
+
n_mod,
|
|
19
|
+
n_canonical,
|
|
20
|
+
n_other_mod,
|
|
21
|
+
n_delete,
|
|
22
|
+
n_fail,
|
|
23
|
+
n_diff,
|
|
24
|
+
n_nocall,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export declare function isRepeatMaskerDescriptionField(desc?: string): desc is string;
|
|
2
|
+
export declare function generateRepeatMaskerFeature({ uniqueId, refName, start, end, description, ...rest }: {
|
|
3
|
+
uniqueId: string;
|
|
4
|
+
refName: string;
|
|
5
|
+
start: number;
|
|
6
|
+
end: number;
|
|
7
|
+
description: string;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
}): {
|
|
10
|
+
uniqueId: string;
|
|
11
|
+
refName: string;
|
|
12
|
+
start: number;
|
|
13
|
+
end: number;
|
|
14
|
+
bitsw_score: string | undefined;
|
|
15
|
+
percent_div: string | undefined;
|
|
16
|
+
percent_del: string | undefined;
|
|
17
|
+
percent_ins: string | undefined;
|
|
18
|
+
query_chr: string | undefined;
|
|
19
|
+
query_begin: string | undefined;
|
|
20
|
+
query_end: string | undefined;
|
|
21
|
+
query_remaining: string | undefined;
|
|
22
|
+
orientation: string | undefined;
|
|
23
|
+
matching_repeat_name: string | undefined;
|
|
24
|
+
matching_repeat_class: string | undefined;
|
|
25
|
+
matching_repeat_begin: string | undefined;
|
|
26
|
+
matching_repeat_end: string | undefined;
|
|
27
|
+
matching_repeat_remaining: string | undefined;
|
|
28
|
+
repeat_id: string | undefined;
|
|
29
|
+
description?: undefined;
|
|
30
|
+
} | {
|
|
31
|
+
uniqueId: string;
|
|
32
|
+
refName: string;
|
|
33
|
+
start: number;
|
|
34
|
+
end: number;
|
|
35
|
+
description: undefined;
|
|
36
|
+
bitsw_score?: undefined;
|
|
37
|
+
percent_div?: undefined;
|
|
38
|
+
percent_del?: undefined;
|
|
39
|
+
percent_ins?: undefined;
|
|
40
|
+
query_chr?: undefined;
|
|
41
|
+
query_begin?: undefined;
|
|
42
|
+
query_end?: undefined;
|
|
43
|
+
query_remaining?: undefined;
|
|
44
|
+
orientation?: undefined;
|
|
45
|
+
matching_repeat_name?: undefined;
|
|
46
|
+
matching_repeat_class?: undefined;
|
|
47
|
+
matching_repeat_begin?: undefined;
|
|
48
|
+
matching_repeat_end?: undefined;
|
|
49
|
+
matching_repeat_remaining?: undefined;
|
|
50
|
+
repeat_id?: undefined;
|
|
51
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export function isRepeatMaskerDescriptionField(desc) {
|
|
2
|
+
const ret = desc === null || desc === void 0 ? void 0 : desc.trim().split(' ');
|
|
3
|
+
return [0, 1, 2, 3, 5, 6].every(s => (ret === null || ret === void 0 ? void 0 : ret[s]) !== undefined ? !Number.isNaN(+ret[s]) : false);
|
|
4
|
+
}
|
|
5
|
+
function makeRepeatTrackDescription(description) {
|
|
6
|
+
if (isRepeatMaskerDescriptionField(description)) {
|
|
7
|
+
const [bitsw_score, percent_div, percent_del, percent_ins, query_chr, query_begin, query_end, query_remaining, orientation, matching_repeat_name, matching_repeat_class, matching_repeat_begin, matching_repeat_end, matching_repeat_remaining, repeat_id,] = description.trim().split(' ');
|
|
8
|
+
return {
|
|
9
|
+
bitsw_score,
|
|
10
|
+
percent_div,
|
|
11
|
+
percent_del,
|
|
12
|
+
percent_ins,
|
|
13
|
+
query_chr,
|
|
14
|
+
query_begin,
|
|
15
|
+
query_end,
|
|
16
|
+
query_remaining,
|
|
17
|
+
orientation,
|
|
18
|
+
matching_repeat_name,
|
|
19
|
+
matching_repeat_class,
|
|
20
|
+
matching_repeat_begin,
|
|
21
|
+
matching_repeat_end,
|
|
22
|
+
matching_repeat_remaining,
|
|
23
|
+
repeat_id,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return { description };
|
|
27
|
+
}
|
|
28
|
+
export function generateRepeatMaskerFeature({ uniqueId, refName, start, end, description, ...rest }) {
|
|
29
|
+
return {
|
|
30
|
+
...rest,
|
|
31
|
+
...makeRepeatTrackDescription(description),
|
|
32
|
+
uniqueId,
|
|
33
|
+
refName,
|
|
34
|
+
start,
|
|
35
|
+
end,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MinimalFeature, TranscriptFeat } from './types';
|
|
2
|
+
export declare function isUcscTranscript({ thickStart, blockCount, strand, }: {
|
|
3
|
+
thickStart?: number;
|
|
4
|
+
blockCount?: number;
|
|
5
|
+
strand?: number;
|
|
6
|
+
}): boolean | 0 | undefined;
|
|
7
|
+
export declare function generateUcscTranscript(data: TranscriptFeat): {
|
|
8
|
+
uniqueId: string;
|
|
9
|
+
strand: number;
|
|
10
|
+
type: string;
|
|
11
|
+
refName: string;
|
|
12
|
+
subfeatures: MinimalFeature[];
|
|
13
|
+
start: number;
|
|
14
|
+
end: number;
|
|
15
|
+
};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
export function isUcscTranscript({ thickStart, blockCount, strand, }) {
|
|
2
|
+
return thickStart && blockCount && strand !== 0;
|
|
3
|
+
}
|
|
4
|
+
export function generateUcscTranscript(data) {
|
|
5
|
+
const { strand = 0, chrom: _1, chromStart: _2, chromEnd: _3, chromStarts, blockStarts, blockSizes, uniqueId, ...rest } = data;
|
|
6
|
+
const { subfeatures: oldSubfeatures, thickStart, thickEnd, blockCount, refName, ...rest2 } = rest;
|
|
7
|
+
const subfeatures = [];
|
|
8
|
+
const feats = oldSubfeatures
|
|
9
|
+
.filter(child => child.type === 'block')
|
|
10
|
+
.sort((a, b) => a.start - b.start);
|
|
11
|
+
for (const block of feats) {
|
|
12
|
+
const start = block.start;
|
|
13
|
+
const end = block.end;
|
|
14
|
+
if (thickStart >= end) {
|
|
15
|
+
subfeatures.push({
|
|
16
|
+
type: `${strand > 0 ? 'five' : 'three'}_prime_UTR`,
|
|
17
|
+
start,
|
|
18
|
+
end,
|
|
19
|
+
refName,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
else if (thickStart > start && thickStart < end && thickEnd >= end) {
|
|
23
|
+
subfeatures.push({
|
|
24
|
+
type: `${strand > 0 ? 'five' : 'three'}_prime_UTR`,
|
|
25
|
+
start,
|
|
26
|
+
end: thickStart,
|
|
27
|
+
refName,
|
|
28
|
+
}, {
|
|
29
|
+
type: 'CDS',
|
|
30
|
+
start: thickStart,
|
|
31
|
+
end,
|
|
32
|
+
refName,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
else if (thickStart <= start && thickEnd >= end) {
|
|
36
|
+
subfeatures.push({
|
|
37
|
+
type: 'CDS',
|
|
38
|
+
start,
|
|
39
|
+
end,
|
|
40
|
+
refName,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
else if (thickStart > start && thickStart < end && thickEnd < end) {
|
|
44
|
+
subfeatures.push({
|
|
45
|
+
type: `${strand > 0 ? 'five' : 'three'}_prime_UTR`,
|
|
46
|
+
start,
|
|
47
|
+
end: thickStart,
|
|
48
|
+
refName,
|
|
49
|
+
}, {
|
|
50
|
+
type: 'CDS',
|
|
51
|
+
start: thickStart,
|
|
52
|
+
end: thickEnd,
|
|
53
|
+
refName,
|
|
54
|
+
}, {
|
|
55
|
+
type: `${strand > 0 ? 'three' : 'five'}_prime_UTR`,
|
|
56
|
+
start: thickEnd,
|
|
57
|
+
end,
|
|
58
|
+
refName,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else if (thickStart <= start && thickEnd > start && thickEnd < end) {
|
|
62
|
+
subfeatures.push({
|
|
63
|
+
type: 'CDS',
|
|
64
|
+
start,
|
|
65
|
+
end: thickEnd,
|
|
66
|
+
refName,
|
|
67
|
+
}, {
|
|
68
|
+
type: `${strand > 0 ? 'three' : 'five'}_prime_UTR`,
|
|
69
|
+
start: thickEnd,
|
|
70
|
+
end,
|
|
71
|
+
refName,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else if (thickEnd <= start) {
|
|
75
|
+
subfeatures.push({
|
|
76
|
+
type: `${strand > 0 ? 'three' : 'five'}_prime_UTR`,
|
|
77
|
+
start,
|
|
78
|
+
end,
|
|
79
|
+
refName,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
...rest2,
|
|
85
|
+
uniqueId,
|
|
86
|
+
strand,
|
|
87
|
+
type: 'mRNA',
|
|
88
|
+
refName,
|
|
89
|
+
subfeatures,
|
|
90
|
+
};
|
|
91
|
+
}
|
package/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Plugin from '@jbrowse/core/Plugin';
|
|
2
|
-
import PluginManager from '@jbrowse/core/PluginManager';
|
|
2
|
+
import type PluginManager from '@jbrowse/core/PluginManager';
|
|
3
3
|
export default class BedPlugin extends Plugin {
|
|
4
4
|
name: string;
|
|
5
5
|
install(pluginManager: PluginManager): void;
|
package/esm/index.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import Plugin from '@jbrowse/core/Plugin';
|
|
2
|
-
import BigBedAdapterF from './BigBedAdapter';
|
|
3
|
-
import BedpeAdapterF from './BedpeAdapter';
|
|
4
|
-
import BedTabixAdapterF from './BedTabixAdapter';
|
|
5
|
-
import BedAdapterF from './BedAdapter';
|
|
6
2
|
import { getFileName, makeIndex, makeIndexType, } from '@jbrowse/core/util/tracks';
|
|
3
|
+
import BedAdapterF from './BedAdapter';
|
|
4
|
+
import BedGraphAdapterF from './BedGraphAdapter';
|
|
5
|
+
import BedGraphTabixAdapterF from './BedGraphTabixAdapter';
|
|
6
|
+
import BedTabixAdapterF from './BedTabixAdapter';
|
|
7
|
+
import BedpeAdapterF from './BedpeAdapter';
|
|
8
|
+
import BigBedAdapterF from './BigBedAdapter';
|
|
7
9
|
export default class BedPlugin extends Plugin {
|
|
8
10
|
constructor() {
|
|
9
11
|
super(...arguments);
|
|
@@ -14,6 +16,8 @@ export default class BedPlugin extends Plugin {
|
|
|
14
16
|
BedAdapterF(pluginManager);
|
|
15
17
|
BedpeAdapterF(pluginManager);
|
|
16
18
|
BedTabixAdapterF(pluginManager);
|
|
19
|
+
BedGraphAdapterF(pluginManager);
|
|
20
|
+
BedGraphTabixAdapterF(pluginManager);
|
|
17
21
|
pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
|
|
18
22
|
return (file, index, adapterHint) => {
|
|
19
23
|
const regexGuess = /\.(bb|bigbed)$/i;
|
package/esm/types.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface MinimalFeature {
|
|
2
|
+
type: string;
|
|
3
|
+
start: number;
|
|
4
|
+
end: number;
|
|
5
|
+
refName: string;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
}
|
|
8
|
+
export interface TranscriptFeat extends MinimalFeature {
|
|
9
|
+
uniqueId: string;
|
|
10
|
+
thickStart: number;
|
|
11
|
+
thickEnd: number;
|
|
12
|
+
blockCount: number;
|
|
13
|
+
blockSizes: number[];
|
|
14
|
+
chromStarts: number[];
|
|
15
|
+
refName: string;
|
|
16
|
+
strand?: number;
|
|
17
|
+
subfeatures: MinimalFeature[];
|
|
18
|
+
}
|
package/esm/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|