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
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()
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])
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)
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)
def __init__( self, parent, datalist=None, filelist=None, config=None, ): """ """ wx.Frame.__init__(self, parent, title="Mass Defect Comparison") # ,size=(-1,-1)) file1 = None file2 = None if datalist is None: if filelist is None: if config is None: print( "ERROR: No data supplied to Mass Defect Compare Window" ) return else: self.config = config file1 = self.config.defectcomparefiles[0] file2 = self.config.defectcomparefiles[1] else: file1 = filelist[0] file2 = filelist[1] self.get_data(file1, file2) self.file1 = file1 self.file2 = file2 self.parent = parent 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.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 = self.config.outfname if self.outfname != "": self.outfname += "_" self.total = False self.notchanged = False ''' # 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.menuaddmultiline = self.plotmenu.Append(wx.ID_ANY, "Add Multiple Lines", "Add Multiple Horizontal Lines at Specific Y Values") 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.menulinreg = self.plotmenu.Append(wx.ID_ANY, "Linear Regression", "Linear Regression") self.menucom = self.plotmenu.Append(wx.ID_ANY, "Center of Mass", "Center of Mass") self.Bind(wx.EVT_MENU, self.on_add_line, self.menuaddline) self.Bind(wx.EVT_MENU, self.on_add_multilines, self.menuaddmultiline) self.Bind(wx.EVT_MENU, self.on_fit, self.menufit) self.Bind(wx.EVT_MENU, self.on_label_peaks, self.menupeaks) self.Bind(wx.EVT_MENU, self.on_linear_regression, self.menulinreg) self.Bind(wx.EVT_MENU, self.on_com, self.menucom) 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 = plot2d.Plot2d(panel) self.plot2 = plot2d.Plot2d(panel) self.plot3 = ColorPlot.ColorPlot2D(panel) # self.plot4 = plot1d.Plot1d(panel) sizer = wx.BoxSizer(wx.VERTICAL) # plotsizer1 = wx.BoxSizer(wx.HORIZONTAL) plotsizer2 = wx.BoxSizer(wx.HORIZONTAL) # plotsizer1.Add(self.plot4, 0, wx.EXPAND) plotsizer2.Add(self.plot1, 2, wx.EXPAND) plotsizer2.Add(self.plot2, 2, wx.EXPAND) plotsizer2.Add(self.plot3, 2, wx.EXPAND) # sizer.Add(plotsizer1, 1, wx.EXPAND) sizer.Add(plotsizer2, 1, wx.EXPAND) controlsizer = wx.BoxSizer(wx.HORIZONTAL) self.ctlf1 = wx.TextCtrl(panel, value=str(self.file1), size=(1500, 25)) self.f1button = wx.Button(panel, label="File 1: ") self.Bind(wx.EVT_BUTTON, self.on_f1button, self.f1button) controlsizer.Add(self.f1button, 0, wx.ALIGN_CENTER_VERTICAL) controlsizer.Add(self.ctlf1, 0, wx.ALIGN_CENTER_VERTICAL) controlsizer1 = wx.BoxSizer(wx.HORIZONTAL) self.ctlf2 = wx.TextCtrl(panel, value=str(self.file2), size=(1500, 25)) self.f2button = wx.Button(panel, label="File 2: ") self.Bind(wx.EVT_BUTTON, self.on_f2button, self.f2button) controlsizer1.Add(self.f2button, 0, wx.ALIGN_CENTER_VERTICAL) controlsizer1.Add(self.ctlf2, 0, wx.ALIGN_CENTER_VERTICAL) controlsizer2 = wx.BoxSizer(wx.HORIZONTAL) label = "Replot" ReplotButton = wx.Button(panel, label=label) controlsizer2.Add(ReplotButton, 0, wx.EXPAND) self.Bind(wx.EVT_BUTTON, self.on_replot, ReplotButton) ''' 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(controlsizer1, 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(0) self.Centre() # self.MakeModal(True) self.Show(True) self.Raise()
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)
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()
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)
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()
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
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)
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)
def setup_panel(self): """ Make/remake the main panel. :return: None """ # TODO: Inherit this from mainwindow somehow so controls are the same. for child in self.pnl.GetChildren(): child.Destroy() for child in self.pnl2.GetChildren(): child.Destroy() vbox = wx.BoxSizer(wx.VERTICAL) sb = wx.StaticBox(self.pnl, label='Ion Mobility Parameters Tool') sbs = wx.StaticBoxSizer(sb, orient=wx.VERTICAL) self.plot = plot2d.Plot2d(self.pnl) self.plot.contourplot(self.data3, self.config, xlab="m/z (Th)", ylab="Arrival Time (ms)", title="IM-MS Data") sbs.Add(self.plot, 1, wx.EXPAND) ctlsizer = wx.BoxSizer(wx.HORIZONTAL) sb2 = wx.StaticBox(self.pnl, label='Instrumental Parameters') sbs2 = wx.StaticBoxSizer(sb2, orient=wx.VERTICAL) gbox1c = wx.GridBagSizer(wx.VERTICAL) size1 = (75, -1) self.ctltwave = wx.RadioBox(self.pnl, label="", choices=["Linear Cell", "Travelling Wave"]) self.Bind(wx.EVT_RADIOBOX, self.on_flip_twave, self.ctltwave) gbox1c.Add(self.ctltwave, (0, 0), span=(1, 5)) self.twave = self.config.twaveflag > 0 if not self.twave: self.ctltwave.SetSelection(0) # Linear Mode controls self.ctlvolt = wx.TextCtrl(self.pnl, value="", size=size1) gbox1c.Add(self.ctlvolt, (1, 1), span=(1, 1)) gbox1c.Add(wx.StaticText(self.pnl, label="Voltage (V): "), (1, 0), flag=wx.ALIGN_CENTER_VERTICAL) self.ctlpressure = wx.TextCtrl(self.pnl, value='', size=size1) gbox1c.Add(self.ctlpressure, (2, 1), span=(1, 1)) gbox1c.Add(wx.StaticText(self.pnl, label="Pressure (Torr): "), (2, 0), flag=wx.ALIGN_CENTER_VERTICAL) self.ctltemp = wx.TextCtrl(self.pnl, value='', size=size1) gbox1c.Add(self.ctltemp, (3, 1), span=(1, 1)) gbox1c.Add(wx.StaticText(self.pnl, label="Temperature (\u00B0C): "), (3, 0), flag=wx.ALIGN_CENTER_VERTICAL) self.ctlgasmass = wx.TextCtrl(self.pnl, value='', size=size1) gbox1c.Add(self.ctlgasmass, (4, 1), span=(1, 1)) gbox1c.Add(wx.StaticText(self.pnl, label="Gas Mass (Da): "), (4, 0), flag=wx.ALIGN_CENTER_VERTICAL) self.ctlto = wx.TextCtrl(self.pnl, value='', size=size1) gbox1c.Add(self.ctlto, (5, 1), span=(1, 1)) gbox1c.Add(wx.StaticText(self.pnl, label="Dead Time (t\u2080 in ms): "), (5, 0), flag=wx.ALIGN_CENTER_VERTICAL) self.ctldriftlength = wx.TextCtrl(self.pnl, value='', size=size1) gbox1c.Add(self.ctldriftlength, (6, 1), span=(1, 1)) gbox1c.Add(wx.StaticText(self.pnl, label="Drift Cell Length (m)"), (6, 0), flag=wx.ALIGN_CENTER_VERTICAL) else: self.ctltwave.SetSelection(1) # T-Wave Controls self.ctltcal1 = wx.TextCtrl(self.pnl, value="", size=size1) gbox1c.Add(self.ctltcal1, (1, 1), span=(1, 1)) gbox1c.Add(wx.StaticText(self.pnl, label="Calibration Parameter 1: "), (1, 0), flag=wx.ALIGN_CENTER_VERTICAL) self.ctltcal2 = wx.TextCtrl(self.pnl, value='', size=size1) gbox1c.Add(self.ctltcal2, (2, 1), span=(1, 1)) gbox1c.Add(wx.StaticText(self.pnl, label="Calibration Parameter 2: "), (2, 0), flag=wx.ALIGN_CENTER_VERTICAL) self.ctledc = wx.TextCtrl(self.pnl, value='', size=size1) gbox1c.Add(self.ctledc, (3, 1), span=(1, 1)) gbox1c.Add(wx.StaticText(self.pnl, label="EDC Parameter: "), (3, 0), flag=wx.ALIGN_CENTER_VERTICAL) self.ctlgasmass = wx.TextCtrl(self.pnl, value='', size=size1) gbox1c.Add(self.ctlgasmass, (4, 1), span=(1, 1)) gbox1c.Add(wx.StaticText(self.pnl, label="Gas Mass (Da): "), (4, 0), flag=wx.ALIGN_CENTER_VERTICAL) self.ctltwavecaltype = wx.Choice( self.pnl, -1, choices=list(self.config.twavedict.values())) gbox1c.Add(self.ctltwavecaltype, (5, 1), span=(1, 1)) gbox1c.Add(wx.StaticText(self.pnl, label="Calibration Type: "), (5, 0), flag=wx.ALIGN_CENTER_VERTICAL) sbs2.Add(gbox1c, 0, wx.EXPAND) ctlsizer.Add(sbs2, 0, wx.EXPAND) vbox2 = wx.BoxSizer(wx.VERTICAL) self.masspanel = IMListCtrlPanel(self.pnl) addbutton = wx.Button(self.pnl, label="Add Species") self.Bind(wx.EVT_BUTTON, self.on_add, addbutton) vbox2.Add(addbutton, 0, wx.EXPAND) vbox2.Add(self.masspanel, 0, wx.EXPAND) plotbutton = wx.Button(self.pnl, label="Plot Species") self.Bind(wx.EVT_BUTTON, self.on_plot, plotbutton) vbox2.Add(plotbutton, 0, wx.EXPAND) ctlsizer.Add(vbox2, -1, wx.EXPAND) sbs.Add(ctlsizer, 0, wx.EXPAND) self.pnl.SetSizer(sbs) hboxend = wx.BoxSizer(wx.HORIZONTAL) okbutton = wx.Button(self.pnl2, label='Ok') closebutton = wx.Button(self.pnl2, 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) # TODO: There is a strange bug whereby the closebutton is not drawn when the window is flipped... self.pnl2.SetSizer(hboxend) vbox.Add(self.pnl, proportion=1, flag=wx.ALL | wx.EXPAND, border=5) vbox.Add(self.pnl2, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10) self.SetSizer(vbox) vbox.Fit(self) self.load_to_gui(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)