Example #1
0
    def __init__(self, particleList=None, centerVector=None, symmetry=None):
        """
        @param particleList: The particle List 
        @param centerVector: Center of viron (sphere) in origin of particles 
        @param symmetry: We might already know some symmetry properties of the particles
        """
        from pytom.basic.structures import PointSymmetry

        self._particleList = particleList or []
        self._centerVector = centerVector or []
        self._symmetry = symmetry or PointSymmetry(1)
Example #2
0
    from pytom.cluster.mcoEXMXStructures import MCOEXMXJob
    from pytom.basic.structures import ParticleList, Reference, Mask, Wedge, SampleInformation, PointSymmetry
    from pytom.score.score import FLCFScore
    from pytom.frontend.serverpages.createMCOEXMXJob import createRunscripts
    from pytom.alignment.preprocessing import Preprocessing

    p = ParticleList()
    p.fromXMLFile(particleList)
    m = Mask(mask)
    w = Wedge([float(wedge1), float(wedge2)])
    pre = Preprocessing(lowestFrequency=float(lowestFrequency),
                        highestFrequency=float(highestFrequency))
    sample = SampleInformation(pixelSize=float(pixelSize),
                               particleDiameter=float(diameter))

    if symmetryN is None or symmetryAxisZ is None or symmetryAxisX is None:
        sym = None
    else:
        sym = PointSymmetry(nfold=int(symmetryN),
                            z2=float(symmetryAxisZ),
                            x=float(symmetryAxisX))

    job = MCOEXMXJob(particleList=p,numberIterations=numberIterations,\
                     destinationDirectory=destination,mask=mask,score=FLCFScore(),preprocessing=pre,\
                     wedgeInfo=w,binning=int(binning),sampleInformation=sample,numberClasses=int(numberClasses),\
                     endThreshold=float(endThreshold),symmetry = sym,doAlignment = False,frmBandwidth = None)

    job.toXMLFile(jobName)

    createRunscripts(jobName[:-3] + 'sh', jobName)
Example #3
0
def interpretRequestParameters(parameters):
    """
    interpretRequestParameters
    """
    from pytom.basic.structures import ParticleList, SampleInformation, Reference, Mask, Wedge, PointSymmetry
    from pytom.alignment.preprocessing import Preprocessing
    from pytom.frontend.serverpages.serverMessages import FileMessage

    particleList = ParticleList('.')

    if 'plXML' in parameters:
        particleList.fromXMLFile(parameters['plXML'])
    elif 'plDIR' in parameters:
        particleList = ParticleList(parameters['plDIR'])
        particleList.loadDirectory()
    else:
        raise RuntimeError('ParticleList parameter missing in request!')

    sampleInfo = SampleInformation()
    if 'pixSize' in parameters:
        sampleInfo.setPixelSize(parameters['pixSize'])
    else:
        raise RuntimeError('Pixelsize parameter missing in request!')

    if 'partDia' in parameters:
        sampleInfo.setParticleDiameter(parameters['partDia'])
    else:
        raise RuntimeError('Particle diameter missing in request!')

    reference = ''

    if 'ref' in parameters:
        reference = Reference(parameters['ref'])
    else:
        raise RuntimeError('Reference parameter missing in request!')

    if 'mask' in parameters:
        mask = Mask(parameters['mask'])
    else:
        raise RuntimeError('Mask parameter missing in request!')

    angles = None

    if 'sampling' in parameters:
        if parameters['sampling'] == 'GLOBAL':
            from pytom.angles.globalSampling import GlobalSampling

            if 'angFile' in parameters:
                angles = GlobalSampling(parameters['angFile'])
            else:
                raise RuntimeError('Angle file missing in request!')
        else:
            from pytom.angles.localSampling import LocalSampling

            if 'angStart' in parameters:
                startIncrement = int(parameters['angStart'])
            else:
                raise RuntimeError('Angle start missing in request!')

            if 'angShells' in parameters:
                shells = int(parameters['angShells'])
            else:
                raise RuntimeError('Angle shells missing in request!')

            if 'angInc' in parameters:
                shellIncrement = int(parameters['angInc'])
            else:
                raise RuntimeError('Angle increment missing in request!')

            angles = LocalSampling(shells=shells, increment=startIncrement)
    else:
        raise RuntimeError('Sampling completely missing in request!')

    if not 'lowestF' in parameters:
        raise RuntimeError('Lowest frequency parameter missing in request!')

    if not 'highestF' in parameters:
        raise RuntimeError('Highest frequency parameter missing in request!')

    if not 'filtSm' in parameters:
        raise RuntimeError('Filter smooth parameter missing in request!')

    preprocessing = Preprocessing(float(parameters['lowestF']),
                                  float(parameters['highestF']),
                                  float(parameters['filtSm']))

    adaptive = True

    if 'adapt' in parameters:
        fscCriterion = 0.5
        resOffset = 0.1
        angleFactor = 0.5
        adaptive = parameters['adapt'] == 'ON'

        if parameters['adapt'] == 'ON':

            if 'adResC' in parameters:
                fscCriterion = float(parameters['adResC'])
            else:
                raise RuntimeError('Resolution criterion missing in request!')

            if 'adResOf' in parameters:
                resOffset = parameters['adResOf']
            else:
                raise RuntimeError(
                    'Resolution offset parameter missing in request!')

            if 'angFac' in parameters:
                angleFactor = float(parameters['angFac'])
            else:
                raise RuntimeError(
                    'Angular factor parameter missing in request!')

    else:
        raise RuntimeError('Adaptive parameter missing in request!')

    score = None

    if 'score' in parameters:
        if parameters['score'] == 'xcf':
            from pytom.score.score import xcfScore as scoreClass
        elif parameters['score'] == 'nxcf':
            from pytom.score.score import nxcfScore as scoreClass
        elif parameters['score'] == 'flcf':
            from pytom.score.score import FLCFScore as scoreClass

        score = scoreClass()
    else:
        raise RuntimeError('Score parameter missing in request!')

    if 'pkPriRad' in parameters:
        radius = float(parameters['pkPriRad'])
    else:
        raise RuntimeError('Peak distance parameter missing in request!')

    if 'pkSmooth' in parameters:
        smooth = float(parameters['pkSmooth'])
    else:
        raise RuntimeError('Peak distance smooth missing in request!')

    score.setPeakPrior(radius=radius, smooth=smooth)

    if 'iter' in parameters:
        iterations = int(parameters['iter'])
    else:
        raise RuntimeError('Number of iterations missing in request!')

    if 'binning' in parameters:
        binning = int(parameters['binning'])
    else:
        raise RuntimeError('Scaling parameter missing in request!')

    if 'dest' in parameters:
        destination = parameters['dest']
    else:
        raise RuntimeError('Destination parameter missing in request!')

    from pytom.alignment.ExMaxAlignment import ExMaxJob

    job = ExMaxJob(particleList, destination, reference, score, angles, mask,
                   PointSymmetry(1), 1, iterations, preprocessing, -1, binning,
                   sampleInfo, fscCriterion, adaptive, resOffset, angleFactor)

    #print job
    jobXMLFile = ''

    if 'jobFile' in parameters:
        jobXMLFile = parameters['jobFile']
        job.toXMLFile(jobXMLFile)

        if jobXMLFile[-4:] == '.xml':
            jobRunFile = jobXMLFile[0:-4]
        else:
            jobRunFile = jobXMLFile
        createRunscripts(jobRunFile + '.sh', jobXMLFile)

    return FileMessage('AlignmentJob', jobXMLFile, 'created')
