def __init__(self, volfile, **kwargs): print("on chimera projection client") ChimeraAngDistClient.__init__(self, volfile, **kwargs) self.projection = xmipp.Image() self.projection.setDataType(md.DT_DOUBLE) #0.5 -> Niquiest frequency #2 -> bspline interpolation size = self.kwargs.get('size', None) defaultSize = self.xdim if self.xdim > 128 else 128 self.size = size if size else defaultSize paddingFactor = self.kwargs.get('paddingFactor', 1) maxFreq = self.kwargs.get('maxFreq', 0.5) splineDegree = self.kwargs.get('splineDegree', 2) self.fourierprojector = xmipp.FourierProjector(self.image, paddingFactor, maxFreq, splineDegree) self.fourierprojector.projectVolume(self.projection, 0, 0, 0) self.showjPort = self.kwargs.get('showjPort', None) self.iw = ImageWindow(filename=os.path.basename(volfile), image=self.projection, dim=self.size, label="Projection") self.iw.updateData(flipud(self.projection.getData())) if self.showjPort: self.showjThread = Thread(target=self.listenShowJ) self.showjThread.daemon = True self.showjThread.start() self.iw.root.protocol("WM_DELETE_WINDOW", self.exitClient) self.iw.show()
def __init__(self, volfile, **kwargs): print("on chimera projection client") ChimeraAngDistClient.__init__(self, volfile, **kwargs) self.projection = xmipp.Image() self.projection.setDataType(md.DT_DOUBLE) # 0.5 -> Niquiest frequency # 2 -> bspline interpolation size = self.kwargs.get("size", None) defaultSize = self.xdim if self.xdim > 128 else 128 self.size = size if size else defaultSize paddingFactor = self.kwargs.get("paddingFactor", 1) maxFreq = self.kwargs.get("maxFreq", 0.5) splineDegree = self.kwargs.get("splineDegree", 2) self.fourierprojector = xmipp.FourierProjector(self.image, paddingFactor, maxFreq, splineDegree) self.fourierprojector.projectVolume(self.projection, 0, 0, 0) self.showjPort = self.kwargs.get("showjPort", None) self.iw = ImageWindow( filename=os.path.basename(volfile), image=self.projection, dim=self.size, label="Projection" ) self.iw.updateData(flipud(self.projection.getData())) if self.showjPort: self.showjThread = Thread(target=self.listenShowJ) self.showjThread.daemon = True self.showjThread.start() self.iw.root.protocol("WM_DELETE_WINDOW", self.exitClient) self.iw.show()
class ChimeraProjectionClient(ChimeraAngDistClient): def __init__(self, volfile, **kwargs): print("on chimera projection client") ChimeraAngDistClient.__init__(self, volfile, **kwargs) self.projection = xmipp.Image() self.projection.setDataType(md.DT_DOUBLE) #0.5 -> Niquiest frequency #2 -> bspline interpolation size = self.kwargs.get('size', None) defaultSize = self.xdim if self.xdim > 128 else 128 self.size = size if size else defaultSize paddingFactor = self.kwargs.get('paddingFactor', 1) maxFreq = self.kwargs.get('maxFreq', 0.5) splineDegree = self.kwargs.get('splineDegree', 2) self.fourierprojector = xmipp.FourierProjector(self.image, paddingFactor, maxFreq, splineDegree) self.fourierprojector.projectVolume(self.projection, 0, 0, 0) self.showjPort = self.kwargs.get('showjPort', None) self.iw = ImageWindow(filename=os.path.basename(volfile), image=self.projection, dim=self.size, label="Projection") self.iw.updateData(flipud(self.projection.getData())) if self.showjPort: self.showjThread = Thread(target=self.listenShowJ) self.showjThread.daemon = True self.showjThread.start() self.iw.root.protocol("WM_DELETE_WINDOW", self.exitClient) self.iw.show() def rotate(self, rot, tilt, psi): self.fourierprojector.projectVolume(self.projection, rot, tilt, psi) self.projectionData = flipud(self.projection.getData()) if hasattr(self, 'iw'): #sometimes is not created and rotate is called self.iw.updateData(self.projectionData) def exit(self): ChimeraClient.exit(self) if hasattr(self, "iw"): self.iw.root.destroy() def answer(self, msg): ChimeraClient.answer(self, msg) if msg == 'motion_stop': data = self.client.recv() #wait for data printCmd('reading motion') self.motion = data printCmd('getting euler angles') rot, tilt, psi = xmipp.Euler_matrix2angles(self.motion) printCmd('calling rotate') self.rotate(rot, tilt, psi) def exitClient(self): #close window before volume loaded if not self.listen: sys.exit(0) def initListenThread(self): self.listen_thread = Thread(target=self.listen) self.listen_thread.daemon = True self.listen_thread.start() def listenShowJ(self): self.serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.serversocket.bind(('', self.showjPort)) #become a server socket self.serversocket.listen(1) while True: try: (clientsocket, address) = self.serversocket.accept() msg = clientsocket.recv( 1024) #should be a single message, so no loop tokens = shlex.split(msg) cmd = tokens[0] if cmd == 'rotate': rot = float(tokens[1]) tilt = float(tokens[2]) psi = float(tokens[3]) matrix = xmipp.Euler_angles2matrix(rot, tilt, psi) elif cmd == 'rotate_matrix': matrixString = tokens[1] matrix = ast.literal_eval(matrixString) matrix = [matrix[0][:3], matrix[1][:3], matrix[2][:3]] self.client.send('rotate') self.client.send(matrix) clientsocket.close() except EOFError: print('Lost connection to client')
class ChimeraProjectionClient(ChimeraAngDistClient): def __init__(self, volfile, **kwargs): print("on chimera projection client") ChimeraAngDistClient.__init__(self, volfile, **kwargs) self.projection = xmipp.Image() self.projection.setDataType(md.DT_DOUBLE) #0.5 -> Niquiest frequency #2 -> bspline interpolation size = self.kwargs.get('size', None) defaultSize = self.xdim if self.xdim > 128 else 128 self.size = size if size else defaultSize paddingFactor = self.kwargs.get('paddingFactor', 1) maxFreq = self.kwargs.get('maxFreq', 0.5) splineDegree = self.kwargs.get('splineDegree', 2) self.fourierprojector = xmipp.FourierProjector(self.image, paddingFactor, maxFreq, splineDegree) self.fourierprojector.projectVolume(self.projection, 0, 0, 0) self.showjPort = self.kwargs.get('showjPort', None) self.iw = ImageWindow(filename=os.path.basename(volfile),image=self.projection, dim=self.size, label="Projection") self.iw.updateData(flipud(self.projection.getData())) if self.showjPort: self.showjThread = Thread(target=self.listenShowJ) self.showjThread.daemon = True self.showjThread.start() self.iw.root.protocol("WM_DELETE_WINDOW", self.exitClient) self.iw.show() def rotate(self, rot, tilt, psi): self.fourierprojector.projectVolume(self.projection, rot, tilt, psi) self.projectionData = flipud(self.projection.getData()) if hasattr(self, 'iw'):#sometimes is not created and rotate is called self.iw.updateData(self.projectionData) def exit(self): ChimeraClient.exit(self) if hasattr(self, "iw"): self.iw.root.destroy() def answer(self, msg): ChimeraClient.answer(self, msg) if msg == 'motion_stop': data = self.client.recv()#wait for data printCmd('reading motion') self.motion = data printCmd('getting euler angles') rot, tilt, psi = xmipp.Euler_matrix2angles(self.motion) printCmd('calling rotate') self.rotate(rot, tilt, psi) def exitClient(self):#close window before volume loaded if not self.listen: sys.exit(0) def initListenThread(self): self.listen_thread = Thread(target=self.listen) self.listen_thread.daemon = True self.listen_thread.start() def listenShowJ(self): self.serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.serversocket.bind(('', self.showjPort)) #become a server socket self.serversocket.listen(1) while True: try: (clientsocket, address) = self.serversocket.accept() msg = clientsocket.recv(1024)#should be a single message, so no loop tokens = shlex.split(msg) cmd = tokens[0] if cmd == 'rotate': rot = float(tokens[1]) tilt = float(tokens[2]) psi = float(tokens[3]) matrix = xmipp.Euler_angles2matrix(rot, tilt, psi) elif cmd == 'rotate_matrix': matrixString = tokens[1] matrix = ast.literal_eval(matrixString) matrix = [matrix[0][:3], matrix[1][:3], matrix[2][:3]] self.client.send('rotate') self.client.send(matrix) clientsocket.close() except EOFError: print ('Lost connection to client')