Ejemplo n.º 1
0
    def test_add_track(self):
        new_track_name, new_track_file = self.new_track

        # Open new track
        genome = Genome(self.gdfilepath, mode="r+")
        with genome:
            self.assertEqual(genome.num_tracks_continuous, 0)
            genome.add_track_continuous(new_track_name)

        # Load data for new track
        load_data(self.gdfilepath, new_track_name,
                  test_filename(new_track_file), verbose=self.verbose)

        # Close data with new track
        close_data(self.gdfilepath, verbose=self.verbose)

        # Make sure addition was successful
        genome = Genome(self.gdfilepath)
        with genome:
            # Track ordering should now end with dnase
            self.assertEqual(genome.tracknames_continuous, [new_track_name])

            # Given track ordering, check single track data retrieval
            self.assertArraysEqual(genome["chr1"][305:310, new_track_name],
                                   [-2.65300012, 0.37200001, 0.37200001,
                                     0.37200001, 0.37099999])
Ejemplo n.º 2
0
    def test_add_track(self):
        new_track_name, new_track_file = self.new_track

        # Open new track
        genome = Genome(self.gdfilepath, mode="r+")
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", GenomedataDirtyWarning)
            with genome:
                self.assertEqual(genome.num_tracks_continuous, 0)
                genome.add_track_continuous(new_track_name)

        # Load data for new track
        load_data(self.gdfilepath,
                  new_track_name,
                  test_filename(new_track_file),
                  verbose=self.verbose)

        # Close data with new track
        close_data(self.gdfilepath, verbose=self.verbose)

        # Make sure addition was successful
        genome = Genome(self.gdfilepath)
        with genome:
            # Track ordering should now end with dnase
            self.assertEqual(genome.tracknames_continuous, [new_track_name])

            # Given track ordering, check single track data retrieval
            self.assertArraysEqual(
                genome["chr1"][305:310, new_track_name],
                [-2.65300012, 0.37200001, 0.37200001, 0.37200001, 0.37099999])
Ejemplo n.º 3
0
    def test_replace_track(self):
        # Test ability to delete and replace a track

        old_trackname = "primate"
        old_entry = (290, -2.327)
        new_trackname = "placental"
        new_entry = (290, -2.297)

        # Test value before deleting track
        with Genome(self.gdfilepath) as genome:
            chromosome = genome["chr1"]
            self.assertArraysEqual(chromosome[old_entry[0], old_trackname],
                                   old_entry[1])

        # Remove track
        erase_data(self.gdfilepath, old_trackname,
                      verbose=self.verbose)

        # Now replace it with the data from a different track
        track_index = self.tracknames.index(new_trackname)
        datafile = self.trackfiles[track_index]
        load_data(self.gdfilepath, new_trackname, datafile,
                  verbose=self.verbose)

        # Re-close data
        close_data(self.gdfilepath, verbose=self.verbose)

        # Now test that the data matches the new track data
        with Genome(self.gdfilepath) as genome:
            chromosome = genome["chr1"]
            self.assertArraysEqual(chromosome[new_entry[0], new_trackname],
                                   new_entry[1])
Ejemplo n.º 4
0
    def test_replace_track(self):
        # Test ability to delete and replace a track

        old_trackname = "primate"
        old_entry = (290, -2.327)
        new_trackname = "placental"
        new_entry = (290, -2.297)

        # Test value before deleting track
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", GenomedataDirtyWarning)
            with Genome(self.gdfilepath) as genome:
                chromosome = genome["chr1"]
                self.assertArraysEqual(chromosome[old_entry[0], old_trackname],
                                       old_entry[1])

            # Remove track
            erase_data(self.gdfilepath, old_trackname, verbose=self.verbose)

        # Now replace it with the data from a different track
        track_index = self.tracknames.index(new_trackname)
        datafile = self.trackfiles[track_index]
        load_data(self.gdfilepath,
                  new_trackname,
                  datafile,
                  verbose=self.verbose)

        # Re-close data
        close_data(self.gdfilepath, verbose=self.verbose)

        # Now test that the data matches the new track data
        with Genome(self.gdfilepath) as genome:
            chromosome = genome["chr1"]
            self.assertArraysEqual(chromosome[new_entry[0], new_trackname],
                                   new_entry[1])
