Package: pyDABAX
pyDABAXpyDABAX aims to make the dabax database fast and easy accessible in python. Besides the access to the original
database, pyDABAX also provides high level functionality for important quantities like anomalous x-ray and neutron
form-factors, absorption edges, and compton scattering.InstallationPackageInstall with pip into your current environment.pipinstallpyDABAXThe following dependencies will be installed by pip:numpy <https://www.numpy.org/>TinyDB <https://github.com/msiemens/tinydb>astropy <https://github.com/astropy/astropy>pandasregexManual installationClone the current git repository:# Run in your terminal or conda terminalgitclonehttps://github.com/JulianMars/pyDABAX.gitYou can install pyDABAX from inside the git folder to your current environment using:# Install package using pipcd./pyDABAX.git# Change into the pyDABAX.git folderpipinstall.# Use the pip package manager to install pyDABAX in your current python environmentHigh-level interfaceGetting StartedCreate compound from string with fixed energy.frompydabaximport*Gold=Compound('Au',energy='10 keV',density='element')Obtain refractive index, x-ray form factor, and attenuation coefficient.print('Refractive index: δ + βj ={:.2e}'.format(Gold.deltabeta))print('Formfactor: f ={:.1f}'.format(Gold.f))print('Attenuation coefficient: mu ={:.3f}'.format(Gold.mu))Refractive index: δ + βj = 2.99e-05+2.21e-06j
Formfactor: f = 73.4+5.4j
Attenuation coefficient: mu = 2218.580 1 / cmIn jupyter notebooks Compounds and Elements have a html representation with useful parameters:frompydabaximport*Elements['O']OxygenSymbolOAtomic number8Atomic mass15.9994 uCharge0Atomic radius0.65 AngstromCovalent radius0.73 AngstromMelting point50.35 KBoiling point90.18 KEnergy8.047 keVq0.0 1 / AngstromX-ray formfactor8.052 electronKα10.5249 keVKα20.5249 keVKβ-bcoh(5.803+0j) fmbinc-σcoh4.232 barnσinc0.0008 barnabsorption (2200m/s)0.0002 barnPlot the q-dependent Form factor densityimportmatplotlib.pyplotaspltimportnumpyasnpfrompydabaximportCompound#q-spaceq=np.linspace(0,35,101)#Create CompoundsGold=Compound("Au",energy="8.047 keV",density="element")Water=Compound("H2O",energy="8047 eV",density="997 kg/m^3")Il=Compound('(CH6N)0.4(C8H15N2)0.6(CF3SO2)2N',density="mcgowan")#Set q of compoundsWater.q=qGold.q=qIl.q=q#Prepare plotfig,ax=plt.subplots(figsize=[3.375,3])ax.set_xlabel("q (1/Å)")ax.set_ylabel("f1 / V (e/Å)")#Obtain f from compounds and plotax.plot(Water.q,Water.f.real/Water.molecular_volume,label="H2O at 8.047 keV")ax.plot(Gold.q,Gold.f.real/Gold.molecular_volume,label="Gold at 8.047 keV")ax.plot(Il.q,Il.f.real/Il.molecular_volume,label="Ionic Liquid at 8.047 keV")_=ax.legend(prop={"size":8})Ions and Isotopespydabax supports all common isotopes and ions and fractional formulas. Compounds can be multiplied and added.Compound('2H2O',density="mcgowan")#DeuteriumCompound('OH-',density="mcgowan")Compound('YB2Cu3O6.93',density="element")#create 0.8 mol/kg aqueous CsCl solutioncp=0.8*Compound('CsCl')+55.555*Compound('H2O')UnitsAs the different flavors of x-ray analysis prefers different units, pyDABAX uses astropy to handle physical quantities
consisting of a value and a unit. Hence, unit handling should be flexible and coherent within the package.
First, set the preferred global units. Standard units are keV, Å, 1/Å, and °.
All inputs without explicitly specified unit and all outputs will have this unit.#Photon energyUnitSettings.UNIT_E='eV'#Momentum transferUnitSettings.UNIT_Q='1/nm'#WavelengthUnitSettings.UNIT_R='nm'#Total scattering anglesUnitSettings.UNIT_TTH='rad'Dosimetric quantities and compoundspyDABAX includes the  X-Ray Attenuation and Absorption for Materials of Dosimetric Interest (XAAMDI) database.
The Mass Energy Attenuation coefficient can be accessed viafrompydabaximport*print(Compound('YB2Cu3O6.93',density="element").mu_en)print(Compound('YB2Cu3O6.93',density="element").mup_en)Predefined compounds are predefined for convenience.frompydabaximport*importmatplotlib.pyplotaspltbone=Compounds['Bone, Cortical (ICRU-44)']bone.energy=xenblood=Compounds['Blood, Whole (ICRU-44)']blood.energy=xenfig,ax=plt.subplots(figsize=[3.375,3])ax.set_ylabel('Energy Attenuation Coeff. μ_en (1/cm)')ax.set_xlabel('Photon Energy (keV)')ax.set_yscale('log')ax.plot(xen,bone.mu_en,label='Bone, Cortical (ICRU-44)')ax.plot(xen,blood.mu_en,label='Blood, Whole (ICRU-44)')_=ax.legend(prop={"size":8})Accessing the X-ray database dabaxReturn a list of all available symbols:importpydabaxasdbxdbx.get_symbols()Show all available entries for carbon.importpydabaxasdbxdbx.get_keys("C")['atomic_number',
'symbol',
'element_symbol',
'name',
'charge',
'mass_number',
'mcgowan_volume',
'atomic_weight',
'nist_f1f2_chantler',
'nist_edges_chantler',
'cxro_f1f2_henke',
'nist_b_sears',
'dabax_AtomicConstants',
'dabax_ComptonProfiles',
'dabax_CrossSec_BrennanCowan',
'dabax_CrossSec_Compton_IntegrHubbell',
... ... ...,
'dabax_isf_xop_biggs_linap',
'dabax_JumpRatio_Elam',
'dabax_Neutron_SLCS_DataBooklet',
'dabax_Neutron_SLCS_NeutronNews',
'dabax_RadiativeRates_KrauseScofield',
'dabax_RadiativeRates_L_Scofield',
'dabax_XAFS_McKale_K-edge_R=2.5_A',
'dabax_XAFS_McKale_K-edge_R=4.0_A',
'dabax_XAFS_McKale_L-edge_R=2.5_A',
'dabax_XAFS_McKale_L-edge_R=4.0_A',
'dabax_XREmission_NIST',
'dabax_XREmission',
'dabax_XREmissionWeights',
'mcgowan_vol']Get the CXRO Henke table for f1 and f2.dbx.get_dabax("C","cxro_f1f2_henke")E (eV)	f1	f2
0	10.0000	-9999.00000	0.806885
1	10.1617	-9999.00000	0.851522
2	10.3261	-9999.00000	0.898628
3	10.4931	-9999.00000	0.948341
4	10.6628	-9999.00000	1.000800
...	...	...	...
497	28135.1000	6.00026	0.000515
498	28590.2000	6.00020	0.000496
499	29052.6000	6.00013	0.000478
500	29522.5000	6.00007	0.000460
501	30000.0000	6.00000	0.000443
502 rows × 3 columnsThe database file is in json format and can be thus viewed with all common json viewers.
Jupyter lab comes with an integrated json viewer.