Intersections¶
One common use of BEDTools and pybedtools is to perform
intersections.
First, let’s create some example BedTool instances:
>>> a = pybedtools.example_bedtool('a.bed')
>>> b = pybedtools.example_bedtool('b.bed')
Then do the intersection with the BedTool.intersect() method:
>>> a_and_b = a.intersect(b)
a_and_b is a new BedTool instance. It now points to a temp file
on disk, which is stored in the attribute a_and_b.fn; this temp file contains
the intersection of a and b.
We can either print the new BedTool (which will show ALL features
– use with caution if you have huge files!) or use the
BedTool.head() method to show up to the first N lines (10 by
default). Here’s what a, b, and a_and_b look like:
>>> a.head()
chr1 1 100 feature1 0 +
chr1 100 200 feature2 0 +
chr1 150 500 feature3 0 -
chr1 900 950 feature4 0 +
>>> b.head()
chr1 155 200 feature5 0 -
chr1 800 901 feature6 0 +
>>> a_and_b.head()
chr1 155 200 feature2 0 +
chr1 155 200 feature3 0 -
chr1 900 901 feature4 0 +
The BedTool.intersect() method simply wraps the BEDTools program
intersectBed. This means that we can pass BedTool.intersect() any
arguments that intersectBed accepts. For example, if we want to use the
intersectBed switch -u (which, according to the BEDTools documentation,
acts as a True/False switch to indicate that we want to see the features in a
that overlapped something in b), then we can use the keyword argument
u=True, like this:
>>> # Intersection using the -u switch
>>> a_with_b = a.intersect(b, u=True)
>>> a_with_b.head()
chr1 100 200 feature2 0 +
chr1 150 500 feature3 0 -
chr1 900 950 feature4 0 +
This time, a_with_b is another BedTool object that points to a
different temp file whose name is stored in a_with_b.fn. You can read
more about the use of temp files in Principle 1: Temporary files are created (and deleted) automatically. More on
arguments that you can pass to BedTool objects in a moment, but
first, some info about saving files.