Exemple #1
0
	def __init__(self):
		QtGui.QWidget.__init__(self)
		self.widget = EMScene3D()

		self.cube1 = EMCube(50.0)
		self.widget.insertNewNode("Cube1", self.cube1)    # Something to Render something..... an EMItem3D

		self.cube2 = EMCube(50.0)
		self.widget.insertNewNode("Cube2", self.cube2)
		
		self.sphere = EMSphere(50.0)
		self.widget.insertNewNode("Sphere", self.sphere)
		
		self.cylinder = EMCylinder(50, 300)
		self.widget.insertNewNode("Cylinder", self.cylinder)
		
		self.cone = EMCone(50, 300)
		self.widget.insertNewNode("Cone", self.cone)
		
		self.line = EMLine(10,10,10,200,200,200, 16)
		self.widget.insertNewNode("Line", self.line)
		
		self.text1 = EM3DText('3D text', 75)
		self.widget.insertNewNode("Text1", self.text1)
		
		
		#Show inspector
		#self.widget.showInspector()
		
		# QT stuff to display the widget
		vbox = QtGui.QVBoxLayout()
		vbox.addWidget(self.widget)
		self.setLayout(vbox)
		self.setGeometry(300, 300, 600, 600)
		self.setWindowTitle('BCM EM Viewer')
Exemple #2
0
def load_pdb(files, app):
    from empdbitem3D import EMPDBItem3D, EMBallStickModel
    scene = EMScene3D()
    title = []
    for f in files:
        pdb_model = EMPDBItem3D(f)
        scene.insertNewNode(f.split("/")[-1], pdb_model)
        modeltype = EMBallStickModel(f)
        scene.insertNewNode(modeltype.representation,
                            modeltype,
                            parentnode=pdb_model)
        scene.addChild(EMPDBItem3D(f))
        title.append(pdb_model.getName())
    scene.setWindowTitle(" ".join(title))
    scene.show()
    return scene
Exemple #3
0
def main():

    progname = os.path.basename(sys.argv[0])
    usage = """e2pdbviewer.py <project directory>
	
	A wrapper program to view a .pdb file on your computer. This is simply an PDB
	specific interface to the more general EMScene3D viewer.
	"""
    parser = EMArgumentParser(usage=usage, version=EMANVERSION)
    parser.add_argument("--pdbfiles",
                        type=str,
                        help="Specify one or mode pdb files you \
		wish to view",
                        nargs='*',
                        required=False,
                        default=None)
    parser.add_argument("--ppid",
                        type=int,
                        help="Set the PID of the parent \
		process, used for cross platform PPID",
                        default=-1)
    parser.add_argument("--verbose", "-v", dest="verbose", action="store", \
     metavar="n", type=int, default=0, help="verbose level [0-9], higner \
		number means higher level of verboseness"                                              )
    (options, args) = parser.parse_args()

    logid = E2init(sys.argv, options.ppid)

    app = EMApp()
    viewer = EMScene3D()

    if options.pdbfiles:
        models = [
            EMStructureItem3D(pdb_file=pdbf) for pdbf in options.pdbfiles
        ]
        viewer.addChildren(models)

    viewer.show()
    app.execute()

    E2end(logid)
