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