Skip to content

Releases

v1.5.0 - Improved detection of repeat-rich loci and misalignment detection

Choose a tag to compare

@BertBog BertBog released this 24 Sep 12:25

[WARNING] This release introduces changes to the allele detection and database construction algorithms.

The minimap2 seed alignment parameters have been modified to enhance the identification of alleles in regions rich in repeats. This resolves an issue whereby loci such as NEIS1452 in the Neisseria cgMLST schemes could be missed.

Database construction has also been improved to detect and split previously misaligned allele clusters. Existing databases should therefore be re-indexed using mist index to apply these changes.

In our testing, these changes did not alter any correctly called alleles; they only resulted in additional alleles being detected. Nevertheless, please report any unexpected changes or other issues.

This release also includes additional optimizations that offset the slightly longer runtime of the seed alignment step.


Seed alignment (Minimap2)

  • [Bugfix/Improvement]: mist call now uses the .mni index created by mist index when it exists (instead of building it in memory)
  • [Improvement]: The minimap2 -U option is now set dynamically based on the representative loci. This fixes a bug where in repetitive loci were not identified (For example NEIS1452 in the Neisseria cgMLST schemes). Thanks to @MargoMx for reporting this issue.
  • [Bugfix]: Gap penalties (-O 25 -E 1) are now only passed with -c. -N 10 is dropped because it has no effect with --all-chain.

Imperfect hit detection

  • [Improvement]: Identification of the best matching allele is now done using vectorized numpy operation and only performed alleles of the same length to reduce CPU and memory usage.
  • [Bugfix]: The comparison is now case-insensitive, so soft-masked (lowercase) bases no longer count as mismatches.
  • [Improvement]: Query coordinates are computed vectorized, with no row-wise apply or iterrows.

Cluster splitting (DB construction)

  • [Bugfix]: show-coords output is now parsed with column names. The [TAGS] header spans two fields, which shifted every column, so sequences with a different start position were not split into separate clusters. Thanks to @MargoMx for reporting this issue.
  • [Improvement]: Clusters are split on differences in both start and end offsets, and reverse-strand members are handled.
  • [Bugfix]: repeat and inverted-repeat alignments are ignored. Only alignments colinear with each member's longest alignment are used.

Notes

  • Requires minimap2 ≥ 2.19 (for the -U option).
  • Existing databases still work, but re-indexing is needed to get the .mni index, loci_repr.json and the improved cluster splitting.

v1.4.0 - mist lincode & faster cgST detection

Choose a tag to compare

@BertBog BertBog released this 19 Aug 13:17

Summary

This release adds support for calculating LIN codes with MiST, along with a rewritten profile-matching algorithm that scales to large cgMLST schemes.
The proof-of-concept mist_to_partial_lincode.py script, which was originally developed for Klebsiella, was used as the starting point but was then extended to be scheme-agnostic.
More information on the Wiki.

What's new

  • mist lincode command — extracts LIN codes offline for BIGSdb-hosted schemes (PubMLST, Institut Pasteur), and via API calls for EnteroBase. Reported thresholds are included in the output.
  • Scalable profile index — replaces the in-memory, string-based matcher (which ran out of memory on large cgMLST schemes) with:
    • integer-encoded alleles (handling wildcards and missing alleles),
    • a reverse index (locus_allele → profile) turning matching into a counting problem,
    • a numpy memmap backend with multithreading and vectorization to avoid loading all profiles into memory.
  • Downloader now stores LIN-code information when available, with authorization support for BIGSdb. - requires re-building (downloading & indexing) the DB!

Bugfixes and QOL

  • Add configurable timeout for authenticated BIGSdb downloads by @BertBog in #30

Full Changelog: v1.3.0...v1.4.0

v1.3.0 - Support for multiple matching profiles

Choose a tag to compare

@BertBog BertBog released this 17 Jul 19:52

What's Changed

Profile matching previously always returned a single best-matching ST, even when several profiles tied for the best score. This can happen when a profile contains wildcard (N) alleles or when the query has imperfect/multiple allele matches. With these changes MiST reports all best-matching STs instead of only the first one.

Changes

  • mist call logs all matching ST names and warns when more than one equivalent ST is detected.
  • Output format change: the profile key in the JSON output is now profiles, a list of the best-matching profiles (or None if no profile database was used).
  • mist_to_partial_lincode.py has been updated accordingly to iterate over all matches.
  • ProfileQuery no longer infers locus names from the database directory structure; loci are now passed in explicitly, decoupling profile parsing from file layout.
  • Added a --input-list/-i option to mist dists for supplying input files via a text file, one path per line.
  • Minor code formatting changes

Note: this is a breaking change to the mist call JSON output format — profile (object or None) becomes profiles (list or None).

Full Changelog: v1.2.0...v1.3.0

v1.2.0 - Faster distance matrix calculation

Choose a tag to compare

@BertBog BertBog released this 13 Feb 09:14

What's Changed

  • Faster distance matrix calculation for "mist dists" by @BertBog in #22

Full Changelog: v1.1.0...v1.2.0

v1.1.0

Choose a tag to compare

@BertBog BertBog released this 08 Jan 12:33
73b79b5

What's Changed

  • Added check for invalid sequences (not in clustering) to mist index by @BertBog in #13
  • Added a warning when attempting to download profiles from cgMLST.org by @BertBog in #16
  • Added --sample-id option to mist call by @BertBog in #18
  • Added a bugfix to the test for downloading schemes from cgMLST.org by @BertBog in #19

Full Changelog: v1.0.0...v1.1.0

v1.0.0 - First stable release

Choose a tag to compare

@BertBog BertBog released this 16 Nov 10:12

First stable release

(…or at least I hope it’s stable!)

Changes

Updated the citation to point to the newly published paper:
https://bmcgenomics.biomedcentral.com/articles/10.1186/s12864-025-12324-z

Bug fixes

Corrected an incorrect path in the BIGSdb authorized-download helper.

v0.0.5 - Updated hashing

Choose a tag to compare

@BertBog BertBog released this 27 Oct 08:12

IMPORTANT: The hashing algorithm changed, all existing indices will need to be recreated using mist index!

Changes

  • Hashes are now computed using SHA-1 on the lowercase allele sequence in forward-strand orientation. Thanks to Ryan Wick and Jane Hawkey for the helpful discussions and feedback on the output!
  • Extended the TSV output see the Wiki for more info
  • Added additional test cases for edge cases of allele detection (e.g., alleles located at the edge of a contig)
  • Added a helper script to extract partial LIN-codes

v0.0.4 - Various small bugfixes

Choose a tag to compare

@BertBog BertBog released this 13 Oct 10:25
7c3b2f5

MiST index

  • Sequence IDs in input FASTA files no longer need to match the file’s base name. A warning will still be issued if mismatches are detected.

Tests

  • Fixed the URL for the cgMLST.org downloader test.

v0.0.3 - Subcommands, mist list, and DB date

Choose a tag to compare

@BIOIT-Sciensano BIOIT-Sciensano released this 24 Sep 16:02
  • IMPORTANT: this version changes the interface to use subcommands

Subcommands

Old command New command
mist_index mist index
mist_download mist download

Renamed commands

Old command New command
mlst_phylogeny mist dists
mist_query mist call
  • mist list now retrieves the available schemes that can be downloaded. See the wiki instructions for details.

  • The database date is now included in the mist.json output (if available)