Skip to content

Commit 618d335

Browse files
committed
more condition on length differences
1 parent a10d4f4 commit 618d335

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

misc/pafcluster.js

+10-6
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ function* k8_readline(fn) {
8484

8585
function merge_hits(b) {
8686
if (b.length == 1)
87-
return { name1:b[0].name1, name2:b[0].name2, len1:b[0].len1, len2:b[0].len2, min_cov:b[0].min_cov, max_cov:b[0].max_cov, s1:b[0].s1, dv:b[0].dv };
87+
return { name1:b[0].name1, name2:b[0].name2, len1:b[0].len1, len2:b[0].len2, min_cov:b[0].min_cov, max_cov:b[0].max_cov, cov1:b[0].cov1, cov2:b[0].cov2, s1:b[0].s1, dv:b[0].dv };
8888
b.sort(function(x, y) { return x.st1 - y.st1 });
8989
let f = [], bt = [];
9090
for (let i = 0; i < b.length; ++i)
@@ -133,20 +133,22 @@ function merge_hits(b) {
133133
const min_cov = cov1 < cov2? cov1 : cov2;
134134
const max_cov = cov1 > cov2? cov1 : cov2;
135135
//warn(d.length, b[0].name1, b[0].name2, min_cov, max_cov);
136-
return { name1:b[0].name1, name2:b[0].name2, len1:b[0].len1, len2:b[0].len2, min_cov:min_cov, max_cov:max_cov, s1:max_f, dv:dv };
136+
return { name1:b[0].name1, name2:b[0].name2, len1:b[0].len1, len2:b[0].len2, min_cov:min_cov, max_cov:max_cov, cov1:cov1, cov2:cov2, s1:max_f, dv:dv };
137137
}
138138

139139
function main(args) {
140-
let opt = { min_cov:.8, max_dv:.015 };
141-
for (const o of getopt(args, "c:d:", [])) {
140+
let opt = { min_cov:.9, max_dv:.015, max_diff:20000 };
141+
for (const o of getopt(args, "c:d:e:", [])) {
142142
if (o.opt == '-c') opt.min_cov = parseFloat(o.arg);
143143
else if (o.opt == '-d') opt.max_dv = parseFloat(o.arg);
144+
else if (o.opt == '-e') opt.max_diff = parseFloat(o.arg);
144145
}
145146
if (args.length == 0) {
146147
print("Usage: pafcluster.js [options] <ava.paf>");
147148
print("Options:");
148149
print(` -c FLOAT min coverage [${opt.min_cov}]`);
149150
print(` -d FLOAT max divergence [${opt.max_dv}]`);
151+
print(` -e FLOAT max difference [${opt.max_diff}]`);
150152
return;
151153
}
152154

@@ -172,7 +174,7 @@ function main(args) {
172174
const max_cov = cov1 > cov2? cov1 : cov2;
173175
name2len[t[0]] = len1;
174176
name2len[t[5]] = len2;
175-
a.push({ name1:t[0], name2:t[5], len1:len1, len2:len2, min_cov:min_cov, max_cov:max_cov, s1:s1, dv:dv, st1:t[2], en1:t[3], st2:t[7], en2:t[8], blen:t[10] });
177+
a.push({ name1:t[0], name2:t[5], len1:len1, len2:len2, min_cov:min_cov, max_cov:max_cov, s1:s1, dv:dv, cov1:cov1, cov2:cov2, st1:t[2], en1:t[3], st2:t[7], en2:t[8], blen:t[10] });
176178
len[t[0]] = len1, len[t[5]] = len2;
177179
}
178180
warn(`Read ${a.length} hits`);
@@ -206,7 +208,9 @@ function main(args) {
206208
for (let i = 0; i < a.length; ++i) {
207209
if (a[i].name1 != max_name && a[i].name2 != max_name)
208210
continue;
209-
if (a[i].min_cov >= opt.min_cov && a[i].dv <= opt.max_dv)
211+
const diff1 = a[i].len1 * (1.0 - a[i].cov1);
212+
const diff2 = a[i].len2 * (1.0 - a[i].cov2);
213+
if (a[i].min_cov >= opt.min_cov && a[i].dv <= opt.max_dv && diff1 <= opt.max_diff && diff2 <= opt.max_diff)
210214
h[a[i].name1] = h[a[i].name2] = 1;
211215
}
212216
let n = 0;

0 commit comments

Comments
 (0)