Release Notes
Upgrading
You can always update to the latest version of lasertram using pip:
pip install --upgrade lasertram
or install a specific version:
pip install lasertram==version-number
To check which version of lasertram you have installed:
pip show lasertram
Maintenance team
Current and past maintainers of lasertram:
1.0.6 (6/3/2026)
This release adds a built-in GeoReM SRM database, more flexible primary standard support, and moves to name-based format checking for more robust data validation.
Features
- added built-in GeoReM SRM database (
load_srm_database()).LaserCalcnow automatically loads the database on initialization (auto_load_srm=Trueby default). Loading an external Excel file is still supported. - more flexible primary standard support: analytes without a published concentration in the chosen calibration standard now return
"n.c."(not calibrated) rather than raising an error. - moved format checking from positional column indexing to name-based indexing for more robust validation of input data.
- added explicit public API in
__init__.pywith__all__for cleaner imports. - migrated build system from
setuptoolstohatchling. - added
[dev]and[docs]optional dependency groups topyproject.toml.
Tests
- refactored test fixtures to session scope for improved performance.
- added
hypothesisfor property-based testing and added to CI pipeline.
Documentation
- fixed stale rst-style docstrings and updated documentation page organization.
1.0.5 (3/20/2026)
This release adds a command-line interface, migrates to a src/ layout, and adds comprehensive type hints and numpy-style docstrings to all modules.
Features
- added
lasertramCLI with--version,--help, andpreprocesssub-command.lasertram preprocess <dir>converts raw LA-ICP-MS.csvfiles into LaserTRAM format with--csv,--xlsx, and--clipboardoutput options. Registered as aconsole_scriptsentry point inpyproject.toml. - migrated package to
src/layout (src/lasertram/). Updatedpyproject.tomlpackage discovery andmkdocs.ymlpaths accordingly.
Documentation
- added type hints and numpy-style docstrings to all modules.
Bug Fixes
- fixed test compatibility with pandas 3.0 (
StringDtypevsobjectdtype mismatch).
1.0.4 (1/13/2026)
This release further re-vamps the tests to increase the coverage to > 95%. It also reorgs them on a module basis to better maintain them.
Features
- added registering of
lasertram.mplstyleto the user's matplotlib styles so that it can be used withplt.style.use("lasertram"). - added a
verboseflag to bothLaserTRAMandLaserCalc.get_data()methods to have more control over the amount of output displayed to the user when running those functions. - added
verboseflag tohelpers.batch.process_spotto mimicLaserTRAM.get_data()
Bug Fixes
- fixed bug in
helpers.batchmodule where data despiking was being called out of order.
Documentation
- rebuilt the tutorials in the docs to better reflect the new structure of the library
- added tutorials for region omission and data despiking.
1.0.3 (12/8/2025)
This release mostly revolves around improvements to the parts of the library that deal with type checking, formatting of input data, and other things that better help the user avoid common pitfalls related to improper data formatting. There has been some reorganizing as well:
- moving the test data to its own directory:
test_data. This contains subdirectoriesbasic_SRM_exampleandcomputers_and_geosciences_exampleswhich contain data used for the docs and associated manuscript https://doi.org/10.1016/j.acags.2025.100225 , respectively.
Features
- added module for formatting checks:
- added in functionality to check that input data to
LaserTRAMis properly formatted. This includes checking for: - added functionality to check that the chosen calibration standard has published values for all analytes in the input dataset. If not throw error.
- added functionality to check that the SRM dataset is uploaded in the correct format
- added functionality to check that data loaded into LaserCalc are properly formatted.
- added ability to calculate concentrations using internal standard values that are in either ppm element, wt% element, or wt% oxide.
- added support for more internal standard analytes. While any element can be used as an internal standard in ppm units, supported oxides can be found by checking the
lasertram.helpers.conversions.supported_internal_standard_oxideslist.mendeleevwas removed as a dependency because of this. LaserCalcnow checks for and fixes duplicate spot names. Because a lot of the code uses pandas indexing and the spot names are the index, duplicates will break theLaserCalcprocess.LaserCalcnow will append_A,_B, etc. to duplicate spot names to make them unique to prevent this break.make_LT_ready_folder()function now deals with empty.csvfiles better by skipping them and throwing a message to the user rather than breaking. It also now displays more verbose messages to the user about what files are being processed so if something does break they have better context. Because of thistqdmandtabulatewere added as dependencies.
Tests
pytestcoverage has been updated to better reflect the way LaserTRAM and LaserCalc output data. This also increases the coverage to > 90%.- switch to using computers and geosciences dataset for testing rather than basic SRM dataset. Better reflects actual use cases for users rather than "idealized" data.
- added data to be used for testing how the
preprocessingmodule deals with raw data from ThermoFisher quadrupole ICP-MS. This is in thetests/rawdirectory.
Bug Fixes
- fixed bad path handling with functions related to loading test data
- migrated how
b.d.l.is handled internally to avoid deprecation warnings frompandas - fixed bug with
make_LT_ready_folder()where emptycsvfiles would cause the function to break.
1.0.1 and 1.0.2
1.0.2 is the same as 1.0.1 but I screwed up the PyPI distribution so I'm redoing it as 1.0.2
First release after manuscript acceptance 
Features
- added a module for basic plotting of time-series and uncertainties in
LaserTRAM - added a module for preprocessing which has functions related to loading in test data ready for
LaserTRAMand for taking raw .csv files from Thermo or Agilent quadrupoles and converting them directly topandas.DataFramesready forLaserTRAM.
Documentation
- added more example jupyter notebooks on signal de-spiking and region omission
- Added much better docstring coverage to everything
- Added much better line-by-line coverage to everything
Bug Fixes
- fixed pytest bugs with move to new version.
1.0.0 (07/11/2024)
USGS Software Release approval 
- Addresses reviewer comments from Issue !1 related to USGS internal code review
Features
- updated syntax to reflect
pylintrecommendations (e.g., snake case variables, correct negation/equivalence referencing)
Documentation
- transitioned to solely using a
pyproject.tomlrather than combination ofsetup.cfg+pyproject.toml
v0.1.2 (5/1/2024)
Bug Fixes
- fixed indexing issue in
despike_data
Documentation
- added more coverage in tests to now include
get_secondary_standard_accuraciesanddespike_data
v0.1.1 (4/29/2024)
Documentation
- added
lasertram.__version__
- changed naming of all functions that refer to standards for consistency
- Any attribute or method that references an internal standard uses
int_std - Any attribute or method that references the calibration standard uses
calibration_std
v0.1.0 (4/25/2024)
Code structure change
A re-organization of the package structure was completed to set up for further growth. This has created the following modules for lasertram:
tram: holds the class 'LaserTRAM`calc: holds the classLaserCalchelpers: holds the submodulesbatchandconversions, for batch processing and unit conversions, respectively.
An example folder structure for this is as follows:
βββ πlasertram
βββ πcalc
βββ calc.py
βββ __init__.py
βββ πhelpers
βββ batch.py
βββ conversions.py
βββ __init__.py
βββ πtram
βββ tram.py
βββ __init__.py
βββ __init__.py
from lasertram import LaserTRAM, LaserCalc, batch
from from lasertram.helpers import batch, conversions
v0.0.13 (4/08/2024)
Bug Fixes
- Fixed undeclared list instantiation in
LaserTRAM.despike().
v0.0.12 (1/12/2024)
Bug Fixes
- Fixed issue with
calculate_uncertainties()internal error calculation dropping the wrong terms
v0.0.11 (1/12/2024)
Bug Fixes
- Fixed issue in
drift_check()where data do not have a timestamp and the index of analysis was being treated as a pandas Series. It is now a numpy array for consistency and better compatibility with the statsmodels package. - Updated analyte indexing for regex deprecation warning related to string literals.
Documentation
- Updated Basic Usage page to reflect new uncertainty output implemented in
v0.0.10
v0.0.10 (1/11/2024)
Features
- added support for both internal and external precision on output.
- Now on output uncertainties are displayed with column header suffixes as either
_exterrorinterrto reflect overall uncertainties that incorporate the uncertainty in the calibration standard accepted value or those that don't, respectively. The vast majority of use cases should utilize_exterrvalues unless one is comparing datasets processed with the same calibration standard.
v0.0.9 (10/26/2023)
Bug Fixes
- fixed type issue with internal standard compositions being defaulted to
int - fixed pandas indexing in
drift_check()to support future move to.iloc
Features
- added support for both GUI (LaserTRAM-DB) and API (
lasertram.LaserTRAM) outputs to be used as inputs intolasertram.LaserCalc() - changed all naming instances of
calibration_standardtocalibration_std. Previously some there were a mix of attributes that had one or the other. Now anything that deals with the calibration standard (e.g.,self.calibration_std_stats) will always havecalibration_stdin the name for consistency.
v0.0.8 (10/25/2023)
Bug Fixes
- Fixed bug that overwrote and ignored omission interval in
LaserTRAM.normalize_interval() - Future proofed output report for deprecated pandas indexing. Now properly uses
.iloc - Fixed interval
dtypeinconsistencies so they are all typefloat64rather thanobject
Documentation
- Added general motivation to documentation landing page
New Features
- Added required dependencies to
setup.cfg
v0.0.7 (10/24/2023)
Bug Fixes
- Fixed
omitted_regionbeing counted as experiment analyte
Documentation
- fixed filepath issues and typos in Basic Useage tutorial
- moved all test data to
test_datafolder - created
testsfolder for future tests to be held - created
CHANGELOG.md
v0.0.5 (10/20/2023)
- First release of
lasertramfor public use.