Exemple #4
0
    def setData(self, data):
        if data == None:
            self.data = None
            return

        elif isinstance(data, str):
            self.datafile = data
            self.nimg = EMUtil.get_image_count(data)

            self.origdata = EMData(data, 0)

            if self.origdata["nz"] == 1:
                if self.nimg > 20:
                    self.origdata = EMData.read_images(
                        data, range(0, self.nimg, self.nimg / 20)
                    )  # read regularly separated images from the file totalling ~20
                elif self.nimg > 1:
                    self.origdata = EMData.read_images(data, range(self.nimg))
                else:
                    self.origdata = [self.origdata]
            else:
                self.origdata = [self.origdata]

        else:
            self.datafile = None
            if isinstance(data, EMData): self.origdata = [data]
            else: self.origdata = data

        self.nx = self.origdata[0]["nx"]
        self.ny = self.origdata[0]["ny"]
        self.nz = self.origdata[0]["nz"]
        if self.apix <= 0.0: self.apix = self.origdata[0]["apix_x"]
        EMProcessorWidget.parmdefault["apix"] = (0, (0.2, 10.0), self.apix,
                                                 None)

        origfft = self.origdata[0].do_fft()
        self.pspecorig = origfft.calc_radial_dist(self.ny / 2, 0.0, 1.0, 1)
        ds = 1.0 / (self.apix * self.ny)
        self.pspecs = [ds * i for i in range(len(self.pspecorig))]

        if self.viewer != None:
            for v in self.viewer:
                v.close()

        if self.nz == 1 or self.force2d:
            if len(self.origdata) > 1:
                self.viewer = [EMImageMXWidget()]
                self.mfile_save_stack.setEnabled(True)
                self.mfile_save_map.setEnabled(False)
            else:
                self.viewer = [EMImage2DWidget()]
                self.mfile_save_stack.setEnabled(False)
                self.mfile_save_map.setEnabled(True)
        else:
            self.mfile_save_stack.setEnabled(False)
            self.mfile_save_map.setEnabled(True)
            self.viewer = [EMScene3D()]
            self.sgdata = EMDataItem3D(test_image_3d(3), transform=Transform())
            self.viewer[0].insertNewNode('Data',
                                         self.sgdata,
                                         parentnode=self.viewer[0])
            isosurface = EMIsosurface(self.sgdata, transform=Transform())
            self.viewer[0].insertNewNode("Iso",
                                         isosurface,
                                         parentnode=self.sgdata)
            volslice = EMSliceItem3D(self.sgdata, transform=Transform())
            self.viewer[0].insertNewNode("Slice",
                                         volslice,
                                         parentnode=self.sgdata)

        E2loadappwin("e2filtertool", "image", self.viewer[0].qt_parent)

        self.procChange(-1)
Exemple #5
0
    def __new__(cls,
                data=None,
                old=None,
                app=None,
                force_2d=False,
                force_plot=False,
                filename="",
                replace=True):
        """This will create a new EMImage* object depending on the type of 'data'. If
		old= is provided, and of the appropriate type, it will be used rather than creating
		a new instance.
		"""

        if isinstance(data, EMData) and data.get_size() == 0:
            raise RuntimeError(
                "Can not display an EMData object that has no pixels")

        from EMAN2 import remove_directories_from_name
        if force_plot and force_2d:
            # ok this sucks but it suffices for the time being
            print(
                "Error, the force_plot and force_2d options are mutually exclusive"
            )
            return None

        if force_plot or (isinstance(data, EMData) and data.get_zsize() == 1
                          and data.get_ysize() == 1):
            from emplot2d import EMPlot2DWidget
            if old:
                if isinstance(old, EMPlot2DWidget):
                    old.set_data(data, remove_directories_from_name(filename),
                                 replace)
                    return old
            widget = EMPlot2DWidget(application=app)
            widget.set_data(data, remove_directories_from_name(filename),
                            replace)
            return widget
        elif force_2d or (isinstance(data, EMData) and data.get_zsize() == 1):
            from emimage2d import EMImage2DWidget
            if old:
                if isinstance(old, EMImage2DWidget):
                    old.set_data(data, filename)
                    return old
            widget = EMImage2DWidget(application=app)
            widget.set_data(data, filename)
            return widget
        elif isinstance(data, EMData):
            if isinstance(old, EMScene3D): widget = old
            else: widget = EMScene3D()
            data = EMDataItem3D(data, transform=Transform())
            #data.setSelectedItem(True)
            isosurface = EMIsosurface(data, transform=Transform())
            widget.insertNewNode(os.path.basename(filename),
                                 data,
                                 parentnode=widget)
            widget.insertNewNode("Iso", isosurface, parentnode=data)
            return widget

        elif isinstance(data, list) and isinstance(data[0], EMData):
            from emimagemx import EMImageMXWidget
            if old:
                if isinstance(old, EMImageMXWidget):
                    old.set_data(data, filename)
                    return old
            widget = EMImageMXWidget(application=app)
            widget.set_data(data, filename)
            return widget
        elif isinstance(data, list):
            from emplot3d import EMPlot3DWidgetNew
            if (isinstance(data[0], list)
                    or isinstance(data[0], tuple)) and len(data) > 2:
                if old:
                    if isinstance(old, EMPlot3DWidgetNew):
                        old.set_data(data,
                                     remove_directories_from_name(filename),
                                     replace)
                        return old

                widget = EMPlot3DWidgetNew()
                widget.set_data(data, remove_directories_from_name(filename),
                                replace)
                return widget
            else:
                from emplot2d import EMPlot2DWidget
                if old:
                    if isinstance(old, EMPlot2DWidget):
                        old.set_data(data,
                                     remove_directories_from_name(filename),
                                     replace)
                        return old
                widget = EMPlot2DWidget(application=app)
                widget.set_data(data, remove_directories_from_name(filename),
                                replace)
                return widget
        else:
            raise Exception(
                "data must be a single EMData object or a list of EMData objects"
            )
