コード例 #1
0
ファイル: angleList.py プロジェクト: xmzzaa/PyTom
    def fromXML(self, xmlObj):
        from lxml.etree import _Element

        if xmlObj.__class__ != _Element:
            raise RuntimeError(
                'Is not a lxml.etree._Element! You must provide a valid XMLobject.'
            )

        if xmlObj.tag == 'Angles':
            angleList_element = xmlObj
        else:
            RuntimeError(
                'Is not an AngleList! You must provide a valid AngleList object.'
            )

        from pytom.basic.structures import Rotation

        rotations = angleList_element.xpath('Rotation')  # modified by chen

        for rotation in rotations:
            rot = Rotation(0, 0, 0)
            rot.fromXML(rotation)
            self._rotationList.append(rot)
コード例 #2
0
ファイル: structures.py プロジェクト: xmzzaa/PyTom
class MaximisationResult(PyTomClass):
    """
    MaximisationResult : Stores results of one maximisation process
    """
    def __init__(self,
                 particle='',
                 reference=-1.0,
                 score=-1.0,
                 shift=-1.0,
                 rotation=-1.0,
                 angleObject=-1):

        from pytom.basic.structures import Particle, Reference, Shift, Rotation
        from numpy import long

        if particle.__class__ == str:
            self._particle = Particle(particle)
        elif particle.__class__ == Particle:
            self._particle = particle
        else:
            self._particle = Particle()

        if reference.__class__ == str:
            self._reference = Reference(reference)
        elif reference.__class__ == Reference:
            self._reference = reference
        else:
            self._reference = Reference()

        if shift.__class__ == list:
            self._shift = Shift(shift)
        elif shift.__class__ == float:
            self._shift = Shift()
        else:
            self._shift = shift

        if rotation.__class__ == list:
            self._rotation = Rotation(rotation)
        elif rotation.__class__ == Rotation:
            self._rotation = rotation
        else:
            self._rotation = Rotation()

        if score.__class__ == float:
            from pytom.score.score import xcfScore
            self._score = xcfScore()
        else:
            self._score = score

        if angleObject.__class__ == float or isinstance(
                angleObject, (int, long)):
            from pytom.angles.angleList import AngleList
            self._angleObject = AngleList()
        else:
            self._angleObject = angleObject

    def toParticle(self):
        """
        toParticle: Converts this object to a Particle object.
        @return:
        @rtype: L{pytom.basic.structures.Particle}
        """
        from pytom.basic.structures import Particle
        particle = self._particle
        particle.setRotation(self._rotation)
        particle.setShift(self._shift)
        particle.setScore(self._score)

        return particle

    def getParticle(self):
        return self._particle

    def getShift(self):
        from pytom.basic.structures import Shift

        if self._shift.__class__ == list:
            return Shift(self._shift)
        else:
            return self._shift

    def setShift(self, shift):
        from pytom.basic.structures import Shift

        assert shift.__class__ == Shift

        self._shift = shift

    def getAngleObject(self):
        return self._angleObject

    def getRotation(self):

        from pytom.basic.structures import Rotation

        if self._rotation.__class__ == list:
            return Rotation(self._rotation[0], self._rotation[1],
                            self._rotation[2])
        else:
            return self._rotation.copy()

    def getScore(self):
        """
        getScore: Returns score object
        """
        return self._score

    def setRotation(self, rotation):
        """
        setRotation:
        @param rotation: 
        """
        from pytom.basic.structures import Rotation

        if rotation.__class__ == list:
            rotation = Rotation(rotation)

        self._rotation = rotation

    def fromXML(self, xmlObj):
        """
        fromXML : Assigns values to result attributes from XML object
        @param xmlObj: A xml object  
        @author: Thomas Hrabe 
        """
        from lxml.etree import _Element

        if xmlObj.__class__ != _Element:
            from pytom.basic.exceptions import ParameterError
            raise ParameterError(
                'Is not a lxml.etree._Element! You must provide a valid XML object.'
            )

        from pytom.score.score import fromXML as fromXMLScore
        from pytom.angles.angle import AngleObject

        if xmlObj.tag == "Result":
            result = xmlObj
        else:
            result = xmlObj.xpath('Result')

            if len(result) == 0:
                raise PyTomClassError(
                    "This XML is not an MaximisationResult. No Result provided."
                )

            result = result[0]
        from pytom.basic.structures import Particle, Reference, Rotation, Shift
        particle_element = result.xpath('Particle')[0]
        p = Particle('')
        p.fromXML(particle_element)
        self._particle = p

        r = result.xpath('Reference')
        ref = Reference('')
        ref.fromXML(r[0])
        self._reference = ref

        scoreXML = result.xpath('Score')[0]
        self._score = fromXMLScore(scoreXML)

        shiftXML = result.xpath('Shift')[0]
        self._shift = Shift()
        self._shift.fromXML(shiftXML)

        rotationXML = result.xpath('Rotation')[0]
        self._rotation = Rotation()
        self._rotation.fromXML(rotationXML)

        angleElement = result.xpath('Angles')
        ang = AngleObject()
        self._angleObject = ang.fromXML(angleElement[0])

    def toXML(self):
        """
        toXML : Compiles a XML from result object
        @author: Thomas Hrabe
        """
        from lxml import etree

        resultElement = etree.Element("Result")

        resultElement.append(self._particle.toXML())

        if self._reference.hasGeneratedByInfo():
            from pytom.basic.structures import Reference
            newRef = Reference(self._reference.getReferenceFilename())
            resultElement.append(newRef.toXML())
        else:
            resultElement.append(self._reference.toXML())

        resultElement.append(self._shift.toXML())

        resultElement.append(self._rotation.toXML())

        resultElement.append(self._score.toXML())

        resultElement.append(self._angleObject.toXML())

        return resultElement

    def copy(self):
        return MaximisationResult(self._particle, self._reference, self._score,
                                  self._shift, self._rotation,
                                  self._angleObject)
