@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.
Files changed (117) hide show
  1. package/README.md +10 -2
  2. package/constants/AiHisto.ts +27 -0
  3. package/constants/README.md +11 -0
  4. package/devTs.ts +3 -0
  5. package/dist/constants/AiHisto.d.ts +23 -0
  6. package/dist/constants/AiHisto.js +31 -0
  7. package/dist/constants/AiHisto.js.map +7 -0
  8. package/dist/src/aiHisto.d.ts +5 -0
  9. package/dist/src/aiHisto.js +15 -0
  10. package/dist/src/aiHisto.js.map +7 -0
  11. package/dist/src/bulk.cnv.js +83 -0
  12. package/dist/src/bulk.cnv.js.map +7 -0
  13. package/dist/src/bulk.del.js +119 -0
  14. package/dist/src/bulk.del.js.map +7 -0
  15. package/dist/src/bulk.itd.js +119 -0
  16. package/dist/src/bulk.itd.js.map +7 -0
  17. package/dist/src/bulk.js +183 -0
  18. package/dist/src/bulk.js.map +7 -0
  19. package/dist/src/bulk.snv.js +175 -0
  20. package/dist/src/bulk.snv.js.map +7 -0
  21. package/dist/src/bulk.sv.js +266 -0
  22. package/dist/src/bulk.sv.js.map +7 -0
  23. package/dist/src/bulk.svjson.js +151 -0
  24. package/dist/src/bulk.svjson.js.map +7 -0
  25. package/dist/src/bulk.trunc.js +122 -0
  26. package/dist/src/bulk.trunc.js.map +7 -0
  27. package/dist/src/clustering.js +71 -0
  28. package/dist/src/clustering.js.map +7 -0
  29. package/dist/src/common.js +1302 -0
  30. package/dist/src/common.js.map +7 -0
  31. package/dist/src/compute.percentile.js +10 -0
  32. package/dist/src/compute.percentile.js.map +7 -0
  33. package/dist/src/doc.d.ts +7 -0
  34. package/dist/src/doc.js +10 -0
  35. package/dist/src/doc.js.map +7 -0
  36. package/dist/src/fetch-helpers.js +177 -0
  37. package/dist/src/fetch-helpers.js.map +7 -0
  38. package/dist/src/fileSize.js +10 -0
  39. package/dist/src/fileSize.js.map +7 -0
  40. package/dist/src/filter.d.ts +62 -0
  41. package/dist/src/filter.js +194 -0
  42. package/dist/src/filter.js.map +7 -0
  43. package/dist/src/hash.js +20 -0
  44. package/dist/src/hash.js.map +7 -0
  45. package/dist/src/helpers.js +66 -0
  46. package/dist/src/helpers.js.map +7 -0
  47. package/dist/src/index.d.ts +26 -0
  48. package/dist/src/index.js +27 -0
  49. package/dist/src/index.js.map +7 -0
  50. package/dist/src/joinUrl.d.ts +1 -0
  51. package/dist/src/joinUrl.js +17 -0
  52. package/dist/src/joinUrl.js.map +7 -0
  53. package/dist/src/mds3tk.js +64 -0
  54. package/dist/src/mds3tk.js.map +7 -0
  55. package/dist/src/roundValue.js +57 -0
  56. package/dist/src/roundValue.js.map +7 -0
  57. package/dist/src/termdb.bins.js +272 -0
  58. package/dist/src/termdb.bins.js.map +7 -0
  59. package/dist/src/termdb.initbinconfig.js +79 -0
  60. package/dist/src/termdb.initbinconfig.js.map +7 -0
  61. package/dist/src/termdb.usecase.js +239 -0
  62. package/dist/src/termdb.usecase.js.map +7 -0
  63. package/dist/src/terms.d.ts +83 -0
  64. package/dist/src/terms.js +327 -0
  65. package/dist/src/terms.js.map +7 -0
  66. package/dist/src/time.d.ts +9 -0
  67. package/dist/src/time.js +23 -0
  68. package/dist/src/time.js.map +7 -0
  69. package/dist/src/tree.js +82 -0
  70. package/dist/src/tree.js.map +7 -0
  71. package/dist/src/urljson.d.ts +8 -0
  72. package/dist/src/urljson.js +31 -0
  73. package/dist/src/urljson.js.map +7 -0
  74. package/dist/src/vcf.ann.js +56 -0
  75. package/dist/src/vcf.ann.js.map +7 -0
  76. package/dist/src/vcf.csq.js +82 -0
  77. package/dist/src/vcf.csq.js.map +7 -0
  78. package/dist/src/vcf.info.js +40 -0
  79. package/dist/src/vcf.info.js.map +7 -0
  80. package/dist/src/vcf.js +439 -0
  81. package/dist/src/vcf.js.map +7 -0
  82. package/dist/src/vcf.type.js +17 -0
  83. package/dist/src/vcf.type.js.map +7 -0
  84. package/package.json +20 -11
  85. package/src/bulk.cnv.js +0 -86
  86. package/src/bulk.del.js +0 -124
  87. package/src/bulk.itd.js +0 -123
  88. package/src/bulk.js +0 -197
  89. package/src/bulk.snv.js +0 -271
  90. package/src/bulk.sv.js +0 -276
  91. package/src/bulk.svjson.js +0 -164
  92. package/src/bulk.trunc.js +0 -132
  93. package/src/clustering.js +0 -66
  94. package/src/common.js +0 -1608
  95. package/src/compute.percentile.js +0 -11
  96. package/src/doc.js +0 -6
  97. package/src/fetch-helpers.js +0 -323
  98. package/src/fileSize.js +0 -6
  99. package/src/filter.js +0 -221
  100. package/src/hash.js +0 -21
  101. package/src/helpers.js +0 -88
  102. package/src/index.js +0 -26
  103. package/src/joinUrl.js +0 -14
  104. package/src/mds3tk.js +0 -100
  105. package/src/roundValue.js +0 -94
  106. package/src/termdb.bins.js +0 -456
  107. package/src/termdb.initbinconfig.js +0 -130
  108. package/src/termdb.usecase.js +0 -344
  109. package/src/terms.js +0 -341
  110. package/src/time.js +0 -22
  111. package/src/tree.js +0 -138
  112. package/src/urljson.js +0 -41
  113. package/src/vcf.ann.js +0 -62
  114. package/src/vcf.csq.js +0 -153
  115. package/src/vcf.info.js +0 -50
  116. package/src/vcf.js +0 -654
  117. package/src/vcf.type.js +0 -24
@@ -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