def object_picked(self, object_number): if object_number == self.current_projection: return self.current_projection = object_number resize_necessary = False if self.mx_display == None: self.mx_display = EMImage2DWidget() # self.mx_display = EMImageMXWidget() self.mx_display.module_closed.connect(self.on_mx_display_closed) resize_necessary = True if self.frc_display == None: self.frc_display = EMPlot2DWidget() # QtCore.QObject.connect(self.frc_display,QtCore.SIGNAL("module_closed"),self.on_frc_display_closed) self.update_display(False) if resize_necessary: get_application().show_specific(self.mx_display) self.mx_display.optimally_resize() get_application().show_specific(self.frc_display) # self.frc_display.optimally_resize() else: self.mx_display.updateGL() self.frc_display.updateGL() if object_number != self.special_euler: self.special_euler = object_number self.regen_dl()
def plot(files, app): from eman2_gui.emplot2d import EMPlot2DWidget plotw = EMPlot2DWidget(application=app) for f in files: plotw.set_data_from_file(f, quiet=True) plotw.setWindowTitle("2D Plot") app.show_specific(plotw) return plotw
def __init__(self, options): QtWidgets.QMainWindow.__init__(self) if options.twod: self.twodview = EMImage2DWidget() widget = Microscope(self, options, None, None, self.twodview) else: self.imgview = EMImage2DWidget() self.pltview = EMPlot2DWidget() widget = Microscope(self, options, self.imgview, self.pltview, None) #widget = Microscope(self, None, None, None, mode, cs) #widget = Microscope(self, None, None) self.closeEvent=widget.closeEvent self.setCentralWidget(widget)
def __init__(self, mode=0, cs=0., twod=False): QtGui.QMainWindow.__init__(self) if twod: self.twodview = EMImage2DWidget() widget = Microscope(self, None, None, self.twodview, mode, cs) else: self.imgview = EMImage2DWidget() self.pltview = EMPlot2DWidget() widget = Microscope(self, self.imgview, self.pltview, None, mode, cs) #widget = Microscope(self, None, None, None, mode, cs) #widget = Microscope(self, None, None) self.closeEvent=widget.closeEvent self.setCentralWidget(widget)
def main(): progname = os.path.basename(sys.argv[0]) usage = """e2simmxptclcmp.py [options] <simmx file> ... Plots the set of similarity quality values for a single particle from a set of simmx files. """ parser = EMArgumentParser(usage=usage, version=EMANVERSION) parser.add_argument("--ptcl", type=int, help="particle number", default=0) # parser.add_argument("--refine",type=str,default=None,help="Automatically get parameters for a refine directory") #parser.add_argument("--output",type=str,help="Output text file",default="zvssim.txt") #parser.add_argument("--refs",type=str,help="Reference images from the similarity matrix (projections)",default=None) #parser.add_argument("--inimgs",type=str,help="Input image file",default=None) #parser.add_argument("--outimgs",type=str,help="Output image file",default="imgs.hdf") #parser.add_argument("--filtimgs",type=str,help="A python expression using Z[n], Q[n] and N[n] for selecting specific particles to output. n is the 0 indexed number of the input file",default=None) #parser.add_argument("--ppid", type=int, help="Set the PID of the parent process, used for cross platform PPID",default=-1) (options, args) = parser.parse_args() app = EMApp() from eman2_gui.emplot2d import EMPlot2DWidget plotw = EMPlot2DWidget(application=app) plts = [] for simmx in args: mx = EMData(simmx, 0) plts.append(mx.get_clip(Region(0, options.ptcl, mx["nx"], 1))) plts[-1].process_inplace("normalize") plotw.set_data(plts[-1], simmx) plotw.setWindowTitle("ptcl vs similarity") plotw.show() try: plotw.raise_() except: pass app.exec_()
def main(): progname = os.path.basename(sys.argv[0]) usage = """prog [options] This is a program to compute the resolution of a n averaged subtomogram. Right now it is very simple simple divide the aligned subtomos into even/odd classes, average and then compute the FSC. In the future this program will be extended to compute resolution of an averged subtomo vs a reference and hopefuly of a single sub/tomogram. """ parser = EMArgumentParser(usage=usage, version=EMANVERSION) parser.add_pos_argument( name="tomodir", help="The refinement directory to use for tomoresolution.", default="", guitype='dirbox', dirbasename='spt_', row=0, col=0, rowspan=1, colspan=2) parser.add_header( name="tomoresoheader", help='Options below this label are specific to e2tomoresolution', title="### e2tomoresolution options ###", row=1, col=0, rowspan=1, colspan=2) parser.add_argument( "--averager", type=str, help="The averager used to generate the averages. Default is \'mean\'.", default="mean", guitype='combobox', choicelist='dump_averagers_list()', row=2, col=0, rowspan=1, colspan=2) parser.add_argument("--sym", type=str, help="The recon symmetry", default="c1", guitype='symbox', row=3, col=0, rowspan=1, colspan=2) parser.add_argument( "--mask", type=str, help="The mask to apply before FSC calculation", default=None, guitype='comboparambox', choicelist='re_filter_list(dump_processors_list(),\'mask\')', row=4, col=0, rowspan=1, colspan=2) parser.add_argument( "--ppid", type=int, help="Set the PID of the parent process, used for cross platform PPID", default=-1) (options, args) = parser.parse_args() if options.mask: options.mask = parsemodopt(options.mask) logid = E2init(sys.argv, options.ppid) fscstrategy = EvenOddReso(args[0], options) fscstrategy.execute() results_db = db_open_dict("bdb:%s#convergence.results" % args[0]) results_db["tomo_fsc"] = [ fscstrategy.getFreq(), fscstrategy.getFSC(), fscstrategy.getError() ] results_db.close() E2end(logid) # Plot FSC app = EMApp() plot = EMPlot2DWidget() plot.set_data((fscstrategy.getFreq(), fscstrategy.getFSC())) plot.show() app.exec_()
def __init__(self, application, apix=1.0, voltage=300.0, cs=4.1, ac=10.0, samples=256, apply=None): """CTF simulation dialog """ try: from eman2_gui.emimage2d import EMImage2DWidget except: print("Cannot import EMAN image GUI objects (EMImage2DWidget)") sys.exit(1) try: from eman2_gui.emplot2d import EMPlot2DWidget except: print( "Cannot import EMAN plot GUI objects (is matplotlib installed?)" ) sys.exit(1) self.app = weakref.ref(application) self.df_voltage = voltage self.df_apix = apix self.df_cs = cs self.df_ac = ac self.df_samples = samples self.img = None if apply == None: self.apply = None self.applyim = None else: self.apply = EMData(apply, 0) self.df_apix = self.apply["apix_x"] print("A/pix reset to ", self.df_apix) self.applyim = EMImage2DWidget(application=self.app()) QtGui.QWidget.__init__(self, None) self.setWindowIcon(QtGui.QIcon(get_image_directory() + "ctf.png")) self.data = [] self.curset = 0 self.plotmode = 0 self.guiim = EMImage2DWidget(application=self.app()) self.guiiminit = True # a flag that's used to auto resize the first time the gui's set_data function is called self.guiplot = EMPlot2DWidget(application=self.app()) # self.guirealim=EMImage2DWidget(application=self.app()) # This will show the original particle images self.guiim.mousedown.connect(self.imgmousedown) self.guiim.mousedrag.connect(self.imgmousedrag) self.guiim.mouseup.connect(self.imgmouseup) self.guiplot.mousedown.connect(self.plotmousedown) self.guiim.mmode = "app" # This object is itself a widget we need to set up self.hbl = QtGui.QHBoxLayout(self) self.hbl.setMargin(0) self.hbl.setSpacing(6) self.hbl.setObjectName("hbl") # plot list and plot mode combobox self.vbl2 = QtGui.QVBoxLayout() self.setlist = MyListWidget(self) self.setlist.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding) self.vbl2.addWidget(self.setlist) self.splotmode = QtGui.QComboBox(self) self.splotmode.addItem("Amplitude") self.splotmode.addItem("Intensity") self.splotmode.addItem("Int w sum") self.splotmode.addItem("Amp w sum") self.vbl2.addWidget(self.splotmode) self.hbl.addLayout(self.vbl2) # ValSliders for CTF parameters self.vbl = QtGui.QVBoxLayout() self.vbl.setMargin(0) self.vbl.setSpacing(6) self.vbl.setObjectName("vbl") self.hbl.addLayout(self.vbl) #self.samp = ValSlider(self,(0,5.0),"Amp:",0) #self.vbl.addWidget(self.samp) self.imginfo = QtGui.QLabel("Info", self) self.vbl.addWidget(self.imginfo) self.sdefocus = ValSlider(self, (0, 5), "Defocus:", 0, 90) self.vbl.addWidget(self.sdefocus) self.sbfactor = ValSlider(self, (0, 1600), "B factor:", 100, 90) self.vbl.addWidget(self.sbfactor) self.sdfdiff = ValSlider(self, (0, 1), "DF Diff:", 0, 90) self.vbl.addWidget(self.sdfdiff) self.sdfang = ValSlider(self, (0, 180), "Df Angle:", 0, 90) self.vbl.addWidget(self.sdfang) self.sampcont = ValSlider(self, (0, 100), "% AC", 0, 90) self.vbl.addWidget(self.sampcont) self.sphase = ValSlider(self, (0, 1), "Phase/pi", 0, 90) self.vbl.addWidget(self.sphase) self.sapix = ValSlider(self, (.2, 10), "A/Pix:", 2, 90) self.vbl.addWidget(self.sapix) self.svoltage = ValSlider(self, (0, 1000), "Voltage (kV):", 0, 90) self.vbl.addWidget(self.svoltage) self.scs = ValSlider(self, (0, 5), "Cs (mm):", 0, 90) self.vbl.addWidget(self.scs) self.ssamples = ValSlider(self, (32, 1024), "# Samples:", 0, 90) self.ssamples.setIntonly(True) self.vbl.addWidget(self.ssamples) self.hbl_buttons = QtGui.QHBoxLayout() self.newbut = QtGui.QPushButton("New") self.hbl_buttons.addWidget(self.newbut) self.vbl.addLayout(self.hbl_buttons) self.on_new_but() self.sdefocus.valueChanged.connect(self.newCTF) self.sbfactor.valueChanged.connect(self.newCTF) self.sdfdiff.valueChanged.connect(self.newCTF) self.sdfang.valueChanged.connect(self.newCTF) self.sapix.valueChanged.connect(self.newCTF) self.sampcont.valueChanged.connect(self.newCTFac) self.sphase.valueChanged.connect(self.newCTFpha) self.svoltage.valueChanged.connect(self.newCTF) self.scs.valueChanged.connect(self.newCTF) self.ssamples.valueChanged.connect(self.newCTF) self.setlist.currentRowChanged[int].connect(self.newSet) self.setlist.keypress.connect(self.listkey) self.splotmode.currentIndexChanged[int].connect(self.newPlotMode) self.newbut.clicked[bool].connect(self.on_new_but) self.resize( 720, 380 ) # figured these values out by printing the width and height in resize event E2loadappwin("e2ctfsim", "main", self) E2loadappwin("e2ctfsim", "image", self.guiim.qt_parent) # E2loadappwin("e2ctf","realimage",self.guirealim.qt_parent) E2loadappwin("e2ctfsim", "plot", self.guiplot.qt_parent) self.setWindowTitle("CTF")
def main(): progname = os.path.basename(sys.argv[0]) usage = """prog Refinement directory [options] Plot FSC curvers produced by e2refine, eotest, etc. >""" parser = EMArgumentParser(usage=usage, version=EMANVERSION) #dirbasename='refine|frealign', #parser.add_pos_argument(name="plot_files",help="List the directories to plot here.", default="", guitype='filebox', browser="EMBrowserWidget(withmodal=True,multiselect=True)", row=0, col=0,rowspan=1, colspan=2) parser.add_header( name="filterheader", help='There is no help', title= "This program is currently not functional. The table below is still useful,\n but for actual plots, suggest using e2evalrefine.py for now.", row=0, col=0, rowspan=1, colspan=2) parser.add_pos_argument( name="fscdir", help="The refinement directory to use for FSC plotting.", default="", guitype='fsctable', row=1, col=0, rowspan=1, colspan=2) parser.add_header( name="filterheader", help='Options below this label are specific to e2plotFSC', title="### e2plotFSC options ###", row=2, col=0, rowspan=1, colspan=2) parser.add_argument("--plote2res", action="store_false", help="Plot curves from e2resoltion", default=True, guitype='boolbox', row=3, col=0, rowspan=1, colspan=1) parser.add_argument("--plote2eotest", action="store_false", help="Plot curves from e2eotest", default=True, guitype='boolbox', row=3, col=1, rowspan=1, colspan=1) parser.add_argument("--plotconvergence", action="store_false", help="Plot curves from refinement convergence", default=True, guitype='boolbox', row=4, col=0, rowspan=1, colspan=1) parser.add_argument("--ploteoconvergence", action="store_false", help="Plot curves from refine_even_odd convergence", default=True, guitype='boolbox', row=4, col=1, rowspan=1, colspan=1) parser.add_argument( "--ppid", type=int, help="Set the PID of the parent process, used for cross platform PPID", default=-1) (options, args) = parser.parse_args() # Make the QT app app = EMApp() # display table if len(args) == 0: fsctable = PMFSCTableWidget("fsc", "", None, resize=True) fsctable.show() # or let user choose FSC plotting pars else: module = EMPlot2DWidget() # Get data from data base db_name = "bdb:" + args[0] + "#convergence.results" if not db_check_dict(db_name): print("Rubbish!!!, no FSC curves found!!!") return db = db_open_dict(db_name, ro=True) keys = db.keys() # Load desired FSC curves res = [] eo = [] conv = [] eoconv = [] # Method to the maddness, I use not here because I need to only plot when open is not presented AND I need to keep presentation on in the GUI if not options.plote2res: res = get_e2resolution_results_list(keys) if not options.plote2eotest: eo = get_e2eotest_results_list(keys) if not options.plotconvergence: conv = get_convergence_results_list(keys) if not options.ploteoconvergence: eoconv = get_e2refine_even_odd_results_list(keys) # Plot FSC curves i = 0 max = len(colortypes) for k in conv: module.set_data( db[k], k, color=(i % max), linewidth=1) # there are only a ceratin number of colors i += 1 # plot e2refine_even_odd curves for k in eoconv: module.set_data( db[k], k, color=(i % max), linewidth=2) # there are only a ceratin number of colors i += 1 #plot eo test and res for plot in [eo, res]: for k in plot: module.set_data( db[k], k, color=(i % max), linewidth=3) # there are only a ceratin number of colors i += 1 module.show() app.exec_()
def __init__(self, application, data): """Implements the CTF fitting dialog using various EMImage and EMPlot2D widgets 'data' is a list of (filename,ctf,im_1d,bg_1d,im_2d,bg_2d) """ try: from eman2_gui.emimage2d import EMImage2DWidget except: ERROR("Cannot import EMAN image GUI objects (EMImage2DWidget)") return try: from eman2_gui.emplot2d import EMPlot2DWidget except: ERROR( "Cannot import EMAN plot GUI objects (is matplotlib installed?)" ) return self.app = weakref.ref(application) QtGui.QWidget.__init__(self, None) self.setWindowIcon(QtGui.QIcon(get_image_directory() + "ctf.png")) self.data = data self.curset = 0 self.plotmode = 0 self.guiim = EMImage2DWidget(application=self.app()) self.guiplot = EMPlot2DWidget(application=self.app()) self.guiim.mousedown.connect(self.imgmousedown) self.guiim.mousedrag.connect(self.imgmousedrag) self.guiim.mouseup.connect(self.imgmouseup) self.guiplot.mousedown.connect(self.plotmousedown) self.guiim.mmode = "app" # This object is itself a widget we need to set up self.hbl = QtGui.QHBoxLayout(self) self.hbl.setMargin(0) self.hbl.setSpacing(6) self.hbl.setObjectName("hbl") # plot list and plot mode combobox self.vbl2 = QtGui.QVBoxLayout() self.setlist = QtGui.QListWidget(self) self.setlist.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding) self.vbl2.addWidget(self.setlist) self.splotmode = QtGui.QComboBox(self) self.splotmode.addItem("Bgsub & fit") self.splotmode.addItem("Ptcl & BG power") self.splotmode.addItem("SNR") self.splotmode.addItem("Smoothed SNR") self.splotmode.addItem("Integrated SNR") self.splotmode.addItem("Total CTF") self.vbl2.addWidget(self.splotmode) self.hbl.addLayout(self.vbl2) # ValSliders for CTF parameters self.vbl = QtGui.QVBoxLayout() self.vbl.setMargin(0) self.vbl.setSpacing(6) self.vbl.setObjectName("vbl") self.hbl.addLayout(self.vbl) #self.samp = ValSlider(self,(0,5.0),"Amp:",0) #self.vbl.addWidget(self.samp) self.sdefocus = ValSlider(self, (0, 5), "Defocus:", 0, 90) self.vbl.addWidget(self.sdefocus) self.sbfactor = ValSlider(self, (0, 1600), "B factor:", 0, 90) self.vbl.addWidget(self.sbfactor) self.sampcont = ValSlider(self, (0, 100), "% AC", 0, 90) self.vbl.addWidget(self.sampcont) # self.sapix=ValSlider(self,(.2,10),"A/Pix:",2,90) # self.vbl.addWidget(self.sapix) self.svoltage = ValSlider(self, (0, 500), "Voltage (kV):", 0, 90) self.vbl.addWidget(self.svoltage) self.scs = ValSlider(self, (0, 5), "Cs (mm):", 0, 90) self.vbl.addWidget(self.scs) self.hbl_buttons = QtGui.QHBoxLayout() self.saveparms = QtGui.QPushButton("Save parms") self.recallparms = QtGui.QPushButton("Recall") self.output = QtGui.QPushButton("Output") self.hbl_buttons.addWidget(self.saveparms) self.hbl_buttons.addWidget(self.recallparms) self.hbl_buttons2 = QtGui.QHBoxLayout() self.hbl_buttons2.addWidget(self.output) self.vbl.addLayout(self.hbl_buttons) self.vbl.addLayout(self.hbl_buttons2) self.sdefocus.valueChanged.connect(self.newCTF) self.sbfactor.valueChanged.connect(self.newCTF) # QtCore.QObject.connect(self.sapix, QtCore.SIGNAL("valueChanged"), self.newCTF) self.sampcont.valueChanged.connect(self.newCTF) self.svoltage.valueChanged.connect(self.newCTF) self.scs.valueChanged.connect(self.newCTF) self.setlist.currentRowChanged[int].connect(self.newSet) self.splotmode.currentIndexChanged[int].connect(self.newPlotMode) self.saveparms.clicked[bool].connect(self.on_save_params) self.recallparms.clicked[bool].connect(self.on_recall_params) self.output.clicked[bool].connect(self.on_output) self.update_data() self.update_data() self.resize( 460, 380 ) # figured these values out by printing the width and height in resize event self.setWindowTitle("CTF")
def __init__(self,app): self.app=app QtWidgets.QWidget.__init__(self,None) self.synthplot=EMPlot2DWidget(self.app) self.synthplot.show() # overall layout self.vbl1=QtWidgets.QVBoxLayout() self.setLayout(self.vbl1) # First row contains general purpose controls self.hbl1=QtWidgets.QHBoxLayout() self.vbl1.addLayout(self.hbl1) self.vcell=ValBox(self,(0,128.0),"Cell:",64) self.hbl1.addWidget(self.vcell) self.vncells=ValBox(self,(0,128.0),"n Cells:",1) self.hbl1.addWidget(self.vncells) self.voversamp=ValBox(self,(0,128.0),"Oversample:",1) self.hbl1.addWidget(self.voversamp) self.targfn=None self.vnsin=ValBox(self,(1,64),"# Sin:",32) self.vnsin.intonly=1 self.hbl1.addWidget(self.vnsin) self.cbshowall=QtWidgets.QCheckBox("Show All") self.hbl1.addWidget(self.cbshowall) self.cbshifted=QtWidgets.QCheckBox("Shifted") self.hbl1.addWidget(self.cbshifted) self.cbtargfn=QtWidgets.QComboBox(self) self.cbtargfn.addItem("None") self.cbtargfn.addItem("triangle") self.cbtargfn.addItem("square") self.cbtargfn.addItem("square imp") self.cbtargfn.addItem("delta") self.cbtargfn.addItem("noise") self.cbtargfn.addItem("saw") self.cbtargfn.addItem("sin") self.cbtargfn.addItem("modsin") self.cbtargfn.addItem("modsin2") self.cbtargfn.addItem("modsin3") self.cbtargfn.addItem("sin low") self.cbtargfn.addItem("doubledelta") self.cbtargfn.addItem("sin bad f") self.cbtargfn.addItem("sin bad f2") self.cbtargfn.addItem("square imp dx") self.cbtargfn.addItem("square imp 2") self.hbl1.addWidget(self.cbtargfn) # Widget containing valsliders self.wapsliders=QtWidgets.QWidget(self) # self.wapsliders.setMinimumSize(800,640) self.gblap=QtWidgets.QGridLayout() self.gblap.setSizeConstraint(QtWidgets.QLayout.SetMinAndMaxSize) self.gblap.setColumnMinimumWidth(0,250) self.gblap.setColumnMinimumWidth(1,250) self.wapsliders.setLayout(self.gblap) # ScrollArea providing view on slider container widget self.wapsarea=QtWidgets.QScrollArea(self) self.wapsarea.setWidgetResizable(True) self.wapsarea.setWidget(self.wapsliders) self.vbl1.addWidget(self.wapsarea) self.vcell.valueChanged.connect(self.recompute) self.vncells.valueChanged.connect(self.recompute) self.voversamp.valueChanged.connect(self.recompute) self.vnsin.valueChanged.connect(self.nsinchange) self.cbshowall.stateChanged[int].connect(self.recompute) self.cbshifted.stateChanged[int].connect(self.recompute) self.cbtargfn.activated[int].connect(self.newtargfn) self.wamp=[] self.wpha=[] self.curves=[] self.xvals=[] for i in range(65): self.wamp.append(ValSlider(self,(0.0,1.0),"%2d:"%i,0.0)) self.gblap.addWidget(self.wamp[-1],i,0) self.wamp[-1].valueChanged.connect(self.recompute) self.wpha.append(ValSlider(self,(-180.0,180.0),"%2d:"%i,0.0)) self.gblap.addWidget(self.wpha[-1],i,1) self.wpha[-1].valueChanged.connect(self.recompute) self.curves.append(EMData(64,1)) if self.cbshowall.isChecked() : self.synthplot self.total=EMData(64,1) self.nsinchange()
def __init__(self, options): self.path="tomograms/" QtGui.QWidget.__init__(self,None) self.win_size=[1000,680] self.setMinimumSize(self.win_size[0], self.win_size[1]) # This object is itself a widget we need to set up self.gbl = QtGui.QGridLayout(self) self.gbl.setMargin(8) self.gbl.setSpacing(6) self.gbl.setColumnStretch(0,4) self.gbl.setColumnStretch(1,1) #self.gbl.setColumnStretch(2,1) self.gbl.setRowStretch(0,1) # Micrograph list self.imglst=QtGui.QTableWidget(1, 3, self) self.imglst.verticalHeader().hide() self.gbl.addWidget(self.imglst,0,0,10,1) #self.imglst.setColumnWidth(0,50) self.imglst.setColumnWidth(1,200) self.imglst_srtby=0 hdr=self.imglst.horizontalHeader() self.imglst.cellClicked[int, int].connect(self.select_folder) hdr.sectionPressed[int].connect(self.sortlst) self.dp_folder=QtGui.QComboBox() self.dp_folder.setToolTip("Folder suffix") self.gbl.addWidget(self.dp_folder, 0,1,1,1) sfxlst=["spt", "sptsgd"] for i in sfxlst: self.dp_folder.addItem(i) self.dp_folder.currentIndexChanged[int].connect(self.set_sfx) self.wg_thumbnail=EMScene3D()#parent=self) #self.wg_thumbnail.set_scale(1) self.wg_thumbnail_width=old_div(self.size().width(),4)*.9 self.wg_thumbnail.resize(self.wg_thumbnail_width,self.wg_thumbnail_width) #print self.wg_thumbnail_width self.wg_thumbnail.setMinimumHeight(330) self.wg_thumbnail.setMinimumWidth(330) self.gbl.addWidget(self.wg_thumbnail, 1,1,2,2) self.wg_thumbnail.newnode=None self.bt_showbs=QtGui.QPushButton("ShowBrowser") self.bt_showbs.setToolTip("Show Browser") self.gbl.addWidget(self.bt_showbs, 2,1,1,2) self.bt_showbs.clicked[bool].connect(self.show_browser) self.bt_plotParms=QtGui.QPushButton("PlotParams") self.bt_plotParms.setToolTip("Examine particle orientations") self.gbl.addWidget(self.bt_plotParms, 3,1,1,2) self.bt_plotParms.clicked[bool].connect(self.plot_params) self.paramplot = EMPlot2DWidget() self.bt_plotFSC=QtGui.QPushButton("PlotFSCs") self.bt_plotFSC.setToolTip("Examine tightly masked FSCs from this SPT refinement") self.gbl.addWidget(self.bt_plotFSC, 4,1,1,2) self.bt_plotFSC.clicked[bool].connect(self.plot_fscs) self.fscplot = EMPlot2DWidget() self.setspanel=TomoListWidget(self) self.gbl.addWidget(self.setspanel, 5,1,5,2) self.itemflags= Qt.ItemFlags(Qt.ItemIsSelectable)|Qt.ItemFlags(Qt.ItemIsEnabled)|Qt.ItemFlags(Qt.ItemIsUserCheckable) #self.wg_notes=QtGui.QTextEdit(self) #self.gbl.addWidget(self.wg_notes, 10,1,1,2) #self.setspanel.itemChanged[QtGui.QListWidgetItem].connect(self.click_set) #QtCore.QObject.connect(self.wg_notes,QtCore.SIGNAL("textChanged()"),self.noteupdate) #self.wg_plot2d=EMPlot2DWidget() self.update_files() self.browser=SPTBrowserWidget(withmodal=False,multiselect=False)
def __init__(self, options): self.path = "tomograms/" QtGui.QWidget.__init__(self, None) self.win_size = [1000, 680] self.setMinimumSize(self.win_size[0], self.win_size[1]) # This object is itself a widget we need to set up self.gbl = QtGui.QGridLayout(self) self.gbl.setMargin(8) self.gbl.setSpacing(6) self.gbl.setColumnStretch(0, 4) self.gbl.setColumnStretch(1, 1) self.gbl.setColumnStretch(2, 1) self.gbl.setRowStretch(0, 1) # Micrograph list self.imglst = QtGui.QTableWidget(1, 3, self) self.imglst.verticalHeader().hide() self.gbl.addWidget(self.imglst, 0, 0, 11, 1) self.imglst.setColumnWidth(0, 50) self.imglst.setColumnWidth(1, 200) self.imglst_srtby = 0 hdr = self.imglst.horizontalHeader() QtCore.QObject.connect(self.imglst, QtCore.SIGNAL("cellClicked(int,int)"), self.selimg) QtCore.QObject.connect(hdr, QtCore.SIGNAL("sectionPressed(int)"), self.sortlst) self.wg_thumbnail = EMImage2DWidget(parent=self) self.wg_thumbnail.set_scale(1) self.wg_thumbnail_width = self.size().width() / 3 * .9 self.wg_thumbnail.resize(self.wg_thumbnail_width, self.wg_thumbnail_width) #print self.wg_thumbnail_width self.wg_thumbnail.setMinimumHeight(330) self.gbl.addWidget(self.wg_thumbnail, 0, 1, 3, 2) self.bt_show2d = QtGui.QPushButton("Show2D") self.bt_show2d.setToolTip("Show 2D images") self.gbl.addWidget(self.bt_show2d, 4, 1, 1, 2) self.bt_runboxer = QtGui.QPushButton("Boxer") self.bt_runboxer.setToolTip("Run spt_boxer") self.gbl.addWidget(self.bt_runboxer, 5, 1) self.bt_refresh = QtGui.QPushButton("Refresh") self.bt_refresh.setToolTip("Refresh") self.gbl.addWidget(self.bt_refresh, 5, 2) self.bt_showtlts = QtGui.QPushButton("ShowTilts") self.bt_showtlts.setToolTip("Show raw tilt series") self.gbl.addWidget(self.bt_showtlts, 6, 1) self.bt_plottpm = QtGui.QPushButton("TiltParams") self.bt_plottpm.setToolTip("Plot tilt parameters") self.gbl.addWidget(self.bt_plottpm, 6, 2) self.bt_plotloss = QtGui.QPushButton("PlotLoss") self.bt_plotloss.setToolTip("Plot alignment loss") self.gbl.addWidget(self.bt_plotloss, 7, 1) self.bt_plotctf = QtGui.QPushButton("PlotCtf") self.bt_plotctf.setToolTip("Plot CTF estimation") self.gbl.addWidget(self.bt_plotctf, 7, 2) QtCore.QObject.connect(self.bt_show2d, QtCore.SIGNAL("clicked(bool)"), self.show2d) QtCore.QObject.connect(self.bt_runboxer, QtCore.SIGNAL("clicked(bool)"), self.runboxer) QtCore.QObject.connect(self.bt_plotloss, QtCore.SIGNAL("clicked(bool)"), self.plot_loss) QtCore.QObject.connect(self.bt_plottpm, QtCore.SIGNAL("clicked(bool)"), self.plot_tltparams) QtCore.QObject.connect(self.bt_showtlts, QtCore.SIGNAL("clicked(bool)"), self.show_tlts) QtCore.QObject.connect(self.bt_refresh, QtCore.SIGNAL("clicked(bool)"), self.update_files) QtCore.QObject.connect(self.bt_plotctf, QtCore.SIGNAL("clicked(bool)"), self.plot_ctf) self.wg_2dimage = EMImage2DWidget() self.wg_2dimage.setWindowTitle("Tomo2D") self.cur_data = None self.wg_tltimage = EMImage2DWidget() self.wg_tltimage.setWindowTitle("Tiltseries") self.wg_tltimage.set_scale(.2) self.cur_tlt = None self.setspanel = QtGui.QListWidget(self) self.gbl.addWidget(self.setspanel, 8, 1, 2, 2) self.itemflags = Qt.ItemFlags(Qt.ItemIsEditable) | Qt.ItemFlags( Qt.ItemIsSelectable) | Qt.ItemFlags( Qt.ItemIsEnabled) | Qt.ItemFlags(Qt.ItemIsUserCheckable) self.wg_notes = QtGui.QTextEdit(self) self.gbl.addWidget(self.wg_notes, 10, 1, 1, 2) QtCore.QObject.connect(self.setspanel, QtCore.SIGNAL("itemChanged(QListWidgetItem*)"), self.clickset) QtCore.QObject.connect(self.wg_notes, QtCore.SIGNAL("textChanged()"), self.noteupdate) self.wg_plot2d = EMPlot2DWidget() self.update_files()
def __init__(self,images,voltage=None,apix=None,cs=None,ac=10.0,box=512,usefoldername=False,constbfactor=-1,fitastig=False,phaseplate=False): """Implements the CTF fitting dialog using various EMImage and EMPlot2D widgets 'data' is a list of (filename,ctf,im_1d,bg_1d,quality) 'parms' is [box size,ctf,box coord,set of excluded boxnums,quality,oversampling] """ try: from eman2_gui.emimage2d import EMImage2DWidget except: print("Cannot import EMAN image GUI objects (EMImage2DWidget)") sys.exit(1) try: from eman2_gui.emplot2d import EMPlot2DWidget except: print("Cannot import EMAN plot GUI objects (is matplotlib installed?)") sys.exit(1) QtWidgets.QWidget.__init__(self,None) self.setWindowIcon(QtGui.QIcon(get_image_directory() + "ctf.png")) self.nodir=not usefoldername self.data=None self.curset=0 self.calcmode=1 self.f2dmode=0 self.f2danmode=0 self.plotmode=0 self.curfilename = None self.ringrad=1 self.xpos1=(10,0) self.xpos2=(0,10) # self.db = db_open_dict('bdb:mgquality') self.defaultvoltage=voltage self.defaultapix=apix self.defaultcs=cs self.defaultac=ac self.constbfactor=constbfactor # Per image parameters to keep track of # for each image [box size,ctf,box coord,set of excluded boxnums,quality,oversampling] self.parms=[] # db_fparms=db_open_dict("bdb:e2ctf.frameparms",True) # This little block of code deals with Z stacks of images and multiple image files, # rewriting the name(s) with an enumeration including ;number or ,number newimages=[] for i in images: n=EMUtil.get_image_count(i) if n!=1: for j in range(n): newimages.append(i+",%d"%j) else: h=EMData(i,0,True) # read header n=h["nz"] if n!=1: for j in range(n): newimages.append(i+";%d"%j) else : newimages.append(i) images=newimages # Now we try to restore old image information for i in images: try: pd=js_open_dict(info_name(i,nodir=self.nodir)) parms=pd["ctf_frame"] parms[4]=pd["quality"] if box>=64 and parms[0]!=box: parms[0]=box parms[3]=set() # if parms==None : raise Exception except: ctf = EMAN2Ctf() ctf.from_dict({'defocus':0.0,'dfdiff':0.0,'dfang':0.0,'bfactor':200.0,'ampcont':self.defaultac,'voltage':200.0,'cs':4.1,'apix':1.0,'dsbg':-1}) if self.defaultvoltage!=None : ctf.voltage=self.defaultvoltage if self.defaultcs!=None : ctf.cs=self.defaultcs if self.defaultapix!=None : ctf.apix=self.defaultapix parms=[int(box),ctf,(256,256),set(),5,1] print("Initialize new parms for: ",base_name(i)) if self.constbfactor>0 : parms[1].bfactor=self.constbfactor if parms[0]<64 : parms[0]=512 parms[3]=set() self.parms.append(parms) self.wimage=EMImage2DWidget() self.wimage.setWindowTitle("e2evalimage - Micrograph") self.wfft=EMImage2DWidget() self.wfft.setWindowTitle("e2evalimage - 2D FFT") self.wplot=EMPlot2DWidget() self.wplot.setWindowTitle("e2evalimage - Plot") self.wimage.mousedown.connect(self.imgmousedown) self.wimage.mousedrag.connect(self.imgmousedrag) self.wimage.mouseup.connect(self.imgmouseup) self.wfft.mousedown.connect(self.fftmousedown) self.wfft.mousedrag.connect(self.fftmousedrag) self.wfft.mouseup.connect(self.fftmouseup) self.wimage.mmode="app" self.wfft.mmode="app" # This object is itself a widget we need to set up self.gbl = QtWidgets.QGridLayout(self) self.gbl.setContentsMargins(8, 8, 8, 8) self.gbl.setSpacing(6) # plot list and plot mode combobox self.setlist=e2ctf.MyListWidget(self) self.setlist.setSizePolicy(QtWidgets.QSizePolicy.Preferred,QtWidgets.QSizePolicy.Expanding) for i in images: self.setlist.addItem(i) self.gbl.addWidget(self.setlist,0,0,8,2) self.lcalcmode=QtWidgets.QLabel("Region:",self) self.gbl.addWidget(self.lcalcmode,10,0) self.scalcmode=QtWidgets.QComboBox(self) self.scalcmode.addItem("Single Region") self.scalcmode.addItem("Tiled Boxes") self.scalcmode.setCurrentIndex(1) self.gbl.addWidget(self.scalcmode,10,1) self.lcalcmode=QtWidgets.QLabel("2D FFT:",self) self.gbl.addWidget(self.lcalcmode,11,0) self.s2dmode=QtWidgets.QComboBox(self) self.s2dmode.addItem("Power Spectrum") self.s2dmode.addItem("Bg Subtracted") self.s2dmode.addItem("Background") self.gbl.addWidget(self.s2dmode,11,1) self.lcalcmode=QtWidgets.QLabel("Annotate:",self) self.gbl.addWidget(self.lcalcmode,12,0) self.s2danmode=QtWidgets.QComboBox(self) self.s2danmode.addItem("Ctf Zeroes") self.s2danmode.addItem("Resolution Ring") self.s2danmode.addItem("2-D Xtal") self.s2danmode.addItem("None") self.gbl.addWidget(self.s2danmode,12,1) self.lcalcmode=QtWidgets.QLabel("Plot:",self) self.gbl.addWidget(self.lcalcmode,13,0) self.splotmode=QtWidgets.QComboBox(self) self.splotmode.addItem("Bgsub and Fit") self.splotmode.addItem("Fg and Bg") self.splotmode.addItem("Bgsub, 45 deg slices") self.splotmode.addItem("Fg, 45 deg slices") self.splotmode.addItem("SSNR (NOT BY PTCL !)") self.gbl.addWidget(self.splotmode,13,1) # ValSliders for CTF parameters #self.samp = ValSlider(self,(0,5.0),"Amp:",0) #self.vbl.addWidget(self.samp) self.sdefocus=ValSlider(self,(0,5),"Defocus:",0.0,90) self.gbl.addWidget(self.sdefocus,0,2,1,3) self.sbfactor=ValSlider(self,(0,1600),"B factor:",200.0,90) self.gbl.addWidget(self.sbfactor,1,2,1,3) self.sdfdiff=ValSlider(self,(0,1),"DF Diff:",0,90) self.gbl.addWidget(self.sdfdiff,2,2,1,3) self.sdfang=ValSlider(self,(0,180),"Df Angle:",0,90) self.gbl.addWidget(self.sdfang,3,2,1,3) self.sampcont=ValSlider(self,(0,100),"% AC",10.0,90) if self.defaultac!=None : self.sampcont.setValue(self.defaultac) self.gbl.addWidget(self.sampcont,4,2,1,3) self.sang45=ValSlider(self,(-22.5,22.5),"45 mode ang",0.0,90) self.gbl.addWidget(self.sang45,5,2,1,3) self.squality=ValSlider(self,(0,9),"Quality (0-9):",0,90) self.squality.setIntonly(True) self.gbl.addWidget(self.squality,6,2,1,3) self.brefit=QtWidgets.QPushButton("Refit") self.gbl.addWidget(self.brefit,7,2) self.cbgadj=CheckBox(None,"CTF BG Adj",1) self.gbl.addWidget(self.cbgadj,10,3) self.castig=CheckBox(None,"Astig:",fitastig) self.gbl.addWidget(self.castig,11,3) self.cphasep=CheckBox(None,"Phaseplate:",phaseplate) self.gbl.addWidget(self.cphasep,12,3) # self.sapix=ValSlider(self,(.2,10),"A/Pix:",2,90) # self.vbl.addWidget(self.sapix) self.sapix=ValBox(self,(0,500),"A/pix:",1.0,90) if self.defaultapix!=None : self.sapix.setValue(self.defaultapix) self.gbl.addWidget(self.sapix,10,2) self.svoltage=ValBox(self,(0,500),"Voltage (kV):",200,90) if self.defaultvoltage!=None : self.svoltage.setValue(self.defaultvoltage) self.gbl.addWidget(self.svoltage,11,2) self.scs=ValBox(self,(0,5),"Cs (mm):",4.1,90) if self.defaultcs!=None : self.scs.setValue(self.defaultcs) self.gbl.addWidget(self.scs,12,2) self.sboxsize=ValBox(self,(128,1024),"Box Size:",512,90) self.sboxsize.intonly=True self.gbl.addWidget(self.sboxsize,13,2) # self.soversamp=ValBox(self,(0,500),"Oversample:",1,90) # self.soversamp.intonly=True # self.gbl.addWidget(self.soversamp,14,2) # disable oversampling for now, not properly integrated with save/recall mechanism, and not clear if it's really useful # this is just a spacer self.gbl.setColumnStretch(3,2) self.bbox=QtWidgets.QGroupBox("Project") self.gbl.addWidget(self.bbox,10,4,4,1) self.bvbl=QtWidgets.QVBoxLayout() self.bbox.setLayout(self.bvbl) self.bimport=QtWidgets.QPushButton("Import") self.bvbl.addWidget(self.bimport) self.cinvert=CheckBox(None,"Invert") self.bvbl.addWidget(self.cinvert) self.cxray=CheckBox(None,"X-ray Pixels") self.bvbl.addWidget(self.cxray) self.bimport.clicked[bool].connect(self.doImport) self.brefit.clicked[bool].connect(self.doRefit) self.cbgadj.valueChanged.connect(self.bgAdj) self.sdefocus.valueChanged.connect(self.newCTF) self.sbfactor.valueChanged.connect(self.newCTF) self.sdfdiff.valueChanged.connect(self.newCTF) self.sdfang.valueChanged.connect(self.newCTF) self.sapix.valueChanged.connect(self.newCTF) self.sampcont.valueChanged.connect(self.newCTF) self.svoltage.valueChanged.connect(self.newCTF) self.scs.valueChanged.connect(self.newCTF) self.sboxsize.valueChanged.connect(self.newBox) # QtCore.QObject.connect(self.soversamp, QtCore.SIGNAL("valueChanged"), self.newBox) self.sang45.valueChanged.connect(self.recalc_real) self.squality.valueChanged.connect(self.newQualityFactor) self.setlist.currentRowChanged[int].connect(self.newSet) self.setlist.keypress.connect(self.listkey) self.scalcmode.currentIndexChanged[int].connect(self.newCalcMode) self.s2dmode.currentIndexChanged[int].connect(self.new2DMode) self.s2danmode.currentIndexChanged[int].connect(self.new2DAnMode) self.splotmode.currentIndexChanged[int].connect(self.newPlotMode) #QtCore.QObject.connect(self.saveparms,QtCore.SIGNAL("clicked(bool)"),self.on_save_params) #QtCore.QObject.connect(self.recallparms,QtCore.SIGNAL("clicked(bool)"),self.on_recall_params) #QtCore.QObject.connect(self.refit,QtCore.SIGNAL("clicked(bool)"),self.on_refit) #QtCore.QObject.connect(self.output,QtCore.SIGNAL("clicked(bool)"),self.on_output) self.resize(720,380) # figured these values out by printing the width and height in resize event ### This section is responsible for background updates self.busy=False self.needupdate=True self.needredisp=False self.procthread=None self.errors=None # used to communicate errors back from the reprocessing thread self.timer=QTimer() self.timer.timeout.connect(self.timeOut) self.timer.start(100) self.setWindowTitle("e2evalimage - Control Panel") self.wimage.show() self.wfft.show() self.wplot.show() E2loadappwin("e2evalimage","main",self) E2loadappwin("e2evalimage","image",self.wimage.qt_parent) E2loadappwin("e2evalimage","fft",self.wfft.qt_parent) E2loadappwin("e2evalimage","plot",self.wplot.qt_parent)
def __init__(self, application, opt): self.options = opt """application is an QApplication instance. path is the path for ouput files""" QtWidgets.QWidget.__init__(self) self.particles = None self.app = weakref.ref(application) self.setWindowTitle("Main Window (e2gmm.py)") # Menu Bar #self.mfile=self.menuBar().addMenu("File") #self.mfileopen=self.mfile.addAction("Select Particles") #self.mfileopencls=self.mfile.addAction("Particles from Classes") #self.mfileopencls.setEnabled(False) #self.mfilequit=self.mfile.addAction("Quit") self.setCentralWidget(QtWidgets.QWidget()) self.gbl = QtWidgets.QGridLayout(self.centralWidget()) cen = self.centralWidget() self.gbl.setColumnStretch(0, 0) self.gbl.setColumnStretch(2, 4) self.gbl.setColumnStretch(4, 5) # Plot self.wplot2d = EMPlot2DWidget() self.gbl.addWidget(self.wplot2d, 0, 2, 3, 1) self.wplot2d.set_mouse_emit(True) # 3-D View self.wview3d = EMScene3D() self.gbl.addWidget(self.wview3d, 0, 4, 3, 1) # Left pane for GMM folder and parameters self.gbll = QtWidgets.QGridLayout() self.gbl.addLayout(self.gbll, 0, 0, 4, 1) # 4 rows tall, 1 column wide # gmm_XX folder selection self.gblfld = QtWidgets.QGridLayout() self.gbll.addLayout(self.gblfld, 0, 0) self.wlistgmm = QtWidgets.QListWidget() self.wlistgmm.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) self.update_gmms() self.gblfld.addWidget(self.wlistgmm, 0, 0, 1, 2) self.wbutnewgmm = QtWidgets.QPushButton("New GMM") self.gblfld.addWidget(self.wbutnewgmm, 1, 0) self.wbutrefine = QtWidgets.QPushButton("refine_XX") self.gblfld.addWidget(self.wbutrefine, 1, 1) # run selection self.gblrun = QtWidgets.QGridLayout() self.gbll.addLayout(self.gblrun, 1, 0) self.wlistrun = QtWidgets.QListWidget() self.wlistrun.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) # self.update_runs() self.gblrun.addWidget(self.wlistrun, 0, 0, 1, 2) self.wbutrerun = QtWidgets.QPushButton("Rerun") self.gblrun.addWidget(self.wbutrerun, 1, 1) self.wbutnewrun = QtWidgets.QPushButton("New Run") self.gblrun.addWidget(self.wbutnewrun, 1, 0) # The form with details about the selected gmm_XX folder self.gflparm = QtWidgets.QFormLayout() self.gbll.addLayout(self.gflparm, 2, 0) self.wlpath = QtWidgets.QLabel("-") self.wlpath.setToolTip("Path this GMM is based on") self.gflparm.addRow("Path:", self.wlpath) self.wedbox = QtWidgets.QLineEdit("256") self.wedbox.setToolTip("Box size of input particles in pixels") self.gflparm.addRow("Box Size:", self.wedbox) self.wedres = QtWidgets.QLineEdit("25") self.wedres.setToolTip( "Maximum resolution to use for gaussian fitting") self.gflparm.addRow("Target Res:", self.wedres) self.wedsym = QtWidgets.QLineEdit("c1") self.wedsym.setToolTip("Symmetry used during refinement") self.gflparm.addRow("Symmetry:", self.wedsym) self.wedapix = QtWidgets.QLineEdit("1.0") self.wedapix.setToolTip("A/pix of input particles") self.gflparm.addRow("A/pix:", self.wedapix) self.wedmask = QtWidgets.QLineEdit("") self.wedmask.setToolTip("3-D volume mask") self.gflparm.addRow("Mask:", self.wedmask) self.wedngauss = QtWidgets.QLineEdit("64") self.wedngauss.setToolTip("Number of Gaussians") self.gflparm.addRow("N Gauss:", self.wedngauss) self.weddim = QtWidgets.QLineEdit("4") self.weddim.setToolTip( "Number of dimensions in the latent space (middle network layer)") self.gflparm.addRow("Latent Dim:", self.weddim) self.wedtrainiter = QtWidgets.QLineEdit("10") self.wedtrainiter.setToolTip("Training iterations per stage") self.gflparm.addRow("Train iter:", self.wedtrainiter) self.wbutpos = QtWidgets.QPushButton("Position") self.wbutpos.setCheckable(True) self.wbutpos.setChecked(True) self.wbutpos.setToolTip( "Include changes of position in the GMM (motion)") self.gflparm.addRow("Parameters", self.wbutpos) self.wbutamp = QtWidgets.QPushButton("Amplitude") self.wbutamp.setCheckable(True) self.wbutamp.setChecked(False) self.wbutamp.setToolTip( "Include changes of amplitude in the GMM (ligand binding)") self.gflparm.addRow(" ", self.wbutamp) self.wbutsig = QtWidgets.QPushButton("Sigma") self.wbutsig.setCheckable(True) self.wbutsig.setChecked(False) self.wbutsig.setToolTip( "Include changes of Gaussian Width in the GMM (rarely useful)") self.gflparm.addRow(" ", self.wbutsig) self.wlabruntime = QtWidgets.QLabel("-") self.gflparm.addRow("Run:", self.wlabruntime) # Widgets below plot self.gblpltctl = QtWidgets.QGridLayout() self.gbl.addLayout(self.gblpltctl, 3, 2) self.gblpltctl.addWidget(QtWidgets.QLabel("X Col:", self), 0, 0, Qt.AlignRight) self.wsbxcol = QtWidgets.QSpinBox(self) self.wsbxcol.setRange(0, 10) self.gblpltctl.addWidget(self.wsbxcol, 0, 1, Qt.AlignLeft) self.wsbxcol.setValue(0) self.gblpltctl.addWidget(QtWidgets.QLabel("Y Col:", self), 1, 0, Qt.AlignRight) self.wsbycol = QtWidgets.QSpinBox(self) self.wsbycol.setRange(0, 10) self.gblpltctl.addWidget(self.wsbycol, 1, 1, Qt.AlignLeft) self.wsbycol.setValue(1) self.wbutdrgrp = QtWidgets.QButtonGroup() self.wbutdrmid = QtWidgets.QPushButton("Net Mid") self.wbutdrmid.setCheckable(True) self.wbutdrmid.setChecked(True) self.gblpltctl.addWidget(self.wbutdrmid, 0, 2) self.wbutdrgrp.addButton(self.wbutdrmid, 0) self.wbutdrpca = QtWidgets.QPushButton("PCA") self.wbutdrpca.setCheckable(True) self.gblpltctl.addWidget(self.wbutdrpca, 0, 3) self.wbutdrgrp.addButton(self.wbutdrpca, 1) self.wbutdrpca = QtWidgets.QPushButton("ICA") self.wbutdrpca.setCheckable(True) self.gblpltctl.addWidget(self.wbutdrpca, 0, 4) self.wbutdrgrp.addButton(self.wbutdrpca, 2) self.gblpltctl.addWidget(QtWidgets.QLabel("New Dim:", self), 1, 3, Qt.AlignRight) self.wsbnewdim = QtWidgets.QSpinBox(self) self.wsbnewdim.setRange(2, 10) self.gblpltctl.addWidget(self.wsbnewdim, 1, 4, Qt.AlignLeft) self.wcbpntpln = QtWidgets.QComboBox() self.wcbpntpln.addItem("Plane") self.wcbpntpln.addItem("Point") self.wcbpntpln.addItem("Region") self.gblpltctl.addWidget(self.wcbpntpln, 1, 2) # Widgets below 3D self.gbl3dctl = QtWidgets.QGridLayout() self.gbl.addLayout(self.gbl3dctl, 3, 4) #self.wbutmap=QtWidgets.QPushButton("Map") #self.wbutmap.setCheckable(True) #self.wbutmap.setChecked(True) #self.gbl3dctl.addWidget(self.wbutmap,0,0) #self.wbutspheres=QtWidgets.QPushButton("Sphere Mdl") #self.wbutspheres.setCheckable(True) #self.wbutspheres.setChecked(True) #self.gbl3dctl.addWidget(self.wbutspheres,0,1) self.wvssphsz = ValSlider(self, (1, 50), "Size:", 3.0, 90) self.gbl3dctl.addWidget(self.wvssphsz, 0, 2) # Connections self.wlistgmm.currentRowChanged[int].connect(self.sel_gmm) #self.wbutspheres.clicked[bool].connect(self.new_3d_opt) #self.wbutmap.clicked[bool].connect(self.new_3d_opt) self.wvssphsz.valueChanged.connect(self.new_sph_size) self.wbutnewgmm.clicked[bool].connect(self.add_gmm) self.wbutrefine.clicked[bool].connect(self.setgmm_refine) self.wlistrun.currentRowChanged[int].connect(self.sel_run) self.wbutnewrun.clicked[bool].connect(self.new_run) self.wbutrerun.clicked[bool].connect(self.do_run) self.wbutdrgrp.buttonClicked[QtWidgets.QAbstractButton].connect( self.plot_mode_sel) self.wsbxcol.valueChanged[int].connect(self.wplot2d.setXAxisAll) self.wsbycol.valueChanged[int].connect(self.wplot2d.setYAxisAll) self.wplot2d.mousedown[QtGui.QMouseEvent, tuple].connect(self.plot_mouse) self.wplot2d.mouseup[QtGui.QMouseEvent, tuple].connect(self.plot_mouse) self.wplot2d.mousedrag[QtGui.QMouseEvent, tuple].connect(self.plot_mouse) E2loadappwin("e2gmm", "main", self) self.gaussplot = EMScatterPlot3D() self.mapdataitem = EMDataItem3D(None) self.mapiso = EMIsosurface(self.mapdataitem) self.wview3d.insertNewNode("Neutral Map", self.mapdataitem) self.wview3d.insertNewNode("Isosurface", self.mapiso, parentnode=self.mapdataitem) self.wview3d.insertNewNode("Gauss Model", self.gaussplot)
def __init__(self, options): self.path = "tomograms/" QtWidgets.QWidget.__init__(self, None) self.win_size = [1000, 680] self.setMinimumSize(self.win_size[0], self.win_size[1]) # This object is itself a widget we need to set up self.gbl = QtWidgets.QGridLayout(self) self.gbl.setContentsMargins(8, 8, 8, 8) self.gbl.setSpacing(6) self.gbl.setColumnStretch(0, 4) self.gbl.setColumnStretch(1, 1) self.gbl.setColumnStretch(2, 1) self.gbl.setRowStretch(0, 1) # Micrograph list self.imglst = QtWidgets.QTableWidget(1, 3, self) self.imglst.verticalHeader().hide() self.gbl.addWidget(self.imglst, 0, 0, 11, 1) self.imglst.setColumnWidth(0, 50) self.imglst.setColumnWidth(1, 200) self.imglst_srtby = 0 hdr = self.imglst.horizontalHeader() self.imglst.cellClicked[int, int].connect(self.selimg) hdr.sectionPressed[int].connect(self.sortlst) self.wg_thumbnail = EMImage2DWidget(parent=self) self.wg_thumbnail.set_scale(1) self.wg_thumbnail_width = old_div(self.size().width(), 3) * .9 self.wg_thumbnail.resize(self.wg_thumbnail_width, self.wg_thumbnail_width) #print self.wg_thumbnail_width self.wg_thumbnail.setMinimumHeight(330) self.gbl.addWidget(self.wg_thumbnail, 0, 1, 3, 2) self.bt_show2d = QtWidgets.QPushButton("Show2D") self.bt_show2d.setToolTip("Show 2D images") self.gbl.addWidget(self.bt_show2d, 4, 1, 1, 2) self.bt_runboxer = QtWidgets.QPushButton("Boxer") self.bt_runboxer.setToolTip("Run spt_boxer") self.gbl.addWidget(self.bt_runboxer, 5, 1) self.bt_refresh = QtWidgets.QPushButton("Refresh") self.bt_refresh.setToolTip("Refresh") self.gbl.addWidget(self.bt_refresh, 5, 2) self.bt_showtlts = QtWidgets.QPushButton("ShowTilts") self.bt_showtlts.setToolTip("Show raw tilt series") self.gbl.addWidget(self.bt_showtlts, 6, 1) self.bt_plottpm = QtWidgets.QPushButton("TiltParams") self.bt_plottpm.setToolTip("Plot tilt parameters") self.gbl.addWidget(self.bt_plottpm, 6, 2) self.bt_plotloss = QtWidgets.QPushButton("PlotLoss") self.bt_plotloss.setToolTip("Plot alignment loss") self.gbl.addWidget(self.bt_plotloss, 7, 1) self.bt_plotctf = QtWidgets.QPushButton("PlotCtf") self.bt_plotctf.setToolTip("Plot CTF estimation") self.gbl.addWidget(self.bt_plotctf, 7, 2) self.bt_show2d.clicked[bool].connect(self.show2d) self.bt_runboxer.clicked[bool].connect(self.runboxer) self.bt_plotloss.clicked[bool].connect(self.plot_loss) self.bt_plottpm.clicked[bool].connect(self.plot_tltparams) self.bt_showtlts.clicked[bool].connect(self.show_tlts) self.bt_refresh.clicked[bool].connect(self.update_files) self.bt_plotctf.clicked[bool].connect(self.plot_ctf) self.wg_2dimage = EMImage2DWidget() self.wg_2dimage.setWindowTitle("Tomo2D") self.cur_data = None self.wg_tltimage = EMImage2DWidget() self.wg_tltimage.setWindowTitle("Tiltseries") self.wg_tltimage.set_scale(.2) self.cur_tlt = None self.setspanel = TomoListWidget(self) self.gbl.addWidget(self.setspanel, 8, 1, 2, 2) self.wg_notes = QtWidgets.QLineEdit(self) self.wg_notes.setText("Comments:") #self.wg_notes.setStyleSheet("color: rgb(150, 150, 150);") self.gbl.addWidget(self.wg_notes, 10, 1, 1, 2) #self.setspanel.itemClicked[QtWidgets.QListWidgetItem].connect(self.clickset) self.wg_notes.textChanged.connect(self.noteupdate) self.wg_plot2d = EMPlot2DWidget() self.update_files()
def menu_add_plotwin(self): if self.viewer == None: return self.viewer.append(EMPlot2DWidget()) self.viewer[-1].show() self.needupdate = 1
def __init__(self,app): self.app=app QtWidgets.QWidget.__init__(self,None) self.synthplot=EMPlot2DWidget(self.app) self.synthplot.show() self.fftplot=EMPlot2DWidget(self.app) # not shown initially self.fftplot.show() # self.bispecimg=EMImage2DWidget(self.app) # not shown initially # overall layout self.vbl1=QtWidgets.QVBoxLayout() self.setLayout(self.vbl1) # First row contains general purpose controls self.hbl1=QtWidgets.QHBoxLayout() self.vbl1.addLayout(self.hbl1) self.vcell=ValBox(self,(0,128.0),"Cell:",64) self.hbl1.addWidget(self.vcell) self.vncells=ValBox(self,(0,128.0),"n Cells:",1) self.hbl1.addWidget(self.vncells) self.voversamp=ValBox(self,(0,128.0),"Oversample:",1) self.hbl1.addWidget(self.voversamp) self.targfn=None self.vnsin=ValBox(self,(1,64),"# Sin:",32) self.vnsin.intonly=1 self.hbl1.addWidget(self.vnsin) self.cbshowall=QtWidgets.QCheckBox("Show All") self.hbl1.addWidget(self.cbshowall) self.cbshifted=QtWidgets.QCheckBox("Shifted") self.hbl1.addWidget(self.cbshifted) self.vshftstep=ValBox(self,(1,64),"Shft:",1) self.hbl1.addWidget(self.vshftstep) self.bphaseleft=QtWidgets.QPushButton("\u2190") # phase left self.hbl1.addWidget(self.bphaseleft) self.bphasecen=QtWidgets.QPushButton("O") self.hbl1.addWidget(self.bphasecen) self.bphaseright=QtWidgets.QPushButton("\u2192") # phase right self.hbl1.addWidget(self.bphaseright) self.cbtargfn=QtWidgets.QComboBox(self) self.cbtargfn.addItem("None") # 0 self.cbtargfn.addItem("triangle") # 1 self.cbtargfn.addItem("square") # 2 self.cbtargfn.addItem("square imp") # 3 self.cbtargfn.addItem("delta") # 4 self.cbtargfn.addItem("noise") self.cbtargfn.addItem("saw") self.cbtargfn.addItem("sin") self.cbtargfn.addItem("modsin") self.cbtargfn.addItem("modsin2") self.cbtargfn.addItem("modsin3") #10 self.cbtargfn.addItem("sin low") self.cbtargfn.addItem("doubledelta") self.cbtargfn.addItem("sin bad f") self.cbtargfn.addItem("sin bad f2") self.cbtargfn.addItem("0 phase") #15 self.cbtargfn.addItem("rand phase") self.hbl1.addWidget(self.cbtargfn) self.bsound=QtWidgets.QPushButton("Play") self.hbl1.addWidget(self.bsound) self.bsoundr=QtWidgets.QPushButton("Rec") self.hbl1.addWidget(self.bsoundr) self.vrootf=ValBox(self,(1,64),"Root F:",264) # 264 is middle C #self.vrootf.intonly=1 self.hbl1.addWidget(self.vrootf) # Widget containing valsliders self.wapsliders=QtWidgets.QWidget(self) # self.wapsliders.setMinimumSize(800,640) self.gblap=QtWidgets.QGridLayout() self.gblap.setSizeConstraint(QtWidgets.QLayout.SetMinAndMaxSize) self.gblap.setColumnMinimumWidth(0,250) self.gblap.setColumnMinimumWidth(1,250) self.wapsliders.setLayout(self.gblap) # ScrollArea providing view on slider container widget self.wapsarea=QtWidgets.QScrollArea(self) self.wapsarea.setWidgetResizable(True) self.wapsarea.setWidget(self.wapsliders) self.vbl1.addWidget(self.wapsarea) self.vcell.valueChanged.connect(self.recompute) self.vncells.valueChanged.connect(self.recompute) self.voversamp.valueChanged.connect(self.recompute) self.vnsin.valueChanged.connect(self.nsinchange) self.cbshowall.stateChanged[int].connect(self.recompute) self.cbshifted.stateChanged[int].connect(self.recompute) self.cbtargfn.activated[int].connect(self.newtargfn) self.bphaseleft.clicked.connect(self.phaseleft) self.bphasecen.clicked.connect(self.phasecen) self.bphaseright.clicked.connect(self.phaseright) self.bsound.clicked.connect(self.playsound) self.bsoundr.clicked.connect(self.recsound) self.wamp=[] self.wpha=[] self.curves=[] self.xvals=[] for i in range(65): self.wamp.append(ValSlider(self,(0.0,1.0),"%2d:"%i,0.0)) self.gblap.addWidget(self.wamp[-1],i,0) self.wamp[-1].valueChanged.connect(self.recompute) self.wpha.append(ValSlider(self,(-180.0,180.0),"%2d:"%i,0.0)) self.gblap.addWidget(self.wpha[-1],i,1) self.wpha[-1].valueChanged.connect(self.recompute) self.curves.append(EMData(64,1)) # if self.cbshowall.isChecked() : # self.synthplot self.total=EMData(64,1) self.nsinchange() E2loadappwin("e2fftsynth","main",self) E2loadappwin("e2fftsynth","synth",self.synthplot.qt_parent) E2loadappwin("e2fftsynth","fft",self.fftplot.qt_parent)