src/hg/tcga/pBamBam/asBamBam.c 1.9
1.9 2010/03/15 00:24:27 jsanborn
updated
Index: src/hg/tcga/pBamBam/asBamBam.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/tcga/pBamBam/asBamBam.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -b -B -U 4 -r1.8 -r1.9
--- src/hg/tcga/pBamBam/asBamBam.c 14 Mar 2010 23:58:25 -0000 1.8
+++ src/hg/tcga/pBamBam/asBamBam.c 15 Mar 2010 00:24:27 -0000 1.9
@@ -230,10 +230,18 @@
reset_globals(ap);
int i, index;
int32_t start, stop;
-int32_t prevStart = -1, prevStop = -1;
+int32_t prevStart = -1;
const bam_pileup1_t *p;
+
+char best_n1 = 'N';
+int best_q1 = -1;
+char best_n2 = 'N';
+int best_q2 = -1;
+
+int insertion = 0, deletion = 0;
+
for (i = 0; i < d->nL; ++i)
{
p = d->puL + i;
if (!check_read(p, ap))
@@ -243,36 +251,76 @@
/* Check if start & stop has already been visited, to dupes missed in prev step*/
start = (c)->pos;
stop = start + (c)->l_qseq;
- if (start <= prevStart && stop <= prevStop)
- continue;
- prevStart = start;
- prevStop = stop;
+ //if (start <= prevStart && stop <= prevStop)
+// continue;
if (ap->pStart == -1)
{
ap->pStart = start;
ap->pStop = stop;
}
+ else
+ {
if (start < ap->pStart)
ap->pStart = start;
if (stop > ap->pStop)
ap->pStop = stop;
+ }
+
+ if (prevStart == -1)
+ prevStart = start;
+
+ if (start < prevStart)
+ continue;
+ if (start == prevStart)
+ {
+ if (p->is_del)
+ {
if (p->indel > 0)
- insL += 1;
+ insertion = 1;
else if (p->indel < 0)
- delL += 1;
-
- if (!p->is_del && p->indel == 0)
+ deletion = 1;
+ }
+ else
{
- double lseq = (double) p->b->core.l_qseq;
int b = toupper(bam_nt16_rev_table[bam1_seqi(bam1_seq(p->b), p->qpos)]);
if ((index = nuc_index(b)) < 0)
continue;
+ if (best_b1 == 'N')
+ {
+ best_b1 = b;
+ best_q1 = qual;
+ }
+ else if (qual > best_q1)
+ {
+ best_b2 = best_b1;
+ best_q2 = best_q1;
- votesL[index] += qual;
+ best_b1 = b;
+ best_q1 = qual;
+ }
+ else if (qual > best_q2)
+ {
+ best_b2 = b;
+ best_q2 = qual;
+ }
+ }
+ continue;
+ }
+ prevStart = start;
+
+ if (insertion)
+ insL += 1;
+ else if (deletion)
+ delL += 1;
+
+ double lseq = (double) p->b->core.l_qseq;
+ if (!(index = nuc_index(best_b1)) < 0)
+ {
+ votesL[index] += best_q1;
countsL[index]++;
if (p->qpos < round(0.33 * lseq))
countsL1[index]++;
@@ -280,12 +328,30 @@
countsL2[index]++;
else
countsL3[index]++;
}
+
+ if (!(index = nuc_index(best_b2)) < 0)
+ {
+ votesL[index] += best_q2;
+ countsL[index]++;
+
+ if (p->qpos < round(0.33 * lseq))
+ countsL1[index]++;
+ else if (p->qpos < round(0.67 * lseq))
+ countsL2[index]++;
+ else
+ countsL3[index]++;
+ }
+ best_b1 = 'N';
+ best_q1 = -1;
+ best_b2 = 'N';
+ best_q2 = -1;
+
+ insertion = 0, deletion = 0;
}
prevStart = -1;
-prevStop = -1;
for (i = 0; i < d->nR; ++i)
{
p = d->puR + i;
if (!check_read(p, ap))