src/hg/lib/hVarSubst.c 1.4

1.4 2009/06/04 19:13:55 hiram
Properly look for ClosestToHome variables during substitution and add chain linearGap matrix variable recognition
Index: src/hg/lib/hVarSubst.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/hVarSubst.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -b -B -U 4 -r1.3 -r1.4
--- src/hg/lib/hVarSubst.c	12 Feb 2009 00:59:24 -0000	1.3
+++ src/hg/lib/hVarSubst.c	4 Jun 2009 19:13:55 -0000	1.4
@@ -44,12 +44,12 @@
 static char *lookupTrackDbSubVar(char *desc, struct trackDb *tdb, char *settingName, char *varName)
 /* get the specified track setting to substitute or die trying; more useful
  * message than trackDbRequiredSetting when doing substitution */
 {
-char *val = trackDbSetting(tdb, settingName);
+char *val = trackDbSettingClosestToHome(tdb, settingName);
 if (val == NULL)
-   errAbort("trackDb setting \"%s\" not found for variable substitution of \"$%s\" in %s",
-            settingName, varName, desc);
+   errAbort("trackDb (%s) setting \"%s\" not found for variable substitution of \"$%s\" in %s",
+            tdb->tableName, settingName, varName, desc);
 return val;
 }
 
 static char *lookupOtherDb(char *desc, struct trackDb *tdb, char *varName)
@@ -57,8 +57,38 @@
 {
 return lookupTrackDbSubVar(desc, tdb, "otherDb", varName);
 }
 
+static void insertLinearGapHtml(struct trackDb *tdb, char *linearGap,
+                             struct dyString *dest)
+/* Generate HTML table from chain linearGap variable */
+{
+if (sameWord("medium",linearGap))
+    {
+dyStringPrintf(dest, "<PRE>-linearGap=%s\n\n\
+tableSize    11\n\
+smallSize   111\n\
+position  1   2   3   11  111  2111  12111  32111   72111  152111  252111\n\
+qGap    350 425 450  600  900  2900  22900  57900  117900  217900  317900\n\
+tGap    350 425 450  600  900  2900  22900  57900  117900  217900  317900\n\
+bothGap 750 825 850 1000 1300  3300  23300  58300  118300  218300  318300\n\
+</PRE>", linearGap);
+    }
+else if (sameWord("loose", linearGap))
+    {
+dyStringPrintf(dest, "<PRE>-linearGap=%s\n\n\
+tablesize    11\n\
+smallSize   111\n\
+position  1   2   3   11  111  2111  12111  32111  72111  152111  252111\n\
+qGap    325 360 400  450  600  1100   3600   7600  15600   31600   56600\n\
+tGap    325 360 400  450  600  1100   3600   7600  15600   31600   56600\n\
+bothGap 625 660 700  750  900  1400   4000   8000  16000   32000   57000\n\
+</PRE>", linearGap);
+    }
+else
+    errAbort("Invalid chainLinearGap specified '%s', can only be 'medium' or 'loose'", linearGap);
+}
+
 static void insertMatrixHtml(struct trackDb *tdb, char *matrix,
                              char *matrixHeader, struct dyString *dest)
 /* Generate HTML table from matrix setting in trackDb. matrixHeader is
  * optional. */
@@ -99,16 +129,26 @@
     }
 dyStringAppend(dest, "</TABLE></BLOCKQUOTE></P>\n");
 }
 
+static void substLinearGap(struct trackDb *tdb, struct dyString *dest)
+/* Generate HTML table from matrix setting in trackDb.  Note: for
+ * compatibility, substitutes and empty string if matrix setting not found in
+ * trackDb. */
+{
+char *linearGap = trackDbSettingClosestToHome(tdb, "chainLinearGap");
+if (linearGap != NULL)
+    insertLinearGapHtml(tdb, linearGap, dest);
+}
+
 static void substMatrixHtml(struct trackDb *tdb, struct dyString *dest)
 /* Generate HTML table from matrix setting in trackDb.  Note: for
  * compatibility, substitutes and empty string if matrix setting not found in
  * trackDb. */
 {
-char *matrix = trackDbSetting(tdb, "matrix");
+char *matrix = trackDbSettingClosestToHome(tdb, "matrix");
 if (matrix != NULL)
-    insertMatrixHtml(tdb, matrix, trackDbSetting(tdb, "matrixHeader"), dest);
+    insertMatrixHtml(tdb, matrix, trackDbSettingClosestToHome(tdb, "matrixHeader"), dest);
 }
 
 static boolean isAbbrevScientificName(char *name)
 /* Return true if name looks like an abbreviated scientific name 
@@ -184,8 +224,10 @@
 /* substitute a variable value obtained from trackDb */
 {
 if (sameString(varName, "matrix"))
     substMatrixHtml(tdb, dest);
+else if (sameString(varName, "chainLinearGap"))
+    substLinearGap(tdb, dest);
 else
     dyStringAppend(dest, lookupTrackDbSubVar(desc, tdb, varName, varName));
 }