Special

The rimseval package has some special functions incorporated, which allow you to perform various analysis on your data and your RIMS setup.

Excel Workup file writer

Sometimes, it is useful to further process multiple evaluated spectra in an Excel file. You can use the rimseval.data_io.excel_writer.workup_file_writer() to create a workbook to continue working on your data. This workbook will contain integrals, \(\delta\)-values.

Here is an example usage for a file that would contain zirconium data. Note that \(\delta\)-values would usually be normalized to the most abundant 90Zr, however, we would like to normalize here to 94Zr. This is accomplished by setting the according normalization isotope of iniabu.

The following code assumes that crd is an instance of CRDFileProcessor and that a mass calibration has been performed and integrals have been set for zirconium isotopes.

from pathlib import Path

from rimseval.data_io import excel_writer
from rimseval.utilities import ini

# set Zr normalization isotope to Zr-94
ini.norm_isos = {"Zr": "Zr-94"}

# Write the excel file
my_output_file = Path("workup_file.xlsx")
excel_writer.workup_file_writer(crd, my_output_file)

Hist. ions per shot

For appropriate dead time correction we assume that all counts are Poisson distributed. This means that the histogram of number of ions per shot should follow the following distribution:

\[f(k) = \exp(-\mu) \frac{\mu^{k}}{k!}\]

Here, \(k\) is the number of ions per shot, \(f(k)\) is the frequency of ions in bin \(k\), and \(\mu\) is the number of ions divided by the number of shots.

There is a GUI function implemented that allows you to directly plot a histogram of ions per shot and compare it to the theoretical assumption. The following code shows you how to do this:

from pathlib import Path

from rimseval import CRDFileProcessor
from rimseval.guis import hist_nof_shots

my_file = Path("path/to/my_file.crd")
crd = CRDFileProcessor(crd)
crd.spectrum_full()

nof_ions_per_shot(crd)

This will open a matplotlib window and display the histogram.

Hist. time differences

To debug your system, i.e., to determine if the detector is ringing, it can be useful to determine the time difference between all ions in individual shots that have more than one ion arriving.

For every shot with more than one ion, we determine the time difference between these shots and create a histogram of all of these time differences. For a shot with \(n\) ions arriving, there will be \(\frac{(n-1)n}{2}\) time differences determined.

Warning

This is different from the previous LIONEval software, where time differences were only determined between subsequent ions. Here, all ion time differences are taken into account now.

To calculate and display this plot, some example code is given below. Note that max_ns=100 will set the upper limit of the x-axis to 100ns. This number is of course user-defined and can be omitted.

from pathlib import Path

from rimseval import CRDFileProcessor
from rimseval.guis import dt_ions

my_file = Path("path/to/my_file.crd")
crd = CRDFileProcessor(crd)
crd.spectrum_full()

dt_ions(crd, max_ns=100)

Integrals per package

If you have split your spectrum into packages and have defined integrals, this routine allows you to show a figure of all integrals per package versus the number of the package. This is especially interesting to find bursts in your measurements, i.e., when measuring with the desorption laser.

The following example shows how the plot is generated:

from pathlib import Path

from rimseval import CRDFileProcessor
from rimseval.guis import integrals_packages

my_file = Path("path/to/my_file.crd")
crd = CRDFileProcessor(crd)
crd.spectrum_full()

integrals_packages(crd)