Exemple #1
0
    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()
Exemple #2
0
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
Exemple #3
0
	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)
Exemple #4
0
	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)
Exemple #5
0
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_()
Exemple #6
0
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_()
Exemple #7
0
    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")
Exemple #8
0
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_()
Exemple #9
0
    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")
Exemple #10
0
	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()
Exemple #11
0
	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)
Exemple #12
0
    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()
Exemple #13
0
	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)
Exemple #14
0
    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)
Exemple #15
0
    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()
Exemple #16
0
 def menu_add_plotwin(self):
     if self.viewer == None: return
     self.viewer.append(EMPlot2DWidget())
     self.viewer[-1].show()
     self.needupdate = 1
Exemple #17
0
	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)