Ejemplo n.º 1
0
    def test_embed_data_two_widgets(self):
        feature_track = pileup.Track(
            viz="features",
            label="myFeatures",
            source=pileup.sources.GA4GHFeatureJson('{}'))
        variant_track = pileup.Track(
            viz="variants",
            label="myVariants",
            source=pileup.sources.GA4GHVariantJson('{}'))

        w1 = pileup.PileupViewer(chrom="chr17",
                                 start=1,
                                 stop=250,
                                 reference="hg19",
                                 tracks=[feature_track])
        w2 = pileup.PileupViewer(chrom="chr17",
                                 start=1,
                                 stop=250,
                                 reference="hg19",
                                 tracks=[variant_track])

        jslink((w1, 'reference'), (w2, 'reference'))
        state = dependency_state([w1, w2], drop_defaults=True)
        data = embed_data(views=[w1, w2], drop_defaults=True, state=state)

        state = data['manager_state']['state']
        views = data['view_specs']

        assert len(views) == 2

        model_names = [s['model_name'] for s in state.values()]
        widget_names = list(
            filter(lambda x: x == 'PileupViewerModel', model_names))
        assert len(widget_names) == 2
Ejemplo n.º 2
0
    def viewPileup(self, contig, start, end, reference = 'hg19', label = "Features", showPlot = True):
        """
        Visualizes a portion of this FeatureDataset in a scrollable pileup widget

        Args:
            :param contig: contig of locus to view
            :param start: start position of locus to view
            :param end: end position of locus to view
            reference: genome build. Default is hg19
            label: name of feature track
            showPlot: Disables widget, used for testing. Default is true.

        Returns:
            pileup view for features
        """

        contig_trimmed, contig_full = formatContig(contig)

        # Filter dataset
        filtered = self.dataset.transform(lambda r: r.filter(((r.referenceName == contig_full) | (r.referenceName == contig_trimmed))
                                                           & (r.start < end) & (r.end > start)))

        # convert to GA4GH JSON to be consumed by mango-pileup module
        json = self.ac._jvm.org.bdgenomics.mango.converters.GA4GHutil.featureDatasetToJSON(filtered._jvmRdd)

        # visualize
        if (showPlot):
            # make feature track
            tracks=[Track(viz="features", label=label, source=pileup.sources.GA4GHFeatureJson(json))]
            locus="%s:%i-%i" % (contig, start, end)
            return pileup.PileupViewer(locus=locus, reference=reference, tracks=tracks)
Ejemplo n.º 3
0
    def test_visualization(self):
        dataframe = read_vcf(self.exampleFile(filename))

        assert(dataframe._pileup_visualization == "variantJson")
        tracks=[Track(viz="variants", label="my variants", source=pileup.sources.DataFrameSource(dataframe))]
        reads = pileup.PileupViewer(chrom="chr22",start=10436,stop=10564, reference="hg19", tracks=tracks)
        assert(str(type(reads)) == '<class \'bdgenomics.mango.pileup.pileupViewer.PileupViewer\'>')
        assert(reads.chrom == 'chr22')
Ejemplo n.º 4
0
    def viewPileup(self,
                   contig,
                   start,
                   end,
                   reference='hg19',
                   label="Reads",
                   multipleGroupNames=False,
                   showPlot=True):
        """
        Visualizes a portion of this AlignmentDataset in a scrollable pileup widget

        Args:
            :param contig: contig of locus to view
            :param start: start position of locus to view
            :param end: end position of locus to view
            :param reference: genome build. Default is hg19
            :param label: name of alignment track
            :param multipleGroupName: determines whether to different show tracks for each group name.
            If false, coalesces into one track.
            :param showPlot: Disables widget, used for testing. Default is true.

        Returns:
            pileup view for alignments
        """
        contig_trimmed = contig.lstrip(CHR_PREFIX)

        # Filter Dataset
        filtered = self.dataset.transform(lambda r: r.filter(
            ((r.referenceName == contig) | (r.referenceName == contig_trimmed))
            & (r.start < end) & (r.end > start) & (r.readMapped)))

        # convert to GA4GH JSON to be consumed by mango-viz module
        json_map = self.ac._jvm.org.bdgenomics.mango.converters.GA4GHutil.alignmentRecordDatasetToJSON(
            filtered._jvmRdd, multipleGroupNames)

        # visualize
        if (showPlot):
            # make pileup tracks
            tracks = []
            # iterate through all group names and make a track for each.
            for groupName in json_map:
                # set label if only one track. Otherwise, set to group names.
                thisLabel = groupName if multipleGroupNames else label

                # create new track for this recordGroupName. files with unspecified recordGroup name
                # have a default label of "1"
                track = Track(viz="pileup",
                              label=thisLabel,
                              source=pileup.sources.GA4GHAlignmentJson(
                                  json_map[groupName]))
                tracks.append(track)

            locus = "%s:%i-%i" % (contig, start, end)
            return pileup.PileupViewer(locus=locus,
                                       reference=reference,
                                       tracks=tracks)
