Skip to main content

Quantitative X-Ray Fluorescence Analysis Support Library

Project description

Main development website: https://github.com/vasole/fisx

https://travis-ci.org/vasole/fisx.svg?branch=master https://ci.appveyor.com/api/projects/status/github/vasole/fisx?branch=master&svg=true

This software library implements formulas to calculate, given an experimental setup, the expected x-ray fluorescence intensities. The library accounts for secondary and tertiary excitation, K, L and M shell emission lines and de-excitation cascade effects. The basic implementation is written in C++ and a Python binding is provided.

Account for secondary excitation is made via the reference:

D.K.G. de Boer, X-Ray Spectrometry 19 (1990) 145-154

with the correction mentioned in:

D.K.G. de Boer et al, X-Ray Spectrometry 22 (1993) 33-28

Tertiary excitation is accounted for via an appproximation.

The accuracy of the corrections has been tested against experimental data and Monte Carlo simulations.

License

This code is relased under the MIT license as detailed in the LICENSE file.

Installation

To build the library for python use, just use the python setup.py install approach. It is convenient (but not mandatory) to have cython >= 0.17 installed.

Testing

To run the tests after installation run:

python -m fisx.tests.testAll

Example

There is a web application using this library for calculating expected x-ray count rates.

This piece of Python code shows how the library can be used via its python binding.

from fisx import Elements
from fisx import Material
from fisx import Detector
from fisx import XRF

elementsInstance = Elements()
elementsInstance.initializeAsPyMca()
# After the slow initialization (to be made once), the rest is fairly fast.
xrf = XRF()
xrf.setBeam(16.0) # set incident beam as a single photon energy of 16 keV
xrf.setBeamFilters([["Al1", 2.72, 0.11, 1.0]]) # Incident beam filters
# Steel composition of Schoonjans et al, 2012 used to generate table I
steel = {"C":  0.0445,
         "N":  0.04,
         "Si": 0.5093,
         "P":  0.02,
         "S":  0.0175,
         "V":  0.05,
         "Cr":18.37,
         "Mn": 1.619,
         "Fe":64.314, # calculated by subtracting the sum of all other elements
         "Co": 0.109,
         "Ni":12.35,
         "Cu": 0.175,
         "As": 0.010670,
         "Mo": 2.26,
         "W":  0.11,
         "Pb": 0.001}
SRM_1155 = Material("SRM_1155", 1.0, 1.0)
SRM_1155.setComposition(steel)
elementsInstance.addMaterial(SRM_1155)
xrf.setSample([["SRM_1155", 1.0, 1.0]]) # Sample, density and thickness
xrf.setGeometry(45., 45.)               # Incident and fluorescent beam angles
detector = Detector("Si1", 2.33, 0.035) # Detector Material, density, thickness
detector.setActiveArea(0.50)            # Area and distance in consistent units
detector.setDistance(2.1)               # expected cm2 and cm.
xrf.setDetector(detector)
Air = Material("Air", 0.0012048, 1.0)
Air.setCompositionFromLists(["C1", "N1", "O1", "Ar1", "Kr1"],
                            [0.0012048, 0.75527, 0.23178, 0.012827, 3.2e-06])
elementsInstance.addMaterial(Air)
xrf.setAttenuators([["Air", 0.0012048, 5.0, 1.0],
                    ["Be1", 1.848, 0.002, 1.0]]) # Attenuators
fluo = xrf.getMultilayerFluorescence(["Cr K", "Fe K", "Ni K"],
                                     elementsInstance,
                                     secondary=2,
                                     useMassFractions=1)
print("Element   Peak          Energy       Rate      Secondary  Tertiary")
for key in fluo:
    for layer in fluo[key]:
        peakList = list(fluo[key][layer].keys())
        peakList.sort()
        for peak in peakList:
            # energy of the peak
            energy = fluo[key][layer][peak]["energy"]
            # expected measured rate
            rate = fluo[key][layer][peak]["rate"]
            # primary photons (no attenuation and no detector considered)
            primary = fluo[key][layer][peak]["primary"]
            # secondary photons (no attenuation and no detector considered)
            secondary = fluo[key][layer][peak]["secondary"]
            # tertiary photons (no attenuation and no detector considered)
            tertiary = fluo[key][layer][peak].get("tertiary", 0.0)
            # correction due to secondary excitation
            enhancement2 = (primary + secondary) / primary
            enhancement3 = (primary + secondary + tertiary) / primary
            print("%s   %s    %.4f     %.3g     %.5g    %.5g" % \
                               (key, peak + (13 - len(peak)) * " ", energy,
                               rate, enhancement2, enhancement3))

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

