loadContigs() now keeps a standardized sequence/sequence_aa column for every format (reconstructed from framework/CDR regions for 10x and MiXCR, copied natively for AIRR-family inputs, NA where unavailable), plus sequence_alignment/germline_alignment when present. This is additive and does not change existing columns.combineTCR() and combineBCR() gain retain.sequences (default FALSE). When set, full-length sequences are carried into the combined object as per-chain columns (sequence_nt1/sequence_nt2, sequence_aa1/sequence_aa2, and optionally sequence_alignment*/germline*) without altering CTaa/CTnt/CTgene/CTstrict. The retained columns flow through combineExpression() into single-cell metadata.exportClones(format = "airr") now populates sequence/sequence_aa (and alignment/germline) fields when those sequences were retained.exportDowser() function (and exportClones(format = "dowser")) reshapes BCR/TCR data into an AIRR data frame ready for dowser::formatClones(), enabling B cell lineage / phylogenetic analysis in the Immcantation framework (resolves #578). exportDowser() errors with guidance when the required IMGT-gapped alignments are absent.clonalCluster() now passes the tight similarity threshold to immApex::buildNetwork() instead of the loose value that was refiltered afterward. The engine prunes early rather than returning a large edge list that is mostly discarded. Raw thresholds are unchanged, and cluster assignments match the previous behavior.clonalCluster() selects the edge expansion from cluster.method. Connected-components clustering uses the memory-efficient star expansion, which is exact for components. Community-detection methods use the full clique expansion for exact edge multiplicity.combineBCR(retain.sequences = ...) now resolves the retained columns against the intersection of columns shared by all samples, rather than the first sample only. This prevents an "undefined columns selected" error (or silent dropping of a column) when samples carry heterogeneous fields, matching combineTCR()."NA" placeholder tokens (e.g. "seq1;NA") when a contig lacks a full-length sequence; such tokens are dropped from the join and an all-placeholder value becomes a real NA.dowser to Suggests for the new lineage export path.clonalCluster() requires immApex (>= 1.7.1) for the new expand argument and the faster network engine.dowser export path in the main vignette and the "Combining Contigs into Clones" article.retain.sequences to exportDowser() to dowser::formatClones() workflow.combineBCR() assigning the same group.by value to all cells instead of per-barcode values.clonalCluster() failing when group.by produces a single group by correcting the condition for adding the group column to the edge list.chain = "IGH" behavior in combineBCR().clonalBin() function to bin clones by frequency or proportion without requiring a single-cell object. Adds clonalFrequency, clonalProportion, and cloneSize columns to the output of combineTCR(), combineBCR(), or combineExpression(). Supports custom bin thresholds, optional grouping by metadata variable, and chain filtering.vizCirclize() function for quick chord diagram visualization without manual circlize code. Supports directional arrows, custom colors, and sector annotations.getCirclize() major enhancements:
group.by accepting a vector of columnsmethod parameter: "unique", "abundance", "jaccard", "overlap"symmetric parameter for directional flow analysisinclude.metadata parameter returning sector statisticsmin.shared, top.links, filter.sectorspalette parameteralluvialClones() major enhancements:
top.clones, min.freq, highlight.clones, and highlight.color parametersstratum.width, flow.alpha, show.labels, label.sizeorder.strata parameter for controlling level ordering within each stratumexport.table output now includes freq, prop, and rank columnscombineBCR() defaults the clustering call to "IGH" instead of "both"cloneCall to clone.call, exportTable to export.table, cloneSize to clone.size, filterNA to filter.na, addLabel to add.label, clonalSplit to clonal.split). All deprecated arguments will continue to work with a deprecation warning until version 3.0.0.combineExpression() failing with "undefined columns selected" when input data already contained clonalFrequency/clonalProportion columns from a prior clonalBin() call.combineBCR() and clonalCluster():
chains = "IGL", "IGK", or "Light" to get all light chains in downstream quantification.combineBCR(), specifically in formatting CTstrict.Update to match Bioconductor Release 3.22 on 2025/10/30.
order.by issue in positionalProperty().combineExpression().percentKmer().percentGeneUsage() and propagated to wrappers: percentGenes(), percentVJ(), and vizGenes().group.by for combineBCR().clonalProportion calculation to use grouping properly during combineExpression().exportClones() TRA/Light chain column handling.quietBCRgenes() and quietTCRgenes().StartracDiversity().clonalSizeDistribution() - removed cubature, truncdist, and VGAM from dependencies.clonalSizeDistribution().loadContigs()."tcrpheno" and "immunarch" to exportClones().exportClones() to base R to reduce dependencies.percentAA() refactored to minimize dependencies and use immApex calculateFrequency().positionalEntropy() refactored to minimize dependencies and use immApex calculateEntropy().clonalDiversity() refactored for performance - now calculates a single diversity metric at a time and includes new estimators like "gini", "d50", and supports hill numbers.percentKmer() refactored to use immApex calculateMotif() for both aa and nt sequences. No longer calculates all possible motifs, but only motifs present.clonalCluster() now allows for dual-chain clustering, V/J filtering, normalized or straight edit distance calculations, and return of clusters, igraph objects, or adjacency matrix.combineBCR() offers single/dual chain clustering, aa or nt sequences, adaptive filtering of V and J genes, and normalized or straight edit distance calculations.percentGeneUsage() is now the underlying function for percentGenes(), percentVJ(), and vizGenes() and allows for percent, proportion, and raw count quantification..themeRepertoire()) to all plots and allow users to pass arguments to it.clonalCompare() issue with plotting a 0 row data frame now errors with message.clonalScatter() group.by/axes call now works for non-single-cell objects.group.by in combineExpression().x.axis and group.by in clonalDiversity()..parseContigs() to function with more complex groupings.annotateInvariant() functionality for mouse and human TCRs.quietTCRgenes(), quietBCRgenes(), quietVDJgenes().clonalCompare() assertthat statements.getCirclize().clonalCompare() - expanded assertthat statement.Update for Bioconductor version 3.20.
quietBCRgenes(), quietTCRgenes(), and quietVDJgenes() for filtering out known TCR and/or BCR gene signatures.Seurat to the Suggests field in the DESCRIPTION file.getContigDoublets() experimental function to identify TCR and BCR doublets as a preprocessing step to combineExpression().proportion argument to clonalCompare() so that when set to FALSE, the comparison will be based on frequency normalized by per-sample repertoire diversity.clonalLength().clonalLength().percentVJ().positionalProperty() and exportTable.loadContigs() edge case when TRUST4 data only has 1 row.lifecycle, purrr, withr.clonalCluster() and exportGraph = TRUE.combineBCR() by a constant factor with C++.exportTable before plotting.group.by in clonalOverlap().group.by in clonalCompare().constructConDFAndparseTCR.cpp.clonalQuant() and factor-based group.by variable.getCirclize() refactored to prevent assumptions and added include.self argument..count.clones() internal function for getCirclize() and clonalNetwork().order.by parameter to visualizations to specifically call order of plotting using a vector or "alphanumeric".clonalLength() and NA handling.clonalCompare() now retains the original clonal info if using relabel.clones.loadContigs() and testthat.positionalProperty() assumption that clones will all have 20 amino acids.positionalProperty() and removing non-amino acids.vizGenes().clonalCluster() with export.graph = TRUE.combineExpression() when using 1 chain.loadContigs() and testthat.loadContigs() for BD, Omniscope, and Immcantation formats.loadContigs().combineBCR() and combineTCR() now allow for unproductive contig inclusions with new filterNonproductive parameter.combineBCR() will now prompt user if samples is not included instead of erroring..lvCompare()..lvCompare() only looks at first set of sequences in multi-sequence chain.clonalCluster().clonalOccupy() rewrite counting and NA handling.clonalOverlay() arguments now cutpoint and use cut.category to select either clonalProportion or clonalFrequency.percentAA(), percentGenes(), percentVJ(), percentKmer(), exportClones(), positionalEntropy(), positionalProperty().compareClonotypes to clonalCompare(), clonotypeSizeDistribution to clonalSizeDistribution(), scatterClonotypes to clonalScatter(), quantContig to clonalQuant(), highlightClonotypes to highlightClones(), lengthContigs to clonalLength(), occupiedscRepertoire to clonalOccupy(), abundanceContig to clonalAbundance(), alluvialClonotypes to alluvialClones().clonalCompare() to allow for highlighting sequences and relabeling clonotypes..quiet() function..theCall() now allows for a custom header/variable and checks the colnames.df to input.data, dir to input, sc to sc.data.StartracDiversity() metric re-implemented to remove startrac-class object intermediary.group.by and split.by consolidated into single group.by parameter.loadContigs().clonalQuant() for instance of scale = FALSE and group.by being set.clonalDiversity() no longer automatically orders samples.order parameter from clonalQuant(), clonalLength(), and clonalAbundance().x.axis parameter in clonalDiversity() separated from group.by parameter.stripBarcodes().expression2List() (now only an internal function).checkContigs().combineBCR() to allow for non-related sequences.checkContigs() function to quantify the percentages of NA values by genes or sequences.exportClones to clonalNetwork() to isolate clones shared across identities.clonalDiversity() and skipping boots.clonalBias().parseAIRR.combineExpression().lapply() for combineBCR() and clusterTCR() - no more pairwise distance matrix calculation.loadContigs() support for data.frames or lists of contigs.loadContigs().combineBCR() to chunk nucleotide edit distance calculations by V gene and give option to skip edit distance calculation with call.related.clones = FALSE.clusterTCR() to use lvCompare() and base edit distances on V gene usage.loadContigs().combineTRUST4 - superseded by loadContigs().combineBCR().loadContigs().loadContigs() TRUST4 parsing allows for all NA values in a chain.combineExpression() group.by = NULL will now collapse the whole list.clonalDiversity() now has skip.boots to stop bootstrapping and downsampling.vizGenes().filteringMulti in combineTCR now checks to remove list elements with 0 cells.top_n() call (deprecated), using slice_max() without ties.arrange() call during parseTCR() to organize the chains.clonalNetwork() that was leading to errors.combineBCR().group.by variable to all applicable visualizations.return.boots to clonalDiversity() to allow export of all bootstrapped values.grabMeta() internal function to no longer assume the active identity is clusters.checkBlanks() now checks if a blank was detected before trying to remove it.clonalNetwork() automatically resulted in default error message - bug now removed.clonalBias() now adds z-score of bias when matrix is exported. exportTable parameter is now fixed.loadContigs() for non-10X formatted single-cell data.combineTRUST4, superseded by loadContigs().combineTCR() now allows for > 3 recovered TCRs per barcode.combineTCR(), will detect if data is from 10X and automatically remove nonproductive or multi chains.parseTCR() to include evaluation for gamma/delta chains.highlightClones() now returns the specific clones instead of clonotype 1, etc.clonalCompare() numbers parameter now for group-wide numbers and not overall top X numbers.clonalDiversity() that caused errors when group.by parameter was used.parseBCR() to reduce complexity and assume lambda >> kappa.clonalCluster() function broken with Seurat Objects.checkContigs now ensures data frames and that "" are converted into NAs.makeGenes() internal function changing na.omit to str_replace_na() and separating the BCR calls by chain to prevent combination errors.parseBCR() to check for contents of the chains. Resolved issue with placing light chain into heavy chain slots when 2 contigs are present.checkBlanks() to include NA evaluation and placed the check in all viz functions.clonalNetwork() function.clonalOverlay() to use new internal getCoord() function like clonalNetwork().threshold parameter to clonalSizeDistribution().clonalCluster().clonalCluster() and combineBCR() to speed up comparison and use less memory.filteringMulti now isolates the top contig by chain, then for barcodes with chains > 2, isolates the top expressing chains.makeGenes() internal function to use str_c().threshold parameter to combineTRUST4 for B cell manipulation.combineTCR function to prevent cell type mix up.vizGenes() can now look at other component genes of the receptor and separate parameter replaced by y.axis.clonalBias() function for inter-cluster comparison.clonalCluster() and combineBCR() assumption that you will have unrelated clones.combineBCR() auto naming function updated to actually name the list elements.createHTOContigList() function to create contig list of multiplexed experiments. Fixed issue with groupBy variable.include.na and split.by to clonalOccupy() and changed labeling depending on frequency vs proportion.split.by variable.group and groupBy parameters are now group.by.dot.size parameter to clonalScatter().filteringMulti now subsets clonotypes with contigs >= 2, to prevent 2 of the same chains.dot.size as a variable on the x or y axis.regressClonotype function - too many dependencies required.chain option to visualizations and combineExpression() to allow users to facilitate single chains - removed chain option from combineTCR/combineBCR/combineTRUST4.combineTCR/combineBCR/combineTRUST4 for cell barcodes with only NA values.expression2List() for cells with NA clonotypes.vizGenes() to order genes automatically by highest to lowest variance.vizGenes() to pull the correct genes based on selection.clonalDiversity() to allow for more options in organizing plot and box plots.combineExpression() adds the groupBy variable to Frequency, allowing for multiple calculations to be saved in the meta data.StartracDiversity().SingleCellExperiment format.combineSeurat in favor of combineExpression().seurat2List in favor of expression2List().proportion to combineExpression() function.clonalCluster() and clonalOverlay() functions.hammingCompare with lvCompare to enable superior clonotype calling in combineBCR().checkBlanks() function to remove list elements without clonotypes.clonalSizeDistribution() now returns a plot() function.getCirclize(), exportTable to visualization functions.screp_example data to package.vizGenes() function and support for monocle in combineExpression().