7 KHASH_MAP_INIT_STR(QNH, int)
10 bam_calnh_core(samfile_t *in, samfile_t *out)
21 savepos = bam_tell(in->x.bam);
25 fprintf(stderr, "[bam_calnh_core] bam_tell failure\n");
32 while (samread(in, b) >= 0)
34 qn = strdup(bam1_qname(b));
35 k = kh_put(QNH, qnh, qn, &ret);
47 if ((bam_seek(in->x.bam, savepos, SEEK_SET)) < 0)
49 fprintf(stderr, "[bam_calnh_core] bam_seek failure\n");
54 while (samread(in, b) >= 0)
56 k = kh_get(QNH, qnh, bam1_qname(b));
57 oldnh = bam_aux_get(b, "NH");
62 bam_aux_append(b, "NH", 'i', 4, (uint8_t *)&val);
68 for (k = kh_begin(qnh); k != kh_end(qnh); ++k)
70 free((char *)kh_key(qnh, k));
81 fprintf(stderr, "\nUsage: %s <input.bam> <output.bam>\n", argv[0]);
83 fprintf(stderr, "\nUsage: samtools calnh <input.bam> <output.bam>\n");
84 #endif /* _STANDALONE */
85 fprintf(stderr, " specify input.bam or output.bam as '-' to use pipes\n\n");
89 bam_calnh(int argc, char **argv)
101 in = samopen(argv[1], "rb", 0);
102 out = samopen(argv[2], "wb", in->header);
104 if ((in == 0) || (out == 0))
106 fprintf(stderr, "[bam_calnh] fail to read/write input files\n");
110 ret = bam_calnh_core(in, out);
118 main(int argc, char **argv)
120 return bam_calnh(argc, argv);
122 #endif /* _STANDALONE */