cabb4fa228289aadbaf6a1a16461646fcb7aa774
braney
  Tue Apr 10 18:55:38 2012 -0700
interim check-in for #6152.   Adding variant structure and setup that allows maintaing multiple variants in one gp.
diff --git src/hg/lib/variant.c src/hg/lib/variant.c
new file mode 100644
index 0000000..8719d12
--- /dev/null
+++ src/hg/lib/variant.c
@@ -0,0 +1,56 @@
+#include "common.h"
+#include "variant.h"
+
+struct variant *variantFromPgSnp(struct pgSnp *pgSnp)
+/* convert pgSnp record to variant record */
+{
+struct variant *variant;
+
+// this is probably the wrong way to do this.  Alleles in
+// variant should be their size in query bases
+int alleleLength = pgSnp->chromEnd - pgSnp->chromStart;
+
+// We have a new variant!
+AllocVar(variant);
+variant->chrom = cloneString(pgSnp->chrom);
+variant->chromStart = pgSnp->chromStart;
+variant->chromEnd = pgSnp->chromEnd;
+
+// get the alleles.
+char *nextAlleleString = pgSnp->name;
+int alleleNumber = 0;
+for( ; alleleNumber < pgSnp->alleleCount; alleleNumber++)
+    {
+    if (nextAlleleString == NULL)
+	errAbort("number of alleles in pgSnp doesn't match number in name");
+    
+    char *thisAlleleString = nextAlleleString;
+
+    // advance pointer to next variant string
+    // probably there's some kent routine to do this behind the curtain
+    nextAlleleString = strchr(thisAlleleString, '/');
+    if (nextAlleleString)	 // null out '/' and move to next char
+	{
+	*nextAlleleString = 0;
+	nextAlleleString++;
+	}
+
+    // this check probably not right, could be different per allele
+    int alleleStringLength = strlen(thisAlleleString);
+    if (alleleStringLength != alleleLength)
+	errAbort("length of allele number %d is %d, should be %d", 
+	    alleleNumber, alleleStringLength, alleleLength);
+
+    // we have a new allele!
+    struct allele *allele;
+    AllocVar(allele);
+    slAddHead(&variant->alleles, allele);
+    allele->length = alleleStringLength;
+    allele->sequence = cloneString(thisAlleleString);
+    }
+
+slReverse(&variant->alleles);
+
+return variant;
+}
+