814df69886d2dc7c791db10417901a9768931c88 angie Mon Jun 1 17:16:44 2015 -0700 Added support for bigGenePred to anno* libs for hgVai and hgIntegrator. While updating annoFormatVep.c to use column indices from autoSql instead of hardcoding genePred indices, I found that I had been using an incorrect index for strand anyway -- so I removed 3 lines of no-op code. refs #15439 diff --git src/hg/lib/hAnno.c src/hg/lib/hAnno.c index ec99764..62eb3e2 100644 --- src/hg/lib/hAnno.c +++ src/hg/lib/hAnno.c @@ -1,20 +1,21 @@ /* hAnno -- helpers for creating anno{Streamers,Grators,Formatters,Queries} */ #include "common.h" #include "hAnno.h" #include "basicBed.h" +#include "bigGenePred.h" #include "customTrack.h" #include "grp.h" #include "hdb.h" #include "hubConnect.h" #include "hui.h" #include "jksql.h" #include "pgSnp.h" #include "trackHub.h" #include "vcf.h" #include "annoGratorQuery.h" #include "annoGratorGpVar.h" #include "annoStreamBigBed.h" #include "annoStreamBigWig.h" #include "annoStreamDb.h" #include "annoStreamDbFactorSource.h" @@ -229,47 +230,58 @@ errAbort("Unrecognized bigData type %s of file or url '%s'", type, fileOrUrl); if (grator == NULL) grator = annoGratorNew(streamer); grator->setOverlapRule(grator, overlapRule); return grator; } struct annoGrator *hAnnoGratorFromTrackDb(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; +boolean primaryIsVariants = (primaryAsObj != NULL && + (asObjectsMatch(primaryAsObj, pgSnpAsObj()) || + asObjectsMatch(primaryAsObj, vcfAsObj()))); char *bigDataUrl = trackDbSetting(tdb, "bigDataUrl"); if (bigDataUrl != NULL) + { + if (primaryIsVariants && sameString("bigGenePred", tdb->type)) + { + struct annoStreamer *streamer = annoStreamBigBedNew(bigDataUrl, assembly, maxOutRows); + grator = annoGratorGpVarNew(streamer); + } + else grator = hAnnoGratorFromBigFileUrl(bigDataUrl, assembly, maxOutRows, overlapRule); + } else if (startsWithWord("wig", tdb->type)) grator = annoGrateWigDbNew(assembly->name, selTable, assembly, maxOutRows); else if (startsWithWord("bigWig", tdb->type)) { char *fileOrUrl = getBigDataFileName(assembly->name, tdb, tdb->table, chrom); grator = annoGrateBigWigNew(fileOrUrl, assembly); } else { struct annoStreamer *streamer = hAnnoStreamerFromTrackDb(assembly, selTable, tdb, chrom, maxOutRows); - if (primaryAsObj != NULL && - (asObjectsMatch(primaryAsObj, pgSnpAsObj()) || asObjectsMatch(primaryAsObj, vcfAsObj())) - && asColumnNamesMatchFirstN(streamer->asObj, genePredAsObj(), 10)) + if (primaryIsVariants && + (asColumnNamesMatchFirstN(streamer->asObj, genePredAsObj(), 10) || + asObjectsMatch(streamer->asObj, bigGenePredAsObj()))) grator = annoGratorGpVarNew(streamer); else grator = annoGratorNew(streamer); } grator->setOverlapRule(grator, overlapRule); return grator; } static struct asObject *getAutoSqlForType(char *db, char *chrom, struct trackDb *tdb) /* Return an asObject for tdb->type if recognized as a hub or custom track type. */ { struct asObject * asObj = NULL; if (startsWith("wig", tdb->type) || startsWith("bigWig", tdb->type)) asObj = annoStreamBigWigAsObject(); else if (startsWith("vcf", tdb->type))