Skip to content

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()). LaserCalc now automatically loads the database on initialization (auto_load_srm=True by 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__.py with __all__ for cleaner imports.
  • migrated build system from setuptools to hatchling.
  • added [dev] and [docs] optional dependency groups to pyproject.toml.

πŸ§ͺ Tests

  • refactored test fixtures to session scope for improved performance.
  • added hypothesis for 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 lasertram CLI with --version, --help, and preprocess sub-command. lasertram preprocess <dir> converts raw LA-ICP-MS .csv files into LaserTRAM format with --csv, --xlsx, and --clipboard output options. Registered as a console_scripts entry point in pyproject.toml.
  • migrated package to src/ layout (src/lasertram/). Updated pyproject.toml package discovery and mkdocs.yml paths accordingly.

πŸ“š Documentation

  • added type hints and numpy-style docstrings to all modules.

πŸ› Bug Fixes

  • fixed test compatibility with pandas 3.0 (StringDtype vs object dtype 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.mplstyle to the user's matplotlib styles so that it can be used with plt.style.use("lasertram").
  • added a verbose flag to both LaserTRAM and LaserCalc .get_data() methods to have more control over the amount of output displayed to the user when running those functions.
  • added verbose flag to helpers.batch.process_spot to mimic LaserTRAM.get_data()

πŸ› Bug Fixes

  • fixed bug in helpers.batch module 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 subdirectories basic_SRM_example and computers_and_geosciences_examples which 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 LaserTRAM is 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_oxides list. mendeleev was removed as a dependency because of this.
  • LaserCalc now 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 the LaserCalc process. LaserCalc now 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 .csv files 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 this tqdm and tabulate were added as dependencies.

πŸ§ͺ Tests

  • pytest coverage 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 preprocessing module deals with raw data from ThermoFisher quadrupole ICP-MS. This is in the tests/raw directory.

πŸ› 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 from pandas
  • fixed bug with make_LT_ready_folder() where empty csv files 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 LaserTRAM and for taking raw .csv files from Thermo or Agilent quadrupoles and converting them directly to pandas.DataFrames ready for LaserTRAM.

πŸ“š 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 pylint recommendations (e.g., snake case variables, correct negation/equivalence referencing)

πŸ“š Documentation

  • transitioned to solely using a pyproject.toml rather than combination of setup.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_accuracies and despike_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 class LaserCalc
  • helpers: holds the submodules batch and conversions, 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
The only real effect on the user is the change in import statements to now be the following:
from lasertram import LaserTRAM, LaserCalc, batch
or to import an entire module:
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 _exterr or interr to 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 _exterr values 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 into lasertram.LaserCalc()
  • changed all naming instances of calibration_standard to calibration_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 have calibration_std in 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 dtype inconsistencies so they are all type float64 rather than object

πŸ“š 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_region being counted as experiment analyte

πŸ“š Documentation

  • fixed filepath issues and typos in Basic Useage tutorial
  • moved all test data to test_data folder
  • created tests folder for future tests to be held
  • created CHANGELOG.md

πŸŽ‰ v0.0.5 (10/20/2023)

  • First release of lasertram for public use.