Example Queries with aflow

Although the API is well-documented, we choose to demonstrate how to use aflow with some examples. The homepage of the github repo also has some short examples.

Downloading the CIF Files

Suppose I am looking for Si structures and I want to get the .cif files.

result = search(
     ).filter(K.species == "Si"
     ).orderby(K.energy_atom)
a0 = result[0]
# <aflow.entries.Entry at 0x1132b0c50>
a0.files
# [u'CONTCAR.relax', u'CONTCAR.relax.abinit', ...]

#The files object accepts a pattern for selecting a single file
#from the list. It will raise an error if more than one (or no)
#file matches the pattern.
a0.files["\*.312.cif"]
# AflowFile(aflowlib.duke.edu:AFLOWDATA/LIB2_RAW/SiW_pv/312/SiW_pv.312.cif)

#The AflowFile object can be called to get the file contents as a
#string
a0.files["\*.312.cif"]()
#u"data_SiW_pv/312 - (312) - NbNi8 [AB8] (312)...

#Or, you can specify the path to where you want the file saved.
a0.files["\*.312.cif"]("/temp/si0.cif")
assert path.isfile("/temp/si0.cif")

Filtering by Multiple Space Groups

Suppose I want to find Heusler alloys in aflowlib:

heus_result = search(batch_size=100
    ).filter( (K.spacegroup_relax==216) |
              (K.spacegroup_relax==225) |
              (K.spacegroup_relax==139) |
              (K.spacegroup_relax==119)
    ).select(
        K.enthalpy_formation_atom,
        K.aurl,
        K.species,
        K.species_pp
    )
len(heus_result)
# 541244

This selects multiple keywords and grabs any of the structures that have space group numbers of 216, 225, 139 or 119.