Permalink
Browse files

doctests, README, improved tests

  • Loading branch information...
1 parent 8c1d9b8 commit 4e8f206cfc838850e159129f5b2a77b2a1d8fc75 James Casbon committed Feb 15, 2012
Showing with 697 additions and 2 deletions.
  1. +2 −0 .gitignore
  2. +54 −0 README
  3. +400 −0 fastinterval.py
  4. +7 −2 setup.py
  5. +2 −0 test/example.fa
  6. +1 −0 test/example.fa.flat
  7. BIN test/example.fa.gdx
  8. +231 −0 test_fastinterval.py
View
@@ -0,0 +1,2 @@
+*.pyc
+
View
54 README
@@ -0,0 +1,54 @@
+
+An simple interval class for DNA sequences
+
+Typically, you will create a genome and then use that object to create
+intervals. The intervals have a sequence property that will look up the
+actual sequence::
+
+ >>> from fastinterval import Genome, Interval
+ >>> test_genome = Genome('test/example.fa')
+ >>> int1 = test_genome.interval(100, 150, chrom='1')
+ >>> print int1
+ 1:100-150:
+ >>> print int1.sequence
+ GATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGA
+
+fastinterval is using pyfasta to retrieve the sequence, so the access is mmapped.
+It supports strandedness, which will be respected when accessing the sequence::
+
+ >>> int2 = test_genome.interval(100, 150, chrom='1', strand=-1)
+ >>> print int2.sequence
+ TCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATC
+
+The Interval class supports many interval operations::
+
+ >>> int1 = test_genome.interval(100, 150, chrom='1')
+ >>> int2 = test_genome.interval(125, 175, chrom='1')
+ >>> int1.distance(int2)
+ 0
+ >>> int1.span(int2)
+ Interval(100, 175)
+ >>> int1.overlaps(int2)
+ True
+ >>> int1.is_contiguous(int2)
+ True
+ >>> int1.contains(int2)
+ False
+ >>> int1.intersection(int2)
+ Interval(125, 150)
+ >>> int1.union(int2)
+ Interval(100, 175)
+ >>> Interval.merge([int1, int2, test_genome.interval(200,250, chrom='1')])
+ [Interval(100, 175), Interval(200, 250)]
+
+The Interval class is also based on bx python intervals. So you can pass in
+a value attritbue to point to an external object, and create interval trees and
+so on.
+
+ >>> from bx.intervals.intersection import IntervalTree
+ >>> int3 = test_genome.interval(150, 200, chrom='1', value='foo')
+ >>> tree = IntervalTree()
+ >>> _ = map(tree.insert_interval, (int1, int2, int3))
+ >>> tree.find(190, 195)
+ [Interval(150, 200, value=foo)]
+
Oops, something went wrong.

0 comments on commit 4e8f206

Please sign in to comment.