<p><strong>LNP Sample Characterization Service:</strong> You Provide LNP Samples, We Produce Particle Insights <strong><span style="text-decoration: underline;">learn more</span></strong><span style="text-decoration: underline;"><strong>></strong></span></p>

LNP Sample Characterization Service: You Provide LNP Samples, We Produce Particle Insights learn more>

LNP Axis

Last updated: July 10th 2025

Free and open-source analysis tool for easy analysis for lipid nanoparticle (LNP) data across multiple datasets.

LNP Axis for Mac
LNP Axis for Windows

Instructions

Get Started

Designed for use with AutoLNP results files, it allows users to generate both standardized and custom plots with user-defined sample names, analyzing features like LNP counts, Cargo and Ligand positivity and abundance plots and more for each field of view (FOV).

Download Results from CODI

  • LNP Axis uses data acquired with AutoLNP, analyzed in CODI using AI LNP Profiling analysis. To use it, data must be downloaded from CODI using the batch download feature (Figures 1-4).
  • As a start, go to your collaboration of choice in CODI and click the “Analysis results” button on the left side. AI LNP Profiling analysis runs automatically during AutoLNP runs and should populate a list of analyses in the results section (Figure 1).
  • Next, on the upper section click “batch download” (Figure 2):
  1. Scroll to datasets of choice and click the empty circles to fill them in (Figure 3).
  2. Change the name in the upper section (Figure 4, yellow box) then click “download X results” (2 here, Figure 4, pink box). A zip file will download automatically – do not navigate away. Open the zip file: There are four files. Save them anywhere – the file needed for LNP Axis ends in “results_batch.csv”.

Figure 1: Within a CODI collaboration, click this button to view analysis results

Figure 2: In the Analysis Results section of CODI, click the “Batch download” button at the top to enable checkboxes next to each analysis

Figure 3: Select each analysis/FOV for this experiment to download

Figure 4: Once all FOVs are selected, change the name in the yellow box to your experiment title, then click the download button (pink box) to download the results. Might take a few minutes- do not close the tab

Run GUI to Input and Re-Process Data

  • Download the appropriate GUI zip file for your operating system
  • Unzip the file and double click the application (Figure 5). The main window should appear (Figure 6). If you have an issue with the GUI opening automatically, troubleshooting steps are listed below under “Troubleshooting” and shown in Figures 30-34

Figure 5: Appearance of executable file to double-click to run (pink arrow) EXE within dist folder

  • First, click the blue “Browse” button (Figure 6, yellow arrow) on the main menu and navigate to the folder containing the results batch file from step 1D. Then, select the “Choose” button in Figure 7.

Figure 6: Main Window of the program. To browse through folders, click “Browse” (yellow arrow). Check/un-check Cargo and Ligand as per your experiment (pink arrow)

Figure 7: Browse through folders: Navigate to the folder with the results file and select “Choose” (pink arrow)

  • Then, check or un-check Ligand and Cargo boxes as per your experimental setup (Figure 6, pink arrow). Then click the green “Go” button. At any time, click the red “Cancel” button or exit out of the app to cancel this run.
  • The next window (“Experiment Details”) will appear (Figure 8) showing a row of each lane found in the results file chosen. This section is quite modifiable and user-defined (Figure 8, yellow arrows). The “Sample Name” will determine how the plots are generated: each Lane with the same Sample Name will be combined. Next, replace the “Chip #” (which stands for Chip number) of 1 with the Chip ID for each lane. This is optional but will be useful if you’d like to color any data by chip number.

Figure 8: Experiment Details window

Figure 9: The Sample Name column and Chip # column are just placeholders: please input your custom names and chip #s and click Go to run. This is an example of what the sheet looks like with Chip #s filled out

  • If the titles listed under “Lane” are adequate, check the box “Keep Lane Names as Sample Names”, which will automatically copy the Lane names and you can leave this column blank (Figure 9, blue arrow).
  • There is a checkbox under the table entitled “Show Graphs?” (Figure 9, pink arrow). You may uncheck this box if you don’t want the auto-generated plots to appear as pop-up windows.
  • When you are finished, click the green “Go” button (Figure 9).