Ejemplo n.º 5
0
    def test_filter_track(self):
        # Add filter track
        open_data(self.gdfilepath, [UNFILTERED_TRACKNAME],
                  verbose=self.verbose)
        load_data(self.gdfilepath,
                  UNFILTERED_TRACKNAME,
                  test_filename(UNFILTERED_TRACK_FILENAME),
                  verbose=self.verbose)
        close_data(self.gdfilepath, verbose=self.verbose)

        # Perform filtering on data
        hardmask_data(self.gdfilepath,
                      test_filename(self.filter), [UNFILTERED_TRACKNAME],
                      lambda x: x < self.filter_threshold,
                      verbose=self.verbose)

        # Make sure filtering was successful
        genome = Genome(self.gdfilepath)
        with genome:
            self.assertArraysEqual(genome["chr1"][0:4, UNFILTERED_TRACKNAME],
                                   [nan, nan, nan, nan])
            self.assertArraysEqual(
                genome["chr1"][128:132, UNFILTERED_TRACKNAME],
                [nan, nan, 0.5, 0.5])
            self.assertArraysEqual(
                genome["chr1"][168:172, UNFILTERED_TRACKNAME],
                [0.9, 0.9, nan, nan])
            self.assertArraysEqual(
                genome["chr1"][206:210, UNFILTERED_TRACKNAME],
                [nan, nan, nan, nan])
Ejemplo n.º 6
0
    def test_delete_tracks(self):
        # Test ability to delete a track
        trackname = "primate"
        old_entry = (290, -2.327)

        # Test value before deleting track
        warnings.simplefilter("ignore")
        with Genome(self.gdfilepath, "r+") as genome:
            chromosome = genome["chr1"]
            self.assertArraysEqual(chromosome[old_entry[0], trackname],
                                   old_entry[1])
            chromosome._erase_data(trackname)

        warnings.resetwarnings()
        # Re-close data
        close_data(self.gdfilepath, verbose=self.verbose)

        # Test value after deleting track
        with Genome(self.gdfilepath) as genome:
            chromosome = genome["chr1"]
            self.assertArraysEqual(chromosome[old_entry[0], trackname],
                                   old_entry[1])
Ejemplo n.º 7
0
    def test_delete_tracks(self):
        # Test ability to delete a track
        trackname = "primate"
        old_entry = (290, -2.327)
        new_entry = (290, NAN)

        # Test value before deleting track
        warnings.simplefilter("ignore")
        with Genome(self.gdfilepath, "r+") as genome:
            chromosome = genome["chr1"]
            self.assertArraysEqual(chromosome[old_entry[0], trackname],
                                   old_entry[1])
            chromosome._erase_data(trackname)

        warnings.resetwarnings()
        # Re-close data
        close_data(self.gdfilepath, verbose=self.verbose)

        # Test value after deleting track
        with Genome(self.gdfilepath) as genome:
            chromosome = genome["chr1"]
            self.assertArraysEqual(chromosome[old_entry[0], trackname],
                                   old_entry[1])
