@sjcrh/proteinpaint-shared 2.187.0 → 2.188.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/README.md +10 -2
- package/constants/AiHisto.ts +27 -0
- package/constants/README.md +11 -0
- package/devTs.ts +3 -0
- package/dist/constants/AiHisto.d.ts +23 -0
- package/dist/constants/AiHisto.js +31 -0
- package/dist/constants/AiHisto.js.map +7 -0
- package/dist/src/aiHisto.d.ts +5 -0
- package/dist/src/aiHisto.js +15 -0
- package/dist/src/aiHisto.js.map +7 -0
- package/dist/src/bulk.cnv.js +83 -0
- package/dist/src/bulk.cnv.js.map +7 -0
- package/dist/src/bulk.del.js +119 -0
- package/dist/src/bulk.del.js.map +7 -0
- package/dist/src/bulk.itd.js +119 -0
- package/dist/src/bulk.itd.js.map +7 -0
- package/dist/src/bulk.js +183 -0
- package/dist/src/bulk.js.map +7 -0
- package/dist/src/bulk.snv.js +175 -0
- package/dist/src/bulk.snv.js.map +7 -0
- package/dist/src/bulk.sv.js +266 -0
- package/dist/src/bulk.sv.js.map +7 -0
- package/dist/src/bulk.svjson.js +151 -0
- package/dist/src/bulk.svjson.js.map +7 -0
- package/dist/src/bulk.trunc.js +122 -0
- package/dist/src/bulk.trunc.js.map +7 -0
- package/dist/src/clustering.js +71 -0
- package/dist/src/clustering.js.map +7 -0
- package/dist/src/common.js +1302 -0
- package/dist/src/common.js.map +7 -0
- package/dist/src/compute.percentile.js +10 -0
- package/dist/src/compute.percentile.js.map +7 -0
- package/dist/src/doc.d.ts +7 -0
- package/dist/src/doc.js +10 -0
- package/dist/src/doc.js.map +7 -0
- package/dist/src/fetch-helpers.js +177 -0
- package/dist/src/fetch-helpers.js.map +7 -0
- package/dist/src/fileSize.js +10 -0
- package/dist/src/fileSize.js.map +7 -0
- package/dist/src/filter.d.ts +62 -0
- package/dist/src/filter.js +194 -0
- package/dist/src/filter.js.map +7 -0
- package/dist/src/hash.js +20 -0
- package/dist/src/hash.js.map +7 -0
- package/dist/src/helpers.js +66 -0
- package/dist/src/helpers.js.map +7 -0
- package/dist/src/index.d.ts +26 -0
- package/dist/src/index.js +27 -0
- package/dist/src/index.js.map +7 -0
- package/dist/src/joinUrl.d.ts +1 -0
- package/dist/src/joinUrl.js +17 -0
- package/dist/src/joinUrl.js.map +7 -0
- package/dist/src/mds3tk.js +64 -0
- package/dist/src/mds3tk.js.map +7 -0
- package/dist/src/roundValue.js +57 -0
- package/dist/src/roundValue.js.map +7 -0
- package/dist/src/termdb.bins.js +272 -0
- package/dist/src/termdb.bins.js.map +7 -0
- package/dist/src/termdb.initbinconfig.js +79 -0
- package/dist/src/termdb.initbinconfig.js.map +7 -0
- package/dist/src/termdb.usecase.js +239 -0
- package/dist/src/termdb.usecase.js.map +7 -0
- package/dist/src/terms.d.ts +83 -0
- package/dist/src/terms.js +327 -0
- package/dist/src/terms.js.map +7 -0
- package/dist/src/time.d.ts +9 -0
- package/dist/src/time.js +23 -0
- package/dist/src/time.js.map +7 -0
- package/dist/src/tree.js +82 -0
- package/dist/src/tree.js.map +7 -0
- package/dist/src/urljson.d.ts +8 -0
- package/dist/src/urljson.js +31 -0
- package/dist/src/urljson.js.map +7 -0
- package/dist/src/vcf.ann.js +56 -0
- package/dist/src/vcf.ann.js.map +7 -0
- package/dist/src/vcf.csq.js +82 -0
- package/dist/src/vcf.csq.js.map +7 -0
- package/dist/src/vcf.info.js +40 -0
- package/dist/src/vcf.info.js.map +7 -0
- package/dist/src/vcf.js +439 -0
- package/dist/src/vcf.js.map +7 -0
- package/dist/src/vcf.type.js +17 -0
- package/dist/src/vcf.type.js.map +7 -0
- package/package.json +20 -11
- package/src/bulk.cnv.js +0 -86
- package/src/bulk.del.js +0 -124
- package/src/bulk.itd.js +0 -123
- package/src/bulk.js +0 -197
- package/src/bulk.snv.js +0 -271
- package/src/bulk.sv.js +0 -276
- package/src/bulk.svjson.js +0 -164
- package/src/bulk.trunc.js +0 -132
- package/src/clustering.js +0 -66
- package/src/common.js +0 -1608
- package/src/compute.percentile.js +0 -11
- package/src/doc.js +0 -6
- package/src/fetch-helpers.js +0 -323
- package/src/fileSize.js +0 -6
- package/src/filter.js +0 -221
- package/src/hash.js +0 -21
- package/src/helpers.js +0 -88
- package/src/index.js +0 -26
- package/src/joinUrl.js +0 -14
- package/src/mds3tk.js +0 -100
- package/src/roundValue.js +0 -94
- package/src/termdb.bins.js +0 -456
- package/src/termdb.initbinconfig.js +0 -130
- package/src/termdb.usecase.js +0 -344
- package/src/terms.js +0 -341
- package/src/time.js +0 -22
- package/src/tree.js +0 -138
- package/src/urljson.js +0 -41
- package/src/vcf.ann.js +0 -62
- package/src/vcf.csq.js +0 -153
- package/src/vcf.info.js +0 -50
- package/src/vcf.js +0 -654
- package/src/vcf.type.js +0 -24
package/dist/src/bulk.js
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import * as common from "./common.js";
|
|
2
|
+
var bulk_default = {};
|
|
3
|
+
function init_bulk_flag(genome) {
|
|
4
|
+
if (!genome) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
const mclasslabel2key = {};
|
|
8
|
+
for (const n in common.mclass) {
|
|
9
|
+
mclasslabel2key[common.mclass[n].label.toUpperCase()] = n;
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
genome,
|
|
13
|
+
mclasslabel2key,
|
|
14
|
+
data: {},
|
|
15
|
+
sample2disease: {},
|
|
16
|
+
// (proof) k: sample, v: disease
|
|
17
|
+
// will only record this when origin is used
|
|
18
|
+
patient2st: {},
|
|
19
|
+
// k: patient, v: { k: sampletype, v: sample }
|
|
20
|
+
// new sample names always override old
|
|
21
|
+
good: 0,
|
|
22
|
+
geneToUpper: true,
|
|
23
|
+
// option to not force uppercase on gene names
|
|
24
|
+
snv: {
|
|
25
|
+
loaded: false,
|
|
26
|
+
header: null,
|
|
27
|
+
badlines: [],
|
|
28
|
+
// jinghui: based on missense/silent ratio of entire dataset to decide whether to include silent when importing...
|
|
29
|
+
// hard-coded class codes
|
|
30
|
+
missense: 0,
|
|
31
|
+
silent: 0
|
|
32
|
+
},
|
|
33
|
+
svjson: {
|
|
34
|
+
loaded: false,
|
|
35
|
+
header: null,
|
|
36
|
+
badlines: []
|
|
37
|
+
},
|
|
38
|
+
fusion: {
|
|
39
|
+
loaded: false,
|
|
40
|
+
header: null,
|
|
41
|
+
badlines: [],
|
|
42
|
+
original: []
|
|
43
|
+
},
|
|
44
|
+
sv: {
|
|
45
|
+
loaded: false,
|
|
46
|
+
header: null,
|
|
47
|
+
badlines: [],
|
|
48
|
+
original: []
|
|
49
|
+
},
|
|
50
|
+
cnv: {
|
|
51
|
+
loaded: false,
|
|
52
|
+
header: null,
|
|
53
|
+
badlines: []
|
|
54
|
+
},
|
|
55
|
+
itd: {
|
|
56
|
+
loaded: false,
|
|
57
|
+
header: null,
|
|
58
|
+
badlines: []
|
|
59
|
+
},
|
|
60
|
+
del: {
|
|
61
|
+
loaded: false,
|
|
62
|
+
header: null,
|
|
63
|
+
badlines: []
|
|
64
|
+
},
|
|
65
|
+
truncation: {
|
|
66
|
+
loaded: false,
|
|
67
|
+
header: null,
|
|
68
|
+
badlines: []
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function parsesample(m, flag, i, lst, badline) {
|
|
73
|
+
let variantorigin = common.moriginsomatic;
|
|
74
|
+
if (m.sampletype) {
|
|
75
|
+
const s = m.sampletype.toLowerCase();
|
|
76
|
+
switch (s) {
|
|
77
|
+
case "relapse":
|
|
78
|
+
variantorigin = common.moriginrelapse;
|
|
79
|
+
break;
|
|
80
|
+
case "germline":
|
|
81
|
+
variantorigin = common.morigingermline;
|
|
82
|
+
break;
|
|
83
|
+
case "somatic":
|
|
84
|
+
case "diagnosis":
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
if (m.sample) {
|
|
88
|
+
if (m.patient) {
|
|
89
|
+
} else {
|
|
90
|
+
m.patient = m.sample + " " + m.sampletype;
|
|
91
|
+
}
|
|
92
|
+
} else {
|
|
93
|
+
if (m.patient) {
|
|
94
|
+
m.sample = m.patient + " " + m.sampletype;
|
|
95
|
+
} else {
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
} else {
|
|
99
|
+
if (m.patient) {
|
|
100
|
+
if (m.sample) {
|
|
101
|
+
m.sampletype = m.sample;
|
|
102
|
+
} else {
|
|
103
|
+
m.sample = m.sampletype = m.patient;
|
|
104
|
+
}
|
|
105
|
+
} else {
|
|
106
|
+
if (m.sample) {
|
|
107
|
+
m.sampletype = m.sample;
|
|
108
|
+
} else {
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (m.origin) {
|
|
113
|
+
const s = m.origin.toLowerCase();
|
|
114
|
+
switch (s) {
|
|
115
|
+
case "r":
|
|
116
|
+
case "relapse":
|
|
117
|
+
variantorigin = common.moriginrelapse;
|
|
118
|
+
m.isrim2 = true;
|
|
119
|
+
break;
|
|
120
|
+
case "g":
|
|
121
|
+
case "germline":
|
|
122
|
+
variantorigin = common.morigingermline;
|
|
123
|
+
m.isrim1 = true;
|
|
124
|
+
break;
|
|
125
|
+
case "gp":
|
|
126
|
+
case "germline pathogenic":
|
|
127
|
+
variantorigin = common.morigingermlinepathogenic;
|
|
128
|
+
m.isrim1 = true;
|
|
129
|
+
break;
|
|
130
|
+
case "gnp":
|
|
131
|
+
case "germline nonpathogenic":
|
|
132
|
+
case "germline non-pathogenic":
|
|
133
|
+
variantorigin = common.morigingermlinenonpathogenic;
|
|
134
|
+
m.isrim1 = true;
|
|
135
|
+
break;
|
|
136
|
+
case "s":
|
|
137
|
+
case "somatic":
|
|
138
|
+
case "diagnosis":
|
|
139
|
+
variantorigin = common.moriginsomatic;
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
m.origin = variantorigin;
|
|
144
|
+
if (!m.sample && !m.patient) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const nopatientname = "no patient/individual name";
|
|
148
|
+
let p;
|
|
149
|
+
if (m.patient) {
|
|
150
|
+
if (!flag.patient2st[m.patient]) {
|
|
151
|
+
flag.patient2st[m.patient] = {};
|
|
152
|
+
}
|
|
153
|
+
flag.patient2st[m.patient][m.sampletype] = m.sample;
|
|
154
|
+
} else {
|
|
155
|
+
if (!flag.patient2st[nopatientname]) {
|
|
156
|
+
flag.patient2st[nopatientname] = {};
|
|
157
|
+
}
|
|
158
|
+
flag.patient2st[nopatientname][m.sampletype] = m.sample;
|
|
159
|
+
}
|
|
160
|
+
if (m.sample) {
|
|
161
|
+
if (m.disease) {
|
|
162
|
+
if (m.sample in flag.sample2disease) {
|
|
163
|
+
if (m.disease != flag.sample2disease[m.sample]) {
|
|
164
|
+
flag.snv.badlines.push([
|
|
165
|
+
i,
|
|
166
|
+
'conflict of disease types for sample "' + m.sample + '": ' + m.disease + ", " + flag.sample2disease[m.sample],
|
|
167
|
+
lst
|
|
168
|
+
]);
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
} else {
|
|
172
|
+
flag.sample2disease[m.sample] = m.disease;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
export {
|
|
179
|
+
bulk_default as default,
|
|
180
|
+
init_bulk_flag,
|
|
181
|
+
parsesample
|
|
182
|
+
};
|
|
183
|
+
//# sourceMappingURL=bulk.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/bulk.js"],
|
|
4
|
+
"sourcesContent": ["////////////////////////////////////\n//\n// shared between client and server\n//\n////////////////////////////////////\n\nimport * as common from './common.js'\n\nexport default {}\n\nexport function init_bulk_flag(genome) {\n\tif (!genome) {\n\t\treturn null\n\t}\n\tconst mclasslabel2key = {}\n\tfor (const n in common.mclass) {\n\t\tmclasslabel2key[common.mclass[n].label.toUpperCase()] = n\n\t}\n\treturn {\n\t\tgenome: genome,\n\t\tmclasslabel2key: mclasslabel2key,\n\t\tdata: {},\n\t\tsample2disease: {}, // (proof) k: sample, v: disease\n\t\t// will only record this when origin is used\n\t\tpatient2st: {},\n\t\t// k: patient, v: { k: sampletype, v: sample }\n\t\t// new sample names always override old\n\t\tgood: 0,\n\t\tgeneToUpper: true, // option to not force uppercase on gene names\n\t\tsnv: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: [],\n\t\t\t// jinghui: based on missense/silent ratio of entire dataset to decide whether to include silent when importing...\n\t\t\t// hard-coded class codes\n\t\t\tmissense: 0,\n\t\t\tsilent: 0\n\t\t},\n\t\tsvjson: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: []\n\t\t},\n\t\tfusion: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: [],\n\t\t\toriginal: []\n\t\t},\n\t\tsv: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: [],\n\t\t\toriginal: []\n\t\t},\n\t\tcnv: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: []\n\t\t},\n\t\titd: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: []\n\t\t},\n\t\tdel: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: []\n\t\t},\n\t\ttruncation: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: []\n\t\t}\n\t}\n}\n\nexport function parsesample(m, flag, i, lst, badline) {\n\tlet variantorigin = common.moriginsomatic\n\tif (m.sampletype) {\n\t\tconst s = m.sampletype.toLowerCase()\n\t\tswitch (s) {\n\t\t\tcase 'relapse':\n\t\t\t\tvariantorigin = common.moriginrelapse\n\t\t\t\tbreak\n\t\t\tcase 'germline':\n\t\t\t\tvariantorigin = common.morigingermline\n\t\t\t\tbreak\n\t\t\tcase 'somatic':\n\t\t\tcase 'diagnosis':\n\t\t\t\tbreak\n\t\t}\n\t\tif (m.sample) {\n\t\t\tif (m.patient) {\n\t\t\t\t// good\n\t\t\t} else {\n\t\t\t\tm.patient = m.sample + ' ' + m.sampletype\n\t\t\t}\n\t\t} else {\n\t\t\tif (m.patient) {\n\t\t\t\tm.sample = m.patient + ' ' + m.sampletype\n\t\t\t} else {\n\t\t\t\t// neither sample or patient, will quit later\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (m.patient) {\n\t\t\tif (m.sample) {\n\t\t\t\tm.sampletype = m.sample\n\t\t\t} else {\n\t\t\t\tm.sample = m.sampletype = m.patient\n\t\t\t}\n\t\t} else {\n\t\t\tif (m.sample) {\n\t\t\t\tm.sampletype = m.sample\n\t\t\t} else {\n\t\t\t\t// no patient/sample, will quit later\n\t\t\t}\n\t\t}\n\t}\n\tif (m.origin) {\n\t\t// override existing variantorigin\n\t\tconst s = m.origin.toLowerCase()\n\t\tswitch (s) {\n\t\t\tcase 'r':\n\t\t\tcase 'relapse':\n\t\t\t\tvariantorigin = common.moriginrelapse\n\t\t\t\tm.isrim2 = true\n\t\t\t\tbreak\n\t\t\tcase 'g':\n\t\t\tcase 'germline':\n\t\t\t\tvariantorigin = common.morigingermline\n\t\t\t\tm.isrim1 = true\n\t\t\t\tbreak\n\t\t\tcase 'gp':\n\t\t\tcase 'germline pathogenic':\n\t\t\t\tvariantorigin = common.morigingermlinepathogenic\n\t\t\t\tm.isrim1 = true\n\t\t\t\tbreak\n\t\t\tcase 'gnp':\n\t\t\tcase 'germline nonpathogenic':\n\t\t\tcase 'germline non-pathogenic':\n\t\t\t\tvariantorigin = common.morigingermlinenonpathogenic\n\t\t\t\tm.isrim1 = true\n\t\t\t\tbreak\n\t\t\tcase 's':\n\t\t\tcase 'somatic':\n\t\t\tcase 'diagnosis':\n\t\t\t\tvariantorigin = common.moriginsomatic\n\t\t\t\tbreak\n\t\t}\n\t}\n\tm.origin = variantorigin\n\n\tif (!m.sample && !m.patient) {\n\t\t// will not go into sample table\n\t\treturn\n\t}\n\n\tconst nopatientname = 'no patient/individual name'\n\tlet p\n\tif (m.patient) {\n\t\tif (!flag.patient2st[m.patient]) {\n\t\t\tflag.patient2st[m.patient] = {}\n\t\t}\n\t\tflag.patient2st[m.patient][m.sampletype] = m.sample\n\t} else {\n\t\tif (!flag.patient2st[nopatientname]) {\n\t\t\tflag.patient2st[nopatientname] = {}\n\t\t}\n\t\tflag.patient2st[nopatientname][m.sampletype] = m.sample\n\t}\n\n\tif (m.sample) {\n\t\tif (m.disease) {\n\t\t\tif (m.sample in flag.sample2disease) {\n\t\t\t\tif (m.disease != flag.sample2disease[m.sample]) {\n\t\t\t\t\tflag.snv.badlines.push([\n\t\t\t\t\t\ti,\n\t\t\t\t\t\t'conflict of disease types for sample \"' +\n\t\t\t\t\t\t\tm.sample +\n\t\t\t\t\t\t\t'\": ' +\n\t\t\t\t\t\t\tm.disease +\n\t\t\t\t\t\t\t', ' +\n\t\t\t\t\t\t\tflag.sample2disease[m.sample],\n\t\t\t\t\t\tlst\n\t\t\t\t\t])\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tflag.sample2disease[m.sample] = m.disease\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import * as common from "./common.js";
|
|
2
|
+
import * as bulk from "./bulk.js";
|
|
3
|
+
function parseheader(line, flag) {
|
|
4
|
+
const header = line.toLowerCase().split(" ");
|
|
5
|
+
if (header.length <= 1) return "invalid file header for snv/indel";
|
|
6
|
+
const htry = (...args) => {
|
|
7
|
+
for (const s of args) {
|
|
8
|
+
const i2 = header.indexOf(s);
|
|
9
|
+
if (i2 != -1) return i2;
|
|
10
|
+
}
|
|
11
|
+
return -1;
|
|
12
|
+
};
|
|
13
|
+
let i = htry("annovar_gene", "annovar_sj_gene", "gene", "genename", "gene_symbol", "hugo_symbol");
|
|
14
|
+
if (i == -1) return "gene missing from header";
|
|
15
|
+
header[i] = "gene";
|
|
16
|
+
i = htry("annovar_aachange", "amino_acid_change", "annovar_sj_aachange", "aachange", "protein_change", "variant");
|
|
17
|
+
if (i == -1) return "amino_acid_change missing from header";
|
|
18
|
+
header[i] = "mname";
|
|
19
|
+
i = htry("annovar_class", "class", "mclass", "variant_class", "variant_classification", "annovar_sj_class");
|
|
20
|
+
if (i == -1) return "variant_class missing from header";
|
|
21
|
+
header[i] = "class";
|
|
22
|
+
i = htry("chromosome", "chr");
|
|
23
|
+
if (i == -1) return "chromosome missing from header";
|
|
24
|
+
header[i] = "chr";
|
|
25
|
+
i = htry("wu_hg19_pos", "start", "start_position", "chr_position", "position");
|
|
26
|
+
if (i == -1) return "start missing from header";
|
|
27
|
+
header[i] = "pos";
|
|
28
|
+
i = htry(
|
|
29
|
+
"annovar_isoform",
|
|
30
|
+
"mrna_accession",
|
|
31
|
+
"mrna accession",
|
|
32
|
+
"refseq_mrna_id",
|
|
33
|
+
"annovar_sj_filter_isoform",
|
|
34
|
+
"refseq",
|
|
35
|
+
"isoform"
|
|
36
|
+
);
|
|
37
|
+
if (i == -1) return "isoform missing from header";
|
|
38
|
+
header[i] = "isoform";
|
|
39
|
+
i = htry("sample", "sample_name", "tumor_sample_barcode");
|
|
40
|
+
if (i != -1) header[i] = "sample";
|
|
41
|
+
i = htry("patient", "donor", "target_case_id");
|
|
42
|
+
if (i != -1) header[i] = "patient";
|
|
43
|
+
i = htry("quantitative_measurements");
|
|
44
|
+
if (i != -1) header[i] = "qmset";
|
|
45
|
+
i = htry("mutant_reads_in_case", "mutant_in_tumor", "tumor_readcount_alt");
|
|
46
|
+
if (i != -1) header[i] = "maf_tumor_v1";
|
|
47
|
+
i = htry("total_reads_in_case", "total_in_tumor", "tumor_readcount_total");
|
|
48
|
+
if (i != -1) header[i] = "maf_tumor_v2";
|
|
49
|
+
i = htry("mutant_reads_in_control", "mutant_in_normal", "normal_readcount_alt");
|
|
50
|
+
if (i != -1) header[i] = "maf_normal_v1";
|
|
51
|
+
i = htry("total_reads_in_control", "total_in_normal", "normal_readcount_total");
|
|
52
|
+
if (i != -1) header[i] = "maf_normal_v2";
|
|
53
|
+
i = htry("cdna_change");
|
|
54
|
+
if (i != -1) header[i] = "cdna_change";
|
|
55
|
+
i = htry("sampletype", "sample type", "sample_type");
|
|
56
|
+
if (i != -1) header[i] = "sampletype";
|
|
57
|
+
i = htry("origin");
|
|
58
|
+
if (i != -1) header[i] = "origin";
|
|
59
|
+
i = htry("cancer", "disease", "diagnosis");
|
|
60
|
+
if (i != -1) header[i] = "disease";
|
|
61
|
+
flag.snv.header = header;
|
|
62
|
+
flag.snv.loaded = true;
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
function parseline(linei, line, flag) {
|
|
66
|
+
if (line == "" || line[0] == "#") return;
|
|
67
|
+
const lst = line.split(" ");
|
|
68
|
+
const m = {};
|
|
69
|
+
for (let j = 0; j < flag.snv.header.length; j++) {
|
|
70
|
+
if (lst[j] == void 0) break;
|
|
71
|
+
m[flag.snv.header[j]] = lst[j];
|
|
72
|
+
}
|
|
73
|
+
if (!m.gene) {
|
|
74
|
+
flag.snv.badlines.push([linei, "missing gene", lst]);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (m.gene.toUpperCase() == "UNKNOWN") {
|
|
78
|
+
flag.snv.badlines.push([linei, "gene name is UNKNOWN", lst]);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (!m.isoform) {
|
|
82
|
+
flag.snv.badlines.push([linei, "missing isoform", lst]);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (!m.mname) {
|
|
86
|
+
m.mname = m.cdna_change;
|
|
87
|
+
if (!m.mname) {
|
|
88
|
+
flag.snv.badlines.push([linei, "missing amino acid change", lst]);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
if (m.mname.indexOf("p.") == 0) {
|
|
93
|
+
m.mname = m.mname.replace(/^p\./, "");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (!m.class) {
|
|
97
|
+
flag.snv.badlines.push([linei, "missing mutation class", lst]);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
let _c = flag.mclasslabel2key[m.class.toUpperCase()];
|
|
101
|
+
if (_c) {
|
|
102
|
+
m.class = _c;
|
|
103
|
+
} else {
|
|
104
|
+
_c = common.mclasstester(m.class);
|
|
105
|
+
if (_c) {
|
|
106
|
+
m.class = _c;
|
|
107
|
+
} else {
|
|
108
|
+
flag.snv.badlines.push([linei, "wrong mutation class: " + m.class, lst]);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (bulk.parsesample(m, flag, linei, lst, flag.snv.badlines)) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (!m.chr) {
|
|
116
|
+
flag.snv.badlines.push([linei, "missing chromosome", lst]);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (m.chr.toLowerCase().indexOf("chr") != 0) {
|
|
120
|
+
m.chr = "chr" + m.chr;
|
|
121
|
+
}
|
|
122
|
+
if (!m.pos) {
|
|
123
|
+
flag.snv.badlines.push([linei, "missing chromosome position", lst]);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const v = Number.parseInt(m.pos);
|
|
127
|
+
if (Number.isNaN(v)) {
|
|
128
|
+
flag.snv.badlines.push([linei, "invalid chromosome position", lst]);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
m.pos = v - 1;
|
|
132
|
+
if (m.maf_tumor_v2 != void 0 && m.maf_tumor_v1 != void 0) {
|
|
133
|
+
if (m.maf_tumor_v2 == "") {
|
|
134
|
+
} else {
|
|
135
|
+
let v1 = Number.parseInt(m.maf_tumor_v1), v2 = Number.parseInt(m.maf_tumor_v2);
|
|
136
|
+
if (Number.isNaN(v1) || Number.isNaN(v2)) {
|
|
137
|
+
flag.snv.badlines.push([linei, "invalid maf_tumor mutant and/or total read count", lst]);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
m.maf_tumor = { f: v1 / v2, v1, v2 };
|
|
141
|
+
}
|
|
142
|
+
delete m.maf_tumor_v1;
|
|
143
|
+
delete m.maf_tumor_v2;
|
|
144
|
+
}
|
|
145
|
+
if (m.maf_normal_v1 != void 0 && m.maf_normal_v2 != void 0) {
|
|
146
|
+
if (m.maf_normal_v2 == "") {
|
|
147
|
+
} else {
|
|
148
|
+
let v1 = Number.parseInt(m.maf_normal_v1), v2 = Number.parseInt(m.maf_normal_v2);
|
|
149
|
+
if (Number.isNaN(v1) || Number.isNaN(v2)) {
|
|
150
|
+
flag.snv.badlines.push([linei, "invalid maf_normal mutant and/or total read count", lst]);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
m.maf_normal = { f: v1 / v2, v1, v2 };
|
|
154
|
+
}
|
|
155
|
+
delete m.maf_normal_v1;
|
|
156
|
+
delete m.maf_normal_v2;
|
|
157
|
+
}
|
|
158
|
+
flag.good++;
|
|
159
|
+
if (m.class == "M") {
|
|
160
|
+
flag.snv.missense++;
|
|
161
|
+
} else if (m.class == "S") {
|
|
162
|
+
flag.snv.silent++;
|
|
163
|
+
}
|
|
164
|
+
const n = flag.geneToUpper ? m.gene.toUpperCase() : m.gene;
|
|
165
|
+
if (!flag.data[n]) {
|
|
166
|
+
flag.data[n] = [];
|
|
167
|
+
}
|
|
168
|
+
m.dt = common.dtsnvindel;
|
|
169
|
+
flag.data[n].push(m);
|
|
170
|
+
}
|
|
171
|
+
export {
|
|
172
|
+
parseheader,
|
|
173
|
+
parseline
|
|
174
|
+
};
|
|
175
|
+
//# sourceMappingURL=bulk.snv.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/bulk.snv.js"],
|
|
4
|
+
"sourcesContent": ["///////////////////////////////\n//\n// shared between client and server\n//\n///////////////////////////////\n\nimport * as common from './common.js'\nimport * as bulk from './bulk.js'\n\nexport function parseheader(line, flag) {\n\tconst header = line.toLowerCase().split('\\t')\n\tif (header.length <= 1) return 'invalid file header for snv/indel'\n\tconst htry = (...args) => {\n\t\tfor (const s of args) {\n\t\t\tconst i = header.indexOf(s)\n\t\t\tif (i != -1) return i\n\t\t}\n\t\treturn -1\n\t}\n\tlet i = htry('annovar_gene', 'annovar_sj_gene', 'gene', 'genename', 'gene_symbol', 'hugo_symbol')\n\tif (i == -1) return 'gene missing from header'\n\theader[i] = 'gene'\n\ti = htry('annovar_aachange', 'amino_acid_change', 'annovar_sj_aachange', 'aachange', 'protein_change', 'variant')\n\tif (i == -1) return 'amino_acid_change missing from header'\n\theader[i] = 'mname'\n\ti = htry('annovar_class', 'class', 'mclass', 'variant_class', 'variant_classification', 'annovar_sj_class')\n\tif (i == -1) return 'variant_class missing from header'\n\theader[i] = 'class'\n\ti = htry('chromosome', 'chr')\n\tif (i == -1) return 'chromosome missing from header'\n\theader[i] = 'chr'\n\ti = htry('wu_hg19_pos', 'start', 'start_position', 'chr_position', 'position')\n\tif (i == -1) return 'start missing from header'\n\theader[i] = 'pos'\n\ti = htry(\n\t\t'annovar_isoform',\n\t\t'mrna_accession',\n\t\t'mrna accession',\n\t\t'refseq_mrna_id',\n\t\t'annovar_sj_filter_isoform',\n\t\t'refseq',\n\t\t'isoform'\n\t)\n\tif (i == -1) return 'isoform missing from header'\n\theader[i] = 'isoform'\n\n\t// optional\n\ti = htry('sample', 'sample_name', 'tumor_sample_barcode')\n\tif (i != -1) header[i] = 'sample'\n\ti = htry('patient', 'donor', 'target_case_id')\n\tif (i != -1) header[i] = 'patient'\n\ti = htry('quantitative_measurements')\n\tif (i != -1) header[i] = 'qmset'\n\t// dna maf tumor\n\ti = htry('mutant_reads_in_case', 'mutant_in_tumor', 'tumor_readcount_alt')\n\tif (i != -1) header[i] = 'maf_tumor_v1'\n\ti = htry('total_reads_in_case', 'total_in_tumor', 'tumor_readcount_total')\n\tif (i != -1) header[i] = 'maf_tumor_v2'\n\t// dna maf normal\n\ti = htry('mutant_reads_in_control', 'mutant_in_normal', 'normal_readcount_alt')\n\tif (i != -1) header[i] = 'maf_normal_v1'\n\ti = htry('total_reads_in_control', 'total_in_normal', 'normal_readcount_total')\n\tif (i != -1) header[i] = 'maf_normal_v2'\n\t// rna maf\n\t// cdna\n\ti = htry('cdna_change')\n\tif (i != -1) header[i] = 'cdna_change'\n\ti = htry('sampletype', 'sample type', 'sample_type')\n\tif (i != -1) header[i] = 'sampletype'\n\ti = htry('origin')\n\tif (i != -1) header[i] = 'origin'\n\ti = htry('cancer', 'disease', 'diagnosis')\n\tif (i != -1) header[i] = 'disease'\n\tflag.snv.header = header\n\tflag.snv.loaded = true\n\treturn false\n}\n\nexport function parseline(linei, line, flag) {\n\tif (line == '' || line[0] == '#') return\n\tconst lst = line.split('\\t')\n\tconst m = {}\n\tfor (let j = 0; j < flag.snv.header.length; j++) {\n\t\tif (lst[j] == undefined) break\n\t\tm[flag.snv.header[j]] = lst[j]\n\t}\n\tif (!m.gene) {\n\t\tflag.snv.badlines.push([linei, 'missing gene', lst])\n\t\treturn\n\t}\n\tif (m.gene.toUpperCase() == 'UNKNOWN') {\n\t\tflag.snv.badlines.push([linei, 'gene name is UNKNOWN', lst])\n\t\treturn\n\t}\n\tif (!m.isoform) {\n\t\tflag.snv.badlines.push([linei, 'missing isoform', lst])\n\t\treturn\n\t}\n\tif (!m.mname) {\n\t\tm.mname = m.cdna_change\n\t\tif (!m.mname) {\n\t\t\tflag.snv.badlines.push([linei, 'missing amino acid change', lst])\n\t\t\treturn\n\t\t}\n\t} else {\n\t\tif (m.mname.indexOf('p.') == 0) {\n\t\t\tm.mname = m.mname.replace(/^p\\./, '')\n\t\t}\n\t}\n\tif (!m.class) {\n\t\tflag.snv.badlines.push([linei, 'missing mutation class', lst])\n\t\treturn\n\t}\n\tlet _c = flag.mclasslabel2key[m.class.toUpperCase()]\n\tif (_c) {\n\t\tm.class = _c\n\t} else {\n\t\t_c = common.mclasstester(m.class)\n\t\tif (_c) {\n\t\t\tm.class = _c\n\t\t} else {\n\t\t\tflag.snv.badlines.push([linei, 'wrong mutation class: ' + m.class, lst])\n\t\t\treturn\n\t\t}\n\t}\n\tif (bulk.parsesample(m, flag, linei, lst, flag.snv.badlines)) {\n\t\treturn\n\t}\n\tif (!m.chr) {\n\t\tflag.snv.badlines.push([linei, 'missing chromosome', lst])\n\t\treturn\n\t}\n\tif (m.chr.toLowerCase().indexOf('chr') != 0) {\n\t\tm.chr = 'chr' + m.chr\n\t}\n\tif (!m.pos) {\n\t\tflag.snv.badlines.push([linei, 'missing chromosome position', lst])\n\t\treturn\n\t}\n\tconst v = Number.parseInt(m.pos)\n\tif (Number.isNaN(v)) {\n\t\tflag.snv.badlines.push([linei, 'invalid chromosome position', lst])\n\t\treturn\n\t}\n\tm.pos = v - 1\n\n\tif (m.maf_tumor_v2 != undefined && m.maf_tumor_v1 != undefined) {\n\t\tif (m.maf_tumor_v2 == '') {\n\t\t\t// no value, do not parse\n\t\t} else {\n\t\t\tlet v1 = Number.parseInt(m.maf_tumor_v1),\n\t\t\t\tv2 = Number.parseInt(m.maf_tumor_v2)\n\t\t\tif (Number.isNaN(v1) || Number.isNaN(v2)) {\n\t\t\t\tflag.snv.badlines.push([linei, 'invalid maf_tumor mutant and/or total read count', lst])\n\t\t\t\treturn\n\t\t\t}\n\t\t\tm.maf_tumor = { f: v1 / v2, v1: v1, v2: v2 }\n\t\t}\n\t\tdelete m.maf_tumor_v1\n\t\tdelete m.maf_tumor_v2\n\t}\n\n\tif (m.maf_normal_v1 != undefined && m.maf_normal_v2 != undefined) {\n\t\tif (m.maf_normal_v2 == '') {\n\t\t\t// no value\n\t\t} else {\n\t\t\tlet v1 = Number.parseInt(m.maf_normal_v1),\n\t\t\t\tv2 = Number.parseInt(m.maf_normal_v2)\n\t\t\tif (Number.isNaN(v1) || Number.isNaN(v2)) {\n\t\t\t\tflag.snv.badlines.push([linei, 'invalid maf_normal mutant and/or total read count', lst])\n\t\t\t\treturn\n\t\t\t}\n\t\t\tm.maf_normal = { f: v1 / v2, v1: v1, v2: v2 }\n\t\t}\n\t\tdelete m.maf_normal_v1\n\t\tdelete m.maf_normal_v2\n\t}\n\n\t/*\n\tif(m.qmset) {\n\t\ttry{\n\t\t\tvar v=JSON.parse(m.qmset)\n\t\t} catch(e){\n\t\t\tflag.snv.badlines.push([linei,'invalid JSON for quantitative_measurements',lst])\n\t\t\tv=null\n\t\t} finally {\n\t\t\tif(v) {\n\t\t\t\tif(typeof(v)!='object') {\n\t\t\t\t\tflag.snv.badlines.push([linei,'value of quantitative_measurements must be an object',lst])\n\t\t\t\t\tdelete m.qmset\n\t\t\t\t} else {\n\t\t\t\t\tfor(var n in v) {\n\t\t\t\t\t\tif(!Array.isArray(v[n])) {\n\t\t\t\t\t\t\tflag.snv.badlines.push([linei,'quantitative_measurements: \"'+n+'\" value must be an array',lst])\n\t\t\t\t\t\t\tdelete v[n]\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar tmp=[]\n\t\t\t\t\t\t\tv[n].forEach(function(v2){\n\t\t\t\t\t\t\t\tif(typeof(v2)=='number') {\n\t\t\t\t\t\t\t\t\ttmp.push({v:v2})\n\t\t\t\t\t\t\t\t} else if(v2.v && typeof(v2.v)=='number') {\n\t\t\t\t\t\t\t\t\ttmp.push(v2)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tif(tmp.length) {\n\t\t\t\t\t\t\t\tv[n]=tmp\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tflag.snv.badlines.push([linei,'quantitative_measurements: no valid value for \"'+n+'\"',lst])\n\t\t\t\t\t\t\t\tdelete v[n]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tm.qmset=v\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdelete m.qmset\n\t\t\t}\n\t\t}\n\t}\n\t*/\n\tflag.good++\n\t// FIXME hard-coded M and S\n\tif (m.class == 'M') {\n\t\tflag.snv.missense++\n\t} else if (m.class == 'S') {\n\t\tflag.snv.silent++\n\t}\n\tconst n = flag.geneToUpper ? m.gene.toUpperCase() : m.gene\n\tif (!flag.data[n]) {\n\t\tflag.data[n] = []\n\t}\n\tm.dt = common.dtsnvindel\n\tflag.data[n].push(m)\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["i"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import * as bulk from "./bulk.js";
|
|
2
|
+
import * as common from "./common.js";
|
|
3
|
+
function parseheader(line, flag, issv) {
|
|
4
|
+
const header = line.toLowerCase().split(" ");
|
|
5
|
+
if (header.length <= 1) return "invalid file header for fusions";
|
|
6
|
+
const htry = (...lst) => {
|
|
7
|
+
for (const a of lst) {
|
|
8
|
+
const j = header.indexOf(a);
|
|
9
|
+
if (j != -1) return j;
|
|
10
|
+
}
|
|
11
|
+
return -1;
|
|
12
|
+
};
|
|
13
|
+
let i = htry("gene_a", "gene1", "genea");
|
|
14
|
+
if (i == -1) return "gene_a missing from header";
|
|
15
|
+
header[i] = "gene1";
|
|
16
|
+
i = htry("gene_b", "gene2", "geneb");
|
|
17
|
+
if (i == -1) return "gene_b missing from header";
|
|
18
|
+
header[i] = "gene2";
|
|
19
|
+
i = htry("chr_a", "chr1", "chra");
|
|
20
|
+
if (i == -1) return "chr_a missing from header";
|
|
21
|
+
header[i] = "chr1";
|
|
22
|
+
i = htry("chr_b", "chr2", "chrb");
|
|
23
|
+
if (i == -1) return "chr_b missing from header";
|
|
24
|
+
header[i] = "chr2";
|
|
25
|
+
i = htry("pos_a", "position_a", "position1", "posa");
|
|
26
|
+
if (i == -1) return "pos_a missing from header";
|
|
27
|
+
header[i] = "position1";
|
|
28
|
+
i = htry("pos_b", "position_b", "position2", "posb");
|
|
29
|
+
if (i == -1) return "pos_b missing from header";
|
|
30
|
+
header[i] = "position2";
|
|
31
|
+
i = htry("isoform_a", "refseq_a", "refseq1", "isoform1", "sv_refseqa");
|
|
32
|
+
if (i == -1) return "isoform_a missing from header";
|
|
33
|
+
header[i] = "isoform1";
|
|
34
|
+
i = htry("isoform_b", "refseq_b", "refseq2", "isoform2", "sv_refseqb");
|
|
35
|
+
if (i == -1) return "isoform_b missing from header";
|
|
36
|
+
header[i] = "isoform2";
|
|
37
|
+
i = htry("strand_a", "orta");
|
|
38
|
+
if (i == -1) return "strand_a missing from header";
|
|
39
|
+
header[i] = "strand1";
|
|
40
|
+
i = htry("strand_b", "ortb");
|
|
41
|
+
if (i == -1) return "strand_b missing from header";
|
|
42
|
+
header[i] = "strand2";
|
|
43
|
+
i = htry("sample", "sample_name", "tumor_sample_barcode");
|
|
44
|
+
if (i != -1) header[i] = "sample";
|
|
45
|
+
i = htry("patient", "donor", "target_case_id");
|
|
46
|
+
if (i != -1) header[i] = "patient";
|
|
47
|
+
i = htry("sampletype", "sample type", "sample_type");
|
|
48
|
+
if (i != -1) header[i] = "sampletype";
|
|
49
|
+
i = htry("disease");
|
|
50
|
+
if (i != -1) header[i] = "disease";
|
|
51
|
+
i = htry("origin");
|
|
52
|
+
if (i != -1) header[i] = "origin";
|
|
53
|
+
if (issv) {
|
|
54
|
+
flag.sv.loaded = true;
|
|
55
|
+
flag.sv.header = header;
|
|
56
|
+
} else {
|
|
57
|
+
flag.fusion.loaded = true;
|
|
58
|
+
flag.fusion.header = header;
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
function parseline(i, line, flag, issv) {
|
|
63
|
+
if (line == "" || line[0] == "#") return;
|
|
64
|
+
const lst = line.split(" ");
|
|
65
|
+
const m = {};
|
|
66
|
+
const header = issv ? flag.sv.header : flag.fusion.header;
|
|
67
|
+
const badlines = issv ? flag.sv.badlines : flag.fusion.badlines;
|
|
68
|
+
for (let j = 0; j < header.length; j++) {
|
|
69
|
+
m[header[j]] = lst[j];
|
|
70
|
+
}
|
|
71
|
+
if (!m.chr1) {
|
|
72
|
+
badlines.push([i, "missing chr1", lst]);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (m.chr1.toLowerCase().indexOf("chr") != 0) {
|
|
76
|
+
m.chr1 = "chr" + m.chr1;
|
|
77
|
+
}
|
|
78
|
+
if (!m.chr2) {
|
|
79
|
+
badlines.push([i, "missing chr2", lst]);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (m.chr2.toLowerCase().indexOf("chr") != 0) {
|
|
83
|
+
m.chr2 = "chr" + m.chr2;
|
|
84
|
+
}
|
|
85
|
+
let v = m.position1;
|
|
86
|
+
if (!v) {
|
|
87
|
+
badlines.push([i, "missing position1", lst]);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
let v2 = Number.parseInt(v);
|
|
91
|
+
if (Number.isNaN(v2) || v2 <= 0) {
|
|
92
|
+
badlines.push([i, "invalid value for position1", lst]);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
m.position1 = v2;
|
|
96
|
+
v = m.position2;
|
|
97
|
+
if (!v) {
|
|
98
|
+
badlines.push([i, "missing position2", lst]);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
v2 = Number.parseInt(v);
|
|
102
|
+
if (Number.isNaN(v2) || v2 <= 0) {
|
|
103
|
+
badlines.push([i, "invalid value for position2", lst]);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
m.position2 = v2;
|
|
107
|
+
if (bulk.parsesample(m, flag, i, lst, badlines)) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (m.isoform1 && m.isoform1.indexOf(",") != -1) {
|
|
111
|
+
const lst2 = m.isoform1.split(",");
|
|
112
|
+
m.isoform1 = void 0;
|
|
113
|
+
for (const t of lst2) {
|
|
114
|
+
if (t != "") m.isoform1 = t;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (m.isoform2 && m.isoform2.indexOf(",") != -1) {
|
|
118
|
+
const lst2 = m.isoform2.split(",");
|
|
119
|
+
m.isoform2 = void 0;
|
|
120
|
+
for (const t of lst2) {
|
|
121
|
+
if (t != "") m.isoform2 = t;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!m.gene1) {
|
|
125
|
+
m.isoform1 = void 0;
|
|
126
|
+
}
|
|
127
|
+
if (!m.gene2) {
|
|
128
|
+
m.isoform2 = void 0;
|
|
129
|
+
}
|
|
130
|
+
if (m.gene1) {
|
|
131
|
+
flag.good++;
|
|
132
|
+
const m2 = {
|
|
133
|
+
dt: issv ? common.dtsv : common.dtfusionrna,
|
|
134
|
+
class: issv ? common.mclasssv : common.mclassfusionrna,
|
|
135
|
+
isoform: m.isoform1,
|
|
136
|
+
mname: m.gene2 || m.chr2,
|
|
137
|
+
sample: m.sample,
|
|
138
|
+
patient: m.patient,
|
|
139
|
+
sampletype: m.sampletype,
|
|
140
|
+
origin: m.origin,
|
|
141
|
+
disease: m.disease,
|
|
142
|
+
pairlst: [
|
|
143
|
+
{
|
|
144
|
+
a: {
|
|
145
|
+
name: m.gene1,
|
|
146
|
+
isoform: m.isoform1,
|
|
147
|
+
strand: m.strand1,
|
|
148
|
+
chr: m.chr1,
|
|
149
|
+
position: m.position1
|
|
150
|
+
},
|
|
151
|
+
b: {
|
|
152
|
+
name: m.gene2,
|
|
153
|
+
isoform: m.isoform2,
|
|
154
|
+
strand: m.strand2,
|
|
155
|
+
chr: m.chr2,
|
|
156
|
+
position: m.position2
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
]
|
|
160
|
+
};
|
|
161
|
+
const n = flag.geneToUpper ? m.gene1.toUpperCase() : m.gene1;
|
|
162
|
+
if (!flag.data[n]) {
|
|
163
|
+
flag.data[n] = [];
|
|
164
|
+
}
|
|
165
|
+
flag.data[n].push(m2);
|
|
166
|
+
}
|
|
167
|
+
if (m.gene2 && m.gene2 != m.gene1) {
|
|
168
|
+
flag.good++;
|
|
169
|
+
const m2 = {
|
|
170
|
+
dt: issv ? common.dtsv : common.dtfusionrna,
|
|
171
|
+
class: issv ? common.mclasssv : common.mclassfusionrna,
|
|
172
|
+
isoform: m.isoform2,
|
|
173
|
+
mname: m.gene1 || m.chr1,
|
|
174
|
+
sample: m.sample,
|
|
175
|
+
patient: m.patient,
|
|
176
|
+
sampletype: m.sampletype,
|
|
177
|
+
origin: m.origin,
|
|
178
|
+
disease: m.disease,
|
|
179
|
+
pairlst: [
|
|
180
|
+
{
|
|
181
|
+
a: {
|
|
182
|
+
name: m.gene1,
|
|
183
|
+
isoform: m.isoform1,
|
|
184
|
+
strand: m.strand1,
|
|
185
|
+
chr: m.chr1,
|
|
186
|
+
position: m.position1
|
|
187
|
+
},
|
|
188
|
+
b: {
|
|
189
|
+
name: m.gene2,
|
|
190
|
+
isoform: m.isoform2,
|
|
191
|
+
strand: m.strand2,
|
|
192
|
+
chr: m.chr2,
|
|
193
|
+
position: m.position2
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
};
|
|
198
|
+
const n = flag.geneToUpper ? m.gene2.toUpperCase() : m.gene2;
|
|
199
|
+
if (!flag.data[n]) {
|
|
200
|
+
flag.data[n] = [];
|
|
201
|
+
}
|
|
202
|
+
flag.data[n].push(m2);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
function duplicate(m) {
|
|
206
|
+
const n = {};
|
|
207
|
+
for (const k in m) {
|
|
208
|
+
if (k == "pairlst") continue;
|
|
209
|
+
const v = m[k];
|
|
210
|
+
const type = typeof v;
|
|
211
|
+
if (type == "object") {
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
n[k] = v;
|
|
215
|
+
}
|
|
216
|
+
if (m.pairlst) {
|
|
217
|
+
n.pairlst = [];
|
|
218
|
+
for (const pair of m.pairlst) {
|
|
219
|
+
const p = {};
|
|
220
|
+
for (const k in pair) {
|
|
221
|
+
if (k == "a" || k == "b" || k == "interstitial") {
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
p[k] = pair[k];
|
|
225
|
+
}
|
|
226
|
+
if (pair.a) {
|
|
227
|
+
p.a = {};
|
|
228
|
+
for (const k in pair.a) {
|
|
229
|
+
const v = pair.a[k];
|
|
230
|
+
if (typeof v == "object") {
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
p.a[k] = v;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (pair.b) {
|
|
237
|
+
p.b = {};
|
|
238
|
+
for (const k in pair.b) {
|
|
239
|
+
const v = pair.b[k];
|
|
240
|
+
if (typeof v == "object") {
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
p.b[k] = v;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (pair.interstitial) {
|
|
247
|
+
p.interstitial = {};
|
|
248
|
+
for (const k in pair.interstitial) {
|
|
249
|
+
const v = pair.interstitial[k];
|
|
250
|
+
if (typeof v == "object") {
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
p.interstitial[k] = v;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
n.pairlst.push(p);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return n;
|
|
260
|
+
}
|
|
261
|
+
export {
|
|
262
|
+
duplicate,
|
|
263
|
+
parseheader,
|
|
264
|
+
parseline
|
|
265
|
+
};
|
|
266
|
+
//# sourceMappingURL=bulk.sv.js.map
|