CHANGES IN VERSION 1.53.2
-------------------------

NEW FEATURES

    o AARCH64 NEON SIMD optimization for vectorized internal functions,
      providing hardware-accelerated performance on Apple Silicon and other
      ARM64 platforms

    o `seqParallel()` supports a `BiocParallelParam` object for the `cl`
      argument, with full feature parity to the cluster-based path, including
      load balancing, init/finalize hooks, and numeric/NULL `gdsfile` inputs

UTILITIES

    o `seqUnitMerge()` now properly supports merging more than two
      'SeqUnitListClass' objects via '...'

    o new `seqUnitSetDiff()` to remove variant indices of one unit list
      from another, returning the set-difference version of units

    o 'val' in `seqAddValue()` can be a function returning the data block by
      block, when adding a variable to "annotation/info": the blocks are
      written to the GDS file one by one, so the memory usage does not depend
      on the total number of variants ('packed' and 'packed.idx' are ignored
      in this case, since the data are unknown before writing). New 'param'
      in `seqAddValue()`, passed to the second argument of the user-defined
      function 'val(k, param)'


CHANGES IN VERSION 1.52.1
-------------------------

NEW FEATURES

    o `seqParallel()` can load cloud-related packages on worker processes
      before calling the user-defined function, with backward compatibility
      for older gdsfmt versions

UTILITIES

    o faster `seqSetFilterPos()` than v1.52.0

    o `seqApply()` supports "$ref", "$alt", "$chrom_pos", "$chrom_pos_allele"
      and "$variant_index" as variable names, consistent with `seqGetData()`

    o `seqAddValue()` supports `LogicalList`, `IntegerList`, `NumericList`
      and `CharacterList` from the IRanges package as variable-length
      annotation data input

    o `seqMulticoreSetup()` invisibly returns the newly created cluster
      object when a multicore cluster is set up


CHANGES IN VERSION 1.52.0
-------------------------

NEW FEATURES

    o new 'header' in `seqGDS2VCF()` to specify whether exporting the
      metadata header to a VCF file or not

    o set 'nosample=TRUE' in `seqGDS2VCF()` to exclude the sample-level data

    o new 'verbose.progress' in `seqGDS2VCF()` to control the progress display

    o `seqGet2bGeno()` allows a GDS file name in the first argument

    o new 'parallel' in `seqGet2bGeno()` for parallel loading

    o new 'SeqArray:::process_block_index' and 'SeqArray:::process_block_count'
      used in children processes when balancing work

    o new 'ploidy' in `seqVCF2GDS()` and `seqBCF2GDS()`

UTILITIES

    o Reduce memory usage in `seqParallel()` by avoiding the transfer of unused
      data during work balancing in parallel

    o minor fix in `seqAsVCF()` when loading VariantAnnotation

    o fix the package anchors for all Rd \link{}

    o Updated `seqSetFilterPos()` is significantly faster than the old version

BUG FIXES

    o fix `seqApply(..., margin="by.sample")` dimension mismatch error when
      multiallelic variants are present


CHANGES IN VERSION 1.50.1
-------------------------

UTILITIES

    o Reduce memory usage in `seqMerge()` when there are many INFO variables


CHANGES IN VERSION 1.50.0
-------------------------

NEW FEATURES

    o new '.status_file' & '.proc_time' in `seqParallel()` for controlling
      the display of the status of child processes

    o enhance workload balancing within `seqParallel()`

    o new 'balancing=NA' in `seqAlleleFreq()`, `seqAlleleCount()`,
      `seqGetAF_AC_Missing()`, `seqSetFilterCond()`, `seqUnitFilterCond()`
      (using workload balancing by default)

    o new '.balancing' in `seqApply()` and `seqBlockApply()`

    o new 'alt' & 'ns' in `seqGetAF_AC_Missing()`

    o new 'dosage' in `seqExampleFileName()`

