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