459b8273fa9eaafb16d8980567a7fcfa209fd4ef
max
  Wed Nov 23 09:30:30 2016 -0800
Adding VAI/DAI support for bigDataIndex, refs #18420

diff --git src/hg/hgVai/hgVai.c src/hg/hgVai/hgVai.c
index fbbd438..55616fb 100644
--- src/hg/hgVai/hgVai.c
+++ src/hg/hgVai/hgVai.c
@@ -1409,31 +1409,31 @@
 // First look in gratorsByName to see if this grator has already been constructed:
 if (tdb != NULL)
     {
     grator = hashFindVal(gratorsByName, tdb->table);
     if (retDescription)
 	*retDescription = cloneString(tdb->longLabel);
     }
 if (grator != NULL)
     {
     // Set its overlap behavior and we're done.
     grator->setOverlapRule(grator, overlapRule);
     return grator;
     }
 // If not in gratorsByName, then attempt to construct it here:
 if (fileName != NULL)
-    grator = hAnnoGratorFromBigFileUrl(fileName, assembly, ANNO_NO_LIMIT, overlapRule);
+    grator = hAnnoGratorFromBigFileUrl(fileName, NULL, assembly, ANNO_NO_LIMIT, overlapRule);
 else
     grator = hAnnoGratorFromTrackDb(assembly, tdb->table, tdb, chrom, ANNO_NO_LIMIT,
                                     NULL, overlapRule, NULL);
 if (grator != NULL)
     hashAdd(gratorsByName, tdb->table, grator);
 return grator;
 }
 
 char *tableNameFromSourceName(char *sourceName)
 /* Strip sourceName (file path or db.table) to just the basename or table name. */
 {
 char *tableName = cloneString(sourceName);
 char *p = strrchr(tableName, '/');
 if (p != NULL)
     {
@@ -1533,31 +1533,31 @@
 
 void addDbNsfpSeqChange(char *trackName, struct annoAssembly *assembly, struct hash *gratorsByName,
 			struct annoGrator **pGratorList)
 // If the user has selected dbNsfp* data, we also need the underlying dbNsfpSeqChange
 // data, so annoFormatVep can tell whether the variant and gpFx are consistent with the
 // variant and transcript that dbNsfp used to calculate scores.
 {
 //#*** Yet another place where we need metadata:
 char *seqChangeTable = "dbNsfpSeqChange";
 if (hashFindVal(gratorsByName, seqChangeTable) == NULL)
     {
     char *fileName = fileNameFromTable(seqChangeTable);
     if (fileName == NULL)
 	errAbort("'%s' requested, but I can't find fileName for %s",
 		 trackName, seqChangeTable);
-    struct annoGrator *grator = hAnnoGratorFromBigFileUrl(fileName, assembly, ANNO_NO_LIMIT,
+    struct annoGrator *grator = hAnnoGratorFromBigFileUrl(fileName, NULL, assembly, ANNO_NO_LIMIT,
                                                           agoNoConstraint);
     updateGratorList(grator, pGratorList);
     hashAdd(gratorsByName, seqChangeTable, grator);
     }
 }
 
 static struct dyString *dyInfo = NULL;
 
 struct hash *getTrackFilterVars(char *track)
 /* Return a hash of filter variable names (cart variable suffixes) to slName lists of values. */
 {
 char filterPrefix[512];
 safef(filterPrefix, sizeof(filterPrefix), "hgva_filter_%s_", track);
 struct slPair *filterVars = cartVarsWithPrefix(cart, filterPrefix), *var;
 int prefixLen = strlen(filterPrefix);
@@ -1665,31 +1665,31 @@
     if (grator != NULL)
 	// We already have this as a grator:
 	continue;
     enum PolyPhen2Subset subset = noSubset;
     char *description = NULL;
     char *column = NULL;
     boolean isReg = FALSE;
     if (startsWith("dbNsfp", trackName))
 	{
 	// trackName for PolyPhen2 has a suffix for subset -- strip it if we find it:
 	subset = stripSubsetFromTrackName(trackName);
 	description = dbNsfpDescFromTableName(trackName, subset, doHtml);
 	addDbNsfpSeqChange(trackName, assembly, gratorsByName, pGratorList);
 	char *fileName = fileNameFromTable(trackName);
 	if (fileName != NULL)
-	    grator = hAnnoGratorFromBigFileUrl(fileName, assembly, ANNO_NO_LIMIT, agoNoConstraint);
+	    grator = hAnnoGratorFromBigFileUrl(fileName, NULL, assembly, ANNO_NO_LIMIT, agoNoConstraint);
 	}
     else
 	{
 	struct trackDb *tdb = tdbForTrack(database, trackName, &fullTrackList);
 	if (tdb != NULL)
 	    {
 	    grator = hAnnoGratorFromTrackDb(assembly, tdb->table, tdb, chrom, ANNO_NO_LIMIT, NULL,
                                             agoNoConstraint, NULL);
 	    if (grator != NULL)
 		{
 		//#*** Need something more sophisticated but this works for our
 		//#*** limited selection of extra tracks:
 		if (asColumnFind(grator->streamer.asObj, "name") != NULL)
 		    column = "name";
 		addFiltersToGrator(grator, tdb);
@@ -2019,31 +2019,31 @@
 	    }
 	slSort(&bedList, bedCmp);
 	struct dnaSeq *txSeq = twoBitReadSeqFragLower(assembly->tbf, gpList->chrom,
 						      minSeqStart, maxSeqEnd);
 	struct bed4 *bed;
 	for (bed = bedList;  bed != NULL;  bed = bed->next)
 	    {
 	    writeMinimalVcfRowFromBed(f, bed, txSeq, minSeqStart);
 	    }
 	dnaSeqFree(&txSeq);
 	bed4FreeList(&bedList);
 	}
     geneStream->close(&geneStream);
     carefulClose(&f);
     }
-return annoStreamVcfNew(sampleFile, FALSE, assembly, maxOutRows);
+return annoStreamVcfNew(sampleFile, NULL, FALSE, assembly, maxOutRows);
 }
 
 static char *variantIdPath(struct annoAssembly *assembly, char *variantIds)
 /* Use the md5sum of the user's pasted/uploaded variants to make a hopefully
  * unique trash filename. */
 {
 char *md5sum = md5HexForString(variantIds);
 char *subDir = "hgv";
 mkdirTrashDirectory(subDir);
 struct dyString *dy = dyStringCreate("%s/%s/%s_%s.vcf", trashDir(), subDir, assembly->name, md5sum);
 return dyStringCannibalize(&dy);
 }
 
 static struct slName *hashListNames(struct hash *hash)
 /* Return a list of all element names in the hash (if any). */
@@ -2351,31 +2351,31 @@
 char *variantIds = cartString(cart, hgvaVariantIds);
 char *varFile = variantIdPath(assembly, variantIds);
 boolean forceRebuild = cartUsualBoolean(cart, "hgva_rebuildVariantIds", FALSE);
 if (! fileExists(varFile) || forceRebuild)
     {
     struct vcfRecord *varList = parseVariantIds(assembly, variantIds, pCommentList);
 //#*** If no variants were recognized, we should probably show main page with a warning.
     adjustRangeForVariants(varList, pChrom, pStart, pEnd);
     FILE *f = mustOpen(varFile, "w");
     writeMinimalVcfHeader(f, assembly->name);
     struct vcfRecord *var;
     for (var = varList;  var != NULL;  var = var->next)
 	writeMinimalVcfRow(f, var);
     carefulClose(&f);
     }
-return annoStreamVcfNew(varFile, FALSE, assembly, maxOutRows);
+return annoStreamVcfNew(varFile, NULL, FALSE, assembly, maxOutRows);
 }
 
 static struct trackDb *getVariantTrackDb(char *variantTrack)
 /* Get a tdb for the user's selected variant track, or warn and return NULL
  * (main page will be displayed) */
 {
 struct trackDb *varTdb = tdbForTrack(database, variantTrack, &fullTrackList);
 if (varTdb == NULL)
     {
     if (isHubTrack(variantTrack))
 	warn("Can't find hub track '%s'", variantTrack);
     else
 	warn("Can't find tdb for variant track '%s'", variantTrack);
     }
 else
@@ -2604,31 +2604,31 @@
     // so just for these, force search to be genome-wide.
     chrom = NULL;
     start = 0;
     end = 0;
     }
 else if (sameString(variantTrack, hgvaUseVariantIds))
     {
     // Override search position if cart position doesn't include all variants:
     primary = makeVariantIdStreamer(assembly, maxVarRows, &chrom, &start, &end, &commentList);
     primaryLongLabel = hgvaVariantIdsLabel;
     }
 else if (sameString(variantTrack, hgvaUseVariantFileOrUrl))
     {
     char *fileOrUrl = cartString(cart, hgvaVariantFileOrUrl);
     char *type = cartOptionalString(cart, hgvaVariantFileOrUrlType);
-    primary = hAnnoStreamerFromBigFileUrl(fileOrUrl, assembly, maxVarRows, type);
+    primary = hAnnoStreamerFromBigFileUrl(fileOrUrl, NULL, assembly, maxVarRows, type);
     primaryLongLabel = hgvaVariantFileOrUrlLabel;
     }
 else
     {
     struct trackDb *varTdb = getVariantTrackDb(variantTrack);
     if (varTdb == NULL)
 	{
         if (! isCommandLine)
             doUi();
 	return;
 	}
     primary = hAnnoStreamerFromTrackDb(assembly, varTdb->table, varTdb, chrom, maxVarRows, NULL);
     primaryLongLabel = varTdb->longLabel;
     }