22d3654d2287e4bc26ec0ac27bf0d8ac7cc8a116
angie
Wed Mar 5 13:09:35 2014 -0800
Added a few tests for 0-length (insertion) variants, to avoid errAbortwhen trying to fetch sequence for empty region.
diff --git src/hg/lib/pgSnp.c src/hg/lib/pgSnp.c
index d8ecaae..14d96db 100644
--- src/hg/lib/pgSnp.c
+++ src/hg/lib/pgSnp.c
@@ -286,57 +286,66 @@
int end = rv->cdEnd;
if (rv->cdEnd > (codStart + gene->blockSizes[i] - 1))
end = codStart + gene->blockSizes[i] - 1;
if (posStrand)
{
cStart = gene->chromStart + gene->chromStarts[i] + (st - codStart + 1);
cEnd = gene->chromStart + gene->chromStarts[i] + (end - codStart + 1);
}
else
{
/* minus strand coding start == chromEnd */
cEnd = gene->chromStart + gene->chromStarts[i] + gene->blockSizes[i] - (st - codStart + 1);
cStart = gene->chromStart + gene->chromStarts[i] + gene->blockSizes[i] - (end - codStart + 1);
}
//printf("TESTING fetching sequence for %s:%d-%d\n", gene->chrom, cStart, cEnd);
+ if (cStart < cEnd)
+ {
struct dnaSeq *s = hDnaFromSeq(db, gene->chrom, cStart, cEnd, dnaUpper);
dyStringPrintf(seq, "%s", s->dna);
//printf("TESTING got seq=%s
\n", s->dna);
//freeDnaSeq(&s);
+ }
/* check following exons, chrom order */
if (posStrand && rv->cdEnd >= codStart + gene->blockSizes[i])
{
int st = codStart + gene->blockSizes[i] + 1;
int end = rv->cdEnd;
cStart = gene->chromStart + gene->chromStarts[i+1] - 1;
cEnd = gene->chromStart + gene->chromStarts[i+1] + (end - st + 1);
+ if (cStart < cEnd)
+ {
struct dnaSeq *s = hDnaFromSeq(db, gene->chrom, cStart, cEnd, dnaUpper);
dyStringPrintf(seq, "%s", s->dna);
//freeDnaSeq(&s);
}
+ }
else if (!posStrand && rv->cdStart < (codStart - 1))
{
int st = rv->cdStart;
int end = codStart - 1;
cStart = gene->chromStart + gene->chromStarts[i+1];
cEnd = gene->chromStart + gene->chromStarts[i+1] + (end - st);
//printf("TESTING fetching sequence for %s:%d-%d\n", gene->chrom, cStart, cEnd);
+ if (cStart < cEnd)
+ {
struct dnaSeq *s = hDnaFromSeq(db, gene->chrom, cStart, cEnd, dnaUpper);
dyStringPrintf(seq, "%s", s->dna);
//freeDnaSeq(&s);
//printf("TESTING got seq=%s
\n", s->dna);
}
+ }
rv->seq = dyStringCannibalize(&seq);
break;
}
/* increment values past this exon */
codNum += trunc((gene->blockSizes[i] - frame) / 3);
if (frame > 0) codNum++;
cPos += gene->blockSizes[i];
frame = 3 - ((gene->blockSizes[i] - frame) % 3);
}
if (rv->seq == NULL)
return NULL; /* not found */
return rv;
}
char *replaceString(char *old, int from, int to, char *rep)