The zip file ValleyEgineeringPlotData.zip
contains the raw data for the plots
in the main text of the associated paper, divided into a folder per plot;
in each folder, notes on the data are also present describing the formats.
The attached .aiida
file is an AiiDA import that can be imported with
AiiDA. It requires AiiDA 1.0 or later.
You first need to import the data in AiiDA. After installing it, you can create a new profile (here and below called ARSENENE, but feel free to change the name). This can be done with:
verdi quicksetup --profile=ARSENENE
You can then import the data in this profile using:
verdi -p ARSENENE import arsenene_EPC.aiida
This will take about 10 minutes on a moderately powerful computer.
Once imported, you will find two groups in your ARSENENE profiles (these can be
shown using verdi -p ARSENENE group list -A
).
Each of them contains a BandsData
node, as well as many ArrayData
nodes containing
(numpy) arrays corresponding to the electron-phonon (el-ph) coupling matrix elements
used for the mobility calculations. The names of the groups are as follows:
export_for_As_paper_equilibrium
: el-ph matrix elements for equilibrium arseneneexport_for_As_paper_strained
: el-ph matrix elements for strained arseneneWe also provide a python script (plotting_tool.py
) to collect and plot
the electron-phonon data in the AiiDA database, for your convenience.
This script assumes that you have the data imported in the AiiDA profile and
that you run the commands from a verdi shell
(i.e., a custom ipython shell
with the AiiDA environment and database loaded), that can be launched as follows:
verdi -p ARSENENE shell
Alternatively, you can write a python file and then run in with verdi run
in the correct profile:
verdi -p ARSENENE run your_script.py
Note: If you run directly the provided script plotting_tool.py
, it will generate
a plot for one of the initial states and band indices.
Note that the data collection can take some time, because it involves retrieving data from the AiiDA nodes. Please look at the code for more details.
The different functions in the script can be used as follows:
bands, elphmats = find_bands_and_elphmats_in_group('export_for_As_paper_equilibrium')
# Get data for a given elphmat
kis, q, ijs, g2s, freqs = get_data(elphmat)
# or: plot data for all elphmats at a given initial state k and band index
plot_data(elphmats, kiidx = 0, ijidx=3)
The first function find_bands_and_elphmats_in_group
goes through the nodes
of a given group and separates the BandsData
node (bands
) from all other
ArrayData
nodes with the el-ph coupling matrix elements (elphmats
).
The second function get_data
reads one elphmat node (i.e., one element of
the elphmats
list) and returns the data contained in it as arrays.
In particular, one elphmat node contains the electron-phonon coupling
matrix elements at one given phonon momentum and for all initial states.
The data returned can be used to inspect the data structure, extract some data,
and also to chose the appropriate inputs of the next function used to plot
the matrix elements (see comments for the plot_data
function later on).
The return values of the get_data
function are:
kis
: an array containing the momenta of the initial electronic states.
number of states*3
bohr^(-1)
q
: an array containing the momentum of the phonon involved in scattering.
3
bohr^(-1)
ijs
: list of tuples containing the available band-indices combinations
for the initial and final states of the scattering event.
g2s
: array containing the el-ph coupling matrix elements.
The first two indices of the array correspond to the initial state and
band indices. For a given set of those 2 indices, what is left is an
array of the squared el-ph coupling (g^2_{k, k+q}
). The size of this array
is the number of phonon modes, i.e. 3*number of atoms
len(kis) * len(ijs) * (number of phonon modes)
eV^2
freqs
: same structure as g2s
, but containing the phonon frequencies
len(kis) * len(ijs) * (number of phonon modes)
eV
The last function, plot_data()
, generates a plot of the electron-phonon matrix
elements for one given initial state and all the calculated phonon momenta.
Its inputs are the list elphmats
, and the indices of a given initial state and
the index (in the ijs
array) of the relevant band indices.
By default, we use the first initial state (corresponding to the bottom of the valley)
and the last combination of band indices (corresponding to scattering from the conduction
band to the conduction band).
If instead you want to look at an other initial state, use the get_data
function
to get the initial states kis
and print them, and then choose the appropriate
index of the target initial state.