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