This page goes into more detail on the modules briefly introduced in the More Features section of the docs. Most of these modules are opened from the Modules menu; each section below also links to the relevant settings in the Configuration Reference.

Blend Dialog

When multiple predicted transitions overlap so closely that they cannot be resolved individually, LLWP can assign them together as a single blend instead of forcing you to pick just one. This only kicks in while the Transition method is used to define the active series (see Reference Series) and the Blend Width field (series_blendwidth in the configuration) is set to a value greater than zero.

Whenever you fit and assign a transition under these conditions, LLWP looks for other predicted transitions within Blend Width of the fitted position. If it finds more than one, it opens the Assign Blends dialog: a table listing every nearby prediction — sorted by distance to the fitted position — together with its frequency, logarithmic intensity, quantum numbers and source file, each with its own checkbox (checked by default). Press Assign Selected (or hit Enter) to add one new assignment per checked row, all at the fitted frequency, with a relative weight derived from each transition's predicted intensity (the strongest selected transition gets weight 1, weaker ones proportionally less) so later fitting routines can properly account for the blend. Select All (Ctrl+A) and Deselect All (Ctrl+U) toggle every row at once; Cancel discards the fit without assigning anything.

If every nearby prediction matches the query in series_blendquery, LLWP skips the dialog entirely and assigns all of them automatically — handy for well-understood, recurring blend patterns. A minimum relative intensity (series_blendminrelratio) can also be set to exclude very weak neighbours from consideration in the first place. See the Configuration Reference for both.

Assign All

Press Ctrl+Return, or right-click a plot and choose Fit all, to open Assign All — a batch version of the ordinary fit-and-assign workflow that fits every row of the active plot column in one go instead of one at a time. It works the same way in ASAP mode, fitting every row's cross-correlation peak instead.

It needs at least one (ideally two or more) already-assigned transitions in the series to work from: for every row that already has a matching assignment, it uses the observed-minus-predicted offset directly; for every other row, it predicts an offset by fitting a polynomial (up to Max Pol Degree) through the offsets of the assigned rows and evaluating it at that row's position. Each row is then automatically fit within Fit Width of its (real or predicted) position, using whichever fit method, peak direction and offset settings are currently active under Fit; Plot Width only controls how much surrounding context is shown, and Max FWHM bounds the fitted linewidth the same way it does for a normal fit.

Rows that already have an assignment are marked with a star and left alone. Click any other row's mini-plot to toggle whether it should be skipped; right-click it for bulk actions — ignore or include everything, or everything above/below the row you right-clicked — handy for accepting good fits at the start of a series and bulk-skipping the rest once the lineshape degrades too far out. Update re-fits with the current skip selection, and Assign All commits every row that wasn't skipped and fit successfully as a new assignment in one go. If the series uses the Transition method with a blend width and query configured (see the Blend Dialog), matching blends are expanded into multiple assignments automatically here too, without an interactive dialog, since Assign All is meant for unattended batch use.

Because there is no per-row confirmation dialog, a bad offset prediction can silently assign a whole run of transitions to the wrong lines. Always spot-check a few of the resulting assignments before trusting a large batch.
See the Configuration Reference for the assignall_* settings.

Blended Lines

Modules > Blended Lines opens the currently visible section of the active plot in its own window and lets you fit several overlapping peaks at once — useful whenever a blend is close enough to be resolved with the right lineshape, but too complex for the interactive Blend Dialog.

Click anywhere in the plot to add a peak; its initial center frequency and amplitude are taken from where you clicked. Every peak is fit with the lineshape chosen at the top of the window — Gauss, Lorentz or Voigt, plus their first and second derivatives, or an FID-based fit that simulates the free-induction-decay signal instead of fitting the lineshape directly. An optional baseline polynomial can be added: its rank controls how many terms it has (a rank of -1 disables the baseline entirely, 0 is a constant offset, 1 a line, and so on). Both the individual peaks and their sum are drawn, so you can see how well the combined model matches the data.

Once you are happy with the fit, the resulting center positions can be assigned directly with the Assign button, or routed to different quantum numbers via the accompanying dialog. This makes it possible to properly assign resolvable blends, since each peak gets its own individually fitted center frequency. Pressing Save appends every peak's fit parameters, in JSON, to ~/.llwp/.fit — handy for keeping a record of resolved blends independent of the assignment file.

