589685da775f5a122bb23d2b8eca372f53e4b5bc
angie
Wed Sep 10 16:34:34 2014 -0700
Changes to snpNcbiToUcsc to handle b141 on hg19 and hg38:- When checking range{I,D,S}* locTypes, use strlen(refNCBI) as length only if
refNCBI contains only nucleotides.
- Checking for overlapping variants at the same location (checkCluster ->
DuplicateObserved, MixedObserved) used to be limited to insertions because
those are easier to check. Now we check all variants that have
all-nucleotide observed. Libified some code from hgTracks that can
reverse-complement a slash-separated string of alleles, e.g. G/T -> A/C,
-/AG -> -/CT.
- SNP IDs are getting too huge (and sparse) to use as indexes into a
statically allocated array; use a hash.
- Erroneous NULL frequencies in dbSNP's SNPAlleleFreq need to be detected
and ignored.
refs #13309
diff --git src/hg/hgTracks/variation.c src/hg/hgTracks/variation.c
index bcfac14..bd0c496 100644
--- src/hg/hgTracks/variation.c
+++ src/hg/hgTracks/variation.c
@@ -466,51 +466,33 @@
dyStringPrintf(dy, "%s ", rsId);
if (isNotEmpty(chimpAllele))
{
int chimpLen = strlen(chimpAllele);
if (doRc && isAllNt(chimpAllele, chimpLen))
{
char chimpCopy[chimpLen+1];
safecpy(chimpCopy, sizeof(chimpCopy), chimpAllele);
reverseComplement(chimpCopy, chimpLen);
dyStringPrintf(dy, "%s>", chimpCopy);
}
else
dyStringPrintf(dy, "%s>", chimpAllele);
}
if (doRc)
- {
- int obsLen = strlen(observedAlleles);
- char obsCopy[obsLen+1];
- safecpy(obsCopy, sizeof(obsCopy), observedAlleles);
- char *obsWords[obsLen];
- int obsCount = chopByChar(obsCopy, '/', obsWords, obsLen);
- int i;
- // dbSNP orders alleles alphabetically so reverse the order too:
- for (i = obsCount-1; i >= 0; i--)
- {
- char *al = obsWords[i];
- int alLen = strlen(al);
- if (isAllNt(al, alLen))
- reverseComplement(al, alLen);
- if (i < obsCount-1)
- dyStringAppendC(dy, '/');
- dyStringPrintf(dy, "%s", al);
- }
- }
+ dyStringAppend(dy, reverseComplementSlashSeparated(observedAlleles));
else
- dyStringPrintf(dy, "%s", observedAlleles);
+ dyStringAppend(dy, observedAlleles);
return dyStringCannibalize(&dy);
}
static void setSnp125ExtendedNameObserved(struct snp125 *snpList, boolean useRefStrand)
/* Append observed alleles to each snp's name, possibly reverse-complementing alleles
* that were reported on the - strand. */
{
struct snp125 *snpItem = snpList;
for (; snpItem != NULL; snpItem = snpItem->next)
{
boolean doRc = useRefStrand && ((snpItem->strand[0] == '-') ^ revCmplDisp);
snpItem->name = snp125ExtendName(snpItem->name, NULL, snpItem->observed, doRc);
}
}