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. */