UTILITIES

    o `seqDigest()` allows a GDS file name in the first argument

    o a new option 'parallel' in `seqDigest()`

    o `seqVCF2GDS()` and `seqBED2GDS()`: save the gds node 'chromosome'
      before 'position'

    o `seqAddValue(, varnm="annotation/filter", desp=...)` adds 'Description'
      via the argument 'desp'

    o tweak the display of `seqGDS2BED()`

    o `seqBlockApply()` and `seqApply()` allows a GDS file name in the first
      argument

    o `seqGDS2VCF()` generates an indexing file (.tbi) according to the
      vcf.gz output file, requiring the Rsamtools package

    o the first argument of `seqOptimize()` can be a SeqVarGDSClass object

BUG FIXES

    o Previous `seqGetAF_AC_Missing(, minor=FALSE)` returns the AF for the
      alt. alleles and the AC for the ref. alleles, when a dosage GDS file is
      used; a new 'alt' is used to specify the ref. or alt. alleles.

    o Fix '##INFO=<>' in the output of `seqGDS2VCF()` when the INFO variable is
      added by users


CHANGES IN VERSION 1.48.0
-------------------------

NEW FEATURES

    o `seqAddValue()`: use bit1 for a logical vector; new argument
      'use_float32=FALSE' for storing double

    o new argument 'start' in `seqResetVariantID()`

    o new argument 'digest' in `seqRecompress()` to add MD5 hash codes

    o `seqGetData(, "$chromosome")` returns chromosome codes in an object of
      'S4Vectors::Rle'

    o `seqGetData(, .tolist=NA)` returns an extended list defined in IRanges
      (e.g., IntegerList) when it is applicable

    o `seqListVarData(, useList=TRUE)` returns an extended list defined in
      IRanges

UTILITIES

    o Tweak display in `seqResetVariantID()`

    o use `crayon::silver()` instead of `crayon::blurred()` in the display since
      RStudio blurs the screen output

BUG FIXES

    o `seqBlockApply()` should recover the filter when the user-specified
      function fails


CHANGES IN VERSION 1.46.2
-------------------------

UTILITIES

    o `seqVCF_Header()` allows multiple cores to calculate the total number of
      variants when 'getnum=TRUE' (the Rsamtools package should be installed);
      `seqVCF2GDS()` is faster when obtaining the number of variants for
      splitting files.

    o new 'variant_count' in `seqVCF2GDS()` to specify the number of variants
      in the VCF file when it is known or an approximation is known; it is only
      applicable when multiple cores are used. If 'variant_count' is specified,
      counting the number of variants will be skipped.


CHANGES IN VERSION 1.46.0
-------------------------

UTILITIES

    o `seqGetData()` return NULL, if 'var.name=character()'


CHANGES IN VERSION 1.44.3
-------------------------

UTILITIES

    o update the C codes according to '_R_USE_STRICT_R_HEADERS_=true' &
      '_R_CXX_USE_NO_REMAP_=true'


CHANGES IN VERSION 1.44.2
-------------------------

BUG FIXES

    o fix `seqAddValue(, val=vector("list", NUM_VARIANT))`

    o fix the ploidy returned from `seqVCF_Header()`, when there are genotypes
      of males and females on Chromosome X


CHANGES IN VERSION 1.44.1
-------------------------

UTILITIES

    o new option 'numvariant' in `seqEmptyFile()`

BUG FIXES

    o `seqMerge()` should internally use "chr_position_ref_alt" to distinguish
      the variants in different files

    o `seqAddValue(, varnm="annotation/filter")` should work with a factor
      variable

    o `seqAddValue(, varnm="variant.id")` can reset the variant IDs with a
      different number of the variants


CHANGES IN VERSION 1.44.0
-------------------------

