Dealing with energy¶
Bliss provides tools to deal with energy related topics.
bliss.physics.diffraction
module which is based on mendeleev
external module allows
to deal with various notions encountered when programming sequences
for X-Ray experiments:
Some functions to calculate usualy associated values are also provided:
- interplanar distance between lattice planes
- conversion between energy and wavelength
- Bragg values:
To ease and secure the handling of data in various units, Bliss provides a module named units.
Theory¶
De Broglie¶
where:
- λ: wavelength
- h: Planck constant
- p: momentum = mass * velocity
Bragg’s law¶
as $$ E = mc^2 \qquad and \qquad p = mv $$
where:
- n: order of reflection [1..]
- λ: wavelength incident angle
- θ: scattering angle
- d: interplanar distance between lattice planes
Cubic crystal diffraction
Units management with units
¶
When an argument to any function represents a physical quantity, the library expects the units to be coherent. Passing Quantity objects makes sure you are coherent.
The implementation is permissive, which means that if you pass a float/int instead of a Quantity, the library assumes the argument to be in the correct units which are SI units. Failure to comply will result in unexpected values.
units
is based on
pint
external module.
Example¶
Example to convert 0.1 miligram in Kjoules with unknown formula.
import bliss.physics.diffraction from bliss.physics.units import ur mass = 0.1 * ur.mg E = mass * ur.c**2 print( E.to(ur.kJ) ) >>> 8987551.78737 kilojoule
Example of usage¶
Elements¶
mendeleev.elements
usage example:
from mendeleev import elements Si = elements.Si print("Atomic number of {} is {}.".format(Si.name, Si.atomic_number)) >>> Atomic number of Silicon is 14.
Crystal¶
Cubic crystal:
from bliss.physics.diffraction import Crystal from mendeleev import elements Si = Crystal(elements.Si) Si111 = Si('111') Si111 >>> Si(111)
Most crystals are already available at the module level so you rarely need to create an instance of this class:
bliss.physics.diffraction.Si >>> Si bliss.physics.diffraction.Ge >>> Ge
Crystal Plane:
from bliss.physics.diffraction import CrystalPlane Si110 = CrystalPlane.fromstring('Si110')
Bragg angle¶
How to find the bragg angle (in degrees) for a silicon crystal at the 110 plane when the energy is 12.5 keV:
from bliss.physics.units import ur from bliss.physics.diffraction import Si keV, deg = ur.keV, ur.deg Si110 = Si('110') energy = 12.5*keV angle = Si110.bragg_angle(energy) # angle is a Quantity (radians) print( angle ) >>> 0.12952587191 radian # view it as a Quantity (degrees) print( angle.to(deg) ) >>> 7.42127016 degree # get the float in degrees print( angle.to('deg').magnitude ) >>> 7.42127016
Bragg energy¶
How to find the bragg energy (keV) for a germanium crystal at 444 plane when the angle is 25.6 degrees:
from bliss.physics.diffraction import Ge deg = ur.deg Ge444 = Ge('444') angle = 25.6*deg energy = Ge444.bragg_energy(angle) wavelength = Ge444.bragg_wavelength(angle) energy >>> <Quantity(2.81372042834e-15, 'joule')> wavelength >>> <Quantity(7.05985450176e-11, 'meter')> print( energy.to(keV) ) >>> 17.5618627264 kiloelectron_volt print( energy.to(ur.keV).magnitude ) >>> 17.5618627264
spectroscopy¶
energy_to_wavevector(edge_energy, energy)
:
wavevector_to_energy(edge_energy, k)
:
user-friendly functions:
from bliss.physics import spectroscopy spectroscopy.energy_kev_to_wavelength_angstrom(7.5) # 1.6531226083801578 spectroscopy.wavelength_angstrom_to_energy_kev(1.653122) # 7.500002760141831