Esempio n. 1
0
    def initalize_dialog(self, config, massdat):
        """
        Initilizes dialog and the layout. Calls run_autocorr.
        :param config: UniDecConfig object
        :param massdat: Array of mass distribution (N x 2)
        :return: None
        """
        self.config = config
        self.massdat = massdat

        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)

        hbox = wx.BoxSizer(wx.HORIZONTAL)
        sb = wx.StaticBox(panel, label='Autocorrelation')
        sbs = wx.StaticBoxSizer(sb, orient=wx.VERTICAL)

        self.plot1 = plot1d.Plot1d(panel)
        sbs.Add(self.plot1)
        hbox.Add(sbs)
        self.listpanel = CorrListCtrlPanel(panel)
        hbox.Add(self.listpanel)
        panel.SetSizer(hbox)

        hboxend = wx.BoxSizer(wx.HORIZONTAL)
        okbutton = wx.Button(self, label='Ok')
        # closebutton = wx.Button(self, label='Cancel')
        hboxend.Add(okbutton)
        # hboxend.Add(closebutton, flag=wx.LEFT, border=5)
        vbox.Add(panel, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
        vbox.Add(hboxend, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10)
        self.SetSizer(vbox)
        okbutton.Bind(wx.EVT_BUTTON, self.on_close)
        # closebutton.Bind(wx.EVT_BUTTON, self.on_close_cancel)
        self.CenterOnParent()
        self.run_autocorr(0)
Esempio n. 2
0
    def __init__(self,
                 parent,
                 data_list,
                 config=None,
                 yvals=None,
                 mode="1D",
                 pks=None,
                 pksmode="mz",
                 *args,
                 **kwargs):
        """
        A simple window for animating mulitple 1D or 2D plots in a sequence.
        :param parent: Parent window. Passed to wx.Frame.
        :param data_list: List of data to be plotted
        :param config: UniDecConfig object
        :param yvals: Titles for the plots.
        :param mode: 1 = 1D plots, 2 = 2D plots
        :param args:
        :param kwargs: 
        :return: None
        """
        wx.Frame.__init__(self, parent, title="Plot Animations", size=(-1, -1))
        # Initialize parameters
        if mode == "2D":
            self.mode = 2
        else:
            self.mode = 1
        if config is None:
            self.config = unidecstructure.UniDecConfig()
            self.config.initialize()
        else:
            self.config = config

        self.datalist = data_list
        self.pks = pks
        self.pksmode = pksmode

        if self.pksmode == "mz":
            self.xlabel = "m/z (Th)"
            self.testkda = False
        elif self.pksmode == "CCS":
            self.xlabel = "CCS"
            self.testkda = False
        else:
            self.xlabel = "Mass (Da)"
            self.testkda = True

        self.yvals = yvals
        if self.yvals is None:
            self.yvals = list(range(0, len(data_list)))

        self.dim = 1
        self.pos = -1
        self.play = False

        self.animation = None

        # Create GUI

        # Make the menu
        filemenu = wx.Menu()
        menu_save_fig = filemenu.Append(wx.ID_ANY, "Save Figures",
                                        "Save all figures at selected path")
        self.Bind(wx.EVT_MENU, self.on_save_fig, menu_save_fig)

        menu_bar = wx.MenuBar()
        menu_bar.Append(filemenu, "&File")
        self.SetMenuBar(menu_bar)

        self.CreateStatusBar(2)
        panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)

        if self.mode == 1:
            self.plot = plot1d.Plot1d(panel)
        else:
            self.plot = plot2d.Plot2d(panel)
        sizer.Add(self.plot, 0, wx.EXPAND)

        controlsizer = wx.BoxSizer(wx.HORIZONTAL)

        sb = wx.StaticBox(panel, label='Frame Rate (ms/frame)')
        sbs = wx.StaticBoxSizer(sb, orient=wx.VERTICAL)
        frmax = 2000

        frmin = 1
        self.frslider = wx.Slider(
            panel, wx.ID_ANY, 500, frmin, frmax, (30, 60), (250, -1),
            wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_LABELS)
        self.frslider.SetTickFreq(100)
        sbs.Add(self.frslider, 0, wx.EXPAND)
        self.Bind(wx.EVT_COMMAND_SCROLL_THUMBRELEASE, self.update_framerate,
                  self.frslider)
        controlsizer.Add(sbs, 0, wx.EXPAND)

        self.playbutton = wx.ToggleButton(panel, label="Play")
        self.nextbutton = wx.Button(panel, label="Next")
        self.backbutton = wx.Button(panel, label="Back")

        controlsizer.Add(self.backbutton, 0, wx.EXPAND)
        controlsizer.Add(self.playbutton, 0, wx.EXPAND)
        controlsizer.Add(self.nextbutton, 0, wx.EXPAND)

        self.Bind(wx.EVT_TOGGLEBUTTON, self.on_play, self.playbutton)
        self.Bind(wx.EVT_BUTTON, self.on_next, self.nextbutton)
        self.Bind(wx.EVT_BUTTON, self.on_back, self.backbutton)

        self.ctlautoscale = wx.CheckBox(panel, label="Autoscale")
        controlsizer.Add(self.ctlautoscale, 0, wx.EXPAND)
        if self.mode == 2:
            self.ctlautoscale.SetValue(True)

        sizer.Add(controlsizer, 0, wx.EXPAND)

        panel.SetSizer(sizer)
        sizer.Fit(self)

        self.Bind(wx.EVT_CLOSE, self.on_close, self)

        self.init()
        self.Centre()
        self.Show(True)
Esempio n. 3
0
    def __init__(self, parent, datalist, xarray, yarray, config=None, xtype=0):
        wx.Frame.__init__(self, parent,
                          title="Mass Defect Extractor")  # ,size=(-1,-1))

        self.xtype = xtype
        if config is None:
            self.config = unidecstructure.UniDecConfig()
            self.config.initialize()
            self.config.discreteplot = 0
            self.config.cmap = u"jet"
            self.config.peakcmap = u"rainbow"
            self.config.separation = 0.025
        else:
            self.config = config

        # Setup initial values
        try:
            self.directory = parent.directory
        except:
            self.directory = os.getcwd()

        self.outfname = os.path.splitext(self.config.filename)[0]
        if self.outfname != "":
            self.outfname += "_"

        self.window = 0.05
        self.data = datalist
        self.xdat = xarray
        self.ydat = yarray
        defaultexchoice = "Local Max"
        self.totgrid = []
        self.grid = []
        self.fitdats = None
        self.fits = None

        # Make the menu
        filemenu = wx.Menu()
        menu_oligomer_tools = filemenu.Append(wx.ID_ANY,
                                              "Generate from Masses",
                                              "Oligomer and Mass Tools")
        filemenu.AppendSeparator()
        menu_save_fig_png = filemenu.Append(
            wx.ID_ANY, "Save Figures as PNG",
            "Save all figures as PNG in central directory")
        menu_save_fig_pdf = filemenu.Append(
            wx.ID_ANY, "Save Figures as PDF",
            "Save all figures as PDF in central directory")
        self.Bind(wx.EVT_MENU, self.on_oligomer_tools, menu_oligomer_tools)
        self.Bind(wx.EVT_MENU, self.on_save_fig, menu_save_fig_png)
        self.Bind(wx.EVT_MENU, self.on_save_fig_pdf, menu_save_fig_pdf)

        self.plotmenu = wx.Menu()
        self.menuaddline = self.plotmenu.Append(
            wx.ID_ANY, "Add Horizontal Line",
            "Add Horizontal Line at Specific Y Value")
        self.plotmenu.AppendSeparator()
        self.menutotal = self.plotmenu.Append(
            wx.ID_ANY, "Plot Total Bound vs. Unbound",
            "Assumes the first value is the unbound and each other is 1, 2, 3, and so on bound ligands."
        )
        self.Bind(wx.EVT_MENU, self.on_add_line, self.menuaddline)
        self.Bind(wx.EVT_MENU, self.on_total, self.menutotal)

        menu_bar = wx.MenuBar()
        menu_bar.Append(filemenu, "&File")
        menu_bar.Append(self.plotmenu, "Plot")
        self.SetMenuBar(menu_bar)

        # Setup the GUI
        panel = wx.Panel(self)

        self.plot1 = plot1d.Plot1d(panel)
        self.plot2 = plot2d.Plot2d(panel)
        self.plot5 = plot1d.Plot1d(panel)
        self.plot6 = plot2d.Plot2d(panel)

        sizer = wx.BoxSizer(wx.VERTICAL)
        hbox = wx.BoxSizer(wx.HORIZONTAL)

        sb = wx.StaticBox(panel, label='Set the Mass Defect Values to Extract')
        sbs = wx.StaticBoxSizer(sb, orient=wx.VERTICAL)

        importbutton = wx.Button(panel, label="Import from File")
        self.Bind(wx.EVT_BUTTON, self.on_import_masses, importbutton)

        clearbutt = wx.Button(panel, label="Clear List")
        self.Bind(wx.EVT_BUTTON, self.on_clear_masslist, clearbutt)

        addbutton = wx.Button(panel, label="Add Species")
        self.Bind(wx.EVT_BUTTON, self.on_add_mass, addbutton)

        sbs.Add(importbutton, 0, wx.EXPAND)
        sbs.Add(addbutton, 0, wx.EXPAND)
        self.masslistbox = masstools.MassListCtrlPanel(
            panel, columntitle="Mass Defect Value", size=(210, 320))
        sbs.Add(wx.StaticText(panel, label="Mass Defect List"))
        sbs.Add(self.masslistbox)
        sbs.Add(clearbutt, 0, wx.EXPAND)
        # hbox.Add(sbs, 0, wx.EXPAND)

        plotsizer1 = wx.BoxSizer(wx.VERTICAL)
        plotsizer2 = wx.BoxSizer(wx.VERTICAL)
        plotsizer1.Add(self.plot1, 2, wx.EXPAND)
        plotsizer1.Add(self.plot2, 2, wx.EXPAND)

        plotsizer2.Add(self.plot5, 0, wx.EXPAND)
        plotsizer2.Add(self.plot6, 0, wx.EXPAND)

        hbox.Add(sbs, 0)
        hbox.Add(plotsizer1, 1, wx.EXPAND)
        hbox.Add(plotsizer2, 1, wx.EXPAND)

        sizer.Add(hbox, 1, wx.EXPAND)

        controlsizer = wx.BoxSizer(wx.HORIZONTAL)

        totalbutton = wx.Button(panel, label="Extract")
        controlsizer.Add(totalbutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.on_extract, totalbutton)

        controlsizer.Add(wx.StaticText(panel, label=" How to extract: "), 0,
                         wx.ALIGN_CENTER_VERTICAL)
        self.ctlextract = wx.ComboBox(panel,
                                      value=defaultexchoice,
                                      choices=list(extractchoices.values()),
                                      style=wx.CB_READONLY
                                      | wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlextract, 0,
                         wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)

        self.ctlwindow = wx.TextCtrl(panel,
                                     value=str(self.window),
                                     size=(60, 23))
        controlsizer.Add(wx.StaticText(panel, label="Window:"), 0,
                         wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlwindow, 0, wx.ALIGN_CENTER_VERTICAL)

        self.ctlnorm = wx.RadioBox(
            panel,
            label="Extract Normalization",
            choices=["None", "Max", "Sum", "Peak Max", "Peak Sum"])
        self.ctlnorm.SetSelection(2)
        # , majorDimension=3,style=wx.RA_SPECIFY_COLS)
        self.ctlnorm.SetSelection(2)
        controlsizer.Add(self.ctlnorm, 0, wx.ALIGN_CENTER_VERTICAL)

        fitbutton = wx.Button(panel, label="Fit")
        controlsizer.Add(fitbutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.on_fit, fitbutton)

        self.ctlmaxshift = wx.TextCtrl(panel, value=str(0.05), size=(40, 23))
        controlsizer.Add(wx.StaticText(panel, label="Max MD Shift:"), 0,
                         wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlmaxshift, 0, wx.ALIGN_CENTER_VERTICAL)

        self.ctlshiftguess = wx.TextCtrl(panel,
                                         value=str("None"),
                                         size=(40, 23))
        controlsizer.Add(wx.StaticText(panel, label="Shift Guess:"), 0,
                         wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlshiftguess, 0, wx.ALIGN_CENTER_VERTICAL)

        self.ctlwidthguess = wx.TextCtrl(panel, value=str(0.05), size=(40, 23))
        controlsizer.Add(wx.StaticText(panel, label="Width Guess:"), 0,
                         wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlwidthguess, 0, wx.ALIGN_CENTER_VERTICAL)

        sizer.Add(controlsizer, 0, wx.EXPAND)

        panel.SetSizer(sizer)
        sizer.Fit(self)

        self.Bind(wx.EVT_CLOSE, self.on_close)

        self.Centre()
        # self.MakeModal(True)
        self.Show(True)
        self.Raise()
        self.make_list_plots()