See the Configuration Reference for all lineshape, color and baseline settings, including how to force every peak in a fit to share one common width.

Series Finder

Modules > Series Finder searches the loaded predictions for the strongest transitions matching a set of filters — often the fastest way to find a good starting point for a new series, or to locate transitions you haven't assigned yet.

Restrict the search with a frequency range, the four transition-type checkboxes (a-, b-, c- and x-type, classified by the parity of how quantum numbers 2 and 3 change between the upper and lower state), a custom query using any column of the loaded *.cat file (x, error, y, degfreed, elower, usd, tag, qnfmt, and the quantum number columns), and whether already-assigned transitions should be excluded. Matches are sorted by intensity; enabling Group transitions into series collapses transitions that only differ by the active series' incrementing quantum number into a single row with a count, so you see candidate series rather than every individual line.

Pressing Start next to a result transfers its quantum numbers into the currently active Reference Series tab and switches that tab to the Transition method.

Starting a series this way only sets the quantum numbers — it does not touch the Incr checkboxes or their values, so double-check which quantum numbers should actually increase for the new series before you start assigning.

Peakfinder

Modules > Peakfinder searches the experimental spectrum itself for peaks, independent of any predictions — useful for building peak lists, sanity-checking a spectrum's noise level, or finding lines that aren't in your catalog at all.

The peak-finding parameters (height, threshold, distance, prominence, width, and optionally a frequency range to restrict the search to) are the same ones scipy's find_peaks accepts, each configurable as a minimum, a minimum and maximum, or left off entirely; see the scipy documentation for what each one does — note that distance is measured in samples, not frequency units. Press Run Peakfinder to search, and check the plot to confirm the found peaks (marked in the plot) are sensible before relying on them. Enabling Only unassigned Lines hides any found peak that falls within the given uncertainty of an already-assigned line, leaving only the ones you might still be missing.

Clicking a row in the results table re-centers the main plot on that peak. Export Peaks writes every found peak (not just the ones currently shown in the results table) to a tab-separated CSV file.

Residuals

Modules > Residuals plots any expression of your assigned and predicted transitions against any other — the classic use case is observed-minus-calculated frequency residuals, but the same window doubles as a general quantum-number coverage plot.

It works on the intersection of the loaded *.cat and *.lin files, i.e. only transitions present in both. Enter any expression for the x- and y-axis, e.g. x_lin for the x-axis and x_lin - x_cat (or normalized by error_lin) for the usual obs−calc plot; a query field lets you restrict which transitions are shown, and a color field lets you color specific subsets differently. Hovering a point shows its quantum numbers and values. Check Blends to treat assignments that share the same observed frequency as one blended line, which adjusts their predicted frequency to the intensity-weighted average of the individual predictions before plotting.

Save exports every column of the currently plotted (merged) data as a tab-separated CSV — not just the two plotted expressions — handy if you want to do further analysis outside of LLWP.

Energy Levels

Modules > Energy Levels plots quantities from a Pickett-format *.egy file, e.g. reduced energy plots or simply energy against a quantum number. Load a file with the Open button, then enter any expression of the file's columns (qn1…qn6, iblk, indx, egy, err, pmix, we) for the x- and y-axis. As in the Residuals window, a query field restricts which levels are shown, a color field lets you highlight specific subsets, and hovering a point shows its details.

Create Report

Modules > Create Report summarizes your currently loaded (and visible) assignments and predictions into a plain-text report — a quick way to sanity-check a fit or a whole dataset without leaving LLWP. Optionally filter which assignments are included with a query, and use the Blend checkbox to average blended assignments the same way the Residuals window does.

The report lists the number of transitions and unique lines, how many are unweighted or duplicated, the covered frequency and quantum-number ranges, and — where a prediction matches — the number of matched assignments, the largest absolute and relative deviations, and the RMS, weighted RMS and average obs−calc. It finishes with a table breaking down how many transitions belong to each transition type (grouped by how much each quantum number changes between the upper and lower state), plus warnings if duplicate predictions, unmatched assignments or zero uncertainties were found.

The report is only displayed on screen — select and copy it out of the text field if you want to keep or share it.

Convolution

Plot > Sticks to Lineshape converts the predicted transitions — normally drawn as sharp sticks, since a *.cat file only stores a frequency and an intensity for each one — into a continuous simulated lineshape, so the predicted spectrum looks more like what you would actually measure.

