Published November 5, 2026
| Version v1
Dataset
Open
SIMION-Based Modeling of Picosecond Ion Pulses from a Nanotip Using Laser-Stimulated Desorption - Dataset
Description
Dataset Description
This data repository provides the underlying data and plotting routines associated with the manuscript titled "SIMION-Based Modeling of Picosecond Ion Pulses from a Nanotip Using Laser-Stimulated Desorption" by Redl et al., published in Physical Review Applied (2026). DOI: https://doi.org/10.1103/gfl6-fh1k
In the manuscript, we present a SIMION-based simulation of desorbed H+ ion emission and transport from tungsten nanotips. The simulation combines nanoscale electrostatic fields at the apex with macroscopic ion optics. Using deliberately broad initial energy and angular distributions, we show that picosecond ion pulses emerge predominantly from trajectory selection rather than from intrinsic desorption dynamics. The simulated ion pulses agree quantitatively with experimentally measured time-of-flight spectra. A correlation between detector impact position and ion flight time is identified, which enables substantial pulse narrowing through spatial filtering. The results demonstrate that ion transport is the dominant limitation to temporal resolution in current nanotip-based LSD ion sources.
All data files are released under the Creative Commons Attribution 4.0 International (CC-BY) license, while all code files are distributed under the MIT license.
Note on SIMION potential array files: The refined SIMION potential arrays (
.PA0-.PA6, about 46 GB per tip displacement and 740 GB in total) are not part of this dataset. They can only be read with SIMION or its PA.py module, which is licensed under the SIMION terms and therefore cannot be published here, and they can be fully regenerated from the SIMION input files in simulation (including the unrefined coarse arrays LSD_.PA#). AnalysisPA.py contains a dummy PA class instead of PA.py. All data and plots can still be reproduced without SIMION, because the electrode geometries and potentials needed for the figures are provided as pre-extracted numpy arrays (.npy, see below). If you own a SIMION license, regenerate the potential arrays and replace the dummy PA class to re-extract the arrays.Files
The dataset is split into several zip files, so that the parts can be downloaded separately. Extract all of them into the same folder to obtain the layout described below. All paths inside the zip files are relative to this folder.
code_and_figures.zip- all scripts, this readme,requirements.txt,plots,exp,blenderandnp_tmp. This is enough to reproduce Figs. 3, 5 and 6PAs.zip- extracted potential arrays, needed for Figs. 1 and 2LSD_initial_start_stop.zip- ion starting positions, needed for Fig. 2(a)LSD_0x_PAs.zip- trajectories of the reference configuration (no tip displacement), needed for Figs. 2(b) and 4LSD_<d>x_PAs.zip,LSD_<d>z_PAs.zip- trajectories for all other tip displacements, only needed to regenerate the files innp_tmp(Figs. 3, 5 and 6)LSD_0x_PAs_supplementary.zip- drift tube voltage and grid size variations (Sec. IV)simulation.zip- SIMION input files to regenerate the simulations
Dataset Layout
Analysis.py- parsing of simulation and experimental data files, filtering, fitting and FWHM estimationAnalysis3D.py- triangulation and area calculation of ion starting positions (effective emission area)AnalysisPA.py- reading and plotting of potential arrays (electrode geometry and potentials), with a dummyPAclass (see note above)Paper.py- helper functions for pretty plotting (figure size, labels, saving, laser packet drawing)PlotStyles.py- loads the matplotlib style sheetpaper.mplstyle- matplotlib style sheet used for all figuresplot_setup.py- plotting script for Fig. 1 (simulation geometry and potentials)plot_start_distribution.py- plotting script for Fig. 2 (ion starting position distribution)plot_offset_areas.py- plotting script for Fig. 3 (effective emission area vs. tip displacement)plot_tof_distribution.py- plotting script for Fig. 4 (MCP impact positions and TOF spectra)plot_offset_fwhm.py- plotting script for Fig. 5 (TOF spectra for tip displacements, R = 15 nm)plot_experiment_simulation.py- plotting script for Fig. 6 (simulation for R = 150 nm vs. experiment)LSD- folder with SIMION ion trajectory simulation output<d>x_PAs- simulations with the tip displaced bydmm laterally (x and y direction, the sign is encoded in the file name, see below)<d>z_PAs- simulations with the tip displaced bydmm along the axial (z) direction (signed)mass_single_fine_0-10eV_<R>nm- H+ ions (1 amu, single charge), initial kinetic energy uniformly sampled from 0-10 eV (restricted to 0-4.3 eV in the plotting scripts), tip apex radiusRmass_single_fine_0-10eV_<R>nm_zoom- same as above with the starting positions restricted to the apex region0x_PAs/mass_single_fine_0-10eV_15nm_DT- reference configuration with varied drift tube potentials DTe and DTf (-50 to -2050 V, see file names), basis of the drift tube discussion in Sec. IV (no plotting script)0x_PAs/mass_single_fine_0-10eV_15nm_grid- reference configuration with ultrafine voxel sizes of 0.5, 1 and 2 nm (suffix of the file name), basis of the grid convergence statement in Sec. IV (no plotting script)
initial_start_stop_<R>nm,initial_start_stop_<R>nm_zoom- ion starting positions on the nanotip surface (full illuminated surface / apex region)
PAs- folder with the numpy arrays extracted from the SIMION potential arrays, used for plottingLSD_.PA0_*- macroscopic geometry (tip holder, drift tubes, MCP), coarse grid with 0.05 mm voxelsfine_nanotip_15nm.pa0_*- fine grid around the nanotip, 1 µm voxelsultrafine_nanotip_15nm.pa0_*- ultrafine grid at the nanotip apex, 1 nm voxels
simulation- SIMION input files to regenerate all potential arrays and ion trajectories (requires SIMION 8.1)Setup.lua- main workbench program: builds and refines the fine and ultrafine nanotip arrays, generates the ion starting positions from the laser profile, flies the ions and writes the output files inLSD. All simulation parameters (potentials, tip radius, energy range, laser direction, ...) areadjustablevariables at the top of the fileion.lua,ion_nanotip.lua- particle definitions used bySetup.luafine_nanotip.gem- SIMION geometry file of the nanotip (parameterized by tip radius, half angle, length and grid density)ultrafine_nanotip.zo- SIMION view settings of the ultrafine arraySTL- CAD geometry of the macroscopic setup used to create the coarse array (seeSTL/desc_parts.txt),LSD_3(<d>).stlcontains the tip holder for each tip displacement<d>x_PAs,<d>z_PAs- one SIMION workbench folder per tip displacement, containingSetup.iob(workbench), a copy ofSetup.lua(SIMION requires it next to the.iob) andLSD_.PA#(unrefined coarse potential array created from the STL files, see below)input_start_positions_<R>nm,input_start_positions_<R>nm_zoom- fixed ion starting positions in [mm] (comma separated x, y, z per line) as used for the published runs (use_start_positions = 1inSetup.lua)
exp- folder with the experimental TOF spectrum shown in Fig. 6(b)np_tmp- folder with intermediate numpy files (see below). Figs. 3, 5 and 6 are generated from these files, so the scripts do not need to re-read the full simulation output inLSDblender- folder with a 3D render of the electrode geometry, used as background in Fig. 1(a)plots- output folder of the plotting scripts
All scripts expect to be run from this folder as the working directory, e.g.
python plot_setup.py.Simulation File Naming
Simulation output files in
LSD are named 1 (6500,-1850,-1850,-1950)(1)[DA].txt, where(6500,-1850,-1850,-1950)- electrode potentials in V (tip, DTe, DTf, MCP)D- laser direction (laser_directioninSetup.lua). Since the tip is always displaced along the same workbench axis, this gives the displacement relative to the laser:0= +x,1= -x,2= +y,3= -y (forz_PAsfolders always0)A- starting position set (apex_start_onlyinSetup.lua):0= full illuminated nanotip surface,1= restricted to the contributing apex region
The coordinate system follows Fig. 1(a) of the manuscript: z is the axial direction (tip to MCP), x is the laser propagation direction, and y is perpendicular to both.
Uncommon Data Types
.txt(inLSD/*_PAs) - SIMION ion trajectory output in ascii format: one header line, then one ion per line with comma separated columns:ion_mass[amu],ion_charge[e],ion_time_of_flight[µs],ion_px_mm,ion_py_mm,ion_pz_mm[mm] (final position),ion_energy[eV],ion_volts[V],ion_px_mm_start,ion_py_mm_start,ion_pz_mm_start[mm],ion_energy_start[eV],ion_volts_start[V].
Ions that reached the MCP haveion_pz_mm≈ 20.65 mm (minus the axial displacement).start_stop[DA].txt- ion starting positions in ascii format: two header lines, then pairs of linesstart pos: x, y, zandend pos: x, y, zin [mm]. The start position is the projected laser position on the tip surface, the end position is the same point moved onto the ion initialization equipotential surface..PA#- SIMION potential array before refining (binary, readable with SIMION).#marks a fast-adjustable array, refining creates one.PA0-.PAnfile per electrode.npy(inPAs) - numpy arrays extracted from the potential arrays, named after the source.PA0file:*_solid.npy- electrode mask (1 = electrode, 0 = free space)*_potentials.npy- electrostatic potential in [V]LSD_.PA0_<scale>_<xwb>_<ywb>_<zwb>_<X|Y>_*.npy- 2D slice through the 3D macroscopic geometry normal to the given axis, with the scale [mm/grid unit] and workbench offsets [mm]*nanotip_15nm.pa0_<N>_potentials.npy- 2D cylindrically symmetric potential of the nanotip grid, sampled withNsubdivisions per voxel
.txt(inPAs) - metadata for the.npyarrays: first line is the number of grid pointsnx ny nz, second line is the voxel sizedx dy dzin [mm].npz(innp_tmp) - intermediate numpy files:tof_R<R>_E<E>_A<A>.npz-tofs: TOF of all ions reaching the MCP in [ps], relative to the fastest ion, with initial energy ≤EeV, for all tip displacementspa_offsets_all[mm] along x, y and z (in this order);ions: total number of simulated ions per configurationarea_*.npz- effective emission areax_areas,y_areas,z_areasin [nm2] for the tip displacementsx_shifts,y_shifts,z_shiftsin [mm]
.cod2- binned experimental TOF histogram in ascii format, comma separated columns: time [ns], counts
Regenerating the Simulations
Regenerating the potential arrays and ion trajectories requires a licensed copy of SIMION 8.1. The refined potential arrays need about 50 GB of disk space per tip displacement. The published runs used the fixed starting positions provided here, but no fixed random seed, so the initial kinetic energies and emission directions are re-sampled. A re-run therefore gives statistically equivalent, not identical, trajectories.
For each tip displacement folder
simulation/<d>_PAs:- Workbench program: the folder already contains a copy of
Setup.lua(identical tosimulation/Setup.lua). SIMION only runs a workbench program that has the same name as the.iobfile and sits in the same folder. The other input files (ion.lua,ion_nanotip.lua,fine_nanotip.gem,ultrafine_nanotip.zo,input_start_positions_*) are found one folder up. - Coarse potential array
LSD_.PA#: the unrefined array used for the published simulations is included in each folder, so it only has to be refined in SIMION. This createsLSD_.PA0toLSD_.PA6. Alternatively, the array can be recreated from the STL files with SIMION SL Tools → STL -> PA, using these settings:- cell size 0.05 mm in all three dimensions
- electrode numbers (also used by
fast_adjustinSetup.lua):LSD_1.stl→ 1 (ground cylinder),LSD_2.stl→ 2 (bolts, ground),LSD_3(<d>).stl→ 3 (cathode holder and tip, use the file of the respective displacement),LSD_4.stl→ 4 (MCP),LSD_5.stl→ 5 (DTe),LSD_6.stl→ 6 (DTf)
LSD_.PA#in the folder before refining. - Nanotip arrays:
fine_nanotip.pa0andultrafine_nanotip.pa0are created bySetup.luafromfine_nanotip.gem(gem2pa, then refined) at the start of each Fly'm, with 1 µm and 1 nm voxels and the tip parameters set by theadjustablevariables. - Open
Setup.iobin SIMION, set theadjustablevariables and start a Fly'm. The output files are written to a sub-folder named after the run settings, in the format described above. The settings of the published runs follow from the folder and file names:tip_radius= 15 or 150 nme_kin_min/e_kin_max= 0 / 10 eVpotential_tip,potential_dt1,potential_dt2,potential_mcpas in the file namelaser_directionandapex_start_onlyas in[DA]use_start_positions= 1 (fixed starting positions)
Script Requirements
Scripts were run using Python 3.14.0 on Windows with the following packages installed (see
requirements.txt)- numpy (2.3.5)
- matplotlib (3.10.7)
- scipy (1.16.3)
- shapely (2.1.2)
Additional notes:
- The matplotlib style sheet uses
text.usetex: Trueand the font Times New Roman, so a working LaTeX installation is required.
Files
code_and_figures.zip
Files
(42.2 GiB)
| Name | Size | Download all |
|---|---|---|
| md5:07f7650901ec2343de9d4f19dc72583b | 69.2 MiB | Preview Download |
| md5:fdb870da26a6d0ba92d2e9103b0a0912 | 902.4 MiB | Preview Download |
| md5:223fcf97116911e270474b2c52f4500d | 903.7 MiB | Preview Download |
| md5:5281a62ef1a9c55da4776f963131526d | 905.5 MiB | Preview Download |
| md5:af2f3ec2c53b6b65f51fe60371314c71 | 907.2 MiB | Preview Download |
| md5:219055a4fb154792f8636b9c6406b894 | 908.7 MiB | Preview Download |
| md5:9eac95ef063b0638ac4f35b95ca0f3de | 4.0 GiB | Preview Download |
| md5:a15822b43e9506aa3e1b48e8106cba50 | 900.8 MiB | Preview Download |
| md5:bb5e1d89a8d4e282c3429fa64b8c5a91 | 4.0 GiB | Preview Download |
| md5:011ffe3e190c3a7b23014d333436b2ca | 899.4 MiB | Preview Download |
| md5:99234873e9108e247598d3c69ce8951f | 4.0 GiB | Preview Download |
| md5:7fbc309bac1be89ef2a051c04ed01c73 | 896.8 MiB | Preview Download |
| md5:3eece7db7ab27b9ff01dc31209edaade | 4.0 GiB | Preview Download |
| md5:640b451477fc773d211d752d14f393de | 893.7 MiB | Preview Download |
| md5:5a05feb3c9e47d394b3d1fd50d115346 | 5.7 GiB | Preview Download |
| md5:0c0f2e3bb68e4d44a014d8f5ad7fadf8 | 2.2 GiB | Preview Download |
| md5:dfc572aa0e7fb4a0543ab5c8b64ddd5b | 4.0 GiB | Preview Download |
| md5:28175f43356acd3edfb030f217532564 | 890.3 MiB | Preview Download |
| md5:2bdbedb106e6a0dd1dc78b88074c0a93 | 119.8 MiB | Preview Download |
| md5:e668b08ad2edfcc38df0002e977e60fd | 4.4 GiB | Preview Download |
| md5:160ad0cde6e0f3f28f9ae3e3710b4ea6 | 1022.9 MiB | Preview Download |
Additional details
Related works
- Is part of
- Journal Article: 10.1103/gfl6-fh1k (DOI)
Funding
- FWF Austrian Science Fund
- 10.55776/Y1174