Skip to content

Commit

Permalink
added ability to plot custom range to GUI
Browse files Browse the repository at this point in the history
  • Loading branch information
Jacob-Munro-VCCRI committed Feb 10, 2017
1 parent 0d6b83a commit be25f2a
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 11 deletions.
28 changes: 19 additions & 9 deletions svpv/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ def __init__(self, par):
self.set_sample_selector()
self.genotype_selector = None
self.set_genotype_selector()
self.plot_custom = None
self.set_plot_custom()
self.filters = None
self.set_filters()
self.sv_chooser = None
Expand All @@ -57,7 +59,7 @@ def setup_static_features(self):
self.list.destroy()
self.list = tk.Button(self.buttons_1, text="Apply Filters", command=self.apply_filters)
self.list.grid(row=0, column=1, padx=40, sticky=tk.E)
self.buttons_1.grid(row=3, column=0, columnspan=2, sticky=tk.EW, padx=10)
self.buttons_1.grid(row=4, column=0, columnspan=2, sticky=tk.EW, padx=10)

if self.buttons_2:
self.buttons_2.destroy()
Expand All @@ -68,7 +70,7 @@ def setup_static_features(self):
self.viewGTs.grid(row=0, column=0, padx=25, sticky=tk.W)
if self.viewSV:
self.viewSV.destroy()
self.viewSV = tk.Button(self.buttons_2, text="Plot Selected SV", command=self.view_sv)
self.viewSV = tk.Button(self.buttons_2, text="Plot Selected SV", command=self.plot_sv)
self.viewSV.grid(row=0, column=1, padx=25, sticky=tk.W)
if self.plotAll:
self.plotAll.destroy()
Expand All @@ -80,7 +82,7 @@ def setup_static_features(self):
self.display_cb = tk.Checkbutton(self.buttons_2, text='display plot on creation', variable=self.display_var,
onvalue=1, offvalue=0)
self.display_cb.grid(row=1, column=1, padx=25, sticky=tk.E)
self.buttons_2.grid(row=5, column=0, columnspan=2, sticky=tk.EW, padx=10)
self.buttons_2.grid(row=6, column=0, columnspan=2, sticky=tk.EW, padx=10)

def text_size(self, opt):
if opt == 1:
Expand Down Expand Up @@ -112,23 +114,29 @@ def set_genotype_selector(self):
self.genotype_selector = gw.SampleGenotypeSelector(self, self.current_samples)
self.genotype_selector.grid(row=1, column=1, sticky=tk.NSEW, padx=10)

def set_plot_custom(self):
if self.plot_custom:
self.plot_custom.destroy()
self.plot_custom = gw.PlotCustom(self)
self.plot_custom.grid(row=2, column=0, columnspan=2, sticky=tk.NSEW, pady=2, padx=10)

def set_filters(self):
if self.filters:
self.filters.destroy()
self.filters = gw.Filters(self)
self.filters.grid(row=2, column=0, columnspan=2, sticky=tk.NSEW, pady=2, padx=10)
self.filters.grid(row=3, column=0, columnspan=2, sticky=tk.NSEW, pady=2, padx=10)

def set_sv_chooser(self):
if self.sv_chooser:
self.sv_chooser.destroy()
self.sv_chooser = gw.SvChooser(self, self.svs, self.par.run.vcf.count)
self.sv_chooser.grid(row=4, column=0, sticky=tk.NSEW, padx=10, columnspan=2)
self.sv_chooser.grid(row=5, column=0, sticky=tk.NSEW, padx=10, columnspan=2)

def set_info_box(self, message=''):
if self.info_box:
self.info_box.destroy()
self.info_box = gw.InfoBox(self, message)
self.info_box.grid(row=6, column=0, sticky=tk.NSEW, padx=10, columnspan=2)
self.info_box.grid(row=7, column=0, sticky=tk.NSEW, padx=10, columnspan=2)

