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);
 }