Example #4
0
    try:
        particleListName, volumeName, result, numberSymmetries, z1, x, z2, help = parse_script_options(
            sys.argv[1:], helper)
    except Exception as e:
        print(e)
        sys.exit()

    if particleListName:
        pl = ParticleList('.')
        pl.fromXMLFile(particleListName)
    elif volumeName:
        volume = read(volumeName)
    else:
        raise RuntimeError(
            'You must specify either a particle list or a volume file for symmetrization.'
        )

    if not z2:
        z2 = 0
    if not x:
        x = 0

    symmetry = PointSymmetry(numberSymmetries, z2, x)

    if particleListName:
        newParticleList = symmetry.apply(pl)
        newParticleList.average(resul)
    elif volumeName:
        newVolume = symmetry.applyToParticle(volume, Rotation(0, z2, x))
        newVolume.write(result)
Example #5
0
    def __init__(self,
                 particleList=None,
                 numberIterations=None,
                 destinationDirectory=None,
                 mask=None,
                 score=None,
                 preprocessing=None,
                 wedgeInfo=None,
                 binning=None,
                 sampleInformation=None,
                 numberClasses=None,
                 endThreshold=None,
                 symmetry=None,
                 doAlignment=False,
                 frmBandwidth=None):
        """
        __init__:
        @param particleList: The particles
        @type particleList: L{pytom.basic.structures.ParticleList}
        @param numberIterations: Number of kmeans rounds
        @type numberIterations: int
        @param destinationDirectory: Where will results be stored? 
        @type destinationDirectory: str
        @param mask: Score mask
        @type mask: L{pytom.basic.structures.Mask}
        @param score: The score
        @type score: Any child of L{pytom.alignment.score.Score}
        @param preprocessing: Bandpass and other things here 
        @type preprocessing: L{pytom.alignment.preprocessing.Preprocessing}
        @param wedgeInfo: 
        @type wedgeInfo: L{pytom.basic.structures.WedgeInfo}
        @param binning: Binning factor. 
        @type binning:
        @param sampleInformation:   
        @type sampleInformation:
        @param numberClasses: Optional number classes. Particle List will be radomised if no predifined class membership is provided.
        @type numberClasses: int
        @param endThreshold: End threshold of how many particles at least should jump to continue (value as fraction between 0 and 1)  
        @type endThreshold:  float
        @param symmetry: Set symmetry for particles, default is none
        @type symmetry: Any child of L{pytom.basic.structures.Symmetry} 
        @param doAlignment: Include FRM alignment in classification. Default is False.
        @type doAlignment: boolean 
        @param frmBandwidth: The bandwidth of the spherical harmonics - lowestBand used, highestBand used 
        @type frmBandwidth: [lowestBand,highestBand]
        """
        from pytom.basic.structures import PointSymmetry, HelicalSymmetry, Reference
        from pytom.angles.angleList import OneAngleList
        from pytom.alignment.ExMaxAlignment import ExMaxJob

        #self._particleList = particleList
        if numberIterations:
            self._numberIterations = int(numberIterations)
        else:
            self._numberIterations = 0
        if destinationDirectory:
            self._destinationDirectory = str(destinationDirectory)
        else:
            self._destinationDirectory = None

        self._numberClasses = numberClasses
        self._endThreshold = endThreshold

        rotations = OneAngleList()
        rotations.append(0, 0, 0)

        if not symmetry.__class__ in [PointSymmetry, HelicalSymmetry]:
            symmetry = PointSymmetry(1)

        self._exMaxJob = ExMaxJob(particleList,
                                  self._destinationDirectory,
                                  Reference(''),
                                  score,
                                  rotations,
                                  mask,
                                  symmetry,
                                  0,
                                  1,
                                  preprocessing,
                                  -1.0,
                                  binning,
                                  sampleInformation,
                                  0.5,
                                  adaptiveResolution=False)

        self._doAlignment = doAlignment
        self._frmBandwidth = frmBandwidth