Source code for neutronbraggedge.braggedges_handler.braggedge_calculator

import sys
import numpy as np
import configparser
from .structure_handler import StructureHandler
from ..config import config_file as config_config_file


[docs]class BraggEdgeCalculator(object): """ This class calculates the h, k, and l values allowed for the given structure. The number of h,k,l set is by default set to 10 but can be changed Args: structure_name: default 'FCC'. Must be either ['FCC', 'BCC'] """ def __init__(self, structure_name="FCC", lattice=None, number_of_set=10): self.structure = structure_name #only used to test validity of input self._structure = structure_name self._number_of_set = number_of_set self.lattice = lattice @property def structure(self): return self._structure @structure.setter def structure(self, structure_name): _config_file = config_config_file config_obj = configparser.ConfigParser() config_obj.read(_config_file) self._list_structure = config_obj['DEFAULT']['list_structure'] if not (structure_name in self._list_structure): raise ValueError("Structure name should be in the list " , self._list_structure) self._structure = structure_name def calculate_hkl(self): _structure_handler = StructureHandler(structure = self._structure, number_of_set = self._number_of_set) self.hkl = _structure_handler.hkl
[docs] def calculate_bragg_edges(self): """This calculate the d_spacing and bragg edges of the various h, k and l""" if self.lattice is None: raise ValueError _bragg_edges_array = [] _d_spacing = [] for _hkl in self.hkl: _result = self._calculate_individual_bragg_edge(lattice = self.lattice, h = _hkl[0], k = _hkl[1], l = _hkl[2]) _d_spacing.append(_result) _bragg_edges_array.append(2. * _result) self.bragg_edges = _bragg_edges_array self.d_spacing = _d_spacing
def _calculate_individual_bragg_edge(self, lattice=None, h=1, k=1, l=1): _den = np.sqrt(h**2 + k**2 + l**2) return float(lattice)/_den
#def _calculate_individual_lattice(self, h=1, k=1, l=1, bragg_edge_value=0, bragg_edge_error=0): #_num = np.sqrt(h**2 + k**2 + l**2) #_value = float(bragg_edge_value/2.)*_num #_error = float(bragg_edge_error/2.)*_num #return [_value, _error] #def calculate_lattice_array(self, exp_bragg_edge_value, exp_bragg_edge_error=None): #"""calculate the lattice given the hkl and bragg edge value""" #_lattice_array = [] #_lattice_error_array = [] #for _index, _hkl in enumerate(exp_bragg_edge_value): #_hkl = self.hkl[_index] #_bragg = exp_bragg_edge_value[_index] #if exp_bragg_edge_error is not None: #_error = exp_bragg_edge_error[_index] #else: #_error = 0 #[_result, _result_error] = self._calculate_individual_lattice(h = _hkl[0], #k = _hkl[1], #l = _hkl[2], #bragg_edge_value = _bragg, #bragg_edge_error = _error) #_lattice_array.append(_result) #_lattice_error_array.append(_result_error) #self.lattice_experimental = _lattice_array #self.lattice_error_experimental = _lattice_error_array #self.average_lattice_experimental = self._calculate_average_lattice_experimental() #def _calculate_average_lattice_experimental(self): #_lattice_exp = self.lattice_experimental #_lattice_error_exp = self.lattice_error_experimental #_mean_value = np.mean(_lattice_exp) #_sum_error = 0 #for _error in _lattice_error_exp: #_sum_error += _error * _error #_mean_error = np.sqrt(_sum_error) #self.mean_lattice_experimental = [_mean_value, _mean_error]