UTILITIES

    o tweak the display of progress information in `seqVCF2GDS()`

    o `seqVCF_Header(, getnum=TRUE, verbose=TRUE)` to show the progress
      information for scanning the VCF file

    o new `seqGetData(, "$dosage_alt2")` and `seqGetData(, "$dosage_sp2")` for
      sex chromosomes, when the alleles are partially missing (e.g., genotypes
      on chromosome X for males)

    o new 'verbose.clean' in `seqExport()` to control how much information to
      be displayed


CHANGES IN VERSION 1.42.4
-------------------------

BUG FIXES

    o `seqGetData(, "$dosage_alt")` and `seqGetData(, "$dosage_sp")` work
      correctly when the ploidy is >2 and there are missing alleles

    o fix a bug that `seqParallel()` does not call a user-defined '.combine'
      when 'parallel=1'


CHANGES IN VERSION 1.42.1
-------------------------

UTILITIES

    o update the help files of `seqBlockApply()` and `seqUnitApply()`

    o detect the output filename extension in `seqGDS2VCF()` without
      considering the case of the characters, supporting .gz, .bgz, .bz and .xz
      as a filename extension

    o fix the compiler warning: -Wformat-security

    o new option 'include.pheno=TRUE' in `seqBED2GDS()`


CHANGES IN VERSION 1.42.0
-------------------------

UTILITIES

    o new option 'write.rsid' in `seqGDS2BED()`


CHANGES IN VERSION 1.40.1
-------------------------

BUG FIXES

    o `seqAddValue(gdsfile, varnm="position")` works correctly


CHANGES IN VERSION 1.40.0
-------------------------

    o fix the compiler warning: sprintf is deprecated


CHANGES IN VERSION 1.38.0
-------------------------

UTILITIES

    o new option 'ext_nbyte' in `seqGet2bGeno()`

    o `seqAlleleCount()` and `seqGetAF_AC_Missing()` return NA instead of zero
      when all genotypes are missing at a site

    o `seqGDS2VCF()` does not output the FORMAT column if there is no selected
      sample (e.g., site-only VCF files)

    o `seqGetData(, "$chrom_pos2")` is similar to `seqGetData(, "$chrom_pos")`
      except the duplicates with the suffix ("_1", "_2" or >2)

NEW FEATURES

    o `seqGDS2BED()` can convert to PLINK BED files with the best-guess
      genotypes when there are only numeric dosages in the GDS file

    o `seqEmptyFile()` outputs an empty GDS file


CHANGES IN VERSION 1.36.2
-------------------------

BUG FIXES

    o fix the bug at multi-allelic sites with more than 15 different alleles,
      see https://github.com/zhengxwen/SeqArray/issues/78


CHANGES IN VERSION 1.36.1
-------------------------

BUG FIXES

    o `seqExport()` failed when there is no variant

    o `seqSetFilter(, ret.idx=TRUE)`, see
      https://github.com/zhengxwen/SeqArray/issues/80


CHANGES IN VERSION 1.36.0
-------------------------

NEW FEATURES

    o new functions `seqUnitCreate()`, `seqUnitSubset()` and `seqUnitMerge()`

    o new functions `seqFilterPush()` and `seqFilterPop()`

    o new functions `seqGet2bGeno()` and `seqGetAF_AC_Missing()`

    o new function `seqGetData(, "$dosage_sp")` for a sparse matrix of dosages

    o the first argument 'gdsfile' can be a file name in `seqAlleleFreq()`,
      `seqAlleleCount()`, `seqMissing()`

    o new function `seqMulticoreSetup()` for setting a multicore cluster
      according to a numeric value assigned to the argument 'parallel'

UTILITIES

    o allow opening a duplicated GDS file ('allow.duplicate=TRUE') when the
      input is a file name instead of a GDS object in `seqGDS2VCF()`,
      `seqGDS2SNP()`, `seqGDS2BED()`, `seqVCF2GDS()`, `seqSummary()`,
      `seqCheck()` and `seqMerge()`

    o remove the deprecated '.progress' in `seqMissing()`, `seqAlleleCount()`
      and `seqAlleleFreq()`

    o add `summary.SeqUnitListClass()`

    o no genotype and phase data nodes from `seqSNP2GDS()` if SNP dosage GDS
      is the input

