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