1d06b717ad1e8ebd6db725b4c086373661a9d54b
angie
  Mon Sep 18 15:56:53 2023 -0700
For genes with multiple exons (or ribosomal slippage), list the PSL blocks as 'segments' in the Nextstrain JSON instead of single start/end.

diff --git src/hg/hgPhyloPlace/treeToAuspiceJson.c src/hg/hgPhyloPlace/treeToAuspiceJson.c
index 6f4aeb8..96961ec 100644
--- src/hg/hgPhyloPlace/treeToAuspiceJson.c
+++ src/hg/hgPhyloPlace/treeToAuspiceJson.c
@@ -79,32 +79,48 @@
 jsonWritePair(jw, "22D (Omicron)", "#DB2823");
 jsonWritePair(jw, "uploaded sample", "#000000");
 jsonWriteListEnd(jw);
 auspiceMetaColoringCategoricalEnd(jw);
 }
 
 static void writeAuspiceMetaGenomeAnnotations(struct jsonWrite *jw, struct geneInfo *geneInfoList,
                                               uint genomeSize)
 /* Write out auspice genome annotations (protein-coding gene CDS and "nuc"). */
 {
 jsonWriteObjectStart(jw, "genome_annotations");
 struct geneInfo *gi;
 for (gi = geneInfoList;  gi != NULL;  gi = gi->next)
     {
     jsonWriteObjectStart(jw, gi->psl->qName);
+    if (gi->psl->blockCount > 1)
+        {
+        jsonWriteListStart(jw, "segments");
+        int i;
+        for (i = 0;  i < gi->psl->blockCount;  i++)
+            {
+            jsonWriteObjectStart(jw, NULL);
+            jsonWriteNumber(jw, "start", gi->psl->tStarts[i]+1);
+            jsonWriteNumber(jw, "end", gi->psl->tStarts[i] + gi->psl->blockSizes[i]);
+            jsonWriteObjectEnd(jw);
+            }
+        jsonWriteListEnd(jw);
+        }
+    else
+        {
         jsonWriteNumber(jw, "start", gi->psl->tStart+1);
         jsonWriteNumber(jw, "end", gi->psl->tEnd);
+        }
     jsonWriteString(jw, "strand", (pslOrientation(gi->psl) > 0) ? "+" : "-");
     jsonWriteString(jw, "type", "CDS");
     jsonWriteObjectEnd(jw);
     }
 jsonWriteObjectStart(jw, "nuc");
 jsonWriteNumber(jw, "start", 1);
 jsonWriteNumber(jw, "end", genomeSize);
 jsonWriteString(jw, "strand", "+");
 jsonWriteString(jw, "type", "source");
 jsonWriteObjectEnd(jw);
 jsonWriteObjectEnd(jw);
 }
 
 static char *getDefaultColor(struct slName *colorFields)
 /* Pick default color from available color fields from metadata.  Do not free returned string. */