RamanSpectrum¶
- class RamanSpectrum(configuration, dynamical_matrix, susceptibility_derivatives, qpoint=None, phonon_modes=None, method=None, polarization_in=None, polarization_out=None, energies=None, broadening=None, number_of_angles=None, polarization_orthogonal=None, second_harmonics_generation_susceptibility=None)¶
Analysis class for calculating the Raman tensor and spectrum for a bulk configuration.
- Parameters:
configuration (
BulkConfiguration
) – The configuration for which the vibrational modes should be calculated. If no calculator is attached to the configuration, the calculator from dynamical_matrix is used. Currently, configuration must be the same as the configuration from dynamical_matrix and is therefore not needed. Default: The configuration fromdynamical_matrix
dynamical_matrix (
DynamicalMatrix
) – The DynamicalMatrix to calculate the phonon modes from.susceptibility_derivatives (
SusceptibilityDerivatives
) – SusceptibilityDerivatives object.qpoint (list of 3 floats) – fractional q-point where phonon modes used for Raman signals are evaluated, e.g.
[0.0, 0.0, 0.0]
. Default: Gamma point, ‘G’=[0.0, 0.0, 0.0].phonon_modes (list with positive ints |
All
) – The phonon modes to include. Default:All
(All phonon modes are included).method (
PolarizationDependent
|PolarizationAveraged
.) – Keyword specifying if the results should be calculated with a light polarization dependent or averaged result. Whenmethod=PolarizationDependent
,polarization_in
must be provided,polarization_out
can be given but is defaulted to thepolarization_in
value. Whenmethod=PolarizationAveraged
,polarization_in/out
is not used. Default:PolarizationDependent
polarization_in (list of 3 floats) – Incoming light polarization vector, e.g.
[1.0, 0.0, 0.0]
. The vector will be normalized internally. Default:[1, 0, 0]
polarization_out (list of 3 floats) – Scattered light polarization vector, e.g.
[1.0, 0.0, 0.0]
. The vector will be normalized internally. Only a single scattered light polarization vector will be calculated. This option is mutually exclusive topolarization_orthogonal
andnumber_of_angles
, which will results in multiple scattered light polarizations.energies (PhysicalQuantity of type energy) – The energies where Raman spectrum is evaluated. Default:
1500 points from 0.0 to 10 percent above highest phonon frequency
broadening (PhysicalQuantity of type energy) – The broadening parameter used for the Raman spectrum. Default:
0.25 * meV (~2 cm⁻1)
number_of_angles (integer) – Argument used for
method=PolarizationDependent
. If not None a polar spectrum will be generated with the scattered light polarization rotated between polarization_in and polarization_orthogonal (orthogonal polarization). This option is mutually exclusive topolarization_out
. Default: Nonepolarization_orthogonal (list of 3 floats) – Argument used for
method=PolarizationDependent
. Light polarization vector used for polar spectrum that is orthogonal to polarization_in. Scattered light polarization will be rotated between polarization_in and polarization_orthogonal, g_s = cos(theta) * polarization_in + sin(theta) * polarization_orthogonal. The vector will be normalized internally. Default: Nonesecond_harmonics_generation_susceptibility (
SecondHarmonicsGenerationSusceptibility
|None
) – If given a correction from polar phonons will be included in the susceptibility derivatives. An optical_spectrum and born_effective_charge will be taken from the dynamical matrix argument including polar phonon splitting. Default:None
, i.e. the polar phonon correction is not included.
- broadening()¶
- Returns:
The broadening parameter used for the Raman spectrum.
- Return type:
PhysicalQuantity of type energy.
- energies()¶
- Returns:
The energies used for the spectrum.
- Return type:
PhysicalQuantity of type energy.
- intensities(angle_index=None)¶
- Returns:
The Raman tensor for the phonon modes projected onto light polarizations. For several angles this gives the polar Raman spectrum for the phonon modes for a particular angle index. The shape is (N, M) where N is the number of angles angles and M is the number of phonon modes.
- Return type:
ndarray with floats.
- metatext()¶
- Returns:
The metatext of the object or None if no metatext is present.
- Return type:
str | None
- method()¶
- Returns:
The method used for the calculation. Either
PolarizationDependent
orPolarizationAveraged
.- Return type:
NLFlag
- nlprint(stream=None)¶
Print a string containing an ASCII table useful for plotting the AnalysisSpin object.
- Parameters:
stream (python stream) – The stream the table should be written to. Default:
NLPrintLogger()
- numberOfAngles()¶
- Returns:
The number of angle degrees used for the polar Raman spectrum.
- Return type:
one-dimensional ndarray with floats.
- phononModes()¶
Query method for the phonon modes.
- Returns:
The list of phonon mode indices used in the calculation.
- Return type:
list of int.
- phononWaveNumbers()¶
- Returns:
The wave numbers used for the spectrum.
- Return type:
PhysicalQuantity of type inverse length.
- polarAngleList()¶
- Returns:
The angle degrees used for the polar Raman spectrum.
- Return type:
one-dimensional ndarray with floats | None
- polarizationOrthogonal()¶
- Returns:
The normalized polarization that scattered light is rotated to in polar spectrum.
- Return type:
ndarray with 3 floats each.
- polarizationsIn()¶
- Returns:
Normalized incoming light polarization vector
- Return type:
numpy.ndarray with 3 floats.
- polarizationsOut()¶
- Returns:
Normalized scattered light polarization vectors
- Return type:
list of numpy.ndarray with 3 floats.
- qpoint()¶
- Returns:
The q-point for which the phonon modes and Raman signals are calculated.
- Return type:
ndarray with 3 floats.
- ramanSpectrum(angle_index=None)¶
- Parameters:
angle_index (int) – The index of the scattered light, given in the list polarizationsOut().
- Returns:
The raman_spectrum summed over phonon modes for a given angle index
- Return type:
one-dimensional ndarray with floats.
- ramanTensor()¶
- Returns:
The Raman tensor for the phonon modes. The shape is (M, 3, 3) where M is the number of phonon modes.
- Return type:
ndarray with floats.
- setMetatext(metatext)¶
Set a given metatext string on the object.
- Parameters:
metatext (str | None) – The metatext string that should be set. A value of “None” can be given to remove the current metatext.
- susceptibilityDerivativesPolarCorrection()¶
- Returns:
The correction to the susceptibility derivatives from polar phonons related to the second harmonics generation susceptibility, Born effective charges and optical spectrum. The two latter are obtained from the dynamical matrix with polar phonon splitting. It will only be nonzero if a second_harmonics_generation_susceptibility was provided as an input. The shape is (M, 3, 3) where M is the number of degrees of freedom.
- Return type:
ndarray with floats.
- uniqueString()¶
Return a unique string representing the state of the object.
- waveNumberAxis()¶
- Returns:
The wave numbers used for the spectrum.
- Return type:
PhysicalQuantity of type inverse length.
Usage Examples¶
Calculate the RamanSpectrum
for an incoming and scattered light polarization equal to [1, 0, 0].
raman_spectrum = RamanSpectrum(
configuration,
dynamical_matrix,
susceptibility_derivatives,
method=PolarizationDependent,
polarization_in=[1, 0, 0],
polarization_out=[1, 0, 0])
When giving polarization_orthogonal
, a polar spectrum is generated for a number of out polarizations given by number_of_angles
.
raman_spectrum = RamanSpectrum(
configuration,
dynamical_matrix,
susceptibility_derivatives
method=PolarizationDependent,
polarization_in=[1, 0, 0],
polarization_orthogonal=[0, 1, 0],
number_of_angles=101)
When using method=PolarizationAveraged
, the light polarization is averaged and not given as input.
raman_spectrum = RamanSpectrum(
configuration,
dynamical_matrix,
susceptibility_derivatives
method=PolarizationAveraged)
Notes¶
Raman spectroscopy is a powerful noninvasive technique for material characterization that uniquely extracts information about vibrational and chemical properties, inhomogeneities, strain, crystallinity, electron-phonon coupling and anharmonicities in a local environment. Hereby Raman spectroscopy has become one of the main tools for characterization of emerging materials. Below we give a brief introduction to the theory of light-matter scattering and outline the implementation of Raman scattering in QuantumATK.
Light scattering in materials¶
The classical description of light scattering is based on the polarization of a material in the presence of an electric field. The polarization is given by
where \(p_{\alpha}\) is the permanent dipole moment, \(\alpha, \beta, \gamma\) are Cartesian directions and \(\chi\) is the dielectric susceptibility tensor. The electric field can be expressed as a vector \(\mathbf{E} = E_0 \mathbf{g} e^{i(\mathbf{k}_l \mathbf{r}-\omega_l t)}\) with \(\mathbf{g}\) giving the light polarization vector, which is orthogonal to the propagation direction, and \(\mathbf{k}_l, \omega_l\) giving the wavevector and angular frequency of the light, respectively. The linear response function \(\chi_{\alpha \beta}^{(1)}\) describes how light can be modulated elastically from infrared and Rayleigh scattering or inelastically from Raman scattering. The nonlinear response function \(\chi_{\alpha \beta \gamma}^{(2)}\) describes higher order phenomena such as second harmonic generation.
Phenomenological linear response¶
Focusing on the linear response in the electric field, assuming a time-dependent electric field of the form \(E_{\alpha}=E_{0\alpha} \cos(\omega_{l}t)\) and Taylor expanding to lowest order in the vibrational modulation of the polarization by a time-dependent normal mode vibration \(u_{\lambda}=u_{0\lambda} \cos(\omega_{\lambda}t)\), we have:
Here \(\lambda\) labels the phonon modes. The second term describes a dipole moment oscillating with the vibrational mode frequency. Vibrational modes for which the permanent dipole moment changes with displacement are called infrared active modes. The third term describes the Rayleigh scattering at the same frequency as the incident light. Finally the fourth term gives rise to Raman scattering. From the trigonometric identity \(2\cos(\omega_{l}t)\cos(\omega_{\lambda}t)=\cos((\omega_{l}-\omega_{\lambda})t)+\cos((\omega_{l}+\omega_{\lambda})t)\) we see that this light induced polarization is ‘Raman shifted’ by the phonon frequencies. If the susceptibility changes with a given vibration the mode is Raman active.
Raman signals - Polarization dependent method¶
In solids the Raman spectra depends on the polarization of the incoming and scattered light compared to the crystal directions. The nonresonant Raman power cross-section from one-phonon excitations is within the Placzek approximation given by [1][2]:
where \(\omega_{s/i}\, (\mathbf{g}_{s/i})\) is the frequency (polarization vector) of the scattered/incoming light, \(N_{cells}\) is the the number of unit cells in the sample, V is the unit cell volume, \(n_{\lambda}\) is the Bose-Einstein occupation of phonon mode \(\lambda\). Energy conservation imposes \(\omega_{s} = \omega_{i} \mp \omega_{\lambda}\) for Stokes and anti-Stokes processes, respectively.
We use the Kubo-Greenwood formula to calculate the \(3\times3\) susceptibility matrix, see OpticalSpectrum
.
The derivatives are calculated using the finite differences, see SusceptibilityDerivatives
.
Raman Tensor¶
The Raman tensor is given by
where \(\mu\) is the atom index, \(m_{\mu}\) is the atom mass, \(e_l^{\lambda}\) is the phonon eigenvector of mode \(\lambda\) and the derivative is evaluated with finite-differences. The Raman tensor is a \(3\times3\) matrix for each phonon mode.
Raman Spectrum¶
We define the Raman spectrum as the broadened intensities obtained from the projected Raman tensor:
This is a number/intensity for each phonon mode \(\lambda\) which can then be combined to a spectrum by using an artificial broadening \(\sigma\). Several broadening frameworks can be used, but we apply the Gaussians:
Raman signals - Polarization averaged results¶
From above we have the polarization dependent expression for the Raman power cross-section. One can derive an expression for the polarization averaged power cross-section. This is useful for modeling of at least two cases: (i) the crystal orientation and light polarization is unknown or (ii) experiments are averaged over a (large) variation of crystal orientations. A typical example of the latter is for a collection of molecules in a liquid with arbitrary orientations. The polarization averaged expression is given by:
The polarization averaged Raman intensity is given by
where
is the average polarization and
is the anisotropy factor of the susceptibility tensor derivative.
Raman signals - Polar Raman spectrum¶
It is often interesting to see how the Raman intensities for each phonon mode changes with angle between the input and scattered light. This is actually also measurable if one has a polarizer in the Raman setup that can be rotated. We plot a polar Raman spectrum by rotating the scattered light polarization between the input polarization \(\mathbf{g}_i\) and an orthogonal polarization direction \(\mathbf{g}_{\perp}\). Specifically we rotate the scattered light polarization as
The projected Raman tensor
then gives the intensity spectrum as a function of polarization rotation angle.