491395482b817cfe82cbdef4dd7f8ee0723c1a4a angie Wed Mar 23 21:01:49 2011 -0700 Feature #2822, #2823 (VCF customFactory + track handler):Added a new track type, vcfTabix, with handlers in hgTracks and hgc and a customFactory. It is a new bigDataUrl type of track; the remote VCF file must be compressed and indexed by tabix, so like BAM a separate index file is required. If the VCF file has genotypes, then each sample's two haplotypes are graphed in a line, with one line per sample. Otherwise, alleles and counts (if available) are drawn using Belinda's pgSnp methods. The source code has to be compiled with USE_TABIX=1 (which is automatically set for us by common.mk when it finds the local installation) in order for the CGIs to recognize the track type. diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index 069157e..289e259 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -3875,30 +3875,34 @@ 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); } #ifdef USE_BAM else if (sameString(type, "bam")) doBamDetails(tdb, item); #endif // USE_BAM +#ifdef USE_TABIX + else if (sameString(type, "vcfTabix")) + doVcfTabixDetails(tdb, item); +#endif // USE_TABIX } 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 <path> <suffix>\".", tdb->track); printf("<BR><IMG SRC=\"%s/%s.%s\"><BR><BR>\n", bothWords[0], item, bothWords[1]); shouldBeTwo = chopLine(bigImagePath, bothWords); if (shouldBeTwo != 2) errAbort("bigItemImagePath setting for %s track incorrect. Needs to be \"itemImagePath <path> <suffix>\".", tdb->track); printf("<A HREF=\"%s/%s.%s\">Download Original Image</A><BR>\n", bothWords[0], item, bothWords[1]); } @@ -19640,30 +19644,34 @@ cartWebStart(cart, database, "Custom Track: %s", ct->tdb->shortLabel); itemName = skipLeadingSpaces(fileItem); printf("<H2>%s</H2>\n", ct->tdb->longLabel); if (sameWord(type, "array")) doExpRatio(ct->tdb, fileItem, ct); else if (sameWord(type, "encodePeak")) doEncodePeak(ct->tdb, ct); else if (sameWord(type, "bigWig")) bigWigCustomClick(ct->tdb); else if (sameWord(type, "bigBed")) bigBedCustomClick(ct->tdb); #ifdef USE_BAM else if (sameWord(type, "bam")) doBamDetails(ct->tdb, itemName); #endif//def USE_BAM +#ifdef USE_TABIX +else if (sameWord(type, "vcfTabix")) + doVcfTabixDetails(ct->tdb, itemName); +#endif//def USE_TABIX 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); } else genericWiggleClick(NULL, ct->tdb, fileItem, start); /* the NULL is for conn, don't need that for custom tracks */ } else if (ct->dbTrack && startsWith("bedGraph", ct->dbTrackType))