6f726d2bcdb4fca993c06cf2181dce97b061702d kate Thu Feb 22 08:59:49 2018 -0800 Add support for custom tracks and hub tracks. refs #17512 diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index aad355f..942ea7a 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -794,119 +794,30 @@ { if (!tdb || !trackDbSetting(tdb, "noScoreFilter")) { char *scoreLabel = trackDbSettingOrDefault(tdb, "scoreLabel", "Score"); printf("%s: %d
\n", scoreLabel, bed->score); } } if (bedSize >= 6) { strand = bed->strand; } printPos(bed->chrom, bed->chromStart, bed->chromEnd, strand, TRUE, bed->name); } -void interactionPrintPos( struct bed *bed, int bedSize, struct trackDb *tdb) -/* Print first bedSize fields of a bed type structure in - * standard format. */ -{ - -if (bed->blockCount == 2) - { - printf("Intrachromosomal interaction:
\n"); - printf("Positions:
"); - printf("", - hgTracksPathAndSettings(), database, bed->chrom, - bed->chromStarts[0]+bed->chromStart, - bed->chromStarts[0]+bed->chromStart + bed->blockSizes[0]); - printf("%s:%d-%d \n", - bed->chrom, - bed->chromStarts[0]+bed->chromStart, - bed->chromStarts[0]+bed->chromStart + bed->blockSizes[0]); - printf("Size: %d \n", bed->blockSizes[0]); - printBand( bed->chrom, bed->chromStarts[0]+bed->chromStart, - bed->chromStarts[0]+bed->chromStart + bed->blockSizes[0], FALSE); - - //printf("
\n"); - printf("", - hgTracksPathAndSettings(), database, bed->chrom, - bed->chromStarts[1]+bed->chromStart, - bed->chromStarts[1]+bed->chromStart + bed->blockSizes[1]); - printf("%s:%d-%d \n", - bed->chrom, - bed->chromStarts[1]+bed->chromStart, - bed->chromStarts[1]+bed->chromStart + bed->blockSizes[1]); - printf("Size: %d \n", bed->blockSizes[0]); - printBand( bed->chrom, bed->chromStarts[0]+bed->chromStart, - bed->chromStarts[1]+bed->chromStart + bed->blockSizes[1], FALSE); - - printf("
\n"); - printf("Distance apart:\n"); - printLongWithCommas(stdout, - bed->chromStarts[1] - bed->chromStarts[0] + bed->blockSizes[0]); - - printf("bp
\n"); - } -else - { - printf("Interchromosomal interaction:
\n"); - printf("Positions:
"); - printf("", - hgTracksPathAndSettings(), database, bed->chrom, - bed->chromStarts[0]+bed->chromStart, - bed->chromStarts[0]+bed->chromStart + bed->blockSizes[0]); - printf("%s:%d-%d \n", - bed->chrom, - bed->chromStarts[0]+bed->chromStart, - bed->chromStarts[0]+bed->chromStart + bed->blockSizes[0]); - printf("Size: %d \n", bed->blockSizes[0]); - printBand( bed->chrom, bed->chromStarts[0]+bed->chromStart, - bed->chromStarts[0]+bed->chromStart + bed->blockSizes[0], FALSE); - - char buffer[10 * 1024], *otherChrom = buffer; - safef(buffer, sizeof buffer, "%s", bed->name); - char *ptr; - int otherStart, otherEnd; - - if (startsWith(bed->chrom, buffer)) - { - otherChrom = strchr(buffer,'-'); - otherChrom++; - } - - ptr = strchr(otherChrom,':'); - *ptr++ = 0; - otherStart = atoi(ptr); - ptr = strchr(ptr,'.'); - ptr++; - ptr++; - otherEnd = atoi(ptr); - //printf("
\n"); - printf("", - hgTracksPathAndSettings(), database, otherChrom, - otherStart, otherEnd); - printf("%s:%d-%d \n", - otherChrom, otherStart, otherEnd); - printf("Size: %d \n", otherEnd - otherStart); - printBand( otherChrom, otherStart, otherEnd, FALSE); - - printf("
\n"); - } -} - - void genericHeader(struct trackDb *tdb, char *item) /* Put up generic track info. */ { if (item != NULL && item[0] != 0) cartWebStart(cart, database, "%s (%s)", tdb->longLabel, item); else cartWebStart(cart, database, "%s", tdb->longLabel); } void printItemDetailsHtml(struct trackDb *tdb, char *itemName) /* if track has an itemDetailsHtml, retrieve and print the HTML */ { char *tableName = trackDbSetting(tdb, "itemDetailsHtmlTable"); if (tableName != NULL) { @@ -1701,35 +1612,30 @@ if (hti && *hti->nameField && differentString("name", hti->nameField)) sqlSafef(query, sizeof query, "select * from %s where %s = '%s' and chrom = '%s' and chromStart = %d", table, hti->nameField, item, seqName, start); else sqlSafef(query, sizeof query, "select * from %s where name = '%s' and chrom = '%s' and chromStart = %d", table, item, seqName, start); } sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { if (firstTime) firstTime = FALSE; else htmlHorizontalLine(); bed = bedLoadN(row+hasBin, bedSize); - if ((tdb->type != NULL) && sameString(tdb->type, "interaction")) - { - interactionPrintPos( bed, bedSize, tdb); - } - else bedPrintPos(bed, bedSize, tdb); extraFieldsPrint(tdb,sr,row,sqlCountColumns(sr)); // check for seq1 and seq2 in columns 7+8 (eg, pairedTagAlign) char *setting = trackDbSetting(tdb, BASE_COLOR_USE_SEQUENCE); if (bedSize == 6 && setting && sameString(setting, "seq1Seq2")) printf("
Sequence 1: %s
Sequence 2: %s
\n",row[hasBin+6], row[hasBin+7]); printCompareGenomeLinks(tdb,bed->name); } sqlFreeResult(&sr); getBedTopScorers(conn, tdb, table, item, start, bedSize); printItemDetailsHtml(tdb, item); } @@ -4325,31 +4231,31 @@ doBedDetail(tdb, NULL, item); } else if (sameString(type, "interaction") ) { int num = 12; genericBedClick(conn, tdb, item, start, num); } else if (startsWith("gvf", type)) { doGvf(tdb, item); } else if (sameString(type, "bam")) doBamDetails(tdb, item); else if ( startsWith("longTabix", type)) doLongTabix(tdb, item); - else if (sameWord("interact", type)) + else if (sameWord("interact", type) || sameWord("bigInteract", type)) doInteractDetails(tdb, item); } if (imagePath) { char *bigImagePath = trackDbSettingClosestToHome(tdb, ITEM_BIG_IMAGE_PATH); char *bothWords[2]; int shouldBeTwo = chopLine(imagePath, bothWords); if (shouldBeTwo != 2) errAbort("itemImagePath setting for %s track incorrect. Needs to be \"itemImagePath \".", tdb->track); printf("


\n", bothWords[0], item, bothWords[1]); shouldBeTwo = chopLine(bigImagePath, bothWords); if (shouldBeTwo != 2) errAbort("bigItemImagePath setting for %s track incorrect. Needs to be \"itemImagePath \".", tdb->track); printf("Download Original Image
\n", bothWords[0], item, bothWords[1]); } @@ -21140,30 +21046,32 @@ doEncodePeak(ct->tdb, ct, fileName); else if (sameWord(type, "bigNarrowPeak")) doBigEncodePeak(ct->tdb, NULL, item); else if (sameWord(type, "bigWig")) bigWigCustomClick(ct->tdb); else if (sameWord(type, "bigChain")) genericChainClick(NULL, ct->tdb, item, start, "seq"); else if (sameWord(type, "bigPsl")) genericBigPslClick(NULL, ct->tdb, item, start, end); else if (sameWord(type, "bigMaf")) genericMafClick(NULL, ct->tdb, item, start); else if (sameWord(type, "bigBed") || sameWord(type, "bigGenePred")) bigBedCustomClick(ct->tdb); else if (sameWord(type, "bigBarChart") || sameWord(type, "barChart")) doBarChartDetails(ct->tdb, item); +else if (sameWord(type, "bigInteract") || sameWord(type, "interact")) + doInteractDetails(ct->tdb, item); else if (sameWord(type, "bam")) doBamDetails(ct->tdb, itemName); else if (sameWord(type, "vcfTabix")) doVcfTabixDetails(ct->tdb, itemName); else if (sameWord(type, "vcf")) doVcfDetails(ct->tdb, itemName); else if (sameWord(type, "makeItems")) doMakeItemsDetails(ct, fileName); // fileName is first word, which is, go figure, id else if (ct->wiggle) { if (ct->dbTrack) { struct sqlConnection *conn = hAllocConn(CUSTOM_TRASH); genericWiggleClick(conn, ct->tdb, fileItem, start); hFreeConn(&conn);