updated main loop to not duplicate hash key calnh
authorHenry Amrhein <hamrhein@caltech.edu>
Sat, 22 Dec 2012 09:18:01 +0000 (01:18 -0800)
committerHenry Amrhein <hamrhein@caltech.edu>
Sat, 22 Dec 2012 09:18:01 +0000 (01:18 -0800)
bam_calnh.c

index c416af422e43c51699cd3032f07a2a69d9775da1..40ce683d7316719e8bc1b4818ee5f0d5f3d0008c 100644 (file)
@@ -12,7 +12,6 @@ bam_calnh_core(samfile_t *in, samfile_t *out)
   bam1_t *b;
   khint_t k;
   uint8_t *oldnh;
-  char *qn = NULL;
   khash_t(QNH) *qnh;
   int ret;
   int64_t savepos;
@@ -22,7 +21,7 @@ bam_calnh_core(samfile_t *in, samfile_t *out)
 
   if (savepos < 0)
   {
-    fprintf(stderr, "[bam_calnh_core] bam_tell failure\n");
+    fprintf(stderr, "[%s] bam_tell failure.\n", __func__);
     return 1;
   }
 
@@ -31,14 +30,10 @@ bam_calnh_core(samfile_t *in, samfile_t *out)
 
   while (samread(in, b) >= 0)
   {
-    qn = strdup(bam1_qname(b));
-    k = kh_put(QNH, qnh, qn, &ret);
+    k = kh_put(QNH, qnh, bam1_qname(b), &ret);
 
     if (ret == 0)
-    {
       kh_val(qnh, k) += 1;
-      free(qn);
-    }
 
     else
       kh_val(qnh, k) = 1;
@@ -46,22 +41,20 @@ bam_calnh_core(samfile_t *in, samfile_t *out)
 
   if (bam_seek(in->x.bam, savepos, SEEK_SET) < 0)
   {
-    fprintf(stderr, "[bam_calnh_core] bam_seek failure\n");
+    fprintf(stderr, "[%s] bam_seek failure.\n", __func__);
     return 1;
   }
   
-
   while (samread(in, b) >= 0)
   {
     k = kh_get(QNH, qnh, bam1_qname(b));
     oldnh = bam_aux_get(b, "NH");
 
-    if (!(oldnh))
-    {
-      val = kh_val(qnh, k);
-      bam_aux_append(b, "NH", 'i', 4, (uint8_t *)&val);
-    }
+    if (oldnh)
+      bam_aux_del(b, oldnh);
 
+    val = kh_val(qnh, k);
+    bam_aux_append(b, "NH", 'i', 4, (uint8_t *)&val);
     samwrite(out, b);
   }