BUG FIXES

    o `seqUnitApply()` works correctly with selected samples if 'parallel' is
      a non-fork cluster

    o `seqVCF2GDS()` and `seqVCF_Header()` work correctly if the VCF header has
       white space

    o `seqGDS2BED()` with selected samples for sex and phenotype information

    o `seqGDS2VCF()` failed if there is no 'genotype/data' in the GDS file


CHANGES IN VERSION 1.32.0
-------------------------

NEW FEATURES

    o new option 'ret.idx' in `seqSetFilter()` for unsorted sample and variant
      indices

    o new option 'ret.idx' in `seqSetFilterAnnotID()` for unsorted variant
      index

    o rewrite the function `seqSetFilterPos()`: new options 'ref' and 'alt',
      'multi.pos=TRUE' by default

    o new option 'packed.idx' in `seqAddValue()` for packing an indexing
      variable

    o new option 'warn' in `seqSetFilter()` to enable or disable the warning

    o new functions `seqNewVarData()` and `seqListVarData()` for
      variable-length data

UTILITIES

    o allow no variant in `seqApply()` and `seqBlockApply()`

    o the list object returned from `seqGetData()` always have names if there
      are more than one input variable names

BUG FIXES

    o `seqGDS2VCF()` should output "." instead of NA in the FILTER column

    o `seqGetData()` should support factor when '.padNA=TRUE' or '.tolist=TRUE'
    
    o fix `seqGDS2VCF()` with factor variables

    o `seqSummary(gds, "$filter")` should return a data frame with zero row if
      'annotation/filter' is not a factor


CHANGES IN VERSION 1.30.0
-------------------------

UTILITIES

    o show a warning when an unsorted index is used in `seqSetFilter()`

    o show a message if `seqVCF_Header()` fails

    o a new option 'chr_prefix' in `seqGDS2VCF()`

BUG FIXES

    o `seqVCF_Header()` fixes 'contig' in the header of VCF if there are
      different fields


CHANGES IN VERSION 1.28.1
-------------------------

BUG FIXES

    o `seqRecompress(, verbose=FALSE)` works correctly

    o `seqSetFilter(, action="push+set")` should not reset the filter
      before setting a new filter


CHANGES IN VERSION 1.28.0
-------------------------

NEW FEATURES

    o new functions `seqUnitSlidingWindows()`, `seqUnitApply()`,
      `seqUnitFilterCond()`

    o new variable "$variant_index", "$sample_index" in `seqGetData()`,
      `seqBlockApply()` and `seqUnitApply()` to get the indices of selected
      variants

    o new arguments '.padNA' and '.envir' in `seqGetData()`

    o new functions `seqSetFilterAnnotID()` and `seqGDS2BED()`

    o multicore function in `seqBED2GDS(, parallel=)`

    o new package-wide option `options(seqarray.nofork=TRUE)` to disable forking

    o new option 'minor' in `seqAlleleFreq()` and `seqAlleleCount()`

    o new option 'verbose' in `seqMissing()`, `seqAlleleFreq()` and
      `seqAlleleCount()`; '.progress' is deprecated, but still can be used
      for compatibility

    o `seqAlleleFreq()`, `seqAlleleCount()`, `seqMissing()`,
      `seqSetFilterCond()` work on 'annotation/format/DS', if 'genotype/data'
      is not available

