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')
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
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)
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)
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" )
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