コード例 #3
0
ファイル: structures.py プロジェクト: xmzzaa/PyTom
class FoundParticle(PyTomClass):
    """
    FoundParticle: Class for getting the particle according to the result score volume
    """
    def __init__(self, pos=None, orient=None, score=None, filename=''):
        """
        @param pos: pick position of the particle
        @type pos: L{pytom.basic.structures.PickPosition}
        @param orient: orientation of the pick particle
        @type orient: L{pytom.basic.structures.Rotation}
        @param score: score vaule of the picked particle
        @type score: L{pytom.score.score.Score}
        @param filename: filename of the found particle, if any
        @type filename: string
        """
        self.pos = pos
        self.orient = orient
        self.score = score
        self.filename = filename
        
    def getVolume(self):
        """
        getVolume: Get volume of the found particle
        
        @rtype: L{pytom_volume.vol}
        """
        from pytom_volume import read
        from pytom.tools.files import checkFileExists
        
        if not checkFileExists(self._filename):
            raise Exception('File ' + self._filename + ' does not exist!')
        
        return read(self.filename)
    
    def getPos(self):
        return [ int(i) for i in self.pos.toVector()]
    
    def toXML(self):
        from lxml import etree
        
        particle_element = etree.Element('FoundParticle', Filename = self.filename)
        
        particle_element.append(self.pos.toXML())
            
        particle_element.append(self.orient.toXML())
        
        particle_element.append(self.score.toXML())
        
#        class_element = etree.Element('Filename', Name = str(self.filename))
#        particle_element.append(class_element)
        
        return particle_element
    
    def fromXML(self, xmlObj):
        from lxml.etree import _Element
        
        if xmlObj.__class__ != _Element:
            from pytom.basic.exceptions import ParameterError
            raise ParameterError('You must provide a valid XML object.')
        
        if xmlObj.tag == "FoundParticle":
            main = xmlObj
        else:  
            main = xmlObj.xpath('FoundParticle')
            if len(main) == 0:
                from pytom.basic.exceptions import PyTomClassError
                raise PyTomClassError("This XML is not a FoundParticle.")
            main = main[0]
            
        from pytom.basic.structures import PickPosition, Rotation
        from pytom.score.score import fromXML as fromXMLScore
        
        self.filename = main.get('Filename')
        
        p = main.xpath('PickPosition')[0]
        self.pos = PickPosition()
        self.pos.fromXML(p)
        
        o = main.xpath('Rotation')[0]
        self.orient = Rotation()
        self.orient.fromXML(o)
        
        s = main.xpath('Score')[0]
        self.score = fromXMLScore(s)
        
        
    def toParticle(self):
        """
        toParticle: Converts this object to a Particle object.
        @rtype: L{pytom.basic.structures.Particle}
        """
        from pytom.basic.structures import Particle
        return Particle(filename=self.filename, rotation=self.orient, pickPosition=self.pos, score=self.score)
    
    def fromParticle(self, p):
        self.filename = p.getFilename()
        self.orient = p.getRotation()
        self.pos = p.getPickPosition()
        self.score = p.getScore()