7f98bf75bd712a44b8ed9ededdd10e0f387cd35a
angie
  Thu Aug 13 10:31:58 2015 -0700
Moved averaging of wiggle values back from annoFormatTab to annoGrateWig,
so that it can be done properly across multiple regions with data.
A user was trying to get average GC over 1MB regions, but averages of
smaller subregions were returned instead.
refs #15834

diff --git src/hg/lib/hAnno.c src/hg/lib/hAnno.c
index 89eef13..0f56718 100644
--- src/hg/lib/hAnno.c
+++ src/hg/lib/hAnno.c
@@ -227,31 +227,31 @@
 return streamer;
 }
 
 struct annoGrator *hAnnoGratorFromBigFileUrl(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;
 char *type = customTrackTypeFromBigFile(fileOrUrl);
 if (sameString(type, "bigBed") || sameString("bigGenePred", type))
     streamer = annoStreamBigBedNew(fileOrUrl, assembly, maxOutRows);
 else if (sameString(type, "vcfTabix"))
     streamer = annoStreamVcfNew(fileOrUrl, TRUE, assembly, maxOutRows);
 else if (sameString(type, "bigWig"))
-    grator = annoGrateBigWigNew(fileOrUrl, assembly);
+    grator = annoGrateBigWigNew(fileOrUrl, assembly, agwmAverage);
 else if (sameString(type, "bam"))
     errAbort("Sorry, BAM is not yet supported");
 else
     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.
@@ -261,35 +261,35 @@
 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);
+    grator = annoGrateWigDbNew(assembly->name, selTable, assembly, agwmAverage, maxOutRows);
 else if (startsWithWord("bigWig", tdb->type))
     {
     char *fileOrUrl = getBigDataFileName(assembly->name, tdb, tdb->table, chrom);
-    grator = annoGrateBigWigNew(fileOrUrl, assembly);
+    grator = annoGrateBigWigNew(fileOrUrl, assembly, agwmAverage);
     }
 else
     {
     struct annoStreamer *streamer = hAnnoStreamerFromTrackDb(assembly, selTable, tdb, chrom,
                                                              maxOutRows);
     if (primaryIsVariants &&
         (asColumnNamesMatchFirstN(streamer->asObj, genePredAsObj(), 10) ||
          asObjectsMatch(streamer->asObj, bigGenePredAsObj())))
 	grator = annoGratorGpVarNew(streamer);
     else
 	grator = annoGratorNew(streamer);
     }
 grator->setOverlapRule(grator, overlapRule);
 return grator;
 }