Ejemplo n.º 8
0
    def test_interface(self):
        original_num_datapoints = 0
        if self.write:
            mode = "r+"
        else:
            mode = "r"
        # catch_warnings acts as a context manager storing the original warning
        # filter and resetting it at the end. All non user warnings should
        # still be displayed
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", GenomedataDirtyWarning)
            warnings.simplefilter("ignore", OverlapWarning)
            with Genome(self.gdfilepath, mode=mode) as genome:
                original_num_datapoints = genome.num_datapoints

                self.assertTrue("chr1" in genome)
                self.assertFalse("chrZ" in genome)

                chromosome = genome["chr1"]

                # Test tracknames are as expected
                self.assertEqual(sorted(chromosome.tracknames_continuous),
                                 sorted(self.tracknames))

                # Test tracknames are consistent
                self.assertEqual(sorted(genome.tracknames_continuous),
                                 sorted(chromosome.tracknames_continuous))

                # Test chromosome attributes
                self.assertEqual(chromosome.start, 0)
                self.assertEqual(chromosome.end, 24950)

                # Test sequence inside of data range
                self.assertEqual(seq2str(chromosome.seq[0:20]),
                                 "taaccctaaccctaacccta")

                # Test sequence outside of data range
                self.assertEqual(seq2str(chromosome.seq[30000]), "n")

                # Track ordering should be: placental, primate, vertebrate
                self.assertEqual(chromosome.tracknames_continuous,
                                 self.tracknames)

                # Given track ordering, check multi-track data retrieval
                self.assertArraysEqual(chromosome[290, 0:3],
                                       [-2.297, -2.327, -2.320])

                # test multi-track data retrieval by list
                self.assertArraysEqual(
                    chromosome[290, ["placental", "primate", "vertebrate"]],
                    chromosome[290, 0:3])
                self.assertArraysEqual(
                    chromosome[290, ["placental", "vertebrate"]],
                    [-2.297, -2.320])
                self.assertArraysEqual(chromosome[290, [0, 2]],
                                       [-2.297, -2.320])
                self.assertArraysEqual(chromosome[290, [2, 0]],
                                       [-2.320, -2.297])

                self.assertArraysEqual(chromosome[290, array([1, 0])],
                                       [-2.327, -2.297])

                # Test filling of unassigned continuous segments
                chromosome = genome["chrY"]
                # Get first supercontig
                for supercontig in chromosome:
                    break
                self.assertArraysEqual(supercontig.continuous[0, 2], nan)

                # If we are testing writing to archives
                if self.write:
                    # Test writing scalars to various indexing methods
                    chromosome = genome["chr1"]
                    # Test writing scalar to multiple tracks
                    chromosome[290] = 100.0
                    # Test writing scalar to tracks by named list
                    chromosome[291,
                               ["placental", "primate", "vertebrate"]] = 101.0
                    # Test writing scalar to select tracks by named list
                    chromosome[292, ["placental", "vertebrate"]] = 102.0
                    # Test writing scalar to tracks by index
                    chromosome[293, [0, 2]] = 103.0
                    chromosome[294, [2, 0]] = 104.0

                    # Test writing arrays to various indexing methods
                    # Test writing an array to a single index
                    chromosome[295] = [105.0, 106.0, 107.0]
                    # Test writing a subarray to a index subset
                    chromosome[296,
                               ["placental", "vertebrate"]] = [108.0, 109.0]

                    # Test removing datapoints by writing NaN
                    chromosome[297, ["primate"]] = nan

                    # Test writing around supercontig boundaries
                    # <Supercontig 'supercontig_0', [0:24950]>
                    # Test writing outside a supercontig
                    try:
                        chromosome[300000] = 110.0
                    except ValueError:
                        pass  # we expect a value error here

                    # Test writing overlap across supercontig to no supercontig
                    try:
                        chromosome[24900:30000] = 111.0
                    except ValueError:
                        pass  # we expect a value error here

        # Check write output after closing if testing writes
        if self.write:
            # Close with newly written data
            close_data(self.gdfilepath, verbose=self.verbose)
            # Read data and verify new data and parameters
            with Genome(self.gdfilepath) as genome:
                chromosome = genome["chr1"]

                self.assertArraysEqual(chromosome[290], [100.0, 100.0, 100.0])
                self.assertArraysEqual(chromosome[291], [101.0, 101.0, 101.0])
                # L14 in primate wigFix
                self.assertArraysEqual(chromosome[292], [102.0, 0.371, 102.0])
                self.assertArraysEqual(chromosome[293], [103.0, 0.372, 103.0])
                self.assertArraysEqual(chromosome[294], [104.0, 0.372, 104.0])
                self.assertArraysEqual(chromosome[295], [105.0, 106.0, 107.0])
                self.assertArraysEqual(chromosome[296], [108.0, -2.327, 109.0])
                # Check if one datapoint was successfully removed
                self.assertArraysEqual(original_num_datapoints, [
                    genome.num_datapoints[0], genome.num_datapoints[1] + 1,
                    genome.num_datapoints[2]
                ])