src/hg/makeDb/hgTrackDb/hgTrackDb.c 1.65

1.65 2010/05/07 05:04:12 kent
Code to get container multiWig to go.
Index: src/hg/makeDb/hgTrackDb/hgTrackDb.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/makeDb/hgTrackDb/hgTrackDb.c,v
retrieving revision 1.64
retrieving revision 1.65
diff -b -B -U 4 -r1.64 -r1.65
--- src/hg/makeDb/hgTrackDb/hgTrackDb.c	1 Mar 2010 01:04:54 -0000	1.64
+++ src/hg/makeDb/hgTrackDb/hgTrackDb.c	7 May 2010 05:04:12 -0000	1.65
@@ -29,14 +29,8 @@
   "usage:\n"
   "   hgTrackDb [options] org database trackDb_$(USER) trackDb.sql hgRoot\n"
   "\n"
   "Options:\n"
-  "  -visibility=vis.ra - A ra file used to override the initial visibility\n"
-  "   settings in trackDb.ra.  This is used to configure the initial setting\n"
-  "   for special-purpose browsers.  All visibility will be set to hide and\n"
-  "   then specific track are modified using the track and visibility fields\n"
-  "   in this file.\n"
-  "  -priority=priority.ra - A ra file used to override the priority settings\n"
   "  -hideFirst - Before applying vis.ra, set all visibilities to hide.\n"
   "  -strict - only include tables that exist (and complain about missing html files).\n"
   "  -raName=trackDb.ra - Specify a file name to use other than trackDb.ra\n"
   "   for the ra files.\n"
@@ -46,10 +40,8 @@
   );
 }
 
 static struct optionSpec optionSpecs[] = {
-    {"visibility", OPTION_STRING},
-    {"priority", OPTION_STRING},
     {"raName", OPTION_STRING},
     {"strict", OPTION_BOOLEAN},
     {"hideFirst", OPTION_BOOLEAN},
     {"release", OPTION_STRING},
@@ -90,9 +82,13 @@
 struct trackDb *tdbList = NULL;
 struct hashCookie cookie = hashFirst(tdHash);
 struct hashEl *hel;
 while ((hel = hashNext(&cookie)) != NULL)
-    slSafeAddHead(&tdbList, (struct trackDb*)hel->val);
+    {
+    struct trackDb *tdb = hel->val;
+    slSafeAddHead(&tdbList, tdb);
+    if (sameString("affyAllExonSuper", tdb->tableName)) uglyf("trackDbListFromHash of %s, tdb %p, tdb->grp=%s<BR>\n", tdb->tableName, tdb, tdb->grp); 
+    }
 return tdbList;
 }
 
 static struct trackDb *pruneStrict(struct trackDb *tdbList, char *db)
@@ -272,8 +268,9 @@
 /* load tracks, replacing higher-level ones with lower-level and
  * applying overrides*/
 while ((tdb = slPopHead(&tdbList)) != NULL)
     {
+    if (sameString("affyAllExonSuper", tdb->tableName)) uglyf("addVersionRa %s of %s, tdb %p, tdb->grp=%s<BR>\n", raName, tdb->tableName, tdb, tdb->grp); 
     if (tdb->overrides != NULL)
 	applyOverride(trackHash, tdb);
     else
 	hashStore(trackHash, tdb->tableName)->val = tdb;
@@ -501,8 +498,10 @@
 
 for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
     {
     struct slRef *child;
+    if (trackDbLocalSetting(tdb, "composite"))
+	{
     struct slRef *childList = trackDbListGetRefsToDescendantLeaves(
 	tdb->subtracks);
 
     verbose(2,"verifying %s child %p\n",tdb->tableName, childList);
@@ -518,8 +517,9 @@
 	assert(sgd != NULL);	
 	checkOneSubGroups(tdb->tableName, childTdb, sgd);
 	}
     }
+    }
 }
 
 static void checkSubGroups(struct trackDb *tdbList)
 /* Check integrity of subGroup clauses */
@@ -591,8 +591,9 @@
 if(countOfSortedContainers > 0)
     verbose(1,"Sorted %d containers\n",countOfSortedContainers);
 }
 
+#ifdef OLD
 static void inheritFieldsFromParents(struct trackDb *tdb, struct trackDb *parent)
 /* Inherit undefined fields (outside of settings) from parent. */
 {
 if (tdb->shortLabel == NULL)
@@ -613,20 +614,20 @@
     tdb->private = TRUE;
 if (parent->useScore)
     tdb->useScore = TRUE;
 }
+#endif /* OLD */
 
 
 
