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 scondary 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.0.7.zip (5.8 MB view details)

Uploaded Source

fisx-1.0.7.tar.gz (5.6 MB view details)

Uploaded Source

Built Distributions

fisx-1.0.7-cp35-none-win_amd64.whl (5.8 MB view details)

Uploaded CPython 3.5 Windows x86-64

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

Uploaded CPython 2.7 Windows x86-64

fisx-1.0.7-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

File details

Details for the file fisx-1.0.7.zip.

File metadata

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

File hashes

Hashes for fisx-1.0.7.zip
Algorithm Hash digest
SHA256 c68e78f9efcae75826c7dbd16332b3cc337bacc822b7968a9680909eab07a25e
MD5 cc01ca6cbc7bd61f748a0235a8136d7c
BLAKE2b-256 5f40587250dee596dfc6feafa41e7c9d0653ece29e839a3b2feeae84452e2005

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for fisx-1.0.7.tar.gz
Algorithm Hash digest
SHA256 5a67b3bd41be69996dda8fd4c540af430743131985cb9115a0d19083c9c6757a
MD5 15349bb0bfb1eda085b3bbb8ce757634
BLAKE2b-256 9ad5528df44e21730a96a47be95f7ef87384eede8c13c05d62da9f02782d1275

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fisx-1.0.7-cp35-none-win_amd64.whl
Algorithm Hash digest
SHA256 309362ba3107db33ae3ac0db194abcb762fd6f7ff832af19f33acb4e7a332491
MD5 5fe965bb437eca4f15b0a7d92d433a7a
BLAKE2b-256 dd74df715a0c877a70cc700228535a97ec94887654149d8e11103df73ab4eaee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fisx-1.0.7-cp27-none-win_amd64.whl
Algorithm Hash digest
SHA256 202ff67a9c814adee39da4790059577079bf9a78b449115921fd6f9d0164b5f6
MD5 d83f853882c7be56803a74f797f1084f
BLAKE2b-256 4e4d1fd6d30f390aa361369533ef7abd82f66ae2ecb51a4e28900cec65afa235

See more details on using hashes here.

File details

Details for the file fisx-1.0.7-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.0.7-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 fc805c9b9813913a095d5a4931ef5ffa76e0cba12086fed696380aa260ae5c49
MD5 a8599aadc93a3fa8d56910380b995e6f
BLAKE2b-256 8a1c762f281b597044be7af5adb2391757a8ad291a10347a02d6e91fdfc04308

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