]> git.donarmstrong.com Git - samtools.git/commitdiff
Complain when BAM cannot be open. Severe bug fixed in -m haploid calling.
authorPetr Danecek <pd3@sanger.ac.uk>
Wed, 10 Oct 2012 11:47:41 +0000 (12:47 +0100)
committerPetr Danecek <pd3@sanger.ac.uk>
Wed, 10 Oct 2012 11:47:41 +0000 (12:47 +0100)
bam_plcmd.c
bcftools/prob1.c

index ed00d2e80202fde96d5c5aecfc28aa8ff39e5bd6..f77be0467e6442c12145a35ebb97259e237d5625 100644 (file)
@@ -208,6 +208,11 @@ static int mpileup(mplp_conf_t *conf, int n, char **fn)
                bam_header_t *h_tmp;
                data[i] = calloc(1, sizeof(mplp_aux_t));
                data[i]->fp = strcmp(fn[i], "-") == 0? bam_dopen(fileno(stdin), "r") : bam_open(fn[i], "r");
+        if ( !data[i]->fp )
+        {
+            fprintf(stderr, "[%s] failed to open %d-th input.\n", __func__, i+1);
+            exit(1);
+        }
                data[i]->conf = conf;
                h_tmp = bam_header_read(data[i]->fp);
                data[i]->h = i? h : h_tmp; // for i==0, "h" has not been set yet
index e3d6b5eb42fee41bb3b2e8f392b5ae38d1934bc5..5051cc3cece3770e4e4e61e1934c8cfff79998dc 100644 (file)
@@ -300,10 +300,12 @@ int call_multiallelic_gt(bcf1_t *b, bcf_p1aux_t *ma, double threshold)
                 int isample, ibb = (ib+1)*(ib+2)/2-1, iab = iaa - ia + ib;
                 for (isample=0; isample<ma->n; isample++)
                 {
-                    if ( b->ploidy && b->ploidy[isample]==1 ) continue;
                     double *p = pdg + isample*npdg;
                     //assert( log(fa*p[iaa] + fb*p[ibb] + fab*p[iab]) <= 0 );
-                    lk_tot += log(fa*p[iaa] + fb*p[ibb] + fab*p[iab]);
+                    if ( b->ploidy && b->ploidy[isample]==1 )
+                        lk_tot +=  log(fa*p[iaa] + fb*p[ibb]);
+                    else 
+                        lk_tot +=  log(fa*p[iaa] + fb*p[ibb] + fab*p[iab]);
                 }
                 if ( max_lk<lk_tot ) { max_lk2 = max_lk; max_als2 = max_als; max_lk = lk_tot; max_als = 1<<ia|1<<ib; }
                 else if ( max_lk2<lk_tot ) { max_lk2 = lk_tot; max_als2 = 1<<ia|1<<ib; }
@@ -334,10 +336,12 @@ int call_multiallelic_gt(bcf1_t *b, bcf_p1aux_t *ma, double threshold)
                     int iac = iaa - ia + ic, ibc = ibb - ib + ic;
                     for (isample=0; isample<ma->n; isample++)
                     {
-                        if ( b->ploidy && b->ploidy[isample]==1 ) continue;
                         double *p = pdg + isample*npdg;
                         //assert( log(fa*p[iaa] + fb*p[ibb] + fc*p[icc] + fab*p[iab] + fac*p[iac] + fbc*p[ibc]) <= 0 );
-                        lk_tot += log(fa*p[iaa] + fb*p[ibb] + fc*p[icc] + fab*p[iab] + fac*p[iac] + fbc*p[ibc]);
+                        if ( b->ploidy && b->ploidy[isample]==1 ) 
+                            lk_tot += log(fa*p[iaa] + fb*p[ibb] + fc*p[icc]);
+                        else
+                            lk_tot += log(fa*p[iaa] + fb*p[ibb] + fc*p[icc] + fab*p[iab] + fac*p[iac] + fbc*p[ibc]);
                     }
                     if ( max_lk<lk_tot ) { max_lk2 = max_lk; max_als2 = max_als; max_lk = lk_tot; max_als = 1<<ia|1<<ib|1<<ic; }
                     else if ( max_lk2<lk_tot ) { max_lk2 = lk_tot; max_als2 = 1<<ia|1<<ib|1<<ic; }
@@ -347,7 +351,6 @@ int call_multiallelic_gt(bcf1_t *b, bcf_p1aux_t *ma, double threshold)
         }
     }
 
-
     // Should we add another allele, does it increase the likelihood significantly?
     int n1=0, n2=0;
     for (i=0; i<nals; i++) if ( max_als&1<<i) n1++;