fisx-1.1.1.zip (5.8 MB view details)

Uploaded Source

fisx-1.1.1.tar.gz (5.7 MB view details)

Uploaded Source

Built Distributions

fisx-1.1.1-cp35-none-win_amd64.whl (5.9 MB view details)

Uploaded CPython 3.5 Windows x86-64

fisx-1.1.1-cp27-none-win_amd64.whl (5.9 MB view details)

Uploaded CPython 2.7 Windows x86-64

fisx-1.1.1-cp27-none-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (6.5 MB view details)

Uploaded CPython 2.7 macOS 10.10+ intel macOS 10.10+ x86-64 macOS 10.6+ intel macOS 10.9+ intel macOS 10.9+ x86-64

fisx-1.1.1-cp27-cp27m-win32.whl (5.8 MB view details)

Uploaded CPython 2.7m Windows x86

File details

Details for the file fisx-1.1.1.zip.

File metadata

  • Download URL: fisx-1.1.1.zip
  • Upload date:
  • Size: 5.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for fisx-1.1.1.zip
Algorithm Hash digest
SHA256 f227e35b441832efc3fc59477f079943d61fd0691a7f47d8b149cd2a4a1384be
MD5 a90e4ff2c96127784e8bf817febdc132
BLAKE2b-256 08de2f14200a6be974febd09896ec0671e062b71ec996fa4675ec98cddceac25

See more details on using hashes here.

File details

Details for the file fisx-1.1.1.tar.gz.

File metadata

  • Download URL: fisx-1.1.1.tar.gz
  • Upload date:
  • Size: 5.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for fisx-1.1.1.tar.gz
Algorithm Hash digest
SHA256 51d6429b6ebe39ee4ca4638f2eac14774d45a70ae0fe6531dada1039b5215cfa
MD5 273fa35454917841b70c5fc116cf9a0f
BLAKE2b-256 2790a423e607bbe3452f938c32678e251429a94b8a3cb5b5888833b8b35bb9ad

See more details on using hashes here.

File details

Details for the file fisx-1.1.1-cp35-none-win_amd64.whl.

File metadata

File hashes

Hashes for fisx-1.1.1-cp35-none-win_amd64.whl
Algorithm Hash digest
SHA256 14fc8b48d4c1592d0cdc04aed995b48105fbd35114ce9a8c9dd48674c52d95a0
MD5 bd759f39cec3e13a828fc1ce49c390c0
BLAKE2b-256 4c5cb0635c01ec3c9a1ec69e3d2bd0f492b0aab92b37a94f79f96025da3e5e2b

See more details on using hashes here.

File details

Details for the file fisx-1.1.1-cp27-none-win_amd64.whl.

File metadata

File hashes

Hashes for fisx-1.1.1-cp27-none-win_amd64.whl
Algorithm Hash digest
SHA256 9338e6fafe8d18cac412309f57253a31ad7370a4761b3c059dafe6795424b9e3
MD5 719c59c574eaa5ead89abb9d052c2b89
BLAKE2b-256 8d0e00774eae1258a9e39c33a23f5936ab2910df53c4b934e91c8e68b87f0ffd

See more details on using hashes here.

File details

Details for the file fisx-1.1.1-cp27-none-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for fisx-1.1.1-cp27-none-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 1eac048f41749643dbf960a7b0e3fad9862c584541b826dd38b9cf636776cd96
MD5 d608c15433d7d0d7e751d639a33ff30d
BLAKE2b-256 fb476a0f619662515d8c8e688eb4b054b1bdfc147499d7da590b247c2bf3ca7b

See more details on using hashes here.

File details

Details for the file fisx-1.1.1-cp27-cp27m-win32.whl.

File metadata

File hashes

Hashes for fisx-1.1.1-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 8a94df06da8b5c73fd9ec935e82762e863bc1167debc093eef16ec37e0f0c12e
MD5 a6479a544e5064d40e0eff4707833cc9
BLAKE2b-256 7f1853025b346ab188e9791a1edb7e96233cdcf1c1680c57f44e56e04d5f8ad1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page