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])
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])
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])
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])
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])
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])
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])
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] ])