]> git.donarmstrong.com Git - samtools.git/blobdiff - bam_sort.c
name sorting checkes READ1 and READ2
[samtools.git] / bam_sort.c
index 166be2ae5b5d9992796907b2323af96935640d87..d38c7a11f8d22a74d30e5862b1d5440ba1a0e474 100644 (file)
@@ -50,7 +50,7 @@ static inline int heap_lt(const heap1_t a, const heap1_t b)
                int t;
                if (a.b == 0 || b.b == 0) return a.b == 0? 1 : 0;
                t = strnum_cmp(bam1_qname(a.b), bam1_qname(b.b));
-               return (t > 0 || (t == 0 && __pos_cmp(a, b)));
+               return (t > 0 || (t == 0 && (a.b->core.flag&0xc0) > (b.b->core.flag&0xc0)));
        } else return __pos_cmp(a, b);
 }
 
@@ -320,8 +320,8 @@ static inline int bam1_lt(const bam1_p a, const bam1_p b)
 {
        if (g_is_by_qname) {
                int t = strnum_cmp(bam1_qname(a), bam1_qname(b));
-               return (t < 0 || (t == 0 && (((uint64_t)a->core.tid<<32|(a->core.pos+1)) < ((uint64_t)b->core.tid<<32|(b->core.pos+1)))));
-       } else return (((uint64_t)a->core.tid<<32|(a->core.pos+1)) < ((uint64_t)b->core.tid<<32|(b->core.pos+1)));
+               return (t < 0 || (t == 0 && (a->core.flag&0xc0) < (b->core.flag&0xc0)));
+       } else return (((uint64_t)a->core.tid<<32|(a->core.pos+1)<<1|bam1_strand(a)) < ((uint64_t)b->core.tid<<32|(b->core.pos+1)<<1|bam1_strand(b)));
 }
 KSORT_INIT(sort, bam1_p, bam1_lt)
 
@@ -486,7 +486,7 @@ void bam_sort_core(int is_by_qname, const char *fn, const char *prefix, size_t m
 
 int bam_sort(int argc, char *argv[])
 {
-       size_t max_mem = 1<<29; // 512MB
+       size_t max_mem = 768<<20; // 512MB
        int c, is_by_qname = 0, is_stdout = 0, n_threads = 0;
        while ((c = getopt(argc, argv, "nom:@:")) >= 0) {
                switch (c) {