\name{DropletUtilsNews}
\title{DropletUtils News}
\encoding{UTF-8}

\section{Version 1.32.0}{\itemize{
\item Updated \code{downsampleReads()} to use the new downsampling algorithm from \pkg{scuttle}.
This is more efficient but slightly changes the results compared to the previous version.
}}

\section{Version 1.30.0}{\itemize{
\item Further improvements to the knee point detection in \code{barcodeRanks()}.
This now uses a curve-tracing algorithm where the knee is defined inside the window with the highest curvature.
We also refine inflection point to report the earlier location if multiple inflection points are present on the curve.

\item Improve the efficiency of Matrix Market file parsing in \code{read10xCounts()}.
We support multi-threaded parsing and can directly read into dgCMatrices or SVT_SparseMatrices without intermediate.
This is based on the \pkg{eminem} C++ library from the \pkg{assorthead} package.
}}

\section{Version 1.28.0}{\itemize{
\item Use a more stable algorithm for identifying the knee point in \code{barcodeRanks()}.
The new algorithm is based on maximizing the distance from a line between the plateau and the inflection point.
Previously, we tried to minimize the signed curvature but this was susceptible to many local minima due to the instability of the empirical second derivative, even after smoothing.

\item Set \code{alpha=Inf} as the default for \code{testEmptyDrops()}.
This is motivated by the realization that an underestimated \code{alpha} can still yield anticonservative p-values and is not universally safer than \code{alpha=Inf}.
Defaulting \code{alpha=Inf} is preferable as it is at least correct in the expected case of multinomial sampling.
}}

\section{Version 1.18.0}{\itemize{
\item Added an \code{intersect.genes=} option to \code{read10xCounts()} for samples with inconsistent gene information.
Automatically fix empty chromosome names for mitochondrial genes in certain Cellranger outputs.
}}

\section{Version 1.12.0}{\itemize{
\item Added \code{BPPARAM=} to \code{read10xCounts()} for parallelized reading of multiple samples.

\item Gave all the \code{*Ambience()} functions better names, and soft-deprecated the current versions.

\item Added \code{ambientContribSparse()} to estimate the ambient contribution under sparsity assumptions.

\item Added \code{cleanTagCounts()} to remove undesirable barcodes from tag count matrices.

\item Converted all matrix-accepting functions to S4 generics to support SummarizedExperiment inputs.

\item \code{emptyDrops()} will now coerce all \linkS4class{DelayedArray} inputs into wrapped \linkS4class{SparseArraySeed}s.

\item Setting \code{test.ambient=TRUE} in \code{emptyDrops()} will no longer alter the FDRs compared to \code{test.ambient=FALSE}.
Added \code{test.ambient=NA} to retain back-compatible behavior.

\item Bugfix for correct use of redefined \code{lower} when \code{by.rank=} is set in \code{\link{emptyDrops()}}.

\item Added a \code{constant.ambient=TRUE} option to \code{hashedDrops()} to better support experiments with very few HTOs.
}}

\section{Version 1.10.0}{\itemize{
\item Migrated \code{downsampleMatrix()} to \pkg{scuttle} with a re-export.

\item Added \code{features=} to \code{downsampleReads()} for per-feature-set downsampling.

\item Added matrix support for \code{y=} and \code{ambient=} in \code{maximumAmbience()}.

\item Added \code{controlAmbience()} for easy estimation of ambient contamination with control features.

\item Added \code{removeAmbience()} function to remove the ambient solution from a count matrix, mostly for aesthetics.

\item Report library index and feature type in output of \code{read10xMolInfo()}.

\item Support subsetting by library index/type in functions that use the molecule information file,
such as \code{swappedDrops()} and \code{chimericDrops()}.

\item Added \code{by.rank=} option to \code{estimateAmbience()} and \code{emptyDrops()},
for estimation of the ambient profile by excluding barcodes with the largest totals.

\item Added \code{exclude.from=} option to \code{barcodeRanks()},
to avoid problems with instability at low ranks for knee/inflection calculations
(contributed by Stefano Mangiola).

\item Minor bugfix in \code{barcodeRanks()} calculation of the knee point.
Note that this affects the default choice of \code{retain=} in \code{emptyDrops()}.

\item Split off HTO ambience inferences into a separate \code{inferAmbience()} function.

\item Added support for combinatorial barcodes in \code{hashedDrops()}.
}}

\section{Version 1.8.0}{\itemize{
\item Added the downsampleBatches() function for convenient downsampling of batches.

\item Preliminary support for using the output of write10xCounts() back in Cellranger.

\item Support reading in 10X output files via prefixes in read10xCounts().
Automatic detection of whether a file is Gzipped or not.

\item Added chimericDrops() to remove chimeric molecules due to within-sample re-priming.

\item Added hashedDrops() to demultiplex cell hashing experiments.

\item Added maximumAmbience() to estimate the maximum contribution of the ambient profile.
}}

\section{Version 1.6.0}{\itemize{
\item Switched emptyDrops() to use Boost's discrete_distribution for weighted sampling. 
This results in some minor stochastic changes to the Monte Carlo p-values.
Automatically round non-integer count matrices.
}}

\section{Version 1.4.0}{\itemize{
\item Removed read10xMatrix().

\item Supported CellRanger v3 output files in read10xMolInfo(), read10xCounts(), write10xCounts().

\item Modified barcodeRanks() to return a DataFrame with knee/inflection estimates in metadata.

\item Slight change to random number generation in emptyDrops() to be agnostic to number of cores.
}}

\section{Version 1.2.0}{\itemize{
\item Added removeSwappedDrops() for removing swapping in other types of droplet-based data.

\item Added alpha= argument to testEmptyDrops() to support overdispersion during sampling.
Returned arguments and estimates in metadata of testEmptyDrops(), emptyDrops().

\item Added encodeSequences() for convenient 2-bit encoding of sequences.

\item Added get10xMolInfoStats() function to compute per-cell statistics from a molecule info file.

\item Deprecated read10xMatrix(), as it does not add much practical value over Matrix::readMM().

\item Support the 10X sparse HDF5 format in read10xCounts().

\item Support the 10X sparse HDF5 format in write10xCounts().
}}

\section{Version 1.0.0}{\itemize{
\item
New package DropletUtils, for handling droplet-based single-cell RNA sequencing data.
}}

