src/hg/tcga/bamBam/bamBam.c 1.2

1.2 2009/09/25 18:08:57 jsanborn
it is alive
Index: src/hg/tcga/bamBam/bamBam.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/tcga/bamBam/bamBam.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -b -B -U 4 -r1.1 -r1.2
--- src/hg/tcga/bamBam/bamBam.c	25 Sep 2009 05:46:04 -0000	1.1
+++ src/hg/tcga/bamBam/bamBam.c	25 Sep 2009 18:08:57 -0000	1.2
@@ -50,17 +50,17 @@
     char *ref;
 
     /* Left pileup */
     bam_header_t *leftH;
-    uint32_t leftTid;
-    uint32_t leftPos;
+    int32_t leftTid;
+    int32_t leftPos;
     int leftN;
     bam_pileup1_t *leftPu;
 
     /* Right pileup */
     bam_header_t *rightH;
-    uint32_t rightTid;
-    uint32_t rightPos;
+    int32_t rightTid;
+    int32_t rightPos;
     int rightN;
     bam_pileup1_t *rightPu;
 
 } pileup_data_t;
@@ -79,8 +79,9 @@
 }
 
 static int perform_analysis(pileup_data_t *d)
 {
+//return 0;
 printf("%d\t%d\t%d\t", d->leftTid, d->leftPos, d->leftN);
 
 int i;
 const bam_pileup1_t *p;
@@ -117,8 +118,12 @@
 d->leftPu  = (bam_pileup1_t*)pu;
 
 if (!d->rightPu) 
     return 1;  // return '1' to stop reading data to let right gather some data
+else if (d->rightTid < d->leftTid)
+    return 1;
+else if (d->rightTid > d->leftTid)
+    return 0;
 else if (d->rightPos < d->leftPos)
     return 1;  // return '1' to stop reading data to let right catch up
 else if (d->rightPos > d->leftPos)
     return 0;  // return '0' to continue reading on left side data
@@ -137,8 +142,12 @@
 d->rightPu  = (bam_pileup1_t*)pu;
 
 if (!d->leftPu) 
     return 1;  // return '1' to stop reading data to let left gather some data
+else if (d->leftTid < d->rightTid)
+    return 1;
+else if (d->leftTid > d->rightTid)
+    return 0;
 else if (d->leftPos < d->rightPos)
     return 1;  // return '1' to stop reading data to let left catch up
 else if (d->leftPos > d->rightPos)
     return 0;  // return '0' to continue reading on right side data
@@ -179,35 +188,68 @@
 int retLeft = 1; 
 int retRight = 1;
 int stopLeft = 0;
 int stopRight = 0;
-
+int count = 0;
+int debug = 0;
 do 
     {
+
+    if (d->leftPos >= 247194573 || d->rightPos >= 247194573)
+	debug = 0;
+       
+    if (debug)
+	{
+	count++;
+	printf("tid:  %d, %d\n", d->leftTid, d->rightTid);
+	printf("pos:  %d, %d\n", d->leftPos, d->rightPos);
+	printf("stop: %d, %d\n", stopLeft, stopRight);
+	}
+	
     while (!stopLeft && ((retLeft = samread(left.in, bl)) >= 0))
 	stopLeft = bam_dual_plbuf_push(bl, bufLeft);
     
     while (!stopRight && ((retRight = samread(right.in, br)) >= 0))
 	stopRight = bam_dual_plbuf_push(br, bufRight);
 
-    while (stopLeft && stopRight)
+    if (debug)
 	{
-	if (!d->leftPu && !d->rightPu)
+	count++;
+	printf("tid:  %d, %d\n", d->leftTid, d->rightTid);
+	printf("pos:  %d, %d\n", d->leftPos, d->rightPos);
+	printf("stop: %d, %d\n", stopLeft, stopRight);
+	}
+
+    while (stopLeft && stopRight && count <= 50)
 	    {
-	    stopLeft = bam_dual_plbuf_resume(bufLeft);
-	    stopRight = bam_dual_plbuf_resume(bufRight);
+    if (debug)
+	{
+	count++;
+	printf("loop tid:  %d, %d\n", d->leftTid, d->rightTid);
+	printf("loop pos:  %d, %d\n", d->leftPos, d->rightPos);
+	printf("loop stop: %d, %d\n", stopLeft, stopRight);
 	    }
-	else if (!d->leftPu)
+//	if (!d->leftPu && !d->rightPu)
+//	    {
+//	    stopLeft = bam_dual_plbuf_resume(bufLeft);
+//	    stopRight = bam_dual_plbuf_resume(bufRight);
+//	    }
+	if (!d->leftPu)
 	    stopLeft = bam_dual_plbuf_resume(bufLeft);
 	else if (!d->rightPu)
 	    stopRight = bam_dual_plbuf_resume(bufRight);
+	else if (d->leftTid < d->rightTid)
+	    stopLeft = bam_dual_plbuf_resume(bufLeft);
+	else if (d->leftTid > d->rightTid)
+	    stopRight = bam_dual_plbuf_resume(bufRight);
 	else if (d->leftPos > 0 && d->leftPos < d->rightPos)
 	    stopLeft = bam_dual_plbuf_resume(bufLeft);
 	else if (d->rightPos > 0 && d->rightPos < d->leftPos)
 	    stopRight = bam_dual_plbuf_resume(bufRight);
 	}
 
-    } while (retLeft >= 0 && retRight >= 0);
+//    count++;
+    } while (retLeft >= 0 && retRight >= 0 && count <= 500);
 
 if (retLeft < 0)
     {
     bam_dual_plbuf_push(0, bufLeft);       // finalize pileup