예제 #1
0
def no_images(xds_inp):

    firstlast, phi, records = rj_parse_idxref_xds_inp(
        open(xds_inp, 'r').readlines())

    images = [j for j in range(firstlast[0], firstlast[1] + 1)]

    # first run with all images, then define the 'correct' lattice
    # as the one which results from this autoindex step.

    xds_inp = open('XDS.INP', 'w')
    for record in records:
        xds_inp.write('%s\n' % record)
    xds_inp.write('SPOT_RANGE= %d %d\n' % firstlast)
    xds_inp.close()
    output = rj_run_job('xds', [], [])
    cell = rj_parse_idxref_lp(open('IDXREF.LP', 'r').readlines())
    result = lattice_symmetry(cell)

    lattice = sort_lattices(result.keys())[-1]
    score = result[lattice]['penalty']

    metrics = []

    for count in range(10):
        result = calculate_images(images, phi, count + 1)

        xds_inp = open('XDS.INP', 'w')
        for record in records:
            xds_inp.write('%s\n' % record)
        for pair in result:
            xds_inp.write('SPOT_RANGE= %d %d\n' % pair)
        xds_inp.close()
        output = rj_run_job('xds', [], [])

        cell = rj_parse_idxref_lp(open('IDXREF.LP', 'r').readlines())
    
        result = lattice_symmetry(cell)
                
        l = sort_lattices(result.keys())[-1]
                
        if l != lattice:
            raise RuntimeError, 'cell refinement gave wrong lattice'

        metrics.append(result[l]['penalty'])
            
    return metrics, score
예제 #2
0
def no_images(labelit_log):

    # 3 images per wedge, maximum of 30 => 1 to 10 wedges.

    beam, lattice, metric, cell, image = rj_parse_labelit_log_file(labelit_log)
    template, directory = rj_get_template_directory(image)
    images = rj_find_matching_images(image)
    phi = rj_get_phi(image)

    if lattice == 'aP':
        raise RuntimeError, 'triclinic lattices useless'

    # right, what I want to do is autoindex with images at 0, 45, 90 or
    # thereabouts (in P1), then do the cell refinement, then score the
    # resulting cell constants

    ai_images = calculate_images_ai(images, phi, 3)

    metrics = []

    for count in range(1, 10):
        result = calculate_images(images, phi, count + 1)

        # first autoindex commands

        commands = [
            'template %s' % template,
            'directory %s' % directory,
            'beam %f %f' % beam]

        commands.append('symm P1')

        for image in ai_images:
            commands.append('autoindex dps refine image %d' % image)

        commands.append('mosaic estimate')
        commands.append('go')

        # the cell refinement commands

        commands.append('postref multi segments 3')

        for pair in result:
            commands.append('process %d %d' % pair)
            commands.append('go')

        output = rj_run_job('ipmosflm-7.0.3', [], commands)

        cell, mosaic = rj_parse_mosflm_cr_log(output)
        result = lattice_symmetry(cell)
        
        l = sort_lattices(result.keys())[-1]
        
        if l != lattice:
            raise RuntimeError, 'cell refinement gave wrong lattice'
        
        metrics.append(result[l]['penalty'])

    return metrics
예제 #3
0
def phi_spacing(xds_inp):

    firstlast, phi, records = rj_parse_idxref_xds_inp(
        open(xds_inp, 'r').readlines())

    images = [j for j in range(firstlast[0], firstlast[1] + 1)]

    # first run with all images, then define the 'correct' lattice
    # as the one which results from this autoindex step.

    xds_inp = open('XDS.INP', 'w')
    for record in records:
        xds_inp.write('%s\n' % record)
    xds_inp.write('SPOT_RANGE= %d %d\n' % firstlast)
    xds_inp.close()
    output = rj_run_job('xds', [], [])
    cell = rj_parse_idxref_lp(open('IDXREF.LP', 'r').readlines())
    result = lattice_symmetry(cell)

    lattice = sort_lattices(result.keys())[-1]
    score = result[lattice]['penalty']

    metrics = []
    spacings = []

    phis = [float(j + 1) for j in range(10, 45)]

    image_numbers = []

    for p in phis:
        result = calculate_images(images, phi, p)
        if phi * (result[-1][-1] - result[0][0] + 1) > 90.0:
            continue
        if not result in image_numbers:
            image_numbers.append(result)
            
    for result in image_numbers:

        spacing = nint(phi * (result[1][0] - result[0][0]))
        spacings.append(spacing)

        xds_inp = open('XDS.INP', 'w')
        for record in records:
            xds_inp.write('%s\n' % record)
        for pair in result:
            xds_inp.write('SPOT_RANGE= %d %d\n' % pair)
        xds_inp.close()
        output = rj_run_job('xds', [], [])

        cell = rj_parse_idxref_lp(open('IDXREF.LP', 'r').readlines())
    
        result = lattice_symmetry(cell)
                
        l = sort_lattices(result.keys())[-1]
                
        if l != lattice:
            raise RuntimeError, 'cell refinement gave wrong lattice'

        metrics.append(result[l]['penalty'])
            
    return metrics, spacings, score
예제 #4
0
def phi_spacing(labelit_log):

    # 3 images per wedge, maximum of 30 => 1 to 10 wedges.

    beam, lattice, metric, cell, image = rj_parse_labelit_log_file(labelit_log)
    template, directory = rj_get_template_directory(image)
    images = rj_find_matching_images(image)
    phi = rj_get_phi(image)

    if lattice == 'aP':
        raise RuntimeError, 'triclinic lattices useless'

    # right, what I want to do is autoindex with images at 0, 45, 90 or
    # thereabouts (in P1), then do the cell refinement, then score the
    # resulting cell constants

    ai_images = calculate_images_ai(images, phi, 3)

    metrics = []
    spacings = []

    phis = [float(j + 1) for j in range(10, 45)]

    image_numbers = []

    for p in phis:
        result = calculate_images(images, phi, p)
        if phi * (result[-1][-1] - result[0][0] + 1) > 90.0:
            continue
        if not result in image_numbers:
            image_numbers.append(result)

    for result in image_numbers:
        # first autoindex commands

        spacing = nint(phi * (result[1][0] - result[0][0]))
        spacings.append(spacing)

        commands = [
            'template %s' % template,
            'directory %s' % directory,
            'beam %f %f' % beam]

        commands.append('symm P1')

        for image in ai_images:
            commands.append('autoindex dps refine image %d' % image)

        commands.append('mosaic estimate')
        commands.append('go')

        # the cell refinement commands

        commands.append('postref multi segments 3')

        for pair in result:
            commands.append('process %d %d' % pair)
            commands.append('go')

        output = rj_run_job('ipmosflm-7.0.3', [], commands)

        try:
            cell, mosaic = rj_parse_mosflm_cr_log(output)
        except RuntimeError, e:
            for record in output:
                print record[:-1]
            raise e
        result = lattice_symmetry(cell)
        
        l = sort_lattices(result.keys())[-1]
        
        if l != lattice:
            raise RuntimeError, 'cell refinement gave wrong lattice'
        
        metrics.append(result[l]['penalty'])