da3772f3615ae3aa407af6aa2215a1b2ff480183
angie
  Mon Apr 29 13:40:41 2024 -0700
If configured, use nextclade to align sequences (better for more diverged viruses like influenza).  Also fix some buttons that the last change broke.

diff --git src/hg/hgPhyloPlace/phyloPlace.h src/hg/hgPhyloPlace/phyloPlace.h
index d09bfd3..9578617 100644
--- src/hg/hgPhyloPlace/phyloPlace.h
+++ src/hg/hgPhyloPlace/phyloPlace.h
@@ -1,25 +1,26 @@
 /* Place SARS-CoV-2 sequences in phylogenetic tree using add_missing_samples program. */
 
 #ifndef _PHYLO_PLACE_H_
 #define _PHYLO_PLACE_H_
 
 #include "common.h"
 #include "cart.h"
 #include "dnaseq.h"
 #include "hash.h"
 #include "linefile.h"
+#include "memgfx.h"
 #include "parsimonyProto.h"
 #include "phyloTree.h"
 #include "seqWindow.h"
 #include "trackLayout.h"
 #include "trashDir.h"
 
 #define PHYLOPLACE_DATA_DIR "hgPhyloPlaceData"
 
 // Allow users to upload a lot of sequences, but put limits on how much detail we'll show and
 // how many custom tracks we'll create.
 #define MAX_SUBTREE_SIZE 5000
 #define MAX_MICROBETRACE_SUBTREE_SIZE 500
 #define MAX_SUBTREE_BUTTONS 5
 #define MAX_SEQ_DETAILS 1000
 #define MAX_SUBTREE_CTS 10
@@ -233,30 +234,33 @@
 /* Return cloned setting value if found in hgPhyloPlaceData/<org>/organism.ra or
  * old-style hgPhyloPlaceData/<org>/config.ra, or NULL if not found. */
 
 char *phyloPlaceOrgSettingPath(char *org, char *settingName);
 /* Return cgi-bin-relative path to a file named by a setting for org, or NULL if not found. */
 
 char *phyloPlaceRefSetting(char *org, char *ref, char *settingName);
 /* Return cloned setting value if found in hgPhyloPlaceData/<org>/<ref>/reference.ra or
  * old-style hgPhyloPlaceData/<ref>/config.ra, or NULL if not found. */
 
 char *phyloPlaceRefSettingPath(char *org, char *ref, char *settingName);
 /* Return cgi-bin-relative path to a file named by a setting from
  * hgPhyloPlaceData/<org>/<ref>/reference.ra or old-style hgPhyloPlaceData/<ref>/config.ra,
  * or NULL if not found. */
 
+char *getNextcladePath();
+/* Return hgPhyloPlaceData/nextclade if it exists, else errAbort. Do not free the returned value. */
+
 struct treeChoices *loadTreeChoices(char *org, char *db);
 /* If config specifies a treeChoices file, load it up, else return NULL. */
 
 boolean isInternalNodeName(char *nodeName, int minNewNode);
 /* Return TRUE if nodeName looks like an internal node ID from the protobuf tree, i.e. is numeric
  * or <USHER_NODE_PREFIX>_<number> and, if minNewNode > 0, number is less than minNewNode. */
 
 void reportTiming(int *pStartTime, char *message);
 /* Print out a report to stderr of how much time something took. */
 
 boolean hgPhyloPlaceEnabled();
 /* Return TRUE if hgPhyloPlace is enabled in hg.conf and db wuhCor1 exists. */
 
 boolean phyloPlaceSamples(struct lineFile *lf, char *db, char *refName, char *defaultProtobuf,
                           boolean doMeasureTiming, int subtreeSize, struct trackLayout *tl,