Index: src/hg/instinct/lib/hgHeatmapLib.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/instinct/lib/hgHeatmapLib.c,v
retrieving revision 1.67
retrieving revision 1.68
diff -b -B -U 4 -r1.67 -r1.68
--- src/hg/instinct/lib/hgHeatmapLib.c	11 Mar 2010 19:38:48 -0000	1.67
+++ src/hg/instinct/lib/hgHeatmapLib.c	12 Apr 2010 17:16:10 -0000	1.68
@@ -8,8 +8,9 @@
 #include "hash.h"
 #include "hCommon.h"
 #include "hdb.h"
 #include "hui.h"
+#include "hgConfig.h"
 #include "hgHeatmapLib.h"
 #include "microarray.h"
 #include "ra.h"
 #include "heatmapUtility.h"
@@ -28,8 +29,27 @@
 char *metaStatTest[4];
 
 static char *heatMapDbProfile = "localDb";  // database profile to use
 
+char *raDbPath()
+/* return the comma-separated list of the track database from the config
+ * file. Freez when done */
+{
+char *raDb = cfgOptionEnv("HGDB_TRACKDB", "db.raDb");
+if(raDb == NULL)
+    errAbort("Please set the db.raDb field in the hg.conf config file.");
+return cloneString(raDb);
+}
+
+struct raDb *raDbLoad(struct sqlConnection *conn)
+{
+char *raDb = raDbPath();
+char query[256];
+safef(query, sizeof(query), "select * from %s", raDb);
+
+return raDbLoadByQuery(conn, query);
+}
+
 struct microarrayGroups *maGroupings(char *database, char *table)
 /* Get the settings from the microarrayGrouop.ra files and put them in a convenient struct. */
 {
 struct microarrayGroups *ret;
@@ -260,8 +280,63 @@
 
 return gh;
 }
 
+struct genoHeatmap *getHeatmapRaDb(struct sqlConnection *localConn, 
+				   struct sqlConnection *publicConn, 
+				   char *database, struct raDb *ra)
+{
+struct sqlConnection *conn = localConn;
+if (!sqlTableExists(localConn, ra->name))
+    { /* check if table exists on public database */
+    if (publicConn && sqlTableExists(publicConn, ra->name))
+	conn = publicConn;
+    else
+	return NULL;
+    }
+
+/* Connect to database on local host */
+struct genoHeatmap *gh = AllocVar(gh);
+
+gh->database      = database;
+gh->sampleList    = NULL;
+gh->sampleOrder   = NULL;
+gh->expIdOrder    = NULL;
+gh->tDb           = hMaybeTrackInfo(conn, ra->name);
+gh->custom        = FALSE;
+gh->anaResult     = NULL;
+gh->anaResultHash = NULL;
+
+/* Setting on heatmap description from datasets.ra file*/
+gh->name        = cloneString(ra->name);
+gh->shortLabel  = cloneString(ra->shortLabel);
+gh->longLabel   = cloneString(ra->longLabel);
+gh->dataType    = cloneString(ra->dataType);
+gh->accessTable = cloneString(ra->accessTable);
+gh->local_url   = cloneString(ra->local_url);
+gh->group       = cloneString(ra->groupName);
+gh->raFile      = cloneString(ra->raFile);
+gh->patDb       = cloneString(ra->patDb);
+gh->patTable    = cloneString(ra->patTable);
+gh->patField    = cloneString(ra->patField);
+gh->sampleField = cloneString(ra->sampleField);
+gh->probeTable  = cloneString(ra->aliasTable);
+gh->displayNameTable = cloneString(ra->displayNameTable);
+gh->platform    = cloneString(ra->platform);
+gh->expScale    = *(ra->expScale);
+gh->gainFull    = *(ra->gainFull);
+gh->gainSet     = *(ra->gainSet);
+gh->height      = *(ra->height);
+gh->profile     = cloneString(ra->profile);
+gh->expCount    = *(ra->expCount);
+if (!ra->security)
+    gh->private = TRUE;  // default to private tracks.
+else
+    gh->private = !sameString(ra->security, "public");
+
+return gh;
+}
+
 /* Deep copy of gh, clean up memory after return pointer */
 struct genoHeatmap *cloneHeatmap(struct genoHeatmap *gh)
 {
 if (!gh)

