-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.mts
118 lines (109 loc) · 2.49 KB
/
index.mts
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
//@ts-nocheck
import { fileURLToPath } from "node:url";
import { ThreadPool } from "./dist";
export const FASTA = (num: number) => {
var last = 42,
A = 3877,
C = 29573,
M = 139968;
if (num % 2) throw new Error("Error!!!!");
function rand(max: number) {
last = (last * A + C) % M;
return (max * last) / M;
}
var ALU =
"GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG" +
"GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA" +
"CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT" +
"ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA" +
"GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG" +
"AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC" +
"AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA";
var IUB = {
a: 0.27,
c: 0.12,
g: 0.12,
t: 0.27,
B: 0.02,
D: 0.02,
H: 0.02,
K: 0.02,
M: 0.02,
N: 0.02,
R: 0.02,
S: 0.02,
V: 0.02,
W: 0.02,
Y: 0.02,
};
var HomoSap = {
a: 0.302954942668,
c: 0.1979883004921,
g: 0.1975473066391,
t: 0.3015094502008,
};
function makeCumulative(table: { [key: string]: number }) {
var last = null;
for (var c in table) {
if (last) table[c] += table[last];
last = c;
}
}
function fastaRepeat(n: number, seq: string) {
var seqi = 0,
lenOut = 60;
let out = "";
while (n > 0) {
if (n < lenOut) lenOut = n;
if (seqi + lenOut < seq.length) {
out += seq.substring(seqi, seqi + lenOut);
seqi += lenOut;
} else {
var s = seq.substring(seqi);
seqi = lenOut - s.length;
out += s + seq.substring(0, seqi);
}
n -= lenOut;
}
return out;
}
function fastaRandom(n: number, table: { [key: string]: number }) {
var line = new Array(60);
makeCumulative(table);
let out = "";
while (n > 0) {
if (n < line.length) line = new Array(n);
for (var i = 0; i < line.length; i++) {
var r = rand(1);
for (var c in table) {
if (r < table[c]) {
line[i] = c;
break;
}
}
}
out = line.join("");
n -= line.length;
}
return out;
}
return Promise.resolve([fastaRepeat(num * 2, ALU), fastaRandom(3 * num, IUB), fastaRandom(3 * num, HomoSap)]);
};
const sleep = (ms = 500) => new Promise((res) => setTimeout(res, ms));
const pool = new ThreadPool<[number], number>({
task: "./worker.mjs",
count: 4,
maxConcurrency: 1,
});
async function rn() {
let runs = 10;
const tasks = [];
for (let idx = 0; idx < runs; idx++) {
// console.log("running thread", idx);
tasks.push(pool.exec(idx));
}
console.log(await Promise.all(tasks).then((v) => console.log(v)));
console.log("nice");
pool.terminate();
}
rn();