def test_write_features_summary(self):
     # Set up some test data
     peak = Peak('chr2L',66811,66812)
     features = FeatureSet(
         features_list=(
             Feature('CG31973','chr2L',25402,59243,'-'),
             Feature('CG2674-RE','chr2L',106903,114433,'+'),
             Feature('CG2674-RC','chr2L',107926,114433,'+')))
     # Temp output file
     fp,summary = tempfile.mkstemp()
     # Write peaks to file
     ap = AnalysisReportWriter(output.MULTI_LINE,
                               fields=('peak.chr',
                                       'peak.start',
                                       'peak.end',
                                       'order',
                                       'feature.id',
                                       'dist_closest',
                                       'dist_TSS'),
                               summary=summary)
     ap.write_nearest_features(peak,features)
     ap.close()
     # Expected and actual output
     expected_output = \
         "#peak.chr\tpeak.start\tpeak.end\torder\tfeature.id\tdist_closest\tdist_TSS\n" \
         "chr2L\t66811\t66812\t1 of 3\tCG31973\t7568\t7568\n"
     actual_output = open(summary,'r').read()
     # Check that output matches
     self.assertEqual(expected_output,actual_output)
Exemple #2
0
 def test_tss_distances_peak_contains_TSS(self):
     self.assertEqual(
         tss_distances(Peak('chr1', '100', '250'),
                       Feature('NM3', 'chr1', '200', '400', '+')), (0, 75))
     self.assertEqual(
         tss_distances(Peak('chr1', '250', '350'),
                       Feature('NM4', 'chr1', '200', '300', '-')), (0, 50))
 def setUp(self):
     # Set up some test data
     self.peak = Peak('chr2L',66811,66812)
     self.features = FeatureSet(
         features_list=(
             Feature('CG31973','chr2L',25402,59243,'-'),
             Feature('CG2674-RE','chr2L',106903,114433,'+'),
             Feature('CG2674-RC','chr2L',107926,114433,'+')))
     self.single_line_fields = ('peak.chr',
                                'peak.start',
                                'peak.end',
                                'number_of_results',
                                'list(feature.id,'
                                'dist_closest,dist_TSS)')
     self.single_line_fields_extra_data = ('peak.chr',
                                           'peak.start',
                                           'peak.end',
                                           'cutoff',
                                           'number_of_results',
                                           'list(feature.id,'
                                           'dist_closest,dist_TSS)')
     self.multi_line_fields = ('peak.chr',
                               'peak.start',
                               'peak.end',
                               'order',
                               'feature.id',
                               'dist_closest',
                               'dist_TSS')
 def setUp(self):
     # Set up Feature objects to be used in the tests
     # Forward strand example
     self.rna_data = \
         Feature('CG9130-RB','chr3L','1252012','1255989','+')
     # Reverse strand example
     self.rna_data_2 = \
         Feature('CG13051-RA','chr3L','16257914','16258166','-')
