#include <stdlib.h>
#include <assert.h>
+#define PACKAGE_VERSION "r439"
+
//#define MAQ_LONGREADS
#ifdef MAQ_LONGREADS
return mm;
}
-void maq2tam_core(gzFile fp)
+void maq2tam_core(gzFile fp, const char *rg)
{
maqmap_t *mm;
maqmap1_t mm1, *m1;
m1 = &mm1;
mm = maqmap_read_header(fp);
while ((ret = gzread(fp, m1, sizeof(maqmap1_t))) == sizeof(maqmap1_t)) {
- int j, flag = 0;
+ int j, flag = 0, se_mapq = m1->seq[MAX_READLEN-1];
if (m1->flag) flag |= 1;
if ((m1->flag&PAIRFLAG_PAIRED) || ((m1->flag&PAIRFLAG_SW) && m1->flag != 192)) flag |= 2;
if (m1->flag == 192) flag |= 4;
else if (m1->flag&(PAIRFLAG_RF|PAIRFLAG_RR)) c = 1;
else c = m1->pos&1;
}
- flag |= c;
+ if (c) flag |= 0x20;
}
- if (flag) {
+ if (m1->flag) {
int l = strlen(m1->name);
if (m1->name[l-2] == '/') {
flag |= (m1->name[l-1] == '1')? 0x40 : 0x80;
if (c > 0) printf("%dM%dI%dM\t", m1->map_qual, c, m1->size - m1->map_qual - c);
else printf("%dM%dD%dM\t", m1->map_qual, -c, m1->size - m1->map_qual);
}
+ se_mapq = 0; // zero SE mapQ for reads aligned by SW
} else {
if (flag&4) printf("0\t*\t");
else printf("%d\t%dM\t", m1->map_qual, m1->size);
for (j = 0; j != m1->size; ++j)
putchar((m1->seq[j]&0x3f) + 33);
putchar('\t');
- if (flag&4) {
+ if (rg) printf("RG:Z:%s\t", rg);
+ if (flag&4) { // unmapped
printf("MF:i:%d\n", m1->flag);
} else {
printf("MF:i:%d\t", m1->flag);
- if (m1->flag) printf("Aq:i:%d\t", m1->alt_qual);
+ if (m1->flag) printf("AM:i:%d\tSM:i:%d\t", m1->alt_qual, se_mapq);
printf("NM:i:%d\tUQ:i:%d\tH0:i:%d\tH1:i:%d\n", m1->info1&0xf, m1->info2, m1->c[0], m1->c[1]);
}
}
{
gzFile fp;
if (argc == 1) {
- fprintf(stderr, "Usage: maq2tam <in.map>\n");
+ fprintf(stderr, "Version: %s\n", PACKAGE_VERSION);
+ fprintf(stderr, "Usage: maq2sam <in.map> [<readGroup>]\n");
return 1;
}
fp = strcmp(argv[1], "-")? gzopen(argv[1], "r") : gzdopen(fileno(stdin), "r");
- maq2tam_core(fp);
+ maq2tam_core(fp, argc > 2? argv[2] : 0);
gzclose(fp);
return 0;
}