Choose a Function (Gauss, Lorentz or Voigt, or Custom to type in your own kernel as comma-separated numbers) and its width(s), and optionally a derivative order for derivative-mode spectra. Stepwidth controls both the resolution the sticks are binned to before convolving and the spacing of the generated kernel; Kernel Width controls how far the kernel extends. Press Update to apply changes, or set Function back to Off to return to plain sticks.

See the Configuration Reference for every convolution_* parameter.

Scaling

Plot > Scaling Window is a small panel for the y-axis settings also listed under Plotting in the Configuration Reference: the y-scale mode (Per Plot, Global or Custom), the factor and exponent used to scale predicted intensities against experimental ones, and — in Custom mode — fixed y-axis limits. It exists purely for convenience; every field in it can equally well be set from the Configuration Reference.

Cmd Window

Modules > Cmd Window lets you run external command-line programs — typically your fitting (SPFIT) and prediction (SPCAT) programs, or any other command-line tool — directly from LLWP. Each tab holds one command; double-click empty space in the tab bar to add a new tab, double-click an existing tab to rename it, drag tabs to reorder them, and press the X on a tab to close it. Newline characters in a command are replaced with &&, so you can write several commands on separate lines and have them run in sequence.

Pressing Run executes the currently active tab's command and shows its combined output as a notification. Each tab has three checkboxes to reload the experimental, catalog and/or assignment files once the command finishes — handy for immediately seeing the effect of a fit.

The command runs with whatever working directory LLWP itself was started from, which might not be the folder your data lives in. Either add the relevant folders to your PATH, or prepend something like cd /path/to/my/folder && to your usual command.
The command runs synchronously and blocks the interface until it finishes — a long-running command will make LLWP unresponsive until it completes.

Command Line Dialog

Press Ctrl+K (View > Open Console) to open the Command Line Dialog, a small scripting console that runs arbitrary Python code inside the running LLWP process, with full access to its internal state. It is the most powerful — and least guarded — feature in LLWP: useful for quick one-off data manipulation, batch operations the GUI doesn't expose, or automating repetitive setup steps, but there is no sandboxing at all, so only run code you trust.

Like the Cmd Window, it is organized into tabs, each holding one Python snippet; double-click empty tab-bar space to add a tab, double-click an existing tab to rename it. Press Run (Ctrl+Return) to execute the active tab's code and close the dialog, or Cancel (Esc) to close without running anything. Anything the code prints, together with the executed code itself, is shown as a notification afterwards. Checking Run on startup for a tab makes LLWP execute that snippet automatically every time it starts — useful for personal setup code you always want applied.

Ctrl+Shift+K runs the currently selected tab's code directly, without opening the dialog at all — handy once you have a snippet you trust and just want to re-run it.

Edit Files Settings

Every loaded file has its own settings dialog, opened via the small ⚙ button next to it in Files > Edit Files. Alongside the file's color (set from the swatch next to it), it offers four expression-based fields that apply only to that one file, plus one or two checkboxes depending on the file type.

Filter is a query expression — using that file's own columns, e.g. the quantum number columns for a *.cat or *.lin file — that controls which of its rows are shown at all, independent of the file's overall Show/Hide toggle. x-Transformation and y-Transformation are expressions evaluated against the file's original, untransformed columns (available as x0 and y0) to compute new x/y values for every one of its rows — for example x0 * 2 to double every frequency in just this file, or y0 - 100 to shift its baseline — without touching the file on disk or any other loaded file. Leaving a field empty falls back to the untransformed value. Color Query works like the color fields in the Residuals and Energy Levels windows: one rule per line, formatted <hexcolor>;<query>, letting you color subsets of this file's rows differently on top of its base color.

Experimental files additionally offer Is Stick Spectrum, for peak-list-style data with no continuous baseline (see Loading Data and accepted Filetypes). Assignment (*.lin) files offer Convert IR data to MHz instead, for files whose frequencies are given in wavenumbers.

Each field only takes effect once applied: press the small Update button next to a field to apply just that one, or Apply at the bottom to apply all of them at once. Reset clears every field back to its default and applies that. Close simply closes the dialog; anything typed but never applied has no effect.

Save & Load Project