Exemple #5
0
 def test_tss_distances_TSS_before_peak(self):
     self.assertEqual(
         tss_distances(Peak('chr1', '250', '400'),
                       Feature('NM2', 'chr1', '100', '200', '+')),
         (150, 300))
     self.assertEqual(
         tss_distances(Peak('chr1', '250', '400'),
                       Feature('NM2', 'chr1', '100', '200', '-')),
         (50, 200))
 def test_write_peaks_summary(self):
     # Set up some test data
     feature = Feature('CG31973','chr2L','25402','59243','-')
     peaks = PeakSet(
         peaks_list=(
             Peak('chr2L','66711','66911'),
             Peak('chr2L','249077','249277'),
             Peak('chr2L','605850','606050')))
     # Temp output files
     fp,summary= tempfile.mkstemp()
     # Write peaks to file
     ap = AnalysisReportWriter(output.MULTI_LINE,
                               fields=('feature.id',
                                       'order',
                                       'peak.chr',
                                       'peak.start',
                                       'peak.end',
                                       'dist_closest',
                                       'dist_TSS'),
                               summary=summary)
     ap.write_nearest_peaks(feature,peaks)
     ap.close()
     # Expected and actual output
     expected_output = \
         "#feature.id\torder\tpeak.chr\tpeak.start\tpeak.end\tdist_closest\tdist_TSS\n" \
         "CG31973\t1 of 3\tchr2L\t66711\t66911\t7468\t7468\n"
     actual_output = open(summary,'r').read()
     # Check that output matches
     self.assertEqual(expected_output,actual_output)
 def test_write_features_append(self):
     # Set up some test data
     peak = Peak('chr2L',66811,66812)
     features1 = FeatureSet(
         features_list=(
             Feature('CG31973','chr2L',25402,59243,'-'),
             Feature('CG2674-RE','chr2L',106903,114433,'+'),))
     features2 = FeatureSet(
         features_list=(
             Feature('CG2674-RC','chr2L',107926,114433,'+'),))
     # Temp output file
     fp,outfile = tempfile.mkstemp()
     # Write first set of nearest features
     ap = AnalysisReportWriter(output.MULTI_LINE,
                               fields=('peak.chr',
                                       'peak.start',
                                       'peak.end',
                                       'order',
                                       'feature.id',
                                       'dist_closest',
                                       'dist_TSS'),
                               outfile=outfile)
     ap.write_nearest_features(peak,features1)
     ap.close()
     # Write second set of nearest features
     ap = AnalysisReportWriter(output.MULTI_LINE,
                               fields=('peak.chr',
                                       'peak.start',
                                       'peak.end',
                                       'order',
                                       'feature.id',
                                       'dist_closest',
                                       'dist_TSS'),
                               outfile=outfile,
                               append=True)
     ap.write_nearest_features(peak,features2)
     ap.close()
     # Expected and actual output
     expected_output = \
         "#peak.chr\tpeak.start\tpeak.end\torder\tfeature.id\tdist_closest\tdist_TSS\n" \
         "chr2L\t66811\t66812\t1 of 2\tCG31973\t7568\t7568\n" \
         "chr2L\t66811\t66812\t2 of 2\tCG2674-RE\t40091\t40091\n" \
         "chr2L\t66811\t66812\t1 of 1\tCG2674-RC\t41114\t41114\n"
     actual_output = open(outfile,'r').read()
     # Check that output matches
     self.assertEqual(expected_output,actual_output)
 def setUp(self):
     # Set up some test data
     self.feature = Feature('CG31973','chr2L','25402','59243','-')
     self.peaks = PeakSet(
         peaks_list=(
             Peak('chr2L','66711','66911'),
             Peak('chr2L','249077','249277'),
             Peak('chr2L','605850','606050')))
     self.single_line_fields = ('feature.id',
                                'number_of_results',
                                'list(peak.chr,peak.start,peak.end,'
                                'dist_closest,dist_TSS)')
     self.single_line_fields_extra_data = ('feature.id',
                                           'cutoff',
                                           'number_of_results',
                                           'list(peak.chr,peak.start,peak.end,'
                                           'dist_closest,dist_TSS)')
     self.multi_line_fields = ('feature.id',
                               'order',
                               'peak.chr',
                               'peak.start',
                               'peak.end',
                               'dist_closest',
                               'dist_TSS')
Exemple #9
0
 def test_feature_upstream_from_peak_neg_strand(self):
     peak = Peak('chr1', '100', '200')
     feature = Feature('NM1', 'chr1', '250', '400', '-')
     self.assertEqual(direction(peak, feature), UPSTREAM)
Exemple #10
0
 def test_feature_downstream_from_peak(self):
     peak = Peak('chr1', '100', '200')
     feature = Feature('NM1', 'chr1', '250', '400', '+')
     self.assertEqual(direction(peak, feature), DOWNSTREAM)
Exemple #11
0
 def test_feature_upstream_from_peak_partial_overlap(self):
     peak = Peak('chr1', '350', '550')
     feature = Feature('NM1', 'chr1', '250', '400', '+')
     self.assertEqual(direction(peak, feature), UPSTREAM)
Exemple #12
0
 def test_peak_downstream_from_feature_neg_strand(self):
     peak = Peak('chr1', '450', '550')
     feature = Feature('NM1', 'chr1', '250', '400', '-')
     self.assertEqual(direction(feature, peak), UPSTREAM)
Exemple #13
0
 def test_peak_upstream_from_feature_neg_strand_partial_overlap(self):
     peak = Peak('chr1', '100', '300')
     feature = Feature('NM1', 'chr1', '250', '400', '-')
     self.assertEqual(direction(feature, peak), DOWNSTREAM)
Exemple #14
0
 def test_peak_downstream_from_feature_partial_overlap(self):
     peak = Peak('chr1', '350', '550')
     feature = Feature('NM1', 'chr1', '250', '400', '+')
     self.assertEqual(direction(feature, peak), DOWNSTREAM)
Exemple #15
0
 def test_peak_full_overlap_feature(self):
     peak = Peak('chr1', '200', '450')
     feature = Feature('NM1', 'chr1', '250', '400', '+')
     self.assertEqual(direction(feature, peak), OVERLAP)