Auto-Generated Plots

Cluster Count Swarm Plot (Figure 10):

  • The first pop-up plot that is generated is a dot plot (swarm plot, similar to the plots in GraphPad Prism) where the X axis is separated by the Sample Names input in the Experiment Details window, and the dots are colored by Chip. The Y axis shows the total number of LNPs per FOV. This is generated for all experiment types.

Figure 10: Cluster Count Swarm Plot example separated by Sample Name and colored by Chip number

Diameter Histogram (with or without Cargo Positivity split) (Figures 11-12):

  • The next pop-up plot that is generated is a histogram of LNP Diameter for each sample. If there is Cargo in the experiment, each sample will be split into Cargo-Positive (blue color) and Cargo-Negative (pink color). This is generated for all experiment types.

Figure 11: Diameter Histogram example in an experiment without Cargo

Figure 12: Diameter Histogram example in an experiment with Cargo

Scatter Plot showing Marker Abundance vs. Diameter (Figures 13-14):

  • The next pop-up(s) generated depend on the experiment type. If Cargo is imaged: For each sample, one plot will be generated,  showing each LNP as an individual data point on a Cargo Abundance (log) vs. Diameter (nm) axis, colored by Positivity. If Ligand is imaged, in each sample, one plot will be generated and saved locally as a png file, showing each LNP on a Ligand Abundance vs. Diameter (nm) axis, colored by Positivity as well. If both are imaged, both plots will save. The plot that appears will be for whichever is the last sample in the list. These plots will only be generated if Cargo and/or Ligand are selected in the first Window.

Figure 13: Scatter Plot showing Cargo Abundance vs. Diameter example

Figure 14: Scatter Plot showing Ligand Abundance vs. Diameter example

Cargo Positivity Swarm Plot (Figure 15):

  • The next pop-up is a dot plot where the X axis is separated by the Sample Names and the dots are colored by chip. The Y axis shows the percentage of Cargo-Positive LNPs in your sample. This plot will only generate if Cargo is imaged.

Figure 15: Cargo Positivity Swarm Plot example

Ligand Positivity Swarm Plot (Figure 16):

  • The next pop-up is a dot plot where the X axis is separated by the Sample Names and the dots are colored by chip. The Y axis shows the percentage of Ligand-Positive LNPs in your sample. This plot will only generate if Ligand is imaged.

Figure 16: Ligand Positivity Swarm Plot example

Cargo Abundance Swarm Plot (Figure 17):

  • The next pop-up is a dot plot where the X axis is separated by the Sample Names and the dots are colored by chip. The Y axis shows the abundance (~intensity, log) of Cargo-Positive LNPs This plot will only generate if Cargo is imaged.

Figure 17: Cargo Abundance Swarm Plot example

Custom Plots: Joint Scatterplot with Side Histograms

  • As the auto-generated plots pop up (or not, if you unchecked “Show Graphs?” earlier), another window appears, titled “Scatter Plot Generator” (Figure 18). This window generates X number of plots for X number of Samples as identified earlier (“Sample Name”). Every other aspect of the plots are customizable based on the menu items.

