-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathExtendedVcfFeature.ts
More file actions
58 lines (48 loc) · 1.63 KB
/
ExtendedVcfFeature.ts
File metadata and controls
58 lines (48 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import { VcfFeature } from '@jbrowse/plugin-variants'
import VcfParser, { Variant } from '@gmod/vcf';
export default class ExtendedVcfFeature extends VcfFeature {
constructor(args: { variant: Variant; parser: VcfParser; id: string }) {
args.variant = ExtendedVcfFeature.extractImpact(args.variant)
super(args)
}
toJSON() {
const ret: any = super.toJSON()
// Preserve VCF INFO header metadata through JSON/snapshot flows used by
// JBrowse widgets. parser is not guaranteed to survive serialization.
ret.vcfMetadataInfo = (this as any).parser?.metadata?.INFO || {}
return ret
}
static extractImpact(variant: Variant) {
// Only append if not present:
if (variant.INFO["IMPACT"]) {
return(variant);
}
const ann = variant.INFO["ANN"] as string[] | undefined
if (!ann) {
return(variant);
}
let IMPACTs = new Set<String>()
for (let i = 0; i < ann.length; i++){
if (/HIGH/g.exec(ann[i])){
IMPACTs.add("HIGH")
}
else if (/MODERATE/g.exec(ann[i])){
IMPACTs.add("MODERATE")
}
else if (/LOW/g.exec(ann[i])){
IMPACTs.add("LOW")
}
}
variant.INFO["IMPACT"] = null
if (IMPACTs.has('HIGH')) {
variant.INFO["IMPACT"] = 'HIGH'
}
else if (IMPACTs.has('MODERATE')) {
variant.INFO["IMPACT"] = 'MODERATE'
}
else if (IMPACTs.has('LOW')) {
variant.INFO["IMPACT"] = 'LOW'
}
return(variant)
}
}