352e4a03ec0521929355c33f57b113e3ce890afc max Mon Jul 1 01:25:22 2024 -0700 adding hub tracks to DNA color options, refs #34009 diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index 60bd1c8..c14e3c3 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -5158,50 +5158,61 @@ if (tdb->subtracks != NULL) return rFindUnderstandableTrack(db,tdb->subtracks); if (fbUnderstandTrack(db, tdb) && !dnaIgnoreTrack(tdb->table)) return tdb; else return NULL; } boolean forestHasUnderstandableTrack(char *db, struct trackDb *tdb) // TRUE if any leaf is usable in getting DNA. { return (rFindUnderstandableTrack(db, tdb) != NULL); } +struct trackDb* loadTracks() +/* load native tracks, cts, userPsl and track Hubs and return tdbList */ +{ +struct trackDb *tdbList = hTrackDb(database); +struct trackDb *ctdbList = tdbForCustomTracks(); +struct trackDb *utdbList = tdbForUserPsl(); + +struct grp *pGrpList = NULL; +struct trackDb *hubList = hubCollectTracks(database, &pGrpList); + +ctdbList = slCat(ctdbList, tdbList); +ctdbList = slCat(ctdbList, hubList); +tdbList = slCat(utdbList, ctdbList); +return tdbList; +} + void doGetDnaExtended1() /* Do extended case/color get DNA options. */ { -struct trackDb *tdbList = hTrackDb(database), *tdb; -struct trackDb *ctdbList = tdbForCustomTracks(); -struct trackDb *utdbList = tdbForUserPsl(); boolean revComp = cartUsualBoolean(cart, "hgSeq.revComp", FALSE); boolean maskRep = cartUsualBoolean(cart, "hgSeq.maskRepeats", FALSE); int padding5 = cartUsualInt(cart, "hgSeq.padding5", 0); int padding3 = cartUsualInt(cart, "hgSeq.padding3", 0); int lineWidth = cartUsualInt(cart, "lineWidth", 60); char *casing = cartUsualString(cart, "hgSeq.casing", ""); char *repMasking = cartUsualString(cart, "hgSeq.repMasking", ""); boolean caseUpper= FALSE; char *pos = NULL; - -ctdbList = slCat(ctdbList, tdbList); -tdbList = slCat(utdbList, ctdbList); +struct trackDb *tdbList = loadTracks(); cartWebStart(cart, database, "Extended DNA Case/Color"); if (NULL != (pos = stripCommas(cartOptionalString(cart, "getDnaPos")))) hgParseChromRange(database, pos, &seqName, &winStart, &winEnd); if (winEnd - winStart > 5000000) { printf("Please zoom in to 5 million bases or less to color the DNA"); return; } printf("

Extended DNA Case/Color Options

\n"); puts( "Use this page to highlight features in genomic DNA text. " "DNA covered by a particular track can be highlighted by " @@ -5248,30 +5259,31 @@ savePosInTextBox(seqName, winStart+1 - (revComp ? padding3 : padding5), winEnd + (revComp ? padding5 : padding3)); printf(" Reverse complement "); cgiMakeCheckBox("hgSeq.revComp", revComp); printf("
\n"); printf("Letters per line "); cgiMakeIntVar("lineWidth", lineWidth, 3); printf(" Default case: "); cgiMakeRadioButton("hgSeq.casing", "upper", caseUpper); printf(" Upper "); cgiMakeRadioButton("hgSeq.casing", "lower", !caseUpper); printf(" Lower "); cgiMakeButton("Submit", "Submit"); printf("
\n"); printf("\n"); printf("\n"); +struct trackDb *tdb; for (tdb = tdbList; tdb != NULL; tdb = tdb->next) { char *table = tdb->table; char *track = tdb->track; if ( sameString(USER_PSL_TRACK_NAME, table) || lookupCt(track) != NULL || ( tdbVisLimitedByAncestors(cart,tdb,TRUE,TRUE) != tvHide && forestHasUnderstandableTrack(database, tdb) ) ) { char *visString = cartUsualString(cart, track, hStringFromTv(tdb->visibility)); if (differentString(visString, "hide") && tdb->parent) { char *parentVisString = cartUsualString(cart, tdb->parentName, hStringFromTv(tdb->parent->visibility)); if (sameString("hide", parentVisString)) @@ -5799,60 +5811,59 @@ } return fbList; } void doGetDna3() /* Fetch DNA in extended color format */ { struct dnaSeq *seq; struct cfm *cfm; int i; boolean isRc = cartUsualBoolean(cart, "hgSeq.revComp", FALSE); boolean defaultUpper = sameString(cartString(cart, "hgSeq.casing"), "upper"); int winSize; int lineWidth = cartInt(cart, "lineWidth"); struct rgbColor *colors; -struct trackDb *tdbList = hTrackDb(database), *tdb; -struct trackDb *ctdbList = tdbForCustomTracks(); -struct trackDb *utdbList = tdbForUserPsl(); + +struct trackDb *tdbList = loadTracks(); + char *pos = NULL; Bits *uBits; /* Underline bits. */ Bits *iBits; /* Italic bits. */ Bits *bBits; /* Bold bits. */ if (NULL != (pos = stripCommas(cartOptionalString(cart, "getDnaPos")))) hgParseChromRange(database, pos, &seqName, &winStart, &winEnd); winSize = winEnd - winStart; uBits = bitAlloc(winSize); /* Underline bits. */ iBits = bitAlloc(winSize); /* Italic bits. */ bBits = bitAlloc(winSize); /* Bold bits. */ -ctdbList = slCat(ctdbList, tdbList); -tdbList = slCat(utdbList, ctdbList); - cartWebStart(cart, database, "Extended DNA Output"); printf("
");
 printf(">%s:%d-%d %s\n", seqName, winStart+1, winEnd,
        (isRc ? "(reverse complement)" : ""));
 seq = hDnaFromSeq(database, seqName, winStart, winEnd, dnaLower);
 if (isRc)
     reverseComplement(seq->dna, seq->size);
 if (defaultUpper)
     touppers(seq->dna);
 
 AllocArray(colors, winSize);
+
+struct trackDb* tdb;
 for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
     {
     char *track = tdb->track;
     char *table = tdb->table;
     struct featureBits *fbList = NULL, *fb;
     struct customTrack *ct = lookupCt(track);
     if (sameString(USER_PSL_TRACK_NAME, table)
     ||  ct != NULL
     ||  (   tdbVisLimitedByAncestors(cart,tdb,TRUE,TRUE) != tvHide
         && forestHasUnderstandableTrack(database, tdb) ) )
         {
         char buf[256];
         int r,g,b;
         /* to save a LOT of time, don't fetch track features unless some
          * coloring/formatting has been specified for them. */
Track
Name
Toggle
Case
Under-
line
BoldItalicRedGreenBlue