Exemple #6
0
    def __new__(cls,
                filename,
                application,
                force_plot=False,
                force_2d=False,
                old=None):

        file_type = Util.get_filename_ext(filename)
        em_file_type = EMUtil.get_image_ext_type(file_type)
        if not file_exists(filename): return None

        if force_plot and force_2d:
            # ok this sucks but it suffices for the time being
            print(
                "Error, the force_plot and force_2d options are mutually exclusive"
            )
            return None

        if force_plot:
            from emplot2d import EMPlot2DWidget
            if isinstance(old, EMPlot2DWidget): widget = old
            else: widget = EMPlot2DWidget(application=application)
            widget.set_data_from_file(filename)
            return widget

        if em_file_type != IMAGE_UNKNOWN or filename[:4] == "bdb:":
            n = EMUtil.get_image_count(filename)
            nx, ny, nz = gimme_image_dimensions3D(filename)
            if n > 1 and nz == 1:
                if force_2d:
                    a = EMData()
                    data = a.read_images(filename)
                else:
                    data = None  # This is like a flag - the ImageMXWidget only needs the file name
            elif nz == 1:
                data = [EMData(filename, 0)]
            else:
                data = EMData()
                data.read_image(
                    filename, 0, not force_2d
                )  # This should be 3-D. We read the header-only here
                data = [data]

            if data != None and len(data) == 1: data = data[0]

            if force_2d or isinstance(data, EMData) and data.get_zsize() == 1:
                if isinstance(data, list) or data.get_ysize() != 1:
                    from emimage2d import EMImage2DWidget
                    if isinstance(old, EMImage2DWidget): widget = old
                    else: widget = EMImage2DWidget(application=application)
                else:
                    from emplot2d import EMPlot2DWidget
                    if isinstance(old, EMPlot2DWidget): widget = old
                    else: widget = EMPlot2DWidget(application=application)
                    widget.set_data_from_file(filename)
                    return widget
            elif isinstance(data, EMData):
                if isinstance(old, EMScene3D): widget = old
                else: widget = EMScene3D()
                #				print n,data
                for ii in xrange(n):
                    data = EMData(filename, ii)
                    datai = EMDataItem3D(data, transform=Transform())
                    widget.insertNewNode(os.path.basename(filename),
                                         datai,
                                         parentnode=widget)
                    isosurface = EMIsosurface(datai, transform=Transform())
                    widget.insertNewNode("Iso", isosurface, parentnode=datai)
                return widget

            elif data == None or isinstance(data, list):
                from emimagemx import EMImageMXWidget
                if isinstance(old, EMImageMXWidget): widget = old
                else: widget = EMImageMXWidget(application=application)
                data = filename
            else:
                print(filename)
                raise  # weirdness, this should never happen
            widget.set_data(data, filename)
            return widget
        else:
            from emplot2d import EMPlot2DWidget
            if isinstance(old, EMPlot2DWidget): widget = old
            else: widget = EMPlot2DWidget(application=application)
            widget.set_data_from_file(filename)
            return widget