b0914531bd4294d1cf0a746601f080cd53d159a2 angie Sun Jun 27 20:17:40 2021 -0700 Add link from lineage to outbreak.info. Better labels for subtree links. diff --git src/hg/hgPhyloPlace/treeToAuspiceJson.c src/hg/hgPhyloPlace/treeToAuspiceJson.c index cc432d1..9896617 100644 --- src/hg/hgPhyloPlace/treeToAuspiceJson.c +++ src/hg/hgPhyloPlace/treeToAuspiceJson.c @@ -112,55 +112,75 @@ if (met && met->author) { jsonWriteObjectValue(jw, "author", met->author); // Note: Nextstrain adds paper_url and title when available; they also add author and use // a uniquified value (e.g. "author": "Wenjie Tan et al" / "value": "Wenjie Tan et al A") } *retNClade = isUserSample ? "uploaded sample" : (met && met->nClade) ? met->nClade : NULL; if (isNotEmpty(*retNClade)) jsonWriteObjectValue(jw, "Nextstrain_clade", *retNClade); *retGClade = isUserSample ? "uploaded sample" : (met && met->gClade) ? met->gClade : NULL; if (isNotEmpty(*retGClade)) jsonWriteObjectValue(jw, "GISAID_clade", *retGClade); *retLineage = isUserSample ? "uploaded sample" : (met && met->lineage) ? met->lineage : NULL; if (isNotEmpty(*retLineage)) - jsonWriteObjectValue(jw, "pango_lineage", *retLineage); + { + char lineageUrl[1024]; + if (sameString(*retLineage, "uploaded sample")) + safecpy(lineageUrl, sizeof lineageUrl, *retLineage); + else + safef(lineageUrl, sizeof lineageUrl, "https://outbreak.info/situation-reports?pango=%s", + *retLineage); + jsonWriteObjectValueUrl(jw, "pango_lineage", *retLineage, lineageUrl); + } if (met && met->epiId) jsonWriteObjectValue(jw, "gisaid_epi_isl", met->epiId); if (met && met->gbAcc) jsonWriteObjectValue(jw, "genbank_accession", met->gbAcc); if (met && met->country) jsonWriteObjectValue(jw, "country", met->country); if (met && met->division) jsonWriteObjectValue(jw, "division", met->division); if (met && met->location) jsonWriteObjectValue(jw, "location", met->location); if (met && met->countryExp) jsonWriteObjectValue(jw, "country_exposure", met->countryExp); if (met && met->divExp) jsonWriteObjectValue(jw, "division_exposure", met->divExp); if (met && met->origLab) jsonWriteObjectValue(jw, "originating_lab", met->origLab); if (met && met->subLab) jsonWriteObjectValue(jw, "submitting_lab", met->subLab); if (met && met->region) jsonWriteObjectValue(jw, "region", met->region); char *sampleUrl = (sampleUrls && name) ? hashFindVal(sampleUrls, name) : NULL; if (isNotEmpty(sampleUrl)) + { + char *p = strstr(sampleUrl, "subtreeAuspice"); + char *subtreeNum = p + strlen("subtreeAuspice"); + if (p && isdigit(*subtreeNum)) + { + int num = atoi(subtreeNum); + char subtreeLabel[1024]; + safef(subtreeLabel, sizeof subtreeLabel, "view subtree %d", num); + jsonWriteObjectValueUrl(jw, "subtree", subtreeLabel, sampleUrl); + } + else jsonWriteObjectValueUrl(jw, "subtree", sampleUrl, sampleUrl); } +} static void jsonWriteBranchNodeAttributes(struct jsonWrite *jw, char *userOrOld, char *nClade, char *gClade, char *lineage) /* Write elements of node_attrs for a branch. */ { if (userOrOld) jsonWriteObjectValue(jw, "userOrOld", userOrOld); if (nClade) jsonWriteObjectValue(jw, "Nextstrain_clade", nClade); if (gClade) jsonWriteObjectValue(jw, "GISAID_clade", gClade); if (lineage) jsonWriteObjectValue(jw, "pango_lineage", lineage); }