60aca91bcce6d4fa555e6c7c91d8ff8aa9e7bd2b
jcasper
  Fri Jun 11 15:17:21 2021 -0700
Updating hic support for files with large headers (over 100kb) and improving
multi-region performance, refs #18842, #27593

diff --git src/hg/inc/cStraw.h src/hg/inc/cStraw.h
new file mode 100644
index 0000000..7a7a576
--- /dev/null
+++ src/hg/inc/cStraw.h
@@ -0,0 +1,34 @@
+/* cStraw - a wrapper header file for making C++ functions associated with retrieving
+ * data from .hic files available to C libraries.  The underlying functions come
+ * from the Straw library by the Aiden Lab at the Broad Institute (see
+ * kent/src/hg/lib/straw/).
+*/
+#ifndef CSTRAW_H
+#define CSTRAW_H
+
+typedef struct Straw Straw;
+
+Straw *cStrawOpen (char *fname);
+/* Return a pointer to a Straw object for further operations (i.e. reads) */
+
+Straw *cStrawClose (Straw **hicFile);
+/* Close out a Straw record, freeing the object */
+
+char* cStraw (Straw *hicFile, char *norm, int binsize, char *chr1loc, char *chr2loc, char *unit, int **xActual, int **yActual, double **counts, int *numRecords);
+/* Wrapper function to retrieve a data chunk from a .hic file, for use by C libraries.
+ * norm is one of NONE/VC/VC_SQRT/KR.
+ * binsize is one of the supported bin sizes as determined by cStrawHeader.
+ * chr1loc and chr2loc are the two positions to retrieve interaction data for, specified as chr:start-end.
+ * unit is one of BP/FRAG.
+ * Values are returned in newly allocated arrays in xActual, yActual, and counts, with the number of
+ * returned records in numRecords.
+ * The function returns NULL unless an error was encountered, in which case the return value points
+ * to a character string explaining the error. */
+
+char* cStrawHeader (Straw *hicFile, char **genome, char ***chromNames, int **chromSizes, int *nChroms, char ***bpResolutions, int *nBpRes, char ***fragResolutions, int *nFragRes, char ***attributes, int *nAttributes);
+/* Wrapper function to retrieve header fields from a .hic file, for use by C libraries.
+ * This retrieves the assembly name, list of chromosome names, list of available binsize resolutions,
+ * and list of available fragment resolutions in the specific .hic file.
+ * The function returns NULL unless an error was encountered, in which case the return value points
+ * to a character string explaining the error. */
+#endif