Files > Save Files as Project writes every currently loaded file's path together with its individual settings (color, visibility, and any per-file options set via the small cog icon in Files > Edit Files) to a single JSON project file, by default with the *.files extension. Files > Load Project reads such a file back and reopens every listed file with its saved settings, loading them all in parallel.

This is a quick way to save and restore a whole working session — the same set of spectrum, prediction and assignment files, with the same colors and per-file settings — without adding and configuring each file again by hand.

Saving Current Values

Files > Save current values as default (or the Save as default button in the Config window) writes the entire current configuration — including window layout, reference series, and every setting described in the Configuration Reference — to an .ini file in your ~/.llwp folder. LLWP reads this file on every startup, so saving here is how you make your current setup (colors, fit method, plot layout, reference series, …) the default for future sessions. The .ini file is plain text and can also be edited by hand if you prefer; see the Configuration section of the docs for details.

ASAP Workflow

Starting LLWP with asap instead of llwp switches to ASAP mode: a Loomis-Wood grid of cross-correlation plots instead of ordinary spectrum plots, with a simplified menu bar (Files, View, Fit, Info — no Plot or Modules menu) and its own set of dockable windows. See Automated Spectral Assignment Procedure for the theory behind it; this section walks through actually using it.

Load your experimental spectrum and the *.cat predictions for the unknown state as usual, and load the *.egy energy-level file of the known state from the Egy File tab of the ASAP Settings window. On the same tab, set Units Cat File to whatever factor converts your *.cat file's frequency unit into the unit your *.egy file uses (energy levels are always in wavenumbers by Pickett convention) — see the Configuration Reference for the exact default and when you need to change it.

Each column of the plot grid has its own tab in ASAP Settings, defined the same way as a normal Reference Series transition — a set of quantum numbers with increase/decrease or explicit-difference steps per row — plus one addition: the Upper State Level checkbox tells LLWP whether the quantum numbers you entered identify the upper or the lower level of the known state's transition, since that is the level looked up in the *.egy file to compute each row's cross-correlation. Use the Dupl. button to duplicate a tab when setting up several similar series.

The Settings tab controls how the correlation itself is computed: Weight Transitions weights each contributing prediction by its intensity rather than treating them all equally, Interpolation Stepsize sets the resolution of the correlation curve, and Scale to experimental Intensities (with its Exp/Cat Intensity Factor) normalizes the result to physically meaningful intensities instead of a curve simply scaled to a maximum of 1. The Filter tab restricts which predicted transitions of a series are used at all, either with a custom expression or a minimum relative-intensity threshold.

Press Calculate Cross-Correlation (Ctrl+Shift+Return) to (re)compute every row from the current settings. From there, fitting works exactly like ordinary LLWP: select the peak in a row with the mouse to fit and assign it, the same way you would fit an experimental peak. Assign All is available the same way too, for batch-fitting a whole column at once.

The ASAP Detail Viewer window updates automatically every time you fit a peak, showing one small plot per individual predicted transition that went into that row's correlation — each centered on its own predicted position after applying the fitted offset — so you can check that the transitions actually driving the correlation make sense. Enable Show only transitions used in cross-correlation to hide the ones filtered out by the Filter tab or the intensity threshold.

ASAP²

View > ASAP² opens a related but distinct tool: instead of cross-correlating one predicted transition at a time per Loomis-Wood row, it cross-correlates the experimental spectrum against the whole loaded catalog at once, looking for a single systematic frequency offset shared by many transitions simultaneously — useful when you expect one global shift (e.g. from an incorrect band origin) rather than a per-row pattern.

Set Width and Stepsize for the interpolation (both fall back to the main plot width and ASAP's own Interpolation Stepsize respectively, if left at 0), and optionally a Threshold to zero out low experimental intensity before it is multiplied into the result, or Plot logarithmic for the y-axis. Filter for transitions restricts which catalog lines (from the entire loaded *.cat file, not just one series) are included. Press Calc ASAP² to compute the combined correlation curve.

Select a range on the resulting plot with the mouse to fit a single offset within it (hold Shift to zoom instead, same as the main plot). Once a peak is fitted, Assign Transitions applies that one offset to every catalog transition that contributed to the calculation, creating one new assignment for each of them in a single step. Export saves the raw correlation curve as a tab-separated CSV.

Like Assign All, this assigns many transitions from a single fit with no per-transition confirmation — double-check a sample of the results, especially if the correlation peak is weak or ambiguous.