src/hg/hgTracks/bedTrack.c 1.11

1.11 2009/05/24 17:00:55 mikep
simplify code and add warning about assuming seq1,seq2 are in row[6] and row[7] respectively
Index: src/hg/hgTracks/bedTrack.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/bedTrack.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -b -B -U 4 -r1.10 -r1.11
--- src/hg/hgTracks/bedTrack.c	24 May 2009 09:10:38 -0000	1.10
+++ src/hg/hgTracks/bedTrack.c	24 May 2009 17:00:55 -0000	1.11
@@ -38,9 +38,12 @@
 
 struct bed *bedLoadPairedTagAlign(char **row)
 /* Load first six fields of bed. 
  * Add ~seq1~seq2 to end of name
- * Then remove the sequence to extra field when we convert to linkedFeature */
+ * Then remove the sequence to extra field when we convert to linkedFeature.
+ * Assumes seq1 and seq2 are in row[6] and row[7], as they would be with a 
+ * pairedTagAlign type (hg/lib/encode/pairedTagAlign.as). It would be good to be
+ * able to check these columns exist but we dont have the sqlResult here. */
 {
 char buf[1024];
 struct bed *ret = bedLoad6(row);
 safef(buf, sizeof(buf), "%s%c%s%c%s", ret->name, SEQ_DELIM, row[6], SEQ_DELIM, row[7]);
@@ -75,8 +78,10 @@
 else
     loader = bedLoad6;
 
 // pairedTagAlign loader is required for base coloring using sequence from seq1 & seq2
+// after removing optional bin column, this loader assumes seq1 and seq2 are in
+// row[6] and row[7] respectively of the sql result.
 if ((setting = trackDbSetting(tg->tdb, BASE_COLOR_USE_SEQUENCE)) 
 	&& sameString(setting, "seq1Seq2"))
     loader = bedLoadPairedTagAlign;
 
@@ -647,12 +652,16 @@
 tg->labelNextPrevItem = linkedFeaturesLabelNextPrevItem;
 tg->freeItems = freeSimpleBed;
 }
 
-void addSimpleFeatures(struct simpleFeature **pSfList, int start, int end, int qStart, int stepSize)
+void addSimpleFeatures(struct simpleFeature **pSfList, int start, int end, int qStart, boolean  everyBase)
+/* Add simple features from start to end to the list. 
+ * qStart is the offset in the query.
+ * If everyBase is TRUE then add a simpleFeature for every base in the start,end region */
 {
 int s;
 struct simpleFeature *sf;
+int stepSize = everyBase ? 1 : end - start;
 for (s = start ; s < end ; s += stepSize)
     {
     AllocVar(sf);
     sf->start = s;
@@ -674,9 +683,8 @@
  *  and treat bed as 2-exon bed.
  */
 {
 struct linkedFeatures *lf = NULL;
-int stepSize;
 if (b)
     {
     AllocVar(lf);
     lf->start = lf->tallStart = b->chromStart;
@@ -702,17 +710,14 @@
 	struct dyString *d = dyStringNew(l1+l2+1);
 	dyStringAppend(d, seq1);
 	dyStringAppend(d, seq2);
 	lf->extra = newDnaSeq(dyStringCannibalize(&d), l1+l2, lf->name);
-	stepSize = everyBase ? 1 : l1;
-	addSimpleFeatures(&lf->components, lf->start, lf->start + l1, 0, stepSize);
-	stepSize = everyBase ? 1 : l2;
-	addSimpleFeatures(&lf->components, lf->end - l2, lf->end, l1, stepSize);
+	addSimpleFeatures(&lf->components, lf->start, lf->start + l1, 0, everyBase);
+	addSimpleFeatures(&lf->components, lf->end - l2, lf->end, l1, everyBase);
 	}
     else
 	{
-	stepSize = everyBase ? 1 : lf->end - lf->start;
-	addSimpleFeatures(&lf->components, lf->start, lf->end, 0, stepSize);
+	addSimpleFeatures(&lf->components, lf->start, lf->end, 0, everyBase);
 	}
     slReverse(&lf->components);
     if (bedFields > 3)
 	safecpy(lf->name, sizeof(lf->name), b->name);