src/hg/hgTracks/bamTrack.c 1.27

1.27 2010/02/26 06:54:57 angie
Added option to (not) display item names in bam tracks. Also, when coloring by alignment qual and not pairing, sort by score.
Index: src/hg/hgTracks/bamTrack.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/bamTrack.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -b -B -U 4 -r1.26 -r1.27
--- src/hg/hgTracks/bamTrack.c	24 Feb 2010 01:10:25 -0000	1.26
+++ src/hg/hgTracks/bamTrack.c	26 Feb 2010 06:54:57 -0000	1.27
@@ -329,8 +329,19 @@
     ret = a->start - b->start;
 return ret;
 }
 
+static int linkedFeaturesCmpScore(const void *va, const void *vb)
+/* Help sort linkedFeatures by score (descending), then by starting pos. */
+{
+const struct linkedFeatures *a = *((struct linkedFeatures **)va);
+const struct linkedFeatures *b = *((struct linkedFeatures **)vb);
+int ret = b->score - a->score;
+if (ret == 0)
+    ret = a->start - b->start;
+return ret;
+}
+
 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. */
 {
@@ -377,8 +388,11 @@
     if (isPaired)
 	slSort(&(tg->items), linkedFeaturesSeriesCmp);
     else if (sameString(colorMode, BAM_COLOR_MODE_STRAND))
 	slSort(&(tg->items), linkedFeaturesCmpOri);
+    else if (sameString(colorMode, BAM_COLOR_MODE_GRAY) &&
+	     sameString(grayMode, BAM_GRAY_MODE_ALI_QUAL))
+	slSort(&(tg->items), linkedFeaturesCmpScore);
     else
 	slSort(&(tg->items), linkedFeaturesCmpStart);
     if (slCount(tg->items) > MAX_ITEMS_FOR_MAPBOX)
 	tg->mapItem = dontMapItem;
@@ -525,8 +539,15 @@
     prevEnd = lf->end;
     }
 }
 
+static void dontDrawLeftLabels(struct track *tg, int seqStart, int seqEnd, struct hvGfx *hvg,
+			       int xOff, int yOff, int width, int height, boolean withCenterLabels,
+			       MgFont *font, Color color, enum trackVisibility vis)
+/* Allow left labels to be inhibited by tdb and/or cart. */
+{
+}
+
 
 void bamMethods(struct track *track)
 /* Methods for BAM alignment files. */
 {
@@ -540,8 +561,11 @@
 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 *tdbShowNames = trackDbSettingClosestToHome(track->tdb, BAM_SHOW_NAMES);
+boolean showNames = cartUsualBooleanClosestToHome(cart, track->tdb, compositeLevel,
+						  BAM_SHOW_NAMES, !sameOk(tdbShowNames, "off"));
 char *colorMode = cartOrTdbString(cart, track->tdb, BAM_COLOR_MODE, BAM_COLOR_MODE_DEFAULT);
 char *userTag = cartOrTdbString(cart, track->tdb, BAM_COLOR_TAG, BAM_COLOR_TAG_DEFAULT);
 if (sameString(colorMode, BAM_COLOR_MODE_TAG) && userTag != NULL)
     {
@@ -565,8 +589,14 @@
     linkedFeaturesMethods(track);
     track->loadItems = bamLoadItems;
     track->drawItemAt = bamDrawAt;
     }
+if (!showNames)
+    {
+    track->drawName = TRUE; // ironic, but this is how to suppress item labels in pack mode.
+    track->drawLeftLabels = dontDrawLeftLabels;
+    }
+
 track->nextItemButtonable = track->nextExonButtonable = FALSE;
 track->nextPrevItem = NULL;
 track->nextPrevExon = NULL;
 track->colorShades = shadesOfGray;