6697f821c6b91c2e0c069bf6b0283adc99eb0201
angie
  Sat Jun 8 15:56:04 2013 -0700
Added support for remaining dbNSFP sources; added longLabels to VEP output header lines. refs #6152
diff --git src/hg/hgVai/libifyMe.c src/hg/hgVai/libifyMe.c
index a3a4920..6d6dd04 100644
--- src/hg/hgVai/libifyMe.c
+++ src/hg/hgVai/libifyMe.c
@@ -392,46 +392,71 @@
 else
     {
     struct sqlConnection *conn = hAllocConn(dataDb);
     char maybeSplitTable[1024];
     if (sqlTableExists(conn, dbTable))
 	safecpy(maybeSplitTable, sizeof(maybeSplitTable), dbTable);
     else
 	safef(maybeSplitTable, sizeof(maybeSplitTable), "%s_%s", chrom, dbTable);
     hFreeConn(&conn);
     struct asObject *asObj = getAutoSqlForTable(db, dataDb, maybeSplitTable, tdb);
     streamer = annoStreamDbNew(dataDb, maybeSplitTable, assembly, asObj, maxOutRows);
     }
 return streamer;
 }
 
-struct annoGrator *gratorFromTrack(struct annoAssembly *assembly, char *selTable,
+struct annoGrator *gratorFromBigDataFileOrUrl(char *fileOrUrl, struct annoAssembly *assembly,
+					      int maxOutRows, enum annoGratorOverlap overlapRule)
+/* Determine what kind of big data file/url we have and make streamer & grator for it. */
+{
+struct annoStreamer *streamer = NULL;
+struct annoGrator *grator = NULL;
+if (endsWith(fileOrUrl, ".bb"))
+    streamer = annoStreamBigBedNew(fileOrUrl, assembly, maxOutRows);
+else if (endsWith(fileOrUrl, ".vcf.gz"))
+    streamer = annoStreamVcfNew(fileOrUrl, TRUE, assembly, maxOutRows);
+else if (endsWith(fileOrUrl, ".bw"))
+    grator = annoGrateBigWigNew(fileOrUrl, assembly);
+else
+    errAbort("Can't tell bigData type of file or url '%s'", fileOrUrl);
+if (grator == NULL)
+    grator = annoGratorNew(streamer);
+grator->setOverlapRule(grator, overlapRule);
+return grator;
+}
+
+struct annoGrator *gratorFromTrackDb(struct annoAssembly *assembly, char *selTable,
 				   struct trackDb *tdb, char *chrom, int maxOutRows,
 				   struct asObject *primaryAsObj,
 				   enum annoGratorOverlap overlapRule)
 /* Figure out the source and type of data, make an annoStreamer & wrap in annoGrator.
  * If not NULL, primaryAsObj is used to determine whether we can make an annoGratorGpVar. */
 {
 struct annoGrator *grator = NULL;
 char *dataDb = assembly->name, *dbTable = selTable;
 if (isCustomTrack(selTable))
     {
     dataDb = CUSTOM_TRASH;
     dbTable = trackDbSetting(tdb, "dbTableName");
-    //#*** Catch custom bigBed & bigWig here.
     if (dbTable == NULL)
-	errAbort("Can't find dbTableName for custom track %s", selTable);
+	{
+	char *bigDataUrl = trackDbSetting(tdb, "bigDataUrl");
+	if (bigDataUrl != NULL)
+	    grator = gratorFromBigDataFileOrUrl(bigDataUrl, assembly, maxOutRows, overlapRule);
+	else
+	    errAbort("Can't find dbTableName or bigDataUrl for custom track %s", selTable);
+	}
     }
 if (startsWith("wig", tdb->type))
     {
     grator = annoGrateWigDbNew(dataDb, dbTable, assembly, maxOutRows);
     }
 else
     {
     struct annoStreamer *streamer = streamerFromTrack(assembly, dbTable, tdb, chrom, maxOutRows);
     if (primaryAsObj != NULL &&
 	(asObjectsMatch(primaryAsObj, pgSnpAsObj()) || asObjectsMatch(primaryAsObj, vcfAsObj()))
 	&& asObjectsMatchFirstN(streamer->asObj, genePredAsObj(), 10))
 	grator = annoGratorGpVarNew(streamer);
     else
 	grator = annoGratorNew(streamer);
     }