UTILITIES

    o `seqAddValue()` adds vectors, matrices and data frame to "annotation/info"

    o `seqBED2GDS()` allows a single file name without the extended file names
      (.bed, .fam, .bim)

    o allele flip in `seqBED2GDS()` to allow major allele to be reference

    o rewrite `seqGetData()` for faster loading

    o significantly improve `seqBlockApply()` on 'annotation/info/VARIABLE'
      (https://github.com/zhengxwen/SeqArray/issues/59)

    o add a S3 method `print.SeqVCFHeaderClass()` for `seqVCF_Header()`

    o new option '.tolist' in `seqGetData()`, `seqBlockApply()` and
      `seqUnitApply()`

    o String "." in a VCF file are converted to a blank string (missing value)
      in `seqVCF2GDS()`

    o add a class name 'SeqVarDataList' to the returned 'list(length, data)'
      from `seqGetData()`

    o new option `seqMissing(, per.variant=NA)`

    o add `comment.char=""` to `seqBED2GDS()`


CHANGES IN VERSION 1.26.2
-------------------------

NEW FEATURES

    o multiple variable names are allowed in `seqGetData(, var.name=)`

BUG FIXES

    o fix `seqGetData(, "genotype", .useraw=NA)`
      (https://github.com/zhengxwen/SeqArray/issues/58)


CHANGES IN VERSION 1.26.1
-------------------------

BUG FIXES

    o fails to correctly select duplicate indices in
      `seqSetFilter(f, variant.sel=)`


CHANGES IN VERSION 1.26.0
-------------------------

NEW FEATURES

    o new function `seqAddValue()`

UTILITIES

    o RLE chromosome coding in `seqBED2GDS()`

    o change the file name "vignettes/R_Integration.Rmd" to
      "vignettes/SeqArray.Rmd", so `vignette("SeqArray")` can work directly

    o correct Estimated remaining Time to Complete (ETC) for load balancing in
      `seqParallel()`

BUG FIXES

    o `seqBED2GDS(, verbose=FALSE)` should have no display

CHANGES

    o use a svg file instead of png in vignettes


CHANGES IN VERSION 1.24.2
-------------------------

NEW FEATURES

    o add the compiler information in `seqSystem()`

    o new arguments '.balancing', '.bl_size' and '.bl_progress' in
      `seqParallel()` for load balancing

UTILITIES

    o improve unix forking processes for load balancing in `seqParallel()`

BUG FIXES

    o fix `seqSummary()` when no phase data


CHANGES IN VERSION 1.24.0
-------------------------

NEW FEATURES

    o a new function `seqResetVariantID()`

    o a new option in `seqRecompress(, compress="none")` to uncompress all data

    o `seqGetData()` allows a GDS file name in the first argument


CHANGES IN VERSION 1.22.6
-------------------------

BUG FIXES

    o `seqSetFilter(, sample.id=)` fails to correctly select samples in a few
      cases (since SeqArray>=v1.22.0 uses the distribution of selected samples
      to optimize the data access of genotypes, see
      https://github.com/zhengxwen/SeqArray/issues/48)

    o the bgzf VCF file is truncated in `seqGDS2VCF()` since the file is not
      closed appropriately

    o invalid chromosomes and position in the output of `seqMerge()` when
      merging different samples but same variants


CHANGES IN VERSION 1.22.3
-------------------------

NEW FEATURES

    o a new option 'scenario' in `seqVCF2GDS()` and `seqBCF2GDS()`

UTILITIES

    o more information in `seqDelete()`

BUG FIXES

    o export a haploid VCF file using `seqGDS2VCF()`

    o export VCF without any FORMAT data in `seqGDS2VCF()`

    o export GDS without genotypes in `seqExport()`

    o fix parallel file writing in seqVCF2GDS(), when no genotype


CHANGES IN VERSION 1.22.0
-------------------------

NEW FEATURES

    o `seqSNP2GDS()` imports dosage GDS files

    o `seqVCF_Header()` allows a BCF file as an input

    o a new function `seqRecompress()`

    o a new function `seqCheck()` for checking the data integrity of a SeqArray
      GDS file

    o `seqGDS2SNP()` exports dosage GDS files

UTILITIES

    o avoid duplicated meta-information lines in `seqVCF2GDS()` and
      `seqVCF_Header()`

    o require >= R_v3.5.0, since reading from connections in text mode is
      buffered

    o `seqDigest()` requires the digest package

    o optimization in reading genotypes from a subset of samples (according to
      gdsfmt_1.17.5)

BUG FIXES

    o `seqVCF2GDS()` and `seqVCF_Header()` are able to import site-only VCF
      files (i.e., VCF with no sample)

    o fix `seqVCF2GDS()` and `seqBCF2GDS()` since reading from connections in
      text mode is buffered in R >= v3.5.0


CHANGES IN VERSION 1.20.1
-------------------------

BUG FIXES

    o `seqExport()` fails to export haploid data (e.g., Y chromosome)

    o `seqVCF2GDS()` fails to convert INFO variables when Number="R"


CHANGES IN VERSION 1.20.0
-------------------------

NEW FEATURES

    o `seqGDS2VCF()` outputs a bgzip vcf file for tabix indexing

    o two more options "Ultra" and "UltraMax" in `seqStorageOption()`

    o '@chrom_rle_val' and '@chrom_rle_len' are added to a GDS file for
      faster chromosome indexing

    o new function `seqBCF2GDS()` (requiring the software bcftools)

    o new function `seqSetFilterPos()`

    o new variable "$dosage_alt" in `seqGetData()` and `seqApply()`

    o import VCF files with no GT in `seqVCF2GDS()`

UTILITIES

    o `seqDigest(f, "annotation/filter")` works on a factor variable

    o improve the computational efficiency of `seqMerge()` to avoid genotype
      recompression by padding the 2-bit genotype array in bytes

    o significantly improve `seqBlockApply()` (its speed is close to
      `seqApply()`)

    o reduce the overhead in `seqSetFilter(, variant.sel=...)`


CHANGES IN VERSION 1.18.2
-------------------------

BUG FIXES

    o fix an issue: `seqSetFilterChrom()` extends a genomic range
      upstream and downstream 1bp

    o use `.onLoad()` instead of `.onAttach()` to fix
      https://support.bioconductor.org/p/104405/#104443


CHANGES IN VERSION 1.18.0
-------------------------

NEW FEATURES

    o progress information: showing overall running time when completed

    o new variable names "$ref" and "$alt" can be used in `seqGetData()` and
      `seqBlockApply()`

    o new argument '.progress' in `seqDigest()`

    o new argument 'ref.allele' in `seqAlleleCount()`

    o new variable name "$chrom_pos_allele" can be used in `seqGetData()` and
      `seqBlockApply()`

UTILITIES

    o move VariantAnnotation to the suggest field from the import field

    o remove an unused argument '.list_dup' in `seqBlockApply()`

    o slightly improve the computational efficiency of `seqAlleleFreq()` and
      `seqAlleleCount()` when 'ref.allele=0'

    o `seqGetData(f, "$chrom_pos")` outputs characters with the format
      'chromosome:position' instead of 'chromosome_position'

BUG FIXES

    o fix the unexpected behaviors in `seqSetFilter(, action="push")` and
      `seqSetFilter(, action="push+intersect")`

    o fix a bug in `seqGetData(f, "$dosage")` when the number of unique alleles
      at a site greater than 3 (https://github.com/zhengxwen/SeqArray/issues/21)

    o fix a bug in `seqSNP2GDS()` for inverted genotypes during importing data
      from SNP GDS files (https://github.com/zhengxwen/SeqArray/issues/22)

    o fix an issue of no phase data in `seqExport()`


CHANGES IN VERSION 1.16.0
-------------------------

    o a new argument 'intersect' in `seqSetFilter()` and `seqSetFilterChrom()`

    o a new function `seqSetFilterCond()`

    o `seqVCF2GDS()` allows arbitrary numbers of different alleles if REF and
      ALT in VCF are missing

    o optimize internal indexing for FORMAT annotations to avoid reloading
      the indexing from the GDS file

    o a new CITATION file

    o 'LZMA_RA' is the default compression method in `seqBED2GDS()` and
      `seqSNP2GDS()`

    o `seqVCF_Header()` correctly calculates ploidy with missing genotypes


CHANGES IN VERSION 1.14.1
-------------------------

    o The default compression setting in `seqVCF2GDS()` and `seqMerge()` is
      changed from "ZIP_RA" to "LZMA_RA"

    o `seqVCF2GDS()`: variable-length encoding method is used to store
      integers in the FORMAT field of VCF files to reduce the file size and
      compression time


CHANGES IN VERSION 1.12.9
-------------------------

    o the version number was bumped for the Bioconductor release version 3.3

    o `seqVCF_SampID()`, `seqVCF_Header()` and `seqVCF2GDS()` allow a
      connection object instead of a file name

    o "$num_allele" is allowed in `seqGetData()` and `seqApply()` (the numbers
      of distinct alleles)

    o a new option '.progress' in `seqAlleleFreq()`, `seqMissing()` and
      `seqAlleleCount()`

    o 'as.is' can be a `gdsn.class` object in `seqApply()`

    o v1.12.7: a new argument 'parallel' in `seqApply()`, BiocParallel
      integration in `seqParallel()` and a new function `seqBlockApply()`

    o v1.12.8: a new function `seqGetParallel()`


CHANGES IN VERSION 1.12.0
-------------------------

    o utilizes the official C API `R_GetConnection()` to accelerate text
      import and export, requiring R (>=v3.3.0); alternative version (backward
      compatible with R_v2.15.0) is also available on github
      (https://github.com/zhengxwen/SeqArray/releases/tag/v1.11.18)

    o ~4x speedup in the sequential version of `seqVCF2GDS()`, and
      `seqVCF2GDS()` can run in parallel

    o variables in "annotation/format/" should be two-dimensional as what
      mentioned in the vignette.

    o rewrite `seqSummary()`

    o a new vignette file with Rmarkdown format (replacing SeqArray-JSM2013.pdf)

    o bug fix in `seqBED2GDS()` if the total number of genotypes > 2^31
      (integer overflow)

    o bug fixes in `seqMerge()` if chromosome and positions are not unique

    o `seqStorage.Option()` is renamed to `seqStorageOption()`

    o new function `seqDigest()`

    o `seqVCF.Header()` is renamed to `seqVCF_Header()`,
      `seqVCF.SampID()` is renamed to `seqVCF_SampID()`

    o seqSetFilter(): 'samp.sel' is deprecated since v1.11.12, please use
      'sample.sel' instead

    o accelerate reading genotypes with SSE2(+13%) and AVX2(+23%)

    o new function `seqSystem()`

    o allow "$dosage" in `seqGetData()` and `seqApply()` for the dosages of
      reference allele

    o accelerate `seqSetFilterChrom()` and allow a selection with
      multiple regions

    o new methods `\S4method{seqSetFilter}{SeqVarGDSClass, GRanges}()` and
      `\S4method{seqSetFilter}{SeqVarGDSClass, GRangesList}()`

    o 'as.is' in `seqApply()` allows a 'connection' object (created by file,
      gzfile, etc)

    o `seqSummary(f, "genotype")$seldim` returns a vector with 3 integers
      (ploidy, # of selected samples, # of selected variants) instead of
      2 integers


CHANGES IN VERSION 1.10.6
-------------------------

    o fix a memory issue in `seqAlleleFreq()` when 'ref.allele' is a vector

    o `seqSetFilter()` allows numeric vectors in 'samp.sel' and 'variant.sel'

    o `seqSummary()` returns ploidy and reference

    o `seqStorage.Option()` controls the compression level of FORMAT/DATA

    o `seqVCF2GDS()` allows extract part of VCF files via 'start' and 'count'

    o `seqMerge()` combines multiple GDS files with the same samples

    o export methods for compatibility with VariantAnnotation

    o a new argument '.useraw' in `seqGetFilter()`

    o a new argument 'allow.duplicate' in `seqOpen()`

    o fix a bug in `seqParallel()`
      (https://github.com/zhengxwen/SeqArray/issues/11) and optimize
      its performance

    o 'gdsfile' could be NULL in `seqParallel()`


CHANGES IN VERSION 1.10.0
-------------------------

    o a new function `seqGDS2SNP()`

    o supported by the SNPRelate package

    o support `seqApply(..., margin="by.sample")`

    o new functions `seqOptimize()`, `seqMissing()`, `seqAlleleFreq()`,
      `seqNumAllele()` and `seqSetFilterChrom()`

    o "intersection" and "push+intersection" in `seqSetFilter()`

    o parallel implementation in `seqNumAllele()`, `seqMissing()` and
      `seqAlleleFreq()`

    o a new function `seqExport()`

    o new argument ".useraw" in `seqApply()`

    o fix a bug for duplicated "variant.id",
      https://github.com/zhengxwen/SeqArray/issues/7

    o fix an issue of `seqVCF2GDS()` when there are duplicated format or
      info ID

    o improve access speed (+50%, benchmark on calling
      seqApply(..., FUN=function(x) {}))

    o new functions `seqSNP2GDS()`, `seqBED2GDS()`, `seqAlleleCount()` and
      `seqResetFilter()`

    o `seqCompress.Option()` is renamed to `seqStorage.Option()`

    o "ZIP_RA" is the default value in `seqStorageOption()` and other
      functions instead of "ZIP_RA.max"

    o `seqSetFilter()` becomes a S4 method


CHANGES IN VERSION 1.8.0
-------------------------

    o bug fix in getting genotypes if position > 2^31

    o add an option 'ignore.chr.prefix' to the function `seqVCF2GDS()`

    o `seqVCF2GDS()` ignores the INFO or FORMAT variables if they are not
      defined ahead

	o a new action 'push+set' in the function `seqSetFilter()`

    o bug fix if 'requireNamespace("SeqArray")' is called from other packages


CHANGES IN VERSION 1.6.0
-------------------------

    o fix a bug in `seqVCF2GDS()` when the values in the FILTER column are
      all missing

    o enhance `seqVCF.Header()`

    o support the LinkingTo mechanism

    o fix the error in haploid genotypes (Y chromosome)


CHANGES IN VERSION 1.4.0
-------------------------

    o update according to the new version of VariantAnnotation

    o update test codes to avoid the conflict

    o bumped version as all packages that depend on Rcpp must be rebuilt

    o modify to new biocViews to DESCRIPTION file


CHANGES IN VERSION 1.2.0
-------------------------

    o add a new argument "action" to the function `seqSetFilter()`

    o add a new function 'seqInfoNewVar' which allows adding new variables
      to the INFO fields

    o minor bug fix in asVCF

    o update man page "SeqVarGDSClass-class.Rd" with new methods

    o in DESCRIPTION, BiocGenerics listed in "Suggests" instead of "Imports"
      as suggested by R CMD check

    o bug fix in seqDelete

    o revise the function 'seqTranspose' according to the update of
      gdsfmt (v1.0.0)

    o revise the argument 'var.index' in the function `seqApply()`

    o basic supports of 'GRanges' and 'DNAStringSetList'

    o added methods 'qual', 'filt', 'asVCF'

    o 'granges' method uses length of reference allele to set width

    o minor bug fix to avoid `seqGetData()` crashing when no value returned
      from a variable-length variable

    o update documents


CHANGES IN VERSION 1.0.0
-------------------------

    o the version number was bumped for the Bioconductor release version


CHANGES IN VERSION 0.99.0
-------------------------

    o initial Bioconductor package submission
