f0aa2132b515869f610cef5a880789875eb2c3e0
angie
  Sat Jan 27 10:36:42 2018 -0800
Minor inefficiency when generating VCF from dbSNP IDs: refAl is trimmed from "-" to "", so when altAl "-" was compared to refAl it differed, causing the reference allele to appear redundantly in the alt alleles column. So trim altAl "-" to "" before comparing for consistency.

diff --git src/hg/hgVai/hgVai.c src/hg/hgVai/hgVai.c
index 4bfda99..827b0c8 100644
--- src/hg/hgVai/hgVai.c
+++ src/hg/hgVai/hgVai.c
@@ -2198,61 +2198,63 @@
 boolean obsHasDeletion = FALSE;
 int i;
 for (i = 0;  i < obsCount;  i++)
     if (sameString(obsWords[i], "-"))
 	{
 	obsHasDeletion = TRUE;
 	break;
 	}
 char **altAls;
 AllocArray(altAls, obsCount);
 int altCount = 0;
 boolean needLeftBase = isEmpty(refAl) || sameString(refAl, "-");
 for (i = 0;  i < obsCount;  i++)
     {
     char *altAl = obsWords[i];
+    if (sameString(altAl, "-"))
+        altAl[0] = '\0';
     int altAlLen = strlen(altAl);
     if (minusStrand && isAllNt(altAl, altAlLen))
 	reverseComplement(altAl, altAlLen);
     if (differentString(altAl, refAl))
 	{
-	if (sameString(altAl, "-"))
+	if (isEmpty(altAl))
 	    {
-	    altAls[altCount] = "";
 	    needLeftBase = TRUE;
 	    }
 	else
 	    {
 	    // It would be nice to expand the "(CA)11/12/14/15/16/17/18/19/20" syntax of
 	    // some dbSNP observed's.  What are these?: "(D1S243)", "(D1S2870)"
 	    // Unfortunately for observed="lengthTooLong" we just can't get the correct allele
 	    // sequence. (76,130 of those in snp138)
 	    // Hmmm, I guess we could at least stick in the right number of N's if we can
 	    // parse "(245 BP INSERTION)".  (2403 rows rlike "[0-9]+ BP ?INSERTION" in snp138)
 	    if (!isAllNt(altAl, altAlLen))
 		{
 		// Symbolic allele: left base required, and enclose it in <dbSNP:>'s.
 		// But if it's one of dbSNP's LARGEDELETION kind of alleles, that is redundant
 		// with the reference allele, so if we know there is already a "-" allele,
 		// skip it.
 		if (obsHasDeletion && regexMatch(altAl, dbSnpDelRegex))
 		    continue;
 		needLeftBase = TRUE;
 		altAl = encloseInAngleBracketsDbSnp(altAl);
 		}
 	    altAls[altCount] = altAl;
 	    }
+        altAls[altCount] = altAl;
 	altCount++;
 	}
     }
 *retAltAlCount = altCount;
 *retNeedLeftBase = needLeftBase;
 return altAls;
 }
 
 char *firstNCommaSep(struct slName *nameList, int n)
 /* Return a comma-separated string with the first n names in nameList. */
 {
 struct dyString *dy = dyStringNew(0);
 int i;
 struct slName *el;
 for (i=0, el=nameList;  i < 5 && el != NULL;  i++, el = el->next)