.. _genomic_regions:
===========
RegionBased
===========
FAN-C builds extensively on the :code:`genomic_regions` package, which provides a unified
interface for most types of region-based genomic data. We highly recommend
`reading the documentation `_
of that package before going into the details of FAN-C, as many of the concepts discussed
therein are central to the handling of data in FAN-C.
You can check whether a FAN-C object supports the :class:`~genomic_regions.RegionBased`
interface with
.. code::
import genomic_regions as gr
isinstance(o, gr.RegionBased) # True for objects supporting the regions interface
The current list of FAN-C objects supporting the :class:`~genomic_regions.RegionBased`
interface is:
:class:`~fanc.architecture.domains.InsulationScore`,
:class:`~fanc.architecture.domains.DirectionalityIndex`,
:class:`~fanc.architecture.domains.Boundaries`,
:class:`~fanc.architecture.domains.InsulationScores`,
:class:`~fanc.architecture.domains.DirectionalityIndexes`,
:class:`~fanc.architecture.comparisons.FoldChangeScores`,
:class:`~fanc.architecture.comparisons.DifferenceScores`,
:class:`~fanc.architecture.comparisons.DifferenceRegions`,
:class:`~fanc.architecture.comparisons.FoldChangeRegions`,
:class:`~fanc.compatibility.cooler.CoolerHic`,
:class:`~fanc.compatibility.juicer.JuicerHic`,
:class:`~fanc.hic.Hic`,
:class:`~fanc.architecture.compartments.ABCompartmentMatrix`,
:class:`~fanc.architecture.comparisons.DifferenceMatrix`,
:class:`~fanc.architecture.comparisons.FoldChangeMatrix`,
:class:`~fanc.peaks.PeakInfo`,
and
:class:`~fanc.peaks.RaoPeakInfo`.
Any object built on that foundation supports, for example, region iterators:
.. code::
for region in hic.regions:
print(region)
print(region.chromosome, region.start, region.end, region.strand)
print(region.is_forward)
print(region.center)
# ...
Range queries:
.. code::
for region in hic.regions('chr1:3mb-12mb'):
print(region.chromosome) # chr1
# ...
and many more convenient features. The object type returned by all of those queries
is :class:`~genomic_regions.GenomicRegion`, which has many convenient functions to
deal with region properties and operations.
.. code:: python
len(region) # returns the size of the region in base pairs
region.center # returns the base (or fraction of base) at the center of the region
region.five_prime # returns the starting base at the 5' end of the region
region.three_prime # returns the starting base at the 3' end of the region
region.is_forward() # True if strand is '+' or '+1'
region.is_reverse() # True if strand is '-' or '-1'
region.attributes # return all attribute names in this region object
region.copy() # return a shallow copy of this region
region.to_string() # return a region identifier string describing the region
region = gr.as_region('chr12:12.5Mb-18Mb')
region.overlaps('chr12:11Mb-13Mb') # True
region.overlaps('chr12:11Mb-11.5Mb') # False
region.overlaps('chr1:11Mb-13Mb') # False
Refer to the
`genomic_regions documentation `_ for
all the details.
Similarly to the :code:`regions` interface for handling collections of genomic regions,
FAN-C implements interfaces for working with pairs of genomic regions (:code:`edges`)
and matrix operations (:code:`matrix`). These work in exactly the same way for FAN-C,
Cooler, and Juicer files. Hence, all of these are directly compatible with FAN-C architectural
functions such as the insulation score or AB compartment analyses, ...
These interfaces will be introduced in the following sections, starting with :ref:`edges_interface`.