コード例 #1
0
    def __init__(self, target):
        QtWidgets.QWidget.__init__(self)
        #print "aaaaaaaa"
        self.setWindowTitle("Options")
        self.target = weakref.ref(target)

        self.gbl = QtWidgets.QGridLayout(self)
        #self.gbl.setContentsMargins(2, 2, 2, 2)
        #self.gbl.setSpacing(6)
        self.gbl.setObjectName("gbl")

        self.erasercheckbox = QtWidgets.QCheckBox("Eraser")
        self.gbl.addWidget(self.erasercheckbox, 0, 0)

        self.eraser_radius = ValBox(label="Radius:", value=64)
        self.gbl.addWidget(self.eraser_radius, 0, 1)

        self.tabwidget = QtWidgets.QTabWidget()
        self.gbl.addWidget(self.tabwidget, 1, 0, 1, 2)
コード例 #2
0
ファイル: e2spt_boxer.py プロジェクト: spamrick/eman2
	def __init__(self,application,options,datafile):
		QtWidgets.QWidget.__init__(self)
		self.initialized=False
		self.app=weakref.ref(application)
		self.options=options
		self.apix=options.apix
		self.currentset=0
		self.shrink=1#options.shrink
		self.setWindowTitle("Main Window (e2spt_boxer.py)")
		if options.mode=="3D":
			self.boxshape="circle"
		else:
			self.boxshape="rect"

		self.globalxf=Transform()
		
		# Menu Bar
		self.mfile=self.menuBar().addMenu("File")
		#self.mfile_open=self.mfile.addAction("Open")
		self.mfile_read_boxloc=self.mfile.addAction("Read Box Coord")
		self.mfile_save_boxloc=self.mfile.addAction("Save Box Coord")
		self.mfile_save_boxpdb=self.mfile.addAction("Save Coord as PDB")
		self.mfile_save_boxes_stack=self.mfile.addAction("Save Boxes as Stack")
		#self.mfile_quit=self.mfile.addAction("Quit")


		self.setCentralWidget(QtWidgets.QWidget())
		self.gbl = QtWidgets.QGridLayout(self.centralWidget())

		# relative stretch factors
		self.gbl.setColumnMinimumWidth(0,200)
		self.gbl.setRowMinimumHeight(0,200)
		self.gbl.setColumnStretch(0,0)
		self.gbl.setColumnStretch(1,100)
		self.gbl.setColumnStretch(2,0)
		self.gbl.setRowStretch(1,0)
		self.gbl.setRowStretch(0,100)
		

		# 3 orthogonal restricted projection views
		self.xyview = EMImage2DWidget(sizehint=(1024,1024))
		self.gbl.addWidget(self.xyview,0,1)

		self.xzview = EMImage2DWidget(sizehint=(1024,256))
		self.gbl.addWidget(self.xzview,1,1)

		self.zyview = EMImage2DWidget(sizehint=(256,1024))
		self.gbl.addWidget(self.zyview,0,0)

		# Select Z for xy view
		self.wdepth = QtWidgets.QSlider()
		self.gbl.addWidget(self.wdepth,1,2)

		### Control panel area in upper left corner
		self.gbl2 = QtWidgets.QGridLayout()
		self.gbl.addLayout(self.gbl2,1,0)

		#self.wxpos = QtWidgets.QSlider(Qt.Horizontal)
		#self.gbl2.addWidget(self.wxpos,0,0)
		
		#self.wypos = QtWidgets.QSlider(Qt.Vertical)
		#self.gbl2.addWidget(self.wypos,0,3,6,1)
		
		# box size
		self.wboxsize=ValBox(label="Box Size:",value=0)
		self.gbl2.addWidget(self.wboxsize,2,0)

		# max or mean
		#self.wmaxmean=QtWidgets.QPushButton("MaxProj")
		#self.wmaxmean.setCheckable(True)
		#self.gbl2.addWidget(self.wmaxmean,3,0)

		# number slices
		label0=QtWidgets.QLabel("Thickness")
		self.gbl2.addWidget(label0,3,0)

		self.wnlayers=QtWidgets.QSpinBox()
		self.wnlayers.setMinimum(1)
		self.wnlayers.setMaximum(256)
		self.wnlayers.setValue(1)
		self.gbl2.addWidget(self.wnlayers,3,1)

		# Local boxes in side view
		self.wlocalbox=QtWidgets.QCheckBox("Limit Side Boxes")
		self.gbl2.addWidget(self.wlocalbox,4,0)
		self.wlocalbox.setChecked(True)
		
		self.button_flat = QtWidgets.QPushButton("Flatten")
		self.gbl2.addWidget(self.button_flat,5,0)
		self.button_reset = QtWidgets.QPushButton("Reset")
		self.gbl2.addWidget(self.button_reset,5,1)
		## scale factor
		#self.wscale=ValSlider(rng=(.1,2),label="Sca:",value=1.0)
		#self.gbl2.addWidget(self.wscale,4,0,1,2)

		# 2-D filters
		self.wfilt = ValSlider(rng=(0,150),label="Filt",value=0.0)
		self.gbl2.addWidget(self.wfilt,6,0,1,2)
		
		self.curbox=-1
		
		self.boxes=[]						# array of box info, each is (x,y,z,...)
		self.boxesimgs=[]					# z projection of each box
		self.dragging=-1

		##coordinate display
		self.wcoords=QtWidgets.QLabel("")
		self.gbl2.addWidget(self.wcoords, 1, 0, 1, 2)
		
		self.button_flat.clicked[bool].connect(self.flatten_tomo)
		self.button_reset.clicked[bool].connect(self.reset_flatten_tomo)

		# file menu
		#self.mfile_open.triggered[bool].connect(self.menu_file_open)
		self.mfile_read_boxloc.triggered[bool].connect(self.menu_file_read_boxloc)
		self.mfile_save_boxloc.triggered[bool].connect(self.menu_file_save_boxloc)
		self.mfile_save_boxpdb.triggered[bool].connect(self.menu_file_save_boxpdb)
		
		self.mfile_save_boxes_stack.triggered[bool].connect(self.save_boxes)
		#self.mfile_quit.triggered[bool].connect(self.menu_file_quit)

		# all other widgets
		self.wdepth.valueChanged[int].connect(self.event_depth)
		self.wnlayers.valueChanged[int].connect(self.event_nlayers)
		self.wboxsize.valueChanged.connect(self.event_boxsize)
		#self.wmaxmean.clicked[bool].connect(self.event_projmode)
		#self.wscale.valueChanged.connect(self.event_scale)
		self.wfilt.valueChanged.connect(self.event_filter)
		self.wlocalbox.stateChanged[int].connect(self.event_localbox)

		self.xyview.mousemove.connect(self.xy_move)
		self.xyview.mousedown.connect(self.xy_down)
		self.xyview.mousedrag.connect(self.xy_drag)
		self.xyview.mouseup.connect(self.mouse_up)
		self.xyview.mousewheel.connect(self.xy_wheel)
		self.xyview.signal_set_scale.connect(self.event_scale)
		self.xyview.origin_update.connect(self.xy_origin)

		self.xzview.mousedown.connect(self.xz_down)
		self.xzview.mousedrag.connect(self.xz_drag)
		self.xzview.mouseup.connect(self.mouse_up)
		self.xzview.mousewheel.connect(self.xz_wheel)
		self.xzview.signal_set_scale.connect(self.event_scale)
		self.xzview.origin_update.connect(self.xz_origin)
		self.xzview.mousemove.connect(self.xz_move)

		self.zyview.mousedown.connect(self.zy_down)
		self.zyview.mousedrag.connect(self.zy_drag)
		self.zyview.mouseup.connect(self.mouse_up)
		self.zyview.mousewheel.connect(self.zy_wheel)
		self.zyview.signal_set_scale.connect(self.event_scale)
		self.zyview.origin_update.connect(self.zy_origin)
		self.zyview.mousemove.connect(self.zy_move)
		
		self.xyview.keypress.connect(self.key_press)
		self.datafilename=datafile
		self.basename=base_name(datafile)
		p0=datafile.find('__')
		if p0>0:
			p1=datafile.rfind('.')
			self.filetag=datafile[p0:p1]
			if self.filetag[-1]!='_':
				self.filetag+='_'
		else:
			self.filetag="__"
			
		data=EMData(datafile)
		self.set_data(data)

		# Boxviewer subwidget (details of a single box)
		#self.boxviewer=EMBoxViewer()
		#self.app().attach_child(self.boxviewer)

		# Boxes Viewer (z projections of all boxes)
		self.boxesviewer=EMImageMXWidget()
		
		#self.app().attach_child(self.boxesviewer)
		self.boxesviewer.show()
		self.boxesviewer.set_mouse_mode("App")
		self.boxesviewer.setWindowTitle("Particle List")
		self.boxesviewer.rzonce=True
		
		self.setspanel=EMTomoSetsPanel(self)

		self.optionviewer=EMTomoBoxerOptions(self)
		self.optionviewer.add_panel(self.setspanel,"Sets")
		
		
		self.optionviewer.show()
		
		self.boxesviewer.mx_image_selected.connect(self.img_selected)
		
		##################
		#### deal with metadata in the _info.json file...
		
		self.jsonfile=info_name(datafile)
		info=js_open_dict(self.jsonfile)
		
		#### read particle classes
		self.sets={}
		self.boxsize={}
		if "class_list" in info:
			clslst=info["class_list"]
			for k in sorted(clslst.keys()):
				if type(clslst[k])==dict:
					self.sets[int(k)]=str(clslst[k]["name"])
					self.boxsize[int(k)]=int(clslst[k]["boxsize"])
				else:
					self.sets[int(k)]=str(clslst[k])
					self.boxsize[int(k)]=64
					
		clr=QtGui.QColor
		self.setcolors=[QtGui.QBrush(clr("blue")),QtGui.QBrush(clr("green")),QtGui.QBrush(clr("red")),QtGui.QBrush(clr("cyan")),QtGui.QBrush(clr("purple")),QtGui.QBrush(clr("orange")), QtGui.QBrush(clr("yellow")),QtGui.QBrush(clr("hotpink")),QtGui.QBrush(clr("gold"))]
		self.sets_visible={}
				
		#### read boxes
		if "boxes_3d" in info:
			box=info["boxes_3d"]
			for i,b in enumerate(box):
				#### X-center,Y-center,Z-center,method,[score,[class #]]
				bdf=[0,0,0,"manual",0.0, 0]
				for j,bi in enumerate(b):  bdf[j]=bi
				
				
				if bdf[5] not in list(self.sets.keys()):
					clsi=int(bdf[5])
					self.sets[clsi]="particles_{:02d}".format(clsi)
					self.boxsize[clsi]=64
				
				self.boxes.append(bdf)
		
		###### this is the new (2018-09) metadata standard..
		### now we use coordinates at full size from center of tomogram so it works for different binning and clipping
		### have to make it compatible with older versions though..
		if "apix_unbin" in info:
			self.apix_unbin=info["apix_unbin"]
			self.apix_cur=apix=data["apix_x"]
			for b in self.boxes:
				b[0]=b[0]/apix*self.apix_unbin+data["nx"]//2
				b[1]=b[1]/apix*self.apix_unbin+data["ny"]//2
				b[2]=b[2]/apix*self.apix_unbin+data["nz"]//2
				
			for k in self.boxsize.keys():
				self.boxsize[k]=int(np.round(self.boxsize[k]*self.apix_unbin/apix))
		else:
			self.apix_unbin=-1
			
		info.close()
		
		E2loadappwin("e2sptboxer","main",self)
		E2loadappwin("e2sptboxer","boxes",self.boxesviewer.qt_parent)
		E2loadappwin("e2sptboxer","option",self.optionviewer)
		
		#### particle classes
		if len(self.sets)==0:
			self.new_set("particles_00")
		self.sets_visible[list(self.sets.keys())[0]]=0
		self.currentset=sorted(self.sets.keys())[0]
		self.setspanel.update_sets()
		self.wboxsize.setValue(self.get_boxsize())

		#print(self.sets)
		for i in range(len(self.boxes)):
			self.update_box(i)
		
		self.update_all()
		self.initialized=True
コード例 #3
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()
コード例 #4
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)