(C)  NovoCraft Technologies Sdn Bhd

You need a valid current license to use Novoalign Version 4 and later. You can purchase a license
or request a trial license from http://www.novocraft.com/buy-now/

Novoalign V3 and earlier can be used by educational and non-profit organisations without a license
for internal use only. Some features are disabled if a valid license file is not found.

For commercial licenses and support contracts contact sales@novocraft.com

CHANGE LOG
Novosort V3.01.05  26 Jan 2022
-----------------
Novosort
       1. Fix: When writing singleton reads (--consensus with minReads set to 1) to the consensus read file the SEQ & QUAL fields of -ve strand alignments were not reverse complemented.
       2. Fix: Secondary & Supplementary alignments were not being marked as duplicates or removed from the ouput BAM even though a consensus read had been generated from the primary alignments.
       3. Fix. UMI correction failed when using a valid UMI list, producing a badly formatted bam file.

Novoalign V4.03.05, Novomethyl V1.07, Novosort V3.01.04
-------------------------------------------------------
Novoalign
       1. When using --amplicons option Novoalign now checks maximum possible length of a primer dimer
          and may suggest using the -l option to avoid mapping them. If maped they can result if fully
          soft clipped alignments which may break GATK tools.
Novosort
       1. Changed the log to report alignment counts rather than pairs. This is necessary as some secondary
          and supplementary alignments may not be paired.

Novoalign V4.03.04, Novomethyl V1.07, Novosort V3.01.03
-------------------------------------------------------
Novoalign
       1. Fix: Assert failure in rptSAM.cc module of Novoalign.
       2. Fix: Novoalign could seg fault when using the -m option and mapping miRNA against a reference of mature miRNA.
       3. When using alternate scaffolds per read we changed the way random selection of alignments works.
          This applies when there are mappings in multiple alternate scaffold regions and/or additional mappings outside
          the regions with alternate scaffolds. We now randomly choose which alternate region to report rather than
          randomly selecting from all alignments. All alignments in the randomly selected region (possibly on multiple
          alternate scaffolds) with score within -R limit of the best alignment will be reported.
          A second layer of random selction applies if an alternate scaffold has multiple mappings to a read.
Novoindex
       1. Accept 'U' as equivalent to 'T' in the reference sequence. Previously it resulted in an error message.
Novoutil
       1. In novutil iupac option -g if there is no GT tag or AF tag on a vcf entry then treat the SNP as homozygous rather than heterozygous
       2. Novoutil sequence can now accept a BED file of regions to extract.
       3. Fix: Novoutil splitbed failed if both include & exclude lists were empty.

Novoalign V4.03.03, Novomethyl V1.07, Novosort V3.01.03
-------------------------------------------------------
Novoalign
       1. Add '+-' option to 5' UMI extraction. When used with UMIs on both ends of a fragment it
          puts the most 5' UMI first in the SAM tag rather than the read1 UMI first such that reads
          from the two original strands end up with the same UMI tag. This allows Novosort to recognise
          duplicates mapped to opposite strands and to produce a single consensus record from both strands.
       2. Fix: If processing reads from an unmapped BAM file and using -# option to limit the number
          of reads Novoalign could hang after processing the requested number of reads.
Novosort
       1. Revised the method for calculating consensus base quality. It now uses frequentist inference.
       2. Fix: Gradual growth in memory use due to temporary file segments not reusing deflator buffers.
       3. Fix: Name sort in V3 was broken.
       4. Add Supplementary flag to name sort so that supplementaries come after primaries.

Novosort V3.01.02
-----------------
       1. Fix: Novosort could seg fault when there were multiple input files and some had no alignments.

Novoalign V4.03.02, Novomethyl V1.07, Novosort V3.01.01
-------------------------------------------------------
Novosort
       1. Fix: The --stats option was reporting library "" when it didn't exist.
       2. Fix: Novosort V3 would Seg fault if all input files were already sorted.


Novoalign V4.03.02, Novomethyl V1.07, Novosort V3.01.00
-------------------------------------------------------
Novosort
       1. Since V3 release duplicate detection for single end reads was not functioning as designed. Single end
          duplicate testing was on by default and the --includeSE option was turning it off. There was also a
          failure to count single end reads when the option was off.
       2. Default optical duplicate distance was not being set leading to optical duplicates being counted as
          "Excess Same Tile" duplicates. It did not affect which alignments were flagged as duplicates.
Novoalign
       1. Added option --SuppNoSQ, for supplementary SAM records put '*' in SEQ and QUAL fields. This is similar
          to the --2NoSQ option for secondary alignments.
          We are using this when genotyping alternate scaffolds based on alignment cover. It shouldn't be
          used if you intended to call variants from the supplementary alignments.

Novoalign V4.03.01, Novomethyl V1.07, Novosort V3.00.00
-------------------------------------------------------
Novoalign
       1. Approx 25% performance improvement for mate pair alignments.

