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);