@sjcrh/proteinpaint-shared 2.129.1 → 2.129.5

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/common.js +99 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sjcrh/proteinpaint-shared",
3
- "version": "2.129.1",
3
+ "version": "2.129.5",
4
4
  "description": "ProteinPaint code that is shared between server and client-side workspaces",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
package/src/common.js CHANGED
@@ -530,8 +530,7 @@ export const tkt = {
530
530
  bigwigstranded: 'bigwigstranded',
531
531
  junction: 'junction',
532
532
  mdsjunction: 'mdsjunction',
533
- mdscnv: 'mdscnv',
534
- mdssvcnv: 'mdssvcnv', // no longer use as driver
533
+ mdssvcnv: 'mdssvcnv', // replaced by mds3
535
534
  mdsexpressionrank: 'mdsexpressionrank',
536
535
  mdsvcf: 'mdsvcf', // for snv/indels, currently vcf, may include MAF
537
536
  //mdsgeneral:'mdsgeneral', // replaces mdssvcnv ****** not ready yet
@@ -542,8 +541,7 @@ export const tkt = {
542
541
  expressionrank: 'expressionrank',
543
542
  aicheck: 'aicheck',
544
543
  ase: 'ase',
545
- mds2: 'mds2', // mds 2nd gen
546
- mds3: 'mds3', // 3rd gen
544
+ mds3: 'mds3', //
547
545
  bedgraphdot: 'bedgraphdot',
548
546
  bam: 'bam',
549
547
  ld: 'ld'
@@ -1234,3 +1232,100 @@ export const colorScaleMap = {
1234
1232
  // when hierCluster z-score transformation is not performed, should use two-color scale
1235
1233
  whiteRed: { domain: [0, 1], range: ['white', 'red'] }
1236
1234
  }
1235
+
1236
+ export function invalidcoord(thisgenome, chrom, start, stop) {
1237
+ if (!thisgenome) return 'no genome'
1238
+ if (!chrom) return 'no chr name'
1239
+ const chr = thisgenome.chrlookup[chrom.toUpperCase()]
1240
+ if (!chr) return 'Invalid chromosome name: ' + chr
1241
+ if (!Number.isInteger(start)) return 'Non-numerical position: ' + start
1242
+ if (start < 0 || start >= chr.len) return 'Position out of range: ' + start
1243
+ if (!Number.isInteger(stop)) return 'Non-numerical position: ' + stop
1244
+ if (stop < 0 || stop > chr.len) return 'Position out of range: ' + stop
1245
+ if (start > stop) return 'Start position is greater than stop'
1246
+ return false
1247
+ }
1248
+
1249
+ export function string2pos(s, genome, donotextend) {
1250
+ s = s.replace(/,/g, '')
1251
+ const chr = genome.chrlookup[s.toUpperCase()]
1252
+ if (chr) {
1253
+ // chr name only, to middle
1254
+ return {
1255
+ chr: chr.name,
1256
+ chrlen: chr.len,
1257
+ start: Math.max(0, Math.ceil(chr.len / 2) - 10000),
1258
+ stop: Math.min(chr.len, Math.ceil(chr.len / 2) + 10000)
1259
+ }
1260
+ }
1261
+ {
1262
+ // special handling for snv4
1263
+ const tmp = s.split('.')
1264
+ if (tmp.length >= 2) {
1265
+ const chr = genome.chrlookup[tmp[0].toUpperCase()]
1266
+ const pos = Number.parseInt(tmp[1])
1267
+ const e = invalidcoord(genome, tmp[0], pos, pos + 1)
1268
+ if (!e) {
1269
+ // valid snv4
1270
+ const bpspan = 400
1271
+ return {
1272
+ chr: chr.name,
1273
+ chrlen: chr.len,
1274
+ start: Math.max(0, pos - Math.ceil(bpspan / 2)),
1275
+ stop: Math.min(chr.len, pos + Math.ceil(bpspan / 2)),
1276
+ actualposition: { position: pos, len: 1 }
1277
+ }
1278
+ }
1279
+ }
1280
+ }
1281
+ const tmp = s.split(/[-:\s]+/)
1282
+ if (tmp.length == 2) {
1283
+ // must be chr - pos
1284
+ const pos = Number.parseInt(tmp[1])
1285
+ const e = invalidcoord(genome, tmp[0], pos, pos + 1)
1286
+ if (e) {
1287
+ return null
1288
+ }
1289
+ const chr = genome.chrlookup[tmp[0].toUpperCase()]
1290
+ const bpspan = 400
1291
+ return {
1292
+ chr: chr.name,
1293
+ chrlen: chr.len,
1294
+ start: Math.max(0, pos - Math.ceil(bpspan / 2)),
1295
+ stop: Math.min(chr.len, pos + Math.ceil(bpspan / 2)),
1296
+ actualposition: { position: pos, len: 1 }
1297
+ }
1298
+ }
1299
+ if (tmp.length == 3) {
1300
+ // must be chr - start - stop
1301
+ let start = Number.parseInt(tmp[1]),
1302
+ stop = Number.parseInt(tmp[2])
1303
+ const e = invalidcoord(genome, tmp[0], start, stop)
1304
+ if (e) {
1305
+ return null
1306
+ }
1307
+ const actualposition = { position: start, len: stop - start }
1308
+ const chr = genome.chrlookup[tmp[0].toUpperCase()]
1309
+
1310
+ if (!donotextend) {
1311
+ const minspan = 400
1312
+ if (stop - start < minspan) {
1313
+ let center = Math.ceil((start + stop) / 2)
1314
+ if (center + minspan / 2 >= chr.len) {
1315
+ center = chr.len - Math.ceil(minspan / 2)
1316
+ }
1317
+ start = Math.max(0, center - Math.ceil(minspan / 2))
1318
+ stop = start + minspan
1319
+ }
1320
+ }
1321
+
1322
+ return {
1323
+ chr: chr.name,
1324
+ chrlen: chr.len,
1325
+ start,
1326
+ stop,
1327
+ actualposition
1328
+ }
1329
+ }
1330
+ return null
1331
+ }