Novoalign V4.03.00, Novomethyl V1.07, Novosort V3.00.00
-------------------------------------------------------
This release is primarily about better UMI support with changes in Novoalign for extracing UMIs
from 5' of read and changes in Novosort to implement UMI clustering and correction algorthims including
consensus read generation.

Novoalign
       1. When extracting UMIs from both read 1 & 2 (-5 option) add a hyphen delimiter between the UMIs in the RX && QX tags
       2. The -5 option now allows extraction of both cellular barcodes (CR tag)  and UMIs (RX tag) from 5' of a read.
       3. New --umi option allows input of an UMI only read file with UMI extraction similar to -5 option.
       4. New option --umi2 <tag> to extract UMIs from read header and store into a SAM tag.
       5. When mapping an (unaligned) BAM file any @PG or @CO records are now copied to the output BAM file. Previously
          only @RG was copied.
       6. Fix: Assert failure in rptCIGAR() method
       7. Implement a sliding window base quality trim option as alternative to -H option.
       8. Fix: Mate pair alignments could get an assert failure in method findmate256()

Novosort
       1. UMI aware mark duplicates now allows inexact matching and correction of UMIs and provision for whitelists
          and clustering of up to 3 UMI/Barcode tags. Functionally similar to UMI-Tools
          https://umi-tools.readthedocs.io/en/latest/
          Novosort duplicate marking should be concordant on reruns. Other python based tools may not be.
       2. Fix: Novosort could add a second set of Z5 & Zq tags if an unsorted input file already had
          these tags.
       3. Novosorts ranking of duplicates uses the sum of all base qualities to determine highest
          quality read of a signature group. Samtools markdup only sums base qualities > 15.
          We've added option --minBaseQuality so you can set a lower limit on base quality for
          ranking. Set --minBaseQuality 15 to get samtools compatible ranking and an increase in CPU time.
       4. Improved multi-threading and other performance improvements can give ~33% elapsed time
          reduction when Marking Duplicates. The actual % drop you'll see depends on how many
          cores you are using and how fast your IO system is.
       5. New option --consensus for generating consensus reads from duplicate groups. Functionally
          similar to fgbio, http://fulcrumgenomics.github.io/fgbio/tools/latest/CallMolecularConsensusReads.html.
       6. Addition of --stats option to write tsv format file with duplicate statistics.
       7. Novosort now adds it's own @PG record and updates PG tag of any SAM records that it updates. Records
          that only had the order changed keep their original PG tag.

Novoalign V4.02.02, Novomethyl V1.07, Novosort V2.02.00
-------------------------------------------------------
Novoalign
       1. Fix: Reruns of Novoalign V4 could be discordant. Differences were seen in reads
          multi-mapped to repeats with very low alignment scores and
          with MAPQ <= 1 and affected the AM & SM single end quality tags but could
          also change MAPQ between 0&1.
       2. Fix: When using --tune Hiseqx the polyclonal settings were misreported, showing as -p 1,4 when it was -p 4,20
       3. Fix: When using --tags MC the Mate CIGAR tag was not being added to chimeric supplementary alignments.

Novoalign V4.02.01, Novomethyl V1.07, Novosort V2.02.00
-------------------------------------------------------
Novoalign
       1. Add option to disable generation of M5 checksums for @SQ records.
           --addM5 [on|off]   Default is On.
Novoindex
       1. Adjust default index k&s for better performance on Human reference genome.
          Default now builds a k=15, s=2 index rather than a 14/2.
Novoutil
       1. Add function 'addFastaM5' to add M5 and LN metadata tags to fasta headers.