Esempio n. 4
0
    def __init__(self,
                 parent,
                 title,
                 config=None,
                 iconfile="logo.ico",
                 *args,
                 **kwargs):
        mainwindow_base.MainwindowBase.__init__(self, parent, title, config,
                                                iconfile)
        # wx.Frame.__init__(self, None, title=title)  # ,size=(200,-1))
        self.pres = parent
        if config is None:
            self.config = self.pres.eng.config
        else:
            self.config = config
        self.icon_path = iconfile

        self.datachoices = {
            0: "Raw Data",
            1: "Processed Data",
            2: "Zero Charge Mass Spectrum"
        }
        self.extractchoices = {
            0: "Height",
            1: "Local Max",
            2: "Area",
            3: "Center of Mass",
            4: "Local Max Position"
        }
        self.extractlabels = {
            0: "Intensity",
            1: "Intensity",
            2: "Area",
            3: "Mass",
            4: "Mass"
        }

        self.CreateStatusBar(7)
        self.SetStatusWidths([-1, 200, 120, 200, 230, 250, 130])
        pub.subscribe(self.on_motion, 'newxy')
        pub.subscribe(self.pres.on_selection, 'scans_selected')

        self.menu = meta_menu(self, self.config, self.pres, type="Chrom")
        self.SetMenuBar(self.menu.menuBar)

        self.panel = wx.Panel(self)
        self.panel.SetDropTarget(ChromDropTarget(self))

        self.mainsizer = wx.BoxSizer(wx.HORIZONTAL)

        self.leftsizer = wx.BoxSizer(wx.VERTICAL)

        labelfont = wx.Font(16, wx.DECORATIVE, wx.ITALIC, wx.NORMAL)

        self.ctlsizer = wx.BoxSizer(wx.VERTICAL)
        label = wx.StaticText(self.panel,
                              label="Chromatogram Parsing Tools",
                              size=(300, 30))
        label.SetFont(labelfont)
        self.ctlsizer.Add(label, 0)

        self.manual_add_button = wx.Button(self.panel,
                                           label="Add From Manual Selection")
        self.Bind(wx.EVT_BUTTON, self.pres.on_manual_add,
                  self.manual_add_button)
        self.ctlsizer.Add(self.manual_add_button)

        tsizer0 = wx.BoxSizer(wx.HORIZONTAL)
        self.cpeaksbutton = wx.Button(self.panel,
                                      label="Find Chrom. Peaks Near Width:")
        self.Bind(wx.EVT_BUTTON, self.pres.on_chrom_peaks, self.cpeaksbutton)
        tsizer0.Add(self.cpeaksbutton)

        self.ctlcpeaks_param1 = wx.TextCtrl(self.panel,
                                            value=str(
                                                self.config.chrom_peak_width),
                                            size=(50, 20))
        tsizer0.Add(self.ctlcpeaks_param1, 0, wx.ALIGN_CENTER_VERTICAL)
        tsizer0.Add(wx.StaticText(self.panel, label="min"), 0,
                    wx.ALIGN_CENTER_VERTICAL)

        self.ctlsizer.Add(tsizer0)

        tsizer1 = wx.BoxSizer(wx.HORIZONTAL)
        self.timepartbutton = wx.Button(self.panel,
                                        label="Partition in Time Steps of:")
        self.Bind(wx.EVT_BUTTON, self.pres.on_timepart, self.timepartbutton)
        tsizer1.Add(self.timepartbutton)

        self.ctlmin = wx.TextCtrl(self.panel,
                                  value=str(self.config.time_window),
                                  size=(50, 20))
        tsizer1.Add(self.ctlmin, 0, wx.ALIGN_CENTER_VERTICAL)
        tsizer1.Add(wx.StaticText(self.panel, label="min"), 0,
                    wx.ALIGN_CENTER_VERTICAL)

        self.ctlsizer.Add(tsizer1)

        tsizer2 = wx.BoxSizer(wx.HORIZONTAL)
        self.swbutton = wx.Button(self.panel, label="Sliding Window (min):")
        self.Bind(wx.EVT_BUTTON, self.pres.on_sliding_window, self.swbutton)
        tsizer2.Add(self.swbutton)

        self.ctlswwin = wx.TextCtrl(self.panel,
                                    value=str(self.config.sw_time_window),
                                    size=(50, 20))
        tsizer2.Add(self.ctlswwin, 0, wx.ALIGN_CENTER_VERTICAL)
        tsizer2.Add(wx.StaticText(self.panel, label="Offset (#):"), 0,
                    wx.ALIGN_CENTER_VERTICAL)

        self.ctlswoffset = wx.TextCtrl(self.panel,
                                       value=str(
                                           int(self.config.sw_scan_offset)),
                                       size=(50, 20))
        tsizer2.Add(self.ctlswoffset, 0, wx.ALIGN_CENTER_VERTICAL)
        tsizer2.Add(wx.StaticText(self.panel, label="min"), 0,
                    wx.ALIGN_CENTER_VERTICAL)

        self.ctlsizer.Add(tsizer2)

        tsizer2 = wx.BoxSizer(wx.HORIZONTAL)
        tsizer2.Add(wx.StaticText(self.panel, label="Time Start:"), 0,
                    wx.ALIGN_CENTER_VERTICAL)
        self.ctltmin = wx.TextCtrl(self.panel,
                                   value=str(self.config.time_start),
                                   size=(50, 20))
        tsizer2.Add(self.ctltmin, 0, wx.ALIGN_CENTER_VERTICAL)
        tsizer2.Add(wx.StaticText(self.panel, label="End:"), 0,
                    wx.ALIGN_CENTER_VERTICAL)
        self.ctltmax = wx.TextCtrl(self.panel,
                                   value=str(self.config.time_end),
                                   size=(50, 20))
        tsizer2.Add(self.ctltmax, 0, wx.ALIGN_CENTER_VERTICAL)
        # tsizer2.Add(wx.StaticText(self.panel, label="min. Offset:"), 0, wx.ALIGN_CENTER_VERTICAL)
        self.ctlsizer.Add(tsizer2)

        self.clear_button = wx.Button(self.panel, label="Clear All Spectra")
        self.Bind(wx.EVT_BUTTON, self.pres.on_clear_spectra, self.clear_button)
        self.ctlsizer.Add(self.clear_button)

        label = wx.StaticText(self.panel,
                              label="Parsed Spectra",
                              size=(300, 30))
        label.SetFont(labelfont)
        self.ctlsizer.Add(label, 0)

        self.leftsizer.Add(self.ctlsizer)

        self.ypanel = ListCtrlPanel(self.panel, self.pres, size=(300, 300))
        self.leftsizer.Add(self.ypanel, 1, wx.EXPAND)

        self.ctlsizer2 = wx.BoxSizer(wx.VERTICAL)
        label = wx.StaticText(self.panel,
                              label="UniDec of Manual Selection",
                              size=(300, 30))
        label.SetFont(labelfont)
        self.ctlsizer2.Add(label, 0)

        self.run_ud_button = wx.Button(self.panel,
                                       label="Run UniDec On Selection")
        self.Bind(wx.EVT_BUTTON, self.pres.on_unidec_run, self.run_ud_button)
        self.ctlsizer2.Add(self.run_ud_button)

        self.pick_peaks_button_individual = wx.Button(
            self.panel, label="Pick Peaks On Selection")
        self.Bind(wx.EVT_BUTTON, self.pres.on_pick_peaks_individual,
                  self.pick_peaks_button_individual)
        self.ctlsizer2.Add(self.pick_peaks_button_individual)

        self.open_ud_button = wx.Button(self.panel,
                                        label="Open Selection in UniDec GUI")
        self.Bind(wx.EVT_BUTTON, self.pres.on_open_ud, self.open_ud_button)
        self.ctlsizer2.Add(self.open_ud_button)

        label = wx.StaticText(self.panel,
                              label="Peaks for Manual Selection",
                              size=(300, 30))
        label.SetFont(labelfont)
        self.ctlsizer2.Add(label, 0)

        self.singlepeakpanel = peaklistsort.PeakListCtrlPanel(self.panel,
                                                              meta=False,
                                                              size=(300, 300))
        self.Bind(self.singlepeakpanel.EVT_DELETE_SELECTION_2,
                  self.pres.on_single_delete, self.singlepeakpanel)
        self.Bind(self.singlepeakpanel.EVT_CHARGE_STATE,
                  self.pres.on_single_charge_states, self.singlepeakpanel)
        self.Bind(self.singlepeakpanel.EVT_DIFFERENCES,
                  self.pres.on_single_differences, self.singlepeakpanel)
        self.Bind(self.singlepeakpanel.EVT_MASSES,
                  self.pres.on_single_label_masses, self.singlepeakpanel)
        self.ctlsizer2.Add(self.singlepeakpanel, 0, wx.EXPAND)

        self.leftsizer.Add(self.ctlsizer2, 0, wx.EXPAND)

        self.mainsizer.Add(self.leftsizer, 0, wx.EXPAND)

        plotwindow = scrolled.ScrolledPanel(self.panel)
        sizerplot = wx.GridBagSizer()

        figsize = (4.9, 3.5)
        self.plotc = plot1d.Plot1d(plotwindow, figsize=figsize)  # Chromatogram
        self.plotm = plot1d.Plot1d(
            plotwindow, figsize=figsize)  # Selection from chromatogram
        self.plot1 = plot1d.Plot1d(plotwindow, smash=1,
                                   figsize=figsize)  # MUD Plot 1 m/z cascade
        self.plot2 = plot1d.Plot1d(plotwindow,
                                   figsize=figsize)  # MUD Deconvolved Data
        self.plot7 = plot1d.Plot1d(plotwindow,
                                   figsize=figsize)  # MUD Extraction
        self.plot2s = plot1d.Plot1d(plotwindow,
                                    figsize=figsize)  # Selection mass
        self.plot3 = plot2d.Plot2d(plotwindow,
                                   figsize=figsize)  # MUD 2D m/z vs. time
        self.plot5 = plot2d.Plot2d(plotwindow,
                                   figsize=figsize)  # MUD 2D mass vs. time

        sizerplot.Add(self.plotc, (0, 0), span=(1, 1), flag=wx.EXPAND)
        sizerplot.Add(self.plotm, (1, 0), span=(1, 1), flag=wx.EXPAND)
        sizerplot.Add(self.plot1, (0, 1), span=(1, 1), flag=wx.EXPAND)
        sizerplot.Add(self.plot2, (1, 1), span=(1, 1), flag=wx.EXPAND)
        sizerplot.Add(self.plot7, (2, 1), span=(1, 1), flag=wx.EXPAND)
        sizerplot.Add(self.plot2s, (2, 0), span=(1, 1), flag=wx.EXPAND)
        sizerplot.Add(self.plot3, (3, 0), span=(1, 1), flag=wx.EXPAND)
        sizerplot.Add(self.plot5, (3, 1), span=(1, 1), flag=wx.EXPAND)

        self.plots = [
            self.plotc, self.plotm, self.plot1, self.plot2, self.plot7,
            self.plot2s, self.plot3, self.plot5
        ]
        self.plotnames = [
            "Chrom_TIC", "Chrom_mz_selected", "ChromFigure_mz",
            "ChromFigure_mass", "ChromFigure_XIC", "Chrom_mass_selected",
            "Chrom2Dmz", "Chrom2Dmass"
        ]

        plotwindow.SetSizerAndFit(sizerplot)
        plotwindow.SetupScrolling()

        self.mainsizer.Add(plotwindow, 1, wx.EXPAND)

        self.sizer3 = wx.BoxSizer(wx.VERTICAL)
        label = wx.StaticText(self.panel,
                              label=" Peaks for Parsed Spectra",
                              size=(300, 30))
        label.SetFont(labelfont)
        self.sizer3.Add(label, 0)
        self.peakpanel = peaklistsort.PeakListCtrlPanel(self.panel, meta=True)
        self.Bind(self.peakpanel.EVT_DELETE_SELECTION_2, self.pres.on_delete,
                  self.peakpanel)
        self.Bind(self.peakpanel.EVT_CHARGE_STATE,
                  self.pres.on_charge_states_mud, self.peakpanel)
        self.Bind(self.peakpanel.EVT_DIFFERENCES, self.pres.on_differences,
                  self.peakpanel)
        self.Bind(self.peakpanel.EVT_MASSES, self.pres.on_label_masses,
                  self.peakpanel)
        self.sizer3.Add(self.peakpanel, 0, wx.EXPAND)
        self.mainsizer.Add(self.sizer3, 0, wx.EXPAND)

        self.controls = main_controls(self, self.config, self.pres, self.panel,
                                      self.icon_path)
        self.mainsizer.Add(self.controls, 0, wx.EXPAND)

        self.panel.SetSizer(self.mainsizer)
        self.mainsizer.Fit(self)

        keys = [
            ["E", self.pres.on_auto, self.controls.autobutton],
            # ["G", self.pres.on_paste_spectrum, self.menu.menupastespectrum],
            ["R", self.pres.on_unidec_button, self.controls.udbutton],
            ["D", self.pres.on_dataprep_button, self.controls.dataprepbutton],
            ["O", self.pres.on_open,
             self.menu.openmenu],  # ["I", self.pres.on_integrate],
            ["P", self.pres.on_pick_peaks,
             self.controls.plotbutton],  # ["K", self.pres.on_plot_peaks],
            # ["C", self.pres.on_plot_composite, self.controls.compositebutton],
            # ["N", self.pres.on_wizard, self.menu.wizardmenu],
            # ["F", self.pres.on_plot_offsets],  # ["Z", self.pres.on_charge_plot],
            # ["L", self.pres.on_load_state], ["S", self.pres.on_save_state],
            # ["B", self.pres.on_batch_run, self.menu.menubatchrun],
            ["Q", self.on_exit, self.menu.menuExit],
            ["T", self.pres.on_mass_tools, self.menu.menuMassFile],
            ["M", self.pres.on_match, self.menu.menumatch],
            ["W", self.pres.on_auto_peak_width, self.menu.menuAutoWidth],
            # ["Z", self.pres.on_undo, self.menu.menuundo],
            # ["Y", self.pres.on_redo, self.menu.menuredo],
            ["K", self.pres.on_kendrick, self.menu.menukendrick]
        ]
        self.setup_shortcuts(keys)

        self.Centre()
        self.Show(True)
