def __init__(self, ispec, parent=None, lls_fit_file=None, outfil=None, smooth=3., zqso=None): QtGui.QMainWindow.__init__(self, parent) ''' ispec = Spectrum1D or specfil lls_fit_file: str, optional Name of the LLS fit file to input smooth: float, optional Number of pixels to smooth on (FWHM) zqso: float, optional Redshift of the quasar. If input, a Telfer continuum is used ''' # Build a widget combining several others self.main_widget = QtGui.QWidget() # Status bar self.create_status_bar() # Initialize if outfil is None: self.outfil = 'LLS_fit.json' else: self.outfil = outfil self.count_lls = 0 self.lls_model = None self.all_forest = [] self.flag_write = False # Spectrum spec, spec_fil = xxgu.read_spec(ispec) # Continuum self.conti_dict = xspc.init_conti_dict( Norm=float(np.median(spec.flux.value)), piv_wv=np.median(spec.dispersion.value), igm='True') if zqso is not None: self.zqso = zqso # Read Telfer and apply IGM tspec = xspc.get_telfer_spec( zqso=zqso, igm=(self.conti_dict['igm'] == 'True')) # Rebin self.continuum = tspec.rebin(spec.dispersion) # Reset pivot wave self.conti_dict['piv_wv'] = 1025. * (1 + zqso) else: self.zqso = None self.continuum = XSpectrum1D.from_tuple( (spec.dispersion, np.ones(len(spec.dispersion)))) self.base_continuum = self.continuum.flux self.update_conti() # Full Model (LLS+continuum) self.full_model = XSpectrum1D.from_tuple( (spec.dispersion, np.ones(len(spec.dispersion)))) self.smooth = smooth # LineList self.llist = xxgu.set_llist('Strong') self.llist['z'] = 0. self.plt_wv = zip( np.array([911.7, 972.5367, 1025.7222, 1215.6700]) * u.AA, ['LL', 'Lyg', 'Lyb', 'Lya']) # z and N boxes self.zwidget = xxgu.EditBox(-1., 'z_LLS=', '{:0.5f}') self.Nwidget = xxgu.EditBox(-1., 'NHI=', '{:0.2f}') self.bwidget = xxgu.EditBox(-1., 'b=', '{:0.1f}') self.Cwidget = xxgu.EditBox('None', 'Comment=', '{:s}') # Grab the pieces and tie together self.abssys_widg = xspw.AbsSysWidget( [], only_one=True, no_buttons=True, linelist=self.llist[self.llist['List']]) self.spec_widg = xspw.ExamineSpecWidget( spec, status=self.statusBar, llist=self.llist, key_events=False, abs_sys=self.abssys_widg.abs_sys) self.spec_widg.continuum = self.continuum #if other_spec is not None: # ospec, ospec_fil = xxgu.read_spec(other_spec) # self.spec_widg.other_spec = ospec # Initial file if lls_fit_file is not None: self.init_LLS(lls_fit_file) # Outfil wbtn = QtGui.QPushButton('Write', self) wbtn.setAutoDefault(False) wbtn.clicked.connect(self.write_out) #self.out_box = QtGui.QLineEdit() #self.out_box.setText(self.outfil) #self.connect(self.out_box, QtCore.SIGNAL('editingFinished ()'), self.set_outfil) # Quit buttons = QtGui.QWidget() wqbtn = QtGui.QPushButton('Write\n Quit', self) wqbtn.setAutoDefault(False) wqbtn.clicked.connect(self.write_quit) qbtn = QtGui.QPushButton('Quit', self) qbtn.setAutoDefault(False) qbtn.clicked.connect(self.quit) # Connections (buttons are above) self.spec_widg.canvas.mpl_connect('key_press_event', self.on_key) self.abssys_widg.abslist_widget.itemSelectionChanged.connect( self.on_list_change) self.connect(self.Nwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) self.connect(self.zwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) self.connect(self.bwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) self.connect(self.Cwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) # Layout anly_widg = QtGui.QWidget() anly_widg.setMaximumWidth(400) anly_widg.setMinimumWidth(250) # Write/Quit buttons hbox1 = QtGui.QHBoxLayout() hbox1.addWidget(wbtn) hbox1.addWidget(wqbtn) hbox1.addWidget(qbtn) buttons.setLayout(hbox1) # z,N zNwidg = QtGui.QWidget() hbox2 = QtGui.QHBoxLayout() hbox2.addWidget(self.zwidget) hbox2.addWidget(self.Nwidget) hbox2.addWidget(self.bwidget) zNwidg.setLayout(hbox2) #vbox.addWidget(self.pltline_widg) vbox = QtGui.QVBoxLayout() vbox.addWidget(zNwidg) vbox.addWidget(self.Cwidget) vbox.addWidget(self.abssys_widg) vbox.addWidget(buttons) anly_widg.setLayout(vbox) hbox = QtGui.QHBoxLayout() hbox.addWidget(self.spec_widg) hbox.addWidget(anly_widg) self.main_widget.setLayout(hbox) # Point MainWindow self.setCentralWidget(self.main_widget)
def __init__(self, ispec, parent=None, lls_fit_file=None, srch_id=True, outfil=None, fwhm=3., zqso=None,plot_residuals=True): QtGui.QMainWindow.__init__(self, parent) ''' spec = Spectrum1D lls_fit_file: str, optional Name of the LLS fit file to input smooth: float, optional Number of pixels to smooth on zqso: float, optional Redshift of the quasar. If input, a Telfer continuum is used plot_residuals : bool, optional Whether to plot residuals ''' # TODO # 1. Fix convolve window size # 2. Avoid sorting of wavelengths # 3. Remove astropy.relativity # 4. Display self.z # 5. Recenter on 'z' # 6. Add COS LSF # 7. Refit component key 'F' # 8. Plot only selected components [DEPRECATED] # 9. Avoid shifting z of component outside its velocity range # 10. Write Component vlim to JSON # 11. Key to set line as some other transition (e.g. RMB in XSpec) # 12. Mask array with points # 13. Toggle line ID names # 14. Add error + residual arrays [NT] # 15. Adjust component redshift by keystroke # 16. Input redshift value via Widget # 17. Use Component list to jump between components (like 'S') # Build a widget combining several others self.main_widget = QtGui.QWidget() # Status bar self.create_status_bar() # Initialize if outfil is None: self.outfil = 'IGM_model.json' else: self.outfil = outfil self.fwhm = fwhm self.plot_residuals = plot_residuals # Spectrum spec, spec_fil = xxgu.read_spec(ispec) spec.mask = np.zeros(len(spec.dispersion),dtype=int) # Full Model self.model = XSpectrum1D.from_tuple(( spec.dispersion,np.ones(len(spec.dispersion)))) # LineList (Grab ISM and HI as defaults) self.llist = xxgu.set_llist('ISM') # Load others self.llist['HI'] = LineList('HI') self.llist['Strong'] = LineList('Strong') self.llist['Lists'].append('HI') self.llist['HI']._data = self.llist['HI']._data[::-1] #invert order of Lyman series #self.llist['show_line'] = np.arange(10) #maximum 10 to show for Lyman series #define initial redshift z=0.0 self.llist['z'] = z # Grab the pieces and tie together self.slines_widg = xspw.SelectedLinesWidget( self.llist[self.llist['List']], parent=self, init_select='All') self.fiddle_widg = FiddleComponentWidget(parent=self) self.comps_widg = ComponentListWidget([], parent=self) self.velplot_widg = IGGVelPlotWidget(spec, z, parent=self, llist=self.llist, fwhm=self.fwhm,plot_residuals=self.plot_residuals) self.wq_widg = xxgu.WriteQuitWidget(parent=self) # Setup strongest LineList self.llist['strongest'] = LineList('ISM') self.llist['Lists'].append('strongest') self.update_strongest_lines() self.slines_widg.selected = self.llist['show_line'] self.slines_widg.on_list_change( self.llist[self.llist['List']]) # Connections (buttons are above) #self.spec_widg.canvas.mpl_connect('key_press_event', self.on_key) #self.abssys_widg.abslist_widget.itemSelectionChanged.connect( # self.on_list_change) # Layout anly_widg = QtGui.QWidget() anly_widg.setMaximumWidth(400) anly_widg.setMinimumWidth(250) vbox = QtGui.QVBoxLayout() vbox.addWidget(self.fiddle_widg) vbox.addWidget(self.comps_widg) vbox.addWidget(self.slines_widg) vbox.addWidget(self.wq_widg) anly_widg.setLayout(vbox) hbox = QtGui.QHBoxLayout() hbox.addWidget(self.velplot_widg) hbox.addWidget(anly_widg) self.main_widget.setLayout(hbox) # Point MainWindow self.setCentralWidget(self.main_widget)
def __init__(self, ispec, parent=None, lls_fit_file=None, outfil=None, smooth=3., zqso=None): QtGui.QMainWindow.__init__(self, parent) ''' ispec = Spectrum1D or specfil lls_fit_file: str, optional Name of the LLS fit file to input smooth: float, optional Number of pixels to smooth on (FWHM) zqso: float, optional Redshift of the quasar. If input, a Telfer continuum is used ''' # Build a widget combining several others self.main_widget = QtGui.QWidget() # Status bar self.create_status_bar() # Initialize if outfil is None: self.outfil = 'LLS_fit.json' else: self.outfil = outfil self.count_lls = 0 self.lls_model = None self.all_forest = [] self.flag_write = False # Spectrum spec, spec_fil = xxgu.read_spec(ispec) # Continuum self.conti_dict = xspc.init_conti_dict( Norm=float(np.median(spec.flux.value)), piv_wv=np.median(spec.dispersion.value), igm='True') if zqso is not None: self.zqso = zqso # Read Telfer and apply IGM tspec = xspc.get_telfer_spec(zqso=zqso, igm=(self.conti_dict['igm']=='True')) # Rebin self.continuum = tspec.rebin(spec.dispersion) # Reset pivot wave self.conti_dict['piv_wv'] = 1025.*(1+zqso) else: self.zqso = None self.continuum = XSpectrum1D.from_tuple(( spec.dispersion,np.ones(len(spec.dispersion)))) self.base_continuum = self.continuum.flux self.update_conti() # Full Model (LLS+continuum) self.full_model = XSpectrum1D.from_tuple(( spec.dispersion,np.ones(len(spec.dispersion)))) self.smooth = smooth # LineList self.llist = xxgu.set_llist('Strong') self.llist['z'] = 0. self.plt_wv = zip(np.array([911.7,972.5367,1025.7222,1215.6700])*u.AA, ['LL','Lyg','Lyb','Lya']) # z and N boxes self.zwidget = xxgu.EditBox(-1., 'z_LLS=', '{:0.5f}') self.Nwidget = xxgu.EditBox(-1., 'NHI=', '{:0.2f}') self.bwidget = xxgu.EditBox(-1., 'b=', '{:0.1f}') self.Cwidget = xxgu.EditBox('None', 'Comment=', '{:s}') # Grab the pieces and tie together self.abssys_widg = xspw.AbsSysWidget([],only_one=True, no_buttons=True, linelist=self.llist[self.llist['List']]) self.spec_widg = xspw.ExamineSpecWidget(spec,status=self.statusBar, llist=self.llist, key_events=False, abs_sys=self.abssys_widg.abs_sys) self.spec_widg.continuum = self.continuum #if other_spec is not None: # ospec, ospec_fil = xxgu.read_spec(other_spec) # self.spec_widg.other_spec = ospec # Initial file if lls_fit_file is not None: self.init_LLS(lls_fit_file) # Outfil wbtn = QtGui.QPushButton('Write', self) wbtn.setAutoDefault(False) wbtn.clicked.connect(self.write_out) #self.out_box = QtGui.QLineEdit() #self.out_box.setText(self.outfil) #self.connect(self.out_box, QtCore.SIGNAL('editingFinished ()'), self.set_outfil) # Quit buttons = QtGui.QWidget() wqbtn = QtGui.QPushButton('Write\n Quit', self) wqbtn.setAutoDefault(False) wqbtn.clicked.connect(self.write_quit) qbtn = QtGui.QPushButton('Quit', self) qbtn.setAutoDefault(False) qbtn.clicked.connect(self.quit) # Connections (buttons are above) self.spec_widg.canvas.mpl_connect('key_press_event', self.on_key) self.abssys_widg.abslist_widget.itemSelectionChanged.connect( self.on_list_change) self.connect(self.Nwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) self.connect(self.zwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) self.connect(self.bwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) self.connect(self.Cwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) # Layout anly_widg = QtGui.QWidget() anly_widg.setMaximumWidth(400) anly_widg.setMinimumWidth(250) # Write/Quit buttons hbox1 = QtGui.QHBoxLayout() hbox1.addWidget(wbtn) hbox1.addWidget(wqbtn) hbox1.addWidget(qbtn) buttons.setLayout(hbox1) # z,N zNwidg = QtGui.QWidget() hbox2 = QtGui.QHBoxLayout() hbox2.addWidget(self.zwidget) hbox2.addWidget(self.Nwidget) hbox2.addWidget(self.bwidget) zNwidg.setLayout(hbox2) #vbox.addWidget(self.pltline_widg) vbox = QtGui.QVBoxLayout() vbox.addWidget(zNwidg) vbox.addWidget(self.Cwidget) vbox.addWidget(self.abssys_widg) vbox.addWidget(buttons) anly_widg.setLayout(vbox) hbox = QtGui.QHBoxLayout() hbox.addWidget(self.spec_widg) hbox.addWidget(anly_widg) self.main_widget.setLayout(hbox) # Point MainWindow self.setCentralWidget(self.main_widget)
def __init__(self, ispec, parent=None, lls_fit_file=None, outfil=None, smooth=3., zqso=None, fN_gamma=None, template=None, dw=0.1, skip_wveval=False): QtGui.QMainWindow.__init__(self, parent) ''' ispec : Spectrum1D or specfil lls_fit_file: str, optional Name of the LLS fit file to input smooth : float, optional Number of pixels to smooth on (FWHM) zqso : float, optional Redshift of the quasar. If input, a Telfer continuum is used fN_gamma : float, optional Redshift evolution of f(N) or IGM fiddled continuum template : str, optional Filename of a QSO template to use instead of the Telfer continuum. Only used if zqso is also given. dw : float, optional Pixel width in Angstroms for the wavelength array used to generate optical depths. Default is 0.1. skip_wveval : bool, optional Skip rebinning of wavelengths in the Voigt profile generation. This can speed up the code considerably, but use it wisely. ''' # Build a widget combining several others self.main_widget = QtGui.QWidget() # Status bar self.create_status_bar() # Initialize if outfil is None: self.outfil = 'LLS_fit.json' else: self.outfil = outfil self.count_lls = 0 self.lls_model = None self.smooth = None self.base_continuum = None self.all_forest = [] self.flag_write = False self.dw = float(dw) self.skip_wveval = skip_wveval if skip_wveval: warnings.warn("Skipping wavelength rebinning in Voigt.") warnings.warn("Make sure you know what you are doing!") # Spectrum spec, spec_fil = xxgu.read_spec(ispec) # LineList self.llist = xxgu.set_llist('Strong') self.llist['z'] = 0. self.plt_wv = zip( np.array([911.7, 949.743, 972.5367, 1025.7222, 1215.6700]) * u.AA, ['LL', 'Lyd', 'Lyg', 'Lyb', 'Lya']) # z and N boxes self.zwidget = xxgu.EditBox(-1., 'z_LLS=', '{:0.5f}') self.Nwidget = xxgu.EditBox(-1., 'NHI=', '{:0.2f}') self.bwidget = xxgu.EditBox(-1., 'b=', '{:0.1f}') self.Cwidget = xxgu.EditBox('None', 'Comment=', '{:s}') # Grab the pieces and tie together self.abssys_widg = xspw.AbsSysWidget( [], only_one=True, no_buttons=True, linelist=self.llist[self.llist['List']]) vlines = [(912 * (1 + zqso) if zqso is not None else None)] self.spec_widg = xspw.ExamineSpecWidget( spec, status=self.statusBar, llist=self.llist, key_events=False, abs_sys=self.abssys_widg.abs_sys, vlines=vlines, plotzero=1) # Initialize continuum (and LLS if from a file) if lls_fit_file is not None: self.init_LLS(lls_fit_file, spec) else: self.conti_dict = xspc.init_conti_dict( Norm=float(np.median(spec.flux.value)), piv_wv=1215. * (1 + zqso), #piv_wv2=915.*(1+zqso), igm='True') if self.base_continuum is None: if zqso is not None: self.zqso = zqso # Read Telfer and apply IGM if template is not None: tspec = lsi.readspec(template) # assume wavelengths tspec = XSpectrum1D.from_tuple( (tspec.dispersion.value * (1 + zqso), tspec.flux.value)) else: tspec = xspc.get_telfer_spec( zqso=zqso, igm=(self.conti_dict['igm'] == 'True')) # Rebin self.continuum = tspec.rebin(spec.dispersion) # Reset pivot wave self.conti_dict['piv_wv'] = 915. * (1 + zqso) #self.conti_dict['piv_wv'] = 1215.*(1+zqso) #self.conti_dict['piv_wv2'] = 915.*(1+zqso) else: self.zqso = None self.continuum = XSpectrum1D.from_tuple( (spec.dispersion, np.ones(len(spec.dispersion)))) self.base_continuum = self.continuum.flux self.update_conti() self.spec_widg.continuum = self.continuum # Full Model (LLS+continuum) self.full_model = XSpectrum1D.from_tuple( (spec.dispersion, np.ones(len(spec.dispersion)))) if self.smooth is None: self.smooth = smooth # Initialize as needed if lls_fit_file is not None: self.update_boxes() self.update_model() # Outfil wbtn = QtGui.QPushButton('Write', self) wbtn.setAutoDefault(False) wbtn.clicked.connect(self.write_out) #self.out_box = QtGui.QLineEdit() #self.out_box.setText(self.outfil) #self.connect(self.out_box, QtCore.SIGNAL('editingFinished ()'), self.set_outfil) # Quit buttons = QtGui.QWidget() wqbtn = QtGui.QPushButton('Write\n Quit', self) wqbtn.setAutoDefault(False) wqbtn.clicked.connect(self.write_quit) qbtn = QtGui.QPushButton('Quit', self) qbtn.setAutoDefault(False) qbtn.clicked.connect(self.quit) # Connections (buttons are above) self.spec_widg.canvas.mpl_connect('key_press_event', self.on_key) self.abssys_widg.abslist_widget.itemSelectionChanged.connect( self.on_list_change) self.connect(self.Nwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) self.connect(self.zwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) self.connect(self.bwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) self.connect(self.Cwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) # Layout anly_widg = QtGui.QWidget() anly_widg.setMaximumWidth(400) anly_widg.setMinimumWidth(250) # Write/Quit buttons hbox1 = QtGui.QHBoxLayout() hbox1.addWidget(wbtn) hbox1.addWidget(wqbtn) hbox1.addWidget(qbtn) buttons.setLayout(hbox1) # z,N zNwidg = QtGui.QWidget() hbox2 = QtGui.QHBoxLayout() hbox2.addWidget(self.zwidget) hbox2.addWidget(self.Nwidget) hbox2.addWidget(self.bwidget) zNwidg.setLayout(hbox2) #vbox.addWidget(self.pltline_widg) vbox = QtGui.QVBoxLayout() vbox.addWidget(zNwidg) vbox.addWidget(self.Cwidget) vbox.addWidget(self.abssys_widg) vbox.addWidget(buttons) anly_widg.setLayout(vbox) hbox = QtGui.QHBoxLayout() hbox.addWidget(self.spec_widg) hbox.addWidget(anly_widg) self.main_widget.setLayout(hbox) # Point MainWindow self.setCentralWidget(self.main_widget) #self.spec_widg.setFixedWidth(900) self.spec_widg.setMinimumWidth(900)
def __init__(self, ispec, z, parent=None, llist=None, norm=True, vmnx=[-500., 500.]*u.km/u.s, fwhm=0.,plot_residuals=True): ''' spec = Spectrum1D Norm: Bool (False) Normalized spectrum? abs_sys: AbsSystem Absorption system class ''' super(IGGVelPlotWidget, self).__init__(parent) # Initialize self.parent = parent spec, spec_fil = xxgu.read_spec(ispec) self.spec = spec self.spec_fil = spec_fil self.fwhm = fwhm self.z = z self.vmnx = vmnx self.norm = norm # Init self.flag_add = False self.flag_idlbl = False self.flag_mask = False self.wrest = 0. self.avmnx = np.array([0.,0.])*u.km/u.s self.model = XSpectrum1D.from_tuple(( spec.dispersion,np.ones(len(spec.dispersion)))) self.plot_residuals = plot_residuals #Define arrays for plotting residuals if self.plot_residuals: self.residual_normalization_factor = 0.02/np.median(self.spec.sig) self.residual_limit = self.spec.sig * self.residual_normalization_factor self.residual = (self.spec.flux - self.model.flux) * self.residual_normalization_factor self.psdict = {} # Dict for spectra plotting self.psdict['xmnx'] = self.vmnx.value # Too much pain to use units with this self.psdict['ymnx'] = [-0.1, 1.1] self.psdict['nav'] = xxgu.navigate(0,0,init=True) # Status Bar? #if not status is None: # self.statusBar = status # Line List if llist is None: self.llist = xxgu.set_llist(['HI 1215', 'HI 1025']) else: self.llist = llist self.llist['z'] = self.z # Indexing for line plotting self.idx_line = 0 self.init_lines() # Create the mpl Figure and FigCanvas objects. # self.dpi = 150 self.fig = Figure((8.0, 4.0), dpi=self.dpi) self.canvas = FigureCanvas(self.fig) self.canvas.setParent(self) self.canvas.setFocusPolicy( QtCore.Qt.ClickFocus ) self.canvas.setFocus() self.canvas.mpl_connect('key_press_event', self.on_key) self.canvas.mpl_connect('button_press_event', self.on_click) # Sub_plots self.sub_xy = [5,3] self.subxy_state = 'Out' self.fig.subplots_adjust(hspace=0.0, wspace=0.1,left=0.04,right=0.975) vbox = QtGui.QVBoxLayout() vbox.addWidget(self.canvas) self.setLayout(vbox) # Draw on init self.on_draw()
def __init__(self, ispec, parent=None, lls_fit_file=None, outfil=None, smooth=3., zqso=None, fN_gamma=None, template=None, dw=0.1, skip_wveval=False): QtGui.QMainWindow.__init__(self, parent) ''' ispec : Spectrum1D or specfil lls_fit_file: str, optional Name of the LLS fit file to input smooth : float, optional Number of pixels to smooth on (FWHM) zqso : float, optional Redshift of the quasar. If input, a Telfer continuum is used fN_gamma : float, optional Redshift evolution of f(N) or IGM fiddled continuum template : str, optional Filename of a QSO template to use instead of the Telfer continuum. Only used if zqso is also given. dw : float, optional Pixel width in Angstroms for the wavelength array used to generate optical depths. Default is 0.1. skip_wveval : bool, optional Skip rebinning of wavelengths in the Voigt profile generation. This can speed up the code considerably, but use it wisely. ''' # Build a widget combining several others self.main_widget = QtGui.QWidget() # Status bar self.create_status_bar() # Initialize if outfil is None: self.outfil = 'LLS_fit.json' else: self.outfil = outfil self.count_lls = 0 self.lls_model = None self.smooth = None self.base_continuum = None self.all_forest = [] self.flag_write = False self.dw = float(dw) self.skip_wveval = skip_wveval if skip_wveval: warnings.warn("Skipping wavelength rebinning in Voigt.") warnings.warn("Make sure you know what you are doing!") # Spectrum spec, spec_fil = xxgu.read_spec(ispec) # LineList self.llist = xxgu.set_llist('Strong') self.llist['z'] = 0. self.plt_wv = zip(np.array([911.7, 949.743, 972.5367,1025.7222,1215.6700])*u.AA, ['LL','Lyd', 'Lyg','Lyb','Lya']) # z and N boxes self.zwidget = xxgu.EditBox(-1., 'z_LLS=', '{:0.5f}') self.Nwidget = xxgu.EditBox(-1., 'NHI=', '{:0.2f}') self.bwidget = xxgu.EditBox(-1., 'b=', '{:0.1f}') self.Cwidget = xxgu.EditBox('None', 'Comment=', '{:s}') # Grab the pieces and tie together self.abssys_widg = xspw.AbsSysWidget([],only_one=True, no_buttons=True, linelist=self.llist[self.llist['List']]) vlines = [(912 * (1 + zqso) if zqso is not None else None)] self.spec_widg = xspw.ExamineSpecWidget(spec,status=self.statusBar, llist=self.llist, key_events=False, abs_sys=self.abssys_widg.abs_sys, vlines=vlines, plotzero=1) # Initialize continuum (and LLS if from a file) if lls_fit_file is not None: self.init_LLS(lls_fit_file,spec) else: self.conti_dict = xspc.init_conti_dict( Norm=float(np.median(spec.flux.value)), piv_wv=1215.*(1+zqso), #piv_wv2=915.*(1+zqso), igm='True') if self.base_continuum is None: if zqso is not None: self.zqso = zqso # Read Telfer and apply IGM if template is not None: tspec = lsi.readspec(template) # assume wavelengths tspec = XSpectrum1D.from_tuple( (tspec.dispersion.value * (1 + zqso), tspec.flux.value)) else: tspec = xspc.get_telfer_spec(zqso=zqso, igm=(self.conti_dict['igm']=='True')) # Rebin self.continuum = tspec.rebin(spec.dispersion) # Reset pivot wave self.conti_dict['piv_wv'] = 915.*(1+zqso) #self.conti_dict['piv_wv'] = 1215.*(1+zqso) #self.conti_dict['piv_wv2'] = 915.*(1+zqso) else: self.zqso = None self.continuum = XSpectrum1D.from_tuple(( spec.dispersion,np.ones(len(spec.dispersion)))) self.base_continuum = self.continuum.flux self.update_conti() self.spec_widg.continuum = self.continuum # Full Model (LLS+continuum) self.full_model = XSpectrum1D.from_tuple(( spec.dispersion,np.ones(len(spec.dispersion)))) if self.smooth is None: self.smooth = smooth # Initialize as needed if lls_fit_file is not None: self.update_boxes() self.update_model() # Outfil wbtn = QtGui.QPushButton('Write', self) wbtn.setAutoDefault(False) wbtn.clicked.connect(self.write_out) #self.out_box = QtGui.QLineEdit() #self.out_box.setText(self.outfil) #self.connect(self.out_box, QtCore.SIGNAL('editingFinished ()'), self.set_outfil) # Quit buttons = QtGui.QWidget() wqbtn = QtGui.QPushButton('Write\n Quit', self) wqbtn.setAutoDefault(False) wqbtn.clicked.connect(self.write_quit) qbtn = QtGui.QPushButton('Quit', self) qbtn.setAutoDefault(False) qbtn.clicked.connect(self.quit) # Connections (buttons are above) self.spec_widg.canvas.mpl_connect('key_press_event', self.on_key) self.abssys_widg.abslist_widget.itemSelectionChanged.connect( self.on_list_change) self.connect(self.Nwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) self.connect(self.zwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) self.connect(self.bwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) self.connect(self.Cwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setbzN) # Layout anly_widg = QtGui.QWidget() anly_widg.setMaximumWidth(400) anly_widg.setMinimumWidth(250) # Write/Quit buttons hbox1 = QtGui.QHBoxLayout() hbox1.addWidget(wbtn) hbox1.addWidget(wqbtn) hbox1.addWidget(qbtn) buttons.setLayout(hbox1) # z,N zNwidg = QtGui.QWidget() hbox2 = QtGui.QHBoxLayout() hbox2.addWidget(self.zwidget) hbox2.addWidget(self.Nwidget) hbox2.addWidget(self.bwidget) zNwidg.setLayout(hbox2) #vbox.addWidget(self.pltline_widg) vbox = QtGui.QVBoxLayout() vbox.addWidget(zNwidg) vbox.addWidget(self.Cwidget) vbox.addWidget(self.abssys_widg) vbox.addWidget(buttons) anly_widg.setLayout(vbox) hbox = QtGui.QHBoxLayout() hbox.addWidget(self.spec_widg) hbox.addWidget(anly_widg) self.main_widget.setLayout(hbox) # Point MainWindow self.setCentralWidget(self.main_widget) #self.spec_widg.setFixedWidth(900) self.spec_widg.setMinimumWidth(900)
def __init__(self, ispec, parent=None, lls_fit_file=None, srch_id=True, outfil=None, fwhm=3., zqso=None): QtGui.QMainWindow.__init__(self, parent) ''' spec = Spectrum1D lls_fit_file: str, optional Name of the LLS fit file to input smooth: float, optional Number of pixels to smooth on zqso: float, optional Redshift of the quasar. If input, a Telfer continuum is used ''' # TODO # 1. Fix convolve window size # 2. Avoid sorting of wavelengths # 3. Remove astropy.relativity # 4. Display self.z # 5. Recenter on 'z' # 6. Add COS LSF # 7. Refit component key 'F' # 8. Plot only selected components # 9. Avoid shifting z of component outside its velocity range # 10. Write Component vlim to JSON # 11. Key to set line as some other transition (e.g. RMB in XSpec) # 12. Mask array with points # 13. Toggle line ID names # 14. Add error + residual arrays [NT] # 15. Adjust component redshift by keystroke # Build a widget combining several others self.main_widget = QtGui.QWidget() # Status bar self.create_status_bar() # Initialize if outfil is None: self.outfil = 'IGM_model.json' else: self.outfil = outfil self.fwhm = fwhm # Spectrum spec, spec_fil = xxgu.read_spec(ispec) spec.mask = np.zeros(len(spec.dispersion),dtype=int) # Full Model self.model = XSpectrum1D.from_tuple(( spec.dispersion,np.ones(len(spec.dispersion)))) # LineList self.llist = xxgu.set_llist(['HI 1215', 'HI 1025', 'CIV 1548'],sort=False) z=0.112 self.llist['z'] = z # Grab the pieces and tie together self.fiddle_widg = FiddleComponentWidget(parent=self) self.comps_widg = ComponentListWidget([], parent=self, linelist=self.llist[self.llist['List']]) self.velplot_widg = IGGVelPlotWidget(spec, z, parent=self, llist=self.llist, fwhm=self.fwhm) self.wq_widg = xxgu.WriteQuitWidget(parent=self) self.slines_widg = xspw.SelectedLinesWidget( self.llist[self.llist['List']], parent=self, init_select='All') # Connections (buttons are above) #self.spec_widg.canvas.mpl_connect('key_press_event', self.on_key) #self.abssys_widg.abslist_widget.itemSelectionChanged.connect( # self.on_list_change) # Layout anly_widg = QtGui.QWidget() anly_widg.setMaximumWidth(400) anly_widg.setMinimumWidth(250) vbox = QtGui.QVBoxLayout() vbox.addWidget(self.fiddle_widg) vbox.addWidget(self.comps_widg) vbox.addWidget(self.slines_widg) vbox.addWidget(self.wq_widg) anly_widg.setLayout(vbox) hbox = QtGui.QHBoxLayout() hbox.addWidget(self.velplot_widg) hbox.addWidget(anly_widg) self.main_widget.setLayout(hbox) # Point MainWindow self.setCentralWidget(self.main_widget)
def __init__(self, ispec, parent=None, lls_fit_file=None, outfil=None, smooth=3.0, zqso=None): QtGui.QMainWindow.__init__(self, parent) """ ispec = Spectrum1D or specfil lls_fit_file: str, optional Name of the LLS fit file to input smooth: float, optional Number of pixels to smooth on zqso: float, optional Redshift of the quasar. If input, a Telfer continuum is used """ # Build a widget combining several others self.main_widget = QtGui.QWidget() # Status bar self.create_status_bar() # Initialize if outfil is None: self.outfil = "LLS_fit.json" else: self.outfil = outfil self.count_lls = 0 self.lls_model = None self.all_forest = [] # Spectrum spec, spec_fil = xxgu.read_spec(ispec) # Continuum self.conti_dict = { "Norm": float(np.median(spec.flux.value)), "tilt": 0.0, "piv_wv": np.median(spec.dispersion.value), } if zqso is not None: # Read Telfer telfer = ascii.read(xa_path + "/data/quasar/telfer_hst_comp01_rq.ascii", comment="#") scale = telfer["flux"][(telfer["wrest"] == 1450.0)] tspec = XSpectrum1D.from_tuple((telfer["wrest"] * (1 + zqso), telfer["flux"] / scale[0])) # Observer frame # Rebin self.continuum = tspec.rebin(spec.dispersion) else: self.continuum = XSpectrum1D.from_tuple((spec.dispersion, np.ones(len(spec.dispersion)))) self.base_continuum = self.continuum.flux self.update_conti() # Full Model (LLS+continuum) self.full_model = XSpectrum1D.from_tuple((spec.dispersion, np.ones(len(spec.dispersion)))) self.smooth = smooth # LineList self.llist = xxgu.set_llist("Strong") self.llist["z"] = 0.0 # z and N boxes self.zwidget = xxgu.EditBox(-1.0, "z_LLS=", "{:0.5f}") self.Nwidget = xxgu.EditBox(-1.0, "NHI=", "{:0.2f}") self.bwidget = xxgu.EditBox(-1.0, "b=", "{:0.1f}") self.Cwidget = xxgu.EditBox("None", "Comment=", "{:s}") # Grab the pieces and tie together self.abssys_widg = xspw.AbsSysWidget( [], only_one=True, no_buttons=True, linelist=self.llist[self.llist["List"]] ) self.spec_widg = xspw.ExamineSpecWidget( spec, status=self.statusBar, llist=self.llist, key_events=False, abs_sys=self.abssys_widg.abs_sys ) self.spec_widg.continuum = self.continuum # if other_spec is not None: # ospec, ospec_fil = xxgu.read_spec(other_spec) # self.spec_widg.other_spec = ospec # Initial file if lls_fit_file is not None: self.init_LLS(lls_fit_file) # Outfil wbtn = QtGui.QPushButton("Write", self) wbtn.setAutoDefault(False) wbtn.clicked.connect(self.write_out) # self.out_box = QtGui.QLineEdit() # self.out_box.setText(self.outfil) # self.connect(self.out_box, QtCore.SIGNAL('editingFinished ()'), self.set_outfil) # Quit buttons = QtGui.QWidget() wqbtn = QtGui.QPushButton("Write\n Quit", self) wqbtn.setAutoDefault(False) wqbtn.clicked.connect(self.write_quit) qbtn = QtGui.QPushButton("Quit", self) qbtn.setAutoDefault(False) qbtn.clicked.connect(self.quit) # Connections (buttons are above) self.spec_widg.canvas.mpl_connect("key_press_event", self.on_key) self.abssys_widg.abslist_widget.itemSelectionChanged.connect(self.on_list_change) self.connect(self.Nwidget.box, QtCore.SIGNAL("editingFinished ()"), self.setbzN) self.connect(self.zwidget.box, QtCore.SIGNAL("editingFinished ()"), self.setbzN) self.connect(self.bwidget.box, QtCore.SIGNAL("editingFinished ()"), self.setbzN) self.connect(self.Cwidget.box, QtCore.SIGNAL("editingFinished ()"), self.setbzN) # Layout anly_widg = QtGui.QWidget() anly_widg.setMaximumWidth(400) anly_widg.setMinimumWidth(250) # Write/Quit buttons hbox1 = QtGui.QHBoxLayout() hbox1.addWidget(wbtn) hbox1.addWidget(wqbtn) hbox1.addWidget(qbtn) buttons.setLayout(hbox1) # z,N zNwidg = QtGui.QWidget() hbox2 = QtGui.QHBoxLayout() hbox2.addWidget(self.zwidget) hbox2.addWidget(self.Nwidget) hbox2.addWidget(self.bwidget) zNwidg.setLayout(hbox2) # vbox.addWidget(self.pltline_widg) vbox = QtGui.QVBoxLayout() vbox.addWidget(zNwidg) vbox.addWidget(self.Cwidget) vbox.addWidget(self.abssys_widg) vbox.addWidget(buttons) anly_widg.setLayout(vbox) hbox = QtGui.QHBoxLayout() hbox.addWidget(self.spec_widg) hbox.addWidget(anly_widg) self.main_widget.setLayout(hbox) # Point MainWindow self.setCentralWidget(self.main_widget)
def __init__(self, ispec, parent=None, lls_fit_file=None, srch_id=True, outfil=None, fwhm=3., zqso=None): QtGui.QMainWindow.__init__(self, parent) ''' spec = Spectrum1D lls_fit_file: str, optional Name of the LLS fit file to input smooth: float, optional Number of pixels to smooth on zqso: float, optional Redshift of the quasar. If input, a Telfer continuum is used ''' # TODO # 1. Fix convolve window size # 2. Avoid sorting of wavelengths # 3. Remove astropy.relativity # 4. Display self.z # 5. Recenter on 'z' # 6. Add COS LSF # 7. Refit component key 'F' # 8. Plot only selected components # 9. Avoid shifting z of component outside its velocity range # 10. Write Component vlim to JSON # 11. Key to set line as some other transition (e.g. RMB in XSpec) # 12. Mask array with points # 13. Toggle line ID names # 14. Add error + residual arrays [NT] # 15. Adjust component redshift by keystroke # Build a widget combining several others self.main_widget = QtGui.QWidget() # Status bar self.create_status_bar() # Initialize if outfil is None: self.outfil = 'IGM_model.json' else: self.outfil = outfil self.fwhm = fwhm # Spectrum spec, spec_fil = xxgu.read_spec(ispec) spec.mask = np.zeros(len(spec.dispersion), dtype=int) # Full Model self.model = XSpectrum1D.from_tuple( (spec.dispersion, np.ones(len(spec.dispersion)))) # LineList self.llist = xxgu.set_llist(['HI 1215', 'HI 1025', 'CIV 1548'], sort=False) z = 0.112 self.llist['z'] = z # Grab the pieces and tie together self.fiddle_widg = FiddleComponentWidget(parent=self) self.comps_widg = ComponentListWidget( [], parent=self, linelist=self.llist[self.llist['List']]) self.velplot_widg = IGGVelPlotWidget(spec, z, parent=self, llist=self.llist, fwhm=self.fwhm) self.wq_widg = xxgu.WriteQuitWidget(parent=self) self.slines_widg = xspw.SelectedLinesWidget( self.llist[self.llist['List']], parent=self, init_select='All') # Connections (buttons are above) #self.spec_widg.canvas.mpl_connect('key_press_event', self.on_key) #self.abssys_widg.abslist_widget.itemSelectionChanged.connect( # self.on_list_change) # Layout anly_widg = QtGui.QWidget() anly_widg.setMaximumWidth(400) anly_widg.setMinimumWidth(250) vbox = QtGui.QVBoxLayout() vbox.addWidget(self.fiddle_widg) vbox.addWidget(self.comps_widg) vbox.addWidget(self.slines_widg) vbox.addWidget(self.wq_widg) anly_widg.setLayout(vbox) hbox = QtGui.QHBoxLayout() hbox.addWidget(self.velplot_widg) hbox.addWidget(anly_widg) self.main_widget.setLayout(hbox) # Point MainWindow self.setCentralWidget(self.main_widget)
def __init__(self, ispec, z, parent=None, llist=None, norm=True, vmnx=[-300., 300.] * u.km / u.s, fwhm=0.): ''' spec = Spectrum1D Norm: Bool (False) Normalized spectrum? abs_sys: AbsSystem Absorption system class ''' super(IGGVelPlotWidget, self).__init__(parent) # Initialize self.parent = parent spec, spec_fil = xxgu.read_spec(ispec) self.spec = spec self.spec_fil = spec_fil self.fwhm = fwhm self.z = z self.vmnx = vmnx self.norm = norm # Init self.flag_add = False self.flag_idlbl = False self.flag_mask = False self.wrest = 0. self.avmnx = np.array([0., 0.]) * u.km / u.s self.model = XSpectrum1D.from_tuple( (spec.dispersion, np.ones(len(spec.dispersion)))) self.psdict = {} # Dict for spectra plotting self.psdict[ 'xmnx'] = self.vmnx.value # Too much pain to use units with this self.psdict['ymnx'] = [-0.1, 1.1] self.psdict['nav'] = xxgu.navigate(0, 0, init=True) # Status Bar? #if not status is None: # self.statusBar = status # Line List if llist is None: self.llist = xxgu.set_llist(['HI 1215', 'HI 1025']) else: self.llist = llist self.llist['z'] = self.z # Indexing for line plotting self.idx_line = 0 self.init_lines() # Create the mpl Figure and FigCanvas objects. # self.dpi = 150 self.fig = Figure((8.0, 4.0), dpi=self.dpi) self.canvas = FigureCanvas(self.fig) self.canvas.setParent(self) self.canvas.setFocusPolicy(QtCore.Qt.ClickFocus) self.canvas.setFocus() self.canvas.mpl_connect('key_press_event', self.on_key) self.canvas.mpl_connect('button_press_event', self.on_click) # Sub_plots self.sub_xy = [3, 4] self.fig.subplots_adjust(hspace=0.0, wspace=0.1) vbox = QtGui.QVBoxLayout() vbox.addWidget(self.canvas) self.setLayout(vbox) # Draw on init self.on_draw()
def __init__(self, ispec, parent=None, lls_fit_file=None, srch_id=True, outfil=None, smooth=3.): QtGui.QMainWindow.__init__(self, parent) ''' spec = Spectrum1D lls_fit_file: str, optional Name of the LLS fit file to input smooth: float, optional Number of pixels to smooth on ''' # Build a widget combining several others self.main_widget = QtGui.QWidget() # Status bar self.create_status_bar() # Initialize if outfil is None: self.outfil = 'LLS_fit.json' else: self.outfil = outfil self.count_lls = 0 self.lls_model = None self.all_forest = [] # Spectrum spec, spec_fil = xxgu.read_spec(ispec) # Continuum self.conti_dict = { 'Norm': np.median(spec.flux), 'tilt': 0., 'piv_wv': np.median(spec.dispersion.value) } self.continuum = XSpectrum1D.from_tuple( (spec.dispersion, np.ones(len(spec.dispersion)))) self.base_continuum = self.continuum.flux self.update_conti() # Full Model (LLS+continuum) self.full_model = XSpectrum1D.from_tuple( (spec.dispersion, np.ones(len(spec.dispersion)))) self.smooth = smooth # LineList self.llist = xxgu.set_llist('Strong') self.llist['z'] = 0. # z and N boxes self.zwidget = xxgu.EditBox(-1., 'z_LLS=', '{:0.5f}') self.Nwidget = xxgu.EditBox(-1., 'NHI=', '{:0.2f}') # Grab the pieces and tie together self.abssys_widg = xspw.AbsSysWidget( [], only_one=True, no_buttons=True, linelist=self.llist[self.llist['List']]) self.spec_widg = xspw.ExamineSpecWidget( spec, status=self.statusBar, llist=self.llist, key_events=False, abs_sys=self.abssys_widg.abs_sys) self.spec_widg.continuum = self.continuum # Initial file if lls_fit_file is not None: self.init_LLS(lls_fit_file) # Outfil wbtn = QtGui.QPushButton('Write', self) wbtn.setAutoDefault(False) wbtn.clicked.connect(self.write_out) #self.out_box = QtGui.QLineEdit() #self.out_box.setText(self.outfil) #self.connect(self.out_box, QtCore.SIGNAL('editingFinished ()'), self.set_outfil) # Quit buttons = QtGui.QWidget() wqbtn = QtGui.QPushButton('Write\n Quit', self) wqbtn.setAutoDefault(False) wqbtn.clicked.connect(self.write_quit) qbtn = QtGui.QPushButton('Quit', self) qbtn.setAutoDefault(False) qbtn.clicked.connect(self.quit) # Connections (buttons are above) self.spec_widg.canvas.mpl_connect('key_press_event', self.on_key) self.abssys_widg.abslist_widget.itemSelectionChanged.connect( self.on_list_change) self.connect(self.Nwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setzN) self.connect(self.zwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setzN) # Layout anly_widg = QtGui.QWidget() anly_widg.setMaximumWidth(400) anly_widg.setMinimumWidth(200) # Write/Quit buttons hbox1 = QtGui.QHBoxLayout() hbox1.addWidget(wbtn) hbox1.addWidget(wqbtn) hbox1.addWidget(qbtn) buttons.setLayout(hbox1) # z,N zNwidg = QtGui.QWidget() hbox2 = QtGui.QHBoxLayout() hbox2.addWidget(self.zwidget) hbox2.addWidget(self.Nwidget) zNwidg.setLayout(hbox2) #vbox.addWidget(self.pltline_widg) vbox = QtGui.QVBoxLayout() vbox.addWidget(zNwidg) vbox.addWidget(self.abssys_widg) vbox.addWidget(buttons) anly_widg.setLayout(vbox) hbox = QtGui.QHBoxLayout() hbox.addWidget(self.spec_widg) hbox.addWidget(anly_widg) self.main_widget.setLayout(hbox) # Point MainWindow self.setCentralWidget(self.main_widget)
def __init__(self, ispec, parent=None, lls_fit_file=None, srch_id=True, outfil=None, smooth=3.): QtGui.QMainWindow.__init__(self, parent) ''' spec = Spectrum1D lls_fit_file: str, optional Name of the LLS fit file to input smooth: float, optional Number of pixels to smooth on ''' # Build a widget combining several others self.main_widget = QtGui.QWidget() # Status bar self.create_status_bar() # Initialize if outfil is None: self.outfil = 'LLS_fit.json' else: self.outfil = outfil self.count_lls = 0 self.lls_model = None self.all_forest = [] # Spectrum spec, spec_fil = xxgu.read_spec(ispec) # Continuum self.conti_dict = {'Norm': np.median(spec.flux), 'tilt': 0., 'piv_wv': np.median(spec.dispersion.value)} self.continuum = XSpectrum1D.from_tuple(( spec.dispersion,np.ones(len(spec.dispersion)))) self.base_continuum = self.continuum.flux self.update_conti() # Full Model (LLS+continuum) self.full_model = XSpectrum1D.from_tuple(( spec.dispersion,np.ones(len(spec.dispersion)))) self.smooth = smooth # LineList self.llist = xxgu.set_llist('Strong') self.llist['z'] = 0. # z and N boxes self.zwidget = xxgu.EditBox(-1., 'z_LLS=', '{:0.5f}') self.Nwidget = xxgu.EditBox(-1., 'NHI=', '{:0.2f}') # Grab the pieces and tie together self.abssys_widg = xspw.AbsSysWidget([],only_one=True, no_buttons=True, linelist=self.llist[self.llist['List']]) self.spec_widg = xspw.ExamineSpecWidget(spec,status=self.statusBar, llist=self.llist, key_events=False, abs_sys=self.abssys_widg.abs_sys) self.spec_widg.continuum = self.continuum # Initial file if lls_fit_file is not None: self.init_LLS(lls_fit_file) # Outfil wbtn = QtGui.QPushButton('Write', self) wbtn.setAutoDefault(False) wbtn.clicked.connect(self.write_out) #self.out_box = QtGui.QLineEdit() #self.out_box.setText(self.outfil) #self.connect(self.out_box, QtCore.SIGNAL('editingFinished ()'), self.set_outfil) # Quit buttons = QtGui.QWidget() wqbtn = QtGui.QPushButton('Write\n Quit', self) wqbtn.setAutoDefault(False) wqbtn.clicked.connect(self.write_quit) qbtn = QtGui.QPushButton('Quit', self) qbtn.setAutoDefault(False) qbtn.clicked.connect(self.quit) # Connections (buttons are above) self.spec_widg.canvas.mpl_connect('key_press_event', self.on_key) self.abssys_widg.abslist_widget.itemSelectionChanged.connect( self.on_list_change) self.connect(self.Nwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setzN) self.connect(self.zwidget.box, QtCore.SIGNAL('editingFinished ()'), self.setzN) # Layout anly_widg = QtGui.QWidget() anly_widg.setMaximumWidth(400) anly_widg.setMinimumWidth(200) # Write/Quit buttons hbox1 = QtGui.QHBoxLayout() hbox1.addWidget(wbtn) hbox1.addWidget(wqbtn) hbox1.addWidget(qbtn) buttons.setLayout(hbox1) # z,N zNwidg = QtGui.QWidget() hbox2 = QtGui.QHBoxLayout() hbox2.addWidget(self.zwidget) hbox2.addWidget(self.Nwidget) zNwidg.setLayout(hbox2) #vbox.addWidget(self.pltline_widg) vbox = QtGui.QVBoxLayout() vbox.addWidget(zNwidg) vbox.addWidget(self.abssys_widg) vbox.addWidget(buttons) anly_widg.setLayout(vbox) hbox = QtGui.QHBoxLayout() hbox.addWidget(self.spec_widg) hbox.addWidget(anly_widg) self.main_widget.setLayout(hbox) # Point MainWindow self.setCentralWidget(self.main_widget)