Novoalign V4.02.00, Novomethyl V1.07, Novosort V2.02.00
-------------------------------------------------------
Novoalign
       1. Fix: Novoalign paired end chimera mode could produce invalid alignments
          across circular chromosome junctions if read sequence had N's at the junction
       2. Fix: novoalign: src/rptSAM.cc:775: void rptSAM::rptcigar(): Assertion `tgt[tposn] != '\0'' failed.
Novosort
       1. Performance tuning of mark duplicates code. This should reduce run time on high core count servers.
Novoutil
       1. Fix: Splitbed function could produce bed file with coordinates outside chromosome size when
          using the --add option. To fix we now have an option (--sam) to input a SAM format header
          file and then extract sequence lengths from the @SQ records.

Novoalign V4.01.00, Novomethyl V1.07, Novosort V2.01.02
-------------------------------------------------------
Novoalign
       1. In base quality calibration (-k) limit maximum base quality to 60. (GATK limit)
       2. Fix: When compiling with gcc 7.4, BAM output format shifted base qualities one to the right. This only
          happened on our development system after upgrading gcc and isn't in any official releases.
       3. Increased sensitivity of chimeric read mapping by removing structural variation penalty from calculation.
Novosort
       1. Add option --callableRegions to write a bed file of callable regions. "novosort --help" for more details.
Novoutil
       1. Added function splitbed that divides a bed file into multiple files of approximate equal size. We have used this with WGS
          sequencing and novosort --callableregions to create per core region bed files for variant calling that are equal size.
          For WES we use target capture region bed files as input rather than the callable regions file from Novosort
          "novoalign splitbed --help" for details

Novoalign V4.00.01, Novomethyl V1.07, Novosort V2.01.01
-------------------------------------------------------
Novoalign
      1. Fix: When using alternate scaffolds the mate CIGAR tag (enable with --tags MC ) could have the CIGAR of a supplementary alignment rather than the primary alignment.

Novoalign V4.00.00, Novomethyl V1.07, Novosort V2.01.01
-------------------------------------------------------
Novoalign
      1. Fix: If Novoalign is given empty input file it wasn't writing BAM headers and exited with an error status.
         This change will produce a valid SAM file with headers only and exit with normal status.
	  2. When several alt-scaffold alignments have the same best alignment score (and better than main chromosome alignments) the primary alignment is now selected randomly from the alt-scaffold alignments.

Release Candidate 1 Novoalign V4.00.RC1-20190917, Novomethyl V1.07, Novosort V2.01.01
---------------------------------------------------------------------------
Novoalign
     1. Fix: Novoalign would crash with Interrupt..4 on computers without SSE4.1
     2. Fix: Novoalign paired end could slow if one read had trimmed to a short length due to low quality bases and the other was adapter trimmed.
     3. Add option --2NoSQ to have SEQ and QUAL set to '*' on secondary alignments.
     4. Fix: Supplementary alignments in BAM output format leaked memory.
     5. Fix: assert failure in CIGAR routine triggered by reads overlapping the ends of a reference sequence.
     6. Any 5' trimming (-5 option) is now done after 3' adapter trimming in order to ensure adapter dimers are trimmed.
     7. Fix: --trim3hp option was leaving one bp of homopolymer sequence.
     8. --trim3hp now accepts IUPAC R which will trim 3' mixed AG sequence. This may be useful for RNA to trim Poly A tails where read has degraded to G's with high base quality.
     9. Increased mismatch allowance for adapter trimming on single end reads. Allow ~1 mismatch per 6 matches depending on read base qualities.
    10. Fix: When using alt-scaffolds SAM file could fail Picard ValidateSamFile due to RNEXT,PNEXT of improper pairs referencing supplementary rather than primary alignment.
    11. In BAM output mode the bin attribute was not set resulting in a bad bai index being generated by novosort
Novosort
     1. Updated the default code for parsing lane,tile,X&Y from fastq headers to skip trailing UMI
                @Instrument:RunID:FlowCellID:Lane:Tile:X:Y:UMI
        Lane,tile,x*y are used to classify optical duplicates and estimate library size, they do not affect which reads are marked as duplicates.


Pre-Release Novoalign V4.0.Pre-20190805, Novomethyl V1.07, Novosort V2.01.00
---------------------------------------------------------------------------
Novoalign
      1. Added option to create SAM BC tag from Illumina header. If you have an Illumina read header like
         @A00615:18:H7T32DRXX:1:2101:3658:1000 1:N:0:TGTACCGT
         and add option --tags BC then novoalign extracts barcode from read header and adds tag  BC:Z:TGTACCGT to the SAM records.
      2. Add BAM output format option. This may give better performance than piping to 'samtools view' on high core count systems.
              -o BAM [0-9] ["@RG..."]
         You can set the compression level, default is 4. We suggest 0 if piping to novosort.
      2. Fix: Reruns were non-concordant due to changes in "random" selection of alignments
         when reporting multi-mapped reads.
      3. Fix: --tune V3 was setting -H 2 when V3 default was -H off
      4. Fix: Paired end adapter trimming would QC pairs with adapters.
      5. Fix: Ability to map reads that overlap the end of a reference sequence was reduced in V4 vs V3
      6. In Bi-Seq mode setting --tune V3 now sets unconverted cytosine penalty to zero.
      7. Fix: In alternate scaffold mode multiple alignments could be reported per scaffold even when using -r All 1 or -r Random.
      8. Fix: With --pechimera On (new default) and relatively high gap extend + match reward (>= 10 for 150bp read) Novoalign could
         get an assert failure.
      9. In novoindex allow up to 5 IUPAC ambiguous dinucleotide codes per kmer. Index must be rebuilt for this to take effect.
     10. Fix: Soft clipping with rewards for realignments that extended to the end of the read sometimes failed to clip leaving long inserts in CIGAR.
Novosort
      1. Fix: The novosort with V4 had had some performance related changes but we failed to update the version number.
      2. Fix: If input BAMs had no unmapped reads when marking duplicates then the last signature group was not output.
      3. Fix: If using the --uniquetags options and a read doesn't have the tag then the tag value from previous read was used.
      4. Add --UMI option to use UMI tag from Illumina header in read signature.
         Read headers in format
             @Instrument:RunID:FlowCellID:Lane:Tile:X:Y:UMI
         extract the UMI and use it in the read signature.




