src/hg/oneShot/tdbRewriteViewsToSubtracks/tdbRewriteViewsToSubtracks.c 1.4

1.4 2009/12/14 03:14:06 kent
Tightening up identification of composite tracks with views. Adding in some things from branch.
Index: src/hg/oneShot/tdbRewriteViewsToSubtracks/tdbRewriteViewsToSubtracks.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/oneShot/tdbRewriteViewsToSubtracks/tdbRewriteViewsToSubtracks.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -b -B -U 4 -r1.3 -r1.4
--- src/hg/oneShot/tdbRewriteViewsToSubtracks/tdbRewriteViewsToSubtracks.c	10 Dec 2009 04:38:10 -0000	1.3
+++ src/hg/oneShot/tdbRewriteViewsToSubtracks/tdbRewriteViewsToSubtracks.c	14 Dec 2009 03:14:06 -0000	1.4
@@ -479,8 +479,15 @@
 	}
     }
 }
 
+
+boolean shouldBeParentOfView(struct raRecord *r)
+/* Return TRUE if its a record that we'll insert views underneath */
+{
+return findViewSubGroup(r) != NULL;
+}
+
 void rewriteSettingsByViewComplex(struct raFile *file, struct raRecord *complexRecord, FILE *f,	
 	struct lm *lm)
 /* Rewrite track that has settings by view */
 {
@@ -573,16 +580,25 @@
     char *shortLabel = lmCloneString(lm, view->val);
     subChar(shortLabel, '_', ' ');
     fprintf(f, "    shortLabel %s\n", shortLabel);
     fprintf(f, "    view %s\n", view->name);
+    char *vis = NULL;
     if (visHash != NULL)
-        {
-	char *vis = hashFindVal(visHash, view->name);
+         vis = hashFindVal(visHash, view->name);
 	if (vis != NULL)
 	    {
-	    fprintf(f, "    visibility %s\n", vis);
-	    fprintf(f, "    subTrack %s\n", complexRecord->key);
+	int len = strlen(vis);
+	boolean gotPlus = (lastChar(vis) == '+');
+	if (gotPlus)
+	    len -= 1;
+	char visOnly[len+1];
+	memcpy(visOnly, vis, len);
+	visOnly[len] = 0;
+	fprintf(f, "    visibility %s\n", visOnly);
+	if (gotPlus)
+	    fprintf(f, "    viewUi on\n");
 	    }
+    fprintf(f, "    subTrack %s\n", complexRecord->key);
 	struct slPair *settingList = hashFindVal(settingsHash, view->name);
 	struct slPair *setting;
 	for (setting = settingList; setting != NULL; setting = setting->next)
 	    fprintf(f, "    %s %s\n", setting->name, (char*)setting->val);
@@ -611,25 +627,23 @@
 		    }
 		}
 	    }
 	}
-    }
 }
 
 void rewriteTrack(struct raLevel *level, struct raFile *file, 
 	struct raRecord *r, FILE *f, struct lm *lm)
 /* Write one track record.  */
 {
 struct raRecord *recordInParentFile = findRecordInParentFileLevel(level, r);
-struct raTag *settingsByViewTag = raRecordFindTag(r, "settingsByView");
 struct raTag *subTrack = raRecordFindTag(r, "subTrack");
 
-if (settingsByViewTag)
+if (shouldBeParentOfView(r))
     {
     if (recordInParentFile)
         recordAbort(r, "Can't handle settingsByViews with records in parent file levels");
     /* We are the parent. */
-    fprintf(f, "# Rewriting parent with settingsByView %s\n", r->key);
+    fprintf(f, "# Rewriting parent with subGroup view %s\n", r->key);
     rewriteSettingsByViewComplex(file, r, f, lm);
     }
 else if (subTrack)
     {
@@ -637,15 +651,14 @@
     	lmCloneFirstWord(lm, subTrack->val),
     	findRelease(r, level));
     if (rParent == NULL)
         recordAbort(r, "Couldn't find rParent track %s, subTrack %s.", r->key, subTrack->val);
-    settingsByViewTag = raRecordFindTag(rParent, "settingsByView");
-    if (settingsByViewTag)
+    if (shouldBeParentOfView(rParent))
         {
 	if (rParent->file != r->file)
 	    recordAbort(r, "complex parent %s not in same file as subTrack %s", 
 	    	rParent->key, r->key);
-	fprintf(f, "# Omitting child (%s) of parent (%s) with settingsByView\n", 
+	fprintf(f, "# Omitting child (%s) of parent (%s) with views\n", 
 		r->key, rParent->key);
 	}
     else
         {