af436a53d2bb152a9385dbb9746e19258580a37c
larrym
  Fri Feb 18 13:33:17 2011 -0800
start => chromStart in parameter lists; fix bug in codonToPos (cdsEnd s/d be cdsStart)
diff --git src/hg/lib/genePred.c src/hg/lib/genePred.c
index c425114..6385ef4 100644
--- src/hg/lib/genePred.c
+++ src/hg/lib/genePred.c
@@ -1792,34 +1792,34 @@
 
     /* Output chromStarts field */
     for (i=0; i<gp->exonCount; ++i)
 	{
 	int exonStart = gp->exonStarts[i];
 	int exonEnd = gp->exonEnds[i];
 	exonStart = max(start, exonStart);
 	exonEnd = min(end, exonEnd);
 	if (exonStart < exonEnd)
 	    fprintf(f, "%d,", exonStart - newStart);
 	}
     fprintf(f, "\n");
     }
 }
 
-boolean codonToPos(struct genePred *gp, unsigned num, int *start, int *end)
+boolean codonToPos(struct genePred *gp, unsigned num, int *chromStart, int *chromEnd)
 {
 // map 1-based codon to genomic coordinates. If the codon crosses an exon junction, we return just the beginning (LHS) of the codon.
-// Returns true if we find the codon in given gene predition; start and end are set to appropriate three base region.
+// Returns true if we find the codon in given gene predition; chromStart and end are set to appropriate three base region.
 
 int pos = -1;
 int i;
 int offset = -1;  // current 1-based offset in bases (not codons)
 if(gp->strand[0] == '+')
     {
     for(i = 0; i < gp->exonCount; i++)
         {
         if(gp->exonEnds[i] > gp->cdsStart && gp->exonStarts[i] < gp->cdsEnd)
             {
             int start, end;
             if(offset == -1 && gp->cdsStart <= gp->exonEnds[i])
                 {
                 // start counting
                 start = gp->cdsStart;
@@ -1834,70 +1834,70 @@
             int next = offset + end - start;
             if(next > (num * 3 - 2))
                 {
                 pos = start + (((num - 1) * 3 + 1) - offset);
                 break;
                 }
             else
                 offset = next;
             }
         }
     }
 else
     {
     for(i = gp->exonCount - 1; i >= 0; i--)
         {
-        if(gp->exonStarts[i] < gp->cdsEnd && gp->exonEnds[i] >= gp->cdsEnd)
+        if(gp->exonStarts[i] < gp->cdsEnd && gp->exonEnds[i] > gp->cdsStart)
             {
             int start, end; // start here is really the RHS, and end is the LHS
             if(offset == -1 && gp->cdsEnd >= gp->exonStarts[i])
                 {
                 // start counting
                 start = gp->cdsEnd;
                 offset = 1;
                 }
             else
                 start = gp->exonEnds[i];
             if(gp->cdsStart > gp->exonStarts[i])
                 end = gp->cdsStart;
             else
                 end = gp->exonStarts[i];
             int next = offset + start - end;
             if(next > num * 3)
                 {
                 pos = start - (num*3 - offset) - 1;
                 break;
                 }
             else
                 offset = next;
             }
         }
     }
 if(pos == -1)
     return FALSE;
 else
     {
-    *start = pos;
-    *end = pos + 3;
+    *chromStart = pos;
+    *chromEnd = pos + 3;
     return TRUE;
     }
 }
 
-boolean exonToPos(struct genePred *gp, unsigned num, int *start, int *end)
+boolean exonToPos(struct genePred *gp, unsigned num, int *chromStart, int *chromEnd)
 {
 // map 1-based exon number to genomic coordinates.
 // Returns true if we find the exon in given gene predition; start and end are set to appropriate region.
 
 if(num == 0 || num > gp->exonCount)
     return FALSE;
 else if(gp->strand[0] == '+')
     {
-    *start = gp->exonStarts[num - 1];
-    *end = gp->exonEnds[num - 1];
+    *chromStart = gp->exonStarts[num - 1];
+    *chromEnd = gp->exonEnds[num - 1];
     }
 else
     {
-    *start = gp->exonStarts[gp->exonCount - num];
-    *end = gp->exonEnds[gp->exonCount - num];
+    *chromStart = gp->exonStarts[gp->exonCount - num];
+    *chromEnd = gp->exonEnds[gp->exonCount - num];
     }
 return TRUE;
 }