#!/usr/bin/env python3 from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure from matplotlib.widgets import SpanSelector from PyQt5 import QtCore from PyQt5 import QtWidgets from PyQt5 import QtGui from rawprasslib import load_raw import prasopes.graphtools as gt import prasopes.filetools as ft import prasopes.zcetools as zce import prasopes.drltools as drl import prasopes.config as cf import prasopes.tangoicons import sys import matplotlib import logging import os.path matplotlib.use("Qt5Agg") def load_file(chrom_plot, spc, d_set, ms_s, fn, chrom_s, settings): """populates dataset and plots it""" directory=settings.value("open_folder") if fn[0] is not None: directory=fn[0] filename = QtWidgets.QFileDialog.getOpenFileName( caption="Open spectrum", directory=directory, filter="Finnigan RAW files (*.raw, *.RAW)")[0] if filename is not '': d_set['chrom_dat'], d_set['masses'], d_set['matrix'] \ = load_raw(filename, settings.value("tmp_location")) gt.populate(chrom_plot, spc, d_set, ms_s, chrom_s) fn[0] = filename def update_spectrum(event, chromatogram, spect, ds, ms, fn, chrom, config): if fn[0] is not None and event.key is "f5": slims = [spect.get_xlim(), spect.get_ylim()] ds['chrom_dat'], ds['masses'], ds['matrix'] \ = load_raw(fn[0], config.value("tmp_location")) gt.populate(chromatogram, spect, ds, ms, chrom) spect.set_xlim(slims[0]) spect.set_ylim(slims[1]) spect.get_figure().canvas.draw() def main(): # ds for data_set, ms for mass_spec_dataset, chrom for chrom_dataset ds = dict(chrom_dat=None, masses=None, matrix=None) ms = dict(x=[0], y=[0], line=None, annotation=[], name="Spectrum", xlabel="m/z", ylabel="ion count", xtics=20) chrom = dict(x=[0], y=[0], line=None, t_start=None, t_end=None, name="Chromatogram", xlabel="time(min)", ylabel="total ion count", timesarg=None) filename = [None] drlcache = [None, None, None] config = cf.settings() p_logger = logging.getLogger('parseLogger') logging.basicConfig() p_logger.setLevel("WARN") graph = Figure(figsize=(5, 4), dpi=100, facecolor="None") chromatogram = graph.add_subplot(211, facecolor=(1, 1, 1, 0.8)) spectrum = graph.add_subplot(212, facecolor=(1, 1, 1, 0.8)) graph.tight_layout() mpl_canvas = FigureCanvas(graph) mpl_canvas.setStyleSheet("background-color:transparent;") mpl_canvas.setAutoFillBackground(False) mpl_canvas.setFocusPolicy(QtCore.Qt.ClickFocus) gt.pan_factory(chromatogram) gt.zoom_factory(chromatogram, 1.15) gt.arrow_factory(spectrum, chromatogram, ds, ms, chrom) gt.pan_factory(spectrum, ms) gt.zoom_factory(spectrum, 1.15, ms) mass_selector = SpanSelector( spectrum, lambda x_min, x_max: gt.pick_masses( x_min, x_max, spectrum, ms), 'horizontal', minspan=0.01, useblit=True, rectprops=dict(alpha=0.15, facecolor='purple'), button=3) time_selector = SpanSelector( chromatogram, lambda x_min, x_max: gt.pick_times( x_min, x_max, spectrum, ds, chromatogram, ms, chrom), 'horizontal', useblit=True, rectprops=dict( alpha=0.15, facecolor='purple'), button=3) app = QtWidgets.QApplication(sys.argv) main_window = QtWidgets.QMainWindow(windowTitle="Prasopes") if QtGui.QIcon.themeName() is "": QtGui.QIcon.setThemeName("TangoMFK") openact = QtWidgets.QAction(QtGui.QIcon.fromTheme( "document-open"), "&Open...") openact.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_O) openact.triggered.connect(lambda: load_file( chromatogram, spectrum, ds, ms, filename, chrom, config)) exportact = QtWidgets.QAction(QtGui.QIcon.fromTheme( "document-save-as"), "&Export...") exportact.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_E) exportact.triggered.connect(lambda: ft.export_dial( ms, chrom, filename, main_window)) settingsact = QtWidgets.QAction(QtGui.QIcon.fromTheme( "preferences-system"), "&Settings...") settingsact.triggered.connect(lambda: cf.dial(main_window)) quitact = QtWidgets.QAction(QtGui.QIcon.fromTheme( "application-exit"), "&Quit") quitact.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_Q) quitact.triggered.connect(main_window.close) zceact = QtWidgets.QAction(QtGui.QIcon.fromTheme( "applications-utilities"), "&TSQ zce...") zceact.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_T) zceact.triggered.connect(lambda: zce.dialog( main_window, ds, filename)) drlact = QtWidgets.QAction(QtGui.QIcon.fromTheme( "applications-utilities"), "&DRL...") drlact.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_D) drlact.triggered.connect(lambda: drl.main_window( main_window, ds, filename, drlcache)) file_menu = QtWidgets.QMenu('&File', main_window) main_window.menuBar().addMenu(file_menu) file_menu.addAction(openact) file_menu.addAction(exportact) file_menu.addSeparator() file_menu.addAction(settingsact) file_menu.addSeparator() file_menu.addAction(quitact) tools_menu = QtWidgets.QMenu('&Tools', main_window) main_window.menuBar().addMenu(tools_menu) tools_menu.addAction(zceact) tools_menu.addAction(drlact) """tools_menu.addAction('&TSQ zce', lambda: zce.dialog( main_window, ds, filename), QtCore.Qt.CTRL + QtCore.Qt.Key_T) tools_menu.addAction('&DRL..', lambda: drl.main_window( main_window, ds, filename, drlcache), QtCore.Qt.CTRL + QtCore.Qt.Key_D)""" main_widget = QtWidgets.QWidget(main_window) main_window.setCentralWidget(main_widget) toolBar = QtWidgets.QToolBar(main_window) toolBar.setAllowedAreas(QtCore.Qt.TopToolBarArea) toolBar.setFloatable(False) toolBar.setMovable(False) toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) toolBar.addAction(openact) toolBar.addAction(exportact) toolBar.addSeparator() toolBar.addAction(zceact) toolBar.addAction(drlact) layout = QtWidgets.QVBoxLayout(main_widget) layout.addWidget(toolBar) layout.addWidget(mpl_canvas) mpl_canvas.setFocus() mpl_canvas.mpl_connect('key_press_event', lambda event: update_spectrum(event, chromatogram, spectrum, ds, ms, filename, chrom, config)) if len(sys.argv) == 2: raw_file = sys.argv[1] filename[0] = raw_file ds['chrom_dat'], ds['masses'], ds['matrix'] = load_raw( raw_file, config.value("tmp_location")) gt.populate(chromatogram, spectrum, ds, ms, chrom) else: gt.pop_plot(spectrum, ms) gt.pop_plot(chromatogram, chrom) main_window.show() sys.exit(app.exec_()) if __name__ == "__main__": main()