7cb1d45d2ab54a8556d73748d41246df932bcb42 jcasper Fri Sep 27 16:23:47 2019 -0700 Initial commit of hicInfo utility for displaying header info from .hic files, refs #22316 diff --git src/hg/utils/hicInfo/hicInfo.c src/hg/utils/hicInfo/hicInfo.c new file mode 100644 index 0000000..fa57ee9 --- /dev/null +++ src/hg/utils/hicInfo/hicInfo.c @@ -0,0 +1,73 @@ +/* hicInfo - Retrieve and display header information for a .hic file. */ +#include "common.h" +#include "linefile.h" +#include "hash.h" +#include "options.h" +#include "hic.h" + +void usage() +/* Explain usage and exit. */ +{ +errAbort( + "hicInfo - Retrieve and display header information for a .hic file. Uses UDC for remote files.\n" + "usage:\n" + " hicInfo file.hic\n" + "options:\n" + " -attrs - write out the attribute dictionary for the file (might be large)\n" + " -udcDir=/dir/to/cache - place to put cache for remote bigBed/bigWigs\n" + ); +} + +/* Command line validation table. */ +static struct optionSpec options[] = { + {"attrs", OPTION_BOOLEAN}, + {"udcDir", OPTION_STRING}, + {NULL, 0}, +}; + +void hicInfo(char *filename) +/* hicInfo - Retrieve header information for a .hic file. */ +{ +int i; +struct hicMeta *fileInfo = NULL; +char *errMsg = hicLoadHeader(filename, &fileInfo, NULL); +if(errMsg != NULL) + errAbort("%s", errMsg); +printf("File: %s\n", filename); +printf("File Assembly (according to the file): %s\n", fileInfo->fileAssembly); +if (optionExists("attrs")) + { + printf("\nAttribute count: %d\n", fileInfo->nAttributes/2); + printf("Attribute key/value pairs:\n"); + for (i=0; i<fileInfo->nAttributes-1; i+=2) + { + printf("Key #%d: %s\n", i/2+1, fileInfo->attributes[i]); + printf("Value #%d: %s\n", i/2+1, fileInfo->attributes[i+1]); + } + } +// Skip the first chromosome in this listing, as it's always a composite +// called "All" that's just used for low-resolution display of the entire data set. +printf("\nChromosome count: %d\n", fileInfo->nChroms-1); +printf("Chromosome names/sizes:\n"); +for (i=1; i<fileInfo->nChroms; i++) + { + printf("%s\t%d\n", fileInfo->chromNames[i], fileInfo->chromSizes[i]); + } +printf("\nBP Resolution count: %d\n", fileInfo->nRes); +printf("BP Resolutions:\n"); +for (i=0; i<fileInfo->nRes; i++) + { + printf("%s\n", fileInfo->resolutions[i]); + } +} + +int main(int argc, char *argv[]) +/* Process command line. */ +{ +optionInit(&argc, argv, options); +if (argc != 2) + usage(); +udcSetDefaultDir(optionVal("udcDir", udcDefaultDir())); +hicInfo(argv[1]); +return 0; +}