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

Uploaded Source

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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.5 Windows x86-64

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

Uploaded CPython 2.7 Windows x86-64

fisx-1.1.0-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.0-cp27-cp27m-win32.whl (5.8 MB view details)

Uploaded CPython 2.7m Windows x86

File details

Details for the file fisx-1.1.0.zip.

File metadata

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

File hashes

Hashes for fisx-1.1.0.zip
Algorithm Hash digest
SHA256 7fd7eac6e654fce477669493f1a486581f4affbbef7c1eb182a6ef6d71e0ef8f
MD5 a91981bf88d15e82451f17004a8dc42a
BLAKE2b-256 a4a5ca62e649ab30f7874bd157b3ff44d0f7ef07c8694dc18539c27f40040f75

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for fisx-1.1.0.tar.gz
Algorithm Hash digest
SHA256 32a52e3300a322e11a4f74e49a00cebac0b38ea18ab6e9bd762d04f40e4474b4
MD5 9ee899077a41ef10c84da476a4c55c04
BLAKE2b-256 e908091e0c13225658127cf132fef169d42c005717394b995cbe9016ffe6f4ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fisx-1.1.0-cp35-none-win_amd64.whl
Algorithm Hash digest
SHA256 1a5a74fefd2199c81635b259d9fdb77946ec41fac0d63eb924c0e5d8231a7069
MD5 8075d495d8043c170548fd7c7c01f8bd
BLAKE2b-256 1842455d115093df43a0582ce1f31225ef947660ea5ac9de7f002c356469a206

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fisx-1.1.0-cp27-none-win_amd64.whl
Algorithm Hash digest
SHA256 877c0fd27efc59b7ae17fcf2401306b2256e9eca2ce04878fd7c9be094237a10
MD5 52a6b8b5da182ff8d627e4b4a9ccf576
BLAKE2b-256 6ab188738876925ed4beb2db35116fe9ae1d7352c22d5b16ed3d9908d8c42089

See more details on using hashes here.

File details

Details for the file fisx-1.1.0-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.0-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 ea213cee2b7fa3775001c1935b00c2aea31247a334286124cdc0248648b94e19
MD5 301f39557a18eb01a1d4dd2348a70f97
BLAKE2b-256 46fa9d227745128b01e92881955f1daf48448c57c92f80dc53e8ac0c124fa9f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fisx-1.1.0-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 85db57647ac31907eeb28b5839ee117d2650f3d3b5aa55902b693781948aea17
MD5 17673b7435fa70314b85381a48e08a6d
BLAKE2b-256 8d49f2ec007d1ef3d0fd2cb40dd603163b85fa9e36db83650edaa64d0d61ae9a

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