Esempio n. 5
0
    def __init__(self,
                 parent,
                 title,
                 config,
                 iconfile="logo.ico",
                 tabbed=None):
        """
        initialize window and feed in links to presenter and config.

        :param parent: GUniDec Presenter -> self.pres
        :param title: Window title (string)
        :param config: UniDecConfig object ->self.config
        :return: None
        """
        MainwindowBase.__init__(self, parent, title, config, iconfile, tabbed)
        self.CreateStatusBar(4)
        self.SetStatusWidths([-1, 150, 150, 150])
        pub.subscribe(self.on_motion, 'newxy')
        # pub.subscribe(self.on_selection, 'scans_selected')

        self.filemenu = wx.Menu()
        self.menuOpen = self.filemenu.Append(wx.ID_SAVE, "Open File Set",
                                             "Open File Set")
        # self.Bind(wx.EVT_MENU, self.on_open, self.menuOpen)

        self.menuSave = self.filemenu.Append(wx.ID_SAVE, "Save File Set",
                                             "Save File Set")
        # self.Bind(wx.EVT_MENU, self.on_open, self.menuOpen)

        self.menuAdd = self.filemenu.Append(wx.ID_SAVE, "Add Files To Set",
                                            "Add Files To Set")
        self.Bind(wx.EVT_MENU, self.pres.on_add, self.menuAdd)

        self.menuBar = wx.MenuBar()
        self.menuBar.Append(self.filemenu, "&File")
        self.SetMenuBar(self.menuBar)

        self.panel = wx.Panel(self)
        # self.panel.SetDropTarget(ChromDropTarget(self))
        self.sizer = wx.BoxSizer(wx.VERTICAL)

        self.inputsizer = wx.BoxSizer(wx.HORIZONTAL)

        self.filelist = UDListCtrlPanel(self.panel)
        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_click, self.filelist.list)

        self.inputsizer.Add(self.filelist)

        self.plotsizer = wx.BoxSizer(wx.VERTICAL)
        self.plot4 = plot1d.Plot1d(self.panel)
        self.plot2 = plot1d.Plot1d(self.panel)
        self.insetplot = plot1d.Plot1d(self.panel)
        self.multiplot = plot1d.Plot1d(self.panel)

        self.plotsizer.Add(self.multiplot)
        self.plotsizer.Add(self.insetplot)
        self.plotsizer.Add(self.plot4)
        self.plotsizer.Add(self.plot2)

        self.inputsizer.Add(self.plotsizer)

        self.peakpanel = peaklistsort.PeakListCtrlPanel(self.panel)
        self.Bind(self.peakpanel.EVT_DELETE_SELECTION_2, self.pres.on_replot,
                  self.peakpanel)
        self.Bind(self.peakpanel.EVT_CHARGE_STATE, self.pres.on_charge_states,
                  self.peakpanel)
        self.Bind(self.peakpanel.EVT_DIFFERENCES, self.pres.on_differences,
                  self.peakpanel)
        self.Bind(self.peakpanel.EVT_MASSES, self.pres.on_label_masses,
                  self.peakpanel)
        self.inputsizer.Add(self.peakpanel, 0, wx.EXPAND)

        self.sizer.Add(self.inputsizer, 1, wx.EXPAND)

        self.panel.SetSizer(self.sizer)
        self.sizer.Fit(self)

        self.Centre()
        self.Show(True)
    def initiate_dialog(self, config, data):
        """
        Initiate the dialog window, lay everything out, and plot the intial results
        :param config: UniDecConfig object
        :param data: Data to plot (either MS or IM-MS)
        :return: None
        """
        self.data = data
        self.SetSize((550 + config.imflag * 50, 650))
        self.config = config

        panel = wx.Panel(self)

        vbox = wx.BoxSizer(wx.VERTICAL)

        size = (7, 4)
        vbox2 = wx.BoxSizer(wx.VERTICAL)
        if self.config.imflag == 0:
            self.plot1 = plot1d.Plot1d(panel, figsize=size)
        else:
            self.plot1 = plot2d.Plot2d(panel, figsize=size)

        vbox2.Add(self.plot1, 0, wx.EXPAND)

        hbox = wx.BoxSizer(wx.HORIZONTAL)
        sb = wx.StaticBox(panel, label='Manually Set Masses')
        sbs = wx.StaticBoxSizer(sb, orient=wx.VERTICAL)

        importbutton = wx.Button(panel, label="Import from File")
        self.Bind(wx.EVT_BUTTON, self.on_import, importbutton)

        clearbutt = wx.Button(panel, label="Clear List")
        self.Bind(wx.EVT_BUTTON, self.on_clear, clearbutt)

        addbutton = wx.Button(panel, label="Manual Add Species")
        self.Bind(wx.EVT_BUTTON, self.on_add, addbutton)

        addbutton2 = wx.Button(panel, label="Add from Plot Zoom Range")
        self.Bind(wx.EVT_BUTTON, self.on_add_from_plot, addbutton2)

        plotbutton = wx.Button(panel, label="Plot Manual Assignments")
        self.Bind(wx.EVT_BUTTON, self.on_plot, plotbutton)

        sbs.Add(importbutton, 0, wx.EXPAND)
        sbs.Add(addbutton, 0, wx.EXPAND)
        sbs.Add(addbutton2, 0, wx.EXPAND)
        sbs.Add(clearbutt, 0, wx.EXPAND)
        sbs.Add(plotbutton, 0, wx.EXPAND)
        hbox.Add(sbs)

        sb2 = wx.StaticBox(panel, label='Manual List')
        sbs2 = wx.StaticBoxSizer(sb2, orient=wx.VERTICAL)
        self.masslistbox = ManualListCtrlPanel(panel,
                                               imflag=self.config.imflag)
        # sbs2.Add(wx.StaticText(panel, label="Manual List"))
        sbs2.Add(self.masslistbox)
        hbox.Add(sbs2)
        vbox2.Add(hbox, 1)
        panel.SetSizer(vbox2)

        hboxend = wx.BoxSizer(wx.HORIZONTAL)
        okbutton = wx.Button(self, label='Ok')
        closebutton = wx.Button(self, label='Cancel')
        hboxend.Add(okbutton)
        hboxend.Add(closebutton, flag=wx.LEFT, border=5)

        vbox.Add(panel, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
        vbox.Add(hboxend, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10)

        self.SetSizer(vbox)

        okbutton.Bind(wx.EVT_BUTTON, self.on_close)
        closebutton.Bind(wx.EVT_BUTTON, self.on_close_cancel)

        self.masslistbox.list.populate(self.config.manuallist)
        self.on_plot(0)
        self.CenterOnParent()
Esempio n. 7
0
    def initialize_interface(self, massaxis, chargeaxis, igrid, config, pks):
        """
        Initialize the parameters, setup the GUI, and plot the intial results.
        :param massaxis: Mass axis values
        :param chargeaxis: Charge axis value
        :param igrid: Intensities at each mass and charge point
        :param config: UniDecConfig object
        :param pks: Peaks object
        :return: None
        """
        # Initialize the parameters
        self.config = config
        self.pks = pks

        self.massaxis = np.array(massaxis)
        self.chargeaxis = np.array(chargeaxis)
        self.igrid = np.reshape(igrid, (len(massaxis), len(chargeaxis)))

        # Setup the GUI
        pnl = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)

        sb = wx.StaticBox(pnl, label='Set Parameters to Plot Native Z')
        sbs = wx.StaticBoxSizer(sb, orient=wx.VERTICAL)

        self.plot1 = plot1d.Plot1d(pnl, figsize=self.figsize)
        self.plot2 = plot1d.Plot1d(pnl, figsize=self.figsize)
        self.plot3 = plot1d.Plot1d(pnl, figsize=self.figsize)
        self.plot4 = plot1d.Plot1d(pnl, figsize=self.figsize)
        self.plot5 = plot1d.Plot1d(pnl, figsize=self.figsize)
        self.plot6 = plot1d.Plot1d(pnl, figsize=self.figsize)
        self.plot7 = plot2d.Plot2d(pnl, figsize=self.figsize)

        hbox0 = wx.BoxSizer(wx.HORIZONTAL)
        hbox0.Add(self.plot1, 0, wx.EXPAND)
        hbox0.Add(self.plot3, 0, wx.EXPAND)
        hbox0.Add(self.plot4, 0, wx.EXPAND)

        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        hbox2.Add(self.plot2, 0, wx.EXPAND)
        hbox2.Add(self.plot5, 0, wx.EXPAND)
        hbox2.Add(self.plot6, 0, wx.EXPAND)

        sbs.Add(hbox0, 0, wx.EXPAND)
        sbs.Add(hbox2, 0, wx.EXPAND)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        addbutton = wx.Button(pnl, label="Add Line")
        fitbutton = wx.Button(pnl, label="Fit")
        resetbutton = wx.Button(pnl, label="Reset to Default")
        extractbutton = wx.Button(pnl, label="Extract")
        self.ctlmassoffset = wx.TextCtrl(pnl,
                                         value=str(self.config.massoffset),
                                         size=(50, -1))
        self.ctlfilt = wx.RadioBox(pnl,
                                   label="Extract Shape",
                                   choices=["Box", "Gaussian"])
        self.ctlfilt.SetSelection(self.config.extractshape)
        savefigbutton = wx.Button(pnl, label="Save Figures")
        replotbutton = wx.Button(pnl, label="Replot")
        hbox1.Add(addbutton, 0)
        hbox1.Add(replotbutton, 0)
        hbox1.Add(resetbutton, 0)
        hbox1.Add(wx.StaticText(pnl, label="     "), 0,
                  wx.ALIGN_CENTER_VERTICAL)

        hbox1.Add(fitbutton, 0)
        hbox1.Add(extractbutton, 0)
        hbox1.Add(wx.StaticText(pnl, label="     Monomer Mass: "),
                  0)  # , wx.ALIGN_CENTER_VERTICAL)
        hbox1.Add(self.ctlmassoffset, 0)
        hbox1.Add(self.ctlfilt, 0)

        hbox1.Add(savefigbutton, 0)
        sbs.Add(hbox1, 0, wx.EXPAND)

        hbox3 = wx.BoxSizer(wx.HORIZONTAL)
        self.zlistctrl = ColorList(pnl)
        hbox3.Add(self.zlistctrl, 1, wx.EXPAND)
        hbox3.Add(self.plot7, 0, wx.EXPAND)
        sbs.Add(hbox3, 0, wx.EXPAND)

        pnl.SetSizer(sbs)

        hboxend = wx.BoxSizer(wx.HORIZONTAL)
        okbutton = wx.Button(self, label='Ok')
        closebutton = wx.Button(self, label='Cancel')
        hboxend.Add(okbutton)
        hboxend.Add(closebutton, flag=wx.LEFT, border=5)

        vbox.Add(pnl, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
        vbox.Add(hboxend, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10)

        self.SetSizer(vbox)
        self.Center()

        # Bind events
        self.zlistctrl.ultimateList.Bind(wx.EVT_BUTTON, self.on_delete)
        self.zlistctrl.ultimateList.Bind(wx.EVT_LIST_ITEM_DESELECTED,
                                         self.update)

        fitbutton.Bind(wx.EVT_BUTTON, self.fit)
        addbutton.Bind(wx.EVT_BUTTON, self.on_add)
        resetbutton.Bind(wx.EVT_BUTTON, self.on_reset)
        extractbutton.Bind(wx.EVT_BUTTON, self.extract)
        savefigbutton.Bind(wx.EVT_BUTTON, self.save_figures)
        replotbutton.Bind(wx.EVT_BUTTON, self.on_replot)
        okbutton.Bind(wx.EVT_BUTTON, self.on_close)
        closebutton.Bind(wx.EVT_BUTTON, self.on_close_cancel)

        # Set Range Here and plot the initial results
        tstart = time.perf_counter()
        self.make_f_array(-50, 15)
        tend = time.perf_counter()
        print("F Array Time: %.2gs" % (tend - tstart))
        if self.config.zoffs == []:
            self.get_maxima()
        else:
            self.zoffs = self.config.zoffs
            self.plot_zoffs()
        self.populate_list(0)
Esempio n. 8
0
    def setup_main_panel(self):
        """
        Lays Out Main Panel. Binds some functions to presenter.
        :return: None
        """
        # Create Status Bar
        self.CreateStatusBar(7)
        self.SetStatusWidths([-1, 300, 200, 200, 250, 150, 130])
        # Sizers to develop layout
        # s1 = (min(self.displaysize[0], 1851), self.displaysize[1])
        # s2 = (550, self.displaysize[1])
        splitterwindow = wx.SplitterWindow(self,
                                           -1,
                                           style=wx.SP_3D | wx.SP_BORDER)
        splitterwindow2 = wx.SplitterWindow(splitterwindow,
                                            -1,
                                            style=wx.SP_3D | wx.SP_BORDER)
        panelp = wx.Panel(splitterwindow2, -1)
        panel = scrolled.ScrolledPanel(splitterwindow2,
                                       -1)  # wx.Panel(splitterwindow2, -1)
        splitterwindow2.SplitVertically(panelp,
                                        panel,
                                        sashPosition=-250 -
                                        self.config.imflag * 20)
        splitterwindow2.SetMinimumPaneSize(175)
        splitterwindow.SetMinimumPaneSize(175)
        # splitterwindow.SetMinSize((0,0))
        # splitterwindow2.SetMinSize((0,0))
        file_drop_target = MyFileDropTarget(self)
        splitterwindow.SetDropTarget(file_drop_target)
        # .................................
        #
        #    Layout the Plots
        #
        # ...................................

        # Tabbed view of plots
        if self.tabbed == 1:
            figsize = (6, 5)
            plotwindow = wx.Notebook(splitterwindow)
            splitterwindow.SplitVertically(plotwindow,
                                           splitterwindow2,
                                           sashPosition=-550)
            tab1 = wx.Panel(plotwindow)
            tab2 = wx.Panel(plotwindow)
            tab3 = wx.Panel(plotwindow)
            tab4 = wx.Panel(plotwindow)
            tab5 = wx.Panel(plotwindow)
            tab6 = wx.Panel(plotwindow)

            self.plot1 = plot1d.Plot1d(tab1, smash=1, figsize=figsize)
            self.plot2 = plot1d.Plot1d(tab2, integrate=1, figsize=figsize)
            self.plot3 = plot2d.Plot2d(tab3, figsize=figsize)
            self.plot4 = plot1d.Plot1d(tab4, figsize=figsize)
            self.plot5 = plot2d.Plot2d(tab5, figsize=figsize)
            self.plot6 = plot1d.Plot1d(tab6, figsize=figsize)

            miscwindows.setup_tab_box(tab1, self.plot1)
            miscwindows.setup_tab_box(tab2, self.plot2)
            miscwindows.setup_tab_box(tab3, self.plot3)
            miscwindows.setup_tab_box(tab4, self.plot4)
            miscwindows.setup_tab_box(tab5, self.plot5)
            miscwindows.setup_tab_box(tab6, self.plot6)

            if self.config.imflag == 1:
                tab1im = wx.Panel(plotwindow)
                tab1fit = wx.Panel(plotwindow)
                tab2ccs = wx.Panel(plotwindow)
                tab3color = wx.Panel(plotwindow)
                tab5mccs = wx.Panel(plotwindow)
                tab5ccsz = wx.Panel(plotwindow)
                tab9 = wx.Panel(plotwindow)
                tab10 = wx.Panel(plotwindow)

                self.plot1im = plot2d.Plot2d(tab1im, figsize=figsize)
                self.plot1fit = plot2d.Plot2d(tab1fit, figsize=figsize)
                self.plot2ccs = plot1d.Plot1d(tab2ccs, figsize=figsize)
                self.plot5mccs = plot2d.Plot2d(tab5mccs, figsize=figsize)
                self.plot5ccsz = plot2d.Plot2d(tab5ccsz, figsize=figsize)
                self.plot3color = ColorPlot.ColorPlot2D(tab3color,
                                                        figsize=figsize)
                self.plot9 = plot3d.CubePlot(tab9, figsize=figsize)
                self.plot10 = plot3d.CubePlot(tab10, figsize=figsize)

                miscwindows.setup_tab_box(tab1im, self.plot1im)
                miscwindows.setup_tab_box(tab1fit, self.plot1fit)
                miscwindows.setup_tab_box(tab2ccs, self.plot2ccs)
                miscwindows.setup_tab_box(tab3color, self.plot3color)
                miscwindows.setup_tab_box(tab5mccs, self.plot5mccs)
                miscwindows.setup_tab_box(tab5ccsz, self.plot5ccsz)
                miscwindows.setup_tab_box(tab9, self.plot9)
                miscwindows.setup_tab_box(tab10, self.plot10)

            plotwindow.AddPage(tab1, "MS Data v. Fit")
            if self.config.imflag == 1:
                plotwindow.AddPage(tab1im, "IM-MS Data")
                plotwindow.AddPage(tab1fit, "IM-MS Fit")
                plotwindow.AddPage(tab3color, "IM-MS Charges")
                plotwindow.AddPage(tab9, "m/z Cube")
            plotwindow.AddPage(tab3, "m/z Grid")
            plotwindow.AddPage(tab2, "Mass Distribution")
            if self.config.imflag == 1:
                plotwindow.AddPage(tab2ccs, "CCS Distribution")

            plotwindow.AddPage(tab4, "Individual Peaks")
            plotwindow.AddPage(tab5, "Mass vs. Charge")
            if self.config.imflag == 1:
                plotwindow.AddPage(tab5mccs, "Mass vs. CCS ")
                plotwindow.AddPage(tab5ccsz, "CCS vs. Charge")
                plotwindow.AddPage(tab10, "Mass Cube")
            plotwindow.AddPage(tab6, "Bar Chart")
        # Scrolled panel view of plots
        else:
            # TODO: Line up plots on left hand side so that they share an m/z axis
            plotwindow = scrolled.ScrolledPanel(splitterwindow)
            splitterwindow.SplitVertically(plotwindow,
                                           splitterwindow2,
                                           sashPosition=-550)
            sizerplot = wx.GridBagSizer()
            figsize = self.config.figsize
            self.plot1 = plot1d.Plot1d(plotwindow, smash=1, figsize=figsize)
            self.plot2 = plot1d.Plot1d(plotwindow,
                                       integrate=1,
                                       figsize=figsize)
            self.plot3 = plot2d.Plot2d(plotwindow, figsize=figsize)
            self.plot4 = plot1d.Plot1d(plotwindow, figsize=figsize)
            self.plot5 = plot2d.Plot2d(plotwindow, figsize=figsize)
            self.plot6 = plot1d.Plot1d(plotwindow, figsize=figsize)

            if self.config.imflag == 1:
                self.plot1im = plot2d.Plot2d(plotwindow, figsize=figsize)
                self.plot1fit = plot2d.Plot2d(plotwindow, figsize=figsize)
                self.plot2ccs = plot1d.Plot1d(plotwindow, figsize=figsize)
                self.plot5mccs = plot2d.Plot2d(plotwindow, figsize=figsize)
                self.plot5ccsz = plot2d.Plot2d(plotwindow, figsize=figsize)
                self.plot3color = ColorPlot.ColorPlot2D(plotwindow,
                                                        figsize=figsize)
                self.plot9 = plot3d.CubePlot(plotwindow, figsize=figsize)
                self.plot10 = plot3d.CubePlot(plotwindow, figsize=figsize)

            if self.config.imflag == 0:
                sizerplot.Add(self.plot1, (0, 0), span=(1, 1), flag=wx.EXPAND)
                sizerplot.Add(self.plot2, (0, 1), span=(1, 1), flag=wx.EXPAND)
                sizerplot.Add(self.plot3, (1, 0), span=(1, 1), flag=wx.EXPAND)
                sizerplot.Add(self.plot4, (1, 1), span=(1, 1), flag=wx.EXPAND)
                sizerplot.Add(self.plot5, (2, 0), span=(1, 1), flag=wx.EXPAND)
                sizerplot.Add(self.plot6, (2, 1), span=(1, 1), flag=wx.EXPAND)
            else:
                sizerplot.Add(self.plot1, (0, 0), span=(1, 1), flag=wx.EXPAND)
                sizerplot.Add(self.plot1im, (0, 1),
                              span=(1, 1),
                              flag=wx.EXPAND)
                sizerplot.Add(self.plot1fit, (1, 1),
                              span=(1, 1),
                              flag=wx.EXPAND)
                sizerplot.Add(self.plot3color, (1, 0),
                              span=(1, 1),
                              flag=wx.EXPAND)
                sizerplot.Add(self.plot2, (2, 0), span=(1, 1), flag=wx.EXPAND)
                sizerplot.Add(self.plot2ccs, (3, 0),
                              span=(1, 1),
                              flag=wx.EXPAND)
                sizerplot.Add(self.plot3, (2, 1), span=(1, 1), flag=wx.EXPAND)
                sizerplot.Add(self.plot4, (4, 0), span=(1, 1), flag=wx.EXPAND)
                sizerplot.Add(self.plot5, (3, 1), span=(1, 1), flag=wx.EXPAND)
                sizerplot.Add(self.plot5mccs, (4, 1),
                              span=(1, 1),
                              flag=wx.EXPAND)
                sizerplot.Add(self.plot5ccsz, (5, 1),
                              span=(1, 1),
                              flag=wx.EXPAND)
                sizerplot.Add(self.plot6, (5, 0), span=(1, 1), flag=wx.EXPAND)
                sizerplot.Add(self.plot9, (6, 0), span=(1, 1), flag=wx.EXPAND)
                sizerplot.Add(self.plot10, (6, 1), span=(1, 1), flag=wx.EXPAND)

            # plotwindow.SetScrollbars(1, 1,1,1)
            if self.system == "Linux":
                plotwindow.SetSizer(sizerplot)
                sizerplot.Fit(self)
            else:
                plotwindow.SetSizerAndFit(sizerplot)
            plotwindow.SetupScrolling()

        self.plots = [
            self.plot1, self.plot2, self.plot3, self.plot4, self.plot5,
            self.plot6
        ]
        if self.config.imflag == 1:
            self.plots = self.plots + [
                self.plot1im, self.plot1fit, self.plot2ccs, self.plot5mccs,
                self.plot5ccsz, self.plot3color, self.plot9, self.plot10
            ]
        self.plotnames = [
            "Figure1", "Figure2", "Figure3", "Figure4", "Figure5", "Figure6"
        ]
        if self.config.imflag == 1:
            self.plotname = self.plotnames + [
                "Figure1im", "Figure1fit", "Figure2ccs", "Figure3color",
                "Figure5ccsz", "Figure5massccs", "mzCube", "massCube"
            ]

        # ...........................
        #
        #   Sizer for Peaks
        #
        # ...........................
        sizerpeaks = wx.BoxSizer(wx.VERTICAL)
        self.peakpanel = peaklistsort.PeakListCtrlPanel(panelp)
        self.Bind(self.peakpanel.EVT_DELETE_SELECTION_2, self.pres.on_delete,
                  self.peakpanel)
        self.Bind(self.peakpanel.EVT_CHARGE_STATE, self.pres.on_charge_states,
                  self.peakpanel)
        self.Bind(self.peakpanel.EVT_DIFFERENCES, self.pres.on_differences,
                  self.peakpanel)
        sizerpeaks.Add(self.peakpanel, 0, wx.EXPAND)
        panelp.SetSizer(sizerpeaks)
        sizerpeaks.Fit(self)

        # ..........................
        #
        # Setup Control Panel
        #
        # .............................
        sizercontrols = wx.BoxSizer(wx.VERTICAL)
        self.controls = ud_controls.main_controls(self, self.config, self.pres,
                                                  panel, self.icon_path)
        sizercontrols.Add(self.controls, 1, wx.EXPAND)
        panel.SetSizer(sizercontrols)
        sizercontrols.Fit(self)
        # panel.SetAutoLayout(1)
        # panel.SetupScrolling(scroll_x=False, scroll_y=True)

        if self.system == "Linux" and self.tabbed != 1:
            sizerplot.Fit(splitterwindow)

        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(splitterwindow, 1, wx.EXPAND)

        # Set everything up
        self.SetSizer(sizer)
        sizer.Fit(self)
        pass
Esempio n. 9
0
    def initialize_interface(self, config, data):
        """
        Create the GUI, import the paramters, and plot the intial data.
        :param config: UniDecConfig Object
        :param data: Data array (N x 2)
        :return: None
        """
        # Initialize parameters
        self.config = config
        self.data = data

        self.psfun = config.psfun

        # Create the GUI
        pnl = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)

        sb = wx.StaticBox(pnl, label='Peak Shape Tool')
        sbs = wx.StaticBoxSizer(sb, orient=wx.VERTICAL)

        self.plot1 = plot1d.Plot1d(pnl)

        self.plot1.plotrefreshtop(self.data[:, 0],
                                  self.data[:, 1],
                                  title="Data",
                                  xlabel="m/z (Th)",
                                  ylabel="Normalized Intensity",
                                  zoom="span")
        sbs.Add(self.plot1, 1, wx.EXPAND)

        hbox11 = wx.BoxSizer(wx.HORIZONTAL)

        hbox10 = wx.BoxSizer(wx.VERTICAL)
        centerbutton = wx.Button(pnl, label='Reset Range')
        centerbutton.Bind(wx.EVT_BUTTON, self.on_reset)
        hbox10.Add(centerbutton, 0, wx.ALIGN_LEFT)
        hbox11.Add(hbox10, 0, wx.ALIGN_LEFT)

        hbox9 = wx.BoxSizer(wx.VERTICAL)
        self.ctlpsfun = wx.RadioBox(
            pnl,
            label="Peak Shape Fit Function",
            choices=["Gaussian", "Lorentzian", "Split G/L"])
        self.ctlpsfun.SetSelection(self.psfun)
        fitbutton = wx.Button(pnl, label='Fit Peak Shape')
        plotbutton = wx.Button(pnl, label='Plot Guess')
        hbox9.Add(self.ctlpsfun, 0, wx.ALIGN_RIGHT)
        hbox8 = wx.BoxSizer(wx.HORIZONTAL)
        self.ctlmzsig = wx.TextCtrl(pnl, value=str(self.config.mzsig))
        hbox8.Add(wx.StaticText(pnl, label='Guess for Peak FWHM: '),
                  wx.ALIGN_CENTER_VERTICAL)
        hbox8.Add(self.ctlmzsig,
                  flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL,
                  border=5)
        hbox9.Add(hbox8, 0, wx.ALIGN_RIGHT)
        hbox9.Add(plotbutton, 0, wx.ALIGN_RIGHT)
        hbox9.Add(fitbutton, 0, wx.ALIGN_RIGHT)
        hbox6 = wx.BoxSizer(wx.HORIZONTAL)
        self.errorbox = wx.TextCtrl(pnl, value="", style=wx.TE_READONLY)
        hbox6.Add(wx.StaticText(pnl, label='Error in Fit: '),
                  wx.ALIGN_CENTER_VERTICAL)
        hbox6.Add(self.errorbox,
                  flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL,
                  border=5)
        hbox9.Add(hbox6, 0, wx.ALIGN_RIGHT)

        hbox7 = wx.BoxSizer(wx.HORIZONTAL)
        self.resbox = wx.TextCtrl(pnl, value=str(""))
        hbox7.Add(wx.StaticText(pnl, label='Resolution (M/FWHM): '),
                  wx.ALIGN_CENTER_VERTICAL)
        hbox7.Add(self.resbox,
                  flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
                  border=5)
        hbox9.Add(hbox7, 0, wx.ALIGN_RIGHT)

        hbox11.Add(hbox9, 1, wx.ALIGN_RIGHT)
        sbs.Add(hbox11, 0, wx.EXPAND)
        pnl.SetSizer(sbs)
        # Create the bottom buttons
        hboxend = wx.BoxSizer(wx.HORIZONTAL)
        okbutton = wx.Button(self, label='Ok')
        closebutton = wx.Button(self, label='Cancel')
        hboxend.Add(okbutton)
        hboxend.Add(closebutton, flag=wx.LEFT, border=5)

        vbox.Add(pnl, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
        vbox.Add(hboxend, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10)

        self.SetSizer(vbox)

        # Bind some things
        plotbutton.Bind(wx.EVT_BUTTON, self.on_plot)
        fitbutton.Bind(wx.EVT_BUTTON, self.on_fit)
        okbutton.Bind(wx.EVT_BUTTON, self.on_close)
        closebutton.Bind(wx.EVT_BUTTON, self.on_close_cancel)
        self.CenterOnParent()
Esempio n. 10
0
    def initialize_interface(self, data3, data2, config):
        """
        Initialize the parameters, create the interface, plot the initial data.
        :param data3: 2D IM-MS data
        :param data2: 1D MS data
        :param config: UniDecConfig Object
        :return: None
        """
        # Initialize the parameters
        self.mz = np.unique(data3[:, 0])
        self.dt = np.unique(data3[:, 1])
        self.C = data3[:, 2].reshape((len(self.mz), len(self.dt)))
        self.data = data2

        self.config = config
        self.psfun = config.psfun

        # Create the interface
        pnl = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)

        sb = wx.StaticBox(pnl, label='Peak Shape Tool')
        sbs = wx.StaticBoxSizer(sb, orient=wx.VERTICAL)

        self.plot1 = plot1d.Plot1d(pnl)
        sbs.Add(self.plot1, 1, wx.EXPAND)

        hbox11 = wx.BoxSizer(wx.HORIZONTAL)
        hbox10 = wx.BoxSizer(wx.VERTICAL)

        centerbutton = wx.Button(pnl, label='Reset Range')
        self.flipbutton = wx.Button(pnl, label='Flip m/z and AT')
        centerbutton.Bind(wx.EVT_BUTTON, self.on_reset)
        self.flipbutton.Bind(wx.EVT_BUTTON, self.on_flip)

        hboxsigs = wx.BoxSizer(wx.HORIZONTAL)
        self.outmzsig = wx.TextCtrl(pnl, value="")
        hboxsigs.Add(wx.StaticText(pnl, label='m/z Width Fit: '),
                     wx.ALIGN_CENTER_VERTICAL)
        hboxsigs.Add(self.outmzsig,
                     flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL,
                     border=5)

        hboxsigs2 = wx.BoxSizer(wx.HORIZONTAL)
        self.outdtsig = wx.TextCtrl(pnl, value="")
        hboxsigs2.Add(wx.StaticText(pnl, label='A.T. Width Fit: '),
                      wx.ALIGN_CENTER_VERTICAL)
        hboxsigs2.Add(self.outdtsig,
                      flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL,
                      border=5)

        hbox10.Add(centerbutton, 0, wx.ALIGN_LEFT)
        hbox10.Add(self.flipbutton, 0, wx.ALIGN_LEFT)
        hbox10.Add(hboxsigs, 0, wx.ALIGN_LEFT)
        hbox10.Add(hboxsigs2, 0, wx.ALIGN_LEFT)
        hbox11.Add(hbox10, 0, wx.ALIGN_LEFT)

        hbox9 = wx.BoxSizer(wx.VERTICAL)
        self.ctlpsfun = wx.RadioBox(
            pnl,
            label="Peak Shape Fit Function",
            choices=["Gaussian", "Lorentzian", "Split G/L"])
        self.ctlpsfun.SetSelection(self.psfun)
        fitbutton = wx.Button(pnl, label='Fit Peak Shape')
        plotbutton = wx.Button(pnl, label='Plot Guess')
        hbox9.Add(self.ctlpsfun, 0, wx.ALIGN_RIGHT)
        hbox8 = wx.BoxSizer(wx.HORIZONTAL)
        self.ctlsigguess = wx.TextCtrl(pnl, value=str(self.config.mzsig))
        hbox8.Add(wx.StaticText(pnl, label='Guess for Peak Width: '),
                  wx.ALIGN_CENTER_VERTICAL)
        hbox8.Add(self.ctlsigguess,
                  flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL,
                  border=5)
        hbox9.Add(hbox8, 0, wx.ALIGN_RIGHT)
        hbox9.Add(plotbutton, 0, wx.ALIGN_RIGHT)
        hbox9.Add(fitbutton, 0, wx.ALIGN_RIGHT)
        hbox6 = wx.BoxSizer(wx.HORIZONTAL)
        self.errorbox = wx.TextCtrl(pnl, value="", style=wx.TE_READONLY)
        hbox6.Add(wx.StaticText(pnl, label='Error in Fit: '),
                  wx.ALIGN_CENTER_VERTICAL)
        hbox6.Add(self.errorbox,
                  flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL,
                  border=5)

        hbox7 = wx.BoxSizer(wx.HORIZONTAL)
        self.resbox = wx.TextCtrl(pnl, value=str(""))
        hbox7.Add(wx.StaticText(pnl, label='Resolution (M/FWHM): '),
                  wx.ALIGN_CENTER_VERTICAL)
        hbox7.Add(self.resbox,
                  flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
                  border=5)

        hbox9.Add(hbox6, 0, wx.ALIGN_RIGHT)
        hbox9.Add(hbox7, 0, wx.ALIGN_RIGHT)
        hbox11.Add(hbox9, 1, wx.ALIGN_RIGHT)
        sbs.Add(hbox11, 0, wx.EXPAND)
        pnl.SetSizer(sbs)

        hboxend = wx.BoxSizer(wx.HORIZONTAL)
        okbutton = wx.Button(self, label='Ok')
        closebutton = wx.Button(self, label='Cancel')
        hboxend.Add(okbutton)
        hboxend.Add(closebutton, flag=wx.LEFT, border=5)

        vbox.Add(pnl, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
        vbox.Add(hboxend, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10)

        self.SetSizer(vbox)

        plotbutton.Bind(wx.EVT_BUTTON, self.on_plot)
        fitbutton.Bind(wx.EVT_BUTTON, self.on_fit)
        okbutton.Bind(wx.EVT_BUTTON, self.on_close)
        closebutton.Bind(wx.EVT_BUTTON, self.on_close_cancel)
        self.CenterOnParent()

        # Plot the result
        self.plot1.plotrefreshtop(self.data[:, 0],
                                  self.data[:, 1],
                                  title="Data",
                                  xlabel="m/z (Th)",
                                  ylabel="Normalized Intensity",
                                  zoom="span")
Esempio n. 11
0
    def __init__(self, parent, data, pks, config=None):
        wx.Frame.__init__(self, parent, title="Subtract and Divide Tools", size=(1100, 600))  # ,size=(-1,-1))
        self.parent = parent
        self.div = 760
        self.sub = 44088
        self.data = data
        self.pks = pks
        self.avgs = None
        self.nums = None
        if config is None:
            self.config = unidecstructure.UniDecConfig()
            self.config.initialize()
        else:
            self.config = config
            self.sub = config.molig

        try:
            self.masses = []
            for p in self.pks.peaks:
                if p.ignore == 0:
                    self.masses.append(p.mass)
            defaultsub = np.amin(self.masses)
        except:
            self.masses = None
            defaultsub = 44088
        self.sub = defaultsub

        self.panel = wx.Panel(self)
        self.plot1 = plot1d.Plot1d(self.panel)
        self.plot2 = plot1d.Plot1d(self.panel)
        self.ctlsub = wx.TextCtrl(self.panel, value=str(self.sub))
        self.ctldiv = wx.TextCtrl(self.panel, value=str(self.div))
        self.ctlresult = wx.TextCtrl(self.panel, value="")
        self.ctltype = wx.RadioBox(self.panel, label="X-axis", choices=["Mass", "Number"])
        self.replotbutton = wx.Button(self.panel, -1, "Replot")
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        s1 = wx.BoxSizer(wx.HORIZONTAL)
        s1.Add(self.plot1, 1, wx.GROW)
        s1.Add(self.plot2, 1, wx.GROW)
        self.sizer.Add(s1, 1)

        s2 = wx.BoxSizer(wx.HORIZONTAL)
        s2.Add(wx.StaticText(self.panel, label="  Subtract (Da): "), flag=wx.ALIGN_CENTER_VERTICAL)
        s2.Add(self.ctlsub, 0, flag=wx.ALIGN_CENTER_VERTICAL)
        s2.Add(wx.StaticText(self.panel, label="  Divide (Da): "), flag=wx.ALIGN_CENTER_VERTICAL)
        s2.Add(self.ctldiv, 0, flag=wx.ALIGN_CENTER_VERTICAL)
        s2.Add(self.ctltype, 0, flag=wx.ALIGN_CENTER_VERTICAL)

        s2.Add(self.replotbutton, 0, flag=wx.ALIGN_CENTER_VERTICAL)

        s2.Add(wx.StaticText(self.panel, label="  Result (Da): "), flag=wx.ALIGN_CENTER_VERTICAL)
        s2.Add(self.ctlresult, 0, flag=wx.ALIGN_CENTER_VERTICAL)

        self.sizer.Add(s2, 0)

        self.Bind(wx.EVT_BUTTON, self.replot, self.replotbutton)
        self.Bind(wx.EVT_RADIOBOX, self.change_type, self.ctltype)

        self.panel.SetSizer(self.sizer)
        self.panel.Fit()
        self.Show(True)
        self.replot()
Esempio n. 12
0
    def __init__(self, parent, data_list, config=None, yvals=None, directory=None, header=None, params=None):
        """
        Create wx.Frame and initialzie components
        :param parent: Parent window or panel passed to wx.Frame
        :param data_list: Input data for extraction in a list of arrays (N x 2)
        :param config: UniDecConfig object. If None, will use defaults.
        :param yvals: Position values for corresponding data_list elements.
        For plots, these become the titles. For the Weighted-Average-of-Position (WAP) these are the position values.
        :param directory: Directory for saving files. Default is current working directory.
        :param header: Header for files that are written. Default is "Extract"
        :param params: List of 8 values that define the parameters for extraction.

        0=mass 0
        1=mass 1
        2=mass 2
        3=minimum oligomeric state of mass 1
        4=maximum oligomeric state of mass 1
        5=minimum oligomeric state of mass 2
        6=maximum oligomeric state of mass 2
        7=Error window for finding intensity value

        masses = m0 + m1 * range(min m1, max m1 +1) + m2 * range(min m2, max m2 +1)

        :return: None
        """
        wx.Frame.__init__(self, parent, title="2D Grid Extraction", size=(-1, -1))
        # Make Menu
        self.filemenu = wx.Menu()
        self.menuSaveFigPNG = self.filemenu.Append(wx.ID_ANY, "Save Figures as PNG",
                                                   "Save all figures as PNG in central directory")
        self.menuSaveFigPDF = self.filemenu.Append(wx.ID_ANY, "Save Figures as PDF",
                                                   "Save all figures as PDF in central directory")
        self.Bind(wx.EVT_MENU, self.on_save_fig, self.menuSaveFigPNG)
        self.Bind(wx.EVT_MENU, self.on_save_figPDF, self.menuSaveFigPDF)

        self.plotmenu = wx.Menu()
        self.menufit = self.plotmenu.Append(wx.ID_ANY, "Fit Gaussians",
                                            "Fit total distribution to a series of Gaussians")
        self.menufit2 = self.plotmenu.Append(wx.ID_ANY, "Fit Poisson",
                                             "Fit total distribution to a Poisson Distribution")
        self.menufit3 = self.plotmenu.Append(wx.ID_ANY, "Fit Binomial",
                                             "Fit total distribution to a Binomial Distribution")
        self.menufit4 = self.plotmenu.Append(wx.ID_ANY, "Fit Multiple Poissons",
                                             "Fit total distribution to multiple Poisson distributions")
        self.Bind(wx.EVT_MENU, self.on_fit, self.menufit)
        self.Bind(wx.EVT_MENU, self.on_fit2, self.menufit2)
        self.Bind(wx.EVT_MENU, self.on_fit3, self.menufit3)
        self.Bind(wx.EVT_MENU, self.on_fit4, self.menufit4)

        self.menuBar = wx.MenuBar()
        self.menuBar.Append(self.filemenu, "&File")
        self.menuBar.Append(self.plotmenu, "Plot")
        self.SetMenuBar(self.menuBar)
        # Initialize Parameters
        if config is None:
            # Default UniDecConfig object
            self.config = unidecstructure.UniDecConfig()
            self.config.initialize()
        else:
            self.config = config

        if directory is None:
            self.directory = os.getcwd()
        else:
            self.directory = directory

        if header is None:
            self.header = "Extract"
        else:
            self.header = header

        if params is None:
            self.params = [98868, 760.076, 22044, 0, 90, 0, 2, 0]
            self.params = [0, 4493, 678, 1, 20, 0, 30, 10]
        else:
            self.params = params

        self.datalist = data_list
        self.dlen = len(data_list)
        self.pos = -1
        self.yvals = np.array(yvals).astype(np.float)
        if ud.isempty(yvals):
            self.yvals = np.arange(0, len(data_list))
        self.storediscrete = deepcopy(self.config.discreteplot)

        # Setup GUI
        panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.plot1 = plot1d.Plot1d(panel)
        self.plot2 = plot2d.Plot2d(panel)
        sizer.Add(self.plot1, 1, wx.EXPAND)
        sizer.Add(self.plot2, 1, wx.EXPAND)

        controlsizer = wx.BoxSizer(wx.HORIZONTAL)
        controlsizer1 = wx.BoxSizer(wx.HORIZONTAL)

        self.ctlm0 = wx.TextCtrl(panel, value=str(self.params[0]))
        self.ctlm1 = wx.TextCtrl(panel, value=str(self.params[1]))
        self.ctlm2 = wx.TextCtrl(panel, value=str(self.params[2]))
        self.ctlm1min = wx.TextCtrl(panel, value=str(self.params[3]))
        self.ctlm1max = wx.TextCtrl(panel, value=str(self.params[4]))
        self.ctlm2min = wx.TextCtrl(panel, value=str(self.params[5]))
        self.ctlm2max = wx.TextCtrl(panel, value=str(self.params[6]))
        self.ctlwindow = wx.TextCtrl(panel, value=str(self.params[7]))

        controlsizer.Add(wx.StaticText(panel, label="Mass 0"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlm0, 0, wx.EXPAND)
        controlsizer.Add(wx.StaticText(panel, label="Mass 1"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlm1, 0, wx.EXPAND)
        controlsizer.Add(wx.StaticText(panel, label="Mass 2"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlm2, 0, wx.EXPAND)
        controlsizer.Add(wx.StaticText(panel, label="Mass Window"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlwindow, 0, wx.EXPAND)
        if self.dlen > 1:
            self.ctlnorm = wx.CheckBox(panel, label="Normalize")
            controlsizer.Add(self.ctlnorm, 0, wx.EXPAND)
        controlsizer1.Add(wx.StaticText(panel, label="Mass 1 Min #"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlm1min, 0, wx.EXPAND)
        controlsizer1.Add(wx.StaticText(panel, label="Mass 1 Max #"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlm1max, 0, wx.EXPAND)
        controlsizer1.Add(wx.StaticText(panel, label="Mass 2 Min #"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlm2min, 0, wx.EXPAND)
        controlsizer1.Add(wx.StaticText(panel, label="Mass 2 Max #"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlm2max, 0, wx.EXPAND)

        controlsizer2 = wx.BoxSizer(wx.HORIZONTAL)

        backbutton = wx.Button(panel, label="Back")
        nextbutton = wx.Button(panel, label="Next")
        if self.dlen > 1:
            totalbutton = wx.Button(panel, label="Total")
        else:
            totalbutton = wx.Button(panel, label="Replot")
        #wapbutton = wx.Button(panel, label="WAP")
        if self.dlen > 1:
            controlsizer2.Add(backbutton, 0, wx.EXPAND)
            controlsizer2.Add(nextbutton, 0, wx.EXPAND)
        controlsizer2.Add(totalbutton, 0, wx.EXPAND)
        #if self.dlen > 1:
            #controlsizer2.Add(wapbutton, 0, wx.EXPAND)

        self.Bind(wx.EVT_BUTTON, self.on_back, backbutton)
        self.Bind(wx.EVT_BUTTON, self.on_next, nextbutton)
        self.Bind(wx.EVT_BUTTON, self.on_total, totalbutton)
        #self.Bind(wx.EVT_BUTTON, self.on_wap, wapbutton)

        sizer.Add(controlsizer, 0, wx.EXPAND)
        sizer.Add(controlsizer1, 0, wx.EXPAND)
        sizer.Add(controlsizer2, 0, wx.EXPAND)

        self.Bind(wx.EVT_CLOSE, self.on_close, self)

        panel.SetSizer(sizer)
        sizer.Fit(self)
        # Run initial extraction
        try:
            self.on_total(0)
        except Exception as e:
            try:
                self.on_next(0)
            except:
                pass
            print(e)
        self.Centre()
        self.Show(True)
        self.normflag = 1
Esempio n. 13
0
    def __init__(self, parent, data, config=None, directory=None):
        """

        masses = m0 + m1 * range(min m1, max m1 +1)

        :return: None
        """

        wx.Frame.__init__(self,
                          parent,
                          title="2D Grid Extraction",
                          size=(-1, -1))
        # Make Menu
        self.filemenu = wx.Menu()
        self.menuSaveFigPNG = self.filemenu.Append(
            wx.ID_ANY, "Save Figures as PNG",
            "Save all figures as PNG in central directory")
        self.menuSaveFigPDF = self.filemenu.Append(
            wx.ID_ANY, "Save Figures as PDF",
            "Save all figures as PDF in central directory")
        self.Bind(wx.EVT_MENU, self.on_save_fig, self.menuSaveFigPNG)
        self.Bind(wx.EVT_MENU, self.on_save_figPDF, self.menuSaveFigPDF)

        self.menuBar = wx.MenuBar()
        self.menuBar.Append(self.filemenu, "&File")
        self.SetMenuBar(self.menuBar)

        # Initialize Parameters
        self.data = data

        self.config = config
        if self.config is None:
            self.config = unidecstructure.UniDecConfig()
            self.config.initialize()
            self.config.cmap = u"viridis"
            if directory is None:
                self.directory = os.getcwd()
        else:
            if directory is None:
                self.directory = self.config.dirname

        if self.config.griddecon is None:
            self.params = [98868, 760.076, 0, 120, 1, 25, 0, 20, 3, 1]
        else:
            self.params = self.config.griddecon

        if config is not None:
            self.params[0] = self.config.oligomerlist[0][0]
            self.params[1] = self.config.oligomerlist[0][1]
            self.params[2] = self.config.oligomerlist[0][2]
            self.params[3] = self.config.oligomerlist[0][3]
            self.params[4] = self.config.startz
            self.params[5] = self.config.endz
            self.params[7] = self.config.mzsig
            self.params[8] = self.config.msig
            self.params[9] = self.config.zzsig
            self.storediscrete = deepcopy(self.config.discreteplot)
        else:
            self.storediscrete = 1

        # Setup GUI
        panel = wx.Panel(self)
        topsizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.plot1 = plot1d.Plot1d(panel)
        self.plot2 = plot2d.Plot2d(panel)
        sizer.Add(self.plot1, 1, wx.EXPAND)
        sizer.Add(self.plot2, 1, wx.EXPAND)

        controlsizer = wx.BoxSizer(wx.VERTICAL)
        controlsizer1 = wx.BoxSizer(wx.VERTICAL)

        self.ctlm0 = wx.TextCtrl(panel, value=str(self.params[0]))
        self.ctlm1 = wx.TextCtrl(panel, value=str(self.params[1]))
        self.ctlm1min = wx.TextCtrl(panel, value=str(self.params[2]))
        self.ctlm1max = wx.TextCtrl(panel, value=str(self.params[3]))
        self.ctlm2min = wx.TextCtrl(panel, value=str(self.params[4]))
        self.ctlm2max = wx.TextCtrl(panel, value=str(self.params[5]))
        self.ctlwindow = wx.TextCtrl(panel, value=str(self.params[6]))
        self.ctlfwhm = wx.TextCtrl(panel, value=str(self.params[7]))
        self.ctlmsig = wx.TextCtrl(panel, value=str(self.params[8]))
        self.ctlzzsig = wx.TextCtrl(panel, value=str(self.params[9]))

        controlsizer1.Add(wx.StaticText(panel, label="Base Mass"), 0,
                          wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlm0, 0, wx.EXPAND)
        controlsizer1.Add(wx.StaticText(panel, label="Monomer Mass"), 0,
                          wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlm1, 0, wx.EXPAND)
        controlsizer1.Add(wx.StaticText(panel, label="Mass Window"), 0,
                          wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlwindow, 0, wx.EXPAND)
        controlsizer1.Add(wx.StaticText(panel, label="Monomer Min #"), 0,
                          wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlm1min, 0, wx.EXPAND)
        controlsizer1.Add(wx.StaticText(panel, label="Monomer Max #"), 0,
                          wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlm1max, 0, wx.EXPAND)
        controlsizer1.Add(wx.StaticText(panel, label="Minimum Charge State"),
                          0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlm2min, 0, wx.EXPAND)
        controlsizer1.Add(wx.StaticText(panel, label="Maximum Charge State"),
                          0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlm2max, 0, wx.EXPAND)
        controlsizer1.Add(
            wx.StaticText(panel, label="Peak Full Width at Half Max"), 0,
            wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlfwhm, 0, wx.EXPAND)
        controlsizer1.Add(wx.StaticText(panel, label="Mass Filter Width"), 0,
                          wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlmsig, 0, wx.EXPAND)
        controlsizer1.Add(wx.StaticText(panel, label="Charge Filter Width"), 0,
                          wx.ALIGN_CENTER_VERTICAL)
        controlsizer1.Add(self.ctlzzsig, 0, wx.EXPAND)

        controlsizer2 = wx.BoxSizer(wx.HORIZONTAL)

        extractbutton = wx.Button(panel, label="Extract")
        deconbutton = wx.Button(panel, label="Deconvolute")

        controlsizer2.Add(extractbutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.extract, extractbutton)
        controlsizer2.Add(deconbutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.deconvolve, deconbutton)

        controlsizer.Add(controlsizer1, 0, wx.EXPAND)
        controlsizer.Add(controlsizer2, 0, wx.EXPAND)

        topsizer.Add(sizer, 0, wx.EXPAND)
        topsizer.Add(controlsizer, 1, wx.EXPAND)

        self.Bind(wx.EVT_CLOSE, self.on_close, self)

        panel.SetSizer(topsizer)
        topsizer.Fit(self)

        # Run initial extraction
        self.extract(0)
        #self.deconvolve(0)

        self.Centre()
        self.Show(True)
Esempio n. 14
0
    def initialize_interface(self, massdat, ccsdat, mccsgrid, config, pks):
        """
        Initilizes the interface and plots the intial results.
        :param massdat: Mass distribution array (N x 2)
        :param ccsdat: CCS distribution array (M x 2)
        :param mccsgrid: Array of intensity values for corresponding mass and CCS values (N x M) array
        :param config: UniDecConfig object
        :param pks: Peaks object
        :return: None
        """
        self.config = config
        self.massdat = massdat
        self.ccsdat = ccsdat
        self.totalgrid = mccsgrid
        self.pks = pks
        self.ztab = np.arange(float(self.config.startz),
                              float(self.config.endz + 1))
        zstrings = [str(int(z)) for z in self.ztab]
        zstrings.append("All")

        pnl = wx.Panel(self)

        vbox = wx.BoxSizer(wx.VERTICAL)
        sb = wx.StaticBox(pnl, label='Ion Mobility Extraction Tool')
        sbs = wx.StaticBoxSizer(sb, orient=wx.HORIZONTAL)
        figsize = (6, 5)
        self.plot1 = plot2d.Plot2d(pnl, figsize=figsize)
        self.plot2 = plot1d.Plot1d(pnl, figsize=figsize)
        plotsizer = wx.BoxSizer(wx.VERTICAL)
        plotsizer.Add(self.plot1, 0, wx.EXPAND)
        plotsizer.Add(self.plot2, 0, wx.EXPAND)
        sbs.Add(plotsizer, 0, wx.EXPAND)

        sb2 = wx.StaticBox(pnl, label='Extraction Parameters')
        sbs2 = wx.StaticBoxSizer(sb2, orient=wx.VERTICAL)
        gbox1c = wx.GridBagSizer(wx.VERTICAL)
        size1 = (75, -1)

        self.ctlzout = wx.ComboBox(pnl, value="", size=size1, choices=zstrings)
        gbox1c.Add(self.ctlzout, (0, 1), span=(1, 1))
        gbox1c.Add(wx.StaticText(pnl, label="Charge State: "), (0, 0),
                   flag=wx.ALIGN_CENTER_VERTICAL)

        sbs2.Add(gbox1c, 0, wx.EXPAND)

        self.masspanel = IMListCtrlPanel(pnl, size=(200, 700))
        addbutton = wx.Button(pnl, label="Add Species")
        plotbutton = wx.Button(pnl, label="Plot Species")
        sbs2.Add(plotbutton, 0, wx.EXPAND)
        sbs2.Add(self.masspanel, 0, wx.EXPAND)
        sbs2.Add(addbutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.on_add, addbutton)
        self.Bind(wx.EVT_BUTTON, self.on_plot, plotbutton)

        sbs.Add(sbs2, 0, wx.EXPAND)
        pnl.SetSizer(sbs)

        hboxend = wx.BoxSizer(wx.HORIZONTAL)
        okbutton = wx.Button(self, label='Ok')
        closebutton = wx.Button(self, label='Cancel')
        okbutton.Bind(wx.EVT_BUTTON, self.on_close)
        closebutton.Bind(wx.EVT_BUTTON, self.on_close_cancel)
        hboxend.Add(okbutton)
        hboxend.Add(closebutton, flag=wx.LEFT, border=5)
        vbox.Add(pnl, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
        vbox.Add(hboxend, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10)

        self.SetSizer(vbox)
        vbox.Fit(self)

        self.CenterOnParent()
        self.loadpeaks(0)
        self.on_plot(0)
        self.ctlzout.SetSelection(len(zstrings) - 1)
Esempio n. 15
0
    def setupmainpanel(self):
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        panel = wx.Panel(self)

        file_drop_target = MyFileDropTarget(self)
        panel.SetDropTarget(file_drop_target)

        self.ypanel = ListCtrlPanel(panel, self.pres, size=(300, 300))
        sizer.Add(self.ypanel, 0, wx.EXPAND)

        # Tabbed view of plots
        if self.tabbed == 1:
            figsize = (6, 5)
            plotwindow = wx.Notebook(panel)
            tab1 = wx.Panel(plotwindow)
            tab2 = wx.Panel(plotwindow)
            tab3 = wx.Panel(plotwindow)
            tab5 = wx.Panel(plotwindow)
            tab6 = wx.Panel(plotwindow)
            tab7 = wx.Panel(plotwindow)
            tab8 = wx.Panel(plotwindow)
            tab9 = wx.Panel(plotwindow)

            self.plot1 = plot1d.Plot1d(tab1, smash=1, figsize=figsize)
            self.plot2 = plot1d.Plot1d(tab2, integrate=1, figsize=figsize)
            self.plot3 = plot2d.Plot2d(tab3, figsize=figsize)
            self.plot5 = plot2d.Plot2d(tab5, figsize=figsize)
            self.plot6 = plot1d.Plot1d(tab6, figsize=figsize)
            self.plot7 = plot1d.Plot1d(tab7, figsize=figsize)
            self.plot8 = plot2d.Plot2d(tab8, figsize=figsize)
            self.plot9 = plot1d.Plot1d(tab9, figsize=figsize)

            miscwindows.setup_tab_box(tab1, self.plot1)
            miscwindows.setup_tab_box(tab2, self.plot2)
            miscwindows.setup_tab_box(tab3, self.plot3)
            miscwindows.setup_tab_box(tab5, self.plot5)
            miscwindows.setup_tab_box(tab6, self.plot6)
            miscwindows.setup_tab_box(tab7, self.plot7)
            miscwindows.setup_tab_box(tab8, self.plot8)
            miscwindows.setup_tab_box(tab9, self.plot9)

            plotwindow.AddPage(tab1, "MS Data")
            plotwindow.AddPage(tab9, "Charge Distributions")
            plotwindow.AddPage(tab2, "Mass Distribution")
            plotwindow.AddPage(tab7, "Extracts Line Plot")
            plotwindow.AddPage(tab8, "Extracts Grid Plot")
            plotwindow.AddPage(tab6, "Bar Chart")
            plotwindow.AddPage(tab3, "m/z Grid")
            plotwindow.AddPage(tab5, "Mass vs. Charge")
            sizer.Add(plotwindow, 1, wx.EXPAND)
        else:
            self.plotpanel = scrolled.ScrolledPanel(panel)
            sizerplot = wx.GridBagSizer()
            figsize = self.config.figsize
            self.plot1 = plot1d.Plot1d(self.plotpanel, smash=1, figsize=figsize)
            self.plot2 = plot1d.Plot1d(self.plotpanel, integrate=1, figsize=figsize)
            self.plot3 = plot2d.Plot2d(self.plotpanel, figsize=figsize)
            self.plot5 = plot2d.Plot2d(self.plotpanel, figsize=figsize)
            self.plot6 = plot1d.Plot1d(self.plotpanel, figsize=figsize)
            self.plot7 = plot1d.Plot1d(self.plotpanel, figsize=figsize)
            self.plot8 = plot2d.Plot2d(self.plotpanel, figsize=figsize)
            self.plot9 = plot1d.Plot1d(self.plotpanel, figsize=figsize)
            sizerplot.Add(self.plot1, (0, 0), span=(1, 1), flag=wx.EXPAND)
            sizerplot.Add(self.plot9, (0, 1), span=(1, 1), flag=wx.EXPAND)
            sizerplot.Add(self.plot2, (1, 0), span=(1, 2), flag=wx.EXPAND)
            sizerplot.Add(self.plot6, (3, 0), span=(1, 2), flag=wx.EXPAND)
            sizerplot.Add(self.plot7, (2, 0), span=(1, 1), flag=wx.EXPAND)
            sizerplot.Add(self.plot8, (2, 1), span=(1, 1), flag=wx.EXPAND)
            sizerplot.Add(self.plot3, (4, 0), span=(1, 1), flag=wx.EXPAND)
            sizerplot.Add(self.plot5, (4, 1), span=(1, 1), flag=wx.EXPAND)

            self.plotpanel.SetSizerAndFit(sizerplot)
            self.plotpanel.SetupScrolling()
            sizer.Add(self.plotpanel, 1, wx.EXPAND)

        self.plots = [self.plot1, self.plot2, self.plot6, self.plot7, self.plot8, self.plot9, self.plot3, self.plot5]
        self.plotnames = ["MetaFigure1", "MetaFigure2", "MetaFigure3", "MetaFigure4", "MetaFigure5", "MetaFigure6",
                          "MeatFigure7", "MetaFigure8"]

        self.peakpanel = peaklistsort.PeakListCtrlPanel(panel, meta=True)
        self.Bind(self.peakpanel.EVT_DELETE_SELECTION_2, self.pres.on_delete, self.peakpanel)
        self.Bind(self.peakpanel.EVT_CHARGE_STATE, self.pres.on_charge_states_mud, self.peakpanel)
        self.Bind(self.peakpanel.EVT_DIFFERENCES, self.pres.on_differences, self.peakpanel)
        self.Bind(self.peakpanel.EVT_MASSES, self.pres.on_label_masses, self.peakpanel)
        sizer.Add(self.peakpanel, 0, wx.EXPAND)

        self.controls = main_controls(self, self.config, self.pres, panel, self.icon_path)
        sizer.Add(self.controls, 0, wx.EXPAND)

        # Set everything up
        panel.SetSizer(sizer)
        sizer.Fit(self)

        self.CreateStatusBar(7)
        self.SetStatusWidths([-1, 600, 120, 0, 230, 250, 130])
Esempio n. 16
0
    def __init__(self, parent, inputdata=None, config=None, directory=""):
        wx.Frame.__init__(self, parent, title="iFAMS")  # ,size=(-1,-1))

        self.parent = parent

        self.directory = directory

        # Set up the config file
        if config is None:
            self.config = unidecstructure.UniDecConfig()
            self.config.initialize()
        else:
            self.config = config

        # Make the menu
        filemenu = wx.Menu()
        menu_load_data = filemenu.Append(wx.ID_ANY, "Load Spectrum", "Loads the Mass Spectrum from a .txt file")
        menu_save_fig_png = filemenu.Append(wx.ID_ANY, "Save Figures as PNG",
                                            "Save all figures as PNG in central directory")
        menu_save_fig_pdf = filemenu.Append(wx.ID_ANY, "Save Figures as PDF",
                                            "Save all figures as PDF in central directory")
        self.Bind(wx.EVT_MENU, self.on_load_spectrum, menu_load_data)
        self.Bind(wx.EVT_MENU, self.on_save_fig, menu_save_fig_png)
        self.Bind(wx.EVT_MENU, self.on_save_fig_pdf, menu_save_fig_pdf)

        self.plotmenu = wx.Menu()

        menu_bar = wx.MenuBar()
        menu_bar.Append(filemenu, "&File")
        menu_bar.Append(self.plotmenu, "Plot")
        self.SetMenuBar(menu_bar)

        # Setup the Plots
        panel = wx.Panel(self)

        self.plot1 = plot1d.Plot1d(panel)
        self.plot2 = plot1d.Plot1d(panel)
        self.plot3 = plot1d.Plot1d(panel)
        self.plot4 = plot1d.Plot1d(panel)

        sizer = wx.BoxSizer(wx.VERTICAL)
        plotsizer1 = wx.BoxSizer(wx.HORIZONTAL)
        plotsizer2 = wx.BoxSizer(wx.HORIZONTAL)
        plotsizer1.Add(self.plot1, 2, wx.EXPAND)
        plotsizer1.Add(self.plot4, 0, wx.EXPAND)

        plotsizer2.Add(self.plot2, 2, wx.EXPAND)
        plotsizer2.Add(self.plot3, 0, wx.EXPAND)

        sizer.Add(plotsizer1, 1, wx.EXPAND)
        sizer.Add(plotsizer2, 1, wx.EXPAND)

        controlsizer = wx.BoxSizer(wx.HORIZONTAL)
        controlsizer2 = wx.BoxSizer(wx.HORIZONTAL)
        controlsizer3 = wx.BoxSizer(wx.HORIZONTAL)
        controlsizer4 = wx.BoxSizer(wx.HORIZONTAL)
        controlsizer5 = wx.BoxSizer(wx.HORIZONTAL)

        # Set up the controls
        self.ctlm0 = wx.TextCtrl(panel, value=str(0))
        self.ctlwindow = wx.TextCtrl(panel, value=str(0))
        self.ctlwindow1 = wx.TextCtrl(panel, value=str(0))
        self.zerodata = wx.TextCtrl(panel, value=str(0))
        self.overtone = wx.TextCtrl(panel, value=str(0))
        self.harmavg = wx.TextCtrl(panel, value=str(0))
        self.lowcharge = wx.TextCtrl(panel, value=str(0))
        self.highcharge = wx.TextCtrl(panel, value=str(0))
        self.mansub = wx.TextCtrl(panel, value=str(0))
        controlsizer2.Add(wx.StaticText(panel, label="Minimum Frequency"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer2.Add(self.ctlm0, 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer2.Add(wx.StaticText(panel, label="Minimum Height"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer2.Add(self.ctlwindow, 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer2.Add(wx.StaticText(panel, label="Delta"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer2.Add(self.ctlwindow1, 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer4.Add(wx.StaticText(panel, label="# of zero frequency data"), 0, wx.ALIGN_RIGHT)
        controlsizer4.Add(self.zerodata, 0, wx.ALIGN_RIGHT)
        controlsizer4.Add(wx.StaticText(panel, label="# of harmonics for filter"), 0, wx.ALIGN_RIGHT)
        controlsizer4.Add(self.overtone, 0, wx.ALIGN_RIGHT)
        controlsizer3.Add(wx.StaticText(panel, label="# of harmonics for average"), 0, wx.ALIGN_RIGHT)
        controlsizer3.Add(self.harmavg, 0, wx.ALIGN_RIGHT)
        controlsizer5.Add(wx.StaticText(panel, label="lowest charge state"), 0, wx.ALIGN_RIGHT)
        controlsizer5.Add(self.lowcharge, 0, wx.ALIGN_RIGHT)
        controlsizer5.Add(wx.StaticText(panel, label="highest charge state"), 0, wx.ALIGN_RIGHT)
        controlsizer5.Add(self.highcharge, 0, wx.ALIGN_RIGHT)
        controlsizer5.Add(wx.StaticText(panel, label="subunit mass"), 0, wx.ALIGN_RIGHT)
        controlsizer5.Add(self.mansub, 0, wx.ALIGN_RIGHT)

        recalcbutton = wx.Button(panel, label="Recalc. Maxima Finder")
        controlsizer2.Add(recalcbutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.on_calc, recalcbutton)

        iFAMSbutton = wx.Button(panel, label="Run iFAMS analysis")
        controlsizer.Add(iFAMSbutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.on_SubAndCharCalc, iFAMSbutton)

        Filbutton = wx.Button(panel, label="Fourier Filter")
        controlsizer4.Add(Filbutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.on_fourier_fil, Filbutton)

        havgbutton = wx.Button(panel, label="Harmonic Average")
        controlsizer3.Add(havgbutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.on_harm_average, havgbutton)

        self.realdatasel = wx.CheckBox(panel, label="plot real data")
        controlsizer.Add(self.realdatasel, 0, wx.EXPAND)
        self.Bind(wx.EVT_CHECKBOX, self.onChecked)

        mancalcbutton = wx.Button(panel, label="Man Calc Subunit and Charge")
        controlsizer5.Add(mancalcbutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.on_man_calc, mancalcbutton)

        sizer.Add(controlsizer, 0, wx.EXPAND)
        sizer.Add(controlsizer2, 0, wx.EXPAND)
        sizer.Add(controlsizer3, 0, wx.EXPAND)
        sizer.Add(controlsizer4, 0, wx.EXPAND)
        sizer.Add(controlsizer5, 0, wx.EXPAND)

        panel.SetSizer(sizer)
        sizer.Fit(self)

        self.Bind(wx.EVT_CLOSE, self.on_close)

        self.Centre()
        # self.MakeModal(True)
        self.Show(True)
        self.Raise()

        if inputdata is not None:
            self.data = inputdata
            self.makeplot()
Esempio n. 17
0
    def __init__(self, parent, data, config=None, directory=None):

        wx.Frame.__init__(self, parent, title="FFT Analysis")

        # Setup initial values
        if directory is None:
            self.directory = os.getcwd()
        else:
            self.directory = directory

        if config is None:
            self.config = unidecstructure.UniDecConfig()
            self.config.initialize()
            self.config.discreteplot = 0
        else:
            self.config = config

        self.config.publicationmode = 0

        self.window_fwhm = 500
        self.binsize = 0.5
        self.wbin = 200
        self.diffrange = [700, 800]

        self.rawdata = data
        self.rawdata[:, 1] /= np.amax(self.rawdata[:, 1])
        self.xlims = [min(data[:, 0]), max(data[:, 0])]

        # Make the menu
        filemenu = wx.Menu()
        menu_save_fig_png = filemenu.Append(wx.ID_ANY, "Save Figures as PNG",
                                            "Save all figures as PNG in central directory")
        menu_save_fig_pdf = filemenu.Append(wx.ID_ANY, "Save Figures as PDF",
                                            "Save all figures as PDF in central directory")
        self.Bind(wx.EVT_MENU, self.on_save_fig, menu_save_fig_png)
        self.Bind(wx.EVT_MENU, self.on_save_fig_pdf, menu_save_fig_pdf)

        self.plotmenu = wx.Menu()
        self.menuaddline = self.plotmenu.Append(wx.ID_ANY, "Add Horizontal Line",
                                                "Add Horizontal Line at Specific Y Value")
        self.Bind(wx.EVT_MENU, self.on_add_line, self.menuaddline)

        self.menupeaks = self.plotmenu.Append(wx.ID_ANY, "Get Peaks",
                                              "Get Peaks from Spectrum")
        self.Bind(wx.EVT_MENU, self.on_get_peaks, self.menupeaks)

        menu_bar = wx.MenuBar()
        menu_bar.Append(filemenu, "&File")
        menu_bar.Append(self.plotmenu, "Plot")
        self.SetMenuBar(menu_bar)

        # Setup the GUI
        displaysize = wx.GetDisplaySize()
        panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        plotpanel1 = wx.BoxSizer(wx.HORIZONTAL)
        plotpanel2 = wx.BoxSizer(wx.HORIZONTAL)
        if displaysize[0] < 1700:
            figsize = (4, 3)
        else:
            figsize = (5, 4)
        self.plot1 = plot1d.Plot1d(panel, figsize=figsize)
        self.plot2 = plot2d.Plot2d(panel, figsize=figsize)
        self.plot3 = plot1d.Plot1d(panel, figsize=figsize)
        self.plot4 = plot1d.Plot1d(panel, figsize=figsize)
        plotpanel1.Add(self.plot1, 1, flag=wx.EXPAND)
        plotpanel2.Add(self.plot2, 1, flag=wx.EXPAND)
        plotpanel1.Add(self.plot3, 1, flag=wx.EXPAND)
        plotpanel2.Add(self.plot4, 1, flag=wx.EXPAND)
        self.plot1._axes = [0.1, 0.1, 0.64, 0.8]

        controlsizer = wx.BoxSizer(wx.HORIZONTAL)
        controlsizer2 = wx.BoxSizer(wx.HORIZONTAL)

        self.ctlfwhm = wx.TextCtrl(panel, value=str(self.window_fwhm))
        self.ctlwbin = wx.TextCtrl(panel, value=str(self.wbin))
        self.ctlbinsize = wx.TextCtrl(panel, value=str(self.binsize))
        controlsizer.Add(wx.StaticText(panel, label=" Window FWHM:"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlfwhm, 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(wx.StaticText(panel, label=" Window every:"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlwbin, 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(wx.StaticText(panel, label=" Linearization Bin Size:"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlbinsize, 0, wx.ALIGN_CENTER_VERTICAL)

        self.ctlmin = wx.TextCtrl(panel, value=str(self.diffrange[0]))
        self.ctlmax = wx.TextCtrl(panel, value=str(self.diffrange[1]))
        controlsizer2.Add(wx.StaticText(panel, label=" Min Difference:"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer2.Add(self.ctlmin, 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer2.Add(wx.StaticText(panel, label=" Max Difference:"), 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer2.Add(self.ctlmax, 0, wx.ALIGN_CENTER_VERTICAL)

        label = "Replot"
        replotbutton = wx.Button(panel, label=label)
        controlsizer2.Add(replotbutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.makeplot, replotbutton)
        comparebutton = wx.Button(panel, label="Compare")
        controlsizer2.Add(comparebutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.on_compare_regions, comparebutton)
        self.compareclicks = 0
        self.comparetext = wx.StaticText(panel, label="Click to activate compare mode")
        controlsizer2.Add(self.comparetext, 0, wx.ALIGN_CENTER_VERTICAL)

        sizer.Add(plotpanel1, 0, wx.EXPAND)
        sizer.Add(plotpanel2, 0, wx.EXPAND)
        sizer.Add(controlsizer, 0, wx.EXPAND)
        sizer.Add(controlsizer2, 0, wx.EXPAND)

        panel.SetSizer(sizer)
        sizer.Fit(self)

        self.Bind(wx.EVT_CLOSE, self.on_close)
        self.makeplot()
        self.Centre()
        # self.MakeModal(True)
        self.Show(True)
Esempio n. 18
0
    def __init__(self,
                 parent,
                 datalist,
                 xvals=None,
                 config=None,
                 directory=None):

        wx.Frame.__init__(self, parent, title="FFT Analysis")

        # Setup initial values
        if directory is None:
            self.directory = os.getcwd()
        else:
            self.directory = directory

        if config is None:
            self.config = unidecstructure.UniDecConfig()
            self.config.initialize()
            self.config.discreteplot = 0
        else:
            self.config = config

        self.config.publicationmode = 0

        self.binsize = 0.5
        self.diffrange = [740, 770]

        if xvals is None:
            xvals = np.arange(0, len(datalist))
        self.xvals = xvals

        self.datalist = np.array(datalist)
        mins = []
        maxes = []
        for d in self.datalist:
            d[:, 1] /= np.amax(d[:, 1])
            mins.append(np.amin(d[:, 0]))
            maxes.append(np.amax(d[:, 0]))
        self.xlims = [min(mins), max(maxes)]
        self.colors = self.config.get_colors(len(self.datalist))

        # Make the menu
        filemenu = wx.Menu()
        menu_save_fig_png = filemenu.Append(
            wx.ID_ANY, "Save Figures as PNG",
            "Save all figures as PNG in central directory")
        menu_save_fig_pdf = filemenu.Append(
            wx.ID_ANY, "Save Figures as PDF",
            "Save all figures as PDF in central directory")
        self.Bind(wx.EVT_MENU, self.on_save_fig, menu_save_fig_png)
        self.Bind(wx.EVT_MENU, self.on_save_fig_pdf, menu_save_fig_pdf)

        self.plotmenu = wx.Menu()
        self.menuaddline = self.plotmenu.Append(
            wx.ID_ANY, "Add Horizontal Line",
            "Add Horizontal Line at Specific Y Value")
        self.Bind(wx.EVT_MENU, self.on_add_line, self.menuaddline)

        #self.menupeaks = self.plotmenu.Append(wx.ID_ANY, "Get Peaks",
        #                                      "Get Peaks from Spectrum")
        #self.Bind(wx.EVT_MENU, self.on_get_peaks, self.menupeaks)

        menu_bar = wx.MenuBar()
        menu_bar.Append(filemenu, "&File")
        menu_bar.Append(self.plotmenu, "Plot")
        self.SetMenuBar(menu_bar)

        # Setup the GUI
        displaysize = wx.GetDisplaySize()
        panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        plotpanel1 = wx.BoxSizer(wx.HORIZONTAL)
        plotpanel2 = wx.BoxSizer(wx.HORIZONTAL)
        if displaysize[0] < 1700:
            figsize = (4, 3)
        else:
            figsize = (5, 4)
        self.plot1 = plot1d.Plot1d(panel, figsize=figsize)
        self.plot2 = plot2d.Plot2d(panel, figsize=figsize)
        self.plot3 = plot1d.Plot1d(panel, figsize=figsize)
        self.plot4 = plot1d.Plot1d(panel, figsize=figsize)
        plotpanel1.Add(self.plot1, 1, flag=wx.EXPAND)
        plotpanel2.Add(self.plot2, 1, flag=wx.EXPAND)
        plotpanel1.Add(self.plot3, 1, flag=wx.EXPAND)
        plotpanel2.Add(self.plot4, 1, flag=wx.EXPAND)
        self.plot1._axes = [0.1, 0.1, 0.64, 0.8]

        controlsizer = wx.BoxSizer(wx.HORIZONTAL)
        controlsizer2 = wx.BoxSizer(wx.HORIZONTAL)

        self.ctlminmz = wx.TextCtrl(panel, value=str(self.xlims[0]))
        self.ctlmaxmz = wx.TextCtrl(panel, value=str(self.xlims[1]))
        self.ctlbinsize = wx.TextCtrl(panel, value=str(self.binsize))
        controlsizer.Add(wx.StaticText(panel, label=" Min m/z:"), 0,
                         wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlminmz, 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(wx.StaticText(panel, label=" Max m/z:"), 0,
                         wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlmaxmz, 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(
            wx.StaticText(panel, label=" Linearization Bin Size:"), 0,
            wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlbinsize, 0, wx.ALIGN_CENTER_VERTICAL)

        self.ctlmin = wx.TextCtrl(panel, value=str(self.diffrange[0]))
        self.ctlmax = wx.TextCtrl(panel, value=str(self.diffrange[1]))
        controlsizer2.Add(wx.StaticText(panel, label=" Min Difference:"), 0,
                          wx.ALIGN_CENTER_VERTICAL)
        controlsizer2.Add(self.ctlmin, 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer2.Add(wx.StaticText(panel, label=" Max Difference:"), 0,
                          wx.ALIGN_CENTER_VERTICAL)
        controlsizer2.Add(self.ctlmax, 0, wx.ALIGN_CENTER_VERTICAL)
        self.ctlsep = wx.TextCtrl(panel, value=str(self.config.separation))
        controlsizer2.Add(wx.StaticText(panel, label=" Plot Separation:"), 0,
                          wx.ALIGN_CENTER_VERTICAL)
        controlsizer2.Add(self.ctlsep, 0, wx.ALIGN_CENTER_VERTICAL)

        label = "Replot"
        replotbutton = wx.Button(panel, label=label)
        controlsizer2.Add(replotbutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.makeplot, replotbutton)

        sizer.Add(plotpanel1, 0, wx.EXPAND)
        sizer.Add(plotpanel2, 0, wx.EXPAND)
        sizer.Add(controlsizer, 0, wx.EXPAND)
        sizer.Add(controlsizer2, 0, wx.EXPAND)

        panel.SetSizer(sizer)
        sizer.Fit(self)

        self.Bind(wx.EVT_CLOSE, self.on_close)
        self.makeplot()
        self.Centre()
        # self.MakeModal(True)
        self.Show(True)
Esempio n. 19
0
    def __init__(self,
                 parent,
                 data_list,
                 config=None,
                 yvals=None,
                 pks=None,
                 value=None,
                 directory=None):
        """
        Creates a window for visualizing high-mass mass defects.
        :param parent: Passed to wx.Frame
        :param data_list: List of mass distribution data.
        :param config: UniDecConfig object
        :param yvals: List of titles for each mass distribution in data_list
        :param pks: Peaks object
        :param value: Kendrick reference mass (default is 760.076, the mass of POPC)
        :param directory: Directory to save files to (default is os.getcwd())
        :return: None
        """
        wx.Frame.__init__(self, parent, title="Mass Defect")  # ,size=(-1,-1))

        # Setup initial values
        if directory is None:
            self.directory = os.getcwd()
        else:
            self.directory = directory

        self.parent = parent
        self.m0 = deepcopy(value)
        if self.m0 is None:
            self.m0 = 760.076

        if config is None:
            self.config = unidecstructure.UniDecConfig()
            self.config.initialize()
            self.config.discreteplot = 0
            self.config.cmap = u"jet"
            self.config.peakcmap = u"rainbow"
            self.config.separation = 0.025
        else:
            self.config = config

        self.config.publicationmode = 0
        self.pos = -1
        self.yvals = yvals

        self.ylab = "Normalized Mass Defect"
        if self.config.defectparams is not None:
            p = self.config.defectparams
            self.nbins = p[0]
            self.transformmode = p[1]
            self.centermode = p[2]
            self.xtype = p[3]
        else:
            self.nbins = 50
            self.transformmode = 1
            self.centermode = 1
            self.xtype = 0
        self.factor = 1
        self.xlab = ""
        self.outfname = os.path.splitext(self.config.filename)[0]
        if self.outfname is not "":
            self.outfname += "_"

        try:
            self.datalist = [data_list[0]]
        except:
            self.datalist = data_list[0]

        for i in range(1, len(data_list)):
            self.datalist.append(ud.mergedata(data_list[0], data_list[i]))
        self.datalist = np.array(self.datalist)

        if self.yvals is not None:
            try:
                self.yvals = np.array(self.yvals, dtype="float")
            except:
                self.yvals = np.arange(0, len(self.datalist))

        self.datasum = np.transpose(
            [self.datalist[0, :, 0],
             np.sum(self.datalist[:, :, 1], axis=0)])
        print("Data list shape:", self.datalist.shape)

        # Make the menu
        filemenu = wx.Menu()
        if self.datalist.shape[0] > 1:
            extractwindow = filemenu.Append(
                wx.ID_ANY, "Extract Mass Defect Values",
                "Open Window to Extract Mass Defect Values")
            self.Bind(wx.EVT_MENU, self.on_extract_window, extractwindow)
            filemenu.AppendSeparator()

        menu_save_fig_png = filemenu.Append(
            wx.ID_ANY, "Save Figures as PNG",
            "Save all figures as PNG in central directory")
        menu_save_fig_pdf = filemenu.Append(
            wx.ID_ANY, "Save Figures as PDF",
            "Save all figures as PDF in central directory")

        self.Bind(wx.EVT_MENU, self.on_save_fig, menu_save_fig_png)
        self.Bind(wx.EVT_MENU, self.on_save_fig_pdf, menu_save_fig_pdf)

        self.plotmenu = wx.Menu()
        self.menuaddline = self.plotmenu.Append(
            wx.ID_ANY, "Add Horizontal Line",
            "Add Horizontal Line at Specific Y Value")
        self.menufit = self.plotmenu.Append(wx.ID_ANY, "Fit Peaks",
                                            "Fit total mass defect peaks")
        self.menupeaks = self.plotmenu.Append(wx.ID_ANY, "Label Peaks",
                                              "Label peaks")
        self.Bind(wx.EVT_MENU, self.on_add_line, self.menuaddline)
        self.Bind(wx.EVT_MENU, self.on_fit, self.menufit)
        self.Bind(wx.EVT_MENU, self.on_label_peaks, self.menupeaks)

        menu_bar = wx.MenuBar()
        menu_bar.Append(filemenu, "&File")
        menu_bar.Append(self.plotmenu, "Plot")
        self.SetMenuBar(menu_bar)

        # Setup the GUI
        panel = wx.Panel(self)

        self.plot1 = plot1d.Plot1d(panel)
        self.plot2 = plot2d.Plot2d(panel)
        self.plot3 = plot1d.Plot1d(panel)
        self.plot4 = plot1d.Plot1d(panel)

        if self.datalist.shape[0] > 1:
            self.flag2 = True
            self.plot5 = plot1d.Plot1d(panel)
            self.plot6 = plot2d.Plot2d(panel)
        else:
            self.flag2 = False
            self.plot5 = None
            self.plot6 = None

        sizer = wx.BoxSizer(wx.VERTICAL)
        plotsizer1 = wx.BoxSizer(wx.HORIZONTAL)
        plotsizer2 = wx.BoxSizer(wx.HORIZONTAL)
        plotsizer1.Add(self.plot1, 2, wx.EXPAND)
        plotsizer1.Add(self.plot4, 0, wx.EXPAND)

        plotsizer2.Add(self.plot2, 2, wx.EXPAND)
        plotsizer2.Add(self.plot3, 0, wx.EXPAND)

        if self.flag2:
            plotsizer1.Add(self.plot5, 0, wx.EXPAND)
            plotsizer2.Add(self.plot6, 0, wx.EXPAND)
        sizer.Add(plotsizer1, 1, wx.EXPAND)
        sizer.Add(plotsizer2, 1, wx.EXPAND)

        controlsizer = wx.BoxSizer(wx.HORIZONTAL)

        self.ctlm0 = wx.TextCtrl(panel, value=str(self.m0))
        self.ctlwindow = wx.TextCtrl(panel, value=str(self.nbins))
        controlsizer.Add(wx.StaticText(panel, label="Kendrick Mass"), 0,
                         wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlm0, 0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(wx.StaticText(panel, label="Number of Defect Bins"),
                         0, wx.ALIGN_CENTER_VERTICAL)
        controlsizer.Add(self.ctlwindow, 0, wx.ALIGN_CENTER_VERTICAL)

        controlsizer2 = wx.BoxSizer(wx.HORIZONTAL)
        if len(data_list) > 1:
            label = "Back"
        else:
            label = "Replot"
        backbutton = wx.Button(panel, label=label)
        controlsizer2.Add(backbutton, 0, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.on_back, backbutton)
        if len(data_list) > 1:
            nextbutton = wx.Button(panel, label="Next")
            controlsizer2.Add(nextbutton, 0, wx.EXPAND)
            self.Bind(wx.EVT_BUTTON, self.on_next, nextbutton)
            totalbutton = wx.Button(panel, label="Total")
            controlsizer2.Add(totalbutton, 0, wx.EXPAND)
            self.Bind(wx.EVT_BUTTON, self.makeplottotal, totalbutton)
        else:
            if not ud.isempty(pks):
                self.pks = pks
                peaksbutton = wx.Button(panel, label="Plot Peaks")
                controlsizer2.Add(peaksbutton, 0, wx.EXPAND)
                self.Bind(wx.EVT_BUTTON, self.on_peaks, peaksbutton)

        self.radiobox = wx.RadioBox(panel,
                                    choices=["Integrate", "Interpolate"],
                                    label="Type of Transform")
        controlsizer.Add(self.radiobox, 0, wx.EXPAND)
        self.radiobox.SetSelection(self.transformmode)

        self.radiobox2 = wx.RadioBox(panel,
                                     choices=["-0.5:0.5", "0:1"],
                                     label="Range")
        controlsizer.Add(self.radiobox2, 0, wx.EXPAND)
        self.radiobox2.SetSelection(self.centermode)

        self.radiobox3 = wx.RadioBox(panel,
                                     choices=["Normalized", "Mass (Da)"],
                                     label="Mass Defect Units")
        controlsizer.Add(self.radiobox3, 0, wx.EXPAND)
        self.radiobox3.SetSelection(self.xtype)

        sizer.Add(controlsizer, 0, wx.EXPAND)
        sizer.Add(controlsizer2, 0, wx.EXPAND)

        panel.SetSizer(sizer)
        sizer.Fit(self)

        self.Bind(wx.EVT_CLOSE, self.on_close)

        try:
            self.makeplottotal(0)
        except Exception as e:
            self.on_next(0)

        self.Centre()
        # self.MakeModal(True)
        self.Show(True)
        self.Raise()
Esempio n. 20
0
    def __init__(self, parent, title, path=None, *args, **kwargs):
        wx.Frame.__init__(self, parent, title=title)  # ,size=(200,-1))
        self.CreateStatusBar(4)
        self.SetStatusWidths([-1, 150, 150, 150])
        pub.subscribe(self.on_motion, 'newxy')
        pub.subscribe(self.on_selection, 'scans_selected')

        self.filemenu = wx.Menu()
        self.menuOpen = self.filemenu.Append(wx.ID_SAVE, "Open File", "Open File")
        self.Bind(wx.EVT_MENU, self.on_open, self.menuOpen)

        self.menuBar = wx.MenuBar()
        self.menuBar.Append(self.filemenu, "&File")
        self.SetMenuBar(self.menuBar)

        self.panel = wx.Panel(self)
        self.panel.SetDropTarget(ChromDropTarget(self))
        self.sizer = wx.BoxSizer(wx.VERTICAL)

        self.inputsizer = wx.BoxSizer(wx.HORIZONTAL)

        self.plotc = plot1d.Plot1d(self.panel)
        self.plotm = plot1d.Plot1d(self.panel)

        self.inputsizer.Add(self.plotc)
        self.inputsizer.Add(self.plotm)

        self.sizer.Add(self.inputsizer, 1, wx.EXPAND)

        self.ctlsizer = wx.BoxSizer(wx.HORIZONTAL)
        self.runbutton = wx.Button(self.panel, label="Run UniDec")
        self.Bind(wx.EVT_BUTTON, self.on_unidec_run, self.runbutton)
        self.ctlsizer.Add(self.runbutton)

        self.exportbutton = wx.Button(self.panel, label="Export m/z data as:")
        self.Bind(wx.EVT_BUTTON, self.export_mz_file, self.exportbutton)
        self.ctlsizer.Add(self.exportbutton)

        self.ctlfname = wx.TextCtrl(self.panel, value="", size=(100, 20))
        self.ctlsizer.Add(self.ctlfname, 1, wx.EXPAND)

        self.autobutton = wx.Button(self.panel, label="Autoexport in steps of:")
        self.Bind(wx.EVT_BUTTON, self.on_autoexport, self.autobutton)
        self.ctlsizer.Add(self.autobutton)

        self.ctlmin = wx.TextCtrl(self.panel, value="2", size=(100, 20))
        self.ctlsizer.Add(self.ctlmin, 0)
        self.ctlsizer.Add(wx.StaticText(self.panel, label="minutes. Start label at:"), 0, wx.ALIGN_CENTER_VERTICAL)

        self.ctlstart = wx.TextCtrl(self.panel, value="40", size=(100, 20))
        self.ctlsizer.Add(self.ctlstart, 0)
        self.ctlsizer.Add(wx.StaticText(self.panel, label=" and increment label by:"), 0, wx.ALIGN_CENTER_VERTICAL)

        self.ctlincr = wx.TextCtrl(self.panel, value="10", size=(100, 20))
        self.ctlsizer.Add(self.ctlincr, 0)

        self.sizer.Add(self.ctlsizer, 0, wx.EXPAND)

        self.panel.SetSizer(self.sizer)
        self.sizer.Fit(self)

        self.Centre()
        self.Show(True)

        self.eng = ChromEngine()
        self.outputfile = None
        self.udwin = None
        self.scans = None
        self.autoparams = None

        if path is not None:
            self.open_file(path)