@jbrowse/plugin-variants 2.3.1 → 2.3.2
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/VcfAdapter/VcfAdapter.d.ts +1 -2
- package/dist/VcfAdapter/VcfAdapter.js +2 -2
- package/dist/VcfAdapter/VcfAdapter.js.map +1 -1
- package/dist/{VcfTabixAdapter/VcfFeature.d.ts → VcfFeature/index.d.ts} +3 -15
- package/dist/VcfFeature/index.js +59 -0
- package/dist/VcfFeature/index.js.map +1 -0
- package/dist/VcfFeature/util.d.ts +7 -0
- package/dist/VcfFeature/util.js +129 -0
- package/dist/VcfFeature/util.js.map +1 -0
- package/dist/VcfTabixAdapter/VcfTabixAdapter.js +1 -1
- package/dist/VcfTabixAdapter/VcfTabixAdapter.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/esm/VcfAdapter/VcfAdapter.d.ts +1 -2
- package/esm/VcfAdapter/VcfAdapter.js +2 -2
- package/esm/VcfAdapter/VcfAdapter.js.map +1 -1
- package/esm/{VcfTabixAdapter/VcfFeature.d.ts → VcfFeature/index.d.ts} +3 -15
- package/esm/VcfFeature/index.js +56 -0
- package/esm/VcfFeature/index.js.map +1 -0
- package/esm/VcfFeature/util.d.ts +7 -0
- package/esm/VcfFeature/util.js +123 -0
- package/esm/VcfFeature/util.js.map +1 -0
- package/esm/VcfTabixAdapter/VcfTabixAdapter.js +1 -1
- package/esm/VcfTabixAdapter/VcfTabixAdapter.js.map +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/index.js.map +1 -1
- package/package.json +2 -2
- package/src/VcfAdapter/VcfAdapter.test.ts +0 -2
- package/src/VcfAdapter/VcfAdapter.ts +3 -4
- package/src/VcfFeature/index.test.ts +132 -0
- package/src/VcfFeature/index.ts +104 -0
- package/src/VcfFeature/util.ts +140 -0
- package/src/VcfTabixAdapter/VcfTabixAdapter.ts +1 -1
- package/src/index.ts +1 -1
- package/dist/VcfTabixAdapter/VcfFeature.js +0 -187
- package/dist/VcfTabixAdapter/VcfFeature.js.map +0 -1
- package/esm/VcfTabixAdapter/VcfFeature.js +0 -184
- package/esm/VcfTabixAdapter/VcfFeature.js.map +0 -1
- package/src/VcfTabixAdapter/VcfFeature.test.ts +0 -118
- package/src/VcfTabixAdapter/VcfFeature.ts +0 -250
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
2
|
-
import { Region } from '@jbrowse/core/util
|
|
3
|
-
import { Feature } from '@jbrowse/core/util/simpleFeature';
|
|
2
|
+
import { Region, Feature } from '@jbrowse/core/util';
|
|
4
3
|
import IntervalTree from '@flatten-js/interval-tree';
|
|
5
4
|
export default class VcfAdapter extends BaseFeatureDataAdapter {
|
|
6
5
|
static capabilities: string[];
|
|
@@ -10,7 +10,7 @@ const interval_tree_1 = __importDefault(require("@flatten-js/interval-tree"));
|
|
|
10
10
|
const bgzf_filehandle_1 = require("@gmod/bgzf-filehandle");
|
|
11
11
|
const vcf_1 = __importDefault(require("@gmod/vcf"));
|
|
12
12
|
// local
|
|
13
|
-
const VcfFeature_1 = __importDefault(require("../
|
|
13
|
+
const VcfFeature_1 = __importDefault(require("../VcfFeature"));
|
|
14
14
|
const readVcf = (f) => {
|
|
15
15
|
const header = [];
|
|
16
16
|
const rest = [];
|
|
@@ -88,7 +88,7 @@ class VcfAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
|
88
88
|
try {
|
|
89
89
|
const { start, end, refName } = region;
|
|
90
90
|
const { header, intervalTree } = await this.setup();
|
|
91
|
-
const parser = new vcf_1.default({ header
|
|
91
|
+
const parser = new vcf_1.default({ header });
|
|
92
92
|
(_a = intervalTree[refName]) === null || _a === void 0 ? void 0 : _a.search([start, end]).forEach(f => observer.next(new VcfFeature_1.default({
|
|
93
93
|
variant: parser.parseLine(f.line),
|
|
94
94
|
parser,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VcfAdapter.js","sourceRoot":"","sources":["../../src/VcfAdapter/VcfAdapter.ts"],"names":[],"mappings":";;;;;AAAA,yEAGgD;AAEhD,8CAAoD;AACpD,kDAA0D;
|
|
1
|
+
{"version":3,"file":"VcfAdapter.js","sourceRoot":"","sources":["../../src/VcfAdapter/VcfAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { Feature } from '@jbrowse/core/util
|
|
2
|
-
|
|
3
|
-
* VCF Feature creation with lazy genotype evaluation.
|
|
4
|
-
*/
|
|
1
|
+
import { Feature } from '@jbrowse/core/util';
|
|
2
|
+
import VCF from '@gmod/vcf';
|
|
5
3
|
interface Samples {
|
|
6
4
|
[key: string]: {
|
|
7
5
|
[key: string]: {
|
|
@@ -27,7 +25,7 @@ export default class VCFFeature implements Feature {
|
|
|
27
25
|
private _id;
|
|
28
26
|
constructor(args: {
|
|
29
27
|
variant: any;
|
|
30
|
-
parser:
|
|
28
|
+
parser: VCF;
|
|
31
29
|
id: string;
|
|
32
30
|
});
|
|
33
31
|
get(field: string): any;
|
|
@@ -44,16 +42,6 @@ export default class VCFFeature implements Feature {
|
|
|
44
42
|
INFO: any;
|
|
45
43
|
ID: string[];
|
|
46
44
|
}): FeatureData;
|
|
47
|
-
/**
|
|
48
|
-
* Get a sequence ontology (SO) term that describes the variant type
|
|
49
|
-
*/
|
|
50
|
-
_getSOTermAndDescription(ref: string, alt: string[]): [string, string] | [undefined, undefined];
|
|
51
|
-
static _altTypeToSO: {
|
|
52
|
-
[key: string]: string | undefined;
|
|
53
|
-
};
|
|
54
|
-
_getSOAndDescFromAltDefs(ref: string, alt: string): [string, string] | [undefined, undefined];
|
|
55
|
-
_getSOAndDescByExamination(ref: string, alt: string): [string, string];
|
|
56
|
-
_makeDescriptionString(soTerm: string, ref: string, alt: string): string;
|
|
57
45
|
toJSON(): any;
|
|
58
46
|
}
|
|
59
47
|
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// locals
|
|
4
|
+
const util_1 = require("./util");
|
|
5
|
+
class VCFFeature {
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
constructor(args) {
|
|
8
|
+
this.variant = args.variant;
|
|
9
|
+
this.parser = args.parser;
|
|
10
|
+
this.data = this.dataFromVariant(this.variant);
|
|
11
|
+
this._id = args.id;
|
|
12
|
+
}
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
|
+
get(field) {
|
|
15
|
+
return field === 'samples'
|
|
16
|
+
? this.variant.SAMPLES
|
|
17
|
+
: this.data[field] || this.variant[field];
|
|
18
|
+
}
|
|
19
|
+
set() { }
|
|
20
|
+
parent() {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
children() {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
tags() {
|
|
27
|
+
return [...Object.keys(this.data), ...Object.keys(this.variant), 'samples'];
|
|
28
|
+
}
|
|
29
|
+
id() {
|
|
30
|
+
return this._id;
|
|
31
|
+
}
|
|
32
|
+
dataFromVariant(variant) {
|
|
33
|
+
const { REF, ALT, POS, CHROM, INFO, ID } = variant;
|
|
34
|
+
const start = POS - 1;
|
|
35
|
+
const [type, description] = (0, util_1.getSOTermAndDescription)(REF, ALT, this.parser);
|
|
36
|
+
const isTRA = ALT === null || ALT === void 0 ? void 0 : ALT.some(f => f === '<TRA>');
|
|
37
|
+
const isSymbolic = ALT === null || ALT === void 0 ? void 0 : ALT.some(f => f.indexOf('<') !== -1);
|
|
38
|
+
return {
|
|
39
|
+
refName: CHROM,
|
|
40
|
+
start,
|
|
41
|
+
end: isSymbolic && INFO.END && !isTRA ? +INFO.END[0] : start + REF.length,
|
|
42
|
+
description,
|
|
43
|
+
type,
|
|
44
|
+
name: ID === null || ID === void 0 ? void 0 : ID.join(','),
|
|
45
|
+
aliases: ID && ID.length > 1 ? variant.ID.slice(1) : undefined,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
49
|
+
toJSON() {
|
|
50
|
+
return {
|
|
51
|
+
uniqueId: this._id,
|
|
52
|
+
...this.variant,
|
|
53
|
+
...this.data,
|
|
54
|
+
samples: this.variant.SAMPLES,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.default = VCFFeature;
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/VcfFeature/index.ts"],"names":[],"mappings":";;AAGA,SAAS;AACT,iCAAgD;AAsBhD,MAAqB,UAAU;IAU7B,8DAA8D;IAC9D,YAAY,IAA+C;QACzD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC9C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAA;IACpB,CAAC;IAED,8DAA8D;IAC9D,GAAG,CAAC,KAAa;QACf,OAAO,KAAK,KAAK,SAAS;YACxB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;YACtB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC7C,CAAC;IAED,GAAG,KAAI,CAAC;IAER,MAAM;QACJ,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,QAAQ;QACN,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAA;IAC7E,CAAC;IAED,EAAE;QACA,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,eAAe,CAAC,OAOf;QACC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAA;QAClD,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,CAAA;QACrB,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,IAAA,8BAAuB,EAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAC1E,MAAM,KAAK,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAA;QAC3C,MAAM,UAAU,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAExD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK;YACL,GAAG,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM;YACzE,WAAW;YACX,IAAI;YACJ,IAAI,EAAE,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,IAAI,CAAC,GAAG,CAAC;YACnB,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;SAC/D,CAAA;IACH,CAAC;IAED,8DAA8D;IAC9D,MAAM;QACJ,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,GAAG;YAClB,GAAG,IAAI,CAAC,OAAO;YACf,GAAG,IAAI,CAAC,IAAI;YACZ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;SAC9B,CAAA;IACH,CAAC;CACF;AA7ED,6BA6EC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import VCF from '@gmod/vcf';
|
|
2
|
+
/**
|
|
3
|
+
* Get a sequence ontology (SO) term that describes the variant type
|
|
4
|
+
*/
|
|
5
|
+
export declare function getSOTermAndDescription(ref: string, alt: string[], parser: VCF): string[];
|
|
6
|
+
export declare function getSOAndDescFromAltDefs(ref: string, alt: string, parser: VCF): string[];
|
|
7
|
+
export declare function getSOAndDescByExamination(ref: string, alt: string): string[];
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSOAndDescByExamination = exports.getSOAndDescFromAltDefs = exports.getSOTermAndDescription = void 0;
|
|
4
|
+
const vcf_1 = require("@gmod/vcf");
|
|
5
|
+
const altTypeToSO = {
|
|
6
|
+
DEL: 'deletion',
|
|
7
|
+
INS: 'insertion',
|
|
8
|
+
DUP: 'duplication',
|
|
9
|
+
INV: 'inversion',
|
|
10
|
+
INVDUP: 'inverted duplication',
|
|
11
|
+
CNV: 'copy_number_variation',
|
|
12
|
+
TRA: 'translocation',
|
|
13
|
+
'DUP:TANDEM': 'tandem_duplication',
|
|
14
|
+
NON_REF: 'sequence_variant',
|
|
15
|
+
'*': 'sequence_variant',
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Get a sequence ontology (SO) term that describes the variant type
|
|
19
|
+
*/
|
|
20
|
+
function getSOTermAndDescription(ref, alt, parser) {
|
|
21
|
+
// it's just a remark if there are no alternate alleles
|
|
22
|
+
if (!alt || alt.length === 0) {
|
|
23
|
+
return ['remark', 'no alternative alleles'];
|
|
24
|
+
}
|
|
25
|
+
const soTerms = new Set();
|
|
26
|
+
let descriptions = new Set();
|
|
27
|
+
alt.forEach(a => {
|
|
28
|
+
let [soTerm, description] = getSOAndDescFromAltDefs(ref, a, parser);
|
|
29
|
+
if (!soTerm) {
|
|
30
|
+
;
|
|
31
|
+
[soTerm, description] = getSOAndDescByExamination(ref, a);
|
|
32
|
+
}
|
|
33
|
+
if (soTerm && description) {
|
|
34
|
+
soTerms.add(soTerm);
|
|
35
|
+
descriptions.add(description);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
// Combine descriptions like ["SNV G -> A", "SNV G -> T"] to ["SNV G -> A,T"]
|
|
39
|
+
if (descriptions.size > 1) {
|
|
40
|
+
const descs = [...descriptions];
|
|
41
|
+
const prefixes = new Set(descs.map(desc => {
|
|
42
|
+
const prefix = desc.split('->');
|
|
43
|
+
return prefix[1] ? prefix[0] : desc;
|
|
44
|
+
}));
|
|
45
|
+
descriptions = new Set([...prefixes].map(prefix => {
|
|
46
|
+
const suffixes = descs
|
|
47
|
+
.map(desc => {
|
|
48
|
+
const pref = desc.split('-> ');
|
|
49
|
+
return pref[1] && pref[0] === prefix ? pref[1] : '';
|
|
50
|
+
})
|
|
51
|
+
.filter(f => !!f);
|
|
52
|
+
return suffixes.length ? prefix + '-> ' + suffixes.join(',') : prefix;
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
if (soTerms.size) {
|
|
56
|
+
return [[...soTerms].join(','), [...descriptions].join(',')];
|
|
57
|
+
}
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
exports.getSOTermAndDescription = getSOTermAndDescription;
|
|
61
|
+
function getSOAndDescFromAltDefs(ref, alt, parser) {
|
|
62
|
+
if (typeof alt === 'string' && !alt.startsWith('<')) {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
// look for a definition with an SO type for this
|
|
66
|
+
let soTerm = altTypeToSO[alt];
|
|
67
|
+
// if no SO term but ALT is in metadata, assume sequence_variant
|
|
68
|
+
if (!soTerm && parser.getMetadata('ALT', alt)) {
|
|
69
|
+
soTerm = 'sequence_variant';
|
|
70
|
+
}
|
|
71
|
+
if (soTerm) {
|
|
72
|
+
return [soTerm, alt];
|
|
73
|
+
}
|
|
74
|
+
// try to look for a definition for a parent term if we can
|
|
75
|
+
const modAlt = alt.split(':');
|
|
76
|
+
if (modAlt.length > 1) {
|
|
77
|
+
return getSOAndDescFromAltDefs(ref, `<${modAlt.slice(0, modAlt.length - 1).join(':')}>`, parser);
|
|
78
|
+
}
|
|
79
|
+
// no parent
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
exports.getSOAndDescFromAltDefs = getSOAndDescFromAltDefs;
|
|
83
|
+
// note: term SNV is used instead of SNP because SO definition of SNP says
|
|
84
|
+
// abundance must be at least 1% in population, and can't be sure we meet
|
|
85
|
+
// that
|
|
86
|
+
function getSOAndDescByExamination(ref, alt) {
|
|
87
|
+
const bnd = (0, vcf_1.parseBreakend)(alt);
|
|
88
|
+
if (bnd) {
|
|
89
|
+
return ['breakend', alt];
|
|
90
|
+
}
|
|
91
|
+
else if (ref.length === 1 && alt.length === 1) {
|
|
92
|
+
return ['SNV', makeDescriptionString('SNV', ref, alt)];
|
|
93
|
+
}
|
|
94
|
+
else if (alt === '<INS>') {
|
|
95
|
+
return ['insertion', alt];
|
|
96
|
+
}
|
|
97
|
+
else if (alt === '<DEL>') {
|
|
98
|
+
return ['deletion', alt];
|
|
99
|
+
}
|
|
100
|
+
else if (alt === '<INV>') {
|
|
101
|
+
return ['deletion', alt];
|
|
102
|
+
}
|
|
103
|
+
else if (alt === '<TRA>') {
|
|
104
|
+
return ['translocation', alt];
|
|
105
|
+
}
|
|
106
|
+
else if (alt.includes('<')) {
|
|
107
|
+
return ['sv', alt];
|
|
108
|
+
}
|
|
109
|
+
else if (ref.length === alt.length) {
|
|
110
|
+
if (ref.split('').reverse().join('') === alt) {
|
|
111
|
+
return ['inversion', makeDescriptionString('inversion', ref, alt)];
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
return ['substitution', makeDescriptionString('substitution', ref, alt)];
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else if (ref.length <= alt.length) {
|
|
118
|
+
return ['insertion', makeDescriptionString('insertion', ref, alt)];
|
|
119
|
+
}
|
|
120
|
+
else if (ref.length > alt.length) {
|
|
121
|
+
return ['deletion', makeDescriptionString('deletion', ref, alt)];
|
|
122
|
+
}
|
|
123
|
+
return ['indel', makeDescriptionString('indel', ref, alt)];
|
|
124
|
+
}
|
|
125
|
+
exports.getSOAndDescByExamination = getSOAndDescByExamination;
|
|
126
|
+
function makeDescriptionString(soTerm, ref, alt) {
|
|
127
|
+
return `${soTerm} ${ref} -> ${alt}`;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/VcfFeature/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ const rxjs_1 = require("@jbrowse/core/util/rxjs");
|
|
|
10
10
|
const tabix_1 = require("@gmod/tabix");
|
|
11
11
|
const vcf_1 = __importDefault(require("@gmod/vcf"));
|
|
12
12
|
// local
|
|
13
|
-
const VcfFeature_1 = __importDefault(require("
|
|
13
|
+
const VcfFeature_1 = __importDefault(require("../VcfFeature"));
|
|
14
14
|
class default_1 extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
15
15
|
async configurePre() {
|
|
16
16
|
const pm = this.pluginManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VcfTabixAdapter.js","sourceRoot":"","sources":["../../src/VcfTabixAdapter/VcfTabixAdapter.ts"],"names":[],"mappings":";;;;;AAAA,yEAGgD;AAMhD,8CAAoD;AACpD,6CAAoD;AACpD,kDAA0D;AAE1D,uCAA8C;AAC9C,oDAAiC;AAIjC,QAAQ;AACR
|
|
1
|
+
{"version":3,"file":"VcfTabixAdapter.js","sourceRoot":"","sources":["../../src/VcfTabixAdapter/VcfTabixAdapter.ts"],"names":[],"mappings":";;;;;AAAA,yEAGgD;AAMhD,8CAAoD;AACpD,6CAAoD;AACpD,kDAA0D;AAE1D,uCAA8C;AAC9C,oDAAiC;AAIjC,QAAQ;AACR,+DAAsC;AAEtC,eAAqB,SAAQ,oCAAsB;IAOzC,KAAK,CAAC,YAAY;QACxB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAA;QAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAA;QAEtD,MAAM,UAAU,GAAG,IAAA,iBAAY,EAAC,aAA6B,EAAE,EAAE,CAAC,CAAA;QAClE,MAAM,KAAK,GAAG,SAAS,KAAK,KAAK,CAAA;QACjC,MAAM,GAAG,GAAG,IAAI,wBAAgB,CAAC;YAC/B,UAAU;YACV,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,IAAA,iBAAY,EAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YAC7D,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,iBAAY,EAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YAC9D,cAAc,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE;YAC5B,cAAc,EAAE,UAAU;SAC3B,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE,CAAA;QACpC,OAAO;YACL,UAAU;YACV,GAAG;YACH,MAAM,EAAE,IAAI,aAAS,CAAC,EAAE,MAAM,EAAE,CAAC;SAClC,CAAA;IACH,CAAC;IAES,KAAK,CAAC,SAAS;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC9C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;gBAC3B,MAAM,CAAC,CAAA;YACT,CAAC,CAAC,CAAA;SACH;QACD,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,OAAoB,EAAE;QAC7C,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACtC,OAAO,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACtC,OAAO,GAAG,CAAC,SAAS,EAAE,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACzC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAA;IAC7B,CAAC;IAEM,WAAW,CAAC,KAAuB,EAAE,OAAoB,EAAE;QAChE,OAAO,IAAA,uBAAgB,EAAU,KAAK,EAAC,QAAQ,EAAC,EAAE;YAChD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA;YACrC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;YAC9C,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;gBACtC,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;oBACjC,QAAQ,CAAC,IAAI,CACX,IAAI,oBAAU,CAAC;wBACb,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;wBAC/B,MAAM;wBACN,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,QAAQ,UAAU,EAAE;qBACnC,CAAC,CACH,CAAA;gBACH,CAAC;gBACD,GAAG,IAAI;aACR,CAAC,CAAA;YACF,QAAQ,CAAC,QAAQ,EAAE,CAAA;QACrB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACjB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,4BAA4B,CACjC,OAAiB,EACjB,OAAoB,EAAE;QAEtB,OAAO,IAAA,uBAAgB,EAAU,KAAK,EAAE,QAA2B,EAAE,EAAE;YACrE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;YAEtC,aAAa;YACb,MAAM,KAAK,GAAG,MAAM,IAAA,sBAAe,EAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;YACvD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;YAC7C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAA;YACpC,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAA;YAC/C,IAAI,GAAG,GAAG,GAAG,EAAE;gBACb,yDAAyD;gBACzD,GAAG,GAAG,GAAG,CAAA;aACV;YACD,IAAI,GAAG,GAAG,EAAE,EAAE;gBACZ,OAAO,CAAC,IAAI,CACV,yCAAyC,GAAG,6DAA6D,CAC1G,CAAA;aACF;YACD,KAAK,CAAC,4BAA4B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QACvE,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,aAAa,EAAC,gBAAgB,IAAS,CAAC;CAChD;AApHD,4BAoHC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -30,6 +30,6 @@ class VariantsPlugin extends Plugin_1.default {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
exports.default = VariantsPlugin;
|
|
33
|
-
var VcfFeature_1 = require("./
|
|
33
|
+
var VcfFeature_1 = require("./VcfFeature");
|
|
34
34
|
Object.defineProperty(exports, "VcfFeature", { enumerable: true, get: function () { return __importDefault(VcfFeature_1).default; } });
|
|
35
35
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAsC;AACtC,wEAAgD;AAChD,wEAAgD;AAChD,kEAA0C;AAC1C,kEAAyC;AAEzC,gFAAwD;AACxD,kFAA0D;AAC1D,sGAA8E;AAC9E,kFAA0D;AAE1D,MAAqB,cAAe,SAAQ,gBAAM;IAAlD;;QACE,SAAI,GAAG,gBAAgB,CAAA;IAYzB,CAAC;IAVC,OAAO,CAAC,aAA4B;QAClC,IAAA,oBAAW,EAAC,aAAa,CAAC,CAAA;QAC1B,IAAA,yBAAgB,EAAC,aAAa,CAAC,CAAA;QAC/B,IAAA,8BAAqB,EAAC,aAAa,CAAC,CAAA;QACpC,IAAA,sBAAa,EAAC,aAAa,CAAC,CAAA;QAC5B,IAAA,yBAAgB,EAAC,aAAa,CAAC,CAAA;QAC/B,IAAA,8BAAqB,EAAC,aAAa,CAAC,CAAA;QACpC,IAAA,wCAA+B,EAAC,aAAa,CAAC,CAAA;QAC9C,IAAA,6BAAoB,EAAC,aAAa,CAAC,CAAA;IACrC,CAAC;CACF;AAbD,iCAaC;AAED,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAsC;AACtC,wEAAgD;AAChD,wEAAgD;AAChD,kEAA0C;AAC1C,kEAAyC;AAEzC,gFAAwD;AACxD,kFAA0D;AAC1D,sGAA8E;AAC9E,kFAA0D;AAE1D,MAAqB,cAAe,SAAQ,gBAAM;IAAlD;;QACE,SAAI,GAAG,gBAAgB,CAAA;IAYzB,CAAC;IAVC,OAAO,CAAC,aAA4B;QAClC,IAAA,oBAAW,EAAC,aAAa,CAAC,CAAA;QAC1B,IAAA,yBAAgB,EAAC,aAAa,CAAC,CAAA;QAC/B,IAAA,8BAAqB,EAAC,aAAa,CAAC,CAAA;QACpC,IAAA,sBAAa,EAAC,aAAa,CAAC,CAAA;QAC5B,IAAA,yBAAgB,EAAC,aAAa,CAAC,CAAA;QAC/B,IAAA,8BAAqB,EAAC,aAAa,CAAC,CAAA;QACpC,IAAA,wCAA+B,EAAC,aAAa,CAAC,CAAA;QAC9C,IAAA,6BAAoB,EAAC,aAAa,CAAC,CAAA;IACrC,CAAC;CACF;AAbD,iCAaC;AAED,2CAAoD;AAA3C,yHAAA,OAAO,OAAc"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
2
|
-
import { Region } from '@jbrowse/core/util
|
|
3
|
-
import { Feature } from '@jbrowse/core/util/simpleFeature';
|
|
2
|
+
import { Region, Feature } from '@jbrowse/core/util';
|
|
4
3
|
import IntervalTree from '@flatten-js/interval-tree';
|
|
5
4
|
export default class VcfAdapter extends BaseFeatureDataAdapter {
|
|
6
5
|
static capabilities: string[];
|
|
@@ -5,7 +5,7 @@ import IntervalTree from '@flatten-js/interval-tree';
|
|
|
5
5
|
import { unzip } from '@gmod/bgzf-filehandle';
|
|
6
6
|
import VCF from '@gmod/vcf';
|
|
7
7
|
// local
|
|
8
|
-
import VcfFeature from '../
|
|
8
|
+
import VcfFeature from '../VcfFeature';
|
|
9
9
|
const readVcf = (f) => {
|
|
10
10
|
const header = [];
|
|
11
11
|
const rest = [];
|
|
@@ -83,7 +83,7 @@ export default class VcfAdapter extends BaseFeatureDataAdapter {
|
|
|
83
83
|
try {
|
|
84
84
|
const { start, end, refName } = region;
|
|
85
85
|
const { header, intervalTree } = await this.setup();
|
|
86
|
-
const parser = new VCF({ header
|
|
86
|
+
const parser = new VCF({ header });
|
|
87
87
|
(_a = intervalTree[refName]) === null || _a === void 0 ? void 0 : _a.search([start, end]).forEach(f => observer.next(new VcfFeature({
|
|
88
88
|
variant: parser.parseLine(f.line),
|
|
89
89
|
parser,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VcfAdapter.js","sourceRoot":"","sources":["../../src/VcfAdapter/VcfAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,GAEvB,MAAM,yCAAyC,CAAA;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"VcfAdapter.js","sourceRoot":"","sources":["../../src/VcfAdapter/VcfAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { Feature } from '@jbrowse/core/util
|
|
2
|
-
|
|
3
|
-
* VCF Feature creation with lazy genotype evaluation.
|
|
4
|
-
*/
|
|
1
|
+
import { Feature } from '@jbrowse/core/util';
|
|
2
|
+
import VCF from '@gmod/vcf';
|
|
5
3
|
interface Samples {
|
|
6
4
|
[key: string]: {
|
|
7
5
|
[key: string]: {
|
|
@@ -27,7 +25,7 @@ export default class VCFFeature implements Feature {
|
|
|
27
25
|
private _id;
|
|
28
26
|
constructor(args: {
|
|
29
27
|
variant: any;
|
|
30
|
-
parser:
|
|
28
|
+
parser: VCF;
|
|
31
29
|
id: string;
|
|
32
30
|
});
|
|
33
31
|
get(field: string): any;
|
|
@@ -44,16 +42,6 @@ export default class VCFFeature implements Feature {
|
|
|
44
42
|
INFO: any;
|
|
45
43
|
ID: string[];
|
|
46
44
|
}): FeatureData;
|
|
47
|
-
/**
|
|
48
|
-
* Get a sequence ontology (SO) term that describes the variant type
|
|
49
|
-
*/
|
|
50
|
-
_getSOTermAndDescription(ref: string, alt: string[]): [string, string] | [undefined, undefined];
|
|
51
|
-
static _altTypeToSO: {
|
|
52
|
-
[key: string]: string | undefined;
|
|
53
|
-
};
|
|
54
|
-
_getSOAndDescFromAltDefs(ref: string, alt: string): [string, string] | [undefined, undefined];
|
|
55
|
-
_getSOAndDescByExamination(ref: string, alt: string): [string, string];
|
|
56
|
-
_makeDescriptionString(soTerm: string, ref: string, alt: string): string;
|
|
57
45
|
toJSON(): any;
|
|
58
46
|
}
|
|
59
47
|
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// locals
|
|
2
|
+
import { getSOTermAndDescription } from './util';
|
|
3
|
+
export default class VCFFeature {
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5
|
+
constructor(args) {
|
|
6
|
+
this.variant = args.variant;
|
|
7
|
+
this.parser = args.parser;
|
|
8
|
+
this.data = this.dataFromVariant(this.variant);
|
|
9
|
+
this._id = args.id;
|
|
10
|
+
}
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
get(field) {
|
|
13
|
+
return field === 'samples'
|
|
14
|
+
? this.variant.SAMPLES
|
|
15
|
+
: this.data[field] || this.variant[field];
|
|
16
|
+
}
|
|
17
|
+
set() { }
|
|
18
|
+
parent() {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
children() {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
tags() {
|
|
25
|
+
return [...Object.keys(this.data), ...Object.keys(this.variant), 'samples'];
|
|
26
|
+
}
|
|
27
|
+
id() {
|
|
28
|
+
return this._id;
|
|
29
|
+
}
|
|
30
|
+
dataFromVariant(variant) {
|
|
31
|
+
const { REF, ALT, POS, CHROM, INFO, ID } = variant;
|
|
32
|
+
const start = POS - 1;
|
|
33
|
+
const [type, description] = getSOTermAndDescription(REF, ALT, this.parser);
|
|
34
|
+
const isTRA = ALT === null || ALT === void 0 ? void 0 : ALT.some(f => f === '<TRA>');
|
|
35
|
+
const isSymbolic = ALT === null || ALT === void 0 ? void 0 : ALT.some(f => f.indexOf('<') !== -1);
|
|
36
|
+
return {
|
|
37
|
+
refName: CHROM,
|
|
38
|
+
start,
|
|
39
|
+
end: isSymbolic && INFO.END && !isTRA ? +INFO.END[0] : start + REF.length,
|
|
40
|
+
description,
|
|
41
|
+
type,
|
|
42
|
+
name: ID === null || ID === void 0 ? void 0 : ID.join(','),
|
|
43
|
+
aliases: ID && ID.length > 1 ? variant.ID.slice(1) : undefined,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
47
|
+
toJSON() {
|
|
48
|
+
return {
|
|
49
|
+
uniqueId: this._id,
|
|
50
|
+
...this.variant,
|
|
51
|
+
...this.data,
|
|
52
|
+
samples: this.variant.SAMPLES,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/VcfFeature/index.ts"],"names":[],"mappings":"AAGA,SAAS;AACT,OAAO,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAA;AAsBhD,MAAM,CAAC,OAAO,OAAO,UAAU;IAU7B,8DAA8D;IAC9D,YAAY,IAA+C;QACzD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC9C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAA;IACpB,CAAC;IAED,8DAA8D;IAC9D,GAAG,CAAC,KAAa;QACf,OAAO,KAAK,KAAK,SAAS;YACxB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;YACtB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC7C,CAAC;IAED,GAAG,KAAI,CAAC;IAER,MAAM;QACJ,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,QAAQ;QACN,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAA;IAC7E,CAAC;IAED,EAAE;QACA,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,eAAe,CAAC,OAOf;QACC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAA;QAClD,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,CAAA;QACrB,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAC1E,MAAM,KAAK,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAA;QAC3C,MAAM,UAAU,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAExD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK;YACL,GAAG,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM;YACzE,WAAW;YACX,IAAI;YACJ,IAAI,EAAE,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,IAAI,CAAC,GAAG,CAAC;YACnB,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;SAC/D,CAAA;IACH,CAAC;IAED,8DAA8D;IAC9D,MAAM;QACJ,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,GAAG;YAClB,GAAG,IAAI,CAAC,OAAO;YACf,GAAG,IAAI,CAAC,IAAI;YACZ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;SAC9B,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import VCF from '@gmod/vcf';
|
|
2
|
+
/**
|
|
3
|
+
* Get a sequence ontology (SO) term that describes the variant type
|
|
4
|
+
*/
|
|
5
|
+
export declare function getSOTermAndDescription(ref: string, alt: string[], parser: VCF): string[];
|
|
6
|
+
export declare function getSOAndDescFromAltDefs(ref: string, alt: string, parser: VCF): string[];
|
|
7
|
+
export declare function getSOAndDescByExamination(ref: string, alt: string): string[];
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { parseBreakend } from '@gmod/vcf';
|
|
2
|
+
const altTypeToSO = {
|
|
3
|
+
DEL: 'deletion',
|
|
4
|
+
INS: 'insertion',
|
|
5
|
+
DUP: 'duplication',
|
|
6
|
+
INV: 'inversion',
|
|
7
|
+
INVDUP: 'inverted duplication',
|
|
8
|
+
CNV: 'copy_number_variation',
|
|
9
|
+
TRA: 'translocation',
|
|
10
|
+
'DUP:TANDEM': 'tandem_duplication',
|
|
11
|
+
NON_REF: 'sequence_variant',
|
|
12
|
+
'*': 'sequence_variant',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Get a sequence ontology (SO) term that describes the variant type
|
|
16
|
+
*/
|
|
17
|
+
export function getSOTermAndDescription(ref, alt, parser) {
|
|
18
|
+
// it's just a remark if there are no alternate alleles
|
|
19
|
+
if (!alt || alt.length === 0) {
|
|
20
|
+
return ['remark', 'no alternative alleles'];
|
|
21
|
+
}
|
|
22
|
+
const soTerms = new Set();
|
|
23
|
+
let descriptions = new Set();
|
|
24
|
+
alt.forEach(a => {
|
|
25
|
+
let [soTerm, description] = getSOAndDescFromAltDefs(ref, a, parser);
|
|
26
|
+
if (!soTerm) {
|
|
27
|
+
;
|
|
28
|
+
[soTerm, description] = getSOAndDescByExamination(ref, a);
|
|
29
|
+
}
|
|
30
|
+
if (soTerm && description) {
|
|
31
|
+
soTerms.add(soTerm);
|
|
32
|
+
descriptions.add(description);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
// Combine descriptions like ["SNV G -> A", "SNV G -> T"] to ["SNV G -> A,T"]
|
|
36
|
+
if (descriptions.size > 1) {
|
|
37
|
+
const descs = [...descriptions];
|
|
38
|
+
const prefixes = new Set(descs.map(desc => {
|
|
39
|
+
const prefix = desc.split('->');
|
|
40
|
+
return prefix[1] ? prefix[0] : desc;
|
|
41
|
+
}));
|
|
42
|
+
descriptions = new Set([...prefixes].map(prefix => {
|
|
43
|
+
const suffixes = descs
|
|
44
|
+
.map(desc => {
|
|
45
|
+
const pref = desc.split('-> ');
|
|
46
|
+
return pref[1] && pref[0] === prefix ? pref[1] : '';
|
|
47
|
+
})
|
|
48
|
+
.filter(f => !!f);
|
|
49
|
+
return suffixes.length ? prefix + '-> ' + suffixes.join(',') : prefix;
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
if (soTerms.size) {
|
|
53
|
+
return [[...soTerms].join(','), [...descriptions].join(',')];
|
|
54
|
+
}
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
export function getSOAndDescFromAltDefs(ref, alt, parser) {
|
|
58
|
+
if (typeof alt === 'string' && !alt.startsWith('<')) {
|
|
59
|
+
return [];
|
|
60
|
+
}
|
|
61
|
+
// look for a definition with an SO type for this
|
|
62
|
+
let soTerm = altTypeToSO[alt];
|
|
63
|
+
// if no SO term but ALT is in metadata, assume sequence_variant
|
|
64
|
+
if (!soTerm && parser.getMetadata('ALT', alt)) {
|
|
65
|
+
soTerm = 'sequence_variant';
|
|
66
|
+
}
|
|
67
|
+
if (soTerm) {
|
|
68
|
+
return [soTerm, alt];
|
|
69
|
+
}
|
|
70
|
+
// try to look for a definition for a parent term if we can
|
|
71
|
+
const modAlt = alt.split(':');
|
|
72
|
+
if (modAlt.length > 1) {
|
|
73
|
+
return getSOAndDescFromAltDefs(ref, `<${modAlt.slice(0, modAlt.length - 1).join(':')}>`, parser);
|
|
74
|
+
}
|
|
75
|
+
// no parent
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
// note: term SNV is used instead of SNP because SO definition of SNP says
|
|
79
|
+
// abundance must be at least 1% in population, and can't be sure we meet
|
|
80
|
+
// that
|
|
81
|
+
export function getSOAndDescByExamination(ref, alt) {
|
|
82
|
+
const bnd = parseBreakend(alt);
|
|
83
|
+
if (bnd) {
|
|
84
|
+
return ['breakend', alt];
|
|
85
|
+
}
|
|
86
|
+
else if (ref.length === 1 && alt.length === 1) {
|
|
87
|
+
return ['SNV', makeDescriptionString('SNV', ref, alt)];
|
|
88
|
+
}
|
|
89
|
+
else if (alt === '<INS>') {
|
|
90
|
+
return ['insertion', alt];
|
|
91
|
+
}
|
|
92
|
+
else if (alt === '<DEL>') {
|
|
93
|
+
return ['deletion', alt];
|
|
94
|
+
}
|
|
95
|
+
else if (alt === '<INV>') {
|
|
96
|
+
return ['deletion', alt];
|
|
97
|
+
}
|
|
98
|
+
else if (alt === '<TRA>') {
|
|
99
|
+
return ['translocation', alt];
|
|
100
|
+
}
|
|
101
|
+
else if (alt.includes('<')) {
|
|
102
|
+
return ['sv', alt];
|
|
103
|
+
}
|
|
104
|
+
else if (ref.length === alt.length) {
|
|
105
|
+
if (ref.split('').reverse().join('') === alt) {
|
|
106
|
+
return ['inversion', makeDescriptionString('inversion', ref, alt)];
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
return ['substitution', makeDescriptionString('substitution', ref, alt)];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else if (ref.length <= alt.length) {
|
|
113
|
+
return ['insertion', makeDescriptionString('insertion', ref, alt)];
|
|
114
|
+
}
|
|
115
|
+
else if (ref.length > alt.length) {
|
|
116
|
+
return ['deletion', makeDescriptionString('deletion', ref, alt)];
|
|
117
|
+
}
|
|
118
|
+
return ['indel', makeDescriptionString('indel', ref, alt)];
|
|
119
|
+
}
|
|
120
|
+
function makeDescriptionString(soTerm, ref, alt) {
|
|
121
|
+
return `${soTerm} ${ref} -> ${alt}`;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/VcfFeature/util.ts"],"names":[],"mappings":"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"}
|