예제 #1
0
 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()
예제 #2
0
파일: viewer.py 프로젝트: josegutab/scipion
 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()
예제 #3
0
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')
예제 #4
0
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')