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