r916: support long cs in sam-to-paf conversion
This commit is contained in:
parent
e02bebd96d
commit
19208fb06b
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env k8
|
#!/usr/bin/env k8
|
||||||
|
|
||||||
var paftools_version = '2.15-r907-dirty';
|
var paftools_version = '2.15-r916-dirty';
|
||||||
|
|
||||||
/*****************************
|
/*****************************
|
||||||
***** Library functions *****
|
***** Library functions *****
|
||||||
|
|
@ -1590,11 +1590,16 @@ function paf_gff2bed(args)
|
||||||
|
|
||||||
function paf_sam2paf(args)
|
function paf_sam2paf(args)
|
||||||
{
|
{
|
||||||
var c, pri_only = false, use_eq = false;
|
var c, pri_only = false, long_cs = false;
|
||||||
while ((c = getopt(args, "p")) != null)
|
while ((c = getopt(args, "pL")) != null) {
|
||||||
if (c == 'p') pri_only = true;
|
if (c == 'p') pri_only = true;
|
||||||
|
else if (c == 'L') long_cs = true;
|
||||||
|
}
|
||||||
if (args.length == getopt.ind) {
|
if (args.length == getopt.ind) {
|
||||||
print("Usage: paftools.js sam2paf [-p] <in.sam>");
|
print("Usage: paftools.js sam2paf [options] <in.sam>");
|
||||||
|
print("Options:");
|
||||||
|
print(" -p convert primary or supplementary alignments only");
|
||||||
|
print(" -L output the cs tag in the long form");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1666,8 +1671,8 @@ function paf_sam2paf(args)
|
||||||
}
|
}
|
||||||
// parse MD
|
// parse MD
|
||||||
var cs = [];
|
var cs = [];
|
||||||
if (MD != null && cs_str == null) {
|
if (MD != null && cs_str == null && t[9] != "*") {
|
||||||
var k = 0, cx = 0, cy = 0, mx = 0, my = 0;
|
var k = 0, cx = 0, cy = 0, mx = 0, my = 0; // cx: cigar ref position; cy: cigar query; mx: MD ref; my: MD query
|
||||||
while ((m = re_MD.exec(MD)) != null) {
|
while ((m = re_MD.exec(MD)) != null) {
|
||||||
if (m[2] != null) { // deletion from the reference
|
if (m[2] != null) { // deletion from the reference
|
||||||
var len = m[2].length - 1;
|
var len = m[2].length - 1;
|
||||||
|
|
@ -1681,13 +1686,15 @@ function paf_sam2paf(args)
|
||||||
if (my + ml < cy + cl) {
|
if (my + ml < cy + cl) {
|
||||||
if (ml > 0) {
|
if (ml > 0) {
|
||||||
if (m[3] != null) cs.push('*', m[3], t[9][my]);
|
if (m[3] != null) cs.push('*', m[3], t[9][my]);
|
||||||
|
else if (long_cs) cs.push('=', t[9].substr(my, ml));
|
||||||
else cs.push(':', ml);
|
else cs.push(':', ml);
|
||||||
}
|
}
|
||||||
mx += ml, my += ml, ml = 0;
|
mx += ml, my += ml, ml = 0;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
var dl = cy + cl - my;
|
var dl = cy + cl - my;
|
||||||
cs.push(':', dl);
|
if (long_cs) cs.push('=', t[9].substr(my, dl));
|
||||||
|
else cs.push(':', dl);
|
||||||
cx += cl, cy += cl, ++k;
|
cx += cl, cy += cl, ++k;
|
||||||
mx += dl, my += dl, ml -= dl;
|
mx += dl, my += dl, ml -= dl;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue