MultiQC Version 1.10
Many thanks to everyone's patience in waiting for this release, it is much appreciated!
Update for developers: Code linting
This is a big change for MultiQC developers. I have added automated code formatting and code linting (style checks) to MultiQC. This helps to keep the MultiQC code base consistent despite having many contributors and helps me to review pull-requests without having to consider whitespace. Specifically, MultiQC now uses three main tools:
- Black - Python Code
- Prettier - Everything else (almost)
- markdownlint-cli - Stricter markdown rules
All developers must run these tools when submitting changes via Pull-Requests! Automated CI tests now run with GitHub actions to check that all files pass the above tests. If any files do not, that test will fail giving a red ❌ next to the pull request.
For further information, please see the documentation.
MultiQC updates
New MultiQC Features
--sample-filters
now also acceptsshow_re
andhide_re
in addition toshow
andhide
. The_re
options use regex, while the "normal" options use globbing.- MultiQC config files now work with
.yml
file extension as well as.yaml
.yaml
will take preference if both found.
- Section comments can now also be added for General Statistics
section_comments: { general_stats: "My comment" }
- New table header config option
bgcols
allows background colours for table cells with categorical data. - New table header config options
cond_formatting_rules
andcond_formatting_colours
- Comparable functionality to user config options
table_cond_formatting_rules
andtable_cond_formatting_colours
,
allowes module developers to format table cell values as labels.
- Comparable functionality to user config options
- New CI test looks for git merge markers in files
- Beautiful new progress bar from the amazing willmcgugan/rich package.
- Added a bunch of new default sample name trimming suffixes (see
8ac5c7b
) - Added
timeout-minutes: 10
to the CI test workflow to check that changes aren't negatively affecting run time too much. - New table header option
bars_zero_centrepoint
to treat0
as zero width bars and plot bar length based on absolute values
New Modules
- EigenStratDatabaseTools
- Added MultiQC module to report SNP coverages from
eigenstrat_snp_coverage.py
in the general stats table.
- Added MultiQC module to report SNP coverages from
- HOPS
- Post-alignment ancient DNA analysis tool for MALT
- JCVI
- Computes statistics on genome annotation.
- ngsderive
- Forensic analysis tool useful in backwards computing information from next-generation sequencing data.
- OptiType
- Precision HLA typing from next-generation sequencing data
- PURPLE
- A purity, ploidy and copy number estimator for whole genome tumor data
- Pychopper
- Identify, orient and trim full length Nanopore cDNA reads
- qc3C
- Reference-free QC of Hi-C sequencing data
- Sentieon
- Submodules added to catch Picard-based QC metrics files
Module updates
- DRAGEN
- featureCounts
- fgbio
- Fix
ErrorRateByReadPosition
to calculateymax
not just on the overallerror_rate
, but also specific base errors (ex.a_to_c_error_rate
,a_to_g_error_rate
, ...). (#1215) - Fix
ErrorRateByReadPosition
plotted line names to no longer concatenate multiple read identifiers and no longer have off-by-one read numbering (ex.Sample1_R2_R3
->Sample1_R2
) ([#1304)
- Fix
- Fastp
- Fixed description for duplication rate (pre-filtering, not post) ([#1313)
- GATK
- Add support for the creation of a "Reported vs Empirical Quality" graph to the Base Recalibration module.
- hap.py
- Updated module to plot both SNP and INDEL stats (#1241)
- indexcov
- Fixed bug when making the PED file plots (#1265)
- interop
- Added the
% Occupied
metric toRead Metrics per Lane
table which is reported for NovaSeq and iSeq platforms.
- Added the
- Kaiju
- Kraken
- MALT
- Fix y-axis labelling in bargraphs
- MACS2
- Add number of peaks to the General Statistics table.
- mosdepth
- Enable prepending of directory to sample names
- Display contig names in Coverage per contig plot tooltip
- Picard
- Fix
HsMetrics
bait percentage columns (#1212) - Fix
ConvertSequencingArtifactToOxoG
files not being found (#1310) - Make
WgsMetrics
histogram smoothed if more than 1000 data points (avoids huge plots that crash the browser) - Multiple new config options for
WgsMetrics
to customise coverage histogram and speed up MultiQC with very high coverage files. - Add additional datasets to Picard Alignment Summary (#1293)
- Add support for
CrosscheckFingerprints
(#1327)
- Fix
- PycoQC
- Log10 x-axis for Read Length plot (#1214)
- Rockhopper
- Fix issue with parsing genome names in Rockhopper summary files (#1333)
- Fix issue properly parsing multiple samples within a single Rockhopper summary file
- Salmon
- Only try to generate a plot for fragment length if the data was found.
- verifyBamID
- Fix
CHIP
value detection (#1316).
- Fix
New Custom Content features
- General Stats custom content now gives a log message
- If
id
is not set inJSON
orYAML
files, it defaults to the sample name instead of justcustom_content
- Data from
JSON
orYAML
now hasdata
keys (sample names) run through theclean_s_name()
function to apply sample name cleanup - Fixed minor bug which caused custom content YAML files with a string
data
type to not be parsed
Bug Fixes
- Disable preservation of timestamps / modes when copying temp report files, to help issues with network shares (#1333)
- Fixed MatPlotLib warning:
FixedFormatter should only be used together with FixedLocator
- Fixed long-standing min/max bug with shared minimum values for table columns using
shared_key
- Made table colour schemes work with negative numbers (don't strip
-
from values when making scheme)