Ejemplo n.º 5
0
    def test_pileup(self):
        track = pileup.Track(viz="pileup",
                             label="myReads",
                             source=pileup.sources.GA4GHAlignmentJson('{}'))

        x = pileup.PileupViewer(locus="chr17:1-250",
                                reference="hg19",
                                tracks=[track])
        assert (x.reference == 'hg19')
        assert (x.tracks[0] == track)
Ejemplo n.º 6
0
    def test_variants(self):
        track = pileup.Track(viz="variants",
                             label="myVariants",
                             source=pileup.sources.GA4GHVariantJson('{}'))

        x = pileup.PileupViewer(locus="chr17:1-250",
                                reference="hg19",
                                tracks=[track])
        assert (x.reference == 'hg19')
        assert (x.tracks[0] == track)
Ejemplo n.º 7
0
    def test_genotypes(self):
        track = pileup.Track(viz="genotypes",
                             label="myGenotypes",
                             source=pileup.sources.VcfDataSource('{}'))

        x = pileup.PileupViewer(locus="chr22:21340030-21340150",
                                reference="hg19",
                                tracks=[track])
        assert (x.reference == 'hg19')
        assert (x.tracks[0] == track)
Ejemplo n.º 8
0
 def test_toSVG(self):
     track = pileup.Track(
         viz="genes",
         label="myGenes",
         source=pileup.sources.BigBedDataSource('fakeGenes.bb'))
     x = pileup.PileupViewer(chrom="chr17",
                             start=1,
                             stop=250,
                             reference="hg19",
                             tracks=[track])
     x.getSVG()
Ejemplo n.º 9
0
    def test_genes(self):
        track = pileup.Track(
            viz="genes",
            label="myGenes",
            source=pileup.sources.BigBedDataSource('fakeGenes.bb'))

        x = pileup.PileupViewer(locus="chr17:1-250",
                                reference="hg19",
                                tracks=[track])
        assert (x.reference == 'hg19')
        assert (x.tracks[0] == track)
Ejemplo n.º 10
0
    def test_features(self):
        track = pileup.Track(viz="features",
                             label="myFeatures",
                             source=pileup.sources.GA4GHFeatureJson('{}'))

        x = pileup.PileupViewer(chrom="chr17",
                                start=1,
                                stop=250,
                                reference="hg19",
                                tracks=[track])
        assert (x.reference == 'hg19')
        assert (x.tracks[0] == track)
Ejemplo n.º 11
0
    def test_minimal_pileup_html(self):
        track = pileup.Track(viz="pileup",
                             label="myReads",
                             source=pileup.sources.GA4GHAlignmentJson('{}'))

        w = pileup.PileupViewer(locus="chr17:1-250",
                                reference="hg19",
                                tracks=[track])
        output = StringIO()
        state = dependency_state(w, drop_defaults=True)
        embed_minimal_html(output, views=w, drop_defaults=True, state=state)
        content = output.getvalue()
        assert content.splitlines()[0] == '<!DOCTYPE html>'
Ejemplo n.º 12
0
    def test_snippet(self):
        class Parser(HTMLParser):
            state = 'initial'
            states = []

            def handle_starttag(self, tag, attrs):
                attrs = dict(attrs)
                if tag == 'script' and attrs.get(
                        'type',
                        '') == "application/vnd.jupyter.widget-state+json":
                    self.state = 'widget-state'
                    self.states.append(self.state)
                elif tag == 'script' and attrs.get(
                        'type',
                        '') == "application/vnd.jupyter.widget-view+json":
                    self.state = 'widget-view'
                    self.states.append(self.state)

            def handle_endtag(self, tag):
                self.state = 'initial'

            def handle_data(self, data):
                if self.state == 'widget-state':
                    manager_state = json.loads(data)['state']
                    assert len(manager_state) == 2
                    self.states.append('check-widget-state')
                elif self.state == 'widget-view':
                    view = json.loads(data)
                    assert isinstance(view, dict)
                    self.states.append('check-widget-view')

        track = pileup.Track(viz="variants",
                             label="myVariants",
                             source=pileup.sources.GA4GHVariantJson('{}'))

        w = pileup.PileupViewer(chrom="chr17",
                                start=1,
                                stop=250,
                                reference="hg19",
                                tracks=[track])

        state = dependency_state(w, drop_defaults=True)
        snippet = embed_snippet(views=w, drop_defaults=True, state=state)
        parser = Parser()
        parser.feed(snippet)
        assert parser.states == [
            'widget-state', 'check-widget-state', 'widget-view',
            'check-widget-view'
        ]
Ejemplo n.º 13
0
    def test_embed_pileup(self):

        track = pileup.Track(viz="features",
                             label="myFeatures",
                             source=pileup.sources.GA4GHFeatureJson('{}'))

        w = pileup.PileupViewer(locus="chr17:1-250",
                                reference="hg19",
                                tracks=[track])
        state = dependency_state(w, drop_defaults=True)
        data = embed_data(views=w, drop_defaults=True, state=state)

        state = data['manager_state']['state']
        views = data['view_specs']

        assert len(views) == 1

        model_names = [s['model_name'] for s in state.values()]
        assert 'PileupViewerModel' in model_names