Figure 18: Scatter Plot Generator Window

  • These plots are generated on a per-LNP basis and do not have means, standard deviations, etc.
  • “X Axis Statistic” is the statistic that will be plotted on the X axis: in the example plot in Figure 19, it is “Number of localizations” (i.e., number of locs per LNP). See Table 2 for all of the X-Axis options.
  • “Split Statistic” is the optional statistic that will color the points. For example, in Figure 19, the split_Stat is “Chip #”, coloring each LNP by Chip. Another example could be Overall Positivity, in which LNPs will be colored based on their combinatorial positivity group (Only an option if both Ligand and Cargo are checked: Four groups – PanLNP only, PanLNP + Cargo, PanLNP + Ligand, and PanLNP + Cargo + Ligand). See all options in Table 3.
  • Select “None” for split_Stat if you want all LNPs to be one color
  • “yaxis_Stat” is the statistic that will be plotted on the Y axis: these options are the same as the X axis in Table 2
  • If you do not already have an idea of what the data is going to look like, or just want to auto-scale the axes, you may check the “Auto-Scale” checkbox. Otherwise, you can set the axis minimums and maximums, as well as plot transparency, in the rest of the window. See Figure 19 for a filled out window, and Figure 20 for the example plot generated from these settings. These plots will save in the same folder as the results file, and you may use this window to make as many as you’d like.
  • Once you are ready, click the “Plot” button at the bottom of the window. One of the generated plots will pop up: If you are unhappy with the plot, go back to the scatter plot window and change any of the settings.

Figure 19: Example filled-out scatter plot window

Figure 20: Scatter plot generated from Figure 19

Custom Plot: Violin Plots

  • After clicking either “Skip” in the Scatter Plot Generator window, a new window pops up titled “Violin Plot Generator” (Figure 21). This window generates one violin plot for the chosen statistic (Diameter (nm)) separated by Sample Name and optionally colored by the chosen Split Statistic.

Figure 21: Violin Plot Generator Window

  • “Plotting Statistic” is the statistic that will be plotted along the X axis: in Figure 22, it is Diameter (nm). The options are the same as in Table 2. 
  • There is an option to color based on a split_Stat (options in Table 3). 
  • Alternatively, you can set the split_Stat to None (Figure 22) which will color the violin plots by sample name (Figure 23).
  • You may also plot these data on a log scale – just check the “Log Scale?” checkbox below the “Split Statistic” dropdown menu.
  • Once you are ready, click the “Plot” button at the bottom of the window. If you want to skip ahead to a different plot type, click the “Skip” button. One of the generated plots will pop up: If you are unhappy with the plot, go back to the violin plot window and change any of the settings. 

Figure 22: Example filled-out violin plot window

Figure 23: Result from Figure 22

Custom Plot: Histograms

  • After clicking either “Skip” in the Violin Plot Generator window, a new window pops up titled “Histogram Generator” (Figure 24). This window generates one histogram for the chosen statistic (Plotting Stat) separated by Sample Name and optionally colored by Split Statistic (Tables 2-3).

Figure 24: Histogram Generator Window

  • “Plotting Statistic” is the statistic that will be plotted along the X axis: In Figure 25, the example is Circularity”. The options are the same as in Table 2.
  • There is an option to plot histograms using Counts or Percentage Stat Type (Figure 25).
  • There is an option to color based on a Split Statistic (options in Table 3). In Figure 27, the example is “Chip #”.
  • If you do not already have an idea of what the data is going to look like, or just want to auto-scale the axes, you may check the “Auto-Scale” checkbox. Otherwise, you can set the axis minimums and maximums, as well as plot transparency, in the rest of the window. See Figures 25 and 27 for filled out windows, and Figures 26 and 28 for the example plot generated from these settings. These plots will save in the same folder as the results file, and you may use this window to make as many as you’d like

Figure 25: Example filled-out histogram window

Figure 26: Output from Figure 25

  • You can also adjust the bin size (bin_size) – this value is not relevant for data plotted on log scaled axes. For example ranges and suggested starting bin sizes, see Table 4. (If you choose a bin size that is too large for the data, e.g. a bin size of 5 for circularity, the histogram will not generate).
  • You can adjust the transparency of your plots: 0 is transparent, 1 is fully opaque.

Figure 27: Another example filled-out histogram window

Figure 28: Output from Figure 27

Table 1: Auto-Generated Plots

