Working with Cooler and Juicer files

FAN-C is fully compatible with Hi-C files from Cooler (.cool and .mcool) and Juicer (.hic). There is no need to convert them to FAN-C format, you can use them directly.

Cooler .cool and .mcool

.mcool files are multi-resolution, i.e. they contain matrices for not just one, but multiple resolutions. Therefore there is a special @ syntax for using these files, which allow you to set the resolution which should be used for this analysis:

hic = fanc.load("/path/to/cooler.mcool@<resolution>")

For example, to load matrices at one megabase resolution

hic = fanc.load("/path/to/cooler.mcool@1mb")

Both human-readable resolutions such as 100kb, 1mb, etc, and integers like 100000 and 1000000 are supported. Note that the resolution of your choice must be available in the object, which is generated outside of FAN-C.

Note

Currently, the Cooler file format specification does not intend for expected values to be stored in the file itself. A lot of FAN-C functions depend on expected values, but because they are not available in Cooler files they are generated on the fly each time a command is run. FAN-C tries to be clever about this by caching expected values for a single command, but expect some slowdowns due to this for some computations. If this becomes an issue, we recommend converting to FAN-C format (fanc from-cooler) or to Juicer .hic.

Juicer .hic files

.hic files are multi-resolution, i.e. they contain matrices for not just one, but multiple resolutions. Therefore there is a special @ syntax for using these files, which allow you to set the resolution which should be used for this analysis:

hic = fanc.load("/path/to/juicer.hic@<resolution>")

For example, to load matrices at one megabase resolution

hic = fanc.load("/path/to/juicer.hic@1mb")

Both human-readable resolutions such as 100kb, 1mb, etc, and integers like 100000 and 1000000 are supported. Note that the resolution of your choice must be available in the object, which is generated outside of FAN-C.

Juicer files also support multiple normalisation methods. Currently these are VC (vanilla coverage), VC_SQRT (square root vanilla coverage), ICE (ICE matrix balancing), and KR (Knight-Ruiz matrix balancing). You can choose between normalisation methods by adding another @<norm> to the file name like this:

hic = fanc.load("/path/to/juicer.hic@1mb@VC")

Note that this only works for Juicer files, and is optional. If not specified, the KR norm will be used.