How to use This library¶
>>> import neutronbraggedge
From python, first you need to import the package
>>> from neutronbraggedge.braggedge import BraggEdge
Metadata of Elements¶
- For a particular element, or a list of elements, you can retrieve:
- lattice parameter
- h, k and l values
- Crystal structure
- bragg edges values
For this example, we are retrieving the data for Fe and we are only interested by the first 4 crystal orientation.
>>> _handler = BraggEdge(material = 'Fe', number_of_bragg_edges = 4)
>>> print("Crystal Structure is: %s" %_handler.metadata['cyrstal_structure]))
'BCC'
>>> print("Lattice is %.2f" %_handler.metadata['lattice'])
2.87
>>> print("hkl are: " , _handler.hkl)
hkl are: [][1,1,0],[2,0,0],[2,1,1],[2,2,0]]
>>> print("bragg edges are: ", _handler.bragg_edges)
bragg edges are: [2.0268, 1.4332, 1.1702, 1.0134]
It is also possible to display all metadata at once
>>> print(_handler)
===================================
Material: Fe
Lattice: 2.8664A
Crystal Structure: BCC
Using local metadata Table: True
===================================
h | k | l | d(A) | BraggEdge
===================================
1 | 1 | 0 | 2.0269 | 4.0537
2 | 0 | 0 | 1.4332 | 2.8664
2 | 1 | 1 | 1.1702 | 2.3404
2 | 2 | 0 | 1.0134 | 2.0269
===================================
In this example, we are retrieving the data for Fe and Al
>>> _handler = BraggEdge(material=['Al', 'Fe'], number_of_bragg_edges = 10)
>>> print("Crystal Structure of Al is: %s" %_handler.metadata['Crystal_structure']['Al'])
'FCC'
>>> print("Lattice of Al is: %.2f" %_handler.metadata['lattice']['Al'])
4.45
Here, we display the metadata for a list of material
>>> print(_handler)
=============================================
Material: Al
Lattice : 4.0460Å
Crystal Structure: FCC
Using local metadata Table: True
=============================================
h | k | l | d (Å) | BraggEdge
---------------------------------------------
1 | 1 | 1 | 2.33596 | 4.67192
2 | 0 | 0 | 2.02300 | 4.04600
2 | 2 | 0 | 1.43048 | 2.86095
2 | 2 | 2 | 1.16798 | 2.33596
3 | 1 | 1 | 1.21991 | 2.43983
3 | 3 | 1 | 0.92822 | 1.85643
3 | 3 | 3 | 0.77865 | 1.55731
4 | 0 | 0 | 1.01150 | 2.02300
4 | 2 | 0 | 0.90471 | 1.80943
4 | 2 | 2 | 0.82589 | 1.65177
=============================================
=============================================
Material: Fe
Lattice : 2.8664Å
Crystal Structure: BCC
Using local metadata Table: True
=============================================
h | k | l | d (Å) | BraggEdge
---------------------------------------------
1 | 1 | 0 | 2.02685 | 4.05370
2 | 0 | 0 | 1.43320 | 2.86640
2 | 1 | 1 | 1.17020 | 2.34041
2 | 2 | 0 | 1.01343 | 2.02685
2 | 2 | 2 | 0.82746 | 1.65492
3 | 1 | 0 | 0.90644 | 1.81287
3 | 2 | 1 | 0.76608 | 1.53216
3 | 3 | 0 | 0.67562 | 1.35123
3 | 3 | 2 | 0.61112 | 1.22224
4 | 0 | 0 | 0.71660 | 1.43320
=============================================
It is possible to display the full list of material available
>>> from neutronbraggedge.material_handler.retrieve_material_metadata import RetrieveMaterialMetadata
>>> retrieve_all_material = RetrieveMaterialMetadata(material = 'all')
>>> print(retrieve_all_material.full_list_material())
['C (diamond)' 'C (graphite)' 'Si' 'Ge' 'AlAs' 'AlP' 'AlSb' 'GaP' 'GaAs'
'GaSb' 'inconel' 'InP' 'InAs' 'InSb' 'MgO' 'SiC' 'CdS' 'CdSe' 'CdTe' 'ZnO'
'ZnS' 'PbS' 'PbTe' 'BN' 'BP' 'CdS' 'ZnS' 'AlN' 'GaN' 'InN' 'LiF' 'LiCl'
'LiBr' 'LiI' 'NaF' 'NaCl' 'NaBr' 'NaI' 'KF' 'KCl' 'KBr' 'KI' 'RbF' 'RbCl'
'RbBr' 'RbI' 'CsF' 'CsCl' 'CsI' 'Al' 'Fe' 'Ni' 'Cu' 'Mo' 'Pd' 'Ag' 'W'
'Pt' 'Au' 'Pb' 'TiN' 'ZrN' 'HfN' 'VN' 'CrN' 'NbN' 'TiC' 'ZrC0.97'
'HfC0.99' 'VC0.97' 'NC0.99' 'TaC0.99' 'Cr3C2' 'WC' 'ScN' 'LiNbO3' 'KTaO3'
'BaTiO3' 'SrTiO3' 'CaTiO3' 'PbTiO3' 'EuTiO3' 'SrVO3' 'CaVO3' 'BaMnO3'
'CaMnO3' 'SrRuO3' 'YAlO3']
In the case where the material is not in the list of material available, it is possible to define “on the fly” this material such as demonstrated here
>>> _handler = BraggEdge(new_material = {'name': "AlSiC", 'lattice': 2.8664, 'crystal_structure': 'BCC'})
>>> print(_handler)
===================================
Material: AlSiC
Lattice : 2.8664Å
Crystal Structure: BCC
Using local metadata Table: True
=============================================
h | k | l | d (Å) | BraggEdge
---------------------------------------------
1 | 1 | 0 | 2.02685 | 4.05370
2 | 0 | 0 | 1.43320 | 2.86640
2 | 1 | 1 | 1.17020 | 2.34041
2 | 2 | 0 | 1.01343 | 2.02685
2 | 2 | 2 | 0.82746 | 1.65492
3 | 1 | 0 | 0.90644 | 1.81287
3 | 2 | 1 | 0.76608 | 1.53216
3 | 3 | 0 | 0.67562 | 1.35123
3 | 3 | 2 | 0.61112 | 1.22224
4 | 0 | 0 | 0.71660 | 1.43320
=============================================
Lambda Calculation¶
>>> import neutronbraggedge.experiment_handler
- In order to convert a TOF range into lambda, you will need to provide:
- distance source-detector (in meters)
- detector offset (micros)
- tof array
First, you need to load your TOF range. You can either provide this array
>>> _tof_handler = TOF(tof = [9.6000E-07, 1.1200E-05, 2.1440E-05, 3.1680E-05], units = 'micros')
or by providing the name of an ascii file name where each tof is on its own row
>>> _tof_handler = TOF(filename = my_tof.txt, units = 'micros')
Then it is possible to calculate the Lambda array
>>> distance_source_detector_m = 16.09
>>> detector_offset_micros = 4500
>>> _exp = Experiment(tof = _tof_handler.tof_array, distance_source_detector_m = distance_source_detector_m, detector_offset_micros = detector_offset_micros)
>>> print(_exp.lambda_array)
[1.10664e-10, 1.109165e-10, 1.111682e-10, 1.114200e-10]
To export lambda into a csv file
>>> _exp.export_lambda(filename = 'my_lambda_file.txt')
Distance source-Detector Calculation¶
>>> import neutronbraggedge.experiment_handler
- In order to calculate the source-detector length, you must provide:
- detector offset (micros)
- tof array
- lambda array (Angstroms)
First, you need to load your TOF range. You can either provide this array
>>> _tof_handler = TOF(tof = [9.6000E-07, 1.1200E-05, 2.1440E-05, 3.1680E-05], units = 'micros')
or by providing the name of an ascii file name where each tof is on its own row
>>> _tof_handler = TOF(filename = my_tof.txt, units = 'micros')
Same thing with lambda array
>>> _lambda_handler = LambdaWavelength(data = [1.10664e-10, 1.109165e-10, 1.111682e-10, 1.114200e-10])
or by providing the name of an ascii file where each lambda is on its own row
>>> _lambda_handler = LambdaWavelength(filename = 'my_lambda.txt')
Then
>>> detector_offset_micros = 4500
>>> _exp = Experiment(tof = _tof_handler.tof_array, lambda_array = _lambda_handler.lambda, detector_offset_micros = detector_offset_micros)
>>> print(_exp.distance_source_detector_m)
16.09
Detector Offset Calculation¶
>>> import neutronbraggedge.experiment_handler
- In order to calculate the detector offsetr, you must provide:
- distance source-detector (m)
- tof array
- lambda array (Angstroms)
First, you need to load your TOF range. You can either provide this array
>>> _tof_handler = TOF(tof = [9.6000E-07, 1.1200E-05, 2.1440E-05, 3.1680E-05], units = 'micros')
or by providing the name of an ascii file name where each tof is on its own row
>>> _tof_handler = TOF(filename = my_tof.txt, units = 'micros')
Same thing with lambda array
>>> _lambda_handler = LambdaWavelength(data = [1.10664e-9, 1.109165e-9, 1.111682e-9, 1.114200e-9])
or by providing the name of an ascii file where each lambda is on its own row
>>> _lambda_handler = LambdaWavelength(filename = 'my_lambda.txt')
Then
>>> distance_source_detector_m = 14.09
>>> _exp = Experiment(tof = _tof_handler.tof_array, lambda_array = _lambda_handler.lambda, distance_source_detector_m = distance_source_detector_m)
>>> print(_exp.detector_offset_micros)
4500
Lattice Calculator¶
>>> from neutronbraggedge.lattice_handler.lattice import Lattice
In order to calculate the average lattice for a given material, the following information must be provided:
- material name
- crystal structure
- bragg edge array
example:
>>> o_lattice = Lattice(material = "Si",
crystal_structure = "FCC",
bragg_edge_array = [1.1, None, 3.3, 4.4])
The algorithm automatically calculate the hkl bragg edge sequence and the lattice
Those calculation can be display using
>>> o_lattice.display_hkl_bragg_edge()
hkl Bragg Edge Table
==================================================
hkl Bragg Edge Lattice
--------------------------------------------------
[1, 1, 1] 1.1000 0.9526
[2, 0, 0] nan nan
[2, 2, 0] 3.3000 4.6669
[2, 2, 2] 4.4000 7.6210
--------------------------------------------------
or
>>> o_lattice.display_lattice_statistics()
Lattice Statistics
==================================================
min: 0.95263
max: 7.62102
median: 4.66690
mean: 4.41352
std: 2.72825
--------------------------------------------------
or
>>> o_lattice.display_recap()
Recap
==================================================
Material: 'Si'
Crystal Structure: 'FCC'
--------------------------------------------------
hkl Bragg Edge Table
==================================================
hkl Bragg Edge Lattice
--------------------------------------------------
[1, 1, 1] 1.1000 0.9526
[2, 0, 0] nan nan
[2, 2, 0] 3.3000 4.6669
[2, 2, 2] 4.4000 7.6210
--------------------------------------------------
Lattice Statistics
==================================================
min: 0.95263
max: 7.62102
median: 4.66690
mean: 4.41352 +/- 0.0000
std: 2.72825
--------------------------------------------------
To retrieve the various values:
>>> print(o_lattice.hkl)
[[1, 1, 1], [2, 0, 0], [2, 2, 0], [2, 2, 2]]
>>> print(o_lattice.lattice_statistics)
{'mean': 4.4135187510990521, 'min': 0.95262794416288255, 'median': 4.6669047558312133, 'max': 7.6210235533030604, 'std': 2.7282507644454284}
>>> print(o_lattice.lattice_statistics['mean'])
4.4135187511