Plotting StatisticPanLNP Only+Cargo+Ligand+Cargo +Ligand
Cluster Counts by Sample
Diameter Histogram
Cargo abundance (log) vs. Diameter
Ligand abundance vs. Diameter
Cargo positivity by FOV
Ligand positivity by FOV
Cargo abundance (log) by FOV

Table 2: Axis Statistics for Scatter Plot, Violin Plot, and Histogram Generators

Plotting StatisticPanLNP Only+Cargo+Ligand+Cargo +Ligand
Shape Descriptors (Skew, Circularity, Area, Discretized Area, Diameter, Length, Radius of Gyration)
Number of Localizations
PanLNP Abundance (Counts)
Cargo Abundance (DL, photons)
Cargo Abundance - log
Ligand Abundance (Counts)

Table 3: Split Statistic options for Scatter Plot, Violin Plot, and Histogram Generators

Split StatisticPanLNP Only+Cargo+Ligand+Cargo +Ligand
None
Chip #
FOV
Cargo Positivity
Ligand Positivity
Overall Positivity

Table 4: Suggested Starting Ranges and Bin Sizes for Histograms

Plotting StatisticUsual RangeSuggested Bin Size
Number of localizations0-400010-50
Skew / Circularity1-3 / 0-10.01-0.05
Density0-0.50.005-0.01
Cargo PositivityArea / Discretized Area0-10000001000+
Diameter / Length / Radius of Gyration0-10005-10
Counts in Channel X0-20001-10
Cargo abundance (log)0-50.1-0.5

An excel sheet is generated with summary statistics, with means, standard deviations, and medians. Tables 5 and 6 describe which statistics are generated.

Table 5: Summary Statistics Generated: Key Results Tab

TabPanLNP Only+Cargo+Ligand+Cargo +Ligand
Particle Diameter +/- SD -Separated also by positivity if Cargo or Ligand selected
PEG Locs/LNP +/- SD
Clusters/FOV +/- SD
Ligand Positivity (%) +/- SD
Cargo Positivity (%) +/- SD
Cargo + Ligand Double Positivity (%) +/- SD
Ligand Locs/LNP +/- SD

Table 6: Remaining Tabs Generated in Summary Statistics File

SheetPanLNP Only+Cargo+Ligand+Cargo +Ligand
Shape Stats by Sample (Mean, St Dev, Median)
Positivity Stats by Sample (Mean, St Dev, Median)
Shape Stats by Sample and Positivity (Mean, St Dev, Median)

Figure 29: Summary Stats Sheets

Troubleshooting

GUI Installation Troubleshooting

  • Many companies have protections in place to prevent viruses from being downloaded and run on company computers.
  • On a MacBook, the error message that pops up might appear like the one in Figure 30. In this case, navigate to the privacy & security settings in the MacBook and navigate to Developer Tools. 
    • Then, click the “+” button and navigate to the .exe file and add it to the list (Figure 31). Then attempt using the GUI again.
    • One more error message could pop up that looks like the one before. If so, navigate back to the privacy & security settings and scroll down to the bottom where it says “EVP2 Axis was blocked to protect your Mac.”. Click “Open Anyway” next to it (Figure 32).
  • On a Windows computer, an error message might pop up appearing like the one in Figure 33. Click “More information”, then “Run Anyway” (Figure 34).

Figure 30: Error message upon initially opening a GUI on a MacBook with virus protection

  • In the custom plots pop-up: Select one option under the “Split” choice in order to generate a plot. If the choice is left blank, no plots will appear. 
  • The pop-up plots might be small, depending on the screen size of your computer: please refer to the plots saved locally.

Figure 31: Adding the LNP Axis exe to Developer Tools allows the GUI to run

Figure 32: One further step may be required under Privacy & Security Settings upon opening LNP Axis after adding to the Developer Tools: click Open Anyway

Figure 33: Example error message from a Windows machine. Click “More info”

Figure 34: After clicking “More info”, click “Run Anyway”