Ejemplo n.º 1
0
def get_chemical_formula(atoms):
    """
    Compatibility function, return mode=metal, when
    available, mode=hill, when not (ASE <= 3.13)
    """
    try:
        return atoms.get_chemical_formula(mode='metal')
    except ValueError:
        return atoms.get_chemical_formula(mode='hill')
Ejemplo n.º 2
0
def convert_atoms(request=None):
    import ase.io
    import ase.io.formats
    request = flask.request if request is None else request

    cif = request.args.get('cif',
                           request.get_json().get('params', {}).get('cif', ''))
    out_format = request.args.get(
        'format',
        request.get_json().get('params', {}).get('format', ''))

    if not out_format:
        out_format = 'cif'
    if out_format not in VALID_OUT_FORMATS:
        return {
            "error":
            "outFormat {outformat} is invalid. Should be on of {VALID_OUT_FORMATS}"
            .format(**locals()),
        }

    with StringIO.StringIO() as in_file:
        in_file.write(cif)
        in_file.seek(0)
        atoms = ase.io.read(
            filename=in_file,
            index=None,
            format='cif',
        )

    composition = atoms.get_chemical_formula(mode='metal')

    with StringIO.StringIO() as out_file:
        #  Castep file writer needs name
        out_file.name = 'CatApp Browser Export'
        ase.io.write(out_file, atoms, out_format)
        out_content = out_file.getvalue()

    format2extension = {
        value: key
        for key, value in ase.io.formats.extension2format.items()
    }

    extension = format2extension.get(out_format, out_format)

    return flask.jsonify({
        'version':
        VERSION,
        'image':
        str(out_content),
        'input_filetype':
        'cif',
        'output_filetype':
        out_format,
        'filename':
        'structure_{composition}.{extension}'.format(**locals()),
        'filename_trunk':
        'structure_{composition}'.format(**locals()),
        'extension':
        extension,
    })