Ejemplo n.º 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 = 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()
Ejemplo n.º 2
0
 def closeEvent(self, event):
     if self.inspector != None: self.inspector.close()
     if self.proj_class_viewer != None: self.proj_class_viewer.close()
     if self.proj_class_single != None: self.proj_class_single.close()
     if self.particle_viewer != None: self.particle_viewer.close()
     get_application().close_specific(self)
     self.module_closed.emit()  # this signal is
Ejemplo n.º 3
0
    def run_form(self):
        from eman2_gui.emform import EMTableFormWidget
        self.form = EMTableFormWidget(self.get_params())
        self.form.resize(*self.preferred_size)
        self.form.setWindowTitle(self.window_title)
        get_application().show_specific(self.form)

        self.form.emform_ok.connect(self.on_form_ok)
        self.form.emform_cancel.connect(self.on_form_cancel)
        self.form.emform_close.connect(self.on_form_close)
Ejemplo n.º 4
0
	def run_form(self):
		from eman2_gui.emform import EMTableFormWidget
		self.form = EMTableFormWidget(self.get_params())
		self.form.resize(*self.preferred_size)
		self.form.setWindowTitle(self.window_title)
		get_application().show_specific(self.form)
		
		from PyQt4 import QtCore
		QtCore.QObject.connect(self.form,QtCore.SIGNAL("emform_ok"),self.on_form_ok)
		QtCore.QObject.connect(self.form,QtCore.SIGNAL("emform_cancel"),self.on_form_cancel)
		QtCore.QObject.connect(self.form,QtCore.SIGNAL("emform_close"),self.on_form_close)
Ejemplo n.º 5
0
    def on_em_validate_requested(
        self, mrc_file, pdb_file, trans, iso_thresh
    ):  #if signal given to validate, creates emplot3d and displays graph

        vals = {}
        rotList = []
        data = []
        initPoint = []

        try:  #block user from view transforms from files that don't exist
            f = open(pdb_file)
            f.close()
        except IOError:
            print(
                "Sorry, this pdb is only in temporary memory. Please write the transform to the hard drive to validate."
            )
            return

        print(" ")
        print(" ")
        print(
            "This process can take a few minutes depending on the number of transformations requested"
        )

        vals, rotList, b, data, initPoint = self.fh_stat.gen_data(
            mrc_file, pdb_file, trans, iso_thresh)

        if self.plot3d: get_application().close_specific(self.plot3d)
        self.plot3d = None

        if self.plot3d == None:  #creates the emplot3d module after the data has been generated by fh_stat
            self.__init_plot3d()

        print("Note: The original probe is displayed by a cube")
        print(" ")

        get_application().show()
        self.plot3d.plot_model.set_Vals(vals)
        self.plot3d.plot_model.set_Rotations(rotList)
        self.plot3d.plot_model.set_Probe(b)
        self.plot3d.plot_model.set_data(data, "Results for Fit Validation")
        self.plot3d.plot_model.set_data(
            initPoint, "Original Probe",
            shape="Cube")  #note: original probe is displayed with a cube

        self.plot2d(vals["score_1"], vals["score_2"], vals["score_3"], rotList)
Ejemplo n.º 6
0
	def on_view_transform_requested(self, new_pdb_file):
		if self.em_val == None:
			self.__init_em_val()
			get_application().show()
		self.em_val.set_pdb_file(str(new_pdb_file))
		os.remove(str(new_pdb_file))
Ejemplo n.º 7
0
	def start(self): #program starts here, inits the empdbvaltool module
		if self.em_val == None:
			self.__init_em_val()
		
		get_application().show()
