59087e52f3bfa2b6c917e932e0c151813931c497 angie Tue Jul 1 14:09:01 2014 -0700 Small bugfix: when reference allele had a padding base but alt allelewas symbolic, the first char was trimmed from the symbolic allele too, oops. diff --git src/lib/vcf.c src/lib/vcf.c index 09950ae..9e79390 100644 --- src/lib/vcf.c +++ src/lib/vcf.c @@ -1259,32 +1259,33 @@ * Return dy->string for convenience. */ { // VCF reference allele gets its own column: char *refAllele = words[3]; char *altAlleles = words[4]; // Make a vcfRecord-like allele array (ref in [0], alts after) so we can check for padding base: int alCount = 1 + countChars(altAlleles, ',') + 1; char *alleles[alCount]; alleles[0] = refAllele; char altAlCopy[strlen(altAlleles)+1]; safecpy(altAlCopy, sizeof(altAlCopy), altAlleles); chopByChar(altAlCopy, ',', &(alleles[1]), alCount-1); int i; if (allelesHavePaddingBase(alleles, alCount)) { - // Skip padding base: + // Skip padding base (unless we have a symbolic allele): for (i = 0; i < alCount; i++) + if (isAllNt(alleles[i], strlen(alleles[i]))) alleles[i]++; } // Having dealt with left padding base, now look for identical bases on the right: int trimmedBases = countIdenticalBasesRight(alleles, alCount); // Build a /-separated allele string, trimming bases on the right if necessary: dyStringClear(dy); for (i = 0; i < alCount; i++) { if (i > 0) dyStringAppendC(dy, '/'); char *allele = alleles[i]; if (allele[trimmedBases] == '\0') dyStringAppendC(dy, '-'); else dyStringAppendN(dy, allele, strlen(allele)-trimmedBases);