b72a20927c99eeca3a0ef62593c53def29878bfe
max
  Mon Dec 5 18:33:18 2011 -0800
patches to t2g to make it work even if no article/sequence table exist
diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c
index bea1589..0f600f4 100644
--- src/hg/hgTracks/simpleTracks.c
+++ src/hg/hgTracks/simpleTracks.c
@@ -12145,40 +12145,56 @@
 for(s = str; *s; s++)
     {
     if(*s < 32 || !isalnum(*s))
         *s = ' ';
     }
 
 struct kxTok *kx = kxTokenize(str, FALSE);
 for( ; kx != NULL; kx = kx->next)
     {
     char *str = kx->string;
     toLowerN(str, strlen(str));
     hashAddInt(hash, str, 1);
     }
 }
 
+char* t2gArticleTable(struct track *tg)
+/* return the name of the t2g articleTable, either
+ * the value from the trackDb statement 'articleTable'
+ * or the default value: <trackName>Article */
+{
+char* articleTable = NULL;
+articleTable = trackDbSetting(tg->tdb, "articleTable");
+if (articleTable==NULL) {
+    char* buf = needMem(128);
+    sprintf(buf, "%sArticle", tg->track);
+    articleTable = buf;
+}
+return articleTable;
+}
+
 static void t2gLoadItems(struct track *tg)
 /* apply filter to t2g items */
 {
 loadGappedBed(tg);
 struct linkedFeatures *lf, *next, *newList = NULL;
 struct sqlConnection *conn = hAllocConn(database);
 
-char *articleTable = trackDbSetting(tg->tdb, "articleTable");
+char *articleTable = t2gArticleTable(tg);
 char *keyWords = cartOptionalString(cart, "t2gKeywords");
-if(articleTable != NULL && isNotEmpty(keyWords))
+
+if(isNotEmpty(keyWords))
     {
     for( lf = tg->items; lf != NULL; lf = next)
         {
         char query[512];
         struct sqlResult *sr;
         char **row;
         next = lf->next;
         lf->next = NULL;
 
         safef(query, sizeof(query), "select authors, title, citation, abstract from %s where displayId = '%s'", articleTable, lf->name);
         sr = sqlGetResult(conn, query);
         if ((row = sqlNextRow(sr)) != NULL)
             {
             struct hash *hash = newHash(0);
             boolean pass = TRUE;
@@ -12204,31 +12220,31 @@
         sqlFreeResult(&sr);
         }
     tg->items = newList;
     }
 hFreeConn(&conn);
 }
 
 static void t2gMapItem(struct track *tg, struct hvGfx *hvg, void *item,
 				char *itemName, char *mapItemName, int start, int end,
 				int x, int y, int width, int height)
 {
 if(!theImgBox || tg->limitedVis != tvDense || !tdbIsCompositeChild(tg->tdb))
     {
     char query[1024], title[4096];
     char *label = NULL;
-    char *articleTable = trackDbSetting(tg->tdb, "articleTable");
+    char *articleTable = t2gArticleTable(tg);
     if(!isEmpty(articleTable))
         {
         struct sqlConnection *conn = hAllocConn(database);
         safef(query, sizeof(query), "select title from %s where displayId = '%s'", articleTable, mapItemName);
         label = sqlQuickQuery(conn, query, title, sizeof(title));
         hFreeConn(&conn);
         }
     if(isEmpty(label))
         label = mapItemName;
     mapBoxHc(hvg, start, end, x, y, width, height, tg->track, mapItemName, label);
     }
 }
 
 static void t2gMethods(struct track *tg)
 {