Ejemplo n.º 8
0
    def on_mx_image_selected(self, event, lc):
        #		self.arc_anim_points = None
        get_application().setOverrideCursor(Qt.BusyCursor)
        if lc != None: self.sel = lc[0]

        if self.average != None:
            included = []
            if self.average.has_attr("class_ptcl_idxs"):
                included = self.average["class_ptcl_idxs"]
            excluded = []
            if self.average.has_attr("exc_class_ptcl_idxs"):
                excluded = self.average["exc_class_ptcl_idxs"]

            all = included + excluded
            #all.sort()

            bdata = []
            data = []
            idx_included = []
            running_idx = 0
            from eman2_gui.emimagemx import ApplyAttribute
            for val in included:
                bdata.append(
                    [self.particle_file, val, [ApplyAttribute("Img #", val)]])
                idx_included.append(running_idx)
                running_idx += 1

            idx_excluded = []
            for val in excluded:
                bdata.append(
                    [self.particle_file, val, [ApplyAttribute("Img #", val)]])
                idx_excluded.append(running_idx)
                running_idx += 1

            data = EMLightWeightParticleCache(bdata)

            first = False
            if self.particle_viewer == None:
                first = True
                self.particle_viewer = EMImageMXWidget(
                    data=None, application=get_application())
                self.particle_viewer.set_mouse_mode("App")
                self.particle_viewer.module_closed.connect(
                    self.on_particle_mx_view_closed)
                self.particle_viewer.mx_image_selected.connect(
                    self.particle_selected)
                get_application().show_specific(self.particle_viewer)

            self.check_images_in_memory()

            if self.sel == 0 or self.alignment_file == None:
                self.particle_viewer.set_data(data)
            else:

                for i, [name, idx, f] in enumerate(bdata):
                    index = -1
                    if self.classes.get_xsize() == 1:
                        index = 0  # just assume it's the first one - this is potentially fatal assumption, but in obscure situations only
                    else:
                        for j in range(self.classes.get_xsize()):
                            if int(self.classes.get(j, idx)) == self.class_idx:
                                index = j
                                break
                    if index == -1:
                        print("couldn't find")
                        get_application().setOverrideCursor(Qt.ArrowCursor)
                        return

                    x = self.dx.get(index, idx)
                    y = self.dy.get(index, idx)
                    a = self.da.get(index, idx)
                    m = self.dflip.get(index, idx)

                    t = Transform({"type": "2d", "alpha": a, "mirror": int(m)})
                    t.set_trans(x, y)
                    from eman2_gui.emimagemx import ApplyTransform
                    f.append(ApplyTransform(t))
                    #data[i].transform(t)
                self.particle_viewer.set_data(data)

            if first:
                self.particle_viewer.updateGL()
                self.particle_viewer.optimally_resize()

            self.particle_viewer.clear_sets(False)
            self.particle_viewer.enable_set("Excluded", idx_excluded, True,
                                            False)
            self.particle_viewer.enable_set("Included", idx_included, False,
                                            False)
            self.particle_viewer.updateGL()

            get_application().setOverrideCursor(Qt.ArrowCursor)

            self.updateGL()
Ejemplo n.º 9
0
    def au_point_selected(self, i, event=None):
        if self.readfrom:
            return
        if i == None:
            if event != None and event.modifiers() & Qt.ShiftModifier:
                if self.special_euler != None:
                    self.special_euler = None
                    if not self.init_lock: self.regen_dl()
            return


