How-to guides¶
The tools of ASR can be combined to perform complicated tasks with little effort. Below you will find the recommended procedures to perform common tasks within the ASR framework.
List of available how-to guides
How-to: Collect a tree to folders and open in browser¶
Suppose you have a set of folders with a structure like:
tree/A/Mn/
tree/AB/MnI2/
tree/*/*/
etc.
Then collect the database with:
$ asr run "database.fromtree tree/*/*/"
And open a local web server with:
$ asr run "database.app database.db"
Now browse it with:
$ firefox localhost:5000
How-to: Submit a recipe with MyQueue¶
It is also recommended to use these recipes together with the myqueue job managing package. We assume that you have installed the myqueue-package and are familiar with its usage. If you are not, then take a look at its excellent documentation. To submit a job that relaxes a structure simply do:
$ mq submit asr.relax -R 24:10h
You can also specify arguments with:
$ mq submit "asr.relax --allow-symmetry-breaking" -R 24:10h
How-to: Generate figures from a certain recipe¶
Let’s assume that the bandstructure has been calculated and you want to display the results. Then it’s as simple as using the asr results cli sub-command:
$ asr results asr.bandstructure
which will save any figures generated by the webpanel associated with asr.bandstructure in the current folder.
How-to: Continue working on a packaged project¶
Suppose that you want to continue working on a previously packaged project, for example, to calculate a new property. Suppose the project is packaged as project.db, and that you only want to unpack the ground state results since your new recipe does not need other results in the database.
To unpack the project do:
$ asr run "database.totree project.db --run --patterns results-asr.c2db.gs.json,gs.gpw"
Then perform the calculations needed in the unpacked folders. When calculations are done package them and merge the databases:
$ asr run "database.fromtree tree/*/*/*/"
$ asr run "database.merge project.db database.db merged.db"
The databases have now been merged into a new database called merged.db.
How-to: Save and instantiate result objects¶
Here we are creating results object, converting it to a dict
and
converting it back to a result object
>>> import numpy as np
>>> from asr.core import decode_object
>>> from asr.c2db.piezoelectrictensor import Result
>>> result = Result.fromdata(eps_vvv=np.ones((3, 3, 3), float), eps_clamped_vvv=np.ones((3, 3, 3), float))
>>> dct = result.format_as('dict')
>>> result = decode_object(dct)
How-to: Select rows in database with results from specific recipe¶
When a database has been collected with asr.database.fromtree
it
automatically saves a special key-value-pair named as
has_asr_recipename
. Concretely if asr.c2db.gs:calculate
is
calculated for the specific row then it will have the
has_asr_c2db_gs_calculate
key-value-pair defined. To select all rows
where asr.c2db.gs@calculate
is done then simply do
$ ase db database.db has_asr_c2db_gs_calculate
to select those rows.
How-to: Retrive results from database¶
Suppose you have a database database.db
from which you want to
extract some results for further treatment. Suppose that data is the
results of the asr.bandstructure
recipe. Then do
from ase.db import connect
from asr.database import parse_row_data
db = connect('database.db')
bandstructure_results = []
for row in db.select('has_asr_bandstructure'):
data = parse_row_data(row.data)
bs = data['results-asr.bandstructure.json']
bandstructure_results.append(bs)
>