83ccf1c6b15c91b83723894b882f3af1e340882b braney Sun Jun 1 16:37:23 2025 -0700 exon frames are in transcription strand order so if it's changed during quickLift we need to flip the order in the genePred diff --git src/hg/hgTracks/bigBedTrack.c src/hg/hgTracks/bigBedTrack.c index 681ea8be10a..97a741c2431 100644 --- src/hg/hgTracks/bigBedTrack.c +++ src/hg/hgTracks/bigBedTrack.c @@ -776,31 +776,38 @@ } continue; // lf will be NULL, but these items aren't "filtered", they're merged } } if (lf == NULL) { filtered++; continue; } if (lf->label == NULL) lf->label = bigBedMakeLabel(track->tdb, track->labelColumns, bb, chromName); if (startsWith("bigGenePred", track->tdb->type) || startsWith("genePred", track->tdb->type)) { - lf->original = genePredFromBedBigGenePred(chromName, bedCopy, bb); + // bedRow[5] has original strand in it, bedCopy has new strand. If they're different we want to reverse exonFrames + boolean changedStrand = FALSE; + if (quickLiftFile) + { + if (*bedRow[5] != *bedCopy->strand) + changedStrand = TRUE; + } + lf->original = genePredFromBedBigGenePred(chromName, bedCopy, bb, changedStrand); } if (startsWith("bigBed", track->tdb->type)) { // Clone bb so that we'll have access the to extra fields contents. This is used in // alternate display modes for bigBeds (so far just "heatmap", but more are likely to come). struct bigBedInterval *bbCopy = CloneVar(bb); bbCopy->rest = cloneMem(bbCopy->rest, strlen(bbCopy->rest)+1); bbCopy->next = NULL; lf->original = bbCopy; } if (lf->mouseOver == NULL) { if (mouseOverIdx > 0)