class TestFeature(unittest.TestCase):

    def setUp(self):
        # Set up Feature objects to be used in the tests
        # Forward strand example
        self.rna_data = \
            Feature('CG9130-RB','chr3L','1252012','1255989','+')
        # Reverse strand example
        self.rna_data_2 = \
            Feature('CG13051-RA','chr3L','16257914','16258166','-')

    def test_properties(self):
        self.assertEqual(self.rna_data.chrom,'chr3L')
        self.assertEqual(self.rna_data_2.chrom,'chr3L')

    def test__eq__(self):
        self.assertEqual(self.rna_data,Feature('CG9130-RB',
                                               'chr3L',
                                               '1252012',
                                               '1255989','+'))
        self.assertNotEqual(self.rna_data,self.rna_data_2)

    def test_contains_position(self):
        position = 1253000
        self.assertTrue(self.rna_data.containsPosition(position),
                        "Transcript should contain position")
        position = 4250000
        self.assertFalse(self.rna_data.containsPosition(position),
                         "Transcript should not contain position")
        position = 10000
        self.assertFalse(self.rna_data.containsPosition(position),
                         "Transcript should not contain position")

    def test_get_closest_edge_distance(self):
        # Single position
        position = 1200000
        # Single reference position
        self.assertEqual(self.rna_data.getClosestEdgeDistanceTo(position),
                         abs(self.rna_data.start-position),
                         "Incorrect closest edge distance #1")
        position = 1300000
        self.assertEqual(self.rna_data.getClosestEdgeDistanceTo(position),
                         abs(self.rna_data.end-position),
                         "Incorrect closest edge distance #2")

    def test_get_closest_edge_distance_outside_region(self):
        # Reference region (2 positions)
        position1 = 1100000
        position2 = 1200000
        self.assertEqual(self.rna_data.getClosestEdgeDistanceTo(position1,
                                                                position2),
                         abs(self.rna_data.start-position2),
                         "Incorrect closest edge distance (region #1)")
        position1 = 1300000
        position2 = 1400000
        self.assertEqual(self.rna_data.getClosestEdgeDistanceTo(position1,
                                                                position2),
                         abs(self.rna_data.end-position1),
                         "Incorrect closest edge distance (region #2)")

    def test_get_closest_edge_distance_partially_inside_region(self):
        # Partially inside reference region
        position1 = 1200000
        position2 = 1255000
        self.assertEqual(self.rna_data.getClosestEdgeDistanceTo(position1,
                                                                position2),
                         abs(self.rna_data.end-position2),
                         "Incorrect closest edge distance (inside region #1)")
        self.assertEqual(self.rna_data.getClosestEdgeDistanceTo(position1,
                                                                position2,
                                                                zero_inside_region=True),
                         0,
                         "Incorrect closest edge distance (inside region #2)")

    def test_get_closest_edge_distance_completely_inside_region(self):
        # Completely inside reference region
        position1 = 1250000
        position2 = 1300000
        self.assertEqual(self.rna_data.getClosestEdgeDistanceTo(position1,
                                                                position2),
                         abs(self.rna_data.start-position1),
                         "Incorrect closest edge distance (inside region #3)")
        self.assertEqual(self.rna_data.getClosestEdgeDistanceTo(position1,
                                                                position2,
                                                                zero_inside_region=True),
                         0,
                         "Incorrect closest edge distance (inside region #4)")

    def test_get_promoter_region(self):
        leading = 10000
        trailing = 2500
        promoter = self.rna_data.getPromoterRegion(leading,trailing)
        self.assertEqual(promoter,
                         (self.rna_data.getTSS()-leading,
                          self.rna_data.getTSS()+trailing),
                         "Incorrect promoter region for + strand example")
        promoter = self.rna_data_2.getPromoterRegion(leading,trailing)
        self.assertEqual(promoter,
                         (self.rna_data_2.getTSS()+leading,
                          self.rna_data_2.getTSS()-trailing),
                         "Incorrect promoter region for - strand example")
Exemple #17
0
 def test_feature_downstream_from_peak_neg_strand_partial_overlap(self):
     peak = Peak('chr1', '350', '550')
     feature = Feature('NM1', 'chr1', '250', '400', '-')
     self.assertEqual(direction(peak, feature), DOWNSTREAM)
Exemple #18
0
 def test_distances_feature_before_peak(self):
     self.assertEqual(
         edge_distances(Peak('chr1', '250', '400'),
                        Feature('NM2', 'chr1', '100', '200', '+')),
         (50, 150))
Exemple #19
0
 def test_distances_feature_contains_peak(self):
     self.assertEqual(
         edge_distances(Peak('chr1', '250', '350'),
                        Feature('NM6', 'chr1', '100', '400', '+')), (0, 0))
Exemple #20
0
 def test_distances_feature_overlaps_peak_start(self):
     self.assertEqual(
         edge_distances(Peak('chr1', '250', '350'),
                        Feature('NM4', 'chr1', '300', '400', '+')), (0, 50))
Exemple #21
0
 def test_feature_full_overlap_peak_neg_strand(self):
     peak = Peak('chr1', '200', '450')
     feature = Feature('NM1', 'chr1', '250', '400', '-')
     self.assertEqual(direction(peak, feature), OVERLAP)
Exemple #22
0
 def test_peak_upstream_from_feature(self):
     peak = Peak('chr1', '100', '200')
     feature = Feature('NM1', 'chr1', '250', '400', '+')
     self.assertEqual(direction(feature, peak), UPSTREAM)