Getting started

The majority of APAV is split into 2 imports. The core import loads the main classes that represent data in APAV:

>>> import apav

Or more succinctly:

>>> import apav as ap

This brings in core containers such as Roi, Range, RangeCollection, and others. The second import loads most of the analysis processes, such as mass spectrum quantification routines, correlation histograms, density maps, etc:

>>> import apav.analysis

or shortened:

>>> import apav.analysis as anl

Importing data

Positional data

Positional data is stored and accessed in the Roi class. See the Roi page for detailed information. Loading positional data into Roi objects is done through its alternate constructors (i.e. @classmethod ) of the Roi object. For example, loading a POS file into a new Roi instance is simply:

>>> import apav as ap
>>> pos_roi = ap.Roi.from_pos(r"/path/to/experimental/data.pos")

Similarly for other file types:

>>> import apav as ap
>>> epos_roi = ap.Roi.from_epos(r"/path/to/experimental/data.epos")
>>> ato_roi = ap.Roi.from_ato(r"/path/to/experimental/data.ato")

The Roi instance can then be used directly, or passed to other analysis routines.

Ranging data

Mass ranging uses the dedicated container RangeCollection, which can read RNG or RRNG files in the same manor as the Roi class with positional data. That is, through @classmethod alternate constructors. For example, loading a RRNG file of a Si material:

>>> import apav as ap
>>> rng = ap.RangeCollection.from_rng(r"/path/to/ranges.rng")
>>> rrng = ap.RangeCollection.from_rrng(r"/path/to/ranges.rrng")

Now print a summary of the RRNG file:

>>> print(rrng)
Range data set
Number of ranges: 25
Mass range: 5.896 - 86.555
Number of unique elements: 5
Elements: ('Si', 'Cu', 'C', 'O', 'Cr')

Composition      Min (Da)    Max (Da)    Volume  Color (RGB 0-1)
-------------  ----------  ----------  --------  -----------------
C                  5.896        6.193   0.00878  (0.4, 0.0, 0.2)
C                 11.866       12.198   0.00878  (0.4, 0.0, 0.2)
Si                13.8745      14.241   0.02003  (0.8, 0.8, 0.8)
Si                14.407       14.643   0.02003  (0.8, 0.8, 0.8)
Si                14.912       15.171   0.02003  (0.8, 0.8, 0.8)
O2                15.858       16.48    0.02883  (0.0, 0.8, 1.0)
O2                17.838       18.304   0.02883  (0.0, 0.8, 1.0)
Cr                24.895       25.445   0.01201  (1.0, 0.2, 0.8)
Cr                25.771       27.211   0.01201  (1.0, 0.2, 0.8)
Si                27.856       28.595   0.02003  (0.8, 0.8, 0.8)
Si                28.826       29.255   0.02003  (0.8, 0.8, 0.8)
Si                29.783       30.252   0.02003  (0.8, 0.8, 0.8)
CrO               32.892       33.275   0.04083  (1.0, 0.0, 0.0)
CrO               33.898       34.802   0.04083  (1.0, 0.0, 0.0)
CrO               34.917       35.231   0.04083  (1.0, 0.0, 0.0)
CrO2              41.869       43.181   0.06966  (0.0, 1.0, 0.0)
Cr                49.612       50.526   0.01201  (1.0, 0.2, 0.8)
Cr                51.699       54.243   0.01201  (1.0, 0.2, 0.8)
Cr2O              57.819       61.159   0.05284  (0.0, 0.0, 1.0)
Cu                62.567       63.496   0.01181  (1.0, 0.4, 0.0)
Cu                64.619       65.548   0.01181  (1.0, 0.4, 0.0)
CrO               65.76        66.264   0.04083  (1.0, 0.0, 0.0)
CrO               67.622       69.574   0.04083  (1.0, 0.0, 0.0)
CrO               69.781       70.156   0.04083  (1.0, 0.0, 0.0)
CrO2              83.595       86.555   0.06966  (0.0, 1.0, 0.0)

Jupyter Notebooks

APAV works in any IDE/code editor, however, Jupyter Lab is recommended due to the ability to segment code execution into “cells”. This is most advantageous when dealing with datasets with large number of counts where loading data could take longer than the analysis itself. The ability to separate data import from analysis can save much time when code needs to be adjusted and re-executed. See http://jupyterlab.io/ for more information about Jupyter Lab, it is installable straight from pip or conda.

See this example notebook:

_images/notebook.png

Interactive plotting

Many classes in APAV can produce interactive plots. These plots are a combination of the pyqtgraph library and custom Qt widgets written just for APAV. All of these integrated plots are interactive with the mouse. By default “right-click” and drag will scale/zoom the plot and “single-click” and drag will move the plot. This can be changed in the right-click menu to be more usable on trackpads. Many interactive plots in APAV also include edit fields where the analysis can be adjusted in real-time.

Important

When APAV is being used interactively, such as in a Jupyter Notebook or IPython session, the interpreter must be told to integrate itself with the Qt event loop. Otherwise none of the interactive plots will work. This is as simple as including %gui qt at the top of the script.

As an example, here is the interactive correlation histogram window. Note that the %gui qt statements is only required in interactive sessions such as notebooks or ipython sessions:

>>> %gui qt
>>> import apav as ap
>>> import apav.analysis as anl
>>> roi = ap.Roi.from_epos
>>> corr_hist = anl.CorrelationHistogram(roi)
>>> plot = corr_hist.plot()
>>> plot.show()
_images/getting_started_corr.png

Note

Each interactive plot in APAV follows the same template. That is, the plot function returns a Qt object which must be assigned to an object or it will be garbage collected. Then the plot is shown using some_plot.show().

For example, this is valid:

plot = some_analysis.some_plot_function()
plot.show()

This is not:

some_analysis.some_plot_function().show()