Last active
December 4, 2015 17:01
-
-
Save pavoljuhas/32ac41c6ee0e95ff7caa to your computer and use it in GitHub Desktop.
Calculate PDF from a 2D slab with analytic baseline
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#------------------------------------------------------------------------------ | |
#$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ | |
#$Revision: 966 $ | |
#$URL: svn://cod.ibt.lt/cod/cif/1/1000041.cif $ | |
#------------------------------------------------------------------------------ | |
# | |
# This file is available in the Crystallography Open Database (COD), | |
# http://www.crystallography.net/ | |
# | |
# All data on this site have been placed in the public domain by the | |
# contributors. | |
# | |
data_1000041 | |
_chemical_name_systematic 'Sodium chloride' | |
_chemical_formula_structural 'Na Cl' | |
_chemical_formula_sum 'Cl Na' | |
_publ_section_title | |
; | |
Accuracy of an automatic diffractometer. measurement of the sodium | |
chloride structure factors | |
; | |
loop_ | |
_publ_author_name | |
'Abrahams, S C' | |
'Bernstein, J L' | |
_journal_name_full 'Acta Crystallographica (1,1948-23,1967)' | |
_journal_coden_ASTM ACCRA9 | |
_journal_volume 18 | |
_journal_year 1965 | |
_journal_page_first 926 | |
_journal_page_last 932 | |
_cell_length_a 5.62 | |
_cell_length_b 5.62 | |
_cell_length_c 5.62 | |
_cell_angle_alpha 90 | |
_cell_angle_beta 90 | |
_cell_angle_gamma 90 | |
_cell_volume 177.5 | |
_cell_formula_units_Z 4 | |
_symmetry_space_group_name_H-M 'F m -3 m' | |
_symmetry_Int_Tables_number 225 | |
_symmetry_cell_setting cubic | |
loop_ | |
_symmetry_equiv_pos_as_xyz | |
'x,y,z' | |
'y,z,x' | |
'z,x,y' | |
'x,z,y' | |
'y,x,z' | |
'z,y,x' | |
'x,-y,-z' | |
'y,-z,-x' | |
'z,-x,-y' | |
'x,-z,-y' | |
'y,-x,-z' | |
'z,-y,-x' | |
'-x,y,-z' | |
'-y,z,-x' | |
'-z,x,-y' | |
'-x,z,-y' | |
'-y,x,-z' | |
'-z,y,-x' | |
'-x,-y,z' | |
'-y,-z,x' | |
'-z,-x,y' | |
'-x,-z,y' | |
'-y,-x,z' | |
'-z,-y,x' | |
'-x,-y,-z' | |
'-y,-z,-x' | |
'-z,-x,-y' | |
'-x,-z,-y' | |
'-y,-x,-z' | |
'-z,-y,-x' | |
'-x,y,z' | |
'-y,z,x' | |
'-z,x,y' | |
'-x,z,y' | |
'-y,x,z' | |
'-z,y,x' | |
'x,-y,z' | |
'y,-z,x' | |
'z,-x,y' | |
'x,-z,y' | |
'y,-x,z' | |
'z,-y,x' | |
'x,y,-z' | |
'y,z,-x' | |
'z,x,-y' | |
'x,z,-y' | |
'y,x,-z' | |
'z,y,-x' | |
'x,1/2+y,1/2+z' | |
'1/2+x,y,1/2+z' | |
'1/2+x,1/2+y,z' | |
'y,1/2+z,1/2+x' | |
'1/2+y,z,1/2+x' | |
'1/2+y,1/2+z,x' | |
'z,1/2+x,1/2+y' | |
'1/2+z,x,1/2+y' | |
'1/2+z,1/2+x,y' | |
'x,1/2+z,1/2+y' | |
'1/2+x,z,1/2+y' | |
'1/2+x,1/2+z,y' | |
'y,1/2+x,1/2+z' | |
'1/2+y,x,1/2+z' | |
'1/2+y,1/2+x,z' | |
'z,1/2+y,1/2+x' | |
'1/2+z,y,1/2+x' | |
'1/2+z,1/2+y,x' | |
'x,1/2-y,1/2-z' | |
'1/2+x,-y,1/2-z' | |
'1/2+x,1/2-y,-z' | |
'y,1/2-z,1/2-x' | |
'1/2+y,-z,1/2-x' | |
'1/2+y,1/2-z,-x' | |
'z,1/2-x,1/2-y' | |
'1/2+z,-x,1/2-y' | |
'1/2+z,1/2-x,-y' | |
'x,1/2-z,1/2-y' | |
'1/2+x,-z,1/2-y' | |
'1/2+x,1/2-z,-y' | |
'y,1/2-x,1/2-z' | |
'1/2+y,-x,1/2-z' | |
'1/2+y,1/2-x,-z' | |
'z,1/2-y,1/2-x' | |
'1/2+z,-y,1/2-x' | |
'1/2+z,1/2-y,-x' | |
'-x,1/2+y,1/2-z' | |
'1/2-x,y,1/2-z' | |
'1/2-x,1/2+y,-z' | |
'-y,1/2+z,1/2-x' | |
'1/2-y,z,1/2-x' | |
'1/2-y,1/2+z,-x' | |
'-z,1/2+x,1/2-y' | |
'1/2-z,x,1/2-y' | |
'1/2-z,1/2+x,-y' | |
'-x,1/2+z,1/2-y' | |
'1/2-x,z,1/2-y' | |
'1/2-x,1/2+z,-y' | |
'-y,1/2+x,1/2-z' | |
'1/2-y,x,1/2-z' | |
'1/2-y,1/2+x,-z' | |
'-z,1/2+y,1/2-x' | |
'1/2-z,y,1/2-x' | |
'1/2-z,1/2+y,-x' | |
'-x,1/2-y,1/2+z' | |
'1/2-x,-y,1/2+z' | |
'1/2-x,1/2-y,z' | |
'-y,1/2-z,1/2+x' | |
'1/2-y,-z,1/2+x' | |
'1/2-y,1/2-z,x' | |
'-z,1/2-x,1/2+y' | |
'1/2-z,-x,1/2+y' | |
'1/2-z,1/2-x,y' | |
'-x,1/2-z,1/2+y' | |
'1/2-x,-z,1/2+y' | |
'1/2-x,1/2-z,y' | |
'-y,1/2-x,1/2+z' | |
'1/2-y,-x,1/2+z' | |
'1/2-y,1/2-x,z' | |
'-z,1/2-y,1/2+x' | |
'1/2-z,-y,1/2+x' | |
'1/2-z,1/2-y,x' | |
'-x,1/2-y,1/2-z' | |
'1/2-x,-y,1/2-z' | |
'1/2-x,1/2-y,-z' | |
'-y,1/2-z,1/2-x' | |
'1/2-y,-z,1/2-x' | |
'1/2-y,1/2-z,-x' | |
'-z,1/2-x,1/2-y' | |
'1/2-z,-x,1/2-y' | |
'1/2-z,1/2-x,-y' | |
'-x,1/2-z,1/2-y' | |
'1/2-x,-z,1/2-y' | |
'1/2-x,1/2-z,-y' | |
'-y,1/2-x,1/2-z' | |
'1/2-y,-x,1/2-z' | |
'1/2-y,1/2-x,-z' | |
'-z,1/2-y,1/2-x' | |
'1/2-z,-y,1/2-x' | |
'1/2-z,1/2-y,-x' | |
'-x,1/2+y,1/2+z' | |
'1/2-x,y,1/2+z' | |
'1/2-x,1/2+y,z' | |
'-y,1/2+z,1/2+x' | |
'1/2-y,z,1/2+x' | |
'1/2-y,1/2+z,x' | |
'-z,1/2+x,1/2+y' | |
'1/2-z,x,1/2+y' | |
'1/2-z,1/2+x,y' | |
'-x,1/2+z,1/2+y' | |
'1/2-x,z,1/2+y' | |
'1/2-x,1/2+z,y' | |
'-y,1/2+x,1/2+z' | |
'1/2-y,x,1/2+z' | |
'1/2-y,1/2+x,z' | |
'-z,1/2+y,1/2+x' | |
'1/2-z,y,1/2+x' | |
'1/2-z,1/2+y,x' | |
'x,1/2-y,1/2+z' | |
'1/2+x,-y,1/2+z' | |
'1/2+x,1/2-y,z' | |
'y,1/2-z,1/2+x' | |
'1/2+y,-z,1/2+x' | |
'1/2+y,1/2-z,x' | |
'z,1/2-x,1/2+y' | |
'1/2+z,-x,1/2+y' | |
'1/2+z,1/2-x,y' | |
'x,1/2-z,1/2+y' | |
'1/2+x,-z,1/2+y' | |
'1/2+x,1/2-z,y' | |
'y,1/2-x,1/2+z' | |
'1/2+y,-x,1/2+z' | |
'1/2+y,1/2-x,z' | |
'z,1/2-y,1/2+x' | |
'1/2+z,-y,1/2+x' | |
'1/2+z,1/2-y,x' | |
'x,1/2+y,1/2-z' | |
'1/2+x,y,1/2-z' | |
'1/2+x,1/2+y,-z' | |
'y,1/2+z,1/2-x' | |
'1/2+y,z,1/2-x' | |
'1/2+y,1/2+z,-x' | |
'z,1/2+x,1/2-y' | |
'1/2+z,x,1/2-y' | |
'1/2+z,1/2+x,-y' | |
'x,1/2+z,1/2-y' | |
'1/2+x,z,1/2-y' | |
'1/2+x,1/2+z,-y' | |
'y,1/2+x,1/2-z' | |
'1/2+y,x,1/2-z' | |
'1/2+y,1/2+x,-z' | |
'z,1/2+y,1/2-x' | |
'1/2+z,y,1/2-x' | |
'1/2+z,1/2+y,-x' | |
loop_ | |
_atom_type_symbol | |
_atom_type_oxidation_number | |
Na1+ 1.000 | |
Cl1- -1.000 | |
loop_ | |
_atom_site_label | |
_atom_site_type_symbol | |
_atom_site_symmetry_multiplicity | |
_atom_site_Wyckoff_symbol | |
_atom_site_fract_x | |
_atom_site_fract_y | |
_atom_site_fract_z | |
_atom_site_occupancy | |
_atom_site_attached_hydrogens | |
_atom_site_calc_flag | |
Na1 Na1+ 4 a 0. 0. 0. 1. 0 d | |
Cl1 Cl1- 4 b 0.5 0.5 0.5 1. 0 d | |
_refine_ls_R_factor_all 0.022 | |
_cod_database_code 1000041 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy | |
import copy | |
from diffpy.Structure import loadStructure, Lattice | |
from diffpy.srreal.pdfcalculator import PDFCalculator, DebyePDFCalculator | |
from diffpy.srreal.pdfbaseline import makePDFBaseline, PDFBaseline | |
from matplotlib.pyplot import * | |
# load bulk crystal structure | |
nacl = loadStructure('NaCl.cif') | |
nacl.Uisoequiv = 0.004 | |
numdensity = len(nacl) / nacl.lattice.volume | |
cell_height = nacl.lattice.c | |
# Convert bulk structure to a slab with a thickness | |
# of the lattice parameter c. We do this by assuming | |
# new unit cell with parameter c much larger than the | |
# PDF range. | |
nacl_slab = copy.copy(nacl) | |
slab_lattice = copy.copy(nacl.lattice) | |
slab_lattice.c = 200 | |
# this adjusts fractional coordinates so that atom | |
# separation along c remain the same. | |
nacl_slab.placeInLattice(slab_lattice) | |
# analytic shape function for an infinite slab of thickness t | |
def slab_shape_function(r, thickness): | |
x = numpy.asarray(r, dtype=float).reshape(-1) | |
fshape = numpy.zeros_like(r) | |
lo = x < thickness | |
hi = ~lo | |
fshape[lo] = 1 - 0.5 * x[lo] / thickness | |
fshape[hi] = + 0.5 * thickness / x[hi] | |
if numpy.isscalar(r): | |
fshape = numpy.asscalar(fshape) | |
return fshape | |
# PDF baseline due to the sample shape: | |
def slab_pdf_baseline(r, thickness): | |
ybase = -4 * numpy.pi * r * numdensity * slab_shape_function(r, thickness) | |
return ybase | |
# makePDFBaseline allows to use the new baseline function with PDFCalculator. | |
# Cover your eyes - it only works once per Python session. Do nothing if | |
# already done. | |
if not 'slab_baseline' in PDFBaseline.getRegisteredTypes(): | |
makePDFBaseline('slab_baseline', | |
slab_pdf_baseline, thickness=cell_height) | |
# standard real-space PDF calculator | |
pdfc = PDFCalculator(rmax=40, qmax=25) | |
# real-space PDF calculator setup to use slab baseline function | |
pdfcslab = pdfc.copy() | |
pdfcslab.baseline = 'slab_baseline' | |
# PDF calculator using Debye summation and an intensity cutoff below qmin | |
dbpdfc = DebyePDFCalculator(rmax=40, qmax=25, qmin=1) | |
# plot it | |
clf() | |
a1 = subplot(2, 1, 1) | |
a1.plot(*pdfc(nacl)) | |
a1.plot(*pdfc(nacl_slab)) | |
a1.set_title('Bulk and slab PDF with standard baseline') | |
a2 = subplot(2, 1, 2) | |
a2.plot(*pdfcslab(nacl_slab)) | |
a2.plot(*dbpdfc(nacl_slab)) | |
a2.set_title('PDF with analytic slab baseline and PDF from Debye summation') | |
show() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment