Samtools (and HTSlib and BCFtools) version 1.10 is now available from
GitHub and SourceForge
https://sourceforge.net/projects/samtools/
https://github.com/samtools/htslib/releases/tag/1.10
https://github.com/samtools/samtools/releases/tag/1.10
https://github.com/samtools/bcftools/releases/tag/1.10
The main changes are listed below:
------------------------------------------------------------------------------
htslib - changes v1.10
------------------------------------------------------------------------------
Brief summary
-------------
There are many changes in this release, so the executive summary is:
* Addition of support for references longer than 2Gb (NB: SAM and VCF formats
only, not their binary counterparts). This may need changes in code using
HTSlib. See README.large_positions.md for more information.
* Added a SAM header API.
* Major speed up to SAM reading and writing. This also now supports
multi-threading.
* We can now auto-index on-the-fly while writing a file. This also includes
to bgzipped SAM.gz.
* Overhaul of the S3 interface, which now supports version 4 signatures.
This also makes writing to S3 work.
These also required some ABI changes. See below for full details.
Features / updates
------------------
* A new SAM/BAM/CRAM header API has been added to HTSlib, allowing header
data to be updated without having to parse or rewrite large parts of the
header text. See htslib/sam.h for function definitions and documentation.
(#812)
The header typedef and several pre-existing functions have been renamed to
have a sam_hdr_ prefix: sam_hdr_t, sam_hdr_init(), sam_hdr_destroy(), and
sam_hdr_dup(). (The existing bam_hdr_-prefixed names are still provided for
compatibility with existing code.) (#887, thanks to John Marshall)
* Changes to hfile_s3, which provides support for the AWS S3 API. (#839)
- hfile_s3 now uses version 4 signatures by default. Attempting to write
to an S3 bucket will also now work correctly. It is possible to force
version 2 signatures by creating environment variable HTS_S3_V2 (the
exact value does not matter, it just has to exist). Note that writing
depends on features that need version 4 signatures, so forcing version 2
will disable writes.
- hfile_s3 will automatically retry requests where the region endpoint
was not specified correctly, either by following the 301 redirect (when
using path-style requests) or reading the 400 response (when using
virtual-hosted style requests and version 4 signatures). The first
region to try can be set by using the AWS_DEFAULT_REGION environment
variable, by setting "region" in ".aws/credentials" or by setting
"bucket_location" in ".s3cfg".
- hfile_s3 now percent-escapes the path component of s3:// URLs. For
backwards-compatibility it will ignore any paths that have already been
escaped (detected by looking for '%' followed by two hexadecimal digits.)
- New environment variables HTS_S3_V2, HTS_S3_HOST, HTS_S3_S3CFG and
HTS_S3_PART_SIZE to force version-2 signatures, control the S3 server
hostname, the configuration file and upload chunk sizes respectively.
* Numerous SAM format improvements.
- Bgzipped SAM files can now be indexed and queried. The library now
recognises sam.gz as a format name to ease this usage. (#718, #916)
- The SAM reader and writer now supports multi-threading via the
thread-pool. (#916)
Note that the multi-threaded SAM reader does not currently support seek
operations. Trying to do this (for example with an iterator range request)
will result in the SAM readers dropping back to single-threaded mode.
- Major speed up of SAM decoding and encoding, by around 2x. (#722)
- SAM format can now handle 64-bit coordinates and references. This has
implications for the ABI too (see below). Note BAM and CRAM currently
cannot handle references longer than 2Gb, however given the speed and
threading improvements SAM.gz is a viable workaround. (#709)
* We can now automatically build indices on-the-fly while writing SAM,
BAM, CRAM, VCF and BCF files. (Note for SAM and VCF this only works
when bgzipped.) (#718)
* HTSlib now supports the @SQ-AN header field, which lists alternative names
for reference sequences. This means given "@SQ SN:1 AN:chr1", tools like
samtools can accept requests for "1" or "chr1" equivalently. (#931)
* Zero-length files are no longer considered to be valid SAM files (with no
header and no alignments). This has been changed so that pipelines such as
`somecmd | samtools ...` with `somecmd` aborting before outputting anything
will now propagate the error to the second command. (#721, thanks to
John Marshall; #261 reported by Adrian Tan)
* Added support for use of non-standard index names by pasting the data
filename and index filename with ##idx##. For example
"/path1/my_data.bam##idx##/path2/my_index.csi" will open bam file
"/path1/my_data.bam" and index file "/path2/my_index.csi". (#884)
This affects hts_idx_load() and hts_open() functions.
* Improved the region parsing code to handle colons in reference names.
Strings can be disambiguated by the use of braces, so for example when
reference sequences called "chr1" and "chr1:100-200" are both present, the
regions "{chr1}:100-200" and "{chr1:100-200}" unambiguously indicate which
reference is being used. (#708)
A new function hts_parse_region() has been added along with specialisations
for sam_parse_region() and fai_parse_region().
* CRAM encoding now has additional checks for MD/NM validity. If they are
incorrect, it stores the (incorrect copy) verbatim so round-trips "work".
(#792)
* Sped up decoding of CRAM by around 10% when the MD tag is being generated.
(#874)
* CRAM REF_PATH now supports %Ns (where N is a single digit) expansion in
http URLs, similar to how it already supported this for directories. (#791)
* BGZF now permits indexing and seeking using virtual offsets in completely
uncompressed streams. (#904, thanks to Adam Novak)
* bgzip now asks for extra confirmation before decompressing files that don't
have a known compression extension (e.g. .gz). This avoids `bgzip -d
foo.bam.bai` producing a foo.bam file that is very much not a BAM-formatted
file. (#927, thanks to John Marshall)
* The htsfile utility can now copy files (including to/from URLs using
HTSlib's remote access facilities) with the --copy option, in addition
to its existing uses of identifying file formats and displaying sequence
or variant data. (#756, thanks to John Marshall)
* Added tabix --min-shift option. (#752, thanks to Garrett Stevens)
* Tabix now has an -D option to disable storing a local copy of a remote
index. (#870)
* Improved support for MSYS Windows compiler environment. (#966)
* External htslib plugins are now supported on Windows. (#966)
API additions and improvements
------------------------------
* New API functions bam_set_mempolicy() and bam_get_mempolicy() have been
added. These allow more control over the ownership of bam1_t alignment
record data; see documentation in htslib/sam.h for more information. (#922)
* Added more HTS_RESULT_USED checks, this time for VCF I/O. (#805)
* khash can now hash kstrings. This makes it easier to hash
non-NUL-terminated strings. (#713)
* New haddextension() filename extension API function. (#788, thanks to John
Marshall)
* New hts_resize() macro, designed to replace uses of hts_expand() and
hts_expand0(). (#805)
* Added way of cleaning up unused jobs in the thread pool via the new
hts_tpool_dispatch3() function. (#830)
* New API functions hts_reglist_create() and sam_itr_regarray() are added
to create hts_reglist_t region lists from `chr:<from>-<to>` type region
specifiers. (#836)
* Ksort has been improved to facilitate library use. See KSORT_INIT2 (adds
scope / namespace capabilities) and KSORT_INIT_STATIC interfaces. (#851,
thanks to John Marshall)
* New kstring functions (#879):
KS_INITIALIZE - Initializer for structure assignment
ks_initialize() - Initializer for pointed-to kstrings
ks_expand() - Increase kstring capacity by a given amount
ks_clear() - Set kstring length to zero
ks_free() - Free the underlying buffer
ks_c_str() - Returns the kstring buffer as a const char *,
or an empty string if the length is zero.
* New API functions hts_idx_load3(), sam_index_load3(), tbx_index_load3() and
bcf_index_load3() have been added. These allow control of whether remote
indexes should be cached locally, and allow the error message printed when
the index does not exist to be suppressed. (#870)
* Improved hts_detect_format() so it no longer assumes all text is SAM unless
positively identified otherwise. It also makes a stab at detecting bzip2
format and identifying BED, FASTA and FASTQ files. (#721, thanks to
John Marshall; #200, #719 both reported by Torsten Seemann)
* File format errors now set errno to EFTYPE (BSD, MacOS) when available
instead of ENOEXEC. (#721)
* New API function bam_set_qname (#942)
* In addition to the existing hts_version() function, which reflects the
HTSlib version being used at runtime, <htslib/hts.h> now also provides
HTS_VERSION, a preprocessor macro reflecting the HTSlib version that a
program is being compiled against. (#951, thanks to John Marshall; #794)
ABI changes
-----------
This release contains a number of things which change the ApplicationBinary
Interface (ABI). This means code compiled against an earlierlibrary will
require recompiling. The shared library soversion hasbeen bumped.
* On systems that support it, the default symbol visibility has been changed
to hidden and the only exported symbols are ones that form part of the
officially supported ABI. This is to make clear exactly which symbols are
considered parts of the library interface. It also helps packagers who
want to check compatibility between HTSlib versions. (#946; see for example
issues #311, #616, and #695)
* HTSlib now supports 64 bit reference positions. This means several
structures, function parameters, and return values have been made bigger
to allow larger values to be stored. While most code that uses HTSlib
interfaces should still build after this change, some alterations may be
needed - notably to printf() formats where the values of structure
members are being printed. (#709)
Due to file format limitations, large positions are only supported when
reading and writing SAM and VCF files.
See README.large_positions.md for more information.
* An extra field has been added to the kbitset_t struct so bitsets can be
made smaller (and later enlarged) without involving memory allocation.
(#710, thanks to John Marshall)
* A new field has been added to the bam_pileup1_t structure to keep track
of which CIGAR operator is being processed. This is used by a new
bam_plp_insertion() function which can be used to return the sequence
of any inserted bases at a given pileup location. If the alignment
includes CIGAR P operators, the returned sequence will include pads.
(#699)
* The hts_itr_t and hts_itr_multi_t structures have been merged and can be
used interchangeably. Extra fields have been added to hts_itr_t to support
this. hts_itr_multi_t is now a typedef for hts_itr_t; sam_itr_multi_next()
is now an alias for sam_itr_next() and hts_itr_multi_destroy() is an alias
for hts_itr_destroy(). (#836)
* An improved regidx interface has been added. To allow this, struct reg_t
has been removed, regitr_t has been modified and various new API functions
have been added to htslib/regidx.h. While parts of the old regidx API have
been retained for backwards compatibility, it is recommended that all code
using regidx should be changed to use the new interface. (#761)
* Elements in the hts_reglist_t structure have been reordered slightly so
that they pack together better. (#761)
* bgzf_utell() and bgzf_useek() now use type off_t instead of long for the
offset. This allows them to work correctly on files longer than 2G bytes
on Windows and 32-bit Linux. (#868)
* A number of functions that used to return void now return int so that they
can report problems like memory allocation failures. Callers should take
care to check the return values from these functions. (#834)
The affected functions are:
ksort.h: ks_introsort(), ks_mergesort()
sam.h: bam_mplp_init_overlaps()
synced_bcf_reader.h: bcf_sr_regions_flush()
vcf.h: bcf_format_gt(), bcf_fmt_array(),
bcf_enc_int1(), bcf_enc_size(),
bcf_enc_vchar(), bcf_enc_vfloat(),
bcf_enc_vint(), bcf_hdr_set_version(),
bcf_hrec_format()
vcfutils.h: bcf_remove_alleles()
* bcf_set_variant_type() now outputs VCF_OVERLAP for spanning deletions
(ALT=*). (#726)
* A new field (hrecs) has been added to the bam_hdr_t structure for use by
the new header API. The old sdict field is now not used and marked as
deprecated. The l_text field has been changed from uint32_t to size_t, to
allow for very large headers in SAM files. The text and l_text fields have
been left for backwards compatibility, but should not be accessed directly
in code that uses the new header API. To access the header text, the new
functions sam_hdr_length() and sam_hdr_str() should be used instead. (#812)
* The old cigar_tab field is now marked as deprecated; use the new
bam_cigar_table[] instead. (#891, thanks to John Marshall)
* The bam1_core_t structure's l_qname and l_extranul fields have been
rearranged and enlarged; l_qname still includes the extra NULs. (Almost
all code should use bam_get_qname(), bam_get_cigar(), etc, and has no
need to use these fields directly.) HTSlib now supports the SAM
specification's full 254 QNAME length again. (#900, thanks to John
Marshall; #520)
* bcf_index_load() no longer tries the '.tbi' suffix when looking for BCF
index files (.tbi indexes are for text files, not binary BCF). (#870)
* htsFile has a new 'state' member to support SAM multi-threading. (#916)
* A new field has been added to the bam1_t structure, and others have been
rearranged to remove structure holes. (#709; #922)
Bug fixes
---------
* Several BGZF format fixes:
- Support for multi-member gzip files. (#744, thanks to Adam Novak; #742)
- Fixed error handling code for native gzip formatted files. (64c4927)
- CRCs checked when threading too (previously only when non-threaded).
(#745)
- Made bgzf_useek function work with threads. (#818)
- Fixed rare threading deadlocks. (#831)
- Reading of very short files (<28 bytes) that do not contain an EOF block.
(#910)
* Fixed some thread pool deadlocks caused by race conditions. (#746, #906)
* Many additional memory allocation checks in VCF, BCF, SAM and CRAM code.
This also changes the return type of some functions. See ABI changes
above. (#920 amongst others)
* Replace some sam parsing abort() calls with proper errors. (#721, thanks to
John Marshall; #576)
* Fixed to permit SAM read names of length 252 to 254 (the maximum specified
by the SAM specification). (#900, thanks to John Marshall)
* Fixed mpileup overlap detection heuristic to work with BAMs having long
CIGARs (more than 65536 operations). (#802)
* Security fix: CIGAR strings starting with the "N" operation can no longer
cause underflow on the bam CIGAR structure. Similarly CIGAR strings that
are entirely "D" ops could leak the contents of uninitialised variables.
(#699)
* Fixed bug where alignments starting 0M could cause an invalid memory access
in sam_prob_realn(). (#699)
* Fixed out of bounds memory access in mpileup when given a reference with
binary characters (top-bit set). (#808, thanks to John Marshall)
* Fixed crash in mpileup overlap_push() function. (#882; #852 reported by
Pierre Lindenbaum)
* Fixed various potential CRAM memory leaks when recovering from error cases.
* Fixed CRAM index queries for unmapped reads (#911; samtools/samtools#958
reported by @acorvelo)
* Fixed the combination of CRAM embedded references and multiple slices per
container. This was incorrectly setting the header MD5sum. (No impact on
default CRAM behaviour.) (b2552fd)
* Removed unwanted explicit data flushing in CRAM writing, which on some OSes
caused major slowdowns. (#883)
* Fixed inefficiencies in CRAM encoding when many small references occur
within the middle of large chromosomes. Previously it switched into
multi-ref mode, but not back out of it which caused the read POS field
to be stored poorly. (#896)
* Fixed CRAM handling of references when the order of sequences in a supplied
fasta file differs to the order of the @SQ headers. (#935)
* Fixed BAM and CRAM multi-threaded decoding when used in conjunction with
the multi-region iterator. (#830; #577, #822, #926 all reported by Brent
Pedersen)
* Removed some unaligned memory accesses in CRAM encoder and undefined
behaviour in BCF reading (#867, thanks to David Seifert)
* Repeated calling of bcf_empty() no longer crashes. (#741)
* Fixed bug where some 8 or 16-bit negative integers were stored using values
reserved by the BCF specification. These numbers are now promoted to the
next size up, so -121 to -128 are stored using at least 16 bits, and -32761
to -32768 are stored using 32 bits.
Note that while BCF files affected by this bug are technically
incorrect, it is still possible to read them. When converting to VCF
format, HTSlib (and therefore bcftools) will interpret the values as
intended and write out the correct negative numbers. (#766, thanks to
John Marshall; samtools/bcftools#874)
* Allow repeated invocations of bcf_update_info() and bcf_update_format_*()
functions. (#856, thanks to John Marshall; #813 reported by
Steffen Möller)
* Memory leak removed in knetfile's kftp_parse_url() function. (#759, thanks
to David Alexander)
* Fixed various crashes found by libfuzzer (invalid data leading to errors),
mostly but not exclusively in CRAM, VCF and BCF decoding. (#805)
* Improved robustness of BAI and CSI index creation and loading. (#870; #967)
* Prevent (invalid) creation of TBI indices for BCF files. (#837;
samtools/bcftools#707)
* Better parsing of handling of remote URLs with ?param=val components and
their interaction with remote index URLs. (#790; #784 reported by
Mark Ebbert)
* hts_idx_load() now checks locally for all possible index names before
attempting to download a remote index. It also checks that the remote
file it downloads is actually an index before trying to save and use
it. (#870; samtools/samtools#1045 reported by Albert Vilella)
* hts_open_format() now honours the compression field, no longer also
requiring an explicit "z" in the mode string. Also fixed a 1 byte
buffer overrun. (#880)
* Removed duplicate hts_tpool_process_flush prototype. (#816, reported by
James S Blachly)
* Deleted defunct cram_tell declaration. (66c41e2; #915 reported by
Martin Morgan)
* Fixed overly aggressive filename suffix checking in bgzip. (#927, thanks to
John Marshall; #129, reported by @hguturu)
* Tabix and bgzip --help output now goes to standard output. (#754, thanks to
John Marshall)
* Fixed bgzip index creation when using multiple threads. (#817)
* Made bgzip -b option honour -I (index filename). (#817)
* Bgzip -d no longer attempts to unlink(NULL) when decompressing stdin.
(#718)
Miscellaneous other changes
---------------------------
* Integration with Google OSS fuzzing for automatic detection of more bugs.
(Thanks to Google for their assistance and the bugs it has found.) (#796,
thanks to Markus Kusano)
* aclocal.m4 now has the pkg-config macros. (6ec3b94d; #733 reported by
Thomas Hickman)
* Improved C++ compatibility of some header files. (#772; #771 reported by
@cwrussell)
* Improved strict C99 compatibility. (#860, thanks to John Marshall)
* Travis and AppVeyor improvements to aid testing. (#747; #773 thanks to
Lennard Berger; #781; #809; #804; #860; #909)
* Various minor compiler warnings fixed. (#708; #765; #846, #860, thanks to
John Marshall; #865; #966; #973)
* Various new and improved error messages.
* Documentation updates (mostly in the header files).
* Even more testing with "make check".
* Corrected many copyright dates. (#979)
* The default non-configure Makefile now uses libcurl instead of knet, so it
can support https. (#895)
------------------------------------------------------------------------------
samtools - changes v1.10
------------------------------------------------------------------------------
Changes affecting the whole of samtools, or multiple sub-commands:
* Samtools now uses the new HTSlib header API. As this adds more checks
for invalid headers, it is possible that some illegal files will now be
rejected when they would have been allowed by earlier versions. (#998)
Examples of problems that will now be rejected include @SQ lines with no SN:
tag, and @RG or @PG lines with no ID: tag.
* samtools sub-commands will now add '@PG' header lines to output
sam/bam/cram files. To disable this, use the '--no-PG' option.
(#1087; #1097)
* samtools now supports alignment records with reference positions greater
than 2 gigabases. This allows samtools to process alignments for species
which have large chromosomes, like axolotl and lungfish. Note that due to
file format limitations, data with large reference positions must use the
SAM format. (#1107; #1117)
* Improved the efficiency of reading and writing SAM format data by 2 fold
(single thread). This is further improved by the ability to use multiple
threads, as previously done with BAM and CRAM.
* samtools can now write BGZF-compressed SAM format. To enable this, either
save files with a '.sam.gz' suffix, or use '--output-fmt sam.gz'.
* samtools can now index BGZF-compressed SAM files.
* The region parsing code has been improved to handle colons in reference
names. Strings can be disambiguated by the use of braces, so for example
when reference sequences called "chr1" and "chr1:100-200" are both
present, the regions "{chr1}:100-200" and "{chr1:100-200}" unambiguously
indicate which reference is being used. (#864)
* samtools flags, flagstats, idxstats and stats now have aliases flag,
flagstat, idxstat and stat. (#934)
* A new global '--write-index' option has been added. This allows output
sam.gz/bam/cram files to be indexed while they are being written out. This
should work with addreplacerg, depad, markdup, merge, sort, split, and
view. (#1062)
* A global '--verbosity' option has been added to enable/disable debugging
output. (#1124, thanks to John Marshall)
* It is now possible to have data and index files stored in different
locations. There are two ways to tell samtools where to find the index:
1. Samtools bedcov, depth, merge, mpileup, stats, tview, and view accept a
new option (-X). When this is used, each input sam/bam/cram listed on the
command line should have a corresponding index file. Note that all the
data files should be listed first, followed by all the index files.
(#978, thanks to Mingfei Shao)
2. A delimiter '##idx##' can be appended to the data file name followed by
the index file name. This can be used both for input files and outputs
when indexing on-the-fly.
* HTSlib (and therefore SAMtools) now uses version 4 signatures by
default for its s3:// plug-in. It can also write to S3 buckets, as
long as version 4 signatures are in use. See HTSlib's NEWS file and
htslib-s3-plugin manual page for more information.
* HTSlib (and therefore SAMtools) no longer considers a zero-length file
to be a valid SAM file. This has been changed so that pipelines such
as `somecmd | samtools ...` with `somecmd` aborting before outputting
anything will now propagate the error to the second command.
* The samtools manual page has been split up into one for each sub-command.
The main samtools.1 manual page now lists the sub-commands and describes
the common global options. (#894)
* The meaning of decode_md, store_md and store_nm in the fmt-option section
of the samtools.1 man page has been clarified. (#898, thanks to Evan Benn)
* Fixed numerous memory leaks. (#892)
* Fixed incorrect macro definition on Windows. (#950)
* bedcov, phase, misc/ace2sam and misc/wgsim now check for failure to open
files. (#1013, thanks to Julie Blommaert and John Marshall)
Changes affecting specific sub-commands:
* A new "coverage" sub-command has been added. This prints a tabular
format of the average coverage and percent coverage for each reference
sequence, as well as number of aligned reads, average mapping quality
and base quality. It can also (with the '-m' option) plot a histogram
of coverage across the genome. (#992, thanks to Florian Breitwieser)
* samtools calmd:
- Reference bases in MD: tags are now converted to upper case. (#981,
#988)
* samtools depth:
- Add new options to write a header to the output (-H) and to direct the
output to a file (-o). (#937, thanks to Pierre Lindenbaum)
- New options '-g' and '-G' can be used to filter reads. (#953)
- Fix memory leak when failing to set CRAM options. (#985, thanks to
Florian Breitwieser)
- Fix bug when using region filters where the '-a' option did not work for
regions with no coverage. (#1113; #1112 reported by Paweł Sztromwasser)
* samtools fasta and fastq:
- '-1 FILE -2 FILE' with the same filename now works properly. (#1042)
- '-o FILE' is added as a synonym for '-1 FILE -2 FILE'. (#1042)
- The '-F' option now defaults to 0x900 (SECONDARY,SUPPLEMENTARY).
Previously secondary and supplementary records were filtered
internally in a way that could not be turned off. (#1042; #939
reported by @finswimmer)
- Allow reading from a pipe without an explicit '-' on the command line.
(#1042; #874 reported by John Marshall)
- Turn on multi-threading for bgzf compressed output files. (#908)
- Fixed bug where the samtools fastq -i would output incorrect information
in the Casava tags for dual-index reads. It also now prints the tags
for dual indices in the same way as bcl2fastq, using a '+' sign between
the two parts of the index. (#1059; #1047 reported by Denis Loginov)
* samtools flagstat:
- Samtools flagstat can now optionally write its output in JSON format or
as a tab-separated values file. (#1106, thanks to Vivek Rai).
* samtools markdup:
- It can optionally tag optical duplicates (reads following Illumina
naming conventions only). The is enabled with the '-d' option, which
sets the distance for duplicates to be considered as optical. (#1091;
#1103; #1121; #1128; #1134)
- The report stats (-s) option now outputs counts for optical and
non-primary (supplementary / secondary) duplicates. It also reports
the Picard "estimate library size" statistic. A new '-f' option can
be used to save the statistics in a given file. (#1091)
- The rules for calling duplicates can be changed using the new --mode
option. This mainly changes the position associated with each read in
a pair. '--mode t' (the default) is the existing behaviour where the
position used is that of the outermost template base associated with
the read. Alternatively '--mode s' always uses the first unclipped
sequence base. In practice, this only makes a difference for read
pairs where the two reads are aligned in the same direction. (#1091)
- A new '-c' option can be used to clear any existing duplicate tags.
(#1091)
- A new '--include-fails' option makes markdup include QC-failed reads.
(#1091)
- Fixed buffer overflow in temporary file writer when writing a mixture of
long and short alignment records. (#911; #909)
* samtools mpileup:
- mpileup can now process alignments including CIGAR P (pad) operators
correctly. They will now also produce the correct output for alignments
where insertions are immediately followed by deletions, or deletions by
insertions. Note that due to limitations in HTSlib, they are still
unable to output sequences that have been inserted before the first
aligned base of a read. (#847; #842 reported by Tiffany Delhomme. See
also htslib issue #59 and pull request #699).
- In samtools mpileup, a deletion or pad on the reverse strand is now
marked with a different character ('#') than the one used on a forward
strand ('*'), if the '--reverse-del' option is used. (#1070)
- New option '--output-extra' can be used to add columns for user selected
alignment fields or aux tags. (#1073)
- Fixed double-counting of overlapping bases in alignment records with
deletions or reference skips longer than twice the insert size. (#989;
#987 reported by @dariomel)
- Improved manual page with documentation about what each output column
means. (#1055, thanks to John Marshall)
* samtools quickcheck:
- Add unmapped (-u) option, which disables the check for @SQ lines in the
header. (#920, thanks to Shane McCarthy)
* samtools reheader:
- A new option '-c' allows the input header to be passed to a given
command. Samtools then takes the output of this command and uses it
as the replacement header. (#1007)
- Make it clear in help message that reheader --in-place only works on
CRAM files. (#921, thanks to Julian Gehring)
- Refuse to in-place reheader BAM files, instead of unexpectedly writing a
BAM file to stdout. (#935)
* samtools split:
- In samtools split, the '-u' option no longer accepts an extra file
name from which a replacement header was read. The two file names
were separated using a colon, which caused problems on Windows and
prevented the use of URLs. A new '-h' option has been added to allow
the replacement header file to be specified in its own option. (#961)
- Fixed bug where samtools split would crash if it read a SAM header that
contained an @RG line with no ID tag. (#954, reported by @blue-bird1)
* samtools stats:
- stats will now compute base compositions for BC, CR, OX and RX tags, and
quality histograms for QT, CY, BZ and QX tags. (#904)
- New stats FTC and LTC showing total number of nucleotides for first and
last fragments. (#946)
- The rules for classifying reads as "first" or "last" fragment have been
tightened up. (#949)
- Fixed bug where stats could over-estimate coverage when using the
target-regions option or when a region was specified on the
command-line. (#1027; #1025, reported by Miguel Machado; #1029,
reported by Jody Phelan).
- Fixed error in stats GCD percentile depth calculation when the depth to
be reported fell between two bins. It would report the depth entirely
from the lower bin instead of taking a weighted average of the two.
(#1048)
- Better catching and reporting of out of memory conditions. (#984; #982,
reported by Jukka Matilainen)
- Improved manual page. (#927)
* samtools tview:
- tview can now display alignments including CIGAR P operators, D
followed by I and I followed by D correctly. See mpileup above for
more information. (#847; #734, reported by Ryan Lorig-Roach)
- The "go to position" text entry box has been made wider. (#968, thanks
to John Marshall)
- Fixed samtools tview -s option which was not filtering reads correctly.
It now only shows reads from the requested sample or read group. (#1089)
* samtools view:
- New options '-d' and '-D' to only output alignments which have a tag
with a given type and value. (#1001, thanks to Gert Hulselmans)
* misc/plot-bamstats script:
- Fixed merge (-m) option. (#923, #924 both thanks to Marcus D Sherman)
- Made the quality heatmap work with gnuplot version 5.2.7 and later.
(#1068; #1065 reported by Martin Mokrejš)
- Fixed --do-ref-stats bug where fasta header lines would be counted as
part of the sequence when the --targets option was used. (#1120, thanks
to Neil Goodgame)
* Removed the misc/varfilter.py Python script, as it takes consensus-pileup
as input, which was removed from samtools in release 0.1.17 in 2011.
(#1125)
------------------------------------------------------------------------------
bcftools - changes v1.10
------------------------------------------------------------------------------
* Numerous bug fixes, usability improvements and sanity checks were added to
prevent common user errors.
* The -r, --regions (and -R, --regions-file) option should never create
unsorted VCFs or duplicates records again. This also fixes rare cases
where a spanning deletion makes a subsequent record invisible to `bcftools
isec` and other commands.
* Additions to filtering and formatting expressions
- support for the spanning deletion alternate allele (ALT=*)
- new ILEN filtering expression to be able to filter by indel length
- new MEAN, MEDIAN, MODE, STDEV, phred filtering functions
- new formatting expression %PBINOM (phred-scaled binomial probability),
%INFO (the whole INFO column), %FORMAT (the whole FORMAT column), %END
(end position of the REF allele), %END0 (0-based end position of the
REF allele), %MASK (with multiple files indicates the presence of the
site in other files)
* New plugins
- `+gvcfz`: compress gVCF file by resizing gVCF blocks according to
specified criteria
- `+indel-stats`: collect various indel-specific statistics
- `+parental-origin`: determine parental origin of a CNV region
- `+remove-overlaps`: remove overlapping variants.
- `+split-vep`: query structured annotations such INFO/CSQ created by
bcftools/csq or VEP
- `+trio-dnm`: screen variants for possible de-novo mutations in trios
* `annotate`
- new -l, --merge-logic option for combining multiple overlapping regions
* `call`
- new `bcftools call -G, --group-samples` option which allows grouping
samples into populations and applying the HWE assumption within but not
across the groups.
* `csq`
- significant reduction of memory usage in the local -l mode for VCFs
with thousands of samples and 20% reduction in the non-local
haplotype-aware mode.
- fixes a small memory leak and formatting issue in FORMAT/BCSQ at sites
with many consequences
- do not print protein sequence of start_lost events
- support for "start_retained" consequence
- support for symbolic insertions (ALT="<INS...>"), "feature_elongation"
consequence
- new -b, --brief-predictions option to output abbreviated protein
predictions.
* `concat`
- the `--naive` command now checks header compatibility when
concatenating multiple files.
* `consensus`
- add a new `-H, --haplotype 1pIu/2pIu` feature to output first/second
allele for phased genotypes and the IUPAC code for unphased genotypes
- new -p, --prefix option to add a prefix to sequence names on output
* `+contrast`
- added support for Fisher's test probability and other annotations
* `+fill-from-fasta`
- new -N, --replace-non-ACGTN option
* `+dosage`
- fix some serious bugs in dosage calculation
* `+fill-tags`
- extended to perform simple on-the-fly calculations such as calculating
INFO/DP from FORMAT/DP.
* `merge`
- add support for merging FORMAT strings
- bug fixed in gVCF merging
* `mpileup`
- a new optional SCR annotation for the number of soft-clipped reads
* `reheader`
- new -f, --fai option for updating contig lines in the VCF header
* `+trio-stats`
- extend output to include DNM homs and recurrent DNMs
* VariantKey support
--
The Wellcome Sanger Institute is operated by Genome Research
Limited, a charity registered in England with number 1021457 and a
company registered in England with number 2742969, whose registered
office is 215 Euston Road, London, NW1 2BE. _______________________________________________
Samtools-help mailing list
Samtools-help@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/samtools-help