if options.cutoff: cutoff = options.cutoff if options.pwmfile: id, pwm_left,pwm_middle,pwm_right = read_pwm_triplet(options.pwmfile) sys.stderr.write("PWM-file supplied, left site: %s, middle site: %s, right site: %s\n" % (len(pwm_left), len(pwm_middle), len(pwm_right))) if not options.cutoff: s_max = max_score(pwm_left) + max_score(pwm_right) + max_score(pwm_middle) s_min = min_score(pwm_left) + min_score(pwm_right) + min_score(pwm_middle) sys.stderr.write("No cutoffs specified, using %s as a cutoff (%s of maxscore)\n" % (SCORE_FRACTION * (s_max - s_min) + s_min, SCORE_FRACTION)) cutoff = SCORE_FRACTION * (s_max - s_min) + s_min bed = options.bed f = Fasta(inputfile) for (id,seq) in f.items(): result = scan_triplet(seq.upper(), pwm_left, pwm_middle, pwm_right, min_spacer, max_spacer, cutoff, nreport) for (score, pos, spacer1, spacer2, strand) in result: if bed: first = id.split(" ")[0] (chr,loc) = first.split(":") if loc: (start, end) = map(int, loc.split("-")) print "%s\t%s\t%s\t%s" % (chr, start + pos, start + pos + len(pwm_left) + spacer1 + len(pwm_middle) + spacer2 + len(pwm_right), score) else: print "%s\t%s\t%s\t%s" % (id, pos, pos + len(pwm_left) + spacer1 + len(pwm_middle) + spacer2 + len(pwm_right), score) else: print "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s %s %s %s %s" % ( id, "p53scan", "misc_feature",
class App: def open_fasta_file(self): name = tkFileDialog.askopenfilename() if name: try: self.f = Fasta(name) self.loaded_file = os.path.split(name)[-1] self.mlb.delete(0, self.mlb.size() - 1) self.status.set("Loaded %s - %s" % (self.loaded_file, self.f)) self.scanmenu.entryconfig(0, state=NORMAL) except: tkMessageBox.showerror( "Error opening file", "Error opening %s.\nIs it a valid FASTA file?" % os.path.split(name)[-1]) def save_results(self): name = tkFileDialog.asksaveasfilename(filetypes=[("gff", "*.gff")], defaultextension=".gff") if name: f = open(name, "w") for row in self.mlb.get(0, self.mlb.size() - 1): f.write("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s %s %s\n" % (row[0], "p53scan", "p53bs", row[1], row[2], row[3], "+", ".", row[4], row[5], row[6])) f.close() self.status.set("p53scan results written to %s" % os.path.split(name)[-1]) def scan_file(self): d = ScanDialog(self.master) if d.scan_ok: min_spacer = d.min_spacer max_spacer = d.max_spacer nreport = d.nreport cutoffs = [] if d.defaults: cutoffs = DEFAULT_CUTOFFS elif d.cutoff: cutoffs = (max_spacer - min_spacer + 1) * [d.cutoff] d.destroy() self.status.set("Scanning %s for p53 binding sites" % self.loaded_file) self.mlb.delete(0, self.mlb.size() - 1) count = 0 for (id, seq) in self.f.items(): result = scan(seq.upper(), PWM_LEFT, PWM_RIGHT, min_spacer, max_spacer, cutoffs, nreport) for (score, pos, spacer, strand) in result: count += 1 self.mlb.insert( END, (id, pos, pos + len(PWM_LEFT) + spacer + len(PWM_RIGHT), score, seq[pos:pos + len(PWM_LEFT)], seq[pos + len(PWM_LEFT):pos + len(PWM_LEFT) + spacer], seq[pos + len(PWM_LEFT) + spacer:pos + len(PWM_LEFT) + spacer + len(PWM_RIGHT)])) self.status.set("Done scanning %s. Found %s binding sites." % (self.loaded_file, count)) self.filemenu.entryconfig(1, state=NORMAL) def exit(self): sys.exit() def resize(self, event): frame.pack() def about(self): tkMessageBox.showinfo("About %s" % NAME, DESCRIPTION) def __init__(self, master): # create a menu self.master = master master.title("p53scan") menu = Menu(master) master.config(menu=menu) self.filemenu = Menu(menu, tearoff=0) menu.add_cascade(label="File", menu=self.filemenu) self.filemenu.add_command(label="Open Fastafile...", command=self.open_fasta_file) self.filemenu.add_command(label="Save Results...", command=self.save_results) self.filemenu.add_separator() self.filemenu.add_command(label="Exit", command=self.exit) self.filemenu.entryconfig(1, state=DISABLED) self.scanmenu = Menu(menu, tearoff=0) menu.add_cascade(label="Scan", menu=self.scanmenu) self.scanmenu.add_command(label="Scan file", command=self.scan_file) self.scanmenu.entryconfig(1, state=DISABLED) helpmenu = Menu(menu, tearoff=0) menu.add_cascade(label="Help", menu=helpmenu) helpmenu.add_command(label="About...", command=self.about) self.status = StatusBar(master) self.status.pack(side=BOTTOM, fill=X) self.status.set("No file loaded") self.mlb = MultiListbox(master, (('id', 30), ('start', 4), ('end', 4), ('score', 4), ('left', 15), ('spacer', 10), ('right', 15))) self.mlb.pack(expand=YES, fill=BOTH)
if not options.cutoff: s_max = max_score(pwm_left) + max_score(pwm_right) s_min = min_score(pwm_left) + min_score(pwm_right) sys.stderr.write( "No cutoffs specified, using %s as a cutoff (%s of maxscore)\n" % (SCORE_FRACTION * (s_max - s_min) + s_min, SCORE_FRACTION)) cutoffs = [ SCORE_FRACTION * (s_max - s_min) + s_min for i in range(max_spacer - min_spacer + 1) ] bed = options.bed f = Fasta(inputfile) for (id, seq) in f.items(): result = scan(seq.upper(), pwm_left, pwm_right, min_spacer, max_spacer, cutoffs, nreport) for (score, pos, spacer, strand) in result: if bed: first = id.split(" ")[0] (chr, loc) = first.split(":") if loc: (start, end) = map(int, loc.split("-")) print "%s\t%s\t%s\t%s" % (chr, start + pos, start + pos + len(pwm_left) + spacer + len(pwm_right), score) else: print "%s\t%s\t%s\t%s" % (id, pos, pos + len(pwm_left) + spacer + len(pwm_right), score) else:
class App: def open_fasta_file(self): name = tkFileDialog.askopenfilename() if name: try: self.f = Fasta(name) self.loaded_file = os.path.split(name)[-1] self.mlb.delete(0, self.mlb.size() - 1) self.status.set("Loaded %s - %s" % (self.loaded_file, self.f)) self.scanmenu.entryconfig(0, state=NORMAL) except: tkMessageBox.showerror("Error opening file", "Error opening %s.\nIs it a valid FASTA file?" % os.path.split(name)[-1]) def save_results(self): name = tkFileDialog.asksaveasfilename(filetypes=[("gff", "*.gff")], defaultextension=".gff") if name: f = open(name, "w") for row in self.mlb.get(0, self.mlb.size() - 1): f.write("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s %s %s\n" % (row[0], "p63scan", "p63bs", row[1], row[2], row[3], "+", ".", row[4], row[5], row[6])) f.close() self.status.set("p63scan results written to %s" % os.path.split(name)[-1]) def scan_file(self): d = ScanDialog(self.master) if d.scan_ok: min_spacer = d.min_spacer max_spacer = d.max_spacer nreport = d.nreport cutoffs = [] if d.defaults: cutoffs = DEFAULT_CUTOFFS elif d.cutoff: cutoffs = (max_spacer - min_spacer + 1) * [d.cutoff] d.destroy() self.status.set("Scanning %s for p63 binding sites" % self.loaded_file) self.mlb.delete(0, self.mlb.size() - 1) count = 0 for (id,seq) in self.f.items(): result = scan(seq.upper(), PWM_LEFT, PWM_RIGHT, min_spacer, max_spacer, cutoffs, nreport) for (score, pos, spacer, strand) in result: count += 1 self.mlb.insert(END,(id, pos, pos + len(PWM_LEFT) + spacer + len(PWM_RIGHT), score, seq[pos: pos + len(PWM_LEFT)], seq[pos + len(PWM_LEFT): pos + len(PWM_LEFT) + spacer], seq[pos + len(PWM_LEFT) + spacer: pos + len(PWM_LEFT) + spacer + len(PWM_RIGHT)] )) self.status.set("Done scanning %s. Found %s binding sites." % (self.loaded_file, count)) self.filemenu.entryconfig(1, state=NORMAL) def exit(self): sys.exit() def resize(self, event): frame.pack() def about(self): tkMessageBox.showinfo("About %s" % NAME, DESCRIPTION) def __init__(self, master): # create a menu self.master = master master.title("p63scan") menu = Menu(master) master.config(menu=menu) self.filemenu = Menu(menu,tearoff=0) menu.add_cascade(label="File", menu=self.filemenu) self.filemenu.add_command(label="Open Fastafile...", command=self.open_fasta_file) self.filemenu.add_command(label="Save Results...", command=self.save_results) self.filemenu.add_separator() self.filemenu.add_command(label="Exit", command=self.exit) self.filemenu.entryconfig(1, state=DISABLED) self.scanmenu = Menu(menu,tearoff=0) menu.add_cascade(label="Scan", menu=self.scanmenu) self.scanmenu.add_command(label="Scan file", command=self.scan_file) self.scanmenu.entryconfig(1, state=DISABLED) helpmenu = Menu(menu,tearoff=0) menu.add_cascade(label="Help", menu=helpmenu) helpmenu.add_command(label="About...", command=self.about) self.status = StatusBar(master) self.status.pack(side=BOTTOM, fill=X) self.status.set("No file loaded") self.mlb = MultiListbox(master, (('id', 30), ('start', 4),('end',4), ('score', 4), ('left', 15), ('spacer', 10), ('right', 15))) self.mlb.pack(expand=YES, fill=BOTH)