Example #1
0
    def fetch_intervals(bgz_file,
                        gr: GenomeRange,
                        gr2: GenomeRange = None) -> pd.DataFrame:
        rows = list(pairix_query(bgz_file, gr, second=gr2, split=True))
        if len(rows) == 0:
            gr.change_chrom_names()
            if gr2:
                gr2.change_chrom_names()
            rows = list(pairix_query(bgz_file, gr, second=gr2, split=True))

        return pd.DataFrame(rows)
Example #2
0
    def fetch(self, genome_range1, genome_range2=None):
        """
        Return
        ------
        matrix : numpy.ndarray
        """
        from coolbox.utilities.genome import GenomeRange

        if genome_range2 is None:
            genome_range2 = genome_range1
        genome_range1 = to_gr(genome_range1)
        genome_range2 = to_gr(genome_range2)

        if isinstance(genome_range1, str):
            genome_range1 = GenomeRange(genome_range1)
        if isinstance(genome_range2, str):
            genome_range2 = GenomeRange(genome_range2)

        if genome_range1.chrom.startswith("chr"):
            genome_range1.change_chrom_names()
        if genome_range2.chrom.startswith("chr"):
            genome_range2.change_chrom_names()

        binsize = self.infer_binsize(genome_range1)
        self.fetched_binsize = binsize  # expose fetched binsize

        straw_list = self.__fetch_straw_list(genome_range1, genome_range2, binsize)
        matrix = self.__list_to_matrix(straw_list, genome_range1, genome_range2, binsize)
        return matrix
Example #3
0
 def fetch_intervals(self, bgz_file, gr: GenomeRange) -> pd.DataFrame:
     """
     Fetch intervals within input chromosome range.
     """
     intervals, bed_type = self.load_range(bgz_file, gr)
     if len(intervals) == 0:
         gr.change_chrom_names()
         intervals, bed_type = self.load_range(bgz_file, gr)
     if len(intervals) == 0:
         log.debug(f"No valid intervals were found in file {bgz_file} within range {gr}")
     intval_table = self.intervals2dataframe(intervals, bed_type)
     # attach bed_type info onto the dataframe
     intval_table.bed_type = bed_type
     return intval_table
Example #4
0
    def goto(self, genome_range: str = None, genome_range2: str = None):
        """Goto a genome range.

        :param genome_range: Genome range string, like "chr9:4000000-6000000".
        :param genome_range2: Genome range string, like "chr9:4000000-6000000. Only required in JointView mode".
        """
        if genome_range2 is None:
            genome_range2 = genome_range
        # validate genome range
        if genome_range:
            gr = GenomeRange(genome_range)
        if genome_range2:
            gr = GenomeRange(genome_range2)
        log.info(f"Goto genome range '{genome_range}' '{genome_range2}'")
        self.current_range = [genome_range, genome_range2]

        return self
Example #5
0
    def fetch_intervals(self,
                        bgz_file,
                        gr: GenomeRange,
                        gr2: GenomeRange = None) -> pd.DataFrame:
        open_region = self.properties.get("open_region") == "yes"
        rows = list(
            pairix_query(bgz_file,
                         gr,
                         second=gr2,
                         open_region=open_region,
                         split=True))
        if not rows:
            gr.change_chrom_names()
            if gr2:
                gr2.change_chrom_names()
            rows = list(
                pairix_query(bgz_file,
                             gr,
                             second=gr2,
                             open_region=open_region,
                             split=True))

        return pd.DataFrame(rows)
Example #6
0
    def plot(self, ax, gr: GenomeRange, **kwargs):
        gr = GenomeRange(gr)
        ymin, ymax = ax.get_ylim()
        if self.properties['percent_mode'] != 'no':
            hlines_list = [
                ymin + val * ymax for val in self.properties['values']
            ]
        else:
            hlines_list = self.properties['values']

        ax.hlines(hlines_list,
                  gr.start,
                  gr.end,
                  linestyle=self.properties['line_style'],
                  linewidth=self.properties['line_width'],
                  color=self.properties['color'],
                  alpha=self.properties['alpha'])
Example #7
0
    def fetch(self, gr1, gr2=None):
        """
        Return
        ------
        matrix : numpy.ndarray
        """
        from coolbox.utilities.genome import GenomeRange

        flip = False

        if gr2 is None:
            gr2 = gr1
        gr1 = to_gr(gr1)
        gr2 = to_gr(gr2)
        if gr2.start < gr1.start:
            flip = True
            gr1, gr2 = gr2, gr1

        if isinstance(gr1, str):
            gr1 = GenomeRange(gr1)
        if isinstance(gr2, str):
            gr2 = GenomeRange(gr2)

        if gr1.chrom.startswith("chr"):
            gr1.change_chrom_names()
        if gr2.chrom.startswith("chr"):
            gr2.change_chrom_names()

        binsize = self.infer_binsize(gr1)
        self.fetched_binsize = binsize  # expose fetched binsize

        straw_iter = self.__fetch_straw_iter(gr1, gr2, binsize)
        mat = self.__straw_to_matrix(straw_iter, gr1, gr2, binsize)
        if flip:
            mat = mat.T
        return mat