e1487d60d004ee8de24e6e1e7dfd12919104e19d braney Thu Mar 4 09:37:02 2021 -0800 allow use of blat custom track in DNA extra color/case options #23045 diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index 5fbfa43..380876f 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -4811,31 +4811,31 @@ } printf("

Note: repeat masking style from previous page will not apply to this page.\n"); if ((rtdb != NULL) && ((visString == NULL) || !sameString(visString, "hide"))) printf("Use the case/color options for the RepeatMasker track below.

\n"); else printf("Unhide the RepeatMasker track in the genome browser, then return to this page and use the case/color options for the RepeatMasker track below.

\n"); } cartSetInt(cart, "padding5", padding5); cartSetInt(cart, "padding3", padding3); if (sameString(casing, "upper")) caseUpper = TRUE; if (*casing != 0) cartSetString(cart, "hgSeq.casing", casing); -printf("

\n\n", hgcName()); +printf("\n\n", hgcName(), cartUsualString(cart, "formMethod", "POST")); cartSaveSession(cart); cgiMakeHiddenVar("g", "htcGetDna3"); if (NULL != (pos = stripCommas(cartOptionalString(cart, "getDnaPos")))) { hgParseChromRange(database, pos, &seqName, &winStart, &winEnd); } puts("Position "); 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: "); @@ -5435,30 +5435,43 @@ sqlSafef(query, sizeof(query), "select * from %s", ct->dbTableName); sr = hRangeQuery(conn, ct->dbTableName, seqName, winStart, winEnd, NULL, &rowOffset); while ((row = sqlNextRow(sr)) != NULL) { bed = bedLoadN(row+rowOffset, fieldCount); if (bf == NULL || bedFilterOne(bf, bed)) { struct bed *copy = cloneBed(bed); slAddHead(&ctBedList, copy); } } sqlFreeResult(&sr); hFreeConn(&conn); } + else if (sameString(ct->dbTrackType, "bigBed")) + { + struct lm *lm = lmInit(0); + struct bigBedInterval *bb, *bbList = bigBedIntervalQuery(ct->bbiFile, seqName, winStart, winEnd, 0, lm); + char *bedRow[32]; + char startBuf[16], endBuf[16]; + for (bb = bbList; bb != NULL; bb = bb->next) + { + bigBedIntervalToRow(bb, seqName, startBuf, endBuf, bedRow, ArraySize(bedRow)); + struct bed *bed = bedLoadN(bedRow, ct->bbiFile->definedFieldCount); + slAddHead(&ctBedList, bed); + } + } else { ctBedList = ct->bedList; } bedList2 = bedFilterListInRange(ctBedList, bf, seqName, winStart, winEnd); fbList = fbFromBed(database, track, hti, bedList2, winStart, winEnd, TRUE, FALSE); bedFreeList(&bedList2); if (!ct->bedList) bedFreeList(&ctBedList); } else { if (tdb->subtracks) @@ -25635,31 +25648,31 @@ char buf[4096]; char *twoBitDir; if (trackHubDatabase(db)) { struct trackHubGenome *genome = trackHubGetGenome(db); twoBitDir = genome->twoBitPath; } else { safef(buf, sizeof(buf), "/gbdb/%s", db); twoBitDir = hReplaceGbdbSeqDir(buf, db); safef(buf, sizeof(buf), "%s%s.2bit", twoBitDir, db); twoBitDir = buf; } -safef(cmdBuffer, sizeof(cmdBuffer), "loader/bedToBigBed -verbose=0 -udcDir=%s -extraIndex=name -sizesIs2Bit -tab -as=loader/bigPsl.as -type=bed9+16 %s %s %s", +safef(cmdBuffer, sizeof(cmdBuffer), "loader/bedToBigBed -verbose=0 -udcDir=%s -extraIndex=name -sizesIs2Bit -tab -as=loader/bigPsl.as -type=bed12+13 %s %s %s", udcDefaultDir(), bigPslFile, twoBitDir, outputBigBed); system(cmdBuffer); unlink(bigPslFile); } static void buildBigPsl(char *fileNames) /* Build a custom track with a bigPsl file out of blat results. * Bring up the bigPsl detail page with all the alignments. */ { char *trackName = cartString(cart, "trackName"); char *trackDescription = cartString(cart, "trackDescription"); char *pslName, *faName, *qName; parseSs(fileNames, &pslName, &faName, &qName); struct tempName bigBedTn;