src/hg/hgTracks/bamTrack.c 1.18

1.18 2009/11/30 19:26:51 angie
Change bam cart variable names and bamTrack code to use Tim's cart and trackDb ClosestToHome API.
Index: src/hg/hgTracks/bamTrack.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/bamTrack.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -b -B -U 4 -r1.17 -r1.18
--- src/hg/hgTracks/bamTrack.c	26 Nov 2009 00:35:38 -0000	1.17
+++ src/hg/hgTracks/bamTrack.c	30 Nov 2009 19:26:51 -0000	1.18
@@ -324,47 +324,47 @@
     ret = a->start - b->start;
 return ret;
 }
 
+static char *cartOrTdbClosest(struct trackDb *tdb, char *var, char *defaultVal)
+/* Combine cart and tdb closest-to-home search */
+// (shouldn't there already be a lib routine to do this?)
+{
+char *tdbDefault = trackDbSettingClosestToHomeOrDefault(tdb, var, defaultVal);
+boolean compositeLevel = isNameAtCompositeLevel(tdb, var);
+return cartUsualStringClosestToHome(cart, tdb, compositeLevel, var, tdbDefault);
+}
+
 void bamLoadItemsCore(struct track *tg, boolean isPaired)
 /* Load BAM data into tg->items item list, unless zoomed out so far
  * that the data would just end up in dense mode and be super-slow. */
 {
 char *seqNameForBam = chromName;
-char *stripPrefix = trackDbSetting(tg->tdb, "stripPrefix");
+char *stripPrefix = trackDbSettingClosestToHome(tg->tdb, "stripPrefix");
 if (stripPrefix && startsWith(stripPrefix, chromName))
     seqNameForBam = chromName + strlen(stripPrefix);
 char posForBam[512];
 safef(posForBam, sizeof(posForBam), "%s:%d-%d", seqNameForBam, winStart, winEnd);
 
 struct hash *pairHash = isPaired ? hashNew(18) : NULL;
-char cartVarName[1024];
-safef(cartVarName, sizeof(cartVarName), "%s_" BAM_MIN_ALI_QUAL, tg->tdb->tableName);
-int minAliQual = cartUsualInt(cart, cartVarName,
-	       atoi(trackDbSettingOrDefault(tg->tdb, BAM_MIN_ALI_QUAL, BAM_MIN_ALI_QUAL_DEFAULT)));
-safef(cartVarName, sizeof(cartVarName), "%s_" BAM_COLOR_MODE, tg->tdb->tableName);
-char *colorMode = cartUsualString(cart, cartVarName,
-		         trackDbSettingOrDefault(tg->tdb, BAM_COLOR_MODE, BAM_COLOR_MODE_DEFAULT));
-safef(cartVarName, sizeof(cartVarName), "%s_" BAM_GRAY_MODE, tg->tdb->tableName);
-char *grayMode = cartUsualString(cart, cartVarName,
-		         trackDbSettingOrDefault(tg->tdb, BAM_GRAY_MODE, BAM_GRAY_MODE_DEFAULT));
-safef(cartVarName, sizeof(cartVarName), "%s_" BAM_COLOR_TAG, tg->tdb->tableName);
-char *userTag = cartUsualString(cart, cartVarName,
-		         trackDbSettingOrDefault(tg->tdb, BAM_COLOR_TAG, BAM_COLOR_TAG_DEFAULT));
+int minAliQual = atoi(cartOrTdbClosest(tg->tdb, BAM_MIN_ALI_QUAL, BAM_MIN_ALI_QUAL_DEFAULT));
+char *colorMode = cartOrTdbClosest(tg->tdb, BAM_COLOR_MODE, BAM_COLOR_MODE_DEFAULT);
+char *grayMode = cartOrTdbClosest(tg->tdb, BAM_GRAY_MODE, BAM_GRAY_MODE_DEFAULT);
+char *userTag = cartOrTdbClosest(tg->tdb, BAM_COLOR_TAG, BAM_COLOR_TAG_DEFAULT);
 struct bamTrackData btd = {tg, pairHash, NULL, minAliQual, colorMode, grayMode, userTag};
 char *fileName;
 if (tg->customPt)
     {
-    fileName = trackDbSetting(tg->tdb, "bigDataUrl");
+    fileName = trackDbSettingClosestToHome(tg->tdb, "bigDataUrl");
     if (fileName == NULL)
 	errAbort("bamLoadItemsCore: can't find bigDataUrl for custom track %s", tg->mapName);
     }
 else
     fileName = bamFileNameFromTable(database, tg->mapName, seqNameForBam);
 bamFetch(fileName, posForBam, (isPaired ? addBamPaired : addBam), &btd);
 if (isPaired)
     {
-    char *setting = trackDbSettingOrDefault(tg->tdb, "pairSearchRange", "20000");
+    char *setting = trackDbSettingClosestToHomeOrDefault(tg->tdb, "pairSearchRange", "20000");
     int pairSearchRange = atoi(setting);
     if (pairSearchRange > 0 && hashNumEntries(pairHash) > 0)
 	{
 	// Search in a wider region, only for item names that are left over in pairHash
@@ -425,24 +425,19 @@
 int x1 = round((double)((int)lf->start-winStart)*scale) + xOff;
 int x2 = round((double)((int)lf->end-winStart)*scale) + xOff;
 int w = x2-x1;
 int midY = y + (heightPer>>1);
-char *exonArrowsDense = trackDbSetting(tg->tdb, "exonArrowsDense");
+char *exonArrowsDense = trackDbSettingClosestToHome(tg->tdb, "exonArrowsDense");
 boolean exonArrowsEvenWhenDense = (exonArrowsDense != NULL &&
 				   !sameWord(exonArrowsDense, "off"));
 boolean exonArrows = (tg->exonArrows &&
 		      (vis != tvDense || exonArrowsEvenWhenDense));
 struct dnaSeq *mrnaSeq = NULL;
 enum baseColorDrawOpt drawOpt = baseColorDrawOff;
 boolean indelShowDoubleInsert, indelShowQueryInsert, indelShowPolyA;
 struct psl *psl = NULL;
-char cartVarName[1024];
-safef(cartVarName, sizeof(cartVarName), "%s_" BAM_COLOR_MODE, tg->tdb->tableName);
-char *colorMode = cartUsualString(cart, cartVarName,
-		         trackDbSettingOrDefault(tg->tdb, BAM_COLOR_MODE, BAM_COLOR_MODE_DEFAULT));
-safef(cartVarName, sizeof(cartVarName), "%s_" BAM_GRAY_MODE, tg->tdb->tableName);
-char *grayMode = cartUsualString(cart, cartVarName,
-		         trackDbSettingOrDefault(tg->tdb, BAM_GRAY_MODE, BAM_GRAY_MODE_DEFAULT));
+char *colorMode = cartOrTdbClosest(tg->tdb, BAM_COLOR_MODE, BAM_COLOR_MODE_DEFAULT);
+char *grayMode = cartOrTdbClosest(tg->tdb, BAM_GRAY_MODE, BAM_GRAY_MODE_DEFAULT);
 bool baseQualMode = (sameString(colorMode, BAM_COLOR_MODE_GRAY) &&
 		     sameString(grayMode, BAM_GRAY_MODE_BASE_QUAL));
 if (vis != tvDense)
     {
@@ -502,9 +497,9 @@
 if (indelShowDoubleInsert)
     {
     int intronGap = 0;
     if (vis != tvDense)
-	intronGap = atoi(trackDbSettingOrDefault(tg->tdb, "intronGap", "0"));
+	intronGap = atoi(trackDbSettingClosestToHomeOrDefault(tg->tdb, "intronGap", "0"));
     lfDrawSpecialGaps(lf, intronGap, TRUE, 0, tg, hvg, xOff, y, scale, color, color, vis);
     }
 if (vis != tvDense)
     {
@@ -548,26 +543,22 @@
 void bamMethods(struct track *track)
 /* Methods for BAM alignment files. */
 {
 track->canPack = TRUE;
-char varName[1024];
-safef(varName, sizeof(varName), "%s_" BAM_PAIR_ENDS_BY_NAME, track->mapName);
-boolean isPaired = cartUsualBoolean(cart, varName,
-				    (trackDbSetting(track->tdb, BAM_PAIR_ENDS_BY_NAME) != NULL));
-safef(varName, sizeof(varName), "%s_" BAM_COLOR_MODE, track->tdb->tableName);
-char *colorMode = cartUsualString(cart, varName,
-		      trackDbSettingOrDefault(track->tdb, BAM_COLOR_MODE, BAM_COLOR_MODE_DEFAULT));
-safef(varName, sizeof(varName), "%s_" BAM_COLOR_TAG, track->tdb->tableName);
-char *userTag = cartUsualString(cart, varName,
-			trackDbSettingOrDefault(track->tdb, BAM_COLOR_TAG, BAM_COLOR_TAG_DEFAULT));
+boolean compositeLevel = isNameAtCompositeLevel(track->tdb, BAM_PAIR_ENDS_BY_NAME);
+boolean isPaired = cartUsualBooleanClosestToHome(cart, track->tdb, compositeLevel,
+			 BAM_PAIR_ENDS_BY_NAME,
+			 (trackDbSettingClosestToHome(track->tdb, BAM_PAIR_ENDS_BY_NAME) != NULL));
+char *colorMode = cartOrTdbClosest(track->tdb, BAM_COLOR_MODE, BAM_COLOR_MODE_DEFAULT);
+char *userTag = cartOrTdbClosest(track->tdb, BAM_COLOR_TAG, BAM_COLOR_TAG_DEFAULT);
 if (sameString(colorMode, BAM_COLOR_MODE_TAG) && userTag != NULL)
     {
     if (! (isalpha(userTag[0]) && isalnum(userTag[1]) && userTag[2] == '\0'))
 	{
 	warn("%s: BAM tag '%s' is not valid -- must be a letter followed by a letter or number.",
 	     track->tdb->shortLabel, htmlEncode(userTag));
-	safef(varName, sizeof(varName), "%s_" BAM_COLOR_TAG, track->tdb->tableName);
-	cartRemove(cart, varName);
+	compositeLevel = isNameAtCompositeLevel(track->tdb, BAM_COLOR_TAG);
+	cartRemoveVariableClosestToHome(cart, track->tdb, compositeLevel, BAM_COLOR_TAG);
 	}
     }
 
 if (isPaired)