PySpecTools FAQ

This lists some of the most commonly used functionality, and most easily forgotten functions accessible to PySpecTools.

Creating an experiment

There are two main ways to create an AssignmentSession object, by creating the class directly, or by using the AssignmentSession.from_ascii() function.

The latter method is a higher-level option, and allows spectra to be read in directly from a variety of file formats. The former requires you to pass the spectrum as a pandas DataFrame as a positional argument.

Creating an FTB file

You can create FTB files (batch files used by QtFTM) from two sources, depending on the type (either u-lines, or an existing catalog file) both of which wrap around the LineList.to_ftb method.

For u-lines, I recommend using the AssignmentSession.create_uline_ftb_batch, or if you want to run a DR batch, AssignmentSession.create_uline_dr_batch. In both cases, there are a few keyword arguments that allow you to specify the conditions to carry out the batch, for example, the number of shots (shots), the dipole moment used for the RF attenuation (dipole), and the minimum distance between lines (gap).

For other FTB files, say from a .cat or .lin file, you will want to create LineList objects first and then use the LineList.to_ftb().

Instrumental RFI removal

Strong RFI are common in broadband spectra, which arise from instrument clocks and other electronic components. The ones that are most prevalent for us in the McCarthy group are typically identified by two characteristics: often razor sharp, and many of them occurring at near-integer frequencies that are unlikely molecular in origin (e.g. 16500.0000 MHz). PySpecTools has three approaches to managing these instrumental artifacts, the simplest being an automatic removal that looks for near integer frequencies (pyspectools.spectra.analysis.detect_artifacts function).

The next level of complexity is based on calculating sub-harmonics, and sum/difference-frequency combinations of sub-harmonics, based on some clock frequency. For our Keysight arbitrary waveform generator, we’ve found the most prominent artifacts are derived from the 65 GHz clock. The LineList.from_clock method was created for this purpose, which generates multiples of this clock frequency, and calculates every possible sum/difference combination of pairs based on this list. AssignmentSession.process_clock_spurs provides an interface to this function, which will automatically assign features found this way - it is recommended to run this function at the end of analysis once molecular features are exhausted, as these clock frequencies can be incredibly dense.

Finally, the most manual method is to create a artifact LineList object via the LineList.from_artifacts method. This takes a list of frequencies that the user specifies, and uses these to assign features as artifacts.

Report generation

Once you’ve done all the analysis, the fun part begins: writing the damn paper. The AssignmentSession.finalize_assignments function is not as final as it sounds, and the current behavior is to generate an HTML report for sharing, as well as an overview. This function will also generate a LaTeX table in the reports folder, which summarizes the findings of your experiment.

Currently, PySpecTools does not automatically write the paper for you.