New features
- Added two new mini alignment options - identity and similarity plots
Identity plots show which positions in your alignment are identical to the consensus, different to the consensus or gaps. Created using the `--plot_consensus_identity` parameter.
![identity](https://github.com/KatyBrown/CIAlign/assets/8896865/795901ff-eb5e-4f79-87b4-b36455bd770f)
Similarity plots calculate a substitution score for your alignment vs the consensus, using a substitution matrix of your choice, and colour the plot according to this score. Created using the `--plot_consensus_similarity` parameter.
![similarity](https://github.com/KatyBrown/CIAlign/assets/8896865/250a56de-b352-44ea-8e4d-4aa16d39ff85)
- Added additional statistics plots, plotted by default when `--plot_stats_input` or `--plot_stats_output` is specified.
- The nucleotide or amino acid frequency in the alignment and, for nucleotide alignments, the A/T (U) vs C/G ratio
![resfreq_nt](https://github.com/KatyBrown/CIAlign/assets/8896865/2e760ce6-7a33-4345-8e60-1cb3e90e5bb4)
- For nucleotide alignments, the proportion of each "change" in nucleotide relative to the consensus.
![changefreq](https://github.com/KatyBrown/CIAlign/assets/8896865/a4ddefc4-931b-47c1-b1b3-2564bd2c01a5)
- Added the option to remove sequences with duplicate names from the alignment, keeping either the first or last instance of each sequence name, with the parameter `--deduplicate_ids`.
Testing, Packaging and Documentation
- Updated CI workflow to cover more recent versions of Python
- Changed all requirements in package to require a minimum rather than fixed version of software
- Various updates to tests using images to work with latest version of pytest
- Minor updates to readthedocs build
Debugging
- Minor debug to crop_divergent to run remove_gap_only by default afterwards
- Improved markup for remove_gap_only
- Adjustment to move Q amino acids slightly higher in sequence logos
- Removed error sometimes raised if no cleaning functions are run
- Updated utilityFunctions.listFonts() as the matplotlib method used here was deprecated