]> git.donarmstrong.com Git - samtools.git/blobdiff - misc/maq2sam.c
works
[samtools.git] / misc / maq2sam.c
index 70ecf4145a73db6265b5df61cf18270b87d3f1c5..2bfbe2a3b328e276b52f1a443dbc6500d81122e8 100644 (file)
@@ -5,7 +5,7 @@
 #include <stdlib.h>
 #include <assert.h>
 
-#define PACKAGE_VERSION "0.1.1 (20090120)"
+#define PACKAGE_VERSION "r439"
 
 //#define MAQ_LONGREADS
 
@@ -94,7 +94,7 @@ void maq2tam_core(gzFile fp, const char *rg)
        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;
@@ -111,9 +111,9 @@ void maq2tam_core(gzFile fp, const char *rg)
                                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;
@@ -130,6 +130,7 @@ void maq2tam_core(gzFile fp, const char *rg)
                                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);
@@ -144,11 +145,11 @@ void maq2tam_core(gzFile fp, const char *rg)
                        putchar((m1->seq[j]&0x3f) + 33);
                putchar('\t');
                if (rg) printf("RG:Z:%s\t", rg);
-               if (flag&4) {
+               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]);
                }
        }