def reset_filters(self):
self.set_info_box()
Expand Down Expand Up @@ -209,14 +217,16 @@ def apply_filters(self):
self.svs = self.par.run.vcf.filter_svs(self.par.filter)
self.set_sv_chooser()

def view_sv(self):
def plot_sv(self, sv=None):
self.set_info_box()
if not self.current_samples:
self.info_box.message.config(text="Error: No Samples Selected")
elif self.sv_chooser.sv_fl.selected_idx is None:
elif self.sv_chooser.sv_fl.selected_idx is None and sv is None:
self.info_box.message.config(text="Error: No SV Selected")
else:
plot = Plot(self.svs[self.sv_chooser.sv_fl.selected_idx], self.current_samples, self.par)
if not sv:
sv = self.svs[self.sv_chooser.sv_fl.selected_idx]
plot = Plot(sv, self.current_samples, self.par)
if self.display_var.get():
self.filename = plot.plot_figure(group=self.par.plot.grouping, display=self.par.run.display)
else:
Expand Down
22 changes: 21 additions & 1 deletion svpv/gui_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
# author: Jacob Munro, Victor Chang Cardiac Research Institute
# """
from __future__ import print_function
from .vcf import SV
try:
import Tkinter as tk
import tkFileDialog
Expand Down Expand Up @@ -62,7 +63,6 @@ def switch_vcf(self):
if self.vcf_var.get() != 0:
self.parent.switch_vcf(self.vcf_var.get()-1)


class SampleSelector(tk.LabelFrame):
def __init__(self, parent, samples):
tk.LabelFrame.__init__(self, parent, text="Sample Selection")
Expand Down Expand Up @@ -139,6 +139,26 @@ def get_selection(self):
gts.append(self.gts[i])
return gts

class PlotCustom(tk.LabelFrame):
def __init__(self, parent):
tk.LabelFrame.__init__(self, parent, text="Plot Custom Range")
self.parent = parent
self.lab = tk.Label(self, text='Custom range:')
self.rangeVar = tk.StringVar(value='chrX:YYYYYY-ZZZZZZ')
self.entry = tk.Entry(self, textvariable=self.rangeVar, width=25)
self.setter = tk.Button(self, text="Plot Custom", command=self.do_plot)
self.lab.grid(row=0, column=0, sticky=tk.NSEW)
self.entry.grid(row=0, column=1, sticky=tk.NSEW)
self.setter.grid(row=0, column=2, sticky=tk.NSEW)

def do_plot(self):
try:
chrom, pos, end = re.split('[:-]', self.rangeVar.get())[0:3]
custom = SV(chrom, pos, end, 'CUSTOM', '.', '.', '.')
except ValueError:
print("invalid region")
return None
self.parent.plot_sv(custom)

class Filters(tk.LabelFrame):
def __init__(self, parent):
Expand Down
4 changes: 3 additions & 1 deletion svpv/plot.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def __init__(self, sv, samples, par):
h_bkpt_wind = (par.run.bkpt_win * par.run.rd_len) // 2

# show depth over whole region but zoom in on breakpoints if necessary
if sv.svtype in ('DEL', 'DUP', 'CNV', 'INV'):
if sv.svtype in ('DEL', 'DUP', 'CNV', 'INV', 'CUSTOM'):
start = sv.pos - par.run.expansion * (sv.end - sv.pos + 1)
end = sv.end + par.run.expansion * (sv.end - sv.pos + 1)
self.region_bins = Bins(sv.chrom, start, end, ideal_num_bins=par.run.num_bins)
Expand Down Expand Up @@ -163,6 +163,8 @@ def print_data(self):
svs.append(sv)
if svs:
SV.print_SVs(svs, svs_file, self.par.run.vcf.name)
if self.sv.svtype == 'CUSTOM':
SV.print_SVs([self.sv], svs_file, 'CUSTOM')
# ref vcf
if self.par.run.ref_vcf:
svs = []
Expand Down

0 comments on commit be25f2a

Please sign in to comment.