-static void rFillInFromParents(struct trackDb *parent, struct trackDb *tdbList)
-/* Fill in some possibly missing fields recursively. */
+static void rSetTrackDbFields(struct trackDb *tdbList)
+/* Recursively fill in non-settings fields from settings. */
 {
 struct trackDb *tdb;
 for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
     {
-    if (parent != NULL)
-	inheritFieldsFromParents(tdb, parent);
-    rFillInFromParents(tdb, tdb->subtracks);
+    trackDbFieldsFromSettings(tdb);
+    rSetTrackDbFields(tdb->subtracks);
     }
 }
 
 static void rPolish(struct trackDb *tdbList)
@@ -647,15 +648,16 @@
 for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
     {
     struct trackDb *parent = tdb->parent;
     if (parent != NULL)
+	{
+	trackDbFieldsFromSettings(parent);
 	trackDbPolish(parent);
     }
+    }
 }
 
-static struct trackDb *buildTrackDb(char *org, char *database, char *hgRoot,
-                                    char *visibilityRa, char *priorityRa,
-                                    boolean strict)
+static struct trackDb *buildTrackDb(char *org, char *database, char *hgRoot, boolean strict)
 /* Build trackDb objects from files. */
 {
 struct hash *trackHash = newHash(0);
 char rootDir[PATH_LEN], orgDir[PATH_LEN], asmDir[PATH_LEN];
@@ -672,15 +674,8 @@
 layerOnRa(strict, database, rootDir, trackHash, TRUE);
 layerOnRa(strict, database, orgDir, trackHash, FALSE);
 layerOnRa(strict, database, asmDir, trackHash, FALSE);
 
-#ifdef OLD
-if (visibilityRa != NULL)
-    trackDbOverrideVisbility(trackHash, visibilityRa, optionExists("hideFirst"));
-if (priorityRa != NULL)
-    trackDbOverridePriority(trackHash, priorityRa);
-#endif /* OLD */
-
 /* Represent hash as list */
 struct trackDb *tdbList = trackDbListFromHash(trackHash);
 
 /* Get rid of orphans with no parent of the correct release. */
@@ -696,10 +691,9 @@
 
 /* Set up parent/subtracks pointers. */
 tdbList = trackDbLinkUpGenerations(tdbList);
 
-/* Fill in missing info in fields (but not settings) from parents. */
-rFillInFromParents(NULL, tdbList);
+rSetTrackDbFields(tdbList);
 
 /* Fill in any additional missing info from defaults. */
 rPolish(tdbList);
 polishSupers(tdbList);
@@ -731,8 +725,9 @@
 	/* The supertrack may appear as a 'floating' parent for multiple tracks.
 	 * Only put it on the list once. */
 	if (!hashLookup(superTrackHash, parent->tableName))
 	    {
+	if (parent != NULL && sameString("affyAllExonSuper", parent->tableName)) uglyf("flatten from heavens of %s, tdb %p, parent %p, parent->subTracks %p, parent->grp=%s<BR>\n", parent->tableName, tdb, parent, parent->subtracks, parent->grp); 
 	    hashAdd(superTrackHash, parent->tableName, parent);
 	    slAddHead(&tdbList, parent);
 	    }
 	}
@@ -745,17 +740,16 @@
 return tdbList;
 }
 
 void hgTrackDb(char *org, char *database, char *trackDbName, char *sqlFile, char *hgRoot,
-               char *visibilityRa, char *priorityRa, boolean strict)
+               boolean strict)
 /* hgTrackDb - Create trackDb table from text files. */
 {
 struct trackDb *td;
 char tab[PATH_LEN];
 safef(tab, sizeof(tab), "%s.tab", trackDbName);
 
-struct trackDb *tdbList = buildTrackDb(org, database, hgRoot,
-                                      visibilityRa, priorityRa, strict);
+struct trackDb *tdbList = buildTrackDb(org, database, hgRoot, strict);
 tdbList = flatten(tdbList);
 slSort(&tdbList, trackDbCmp);
 verbose(1, "Loaded %d track descriptions total\n", slCount(tdbList));
 
@@ -763,8 +757,9 @@
     {
     FILE *f = mustOpen(tab, "w");
     for (td = tdbList; td != NULL; td = td->next)
         {
+	if (sameString("affyAllExonSuper", td->tableName)) uglyf("got %s befor hVarSubstTrackDb, grp=%s\n", td->tableName, td->grp);
         hVarSubstTrackDb(td, database);
         char *hold = td->html;
         td->html = "";
 	trackDbTabOut(td, f);
@@ -861,9 +856,7 @@
     errAbort("-raName value should be a file name without directories");
 release = optionVal("release", release);
 releaseBit = getReleaseBit(release);
 
-hgTrackDb(argv[1], argv[2], argv[3], argv[4], argv[5],
-          optionVal("visibility", NULL), optionVal("priority", NULL),
-          optionExists("strict"));
+hgTrackDb(argv[1], argv[2], argv[3], argv[4], argv[5], optionExists("strict"));
 return 0;
 }