X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=misc%2Fmaq2sam.c;h=2bfbe2a3b328e276b52f1a443dbc6500d81122e8;hb=307c147168f7154e3755712797078c513e0b242a;hp=e30aa925784198aab70132184a2dddb6f2e7705d;hpb=f93dae0d03856955f9424e8b2aaf261304ca647e;p=samtools.git diff --git a/misc/maq2sam.c b/misc/maq2sam.c index e30aa92..2bfbe2a 100644 --- a/misc/maq2sam.c +++ b/misc/maq2sam.c @@ -5,6 +5,8 @@ #include #include +#define PACKAGE_VERSION "r439" + //#define MAQ_LONGREADS #ifdef MAQ_LONGREADS @@ -84,7 +86,7 @@ maqmap_t *maqmap_read_header(gzFile fp) return mm; } -void maq2tam_core(gzFile fp) +void maq2tam_core(gzFile fp, const char *rg) { maqmap_t *mm; maqmap1_t mm1, *m1; @@ -92,7 +94,7 @@ void maq2tam_core(gzFile fp) 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; @@ -109,9 +111,9 @@ void maq2tam_core(gzFile fp) 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; @@ -128,6 +130,7 @@ void maq2tam_core(gzFile fp) 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); @@ -141,11 +144,12 @@ void maq2tam_core(gzFile fp) 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]); } } @@ -158,11 +162,12 @@ int main(int argc, char *argv[]) { gzFile fp; if (argc == 1) { - fprintf(stderr, "Usage: maq2tam \n"); + fprintf(stderr, "Version: %s\n", PACKAGE_VERSION); + fprintf(stderr, "Usage: maq2sam []\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; }