#		self.arc_anim_points = None
        self.projection = None
        if self.euler_data:
            #			db = db_open_dict(self.average_file)
            #			a = db.get(i)
            #			print a["nx"]
            #			print self.average_file,i
            #			self.average = EMData(self.average_file,i)
            #			self.average["nx"]
            self.average = self.euler_data[i]  #
            self.projection = EMData(
                self.projection_file,
                self.average.get_attr("projection_image_idx"))
            self.average.process_inplace("normalize.toimage",
                                         {"to": self.projection})
            try:
                self.class_idx = self.average.get_attr("projection_image_idx")
                print("%d (%d)" % (self.class_idx, self.average["ptcl_repr"]))
            except:
                self.class_idx = -1
        else:
            return

        #if self.projection  == None and self.average == None: return
        first = False
        if self.proj_class_viewer == None:
            first = True
            self.proj_class_viewer = EMImageMXWidget(
                data=None, application=get_application())
            #			self.proj_class_viewer = EMImage2DWidget(image=None,application=get_application())
            self.proj_class_viewer.module_closed.connect(
                self.on_mx_view_closed)
            #			self.proj_class_viewer.set_mouse_mode("App" )
            self.proj_class_viewer.mx_image_selected.connect(
                self.on_mx_image_selected)
            get_application().show_specific(self.proj_class_viewer)

            self.proj_class_single = EMImage2DWidget(
                image=None, application=get_application())
            self.proj_class_single.module_closed.connect(
                self.on_mx_view_closed)
            #			QtCore.QObject.connect(self.proj_class_single,QtCore.SIGNAL("mx_image_selected"), self.mx_image_selected)
            get_application().show_specific(self.proj_class_single)

        disp = []
        if self.projection != None: disp.append(self.projection)
        if self.average != None and self.projection != None:
            # ok, this really should be put into its own processor
            #dataf = self.projection.do_fft()
            #apix=self.projection["apix_x"]
            #curve = dataf.calc_radial_dist(dataf["ny"], 0, 0.5,True)
            #curve=[i/(dataf["nx"]*dataf["ny"])**2 for i in curve]
            #xcurve=[i/(apix*2.0*dataf["ny"]) for i in range(len(curve))]
            #xyd=XYData()
            #xyd.set_xy_list(xcurve,curve)
            #filt=self.average.process("filter.setstrucfac",{"apix":apix,"strucfac":xyd})
            #filt.process_inplace("normalize.toimage",{"to":self.average})
            self.projection["apix_x"] = self.average["apix_x"]
            self.projection["apix_y"] = self.average["apix_y"]
            self.projection["apix_z"] = self.average["apix_z"]
            filt = self.projection.process("threshold.notzero")
            filt.mult(self.average)
            filt.process_inplace("filter.matchto", {"to": self.projection})

            disp.append(filt)

        if self.average != None:
            disp.append(self.average)

        self.proj_class_viewer.set_data(disp)
        self.proj_class_single.set_data(disp)

        self.proj_class_viewer.updateGL()
        self.proj_class_single.updateGL()
        if self.particle_viewer != None:
            self.on_mx_image_selected(None, None)
        if first: self.proj_class_viewer.optimally_resize()

        if i != self.special_euler:
            self.special_euler = i
            self.force_update = True

        if not self.init_lock: self.updateGL()
Ejemplo n.º 10
0
    def on_au_selected(self, refine_dir, cls):
        refine_dir = str(refine_dir)
        cls = str(cls)
        self.refine_dir = refine_dir
        get_application().setOverrideCursor(Qt.BusyCursor)
        data = []
        for d in self.au_data[refine_dir]:
            if d[0] == cls:
                data = d
                break

        if len(data) == 0:
            error("error, no data for %s %s, returning" % (refine_dir, cls))
            #			print "error, no data for",au,cls,"returning"
            self.events_handlers["inspect"].reset()
            get_application().setOverrideCursor(Qt.ArrowCursor)
            return

        if not self.readfrom:
            try:
                self.particle_file = js_open_dict(
                    refine_dir + "/0_refine_parms.json")["input"]
            except:
                error("No data in " + refine_dir)
                self.events_handlers["inspect"].reset()
                get_application().setOverrideCursor(Qt.ArrowCursor)
                return

        self.average_file = cls
        self.projection_file = data[4]
        self.alignment_file = data[2]
        self.clsdb = data[1]

        self.dx = None
        self.dy = None
        self.da = None
        self.dflip = None
        self.classes = None

        eulers = get_eulers_from(self.average_file)
        #s = Symmetries.get("d7")
        #eulers = s.gen_orientations("rand",{"n":EMUtil.get_image_count(self.average_file)})

        self.specify_eulers(eulers)
        #from eman2_gui.emimagemx import EMDataListCache
        #a = EMData.read_images(self.average_file)
        #a = [test_image() for i in range(EMUtil.get_image_count(self.average_file))]
        #print len(a),len(eulers)
        #b = [a[i].set_attr("xform.projection",eulers[i]) for i in range(len(eulers))]
        #b = [a[i].set_attr("ptcl_repr",1) for i in range(len(eulers))]

        self.set_emdata_list_as_data(
            EMLightWeightParticleCache.from_file(self.average_file),
            "ptcl_repr")
        #self.set_emdata_list_as_data(EMDataListCache(self.average_file),"ptcl_repr")
        #		self.set_emdata_list_as_data(a,"ptcl_repr")
        self.force_update = True
        self.au_point_selected(self.class_idx, None)
        # if we have the same number of Eulers we can update everything
        #		if self.previous_len == len(eulers) : self.events_handlers["inspect"].repeat_event()
        #		else:self.events_handlers["inspect"].reset()
        self.previous_len = len(eulers)
        if not self.init_lock: self.updateGL()
        get_application().setOverrideCursor(Qt.ArrowCursor)