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)
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, 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, 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, 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()
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)
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 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()
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")
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()
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 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, 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()
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, 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 __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 __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)