Post-process data#
Here you will find some how-tos on how to post-process the VibrationalData
and PhonopyData
.
These can be generated via the HarmonicWorkChain
, the IRamanSpectraWorkChain
or the PhononWorkChain
.
Please, have a look at the tutorials for an overview, and at the specific topics section.
Hint
You can always access to the detailed description of a function/method putting a ?
question mark in front
of the function and press enter. This will print the description of the function, with detailed information
on inputs, outputs and purpose.
A rendered version can also be found in the documentation referring to the dedicated API section.
Powder spectra#
You can get the powder infrared and/or Raman spectra from a computed VibrationalData
. For Raman:
from aiida.orm import load_code
vibro = load_node(IDENTIFIER) # a VibrationalData node
polarized_intensities, depolarized_intensities, frequencies, labels = vibro.run_powder_raman_intensities(frequency_laser=532, temperature=300)
The total powder intensity will be the some of the polarized (backscattering geometry, HH/VV setup) and depolarized (90º geometry, HV setup) intensities:
total = polarized_intensities + depolarized_intensities
The infrared in a similar way, but no distinction between polarized and depolarized, and no laser frequency and temperature inputs:
intensities, frequencies, labels = vibro.run_powder_ir_intensities()
The labels
output is referring to the irreducible representation labels of the modes.
Single crystal polarized spectra#
Important
It is extremely important that you match the experimental conditions, meaning the direction of incoming/outgoing light should be given as in the experimental setup. So, pay extremely attention on the convention used, both in the code and in the experiments.
Note
Convention In the following methods, the direction of the light must be given in Cartesian coordinates.
You can get the single crystal infrared and/or Raman spectra from a computed VibrationalData
. For Raman:
from aiida.orm import load_code
vibro = load_node(IDENTIFIER) # a VibrationalData node
incoming = [0,0,1] # light polatization of the incident laser beam
outgoing = [0,0,1] # light polatization of the emitted laser beam
intensities, frequencies, labels = vibro.run_single_crystal_raman_intensities(
pol_incoming=incoming,
pol_outgoing=outgoing,
frequency_laser=532,
temperature=300,
)
Infrared in a similar fashion:
from aiida.orm import load_code
vibro = load_node(IDENTIFIER) # a VibrationalData node
incoming = [0,0,1] # light polatization of the incident laser beam
intensities, frequencies, labels = vibro.run_single_crystal_ir_intensities(pol_incoming=incoming)
IR/Raman active modes#
To get the active modes from a computed VibrationalData
:
from aiida.orm import load_code
vibro = load_node(IDENTIFIER) # a VibrationalData node
frequencies, _, labels = vibro.run_active_modes(selectrion_rules='ir')
This will return the IR active frequencies and the corresponding irreducible representation labels.
For Raman active modes, specify 'raman'
instead.