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; }