]> git.donarmstrong.com Git - samtools.git/blobdiff - bam_plcmd.c
* samtools-0.1.9-2 (r797)
[samtools.git] / bam_plcmd.c
index 32d050d68413aa18e6ba4ea688615579a539bf2b..54b8f91722b2f16ade955231e075764b3161d2d5 100644 (file)
@@ -726,31 +726,20 @@ static int mpileup(mplp_conf_t *conf, int n, char **fn)
                        for (i = 0; i < gplp.n; ++i)
                                bcf_call_glfgen(gplp.n_plp[i], gplp.plp[i], ref16, bca, bcr + i);
                        bcf_call_combine(gplp.n, bcr, ref16, &bc);
-                       bcf_call2bcf(tid, pos, &bc, b, (conf->flag&(MPLP_FMT_DP|MPLP_FMT_SP))? bcr : 0, (conf->flag&MPLP_FMT_SP));
+                       bcf_call2bcf(tid, pos, &bc, b, (conf->flag&(MPLP_FMT_DP|MPLP_FMT_SP))? bcr : 0,
+                                                (conf->flag&MPLP_FMT_SP), 0, 0);
                        bcf_write(bp, bh, b);
                        bcf_destroy(b);
-                       // test if there is an indel
-                       if (conf->flag&MPLP_REALN) {
-                               for (i = 0; i < gplp.n; ++i) {
-                                       int j;
-                                       for (j = 0; j < gplp.n_plp[i]; ++j) {
-                                               const bam_pileup1_t *p = gplp.plp[i] + j;
-                                               if (p->indel != 0) break;
-                                       }
-                                       if (j != gplp.n_plp[i]) break;
-                               }
-                               if (i < gplp.n) { // at least one of the read contains a gap
-                                       for (i = 0; i < gplp.n; ++i)
-                                               bcf_call_glfgen_gap(pos, gplp.n_plp[i], gplp.plp[i], bca, bcr + i);
-                                       bcf_call_combine_gap(gplp.n, bcr, &bc);
-                                       if (bc.depth > 0) {
-                                               b = calloc(1, sizeof(bcf1_t));
-                                               bcf_call2bcf(tid, pos, &bc, b, (conf->flag&(MPLP_FMT_DP|MPLP_FMT_SP))? bcr : 0,
-                                                                        (conf->flag&MPLP_FMT_SP));
-                                               bcf_write(bp, bh, b);
-                                               bcf_destroy(b);
-                                       }
-                               }
+                       // call indels
+                       if (bcf_call_gap_prep(gplp.n, gplp.n_plp, gplp.plp, pos, bca, ref) >= 0) {
+                               for (i = 0; i < gplp.n; ++i)
+                                       bcf_call_glfgen(gplp.n_plp[i], gplp.plp[i], -1, bca, bcr + i);
+                               bcf_call_combine(gplp.n, bcr, -1, &bc);
+                               b = calloc(1, sizeof(bcf1_t));
+                               bcf_call2bcf(tid, pos, &bc, b, (conf->flag&(MPLP_FMT_DP|MPLP_FMT_SP))? bcr : 0,
+                                                        (conf->flag&MPLP_FMT_SP), bca, ref);
+                               bcf_write(bp, bh, b);
+                               bcf_destroy(b);
                        }
                } else {
                        printf("%s\t%d\t%c", h->target_name[tid], pos + 1, (ref && pos < ref_len)? ref[pos] : 'N');