def __init__(self,child,enable_timer=False): """ @param child: the central GL display widget @type child: EMGLWidget @param enable_timer: not used... historical purposes??? """ #TODO: figure out why the enable_timer parameter isn't being used QtGui.QWidget.__init__(self,None) Animator.__init__(self) self.child = weakref.ref(child) # Either EMGLWidget.parent_widget or EMParentWin.child must be a weakref for garbage collection purposes. self.resize(child.width(),child.height()) self.setMaximumSize(8000,8000) self.hbl = QtGui.QVBoxLayout() self.hbl.setSpacing(0) self.hbl.addWidget(self.child(),100) if get_platform() == "Darwin": # because OpenGL widgets in Qt don't leave room in the bottom right hand corner for the resize tool self.status = QtGui.QStatusBar() self.status.setSizeGripEnabled(True) self.hbl.addWidget(self.status,0) self.margin = 0 else: self.margin = 5 self.hbl.setMargin(self.margin) self.setLayout(self.hbl)
def __init__(self, enable_timer=False): """ @param child: the central GL display widget @type child: EMGLWidget @param enable_timer: not used... historical purposes??? """ #TODO: figure out why the enable_timer parameter isn't being used QtGui.QWidget.__init__(self, None) Animator.__init__(self) self.setMaximumSize(8000, 8000) self.hbl = QtGui.QVBoxLayout(self) self.hbl.setSpacing(0) if get_platform( ) == "Darwin": # because OpenGL widgets in Qt don't leave room in the bottom right hand corner for the resize tool self.status = QtGui.QStatusBar() self.status.setSizeGripEnabled(True) self.hbl.addWidget(self.status, 0) self.margin = 0 else: self.margin = 5 self.hbl.setMargin(self.margin)
def __init__(self,enable_timer=False): """ @param child: the central GL display widget @type child: EMGLWidget @param enable_timer: not used... historical purposes??? """ #TODO: figure out why the enable_timer parameter isn't being used QtGui.QWidget.__init__(self,None) Animator.__init__(self) self.setMaximumSize(8000,8000) self.hbl = QtGui.QVBoxLayout(self) self.hbl.setSpacing(0) if get_platform() == "Darwin": # because OpenGL widgets in Qt don't leave room in the bottom right hand corner for the resize tool self.status = QtGui.QStatusBar() self.status.setSizeGripEnabled(True) self.hbl.addWidget(self.status,0) self.margin = 0 else: self.margin = 5 self.hbl.setMargin(self.margin)
def __init__(self, gl_widget=None, auto=True,sparse_mode=False, file_name = ""): self.current_hit = None self.events_mode_list = ["navigate", "inspect"] self.events_mode = self.events_mode_list[1] self.init_lock = True # a lock indicated that we are still in the __init__ function self.au_data = None # This will be a dictionary, keys will be refinement directories, values will be something like available iterations for visual study if auto: # this a flag that tells the eulerxplorer to search for refinement data and automatically add elements to the inspector, if so self.gen_refinement_data() EM3DSymModel.__init__(self, gl_widget, eulerfilename=file_name) Animator.__init__(self) self.height_scale = 8.0 # This is a value used in EM3DSymModel which scales the height of the displayed cylinders - I made it 8 because it seemed fine. The user can change it anyhow self.projection_file = None # This is a string - the name of the projection images file self.average_file = None # This is a string - the name of the class averages file self.proj_class_viewer = None # This will be an EMImageMXWidget that shows the class and/or projection self.particle_viewer = None # This will be an EMImageMXWidget that shows the particles in a class self.clsdb = None # I think this will become redundant - it used to be the old database that stores which particles are in a class, but now that's stored in the header self.particle_file = None # This will be a string - the name of the file that has the particle files in it. This might be made redundant with the new approach self.alignment_file = None # This will be a string - the name of the file containing the alignment parameters - this is essential if you we want to show the aligned particles self.refine_dir = None # This will be a string - the name of the current refinement directory that is being studied self.dx = None # This is an EMData object storing the x shifts of the alignments for all particles. Generated by e2classaverage self.dy = None # This is an EMData object storing the y shifts of the alignments for all particles. Generated by e2classaverage self.da = None# This is an EMData object storing the angle of the alignments for all particles. Generated by e2classaverage self.dflip = None # This is an EMData object storing whether or not tthe alignment involved a flip, for all particles. Generated by e2classaverage self.classes = None # This is an EMData object storing which class(es) a particle belongs to. Generated by e2classaverage self.inclusions = None # This is and EMDAta storing a boolean that indicates the particle was actually included in the final average. Generated by e2classaverage self.average = None # This the class average itself, an EMData object self.projection = None # This is the projection itelse, an EMData object self.class_idx = None # This is the idx of the current class being studied in the interface self.previous_len = -1 # To keep track of the number of class averages that were previously viewable. This helps to make sure we can switch to the same class average in the context of a different refinement iteration self.mirror_eulers = False if sparse_mode: self.mirror_eulers = True # If True the drawn Eulers are are also rendered on the opposite side of the sphere - see EM3DSymModel.make_sym_dl_lis # Grab the symmetry from the workflow database if possible sym = "c1" if js_check_dict("refine_01/0_refine_parms.json"): try: sym = str(js_open_dict("refine_01/0_refine_parms.json")["sym"]) except: pass # Have to tell the EM3DSymModel that there is a new sym self.set_symmetry(sym) # this object will have if self.au_data != None: combo_entries = self.au_data.keys() combo_entries.sort() combo_entries.reverse() if len(combo_entries) > 0: au = combo_entries[0] cls = self.au_data[au][0][0] self.au_selected(au,cls) self.mirror_eulers = True self.init_lock = False self.force_update=True # Force a display udpdate in EMImage3DSymModule QtCore.QObject.connect(self, QtCore.SIGNAL("point_selected"), self.au_point_selected)
def __init__(self, gl_widget=None, auto=True,sparse_mode=False, file_name = "", read_from=None): self.current_hit = None self.events_mode_list = ["navigate", "inspect"] self.events_mode = self.events_mode_list[1] self.init_lock = True # a lock indicated that we are still in the __init__ function self.au_data = None # This will be a dictionary, keys will be refinement directories, values will be something like available iterations for visual study if len(read_from)==0: read_from=None self.readfrom=read_from if self.readfrom: file_name="" auto=False datalst=[] for rr in self.readfrom: datalst.append([rr,None, None, None,rr]) self.au_data={"data":datalst} if auto: # this a flag that tells the eulerxplorer to search for refinement data and automatically add elements to the inspector, if so self.gen_refinement_data() EM3DSymModel.__init__(self, gl_widget, eulerfilename=file_name) Animator.__init__(self) self.height_scale = 8.0 # This is a value used in EM3DSymModel which scales the height of the displayed cylinders - I made it 8 because it seemed fine. The user can change it anyhow self.projection_file = None # This is a string - the name of the projection images file self.average_file = None # This is a string - the name of the class averages file self.proj_class_viewer = None # This will be an EMImageMXWidget that shows the class and/or projection self.particle_viewer = None # This will be an EMImageMXWidget that shows the particles in a class self.clsdb = None # I think this will become redundant - it used to be the old database that stores which particles are in a class, but now that's stored in the header self.particle_file = None # This will be a string - the name of the file that has the particle files in it. This might be made redundant with the new approach self.alignment_file = None # This will be a string - the name of the file containing the alignment parameters - this is essential if you we want to show the aligned particles self.refine_dir = None # This will be a string - the name of the current refinement directory that is being studied self.dx = None # This is an EMData object storing the x shifts of the alignments for all particles. Generated by e2classaverage self.dy = None # This is an EMData object storing the y shifts of the alignments for all particles. Generated by e2classaverage self.da = None# This is an EMData object storing the angle of the alignments for all particles. Generated by e2classaverage self.dflip = None # This is an EMData object storing whether or not tthe alignment involved a flip, for all particles. Generated by e2classaverage self.classes = None # This is an EMData object storing which class(es) a particle belongs to. Generated by e2classaverage self.inclusions = None # This is and EMDAta storing a boolean that indicates the particle was actually included in the final average. Generated by e2classaverage self.average = None # This the class average itself, an EMData object self.projection = None # This is the projection itelse, an EMData object self.class_idx = None # This is the idx of the current class being studied in the interface self.previous_len = -1 # To keep track of the number of class averages that were previously viewable. This helps to make sure we can switch to the same class average in the context of a different refinement iteration self.mirror_eulers = False if sparse_mode: self.mirror_eulers = True # If True the drawn Eulers are are also rendered on the opposite side of the sphere - see EM3DSymModel.make_sym_dl_lis # Grab the symmetry from the workflow database if possible sym = "c1" if js_check_dict("refine_01/0_refine_parms.json"): try: sym = str(js_open_dict("refine_01/0_refine_parms.json")["sym"]) except: pass # Have to tell the EM3DSymModel that there is a new sym self.set_symmetry(sym) # this object will have if self.au_data != None: combo_entries = self.au_data.keys() combo_entries.sort() combo_entries.reverse() if len(combo_entries) > 0: au = combo_entries[0] cls = self.au_data[au][0][0] self.au_selected(au,cls) self.mirror_eulers = True self.init_lock = False self.force_update=True # Force a display udpdate in EMImage3DSymModule QtCore.QObject.connect(self, QtCore.SIGNAL("point_selected"), self.au_point_selected)