7 KHASH_MAP_INIT_STR(QNH, int)
10 bam_calnh_core(samfile_t *in, samfile_t *out)
20 savepos = bam_tell(in->x.bam);
24 fprintf(stderr, "[%s] bam_tell failure.\n", __func__);
31 while (samread(in, b) >= 0)
33 k = kh_put(QNH, qnh, bam1_qname(b), &ret);
42 if (bam_seek(in->x.bam, savepos, SEEK_SET) < 0)
44 fprintf(stderr, "[%s] bam_seek failure.\n", __func__);
48 while (samread(in, b) >= 0)
50 k = kh_get(QNH, qnh, bam1_qname(b));
51 oldnh = bam_aux_get(b, "NH");
54 bam_aux_del(b, oldnh);
57 bam_aux_append(b, "NH", 'i', 4, (uint8_t *)&val);
61 for (k = kh_begin(qnh); k != kh_end(qnh); ++k)
63 free((char *)kh_key(qnh, k));
74 fprintf(stderr, "\nUsage: %s <input.bam> <output.bam>\n", argv[0]);
76 fprintf(stderr, "\nUsage: samtools calnh <input.bam> <output.bam>\n");
77 #endif /* _STANDALONE */
78 fprintf(stderr, " specify input.bam or output.bam as '-' to use pipes\n\n");
82 bam_calnh(int argc, char **argv)
94 in = samopen(argv[1], "rb", 0);
95 out = samopen(argv[2], "wb", in->header);
97 if ((in == 0) || (out == 0))
99 fprintf(stderr, "[bam_calnh] fail to read/write input files\n");
103 ret = bam_calnh_core(in, out);
111 main(int argc, char **argv)
113 return bam_calnh(argc, argv);
115 #endif /* _STANDALONE */