#define BAM_PLF_INDEL_ONLY 0x04
#define BAM_PLF_GLF 0x08
#define BAM_PLF_VAR_ONLY 0x10
+#define BAM_PLF_2ND 0x20
typedef struct {
bam_header_t *h;
if (c > 126) c = 126;
putchar(c);
}
+ if (d->format & BAM_PLF_2ND) { // print 2nd calls and qualities
+ const unsigned char *q;
+ putchar('\t');
+ for (i = 0; i < n; ++i) {
+ const bam_pileup1_t *p = pu + i;
+ q = bam_aux_get(p->b, "E2");
+ putchar(q? q[p->qpos + 1] : 'N');
+ }
+ putchar('\t');
+ for (i = 0; i < n; ++i) {
+ const bam_pileup1_t *p = pu + i;
+ q = bam_aux_get(p->b, "U2");
+ putchar(q? q[p->qpos + 1] : '!');
+ }
+ }
// print mapping quality if -s is flagged on the command line
if (d->format & BAM_PLF_SIMPLE) {
putchar('\t');
printf("%d\t%d\t", rms_mapq, n);
printf("%s\t%s\t", r->s[0], r->s[1]);
//printf("%d\t%d\t", r->gl[0], r->gl[1]);
- printf("%d\t%d\t%d\n", r->cnt1, r->cnt2, r->cnt_anti);
+ printf("%d\t%d\t%d\t", r->cnt1, r->cnt2, r->cnt_anti);
+ printf("%d\t%d\n", r->cnt_ref, r->cnt_ambi);
bam_maqindel_ret_destroy(r);
}
return 0;
d->tid = -1; d->mask = BAM_DEF_MASK;
d->c = bam_maqcns_init();
d->ido = bam_maqindel_opt_init();
- while ((c = getopt(argc, argv, "st:f:cT:N:r:l:im:gI:G:vM:S")) >= 0) {
+ while ((c = getopt(argc, argv, "st:f:cT:N:r:l:im:gI:G:vM:S2")) >= 0) {
switch (c) {
case 's': d->format |= BAM_PLF_SIMPLE; break;
case 't': fn_list = strdup(optarg); break;
case 'v': d->format |= BAM_PLF_VAR_ONLY; break;
case 'm': d->mask = strtol(optarg, 0, 0); break;
case 'g': d->format |= BAM_PLF_GLF; break;
+ case '2': d->format |= BAM_PLF_2ND; break;
case 'I': d->ido->q_indel = atoi(optarg); break;
case 'G': d->ido->r_indel = atof(optarg); break;
case 'S': is_SAM = 1; break;
fprintf(stderr, "Usage: samtools pileup [options] <in.bam>|<in.sam>\n\n");
fprintf(stderr, "Option: -s simple (yet incomplete) pileup format\n");
fprintf(stderr, " -S the input is in SAM\n");
+ fprintf(stderr, " -2 output the 2nd best call and quality\n");
fprintf(stderr, " -i only show lines/consensus with indels\n");
fprintf(stderr, " -m INT filtering reads with bits in INT [%d]\n", d->mask);
fprintf(stderr, " -M INT cap mapping quality at INT [%d]\n", d->c->cap_mapQ);
- fprintf(stderr, " -t FILE list of reference sequences (assume the input is in SAM)\n");
+ fprintf(stderr, " -t FILE list of reference sequences (force -S)\n");
fprintf(stderr, " -l FILE list of sites at which pileup is output\n");
fprintf(stderr, " -f FILE reference sequence in the FASTA format\n\n");
fprintf(stderr, " -c output the maq consensus sequence\n");
}
if (d->fai == 0 && (d->format & (BAM_PLF_CNS|BAM_PLF_INDEL_ONLY)))
fprintf(stderr, "[bam_pileup] indels will not be called when -f is absent.\n");
+ if (fn_fa && is_SAM && fn_list == 0) fn_list = samfaipath(fn_fa);
+
{
samfile_t *fp;
fp = is_SAM? samopen(argv[optind], "r", fn_list) : samopen(argv[optind], "rb", 0);