Пример #1
0
	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])
Пример #2
0
		max_spacer = int(options.spacer)

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, 
Пример #3
0
        "PWM-file supplied, left halfsite: %s, right halfsite: %s\n" %
        (len(pwm_left), len(pwm_right)))
    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) +
Пример #4
0
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)
Пример #5
0
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)