Repository navigation
Releases
v1.5.0 - Improved detection of repeat-rich loci and misalignment detection
[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 callnow uses the.mniindex created bymist indexwhen it exists (instead of building it in memory) - [Improvement]: The
minimap2-Uoption 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 10is 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
applyoriterrows.
Cluster splitting (DB construction)
- [Bugfix]:
show-coordsoutput 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
-Uoption). - Existing databases still work, but re-indexing is needed to get the
.mniindex,loci_repr.jsonand the improved cluster splitting.
v1.4.0 - mist lincode & faster cgST detection
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 lincodecommand — 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
Full Changelog: v1.3.0...v1.4.0
v1.3.0 - Support for multiple matching profiles
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 calllogs 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
Noneif no profile database was used). mist_to_partial_lincode.pyhas been updated accordingly to iterate over all matches.ProfileQueryno 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/-ioption tomist distsfor 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
What's Changed
Full Changelog: v1.1.0...v1.2.0
v1.1.0
What's Changed
- Added check for invalid sequences (not in clustering) to
mist indexby @BertBog in #13 - Added a warning when attempting to download profiles from cgMLST.org by @BertBog in #16
- Added
--sample-idoption 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
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
IMPORTANT: The hashing algorithm changed, all existing indices will need to be recreated using mist index!
Changes
- Hashes are now computed using
SHA-1on 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
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.orgdownloader test.
v0.0.3 - Subcommands, mist list, and DB date
- 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 listnow retrieves the available schemes that can be downloaded. See the wiki instructions for details. -
The database date is now included in the
mist.jsonoutput (if available)