[med-svn] [bcftools] 01/08: New upstream version 1.5
Andreas Tille
tille at debian.org
Thu Jul 20 11:46:33 UTC 2017
This is an automated email from the git hooks/post-receive script.
tille pushed a commit to branch master
in repository bcftools.
commit 6dc018a68340a7b92f6ec40887f7fa591fa202a7
Author: Andreas Tille <tille at debian.org>
Date: Thu Jul 20 13:17:47 2017 +0200
New upstream version 1.5
---
HMM.c | 95 ++++----
HMM.h | 9 +-
INSTALL | 82 +++++--
Makefile | 176 +++++++++------
NEWS | 33 ++-
bam2bcf.c | 35 +--
bam2bcf_indel.c | 8 +-
bcftools.h | 6 +
config.mk.in | 63 ++++++
configure.ac | 218 ++++++++++++++++++
consensus.c | 11 +-
doc/bcftools.1 | 34 +--
doc/bcftools.html | 37 +--
doc/bcftools.txt | 33 +--
filter.c | 47 ++++
install-sh | 501 +++++++++++++++++++++++++++++++++++++++++
m4/ax_with_htslib.m4 | 154 +++++++++++++
main.c | 6 +
misc/plot-roh.py | 323 +++++++++++++++++++-------
misc/plot-vcfstats | 20 +-
plugins/GTisec.mk | 2 +-
plugins/GTsubset.mk | 2 +-
plugins/ad-bias.mk | 2 +-
plugins/af-dist.mk | 2 +-
plugins/color-chrs.mk | 2 +-
plugins/fill-from-fasta.mk | 2 +-
plugins/fixploidy.mk | 4 +-
plugins/fixref.c | 17 +-
plugins/isecGT.mk | 2 +
plugins/prune.c | 292 ++++++++++++++++++++++++
plugins/setGT.mk | 2 +-
rbuf.h | 66 +++++-
test/create-bam-test | 99 ++++++++
test/fixref.2.out | 11 +
test/fixref.2a.vcf | 10 +
test/fixref.2b.vcf | 10 +
test/merge.gvcf.3.a.vcf | 8 +
test/merge.gvcf.3.b.vcf | 10 +
test/merge.gvcf.3.out | 11 +
test/mpileup/indel-AD.1.bam | Bin 0 -> 15124 bytes
test/mpileup/indel-AD.1.cram | Bin 0 -> 9682 bytes
test/mpileup/indel-AD.1.fa | 13 ++
test/mpileup/indel-AD.1.fa.fai | 1 +
test/mpileup/indel-AD.1.out | 323 ++++++++++++++++++++++++++
test/mpileup/indel-AD.1.sam | 156 +++++++++++++
test/norm.out | 2 +-
test/norm.split.and.norm.out | 2 +-
test/test.pl | 65 +++---
vcfbuf.c | 442 ++++++++++++++++++++++++++++++++++++
vcfbuf.h | 81 +++++++
vcfconvert.c | 8 +-
vcfmerge.c | 32 ++-
vcfnorm.c | 27 ++-
vcfplugin.c | 18 +-
vcfroh.c | 18 +-
55 files changed, 3272 insertions(+), 361 deletions(-)
diff --git a/HMM.c b/HMM.c
index 5795987..70ad8d6 100644
--- a/HMM.c
+++ b/HMM.c
@@ -33,12 +33,11 @@
typedef struct
{
- int nstates; // number of hmm's states
- int isite; // take snapshot at i-th position
- uint32_t pos; // i-th site's position
- double *vit_prob; // viterbi probabilities, NULL for uniform probs
- double *fwd_prob; // transition probabilities
- double *bwd_prob; // transition probabilities
+ int nstates; // number of hmm's states
+ uint32_t snap_at_pos; // snapshot at this position, 0 when inactive
+ double *vit_prob; // viterbi probabilities, NULL for uniform probs
+ double *fwd_prob; // transition probabilities
+ double *bwd_prob; // transition probabilities
}
snapshot_t;
@@ -61,8 +60,9 @@ struct _hmm_t
set_tprob_f set_tprob; // Optional user function to set / modify transition probabilities
// at each site (one step of Viterbi algorithm)
void *set_tprob_data;
- snapshot_t init; // Initial state probabilities. Set isite=1 when site should be used
- snapshot_t *snapshot;
+ snapshot_t init, state; // Initial and current state probs. Set state from snapshot if prev_snap_pos!=0 or from init otherwise
+ snapshot_t *snapshot; // snapshot->snap_at_pos .. request a snapshot at this position
+ // hmm->state.snap_at_pos .. the current state comes from snapshot made at this position
};
uint8_t *hmm_get_viterbi_path(hmm_t *hmm) { return hmm->vpath; }
@@ -92,14 +92,21 @@ static inline void multiply_matrix(int n, double *a, double *b, double *dst, dou
void hmm_init_states(hmm_t *hmm, double *probs)
{
- hmm->init.isite = 0;
- hmm->init.pos = 0;
+ hmm->init.snap_at_pos = hmm->state.snap_at_pos = 0;
+
if ( !hmm->init.vit_prob )
hmm->init.vit_prob = (double*) malloc(sizeof(double)*hmm->nstates);
if ( !hmm->init.fwd_prob )
hmm->init.fwd_prob = (double*) malloc(sizeof(double)*hmm->nstates);
if ( !hmm->init.bwd_prob )
hmm->init.bwd_prob = (double*) malloc(sizeof(double)*hmm->nstates);
+
+ if ( !hmm->state.vit_prob )
+ hmm->state.vit_prob = (double*) malloc(sizeof(double)*hmm->nstates);
+ if ( !hmm->state.fwd_prob )
+ hmm->state.fwd_prob = (double*) malloc(sizeof(double)*hmm->nstates);
+ if ( !hmm->state.bwd_prob )
+ hmm->state.bwd_prob = (double*) malloc(sizeof(double)*hmm->nstates);
int i;
if ( probs )
@@ -112,8 +119,11 @@ void hmm_init_states(hmm_t *hmm, double *probs)
else
for (i=0; i<hmm->nstates; i++) hmm->init.vit_prob[i] = 1./hmm->nstates;
- memcpy(hmm->init.fwd_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates);
+ memcpy(hmm->init.fwd_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates); // these remain unchanged
memcpy(hmm->init.bwd_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates);
+ memcpy(hmm->state.vit_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates); // can be changed by snapshotting
+ memcpy(hmm->state.fwd_prob,hmm->init.fwd_prob,sizeof(double)*hmm->nstates);
+ memcpy(hmm->state.bwd_prob,hmm->init.bwd_prob,sizeof(double)*hmm->nstates);
}
hmm_t *hmm_init(int nstates, double *tprob, int ntprob)
{
@@ -126,7 +136,7 @@ hmm_t *hmm_init(int nstates, double *tprob, int ntprob)
return hmm;
}
-void *hmm_snapshot(hmm_t *hmm, void *_snapshot, int isite)
+void *hmm_snapshot(hmm_t *hmm, void *_snapshot, uint32_t pos)
{
snapshot_t *snapshot = (snapshot_t*) _snapshot;
if ( snapshot && snapshot->nstates!=hmm->nstates )
@@ -147,22 +157,33 @@ void *hmm_snapshot(hmm_t *hmm, void *_snapshot, int isite)
snapshot->vit_prob = (double*) (mem + str_size + pad_size);
snapshot->fwd_prob = snapshot->vit_prob + hmm->nstates;
}
- snapshot->isite = isite;
+ snapshot->snap_at_pos = pos;
hmm->snapshot = snapshot;
return snapshot;
}
void hmm_restore(hmm_t *hmm, void *_snapshot)
{
snapshot_t *snapshot = (snapshot_t*) _snapshot;
- if ( !snapshot )
+ if ( !snapshot || !snapshot->snap_at_pos )
{
- hmm->init.isite = 0;
- return;
+ hmm->state.snap_at_pos = 0;
+ memcpy(hmm->state.vit_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates);
+ memcpy(hmm->state.fwd_prob,hmm->init.fwd_prob,sizeof(double)*hmm->nstates);
}
- hmm->init.isite = 1;
- hmm->init.pos = snapshot->pos;
- memcpy(hmm->init.vit_prob,snapshot->vit_prob,sizeof(double)*hmm->nstates);
- memcpy(hmm->init.fwd_prob,snapshot->fwd_prob,sizeof(double)*hmm->nstates);
+ else
+ {
+ hmm->state.snap_at_pos = snapshot->snap_at_pos;
+ memcpy(hmm->state.vit_prob,snapshot->vit_prob,sizeof(double)*hmm->nstates);
+ memcpy(hmm->state.fwd_prob,snapshot->fwd_prob,sizeof(double)*hmm->nstates);
+ }
+}
+void hmm_reset(hmm_t *hmm, void *_snapshot)
+{
+ snapshot_t *snapshot = (snapshot_t*) _snapshot;
+ if ( snapshot ) snapshot->snap_at_pos = 0;
+ hmm->state.snap_at_pos = 0;
+ memcpy(hmm->state.vit_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates);
+ memcpy(hmm->state.fwd_prob,hmm->init.fwd_prob,sizeof(double)*hmm->nstates);
}
void hmm_set_tprob(hmm_t *hmm, double *tprob, int ntprob)
@@ -219,8 +240,8 @@ void hmm_run_viterbi(hmm_t *hmm, int n, double *eprobs, uint32_t *sites)
// Init all states with equal likelihood
int i,j, nstates = hmm->nstates;
- memcpy(hmm->vprob, hmm->init.vit_prob, sizeof(*hmm->init.vit_prob)*nstates);
- uint32_t prev_pos = hmm->init.isite ? hmm->init.pos : sites[0];
+ memcpy(hmm->vprob, hmm->state.vit_prob, sizeof(*hmm->state.vit_prob)*nstates);
+ uint32_t prev_pos = hmm->state.snap_at_pos ? hmm->state.snap_at_pos : sites[0];
// Run Viterbi
for (i=0; i<n; i++)
@@ -250,11 +271,8 @@ void hmm_run_viterbi(hmm_t *hmm, int n, double *eprobs, uint32_t *sites)
for (j=0; j<nstates; j++) hmm->vprob_tmp[j] /= vnorm;
double *tmp = hmm->vprob; hmm->vprob = hmm->vprob_tmp; hmm->vprob_tmp = tmp;
- if ( hmm->snapshot && i==hmm->snapshot->isite )
- {
- hmm->snapshot->pos = sites[i];
+ if ( hmm->snapshot && sites[i]==hmm->snapshot->snap_at_pos )
memcpy(hmm->snapshot->vit_prob, hmm->vprob, sizeof(*hmm->vprob)*nstates);
- }
}
// Find the most likely state
@@ -286,12 +304,10 @@ void hmm_run_fwd_bwd(hmm_t *hmm, int n, double *eprobs, uint32_t *sites)
}
- // Init all states with equal likelihood
int i,j,k, nstates = hmm->nstates;
- memcpy(hmm->fwd, hmm->init.fwd_prob, sizeof(*hmm->init.fwd_prob)*nstates);
- memcpy(hmm->bwd, hmm->init.bwd_prob, sizeof(*hmm->init.bwd_prob)*nstates);
-
- uint32_t prev_pos = hmm->init.isite ? hmm->init.pos : sites[0];
+ memcpy(hmm->fwd, hmm->state.fwd_prob, sizeof(*hmm->state.fwd_prob)*nstates);
+ memcpy(hmm->bwd, hmm->state.bwd_prob, sizeof(*hmm->state.bwd_prob)*nstates);
+ uint32_t prev_pos = hmm->state.snap_at_pos ? hmm->state.snap_at_pos : sites[0];
// Run fwd
for (i=0; i<n; i++)
@@ -316,13 +332,9 @@ void hmm_run_fwd_bwd(hmm_t *hmm, int n, double *eprobs, uint32_t *sites)
norm += fwd[j];
}
for (j=0; j<nstates; j++) fwd[j] /= norm;
- }
- if ( hmm->snapshot )
- {
- i = hmm->snapshot->isite;
- hmm->snapshot->pos = sites[i];
- memcpy(hmm->snapshot->fwd_prob, hmm->fwd + (i+1)*nstates, sizeof(*hmm->fwd)*nstates);
+ if ( hmm->snapshot && sites[i]==hmm->snapshot->snap_at_pos )
+ memcpy(hmm->snapshot->fwd_prob, fwd, sizeof(*fwd)*nstates);
}
// Run bwd
@@ -376,9 +388,9 @@ double *hmm_run_baum_welch(hmm_t *hmm, int n, double *eprobs, uint32_t *sites)
// Init all states with equal likelihood
int i,j,k, nstates = hmm->nstates;
- memcpy(hmm->fwd, hmm->init.fwd_prob, sizeof(*hmm->init.fwd_prob)*nstates);
- memcpy(hmm->bwd, hmm->init.bwd_prob, sizeof(*hmm->init.bwd_prob)*nstates);
- uint32_t prev_pos = hmm->init.isite ? hmm->init.pos : sites[0];
+ memcpy(hmm->fwd, hmm->state.fwd_prob, sizeof(*hmm->state.fwd_prob)*nstates);
+ memcpy(hmm->bwd, hmm->state.bwd_prob, sizeof(*hmm->state.bwd_prob)*nstates);
+ uint32_t prev_pos = hmm->state.snap_at_pos ? hmm->state.snap_at_pos : sites[0];
// New transition matrix: temporary values
double *tmp_xi = (double*) calloc(nstates*nstates,sizeof(double));
@@ -480,6 +492,9 @@ void hmm_destroy(hmm_t *hmm)
free(hmm->init.vit_prob);
free(hmm->init.fwd_prob);
free(hmm->init.bwd_prob);
+ free(hmm->state.vit_prob);
+ free(hmm->state.fwd_prob);
+ free(hmm->state.bwd_prob);
free(hmm->vprob);
free(hmm->vprob_tmp);
free(hmm->vpath);
diff --git a/HMM.h b/HMM.h
index 3e5cf7f..70c9cb8 100644
--- a/HMM.h
+++ b/HMM.h
@@ -59,16 +59,21 @@ void hmm_init_states(hmm_t *hmm, double *probs);
/**
* hmm_snapshot() - take the model's snapshot, intended for sliding HMM
* @snapshot: NULL or snapshot returned by previous hmm_snapshot() call, must be free()-ed by the caller
- * @isite: take the snapshot at i-th step
+ * @pos: take the snapshot at this position
+ *
+ * If both restore() and snapshot() are needed, restore() must be called first.
*/
-void *hmm_snapshot(hmm_t *hmm, void *snapshot, int isite);
+void *hmm_snapshot(hmm_t *hmm, void *snapshot, uint32_t pos);
/**
* hmm_restore() - restore model's snapshot, intended for sliding HMM
* @snapshot: snapshot returned by hmm_snapshot() call or NULL to reset
* @isite: take the snapshot at i-th step
+ *
+ * If both restore() and snapshot() are needed, restore() must be called first.
*/
void hmm_restore(hmm_t *hmm, void *snapshot);
+void hmm_reset(hmm_t *hmm, void *snapshot);
/**
* hmm_get_tprob() - return the array of transition matrices, precalculated
diff --git a/INSTALL b/INSTALL
index df3df00..82493fc 100644
--- a/INSTALL
+++ b/INSTALL
@@ -23,43 +23,99 @@ are:
bzip2-devel
xz-devel
+To build BCFtools, you will need:
+
+ GNU make
+ C compiler (e.g. gcc or clang)
+
+In addition, building the configure script requires:
+
+ autoheader
+ autoconf
+
+Running the configure script uses awk, along with a number of
+standard UNIX tools (cat, cp, grep, mv, rm, sed, among others). Almost
+all installations will have these already.
+
+Running the test harness (make test) uses:
+
+ bash
+ perl
+
+Building Configure
+==================
+
+This step is only needed if configure.ac has been changed, or if configure
+does not exist (for example, when building from a git clone). The
+configure script and config.h.in can be built by running:
+
+ autoheader
+ autoconf
+
+If you have a full GNU autotools install, you can alternatively run:
+
+ autoreconf
+
+Warnings like "AC_CONFIG_SUBDIRS: you should use literals" can be ignored
+or supressed using 'autoconf -Wno-syntax'.
+
+
Compilation
===========
-'cd' to the bcftools-1.x directory containing the package's source and type
-'make' to compile BCFtools.
+'cd' to the bcftools directory containing the package's source and type:
+
+ ./configure
+ make
This BCFtools release contains a copy of HTSlib which will be used to build
BCFtools. If you already have a system-installed HTSlib or another HTSlib
-that you would prefer to build against, you can arrange this by overriding
-$(HTSDIR) by typing 'make HTSDIR=/path/to/htslib-source' -- see the makefile
-for details.
+that you would prefer to build against, you can arrange this by using the
+configure script's --with-htslib option. Use --with-htslib=DIR to point
+to an HTSlib source tree or installation in DIR; or --with-htslib=system
+to use a system-installed HTSlib.
Optional Compilation with GSL
=============================
The 'polysomy' command depends on the GNU Scientific Library (GSL) and is not
-enabled by default. In order to compile it, type 'make clean && make USE_GPL=1'.
+enabled by default. In order to compile it, supply the --enable-libgsl
+option to configure before running make:
+
+ ./configure --enable-libgsl
-Note that GSL is distributed under a GPL license, so when USE_GPL=1 is used to
-compile bcftools, the resulting program must only be distributed under terms
-compatible with that license.
+The GNU Scientific Library depends on the cblas library. The configure
+script will look for both libcblas and libgslcblas, in that order. If
+you have more than one version of cblas installed and want to override its
+choice you can do this by using either --with-cblas=cblas or
+--with-cblas=gslcblas.
+
+Note that GSL is distributed under the GNU General Public License (GPL).
+When --enable-libgsl is used to compile bcftools, the resulting program
+will also be GPL licensed. If you want to distribute the program, you MUST
+do so under terms compatible with that license. A copy of the GPL is included
+in the LICENSE file, or can be downloaded from
+<http://www.gnu.org/copyleft/gpl.html>.
In the default compilation mode the program is dual licensed and you may
choose to be licensed under the terms of the MIT/Expat license or the
GNU General Public License (GPL).
+Information on the GNU Scientific Library, including the rationale for
+its choice of license can be found at <https://www.gnu.org/software/gsl/>.
Installation
============
Type 'make install' to install the bcftools executable and associated scripts
-and a manual page to /usr/local.
+and a manual page. The default is to install in /usr/local. This can be
+changed by using the configure script's --prefix option:
+
+ ./configure --prefix=/path/to/install/dir
-Type 'make prefix=/path/to/dir install' to install everything under your
-choice of installation directory. The install target also understands
-DESTDIR and the other usual installation directory variables.
+The install target also understands DESTDIR and the other usual installation
+directory variables.
The bgzip and tabix utilities are provided by HTSlib. If you have not also
installed HTSlib separately, you may wish to install these utilities by hand
diff --git a/Makefile b/Makefile
index ddb384f..7e87b08 100644
--- a/Makefile
+++ b/Makefile
@@ -22,60 +22,25 @@
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
-PROG= bcftools
-TEST_PROG= test/test-rbuf test/test-regidx
-
-
-all: $(PROG) $(TEST_PROG)
-
-# Adjust $(HTSDIR) to point to your top-level htslib directory
-HTSDIR = ../htslib
-include $(HTSDIR)/htslib.mk
-include $(HTSDIR)/htslib_static.mk
-HTSLIB = $(HTSDIR)/libhts.a
-BGZIP = $(HTSDIR)/bgzip
-TABIX = $(HTSDIR)/tabix
-HTSLIB_LDFLAGS = $(HTSLIB_static_LDFLAGS)
-HTSLIB_LIBS = $(HTSLIB_static_LIBS)
-
CC = gcc
CPPFLAGS =
CFLAGS = -g -Wall -Wc++-compat -O2
LDFLAGS =
LIBS =
-ifeq "$(shell uname -s)" "Darwin"
-DYNAMIC_FLAGS = -Wl,-export_dynamic
-else
DYNAMIC_FLAGS = -rdynamic
-endif
-
-# TODO Use configure or htslib.pc to add -rdynamic/-ldl conditionally
-ALL_CPPFLAGS = -I. $(HTSLIB_CPPFLAGS) $(CPPFLAGS)
-ALL_LDFLAGS = $(DYNAMIC_FLAGS) $(HTSLIB_LDFLAGS) $(LDFLAGS)
-ALL_LIBS = -lm -lz -ldl $(LIBS)
+PLUGINS_ENABLED = yes
+PLUGIN_EXT = .so
OBJS = main.o vcfindex.o tabix.o \
vcfstats.o vcfisec.o vcfmerge.o vcfquery.o vcffilter.o filter.o vcfsom.o \
vcfnorm.o vcfgtcheck.o vcfview.o vcfannotate.o vcfroh.o vcfconcat.o \
vcfcall.o mcall.o vcmp.o gvcf.o reheader.o convert.o vcfconvert.o tsv2vcf.o \
vcfcnv.o HMM.o vcfplugin.o consensus.o ploidy.o bin.o hclust.o version.o \
- regidx.o smpl_ilist.o csq.o \
+ regidx.o smpl_ilist.o csq.o vcfbuf.o \
mpileup.o bam2bcf.o bam2bcf_indel.o bam_sample.o \
ccall.o em.o prob1.o kmin.o # the original samtools calling
-EXTRA_CPPFLAGS = -I. -I$(HTSDIR) -DPLUGINPATH=\"$(pluginpath)\"
-GSL_LIBS =
-
-# The polysomy command is not compiled by default because it brings dependency
-# on libgsl. The command can be compiled wth `make USE_GPL=1`. See the INSTALL
-# and LICENSE documents to understand license implications.
-ifdef USE_GPL
- EXTRA_CPPFLAGS += -DUSE_GPL
- OBJS += polysomy.o peakfit.o
- GSL_LIBS = -lgsl -lcblas
-endif
-
prefix = /usr/local
exec_prefix = $(prefix)
bindir = $(exec_prefix)/bin
@@ -83,73 +48,130 @@ libdir = $(exec_prefix)/lib
libexecdir = $(exec_prefix)/libexec
mandir = $(prefix)/share/man
man1dir = $(mandir)/man1
-
+# Installation location for $(PLUGINS)
plugindir = $(libexecdir)/bcftools
pluginpath = $(plugindir)
+# Installation location for $(MISC_PROGRAMS) and $(MISC_SCRIPTS)
+misc_bindir = $(bindir)
MKDIR_P = mkdir -p
INSTALL = install -p
-INSTALL_PROGRAM = $(INSTALL)
INSTALL_DATA = $(INSTALL) -m 644
INSTALL_DIR = $(MKDIR_P) -m 755
+INSTALL_MAN = $(INSTALL_DATA)
+INSTALL_PROGRAM = $(INSTALL)
+INSTALL_SCRIPT = $(INSTALL_PROGRAM)
-MISC_PROGRAMS = \
+PROGRAMS = bcftools
+MISC_SCRIPTS = \
misc/color-chrs.pl \
misc/guess-ploidy.py \
misc/plot-vcfstats \
misc/plot-roh.py \
misc/run-roh.pl \
misc/vcfutils.pl
+TEST_PROGRAMS = test/test-rbuf test/test-regidx
-all:$(PROG) plugins
+all: $(PROGRAMS) $(TEST_PROGRAMS) plugins
-# See htslib/Makefile
-PACKAGE_VERSION = 1.4.1
+ALL_CPPFLAGS = -I. $(HTSLIB_CPPFLAGS) $(CPPFLAGS)
+ALL_LDFLAGS = $(HTSLIB_LDFLAGS) $(LDFLAGS)
+ALL_LIBS = -lz -ldl $(LIBS)
+
+# Usually config.mk and config.h are generated by running configure
+# or config.status, but if those aren't used create defaults here.
+config.mk:
+ @sed -e '/^prefix/,/^PLUGIN_EXT/d;s/@Hsource@//;s/@Hinstall@/#/;s#@HTSDIR@#../htslib#g;s/@HTSLIB_CPPFLAGS@/-I$$(HTSDIR)/g;' config.mk.in > $@
+
+config.h:
+ echo '/* Basic config.h generated by Makefile */' > $@
+ifneq "$(PLUGINS_ENABLED)" "no"
+ echo '#define ENABLE_BCF_PLUGINS 1' >> $@
+ echo '#define PLUGIN_EXT ".so"' >> $@
+endif
+
+include config.mk
+
+PACKAGE_VERSION = 1.5
+
+# If building from a Git repository, replace $(PACKAGE_VERSION) with the Git
+# description of the working tree: either a release tag with the same value
+# as $(PACKAGE_VERSION) above, or an exact description likely based on a tag.
+# $(shell), :=, etc are GNU Make-specific. If you don't have GNU Make,
+# comment out this conditional.
ifneq "$(wildcard .git)" ""
PACKAGE_VERSION := $(shell git describe --always --dirty)
DOC_VERSION := $(shell git describe --always)+
DOC_DATE := $(shell date +'%Y-%m-%d %R %Z')
+
+# Force version.h to be remade if $(PACKAGE_VERSION) has changed.
version.h: $(if $(wildcard version.h),$(if $(findstring "$(PACKAGE_VERSION)",$(shell cat version.h)),,force))
endif
+
+# If you don't have GNU Make but are building from a Git repository, you may
+# wish to replace this with a rule that always rebuilds version.h:
+# version.h: force
+# echo '#define BCFTOOLS_VERSION "`git describe --always --dirty`"' > $@
version.h:
echo '#define BCFTOOLS_VERSION "$(PACKAGE_VERSION)"' > $@
+print-version:
+ @echo $(PACKAGE_VERSION)
-.SUFFIXES:.c .o
-.PHONY:all clean clean-all clean-plugins distclean install lib tags test testclean force plugins docs
-force:
+.SUFFIXES: .c .o
.c.o:
- $(CC) $(CFLAGS) $(EXTRA_CPPFLAGS) $(ALL_CPPFLAGS) -c -o $@ $<
+ $(CC) $(CFLAGS) $(ALL_CPPFLAGS) $(EXTRA_CPPFLAGS) -c -o $@ $<
-test: $(PROG) plugins test/test-rbuf test/test-regidx $(BGZIP) $(TABIX)
- ./test/test-regidx
- ./test/test.pl --exec bgzip=$(BGZIP) --exec tabix=$(TABIX)
-
-test-plugins: $(PROG) plugins test/test-rbuf $(BGZIP) $(TABIX)
- ./test/test.pl --plugins --exec bgzip=$(BGZIP) --exec tabix=$(TABIX)
+# The polysomy command is not compiled by default because it brings dependency
+# on libgsl. The command can be compiled wth `make USE_GPL=1`. See the INSTALL
+# and LICENSE documents to understand license implications.
+ifdef USE_GPL
+ main.o : EXTRA_CPPFLAGS += -DUSE_GPL
+ OBJS += polysomy.o peakfit.o
+ GSL_LIBS ?= -lgsl -lcblas
+endif
+bcftools: $(OBJS) $(HTSLIB)
+ $(CC) $(DYNAMIC_FLAGS) -pthread $(ALL_LDFLAGS) -o $@ $(OBJS) $(HTSLIB_LIB) -lm $(ALL_LIBS) $(GSL_LIBS)
# Plugin rules
+ifneq "$(PLUGINS_ENABLED)" "no"
PLUGINC = $(foreach dir, plugins, $(wildcard $(dir)/*.c))
-PLUGINS = $(PLUGINC:.c=.so)
+PLUGINS = $(PLUGINC:.c=$(PLUGIN_EXT))
PLUGINM = $(PLUGINC:.c=.mk)
-ifeq "$(shell uname -s)" "Darwin"
+ifneq "$(origin PLATFORM)" "file"
+PLATFORM := $(shell uname -s)
+endif
+ifeq "$(PLATFORM)" "Darwin"
$(PLUGINS): | bcftools
PLUGIN_FLAGS = -bundle -bundle_loader bcftools
else
PLUGIN_FLAGS = -fPIC -shared
endif
+vcfplugin.o: EXTRA_CPPFLAGS += -DPLUGINPATH='"$(pluginpath)"'
+
%.so: %.c version.h version.c
- $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(EXTRA_CPPFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ version.c $< $(LIBS)
+ $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(EXTRA_CPPFLAGS) $(LDFLAGS) -o $@ version.c $< $(LIBS)
-include $(PLUGINM)
-plugins: $(PLUGINS)
+test check: test-plugins
+
+else # PLUGINS_ENABLED
+
+PLUGINC =
+PLUGINS =
+PLUGINM =
+test check: test-no-plugins
+
+endif # PLUGINS_ENABLED
+
+plugins: $(PLUGINS)
bcftools_h = bcftools.h $(htslib_hts_defs_h) $(htslib_vcf_h)
bin_h = bin.h $(htslib_hts_h)
@@ -164,9 +186,9 @@ cnv_h = HMM.h $(htslib_vcf_h) $(htslib_synced_bcf_reader_h)
bam2bcf_h = bam2bcf.h $(htslib_hts_h) $(htslib_vcf_h)
bam_sample_h = bam_sample.h $(htslib_sam_h)
-main.o: main.c $(htslib_hts_h) version.h $(bcftools_h)
+main.o: main.c $(htslib_hts_h) config.h version.h $(bcftools_h)
vcfannotate.o: vcfannotate.c $(htslib_vcf_h) $(htslib_synced_bcf_reader_h) $(htslib_kseq_h) $(bcftools_h) vcmp.h $(filter_h)
-vcfplugin.o: vcfplugin.c $(htslib_vcf_h) $(htslib_synced_bcf_reader_h) $(htslib_kseq_h) $(bcftools_h) vcmp.h $(filter_h)
+vcfplugin.o: vcfplugin.c config.h $(htslib_vcf_h) $(htslib_synced_bcf_reader_h) $(htslib_kseq_h) $(bcftools_h) vcmp.h $(filter_h)
vcfcall.o: vcfcall.c $(htslib_vcf_h) $(htslib_kfunc_h) $(htslib_synced_bcf_reader_h) $(htslib_khash_str2int_h) $(bcftools_h) $(call_h) $(prob1_h) $(ploidy_h)
vcfconcat.o: vcfconcat.c $(htslib_vcf_h) $(htslib_synced_bcf_reader_h) $(htslib_kseq_h) $(htslib_bgzf_h) $(htslib_tbx_h) $(bcftools_h)
vcfconvert.o: vcfconvert.c $(htslib_vcf_h) $(htslib_bgzf_h) $(htslib_synced_bcf_reader_h) $(htslib_vcfutils_h) $(bcftools_h) $(filter_h) $(convert_h) $(tsv2vcf_h)
@@ -204,9 +226,25 @@ mpileup.o: mpileup.c $(htslib_sam_h) $(htslib_faidx_h) $(htslib_kstring_h) $(hts
bam_sample.o: $(bam_sample_h) $(htslib_hts_h) $(htslib_khash_str2int_h)
version.o: version.h version.c
hclust.o: hclust.c hclust.h
+vcfbuf.o: vcfbuf.c vcfbuf.h rbuf.h
smpl_ilist.o: smpl_ilist.c smpl_ilist.h
csq.o: csq.c smpl_ilist.h regidx.h filter.h kheap.h rbuf.h
+# test programs
+
+# For tests that might use it, set $REF_PATH explicitly to use only reference
+# areas within the test suite (or set it to ':' to use no reference areas).
+# (regression.sh sets $REF_PATH to a subdirectory itself.)
+test-no-plugins: $(PROGRAMS) $(TEST_PROGRAMS) $(BGZIP) $(TABIX)
+ ./test/test-rbuf
+ ./test/test-regidx
+ REF_PATH=: ./test/test.pl --exec bgzip=$(BGZIP) --exec tabix=$(TABIX)
+
+test-plugins: $(PROGRAMS) $(TEST_PROGRAMS) $(BGZIP) $(TABIX) plugins
+ ./test/test-rbuf
+ ./test/test-regidx
+ REF_PATH=: ./test/test.pl --plugins --exec bgzip=$(BGZIP) --exec tabix=$(TABIX)
+
test/test-rbuf.o: test/test-rbuf.c rbuf.h
test/test-rbuf: test/test-rbuf.o
@@ -215,18 +253,16 @@ test/test-rbuf: test/test-rbuf.o
test/test-regidx.o: test/test-regidx.c regidx.h
test/test-regidx: test/test-regidx.o regidx.o $(HTSLIB)
- $(CC) $(ALL_LDFLAGS) -o $@ $^ $(HTSLIB) -lpthread $(HTSLIB_LIBS) $(ALL_LIBS)
+ $(CC) $(ALL_LDFLAGS) -o $@ $^ $(HTSLIB) -lpthread $(HTSLIB_LIB) $(ALL_LIBS)
-bcftools: $(HTSLIB) $(OBJS)
- $(CC) $(ALL_LDFLAGS) -o $@ $(OBJS) $(HTSLIB) -lpthread $(HTSLIB_LIBS) $(GSL_LIBS) $(ALL_LIBS)
+# make docs target depends the a2x asciidoc program
doc/bcftools.1: doc/bcftools.txt
cd doc && a2x -adate="$(DOC_DATE)" -aversion=$(DOC_VERSION) --doctype manpage --format manpage bcftools.txt
doc/bcftools.html: doc/bcftools.txt
cd doc && a2x -adate="$(DOC_DATE)" -aversion=$(DOC_VERSION) --doctype manpage --format xhtml bcftools.txt
-# make docs target depends the a2x asciidoc program
docs: doc/bcftools.1 doc/bcftools.html
# To avoid an install dependency on asciidoc, the make install target
@@ -236,8 +272,9 @@ docs: doc/bcftools.1 doc/bcftools.html
# make docs can be run to update if asciidoc is available
install: $(PROG) $(PLUGINS)
$(INSTALL_DIR) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir) $(DESTDIR)$(plugindir)
- $(INSTALL_PROGRAM) $(PROG) $(MISC_PROGRAMS) $(DESTDIR)$(bindir)
- $(INSTALL_DATA) doc/bcftools.1 $(DESTDIR)$(man1dir)
+ $(INSTALL_PROGRAM) $(PROGRAMS) $(DESTDIR)$(bindir)
+ $(INSTALL_SCRIPT) $(MISC_SCRIPTS) $(DESTDIR)$(misc_bindir)
+ $(INSTALL_MAN) doc/bcftools.1 $(DESTDIR)$(man1dir)
$(INSTALL_PROGRAM) plugins/*.so $(DESTDIR)$(plugindir)
clean: testclean clean-plugins
@@ -252,9 +289,16 @@ testclean:
-rm -f test/*.o test/*~ $(TEST_PROG)
distclean: clean
+ -rm -f config.cache config.h config.log config.mk config.status
+ -rm -rf autom4te.cache
-rm -f TAGS
clean-all: clean clean-htslib
tags:
ctags -f TAGS *.[ch] plugins/*.[ch]
+
+force:
+
+.PHONY: all check clean clean-all clean-plugins distclean force install
+.PHONY: print-version tags test testclean plugins docs
diff --git a/NEWS b/NEWS
index 42b86fd..5ae6521 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,35 @@
-## Noteworthy changes for the next release:
+## Release 1.5 (June 2017)
+
+* Added autoconf support to bcftools. See `INSTALL` for more details.
+
+* `norm`: Make norm case insensitive (#601). Trim the reference allele (#602).
+
+* `mpileup`: fix for misreported indel depths for reads containing adjacent
+ indels (3c1205c1).
+
+* `plot-vcfstats`: Open stats file in text mode, not binary (#618).
+
+* `fixref` plugin: Allow multiallelic sites in the `-i, --use-id reference`.
+ Also flip genotypes, not just REF/ALT!
+
+* `merge`: fix gVCF merge bug when last record on a chromosome opened a
+ gVCF block (#616)
+
+* New options added to the ROH plotting script.
+
+* `consensus`: Properly flush chain info (#606, thanks to @krooijers).
+
+* New `+prune` plugin for pruning sites by LD (R2) or maximum number of
+ records within a window.
+
+* New N_MISSING, F_MISSING (number and fraction misssing) filtering
+ expressions.
+
+* Fix HMM initilization in `roh` when snapshots are used in multiple
+ chromosome VCF.
+
+* Fix buffer overflow (#607) in `filter`.
+
## Release 1.4.1 (8 May 2017)
diff --git a/bam2bcf.c b/bam2bcf.c
index b4fb7f1..c8dc91b 100644
--- a/bam2bcf.c
+++ b/bam2bcf.c
@@ -168,27 +168,36 @@ int bcf_call_glfgen(int _n, const bam_pileup1_t *pl, int ref_base, bcf_callaux_t
for (i = n = 0; i < _n; ++i) {
const bam_pileup1_t *p = pl + i;
int q, b, mapQ, baseQ, is_diff, min_dist, seqQ;
- // set base
- if (p->is_del || p->is_refskip || (p->b->core.flag&BAM_FUNMAP)) continue;
+ if (p->is_refskip || (p->b->core.flag&BAM_FUNMAP)) continue;
+ if (p->is_del && !is_indel) continue;
++ori_depth;
+ if (is_indel)
+ {
+ b = p->aux>>16&0x3f;
+ baseQ = q = p->aux&0xff;
+ // This read is not counted as indel. Instead of skipping it, treat it as ref. It is
+ // still only an approximation, but gives more accurate AD counts and calls correctly
+ // hets instead of alt-homs in some cases (see test/mpileup/indel-AD.1.sam)
+ if ( q < bca->min_baseQ ) b = 0, q = (int)bam_get_qual(p->b)[p->qpos];
+ seqQ = p->aux>>8&0xff;
+ is_diff = (b != 0);
+ }
+ else
+ {
+ b = bam_seqi(bam_get_seq(p->b), p->qpos); // base
+ b = seq_nt16_int[b? b : ref_base]; // b is the 2-bit base
+ baseQ = q = (int)bam_get_qual(p->b)[p->qpos];
+ if (q < bca->min_baseQ) continue;
+ seqQ = 99;
+ is_diff = (ref4 < 4 && b == ref4)? 0 : 1;
+ }
mapQ = p->b->core.qual < 255? p->b->core.qual : DEF_MAPQ; // special case for mapQ==255
if ( !mapQ ) r->mq0++;
- baseQ = q = is_indel? p->aux&0xff : (int)bam_get_qual(p->b)[p->qpos]; // base/indel quality
- seqQ = is_indel? (p->aux>>8&0xff) : 99;
- if (q < bca->min_baseQ) continue;
if (q > seqQ) q = seqQ;
mapQ = mapQ < bca->capQ? mapQ : bca->capQ;
if (q > mapQ) q = mapQ;
if (q > 63) q = 63;
if (q < 4) q = 4; // MQ=0 reads count as BQ=4
- if (!is_indel) {
- b = bam_seqi(bam_get_seq(p->b), p->qpos); // base
- b = seq_nt16_int[b? b : ref_base]; // b is the 2-bit base
- is_diff = (ref4 < 4 && b == ref4)? 0 : 1;
- } else {
- b = p->aux>>16&0x3f;
- is_diff = (b != 0);
- }
bca->bases[n++] = q<<5 | (int)bam_is_rev(p->b)<<4 | b;
// collect annotations
if (b < 4)
diff --git a/bam2bcf_indel.c b/bam2bcf_indel.c
index 52837b5..6c367da 100644
--- a/bam2bcf_indel.c
+++ b/bam2bcf_indel.c
@@ -357,14 +357,14 @@ int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, int pos, bcf_calla
}
free(qq);
}
-/*
+#if 0
for (l = 0; l < tend - tbeg + abs(types[t]); ++l)
fputc("ACGTN"[(int)ref2[tbeg-left+l]], stderr);
fputc('\n', stderr);
for (l = 0; l < qend - qbeg; ++l) fputc("ACGTN"[(int)query[l]], stderr);
fputc('\n', stderr);
- fprintf(stderr, "pos=%d type=%d read=%d:%d name=%s qbeg=%d tbeg=%d score=%d\n", pos, types[t], s, i, bam1_qname(p->b), qbeg, tbeg, sc);
-*/
+ fprintf(stderr, "pos=%d type=%d read=%d:%d name=%s qbeg=%d tbeg=%d score=%d\n", pos, types[t], s, i, bam_get_qname(p->b), qbeg, tbeg, sc);
+#endif
}
}
}
@@ -454,7 +454,7 @@ int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, int pos, bcf_calla
if (x == bca->indel_types[j]) break;
p->aux = j<<16 | (j == 4? 0 : (p->aux&0xffff));
if ((p->aux>>16&0x3f) > 0) ++n_alt;
- //fprintf(stderr, "X pos=%d read=%d:%d name=%s call=%d type=%d seqQ=%d indelQ=%d\n", pos, s, i, bam1_qname(p->b), (p->aux>>16)&0x3f, bca->indel_types[(p->aux>>16)&0x3f], (p->aux>>8)&0xff, p->aux&0xff);
+ //fprintf(stderr, "X pos=%d read=%d:%d name=%s call=%d type=%d seqQ=%d indelQ=%d\n", pos, s, i, bam_get_qname(p->b), (p->aux>>16)&0x3f, bca->indel_types[(p->aux>>16)&0x3f], (p->aux>>8)&0xff, p->aux&0xff);
}
}
diff --git a/bcftools.h b/bcftools.h
index 7d2d49f..dde3ab0 100644
--- a/bcftools.h
+++ b/bcftools.h
@@ -63,6 +63,12 @@ static inline char gt2iupac(char a, char b)
return iupac[(int)a][(int)b];
}
+static inline char nt_to_upper(char nt)
+{
+ if ( nt < 97 ) return nt;
+ return nt - 32;
+}
+
static inline double phred_score(double prob)
{
if ( prob==0 ) return 99;
diff --git a/config.mk.in b/config.mk.in
new file mode 100644
index 0000000..df70d55
--- /dev/null
+++ b/config.mk.in
@@ -0,0 +1,63 @@
+# Optional configure Makefile overrides for bcftools.
+#
+# Copyright (C) 2015,2017 Genome Research Ltd.
+#
+# Author: John Marshall <jm18 at sanger.ac.uk>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+
+# This is @configure_input@
+#
+# If you use configure, this file overrides variables and augments rules
+# in the Makefile to reflect your configuration choices. If you don't run
+# configure, the main Makefile contains suitable conservative defaults.
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+bindir = @bindir@
+datarootdir = @datarootdir@
+mandir = @mandir@
+
+CC = @CC@
+CPPFLAGS = @CPPFLAGS@
+CFLAGS = @CFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+
+DYNAMIC_FLAGS = @CC_RDYNAMIC_OPT@
+
+USE_GPL = @USE_GPL@
+GSL_LIBS = @GSL_LIBS@
+
+PLATFORM = @PLATFORM@
+PLUGINS_ENABLED = @enable_bcftools_plugins@
+plugindir = @bcf_plugindir@
+PLUGIN_EXT = @PLUGIN_EXT@
+
+ at Hsource@HTSDIR = @HTSDIR@
+ at Hsource@include $(HTSDIR)/htslib.mk
+ at Hsource@include $(HTSDIR)/htslib_static.mk
+ at Hsource@HTSLIB = $(HTSDIR)/libhts.a
+ at Hsource@HTSLIB_LIB = $(HTSLIB) $(HTSLIB_static_LIBS)
+ at Hsource@HTSLIB_LDFLAGS = $(HTSLIB_static_LDFLAGS)
+ at Hsource@BGZIP = $(HTSDIR)/bgzip
+ at Hsource@TABIX = $(HTSDIR)/tabix
+HTSLIB_CPPFLAGS = @HTSLIB_CPPFLAGS@
+ at Hinstall@HTSLIB_LDFLAGS = @HTSLIB_LDFLAGS@
+ at Hinstall@HTSLIB_LIB = -lhts
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..256264f
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,218 @@
+# Configure script for bcftools, utilities for VCF/BCF files.
+#
+# Copyright (C) 2015,2017 Genome Research Ltd.
+#
+# Author: John Marshall <jm18 at sanger.ac.uk>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+
+dnl Process this file with autoconf to produce a configure script
+AC_INIT([BCFtools], m4_esyscmd_s([make print-version]),
+ [samtools-help at lists.sourceforge.net], [], [http://www.htslib.org/])
+AC_PREREQ([2.63]) dnl This version introduced 4-argument AC_CHECK_HEADER
+AC_CONFIG_SRCDIR([main.c])
+AC_CONFIG_HEADERS([config.h])
+
+m4_include([m4/ax_with_htslib.m4])
+
+dnl Copyright notice to be copied into the generated configure script
+AC_COPYRIGHT([Portions copyright (C) 2015,2017 Genome Research Ltd.
+
+This configure script is free software: you are free to change and
+redistribute it. There is NO WARRANTY, to the extent permitted by law.])
+
+AC_PROG_CC
+
+AC_SYS_LARGEFILE
+
+AC_ARG_ENABLE([bcftools-plugins],
+ [AS_HELP_STRING([--disable-bcftools-plugins],
+ [do not build optional plugins])],
+ [], [enable_bcftools_plugins=yes])
+AC_SUBST(enable_bcftools_plugins)
+
+AC_ARG_WITH([bcf-plugin-dir],
+ [AS_HELP_STRING([--with-bcf-plugin-dir=DIR],
+ [plugin installation location [LIBEXECDIR/bcftools]])],
+ [case $withval in
+ yes|no) AC_MSG_ERROR([no directory specified for --with-plugin-dir]) ;;
+ esac],
+ [with_bcf_plugin_dir='$(libexecdir)/bcftools'])
+AC_SUBST([bcf_plugindir], $with_bcf_plugin_dir)
+
+AC_ARG_WITH([bcf-plugin-path],
+ [AS_HELP_STRING([--with-bcf-plugin-path=PATH],
+ [default BCFTOOLS_PLUGINS plugin search path [PLUGINDIR]])],
+ [case $withval in
+ yes) AC_MSG_ERROR([no path specified for --with-bcf-plugin-path]) ;;
+ no) with_bcf_plugin_path= ;;
+ esac],
+ [with_bcf_plugin_path=$with_bcf_plugin_dir])
+AC_SUBST([PLUGINPATH], $with_bcf_plugin_path)
+
+AC_ARG_ENABLE([libgsl],
+ [AS_HELP_STRING([--enable-libgsl],
+ [build options that require the GNU scientific library (changes bcftools license to GPL, see INSTALL for details)])],
+ [], [enable_libgsl=no])
+
+AC_ARG_WITH([cblas],
+ [AS_HELP_STRING([--with-cblas],
+ [which cblas library to use (only needed with libgsl; default: try cblas then gslcblas)])],
+ [AS_CASE([$withval],
+ [no],[AC_MSG_ERROR([no library name specified for --with-cblas])])],
+ [with_cblas=yes])
+
+AX_WITH_HTSLIB
+if test "$ax_cv_htslib" != yes; then
+ AC_MSG_ERROR([HTSlib development files not found
+
+BCFtools uses HTSlib to parse bioinformatics file formats etc. Building it
+requires an unpacked HTSlib source tree (which will be built in conjunction
+with bcftools) or a previously-installed HTSlib. In either case you may
+need to configure --with-htslib=DIR to locate the appropriate HTSlib.
+
+FAILED. You must supply an HTSlib in order to build bcftools successfully.])
+fi
+
+if test "$ax_cv_htslib_which" = source; then
+ Hsource=
+ Hinstall='#'
+else
+ Hsource='#'
+ Hinstall=
+fi
+AC_SUBST([Hsource])
+AC_SUBST([Hinstall])
+
+AS_IF([test "$enable_bcftools_plugins" != "no"], [dnl
+ AC_MSG_CHECKING([shared library type])
+ test -n "$host_alias" || host_alias=unknown-`uname -s`
+ AS_CASE([$host_alias],
+ [*-cygwin* | *-CYGWIN*],[dnl
+ host_result="Cygwin DLL"
+ PLATFORM=CYGWIN
+ PLUGIN_EXT=.cygdll],
+
+ [*-darwin* | *-Darwin*],[dnl
+ host_result="Darwin dylib"
+ PLATFORM=Darwin
+ PLUGIN_EXT=.so],
+
+ [*],[dnl
+ host_result="plain .so"
+ PLATFORM=default
+ PLUGIN_EXT=.so])
+ AC_MSG_RESULT([$host_result])
+ AC_SUBST([PLATFORM])
+ AC_SUBST([PLUGIN_EXT])
+ AC_DEFINE_UNQUOTED([PLUGIN_EXT], ["$PLUGIN_EXT"],
+ [Platform-dependent plugin filename extension.])
+ AC_DEFINE([ENABLE_BCF_PLUGINS], 1,
+ [Define if BCFtools should enable plugins.])
+
+ AC_SEARCH_LIBS([dlopen], [dl], [],
+ [AC_MSG_ERROR([dlopen() not found
+
+Plugin support requires dynamic linking facilities from the operating system.
+Either configure with --disable-bcftools-plugins or resolve this error to
+build bcftools.])])
+
+ AC_MSG_CHECKING([if the compiler accepts -rdynamic])
+ save_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -rdynamic"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM()],[cc_rdynamic=yes],[cc_rdynamic=no])
+ CFLAGS=$save_CFLAGS
+ AC_MSG_RESULT([$cc_rdynamic])
+ AS_IF([test "$cc_rdynamic" = "yes"],dnl
+ [CC_RDYNAMIC_OPT=-rdynamic],[CC_RDYNAMIC_OPT=])
+ AC_SUBST([CC_RDYNAMIC_OPT])
+])
+
+save_LIBS=$LIBS
+zlib_devel=ok
+dnl Set a trivial non-empty INCLUDES to avoid excess default includes tests
+AC_CHECK_HEADER([zlib.h], [], [zlib_devel=missing], [;])
+AC_CHECK_LIB(z, inflate, [], [zlib_devel=missing])
+LIBS=$save_LIBS
+
+if test $zlib_devel != ok; then
+ AC_MSG_ERROR([zlib development files not found
+
+BCFtools uses compression routines from the zlib library <http://zlib.net>.
+Building bcftools requires zlib development files to be installed on the build
+machine; you may need to ensure a package such as zlib1g-dev (on Debian or
+Ubuntu Linux) or zlib-devel (on RPM-based Linux distributions) is installed.
+
+FAILED. This error must be resolved in order to build bcftools successfully.])
+fi
+
+AS_IF([test "$enable_libgsl" != "no"], [dnl
+ gsl_devel=ok
+ save_LIBS="$LIBS"dnl Libraries for GSL are listed in $(GSL_LIBS)
+ GSL_LIBS=
+ AC_CHECK_HEADER([gsl/gsl_version.h], [], [gsl_devel=missing], [;])
+ AS_IF([test "$gsl_devel" != "missing"], [dnl
+ AS_CASE([$with_cblas],
+ [yes],[AC_SEARCH_LIBS([cblas_dgemm],[cblas gslcblas],
+ [GSL_LIBS="$ac_cv_search_cblas_dgemm"],
+ [gsl_devel=missing])],
+ [AC_CHECK_LIB([$with_cblas],[cblas_dgemm],
+ [GSL_LIBS="-l$with_cblas"],[gsl_devel=missing])])
+ ])
+ AS_IF([test "$gsl_devel" != "missing"], [dnl
+ AC_CHECK_LIB(gsl, gsl_multifit_gradient,
+ [GSL_LIBS="-lgsl $GSL_LIBS"], [gsl_devel=missing], [$GSL_LIBS])
+ ])
+
+ AS_IF([test "$gsl_devel" != "ok"], [dnl
+ AC_MSG_ERROR([libgsl development files not found
+
+The bcftools polysomy command uses routines from the GNU Scientific library
+<https://www.gnu.org/software/gsl/>. Building BCFtools with libgsl enabled
+requires libgsl development files to be installed on the build machine; you
+may need to ensure a package such as libgsl0-dev (on Debian or Ubuntu linux)
+or gsl-devel (on RPM-based Linux distributions) is installed.
+
+Either configure with --disable-libgsl or resolve this error to build bcftools.
+ ])
+ ])
+
+ LIBS="$save_LIBS"
+ USE_GPL=1
+ AC_SUBST([USE_GPL])
+ AC_SUBST([GSL_LIBS])
+])
+
+AC_CONFIG_FILES([config.mk])
+AC_OUTPUT
+
+AS_IF([test "x$USE_GPL" != "x"], [dnl
+ AC_MSG_NOTICE([License has been changed to GPL.
+
+Linking against the GNU scientific library requires that the resulting
+binary is licensed using the GNU General Public License. In particular,
+this means you will have to follow the terms of this license in order
+to distribute binary copies. For more information see the INSTALL file.
+
+Text of the GNU General Public License can be found in the LICENSE file,
+or at http://www.gnu.org/copyleft/gpl.html
+
+Information on the GNU Scientific Library, including the rationale for
+its choice of license can be found at https://www.gnu.org/software/gsl/
+])])
diff --git a/consensus.c b/consensus.c
index 4fccc4f..258ef14 100644
--- a/consensus.c
+++ b/consensus.c
@@ -536,13 +536,14 @@ static void consensus(args_t *args)
{
if ( str.s[0]=='>' )
{
- // new sequence encountered, apply all cached variants
+ // new sequence encountered
+ if (args->chain) {
+ print_chain(args);
+ destroy_chain(args);
+ }
+ // apply all cached variants
while ( args->vcf_rbuf.n )
{
- if (args->chain) {
- print_chain(args);
- destroy_chain(args);
- }
bcf1_t *rec = args->vcf_buf[args->vcf_rbuf.f];
if ( rec->rid!=args->rid || ( args->fa_end_pos && rec->pos > args->fa_end_pos ) ) break;
int i = rbuf_shift(&args->vcf_rbuf);
diff --git a/doc/bcftools.1 b/doc/bcftools.1
index 3999217..0df9450 100644
--- a/doc/bcftools.1
+++ b/doc/bcftools.1
@@ -2,12 +2,12 @@
.\" Title: bcftools
.\" Author: [see the "AUTHORS" section]
.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\" Date: 2017-05-08
+.\" Date: 2017-06-21
.\" Manual: \ \&
.\" Source: \ \&
.\" Language: English
.\"
-.TH "BCFTOOLS" "1" "2017\-05\-08" "\ \&" "\ \&"
+.TH "BCFTOOLS" "1" "2017\-06\-21" "\ \&" "\ \&"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -41,7 +41,7 @@ Most commands accept VCF, bgzipped VCF and BCF with filetype detected automatica
BCFtools is designed to work on a stream\&. It regards an input file "\-" as the standard input (stdin) and outputs to the standard output (stdout)\&. Several commands can thus be combined with Unix pipes\&.
.SS "VERSION"
.sp
-This manual page was last updated \fB2017\-05\-08\fR and refers to bcftools git version \fB1\&.4\&.1\fR\&.
+This manual page was last updated \fB2017\-06\-21\fR and refers to bcftools git version \fB1\&.5\fR\&.
.SS "BCF1"
.sp
The BCF1 format output by versions of samtools <= 0\&.1\&.19 is \fBnot\fR compatible with this version of bcftools\&. To read BCF1 files one can use the view command from old versions of bcftools packaged with samtools versions <= 0\&.1\&.19 to convert to VCF, which can then be read by this version of bcftools\&.
@@ -1495,19 +1495,19 @@ reference sequence in fasta format\&. Must be indexed with samtools faidx
.nr an-break-flag 1
.br
.ps +1
-\fBHAPS/SAMPLE conversion:\fR
+\fBHAP/SAMPLE conversion:\fR
.RS 4
.PP
-\fB\-\-hapsample2vcf\fR \fIprefix\fR or \fIhaps\-file\fR,\fIsample\-file\fR
+\fB\-\-hapsample2vcf\fR \fIprefix\fR or \fIhap\-file\fR,\fIsample\-file\fR
.RS 4
-convert from haps/sample format to VCF\&. The columns of \&.haps file are similar to \&.gen file above, but there are only two haplotype columns per sample\&. Note that the first column of the haps file is expected to be in the form "CHR:POS_REF_ALT(_END)?", with the _END being optional for defining the INFO/END tag when ALT is a symbolic allele, for example:
+convert from hap/sample format to VCF\&. The columns of \&.hap file are similar to \&.gen file above, but there are only two haplotype columns per sample\&. Note that the first column of the \&.hap file is expected to be in the form "CHR:POS_REF_ALT(_END)?", with the _END being optional for defining the INFO/END tag when ALT is a symbolic allele, for example:
.RE
.sp
.if n \{\
.RS 4
.\}
.nf
- \&.haps
+ \&.hap
\-\-\-\-
1:111485207_G_A rsID1 111485207 G A 0 1 0 0
1:111494194_C_T rsID2 111494194 C T 0 1 0 0
@@ -1517,9 +1517,9 @@ convert from haps/sample format to VCF\&. The columns of \&.haps file are simila
.RE
.\}
.PP
-\fB\-\-hapsample\fR \fIprefix\fR or \fIhaps\-file\fR,\fIsample\-file\fR
+\fB\-\-hapsample\fR \fIprefix\fR or \fIhap\-file\fR,\fIsample\-file\fR
.RS 4
-convert from VCF to haps/sample format used by IMPUTE2 and SHAPEIT\&. The columns of \&.haps file begin with ID,RSID,POS,REF,ALT\&. In order to prevent strand swaps, the program uses IDs of the form "CHROM:POS_REF_ALT"\&.
+convert from VCF to hap/sample format used by IMPUTE2 and SHAPEIT\&. The columns of \&.hap file begin with ID,RSID,POS,REF,ALT\&. In order to prevent strand swaps, the program uses IDs of the form "CHROM:POS_REF_ALT"\&.
.RE
.PP
\fB\-\-haploid2diploid\fR
@@ -1559,26 +1559,26 @@ output VCF IDs instead of "CHROM:POS_REF_ALT" IDs
.nr an-break-flag 1
.br
.ps +1
-\fBHAPS/LEGEND/SAMPLE conversion:\fR
+\fBHAP/LEGEND/SAMPLE conversion:\fR
.RS 4
.PP
-\fB\-H, \-\-haplegendsample2vcf\fR \fIprefix\fR or \fIhaps\-file\fR,\fIlegend\-file\fR,\fIsample\-file\fR
+\fB\-H, \-\-haplegendsample2vcf\fR \fIprefix\fR or \fIhap\-file\fR,\fIlegend\-file\fR,\fIsample\-file\fR
.RS 4
-convert from haps/legend/sample format used by IMPUTE2 to VCF, see also
+convert from hap/legend/sample format used by IMPUTE2 to VCF, see also
\fB\-h, \-\-hapslegendsample\fR
below\&.
.RE
.PP
-\fB\-h, \-\-haplegendsample\fR \fIprefix\fR or \fIhaps\-file\fR,\fIlegend\-file\fR,\fIsample\-file\fR
+\fB\-h, \-\-haplegendsample\fR \fIprefix\fR or \fIhap\-file\fR,\fIlegend\-file\fR,\fIsample\-file\fR
.RS 4
-convert from VCF to haps/legend/sample format used by IMPUTE2 and SHAPEIT\&. The columns of \&.legend file ID,POS,REF,ALT\&. In order to prevent strand swaps, the program uses IDs of the form "CHROM:POS_REF_ALT"\&. The \&.sample file is quite basic at the moment with columns for population, group and sex expected to be edited by the user\&. For example:
+convert from VCF to hap/legend/sample format used by IMPUTE2 and SHAPEIT\&. The columns of \&.legend file ID,POS,REF,ALT\&. In order to prevent strand swaps, the program uses IDs of the form "CHROM:POS_REF_ALT"\&. The \&.sample file is quite basic at the moment with columns for population, group and sex expected to be edited by the user\&. For example:
.RE
.sp
.if n \{\
.RS 4
.\}
.nf
- \&.haps
+ \&.hap
\-\-\-\-\-
0 1 0 0 1 0
0 1 0 0 0 1
@@ -4547,13 +4547,13 @@ MAX, MIN, AVG, SUM, STRLEN, ABS
.sp -1
.IP \(bu 2.3
.\}
-variables calculated on the fly if not present: number of alternate alleles; number of samples; count of alternate alleles; minor allele count (similar to AC but is always smaller than 0\&.5); frequency of alternate alleles (AF=AC/AN); frequency of minor alleles (MAF=MAC/AN); number of alleles in called genotypes
+variables calculated on the fly if not present: number of alternate alleles; number of samples; count of alternate alleles; minor allele count (similar to AC but is always smaller than 0\&.5); frequency of alternate alleles (AF=AC/AN); frequency of minor alleles (MAF=MAC/AN); number of alleles in called genotypes; number of samples with missing genotype; fraction of samples with missing genotype
.sp
.if n \{\
.RS 4
.\}
.nf
-N_ALT, N_SAMPLES, AC, MAC, AF, MAF, AN
+N_ALT, N_SAMPLES, AC, MAC, AF, MAF, AN, N_MISSING, F_MISSING
.fi
.if n \{\
.RE
diff --git a/doc/bcftools.html b/doc/bcftools.html
index c178294..5104307 100644
--- a/doc/bcftools.html
+++ b/doc/bcftools.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>bcftools</title><link rel="stylesheet" type="text/css" href="docbook-xsl.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /></head><body><div xml:lang="en" class="refentry" title="bcftools" lang="en"><a id="idp162448"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>bcftools — utilities for variant calling and manipula [...]
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>bcftools</title><link rel="stylesheet" type="text/css" href="docbook-xsl.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /></head><body><div xml:lang="en" class="refentry" title="bcftools" lang="en"><a id="idp25137632"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>bcftools — utilities for variant calling and manipu [...]
Call Format (VCF) and its binary counterpart BCF. All commands work
transparently with both VCFs and BCFs, both uncompressed and BGZF-compressed.</p><p>Most commands accept VCF, bgzipped VCF and BCF with filetype detected
automatically even when streaming from a pipe. Indexed VCF and BCF
@@ -8,7 +8,7 @@ will work in all situations. Un-indexed VCF and BCF and streams will
work in most, but not all situations. In general, whenever multiple VCFs are
read simultaneously, they must be indexed and therefore also compressed.</p><p>BCFtools is designed to work on a stream. It regards an input file "-" as the
standard input (stdin) and outputs to the standard output (stdout). Several
-commands can thus be combined with Unix pipes.</p><div class="refsect2" title="VERSION"><a id="_version"></a><h3>VERSION</h3><p>This manual page was last updated <span class="strong"><strong>2017-05-08</strong></span> and refers to bcftools git version <span class="strong"><strong>1.4.1</strong></span>.</p></div><div class="refsect2" title="BCF1"><a id="_bcf1"></a><h3>BCF1</h3><p>The BCF1 format output by versions of samtools <= 0.1.19 is <span class="strong"><strong>not</strong></span>
+commands can thus be combined with Unix pipes.</p><div class="refsect2" title="VERSION"><a id="_version"></a><h3>VERSION</h3><p>This manual page was last updated <span class="strong"><strong>2017-06-21</strong></span> and refers to bcftools git version <span class="strong"><strong>1.5</strong></span>.</p></div><div class="refsect2" title="BCF1"><a id="_bcf1"></a><h3>BCF1</h3><p>The BCF1 format output by versions of samtools <= 0.1.19 is <span class="strong"><strong>not</strong></span>
compatible with this version of bcftools. To read BCF1 files one can use
the view command from old versions of bcftools packaged with samtools
versions <= 0.1.19 to convert to VCF, which can then be read by
@@ -849,23 +849,23 @@ depth information, such as INFO/AD or FORMAT/AD. For that, consider using the
<span class="strong"><strong>-f, --fasta-ref</strong></span> <span class="emphasis"><em>file</em></span>
</span></dt><dd>
reference sequence in fasta format. Must be indexed with samtools faidx
-</dd></dl></div></div><div class="refsect3" title="HAPS/SAMPLE conversion:"><a id="_haps_sample_conversion"></a><h4>HAPS/SAMPLE conversion:</h4><div class="variablelist"><dl><dt><span class="term">
-<span class="strong"><strong>--hapsample2vcf</strong></span> <span class="emphasis"><em>prefix</em></span> or <span class="emphasis"><em>haps-file</em></span>,<span class="emphasis"><em>sample-file</em></span>
+</dd></dl></div></div><div class="refsect3" title="HAP/SAMPLE conversion:"><a id="_hap_sample_conversion"></a><h4>HAP/SAMPLE conversion:</h4><div class="variablelist"><dl><dt><span class="term">
+<span class="strong"><strong>--hapsample2vcf</strong></span> <span class="emphasis"><em>prefix</em></span> or <span class="emphasis"><em>hap-file</em></span>,<span class="emphasis"><em>sample-file</em></span>
</span></dt><dd>
- convert from haps/sample format to VCF. The columns of .haps file are
+ convert from hap/sample format to VCF. The columns of .hap file are
similar to .gen file above, but there are only two haplotype columns per
- sample. Note that the first column of the haps file is expected to be in
+ sample. Note that the first column of the .hap file is expected to be in
the form "CHR:POS_REF_ALT(_END)?", with the _END being optional for
defining the INFO/END tag when ALT is a symbolic allele, for example:
-</dd></dl></div><pre class="screen"> .haps
+</dd></dl></div><pre class="screen"> .hap
----
1:111485207_G_A rsID1 111485207 G A 0 1 0 0
1:111494194_C_T rsID2 111494194 C T 0 1 0 0
1:111495231_A_<DEL>_111495784 rsID3 111495231 A <DEL> 0 0 1 0</pre><div class="variablelist"><dl><dt><span class="term">
-<span class="strong"><strong>--hapsample</strong></span> <span class="emphasis"><em>prefix</em></span> or <span class="emphasis"><em>haps-file</em></span>,<span class="emphasis"><em>sample-file</em></span>
+<span class="strong"><strong>--hapsample</strong></span> <span class="emphasis"><em>prefix</em></span> or <span class="emphasis"><em>hap-file</em></span>,<span class="emphasis"><em>sample-file</em></span>
</span></dt><dd>
- convert from VCF to haps/sample format used by IMPUTE2 and SHAPEIT.
- The columns of .haps file begin with ID,RSID,POS,REF,ALT. In order to
+ convert from VCF to hap/sample format used by IMPUTE2 and SHAPEIT.
+ The columns of .hap file begin with ID,RSID,POS,REF,ALT. In order to
prevent strand swaps, the program uses IDs of the form
"CHROM:POS_REF_ALT".
</dd><dt><span class="term">
@@ -884,20 +884,20 @@ depth information, such as INFO/AD or FORMAT/AD. For that, consider using the
<span class="strong"><strong>--vcf-ids</strong></span>
</span></dt><dd>
output VCF IDs instead of "CHROM:POS_REF_ALT" IDs
-</dd></dl></div></div><div class="refsect3" title="HAPS/LEGEND/SAMPLE conversion:"><a id="_haps_legend_sample_conversion"></a><h4>HAPS/LEGEND/SAMPLE conversion:</h4><div class="variablelist"><dl><dt><span class="term">
-<span class="strong"><strong>-H, --haplegendsample2vcf</strong></span> <span class="emphasis"><em>prefix</em></span> or <span class="emphasis"><em>haps-file</em></span>,<span class="emphasis"><em>legend-file</em></span>,<span class="emphasis"><em>sample-file</em></span>
+</dd></dl></div></div><div class="refsect3" title="HAP/LEGEND/SAMPLE conversion:"><a id="_hap_legend_sample_conversion"></a><h4>HAP/LEGEND/SAMPLE conversion:</h4><div class="variablelist"><dl><dt><span class="term">
+<span class="strong"><strong>-H, --haplegendsample2vcf</strong></span> <span class="emphasis"><em>prefix</em></span> or <span class="emphasis"><em>hap-file</em></span>,<span class="emphasis"><em>legend-file</em></span>,<span class="emphasis"><em>sample-file</em></span>
</span></dt><dd>
- convert from haps/legend/sample format used by IMPUTE2 to VCF, see
+ convert from hap/legend/sample format used by IMPUTE2 to VCF, see
also <span class="strong"><strong>-h, --hapslegendsample</strong></span> below.
</dd><dt><span class="term">
-<span class="strong"><strong>-h, --haplegendsample</strong></span> <span class="emphasis"><em>prefix</em></span> or <span class="emphasis"><em>haps-file</em></span>,<span class="emphasis"><em>legend-file</em></span>,<span class="emphasis"><em>sample-file</em></span>
+<span class="strong"><strong>-h, --haplegendsample</strong></span> <span class="emphasis"><em>prefix</em></span> or <span class="emphasis"><em>hap-file</em></span>,<span class="emphasis"><em>legend-file</em></span>,<span class="emphasis"><em>sample-file</em></span>
</span></dt><dd>
- convert from VCF to haps/legend/sample format used by IMPUTE2 and SHAPEIT.
+ convert from VCF to hap/legend/sample format used by IMPUTE2 and SHAPEIT.
The columns of .legend file ID,POS,REF,ALT. In order to prevent strand
swaps, the program uses IDs of the form "CHROM:POS_REF_ALT". The .sample
file is quite basic at the moment with columns for population, group and
sex expected to be edited by the user. For example:
-</dd></dl></div><pre class="screen"> .haps
+</dd></dl></div><pre class="screen"> .hap
-----
0 1 0 0 1 0
0 1 0 0 0 1
@@ -2623,8 +2623,9 @@ function on FORMAT tags (over samples) and INFO tags (over vector fields)
variables calculated on the fly if not present: number of alternate alleles;
number of samples; count of alternate alleles; minor allele count (similar to
AC but is always smaller than 0.5); frequency of alternate alleles (AF=AC/AN);
-frequency of minor alleles (MAF=MAC/AN); number of alleles in called genotypes
-</p><pre class="literallayout">N_ALT, N_SAMPLES, AC, MAC, AF, MAF, AN</pre></li></ul></div><div class="itemizedlist" title="Notes:"><p class="title"><strong>Notes:</strong></p><ul class="itemizedlist" type="disc"><li class="listitem">
+frequency of minor alleles (MAF=MAC/AN); number of alleles in called genotypes;
+number of samples with missing genotype; fraction of samples with missing genotype
+</p><pre class="literallayout">N_ALT, N_SAMPLES, AC, MAC, AF, MAF, AN, N_MISSING, F_MISSING</pre></li></ul></div><div class="itemizedlist" title="Notes:"><p class="title"><strong>Notes:</strong></p><ul class="itemizedlist" type="disc"><li class="listitem">
String comparisons and regular expressions are case-insensitive
</li><li class="listitem">
If the subscript "*" is used in regular expression search, the
diff --git a/doc/bcftools.txt b/doc/bcftools.txt
index e625665..a6ef03b 100644
--- a/doc/bcftools.txt
+++ b/doc/bcftools.txt
@@ -869,24 +869,24 @@ depth information, such as INFO/AD or FORMAT/AD. For that, consider using the
reference sequence in fasta format. Must be indexed with samtools faidx
-==== HAPS/SAMPLE conversion:
-*--hapsample2vcf* 'prefix' or 'haps-file','sample-file'::
- convert from haps/sample format to VCF. The columns of .haps file are
+==== HAP/SAMPLE conversion:
+*--hapsample2vcf* 'prefix' or 'hap-file','sample-file'::
+ convert from hap/sample format to VCF. The columns of .hap file are
similar to .gen file above, but there are only two haplotype columns per
- sample. Note that the first column of the haps file is expected to be in
+ sample. Note that the first column of the .hap file is expected to be in
the form "CHR:POS_REF_ALT(_END)?", with the _END being optional for
defining the INFO/END tag when ALT is a symbolic allele, for example:
----
- .haps
+ .hap
----
1:111485207_G_A rsID1 111485207 G A 0 1 0 0
1:111494194_C_T rsID2 111494194 C T 0 1 0 0
1:111495231_A_<DEL>_111495784 rsID3 111495231 A <DEL> 0 0 1 0
----
-*--hapsample* 'prefix' or 'haps-file','sample-file'::
- convert from VCF to haps/sample format used by IMPUTE2 and SHAPEIT.
- The columns of .haps file begin with ID,RSID,POS,REF,ALT. In order to
+*--hapsample* 'prefix' or 'hap-file','sample-file'::
+ convert from VCF to hap/sample format used by IMPUTE2 and SHAPEIT.
+ The columns of .hap file begin with ID,RSID,POS,REF,ALT. In order to
prevent strand swaps, the program uses IDs of the form
"CHROM:POS_REF_ALT".
@@ -906,19 +906,19 @@ depth information, such as INFO/AD or FORMAT/AD. For that, consider using the
*--vcf-ids*::
output VCF IDs instead of "CHROM:POS_REF_ALT" IDs
-==== HAPS/LEGEND/SAMPLE conversion:
-*-H, --haplegendsample2vcf* 'prefix' or 'haps-file','legend-file','sample-file'::
- convert from haps/legend/sample format used by IMPUTE2 to VCF, see
+==== HAP/LEGEND/SAMPLE conversion:
+*-H, --haplegendsample2vcf* 'prefix' or 'hap-file','legend-file','sample-file'::
+ convert from hap/legend/sample format used by IMPUTE2 to VCF, see
also *-h, --hapslegendsample* below.
-*-h, --haplegendsample* 'prefix' or 'haps-file','legend-file','sample-file'::
- convert from VCF to haps/legend/sample format used by IMPUTE2 and SHAPEIT.
+*-h, --haplegendsample* 'prefix' or 'hap-file','legend-file','sample-file'::
+ convert from VCF to hap/legend/sample format used by IMPUTE2 and SHAPEIT.
The columns of .legend file ID,POS,REF,ALT. In order to prevent strand
swaps, the program uses IDs of the form "CHROM:POS_REF_ALT". The .sample
file is quite basic at the moment with columns for population, group and
sex expected to be edited by the user. For example:
----
- .haps
+ .hap
-----
0 1 0 0 1 0
0 1 0 0 0 1
@@ -2669,9 +2669,10 @@ to require that all alleles are of the given type. Compare
* variables calculated on the fly if not present: number of alternate alleles;
number of samples; count of alternate alleles; minor allele count (similar to
AC but is always smaller than 0.5); frequency of alternate alleles (AF=AC/AN);
-frequency of minor alleles (MAF=MAC/AN); number of alleles in called genotypes
+frequency of minor alleles (MAF=MAC/AN); number of alleles in called genotypes;
+number of samples with missing genotype; fraction of samples with missing genotype
- N_ALT, N_SAMPLES, AC, MAC, AF, MAF, AN
+ N_ALT, N_SAMPLES, AC, MAC, AF, MAF, AN, N_MISSING, F_MISSING
.Notes:
diff --git a/filter.c b/filter.c
index 463028f..78ff1f1 100644
--- a/filter.c
+++ b/filter.c
@@ -698,6 +698,40 @@ static void filters_set_alt_string(filter_t *flt, bcf1_t *line, token_t *tok)
tok->values[0] = str.m;
tok->str_value = str.s;
}
+static void filters_set_nmissing(filter_t *flt, bcf1_t *line, token_t *tok)
+{
+ bcf_unpack(line, BCF_UN_FMT);
+ if ( !line->n_sample )
+ {
+ tok->nvalues = 1;
+ tok->values[0] = 0;
+ return;
+ }
+
+ int i,igt = bcf_hdr_id2int(flt->hdr, BCF_DT_ID, "GT");
+ bcf_fmt_t *fmt = NULL;
+ for (i=0; i<line->n_fmt; i++)
+ if ( line->d.fmt[i].id==igt ) { fmt = &line->d.fmt[i]; break; }
+ if ( !fmt )
+ {
+ tok->nvalues = 0;
+ return;
+ }
+ if ( fmt->type!=BCF_BT_INT8 ) error("TODO: the GT fmt_type is not int8\n");
+
+ int j,nmissing = 0;
+ for (i=0; i<line->n_sample; i++)
+ {
+ int8_t *ptr = (int8_t*) (fmt->p + i*fmt->size);
+ for (j=0; j<fmt->n; j++)
+ {
+ if ( ptr[j]==bcf_int8_vector_end ) break;
+ if ( ptr[j]==bcf_gt_missing ) { nmissing++; break; }
+ }
+ }
+ tok->nvalues = 1;
+ tok->values[0] = tok->tag[0]=='N' ? nmissing : (double)nmissing / line->n_sample;
+}
static void filters_set_nalt(filter_t *flt, bcf1_t *line, token_t *tok)
{
tok->nvalues = 1;
@@ -832,6 +866,7 @@ static void set_strlen(filter_t *flt, bcf1_t *line, token_t *tok)
{
char *se = ss;
while ( *se && *se!=',' ) se++;
+ hts_expand(double, i+1, tok->mvalues, tok->values);
if ( !*se ) tok->values[i] = strlen(ss);
else
{
@@ -1303,6 +1338,18 @@ static int filters_init1(filter_t *filter, char *str, int len, token_t *tok)
tok->threshold = bcf_hdr_nsamples(filter->hdr);
return 0;
}
+ else if ( !strncasecmp(str,"N_MISSING",len) )
+ {
+ tok->setter = &filters_set_nmissing;
+ tok->tag = strdup("N_MISSING");
+ return 0;
+ }
+ else if ( !strncasecmp(str,"F_MISSING",len) )
+ {
+ tok->setter = &filters_set_nmissing;
+ tok->tag = strdup("F_MISSING");
+ return 0;
+ }
}
// does it have array subscript?
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..0b0fdcb
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,501 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2013-12-25.23; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+tab=' '
+nl='
+'
+IFS=" $tab$nl"
+
+# Set DOITPROG to "echo" to test this script.
+
+doit=${DOITPROG-}
+doit_exec=${doit:-exec}
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+is_target_a_directory=possibly
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t)
+ is_target_a_directory=always
+ dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) is_target_a_directory=never;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+ if test -n "$dst_arg"; then
+ echo "$0: target directory not allowed when installing a directory." >&2
+ exit 1
+ fi
+fi
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ if test $# -gt 1 || test "$is_target_a_directory" = always; then
+ if test ! -d "$dst_arg"; then
+ echo "$0: $dst_arg: Is not a directory." >&2
+ exit 1
+ fi
+ fi
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test "$is_target_a_directory" = never; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ dstdir=`dirname "$dst"`
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ oIFS=$IFS
+ IFS=/
+ set -f
+ set fnord $dstdir
+ shift
+ set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+ set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ set +f &&
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/m4/ax_with_htslib.m4 b/m4/ax_with_htslib.m4
new file mode 100644
index 0000000..0b02781
--- /dev/null
+++ b/m4/ax_with_htslib.m4
@@ -0,0 +1,154 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_with_htslib.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_WITH_HTSLIB
+#
+# DESCRIPTION
+#
+# This macro checks whether HTSlib <http://www.htslib.org/> is installed
+# or nearby, and adds a --with-htslib=DIR option to the configure script
+# for specifying the location. It locates either an installation prefix
+# (with 'include' and 'lib' subdirectories) or an HTSlib source tree, as
+# HTSlib is fast-moving and users may wish to use an in-development tree.
+#
+# Different checks occur depending on the --with-htslib argument given:
+#
+# With --with-htslib=DIR, checks whether DIR is a source tree or contains
+# a working installation.
+# By default, searches for a source tree (with a name matching htslib*)
+# within or alongside $srcdir. Produces AC_MSG_ERROR if there are
+# several equally-likely candidates. If there are none, checks for
+# a working default installation.
+# With --with-htslib=system, checks for a working default installation.
+#
+# If a source tree is found or specified, it is added to AC_CONFIG_SUBDIRS
+# if either --enable-configure-htslib is set, or where htslib is included
+# in a subdirectory (for packages that want to supply an embedded htslib).
+# Unfortunately this may cause a "you should use literals" warning when
+# autoconf is run.
+#
+# The following output variables are set by this macro:
+#
+# HTSDIR Directory containing HTSlib source tree
+# HTSLIB_CPPFLAGS Preprocessor flags for compiling with HTSlib
+# HTSLIB_LDFLAGS Linker flags for linking with HTSlib
+#
+# The following shell variables may be defined:
+#
+# ax_cv_htslib Set to "yes" if HTSlib was found
+# ax_cv_htslib_which Set to "source", "install", or "none"
+#
+# LICENSE
+#
+# Copyright (C) 2015,2017 Genome Research Ltd
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 1
+
+AC_DEFUN([AX_WITH_HTSLIB],
+[AC_ARG_WITH([htslib],
+ [AS_HELP_STRING([--with-htslib=DIR],
+ [use the HTSlib source tree or installation in DIR])
+dnl Not indented, to avoid extra whitespace outwith AS_HELP_STRING()
+AS_HELP_STRING([--with-htslib=system],
+ [use only a system HTSlib installation])],
+ [], [with_htslib=search])
+AC_ARG_ENABLE([configure-htslib],
+ [AS_HELP_STRING([--enable-configure-htslib],
+ [run configure for htslib as well @<:@default=only_in_subdir@:>@])],
+ [], [enable_configure_htslib=only_in_subdir])
+
+case $with_htslib in
+yes|search)
+ AC_MSG_CHECKING([location of HTSlib source tree])
+ case $srcdir in
+ .) srcp= ;;
+ *) srcp=$srcdir/ ;;
+ esac
+ found=
+ for dir in ${srcp}htslib* -- ${srcp}../htslib -- ${srcp}../htslib*
+ do
+ if test "$dir" = "--"; then
+ test -n "$found" && break
+ elif test -f "$dir/hts.c" && test -f "$dir/htslib/hts.h"; then
+ found="${found}1"
+ HTSDIR=$dir
+ fi
+ done
+ if test -z "$found"; then
+ AC_MSG_RESULT([none found])
+ ax_cv_htslib_which=system
+ elif test "$found" = 1; then
+ AC_MSG_RESULT([$HTSDIR])
+ ax_cv_htslib_which=source
+ if test "x$enable_configure_htslib" = "xonly_in_subdir" ; then
+ case $HTSDIR in
+ "${srcp}htslib"*) enable_configure_htslib=yes ;;
+ *) ;;
+ esac
+ fi
+ else
+ AC_MSG_RESULT([several directories found])
+ AC_MSG_ERROR([use --with-htslib=DIR to select which HTSlib to use])
+ fi
+ ;;
+no) ax_cv_htslib_which=none ;;
+system) ax_cv_htslib_which=system ;;
+*)
+ HTSDIR=$with_htslib
+ if test -f "$HTSDIR/hts.c" && test -f "$HTSDIR/htslib/hts.h"; then
+ ax_cv_htslib_which=source
+ else
+ ax_cv_htslib_which=install
+ fi
+ ;;
+esac
+
+case $ax_cv_htslib_which in
+source)
+ ax_cv_htslib=yes
+ HTSLIB_CPPFLAGS="-I$HTSDIR"
+ HTSLIB_LDFLAGS="-L$HTSDIR"
+ if test "x$enable_configure_htslib" = "xyes"; then
+ # We can't use a literal, because $HTSDIR is user-provided and variable
+ AC_CONFIG_SUBDIRS($HTSDIR)
+ fi
+ ;;
+system)
+ AC_CHECK_HEADER([htslib/sam.h],
+ [AC_CHECK_LIB(hts, hts_version, [ax_cv_htslib=yes], [ax_cv_htslib=no])],
+ [ax_cv_htslib=no], [;])
+ ax_cv_htslib_which=install
+ HTSDIR=
+ HTSLIB_CPPFLAGS=
+ HTSLIB_LDFLAGS=
+ ;;
+install)
+ ax_saved_CPPFLAGS=$CPPFLAGS
+ ax_saved_LDFLAGS=$LDFLAGS
+ HTSLIB_CPPFLAGS="-I$HTSDIR/include"
+ HTSLIB_LDFLAGS="-L$HTSDIR/lib"
+ CPPFLAGS="$CPPFLAGS $HTSLIB_CPPFLAGS"
+ LDFLAGS="$LDFLAGS $HTSLIB_LDFLAGS"
+ AC_CHECK_HEADER([htslib/sam.h],
+ [AC_CHECK_LIB(hts, hts_version, [ax_cv_htslib=yes], [ax_cv_htslib=no])],
+ [ax_cv_htslib=no], [;])
+ HTSDIR=
+ CPPFLAGS=$ax_saved_CPPFLAGS
+ LDFLAGS=$ax_saved_LDFLAGS
+ ;;
+none)
+ ax_cv_htslib=no
+ ;;
+esac
+
+AC_SUBST([HTSDIR])
+AC_SUBST([HTSLIB_CPPFLAGS])
+AC_SUBST([HTSLIB_LDFLAGS])])
diff --git a/main.c b/main.c
index 9350ff8..4e3e0e5 100644
--- a/main.c
+++ b/main.c
@@ -22,6 +22,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. */
+#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -110,7 +111,12 @@ static cmd_t cmds[] =
},
{ .func = main_plugin,
.alias = "plugin",
+#ifdef ENABLE_BCF_PLUGINS
.help = "user-defined plugins"
+#else
+ /* Do not advertise when plugins disabled. */
+ .help = "-user-defined plugins"
+#endif
},
{ .func = main_vcfquery,
.alias = "query",
diff --git a/misc/plot-roh.py b/misc/plot-roh.py
index e464c7a..49cef76 100755
--- a/misc/plot-roh.py
+++ b/misc/plot-roh.py
@@ -1,33 +1,52 @@
#!/usr/bin/python
-import glob, gzip, csv, sys, os, copy
+import glob, gzip, csv, sys, os, copy, re
csv.register_dialect('tab', delimiter='\t', quoting=csv.QUOTE_NONE)
+def usage(msg=None):
+ if msg==None:
+ print 'Usage: plot.py [OPTIONS] <dir>'
+ print 'Options:'
+ print ' -H, --highlight +group1,-group2 Highlight calls shared within group1 but not present in group2'
+ print ' -i, --interactive Run interactively'
+ print ' -l, --min-length <num> Filter input regions shorter than this [0]'
+ print ' -n, --min-markers <num> Filter input regions with fewer marker than this [0]'
+ print ' -o, --outfile <file> Output file name [plot.png]'
+ print ' -q, --min-qual <num> Filter input regions with quality smaller than this [0]'
+ print ' -r, --region [^]<chr|chr:beg-end> Plot this chromosome/region only'
+ print ' -s, --samples <file> List of samples to show, rename or group: "name[\\tnew_name[\\tgroup]]"'
+ print ' -h, --help This usage text'
+ print 'Matplotlib options:'
+ print ' +adj, --adjust <str> Set plot adjust [bottom=0.18,left=0.07,right=0.98]'
+ print ' +dpi, --dpi <num> Set bitmap DPI [150]'
+ print ' +sxt, --show-xticks Show x-ticks (genomic coordinate)'
+ print ' +xlb, --xlabel <str> Set x-label'
+ print ' +xli, --xlimit <num> Extend x-range by this fraction [0.05]'
+ else:
+ print msg
+ sys.exit(1)
+
dir = None
-reg = {'chr':None,'beg':0,'end':(1<<32)-1}
+regs = None
min_length = 0
min_markers = 0
min_qual = 0
interactive = False
-if len(sys.argv) < 2:
- print 'Usage: plot.py [OPTIONS] <dir>'
- print 'Options:'
- print ' -i, --interactive Run interactively'
- print ' -l, --min-length <num> Filter input regions shorter than this [0]'
- print ' -n, --min-markers <num> Filter input regions with fewer marker than this [0]'
- print ' -q, --min-qual <num> Filter input regions with quality smaller than this [0]'
- print ' -r, --region <chr|chr:beg-end> Plot this chromosome/region only'
- sys.exit(1)
+sample_file = None
+highlight = None
+outfile = None
+adjust = 'bottom=0.18,left=0.07,right=0.98'
+dpi = 150
+xlim = 0.05
+show_xticks = False
+xlabel = None
+
+if len(sys.argv) < 2: usage()
args = sys.argv[1:]
while len(args):
if args[0]=='-r' or args[0]=='--region':
args = args[1:]
- x = args[0].split(':')
- reg['chr'] = x[0]
- if len(x)>1:
- (reg['beg'],reg['end']) = x[1].split('-')
- reg['beg'] = float(reg['beg'])
- reg['end'] = float(reg['end'])
+ regs = args[0]
elif args[0]=='-i' or args[0]=='--interactive':
interactive = True
elif args[0]=='-l' or args[0]=='--min-length':
@@ -36,13 +55,45 @@ while len(args):
elif args[0]=='-n' or args[0]=='--min-markers':
args = args[1:]
min_markers = float(args[0])
+ elif args[0]=='-o' or args[0]=='--outfile':
+ args = args[1:]
+ outfile = args[0]
elif args[0]=='-q' or args[0]=='--min-qual':
args = args[1:]
min_qual = float(args[0])
+ elif args[0]=='-H' or args[0]=='--highlight':
+ args = args[1:]
+ highlight = args[0]
+ elif args[0]=='-s' or args[0]=='--samples':
+ args = args[1:]
+ sample_file = args[0]
+ elif args[0]=='-?' or args[0]=='-h' or args[0]=='--help':
+ usage()
+ elif args[0]=='+adj' or args[0]=='--adjust':
+ args = args[1:]
+ adjust = args[0]
+ elif args[0]=='+dpi' or args[0]=='--dpi':
+ args = args[1:]
+ dpi = float(args[0])
+ elif args[0]=='+xlb' or args[0]=='--xlabel':
+ args = args[1:]
+ xlabel = args[0]
+ elif args[0]=='+sxt' or args[0]=='--show-xticks':
+ show_xticks = True
+ elif args[0]=='+xli' or args[0]=='--xlimit':
+ args = args[1:]
+ xlim = float(args[0])
else:
dir = args[0]
args = args[1:]
+if interactive and outfile!=None: usage("Use -i, --interactive or -o, --outfile, but not both")
+if not interactive and outfile==None: outfile = 'plot.png'
+
+def wrap_hash(**args): return args
+adjust = eval("wrap_hash("+adjust+")")
+
+
import matplotlib as mpl
for gui in ['TKAgg','GTKAgg','Qt4Agg','WXAgg','MacOSX']:
try:
@@ -58,6 +109,50 @@ mpl.rcParams['axes.color_cycle'] = cols
globstr = os.path.join(dir, '*.txt.gz')
fnames = glob.glob(globstr)
+if len(fnames)==0: usage("No data files found in \""+dir+"\"")
+
+def parse_regions(str):
+ if str==None: return None
+ regs = { 'inc':[], 'exc':[] }
+ list = str.split(',')
+ key = 'inc'
+ if list[0][0]=='^':
+ key = 'exc'
+ list[0] = list[0][1:]
+ for reg in list:
+ x = reg.split(':')
+ chr = x[0]
+ beg = 0
+ end = (1<<32)-1
+ if len(x)>1:
+ (beg,end) = x[1].split('-')
+ beg = float(beg)
+ end = float(end)
+ regs[key].append({'chr':chr,'beg':beg,'end':end})
+ return regs
+
+def region_overlap(regs,chr,beg,end):
+ if regs==None: return (beg,end)
+ if len(regs['exc'])>0:
+ for reg in regs['exc']:
+ if chr==reg['chr']: return None
+ return (beg,end)
+ if len(regs['inc'])==0: return (beg,end)
+ for reg in regs['inc']:
+ if chr!=reg['chr']: continue
+ if beg>reg['end']: continue
+ if end<reg['beg']: continue
+ if beg<reg['beg']: beg = reg['beg']
+ if end>reg['end']: end = reg['end']
+ return (beg,end)
+ return None
+
+def parse_outfile(fname):
+ files = re.split(r',',fname)
+ bname = re.search(r'^(.+)\.[^.]+$', files[0]).group(1)
+ for i in range(len(files)-1):
+ files[i+1] = bname+"."+files[i+1]
+ return files
def next_region(rgs):
min = None
@@ -100,8 +195,62 @@ def merge_regions(rg):
for smpl in smpls: out[smpl].append([beg,end])
return out
+def prune_regions(groups,regions):
+ regs = {'+':{},'-':{}}
+ for smpl in regions:
+ grp = groups[smpl]
+ for reg in regions[smpl]:
+ key = str(reg[0])+"-"+str(reg[1]) # reg=[beg,end] -> "beg-end"
+ if key not in regs[grp]: regs[grp][key] = 0
+ regs[grp][key] += 1
+ nexp = 0
+ for smpl in groups:
+ if groups[smpl]=='+': nexp += 1
+ for smpl in regions:
+ rm = []
+ for reg in regions[smpl]:
+ key = str(reg[0])+"-"+str(reg[1])
+ if key in regs['-']: rm.append(reg)
+ elif key not in regs['+'] or regs['+'][key]!=nexp: rm.append(reg)
+ for reg in rm:
+ if reg in regions[smpl]:
+ regions[smpl].remove(reg)
+ return regions
+
+def parse_samples(fname,highlight):
+ if fname==None: return (None,None,{})
+ samples = {}
+ groups = {}
+ grp2sgn = {}
+ smpl2y = {}
+ # parse "+name" to create a map "name":"+"
+ if highlight!=None:
+ for grp in re.split(r',', highlight):
+ if grp[0]!='+' and grp[0]!='-': usage("Expected + or - before the group name: "+grp)
+ grp2sgn[grp[1:]] = grp[0]
+ # read samples, renaming them
+ with open(fname) as f:
+ for line in f:
+ row = re.split(r'\s+', line.rstrip('\n'))
+ smpl = row[0]
+ if len(row)==1: samples[smpl] = smpl
+ else:
+ samples[smpl] = row[1]
+ if len(row)==3:
+ grp = row[2]
+ if grp in grp2sgn:
+ grp = grp2sgn[grp]
+ else:
+ grp = '+'
+ groups[smpl] = grp
+ y = len(smpl2y)
+ smpl2y[smpl] = y
+ if highlight==None: groups = None
+ return (samples,groups,smpl2y)
+
+regs = parse_regions(regs)
+(samples,groups,smpl2y) = parse_samples(sample_file,highlight)
-smpl2y = {}
dat_gt = {}
dat_rg = {}
chrs = []
@@ -112,13 +261,15 @@ for fname in fnames:
if row[0]=='GT':
chr = row[1]
pos = int(row[2])
- if reg['chr']!=None and (chr!=reg['chr'] or pos<reg['beg'] or pos>reg['end']): continue
+ reg = region_overlap(regs,chr,pos,pos)
+ if reg==None: continue
smpl = row[3]
+ if samples!=None and smpl not in samples: continue
gt = row[4]
x = gt.split('/')
dsg = 2
if x[0]!=x[1]: dsg = 1
- elif x[0]=='0': dsg = 0
+ elif x[0]=='0': continue # skip HomRef 0/0 genotypes
if chr not in dat_gt:
dat_gt[chr] = {}
chrs.append(chr)
@@ -130,6 +281,7 @@ for fname in fnames:
dat_gt[chr][smpl].append([pos,dsg])
elif row[0]=='RG':
smpl = row[1]
+ if samples!=None and smpl not in samples: continue
chr = row[2]
beg = int(row[3])
end = int(row[4])
@@ -139,14 +291,22 @@ for fname in fnames:
if length < min_length: continue
if nmark < min_markers : continue
if qual < min_qual : continue
- if reg['chr']!=None and (chr!=reg['chr'] or end<reg['beg'] or beg>reg['end']): continue
+ reg = region_overlap(regs,chr,beg,end)
if chr not in dat_rg: dat_rg[chr] = {}
if smpl not in dat_rg[chr]: dat_rg[chr][smpl] = []
- if reg['chr']!=None:
- if beg<reg['beg']: beg = reg['beg']
- if end>reg['end']: end = reg['end']
+ if reg!=None:
+ if beg<reg[0]: beg = reg[0]
+ if end>reg[1]: end = reg[1]
dat_rg[chr][smpl].append([beg,end])
+if samples==None:
+ samples = {}
+ for smpl in smpl2y: samples[smpl] = smpl
+
+# list the samples in the same order as encountered in the file, from top to bottom
+for smpl in smpl2y:
+ smpl2y[smpl] = len(smpl2y) - smpl2y[smpl] - 1
+
off_list = []
off_hash = {}
off = 0
@@ -155,6 +315,8 @@ dat_rg1 = {}
for chr in chrs:
if chr in dat_rg:
rg1 = merge_regions(dat_rg[chr])
+ if groups!=None:
+ rg1 = prune_regions(groups,rg1)
if len(rg1)!=0: dat_rg1[chr] = rg1
off_hash[chr] = off
max_pos = 0
@@ -184,70 +346,61 @@ def format_coord(x, y):
off = off_list[i]
return 'chr%s:%s'%(chr,bignum(int(x - off)))
-if interactive:
- fig, ax1 = plt.subplots(1, 1, figsize=wh, num=dir)
- ax1.yaxis.set_ticks_position('none')
- ax1.format_coord = format_coord
- xtick_lbl = []
- xtick_pos = []
- for chr in dat_gt:
- off = off_hash[chr]
- xtick_lbl.append(chr)
- xtick_pos.append(off)
- icol = 0
- for smpl in dat_gt[chr]:
- y = smpl2y[smpl]
- if chr in dat_rg and smpl in dat_rg[chr]:
- for rg in dat_rg[chr][smpl]:
- rect = patches.Rectangle((rg[0]+off,3*y+0.5), rg[1]-rg[0]+1, 2, color='#dddddd')
- ax1.add_patch(rect)
- if chr in dat_rg1 and smpl in dat_rg1[chr]:
- for rg in dat_rg1[chr][smpl]:
- rect = patches.Rectangle((rg[0]+off,3*y+0.5), rg[1]-rg[0]+1, 2, color='#d9534f')
- ax1.add_patch(rect)
- ax1.plot([x[0]+off for x in dat_gt[chr][smpl]],[x[1]+3*y for x in dat_gt[chr][smpl]],'.',color=cols[icol])
- icol += 1
- if icol >= len(cols): 0
- ytick_lbl = []
- ytick_pos = []
- for chr in dat_gt:
- for smpl in dat_gt[chr]:
- ytick_lbl.append(smpl)
- ytick_pos.append(3*smpl2y[smpl]+1)
- break
+
+fig, ax1 = plt.subplots(1, 1, figsize=wh, num=dir)
+ax1.yaxis.set_ticks_position('none')
+ax1.format_coord = format_coord
+xtick_lbl = []
+xtick_pos = []
+max_x = 0
+for chr in dat_gt:
+ off = off_hash[chr]
+ icol = 0
+ max = 0
+ for smpl in dat_gt[chr]:
+ y = smpl2y[smpl]
+ if chr in dat_rg and smpl in dat_rg[chr]:
+ for rg in dat_rg[chr][smpl]:
+ rect = patches.Rectangle((rg[0]+off,3*y+0.5), rg[1]-rg[0]+1, 2, color='#dddddd')
+ ax1.add_patch(rect)
+ if chr in dat_rg1 and smpl in dat_rg1[chr]:
+ for rg in dat_rg1[chr][smpl]:
+ rect = patches.Rectangle((rg[0]+off,3*y+0.5), rg[1]-rg[0]+1, 2, color='#d9534f')
+ ax1.add_patch(rect)
+ ax1.plot([x[0]+off for x in dat_gt[chr][smpl]],[x[1]+3*y for x in dat_gt[chr][smpl]],'.',color=cols[icol])
+ if max_x < dat_gt[chr][smpl][-1][0]+off: max_x = dat_gt[chr][smpl][-1][0]+off
+ if max < dat_gt[chr][smpl][-1][0]: max = dat_gt[chr][smpl][-1][0]
+ icol += 1
+ if icol >= len(cols): 0
+ xtick_lbl.append(chr)
+ xtick_pos.append(off)
+ytick_lbl = []
+ytick_pos = []
+for chr in dat_gt:
+ for smpl in dat_gt[chr]:
+ ytick_lbl.append(samples[smpl])
+ ytick_pos.append(3*smpl2y[smpl]+1)
+ break
+if xlim!=0:
+ ax1.set_xlim(0,max_x+xlim*max_x)
+lbl_pos = 3*(len(smpl2y)-1)
+ax1.annotate(' HomAlt ',xy=(max_x,lbl_pos-1),xycoords='data',va='center')
+ax1.annotate(' Het',xy=(max_x,lbl_pos-2),xycoords='data',va='center')
+if not show_xticks:
ax1.set_xticks(xtick_pos)
ax1.set_xticklabels(xtick_lbl)
- ax1.set_yticks(ytick_pos)
- ax1.set_yticklabels(ytick_lbl)
- ax1.set_ylim(0,3*len(smpl2y)+0.5)
- plt.subplots_adjust(bottom=0.18,left=0.05,right=0.98)
+if xlabel!=None:
+ ax1.set_xlabel(xlabel)
+ax1.set_yticks(ytick_pos)
+ax1.set_yticklabels(ytick_lbl)
+ax1.set_ylim(0,3*len(smpl2y)+0.5)
+plt.subplots_adjust(**adjust)
+if interactive:
plt.show()
else:
- for chr in dat_gt:
- fig, ax1 = plt.subplots(1, 1, figsize=wh)
- ax1.yaxis.set_ticks_position('none')
- ax1.format_coord = format_coord
- tick_lbl = []
- tick_pos = []
- for smpl in dat_gt[chr]:
- y = smpl2y[smpl]
- tick_lbl.append(smpl)
- tick_pos.append(3*y+1)
- if chr in dat_rg and smpl in dat_rg[chr]:
- for rg in dat_rg[chr][smpl]:
- rect = patches.Rectangle((rg[0],3*y+0.5), rg[1]-rg[0]+1, 2, color='#dddddd')
- ax1.add_patch(rect)
- if chr in dat_rg and smpl in dat_rg1[chr]:
- for rg in dat_rg1[chr][smpl]:
- rect = patches.Rectangle((rg[0],3*y+0.5), rg[1]-rg[0]+1, 2, color='#d9534f')
- ax1.add_patch(rect)
- ax1.plot([x[0] for x in dat_gt[chr][smpl]],[x[1]+3*y for x in dat_gt[chr][smpl]],'.')
- ax1.set_yticks(tick_pos)
- ax1.set_yticklabels(tick_lbl)
- ax1.set_xlabel('chr'+chr)
- ax1.set_ylim(0,3*len(smpl2y)+0.5)
- plt.subplots_adjust(bottom=0.18,left=0.1,right=0.95)
- plt.savefig('rmme-chr'+chr+'.png',dpi=150)
- plt.close()
+ files = parse_outfile(outfile)
+ for file in (parse_outfile(outfile)):
+ plt.savefig(file,dpi=dpi)
+ plt.close()
diff --git a/misc/plot-vcfstats b/misc/plot-vcfstats
index 5751baa..7172f05 100755
--- a/misc/plot-vcfstats
+++ b/misc/plot-vcfstats
@@ -861,7 +861,7 @@ sub plot_per_sample_stats
tprint $fh, "
dat = []
- with open('$img.dat', 'rb') as f:
+ with open('$img.dat', 'r') as f:
\\treader = csv.reader(f, 'tab')
\\tfor row in reader:
\\t\\tif row[0][0] != '#': dat.append(row)
@@ -1000,7 +1000,7 @@ sub plot_DP
tprint $fh, "
dat = []
- with open('$img.dat', 'rb') as f:
+ with open('$img.dat', 'r') as f:
\\treader = csv.reader(f, 'tab')
\\tfor row in reader:
\\t\\tif row[0][0] != '#': dat.append(row)
@@ -1046,7 +1046,7 @@ sub plot_hwe
dat = []
- with open('$img.dat', 'rb') as f:
+ with open('$img.dat', 'r') as f:
\\treader = csv.reader(f, 'tab')
\\tfor row in reader:
\\t\\tif row[0][0] != '#': dat.append(row)
@@ -1112,7 +1112,7 @@ sub plot_tstv_by_AF
tprint $fh, "
dat = []
- with open('$img.dat', 'rb') as f:
+ with open('$img.dat', 'r') as f:
\\treader = csv.reader(f, 'tab')
\\tfor row in reader:
\\t\\tif row[0][0] != '#': dat.append([float(x) for x in row])
@@ -1187,7 +1187,7 @@ sub plot_tstv_by_QUAL
tprint $fh, "
dat = []
- with open('$img.dat', 'rb') as f:
+ with open('$img.dat', 'r') as f:
\\treader = csv.reader(f, 'tab')
\\tfor row in reader:
\\t\\tif row[0][0] != '#': dat.append([float(x) for x in row])
@@ -1275,7 +1275,7 @@ sub plot_concordance_by_AF
tprint $fh, "
dat = []
- with open('$img.dat', 'rb') as f:
+ with open('$img.dat', 'r') as f:
\\treader = csv.reader(f, 'tab')
\\tfor row in reader:
\\t\\tif row[0][0] != '#': dat.append(row)
@@ -1347,7 +1347,7 @@ sub plot_concordance_by_sample
tprint $fh, "
dat = []
- with open('$img.dat', 'rb') as f:
+ with open('$img.dat', 'r') as f:
\\treader = csv.reader(f, 'tab')
\\tfor row in reader:
\\t\\tif row[0][0] != '#': dat.append(row)
@@ -1403,7 +1403,7 @@ sub plot_counts_by_AF_col
tprint $fh, "
dat = {}
- with open('$img.dat', 'rb') as f:
+ with open('$img.dat', 'r') as f:
\\treader = csv.reader(f, 'tab')
\\tfor row in reader:
\\t\\tif row[0][0] == '#': continue
@@ -1492,7 +1492,7 @@ sub plot_overlap_by_AF_col
dat = []
- with open('$img.dat', 'rb') as f:
+ with open('$img.dat', 'r') as f:
\\treader = csv.reader(f, 'tab')
\\tfor row in reader:
\\t\\tif row[0][0] != '#': dat.append(row)
@@ -1549,7 +1549,7 @@ sub plot_indel_distribution
tprint $fh, "
dat = []
- with open('$img.dat', 'rb') as f:
+ with open('$img.dat', 'r') as f:
\\treader = csv.reader(f, 'tab')
\\tfor row in reader:
\\t\\tif row[0][0] != '#': dat.append([float(x) for x in row])
diff --git a/plugins/GTisec.mk b/plugins/GTisec.mk
index 58d1cc7..b74f0fc 100644
--- a/plugins/GTisec.mk
+++ b/plugins/GTisec.mk
@@ -1,2 +1,2 @@
plugins/GTisec.so: plugins/GTisec.c version.h version.c
- $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(EXTRA_CPPFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ version.c $< $(LIBS)
+ $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(EXTRA_CPPFLAGS) $(LDFLAGS) -o $@ version.c $< $(LIBS)
diff --git a/plugins/GTsubset.mk b/plugins/GTsubset.mk
index 9e90936..4dcdbea 100644
--- a/plugins/GTsubset.mk
+++ b/plugins/GTsubset.mk
@@ -1,2 +1,2 @@
plugins/GTsubset.so: plugins/GTsubset.c version.h version.c
- $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(EXTRA_CPPFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ version.c $< $(LIBS)
+ $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(EXTRA_CPPFLAGS) $(LDFLAGS) -o $@ version.c $< $(LIBS)
diff --git a/plugins/ad-bias.mk b/plugins/ad-bias.mk
index b6a33a6..3597df4 100644
--- a/plugins/ad-bias.mk
+++ b/plugins/ad-bias.mk
@@ -1,2 +1,2 @@
plugins/ad-bias.so: plugins/ad-bias.c version.h version.c convert.h convert.c
- $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(EXTRA_CPPFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ convert.c version.c $< $(LIBS)
+ $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(EXTRA_CPPFLAGS) $(LDFLAGS) -o $@ convert.c version.c $< $(LIBS)
diff --git a/plugins/af-dist.mk b/plugins/af-dist.mk
index 2ee23c7..c451f21 100644
--- a/plugins/af-dist.mk
+++ b/plugins/af-dist.mk
@@ -1,2 +1,2 @@
plugins/af-dist.so: plugins/af-dist.c version.h version.c bin.h bin.c
- $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(EXTRA_CPPFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ bin.c version.c $< $(LIBS)
+ $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(EXTRA_CPPFLAGS) $(LDFLAGS) -o $@ bin.c version.c $< $(LIBS)
diff --git a/plugins/color-chrs.mk b/plugins/color-chrs.mk
index 506b99d..a6b3ba3 100644
--- a/plugins/color-chrs.mk
+++ b/plugins/color-chrs.mk
@@ -1,2 +1,2 @@
plugins/color-chrs.so: plugins/color-chrs.c version.h version.c HMM.h HMM.c
- $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(EXTRA_CPPFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ HMM.c version.c $< $(LIBS)
+ $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(EXTRA_CPPFLAGS) $(LDFLAGS) -o $@ HMM.c version.c $< $(LIBS)
diff --git a/plugins/fill-from-fasta.mk b/plugins/fill-from-fasta.mk
index 196578f..688df71 100644
--- a/plugins/fill-from-fasta.mk
+++ b/plugins/fill-from-fasta.mk
@@ -1,2 +1,2 @@
plugins/fill-from-fasta.so: plugins/fill-from-fasta.c version.h version.c filter.h filter.c
- $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(EXTRA_CPPFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ filter.c version.c $< $(LIBS)
+ $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(EXTRA_CPPFLAGS) $(LDFLAGS) -o $@ filter.c version.c $< $(LIBS)
diff --git a/plugins/fixploidy.mk b/plugins/fixploidy.mk
index c476169..300654d 100644
--- a/plugins/fixploidy.mk
+++ b/plugins/fixploidy.mk
@@ -1,2 +1,2 @@
-plugins/fixploidy.so: plugins/fixploidy.c version.h version.c ploidy.h ploidy.c
- $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(EXTRA_CPPFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ ploidy.c version.c $< $(LIBS)
+plugins/fixploidy.so: plugins/fixploidy.c version.h version.c regidx.h regidx.c ploidy.h ploidy.c
+ $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(EXTRA_CPPFLAGS) $(LDFLAGS) -o $@ ploidy.c regidx.c version.c $< $(LIBS)
diff --git a/plugins/fixref.c b/plugins/fixref.c
index 25f96e1..b745ecb 100644
--- a/plugins/fixref.c
+++ b/plugins/fixref.c
@@ -94,7 +94,7 @@
typedef struct
{
uint32_t pos;
- uint8_t ref:4, alt:4;
+ uint8_t ref;
}
marker_t;
@@ -129,7 +129,7 @@ const char *usage(void)
"About: This tool helps to determine and fix strand orientation.\n"
" Currently the following modes are recognised:\n"
" flip .. flips non-ambiguous SNPs and ignores the rest\n"
- " id .. swap REF/ALT using the ID column to determine the REF allele\n"
+ " id .. swap REF/ALT and GTs using the ID column to determine the REF allele\n"
" stats .. collect and print stats\n"
" top .. converts from Illumina TOP strand to fwd\n"
"\n"
@@ -292,12 +292,10 @@ static void dbsnp_init(args_t *args, const char *chr)
while ( bcf_sr_next_line(sr) )
{
bcf1_t *rec = bcf_sr_get_line(sr, 0);
- if ( rec->n_allele!=2 ) continue; // skip multiallelic markers
if ( rec->d.allele[0][1]!=0 || rec->d.allele[1][1]!=0 ) continue; // skip non-snps
int ref = nt2int(rec->d.allele[0][0]);
- int alt = nt2int(rec->d.allele[1][0]);
- if ( ref<0 || alt<0 ) continue; // non-[ACGT] base
+ if ( ref<0 ) continue; // non-[ACGT] base
uint32_t id = parse_rsid(rec->d.id);
if ( !id ) continue;
@@ -308,7 +306,6 @@ static void dbsnp_init(args_t *args, const char *chr)
if ( ret==0 ) continue; // skip ambiguous id
kh_val(args->i2m, k).pos = (uint32_t)rec->pos;
kh_val(args->i2m, k).ref = ref;
- kh_val(args->i2m, k).alt = alt;
}
done:
bcf_sr_destroy(sr);
@@ -316,7 +313,7 @@ done:
static bcf1_t *dbsnp_check(args_t *args, bcf1_t *rec, int ir, int ia, int ib)
{
- int k, ref,alt,pos;
+ int k, ref,pos;
uint32_t id = parse_rsid(rec->d.id);
if ( !id ) goto no_info;
@@ -332,13 +329,11 @@ static bcf1_t *dbsnp_check(args_t *args, bcf1_t *rec, int ir, int ia, int ib)
}
ref = kh_val(args->i2m, k).ref;
- alt = kh_val(args->i2m, k).alt;
-
if ( ref!=ir )
error("Reference base mismatch at %s:%d .. %c vs %c\n",bcf_seqname(args->hdr,rec),rec->pos+1,int2nt(ref),int2nt(ir));
- if ( ia==ref && ib==alt ) return rec;
- if ( ia==alt && ib==ref ) { args->nswap++; return set_ref_alt(args,rec,int2nt(ib),int2nt(ia),0); }
+ if ( ia==ref ) return rec;
+ if ( ib==ref ) { args->nswap++; return set_ref_alt(args,rec,int2nt(ib),int2nt(ia),1); }
no_info:
args->nunresolved++;
diff --git a/plugins/isecGT.mk b/plugins/isecGT.mk
new file mode 100644
index 0000000..680473d
--- /dev/null
+++ b/plugins/isecGT.mk
@@ -0,0 +1,2 @@
+plugins/isecGT.so: plugins/isecGT.c version.h version.c smpl_ilist.h
+ $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(EXTRA_CPPFLAGS) $(LDFLAGS) -o $@ smpl_ilist.c version.c $< $(LIBS)
diff --git a/plugins/prune.c b/plugins/prune.c
new file mode 100644
index 0000000..5c4f506
--- /dev/null
+++ b/plugins/prune.c
@@ -0,0 +1,292 @@
+/*
+ Copyright (C) 2017 Genome Research Ltd.
+
+ Author: Petr Danecek <pd3 at sanger.ac.uk>
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+/*
+ Prune sites by missingness, LD
+
+ See calc_ld() in vcfbuf.c for the actual LD calculation
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <getopt.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <stdint.h>
+#include <errno.h>
+#include <htslib/vcf.h>
+#include <htslib/synced_bcf_reader.h>
+#include <htslib/vcfutils.h>
+#include "bcftools.h"
+#include "vcfbuf.h"
+#include "filter.h"
+
+#define FLT_INCLUDE 1
+#define FLT_EXCLUDE 2
+
+typedef struct
+{
+ filter_t *filter;
+ char *filter_str, *af_tag;
+ int filter_logic; // one of FLT_INCLUDE/FLT_EXCLUDE (-i or -e)
+ vcfbuf_t *vcfbuf;
+ int argc, region_is_file, target_is_file, output_type, filter_r2_id, rand_missing, nsites, ld_win;
+ char **argv, *region, *target, *fname, *output_fname, *info_pos, *info_r2, *filter_r2;
+ htsFile *out_fh;
+ bcf_hdr_t *hdr;
+ bcf_srs_t *sr;
+ double max_ld;
+}
+args_t;
+
+const char *about(void)
+{
+ return "Prune sites by missingness, linkage disequilibrium\n";
+}
+
+static const char *usage_text(void)
+{
+ return
+ "\n"
+ "About: Prune sites by missingness or linkage disequilibrium.\n"
+ "\n"
+ "Usage: bcftools +prune [Options]\n"
+ "Plugin options:\n"
+ " --AF-tag STR use this tag with -n to determine allele frequency\n"
+ " -a, --annotate-info STR add INFO/STR_POS and STR_R2 annotation: an upstream site with the biggest r2 value\n"
+ " -e, --exclude EXPR exclude sites for which the expression is true\n"
+ " -f, --set-filter STR annotate FILTER column with STR instead of discarding the site\n"
+ " -i, --include EXPR include only sites for which the expression is true\n"
+ " -l, --max-LD R2 remove sites with r2 bigger than R2 within within the -w window\n"
+ " -n, --nsites-per-win N keep at most N sites in the -w window, removing sites with small AF first\n"
+ " -o, --output FILE write output to the FILE [standard output]\n"
+ " -O, --output-type b|u|z|v b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"
+ " --randomize-missing replace missing data with randomly assigned genotype based on site's allele frequency\n"
+ " -r, --regions REGION restrict to comma-separated list of regions\n"
+ " -R, --regions-file FILE restrict to regions listed in a file\n"
+ " -t, --targets REGION similar to -r but streams rather than index-jumps\n"
+ " -T, --targets-file FILE similar to -R but streams rather than index-jumps\n"
+ " -w, --window INT[bp|kb] the window size of INT sites/bp/kb for the -n/-l options [100kb]\n"
+ "Examples:\n"
+ " # Discard records with r2 bigger than 0.6 in a window of 1000 sites\n"
+ " bcftools +prune -l 0.6 -w 1000 input.bcf -Ob -o output.bcf\n"
+ "\n"
+ " # Set FILTER (but do not discard) records with r2 bigger than 0.4 in the default window of 100kb\n"
+ " bcftools +prune -l 0.4 -f MAX_R2 input.bcf -Ob -o output.bcf\n"
+ "\n"
+ " # Annotate INFO field of all records with maximum r2 in a window of 1000 sites\n"
+ " bcftools +prune -l 0.6 -w 1000 -f MAX_R2 input.bcf -Ob -o output.bcf\n"
+ "\n"
+ " # Discard records with r2 bigger than 0.6, first removing records with more than 2% of genotypes missing\n"
+ " bcftools +prune -l 0.6 -e'F_MISSING>=0.02' input.bcf -Ob -o output.bcf\n"
+ "\n";
+}
+
+static void init_data(args_t *args)
+{
+ args->sr = bcf_sr_init();
+ if ( args->region )
+ {
+ args->sr->require_index = 1;
+ if ( bcf_sr_set_regions(args->sr, args->region, args->region_is_file)<0 ) error("Failed to read the regions: %s\n",args->region);
+ }
+ if ( args->target && bcf_sr_set_targets(args->sr, args->target, args->target_is_file, 0)<0 ) error("Failed to read the targets: %s\n",args->target);
+ if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
+ args->hdr = bcf_sr_get_header(args->sr,0);
+
+ args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
+ if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
+ if ( args->filter_r2 )
+ {
+ bcf_hdr_printf(args->hdr,"##FILTER=<ID=%s,Description=\"A site with r2>%e upstream within %d%s\">",args->filter_r2,args->max_ld,
+ args->ld_win < 0 ? -args->ld_win/1000 : args->ld_win,
+ args->ld_win < 0 ? "kb" : " sites");
+ }
+ if ( args->info_r2 )
+ {
+ bcf_hdr_printf(args->hdr,"##INFO=<ID=%s,Number=1,Type=Integer,Description=\"A site with r2>%e upstream\">",args->info_pos,args->max_ld);
+ bcf_hdr_printf(args->hdr,"##INFO=<ID=%s,Number=1,Type=Float,Description=\"A site with r2>%e upstream\">",args->info_r2,args->max_ld);
+ }
+ bcf_hdr_write(args->out_fh, args->hdr);
+ if ( args->filter_r2 )
+ args->filter_r2_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, args->filter_r2);
+
+ args->vcfbuf = vcfbuf_init(args->hdr, args->ld_win);
+ vcfbuf_set_opt(args->vcfbuf,double,VCFBUF_LD_MAX,args->max_ld);
+ if ( args->nsites ) vcfbuf_set_opt(args->vcfbuf,int,VCFBUF_NSITES,args->nsites);
+ if ( args->af_tag ) vcfbuf_set_opt(args->vcfbuf,char*,VCFBUF_AF_TAG,args->af_tag);
+ if ( args->rand_missing ) vcfbuf_set_opt(args->vcfbuf,int,VCFBUF_RAND_MISSING,1);
+ vcfbuf_set_opt(args->vcfbuf,int,VCFBUF_SKIP_FILTER,args->filter_r2 ? 1 : 0);
+
+ if ( args->filter_str )
+ args->filter = filter_init(args->hdr, args->filter_str);
+}
+static void destroy_data(args_t *args)
+{
+ if ( args->filter )
+ filter_destroy(args->filter);
+ hts_close(args->out_fh);
+ vcfbuf_destroy(args->vcfbuf);
+ bcf_sr_destroy(args->sr);
+ free(args->info_pos);
+ free(args->info_r2);
+ free(args);
+}
+static void flush(args_t *args, int flush_all)
+{
+ bcf1_t *rec;
+ while ( (rec = vcfbuf_flush(args->vcfbuf, flush_all)) )
+ bcf_write1(args->out_fh, args->hdr, rec);
+}
+static void process(args_t *args)
+{
+ bcf1_t *rec = bcf_sr_get_line(args->sr,0);
+ if ( args->filter )
+ {
+ int ret = filter_test(args->filter, rec, NULL);
+ if ( args->filter_logic==FLT_INCLUDE ) { if ( !ret ) return; }
+ else if ( ret ) return;
+ }
+ bcf_sr_t *sr = bcf_sr_get_reader(args->sr, 0);
+ if ( args->max_ld )
+ {
+ double ld_val;
+ bcf1_t *ld_rec = vcfbuf_max_ld(args->vcfbuf, rec, &ld_val);
+ if ( ld_rec && ld_val > args->max_ld )
+ {
+ if ( !args->filter_r2 ) return;
+ bcf_add_filter(args->hdr, rec, args->filter_r2_id);
+ }
+ if ( ld_rec && args->info_r2 )
+ {
+ float tmp = ld_val;
+ bcf_update_info_float(args->hdr, rec, args->info_r2, &tmp, 1);
+ bcf_update_info_int32(args->hdr, rec, args->info_pos, &ld_rec->pos, 1);
+ }
+ }
+ sr->buffer[0] = vcfbuf_push(args->vcfbuf, rec, 1);
+ flush(args,0);
+}
+
+int run(int argc, char **argv)
+{
+ args_t *args = (args_t*) calloc(1,sizeof(args_t));
+ args->argc = argc; args->argv = argv;
+ args->output_type = FT_VCF;
+ args->output_fname = "-";
+ args->ld_win = -100e3;
+ static struct option loptions[] =
+ {
+ {"randomize-missing",no_argument,NULL,1},
+ {"AF-tag",required_argument,NULL,2},
+ {"exclude",required_argument,NULL,'e'},
+ {"include",required_argument,NULL,'i'},
+ {"annotate-info",required_argument,NULL,'a'},
+ {"set-filter",required_argument,NULL,'f'},
+ {"max-LD",required_argument,NULL,'l'},
+ {"regions",required_argument,NULL,'r'},
+ {"regions-file",required_argument,NULL,'R'},
+ {"output",required_argument,NULL,'o'},
+ {"output-type",required_argument,NULL,'O'},
+ {"nsites-per-win",required_argument,NULL,'n'},
+ {"window",required_argument,NULL,'w'},
+ {NULL,0,NULL,0}
+ };
+ int c;
+ char *tmp;
+ while ((c = getopt_long(argc, argv, "vr:R:t:T:l:o:O:a:f:i:e:n:w:",loptions,NULL)) >= 0)
+ {
+ switch (c)
+ {
+ case 1 : args->rand_missing = 1; break;
+ case 2 : args->af_tag = optarg; break;
+ case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
+ case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
+ case 'a':
+ {
+ int l = strlen(optarg);
+ args->info_pos = (char*)malloc(l+5);
+ args->info_r2 = (char*)malloc(l+5);
+ sprintf(args->info_pos,"%s_POS", optarg);
+ sprintf(args->info_r2,"%s_R2", optarg);
+ }
+ break;
+ case 'f': args->filter_r2 = optarg; break;
+ case 'n':
+ args->nsites = strtod(optarg,&tmp);
+ if ( tmp==optarg || *tmp ) error("Could not parse: --nsites-per-win %s\n", optarg);
+ break;
+ case 'l':
+ args->max_ld = strtod(optarg,&tmp);
+ if ( tmp==optarg || *tmp ) error("Could not parse: --max-LD %s\n", optarg);
+ break;
+ case 'w':
+ args->ld_win = strtod(optarg,&tmp);
+ if ( !*tmp ) break;
+ if ( tmp==optarg ) error("Could not parse: --window %s\n", optarg);
+ else if ( !strcasecmp("bp",tmp) ) args->ld_win *= -1;
+ else if ( !strcasecmp("kb",tmp) ) args->ld_win *= -1000;
+ else error("Could not parse: --window %s\n", optarg);
+ break;
+ case 'T': args->target_is_file = 1;
+ case 't': args->target = optarg; break;
+ case 'R': args->region_is_file = 1;
+ case 'r': args->region = optarg; break;
+ case 'o': args->output_fname = optarg; break;
+ case 'O':
+ switch (optarg[0]) {
+ case 'b': args->output_type = FT_BCF_GZ; break;
+ case 'u': args->output_type = FT_BCF; break;
+ case 'z': args->output_type = FT_VCF_GZ; break;
+ case 'v': args->output_type = FT_VCF; break;
+ default: error("The output type \"%s\" not recognised\n", optarg);
+ }
+ break;
+ case 'h':
+ case '?':
+ default: error("%s", usage_text()); break;
+ }
+ }
+ if ( args->filter_logic == (FLT_EXCLUDE|FLT_INCLUDE) ) error("Only one of -i or -e can be given.\n");
+ if ( !args->max_ld && !args->nsites ) error("%sError: Expected --max-LD, --nsites-per-win or both\n\n", usage_text());
+
+ if ( optind==argc )
+ {
+ if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin
+ else { error(usage_text()); }
+ }
+ else if ( optind+1!=argc ) error(usage_text());
+ else args->fname = argv[optind];
+
+ init_data(args);
+
+ while ( bcf_sr_next_line(args->sr) ) process(args);
+ flush(args,1);
+
+ destroy_data(args);
+ return 0;
+}
+
+
diff --git a/plugins/setGT.mk b/plugins/setGT.mk
index bb61b20..75afe51 100644
--- a/plugins/setGT.mk
+++ b/plugins/setGT.mk
@@ -1,2 +1,2 @@
plugins/setGT.so: plugins/setGT.c version.h version.c filter.h filter.c
- $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(EXTRA_CPPFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ filter.c version.c $< $(LIBS)
+ $(CC) $(PLUGIN_FLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(EXTRA_CPPFLAGS) $(LDFLAGS) -o $@ filter.c version.c $< $(LIBS)
diff --git a/rbuf.h b/rbuf.h
index 3d2805c..2c0e5b1 100644
--- a/rbuf.h
+++ b/rbuf.h
@@ -46,11 +46,16 @@ static inline void rbuf_init(rbuf_t *rbuf, int size)
/**
* rbuf_kth() - get index of the k-th element of the round buffer
* @rbuf: the rbuf_t holder
- * @k: 0-based index
+ * @k: 0-based index. If negative, return k-th element from the end, 1-based
*/
static inline int rbuf_kth(rbuf_t *rbuf, int k)
{
- if ( k >= rbuf->n || k<0 ) return -1;
+ if ( k >= rbuf->n ) return -1;
+ if ( k < 0 )
+ {
+ k = rbuf->n + k;
+ if ( k < 0 ) return -1;
+ }
int i = k + rbuf->f;
if ( i >= rbuf->m ) i -= rbuf->m;
return i;
@@ -58,9 +63,29 @@ static inline int rbuf_kth(rbuf_t *rbuf, int k)
/**
* rbuf_last() - get index of the last element of the round buffer
* @rbuf: the rbuf_t holder
+ */
+#define rbuf_last(rbuf) rbuf_kth(rbuf, -1)
+
+/**
+ * rbuf_l2ridx() - get 0-based rbuf index which corresponds to i-th linear index
+ * @rbuf: the rbuf_t holder
+ * @idx: 0-based linear index
*
+ * Returns 0-based circular index or -1 if out of bounds
*/
-#define rbuf_last(rbuf) rbuf_kth(rbuf, (rbuf)->n - 1)
+static inline int rbuf_l2ridx(rbuf_t *rbuf, int idx)
+{
+ if ( idx < 0 || idx >= rbuf->n ) return -1;
+ if ( idx >= rbuf->f )
+ {
+ int i = idx - rbuf->f;
+ if ( i >= rbuf->n ) return -1;
+ return i;
+ }
+ int i = rbuf->m - rbuf->f + idx;
+ if ( i >= rbuf->n ) return -1;
+ return i;
+}
/**
* rbuf_next() - get index of the next element in the round buffer
@@ -198,4 +223,39 @@ static inline void rbuf_shift_n(rbuf_t *rbuf, int n)
} \
}
+/**
+ * rbuf_remove_kth() - remove k-th rbuf element (0-based) and memmove the data block
+ * @rbuf: the rbuf holder
+ * @type_t: data type
+ * @k: k-th element to remove
+ * @data: data array to be modified
+ */
+#define rbuf_remove_kth(rbuf, type_t, kth, data) \
+{ \
+ int k = rbuf_kth(rbuf, kth); \
+ if ( k < (rbuf)->f ) /* shrink from back */ \
+ { \
+ int l = rbuf_kth(rbuf, -1); \
+ if ( k < l ) \
+ { \
+ type_t tmp = (data)[k]; \
+ memmove(data+k, data+k+1, (l - k)*sizeof(type_t)); \
+ (data)[l] = tmp; \
+ } \
+ (rbuf)->n--; \
+ } \
+ else /* shrink from front */ \
+ { \
+ if ( k > (rbuf)->f ) \
+ { \
+ type_t tmp = (data)[k]; \
+ memmove(&data[(rbuf)->f+1], &data[(rbuf)->f], (k - (rbuf)->f)*sizeof(type_t)); \
+ (data)[(rbuf)->f] = tmp; \
+ } \
+ (rbuf)->f++; \
+ (rbuf)->n--; \
+ if ( (rbuf)->f == (rbuf)->m ) (rbuf)->f = 0; \
+ } \
+}
+
#endif
diff --git a/test/create-bam-test b/test/create-bam-test
new file mode 100755
index 0000000..f2fe81b
--- /dev/null
+++ b/test/create-bam-test
@@ -0,0 +1,99 @@
+#!/usr/bin/env perl
+#
+# Author: petr.danecek at sanger
+#
+
+use strict;
+use warnings;
+use Carp;
+
+my $opts = parse_params();
+create_test($opts);
+
+exit;
+
+#--------------------------------
+
+sub error
+{
+ my (@msg) = @_;
+ if ( scalar @msg ) { confess @msg; }
+ print
+ "Usage: create-bam-test [OPTIONS]\n",
+ "Options:\n",
+ " -b, --bam <file.bam> \n",
+ " -f, --fa-ref <ref.fa> \n",
+ " -o, --output-prefix <string> \n",
+ " -r, --region <region> \n",
+ " -h, -?, --help This help message.\n",
+ "\n";
+ exit -1;
+}
+sub parse_params
+{
+ my $opts = {};
+ while (defined(my $arg=shift(@ARGV)))
+ {
+ if ( $arg eq '-b' || $arg eq '--bam' ) { $$opts{bam}=shift(@ARGV); next }
+ if ( $arg eq '-f' || $arg eq '--fa-ref' ) { $$opts{ref}=shift(@ARGV); next }
+ if ( $arg eq '-o' || $arg eq '--output-prefix' ) { $$opts{out}=shift(@ARGV); next }
+ if ( $arg eq '-r' || $arg eq '--region' ) { $$opts{region}=shift(@ARGV); next }
+ if ( $arg eq '-?' || $arg eq '-h' || $arg eq '--help' ) { error(); }
+ error("Unknown parameter \"$arg\". Run -h for help.\n");
+ }
+ if ( !exists($$opts{bam}) ) { error("Missing the -b option.\n") }
+ if ( !exists($$opts{ref}) ) { error("Missing the -f option.\n") }
+ if ( !exists($$opts{out}) ) { error("Missing the -o option.\n") }
+ if ( !exists($$opts{region}) ) { error("Missing the -r option.\n") }
+ return $opts;
+}
+sub create_test
+{
+ my ($opts) = @_;
+ if ( !($$opts{region}=~/^([^:]+):(\d+)-(\d+)$/) ) { error("Could not parse the region: $$opts{region}"); }
+ my $chr = $1;
+ my $beg = $2;
+ my $end = $3;
+ my $ori_beg = $beg;
+ my $ori_end = $end;
+ my @reads = ();
+ my $cmd = "samtools view -h $$opts{bam} $$opts{region}";
+ open(my $out,'>',"$$opts{out}.sam") or error("$$opts{out}.sam: $!");
+ open(my $fh,"$cmd |") or error("$cmd: $!");
+ while (my $line=<$fh>)
+ {
+ my @vals = split(/\t/,$line);
+ if ( $vals[0] eq '@HD' ) { print $out $line; next; }
+ if ( $vals[0] =~ /^\@/ ) { next; }
+ if ( $vals[3] < $beg ) { $beg = $vals[3]; }
+ if ( $vals[7] < $beg ) { $beg = $vals[7]; }
+ if ( $vals[3] + length($vals[9]) > $end ) { $end = $vals[3] + length($vals[9]); }
+ my $i;
+ for ($i=0; $i<@vals; $i++) { if ($vals[$i]=~/^RG:Z:/) { last; } }
+ if ( $i!=@vals ) { splice(@vals,$i,1); }
+ chomp($vals[-1]);
+ push @reads, \@vals;
+ }
+ close($fh) or error("close failed: $cmd");
+
+ print $out "\@SQ\tSN:$chr\tLN:".($end-$beg+1)."\n";
+ print $out "\@RG\tID:rg\tSM:sample\n";
+
+ for my $read (@reads)
+ {
+ $$read[3] -= $beg - 1;
+ $$read[7] -= $beg - 1;
+ print $out join("\t",@$read,"RG:Z:rg")."\n";
+ }
+ close($out) or error("close failed: $$opts{out}.sam");
+
+ `samtools view -b $$opts{out}.sam -o $$opts{out}.bam`;
+ `samtools index $$opts{out}.bam`;
+ `samtools faidx $$opts{ref} $chr:$beg-$end | sed 's,:, ,' > $$opts{out}.fa`;
+ `samtools faidx $$opts{out}.fa`;
+
+ $ori_beg -= $beg - 1;
+ $ori_end -= $beg - 1;
+ print "$chr:$ori_beg-$ori_end\n";
+}
+
diff --git a/test/fixref.2.out b/test/fixref.2.out
new file mode 100644
index 0000000..08762cb
--- /dev/null
+++ b/test/fixref.2.out
@@ -0,0 +1,11 @@
+##fileformat=VCFv4.2
+##FILTER=<ID=PASS,Description="All filters passed">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##contig=<ID=1,length=2147483647>
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT XY00001
+1 1 rs1 C T . . . GT 0/1
+1 2 rs2 T A . . . GT 0/1
+1 3 rs3 A T . . . GT 0/1
+1 4 rs4 A T . . . GT 0/1
+1 5 rs5 C T . . . GT 0/1
+1 6 rs6 C T . . . GT 0/1
diff --git a/test/fixref.2a.vcf b/test/fixref.2a.vcf
new file mode 100644
index 0000000..313c668
--- /dev/null
+++ b/test/fixref.2a.vcf
@@ -0,0 +1,10 @@
+##fileformat=VCFv4.2
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##contig=<ID=1,length=2147483647>
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT XY00001
+1 1 rs1 C T . . . GT 0/1
+1 2 rs2 A T . . . GT 1/0
+1 3 rs3 A T . . . GT 0/1
+1 4 rs4 T A . . . GT 1/0
+1 5 rs5 C T . . . GT 0/1
+1 6 rs6 T C . . . GT 1/0
diff --git a/test/fixref.2b.vcf b/test/fixref.2b.vcf
new file mode 100644
index 0000000..4a346a5
--- /dev/null
+++ b/test/fixref.2b.vcf
@@ -0,0 +1,10 @@
+##fileformat=VCFv4.2
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##contig=<ID=1,length=2147483647>
+#CHROM POS ID REF ALT QUAL FILTER INFO
+1 1 rs1 C T . . .
+1 2 rs2 T G . . .
+1 3 rs3 A T,C . . .
+1 4 rs4 A T,C . . .
+1 5 rs5 C A,T . . .
+1 6 rs6 C A,T . . .
diff --git a/test/merge.gvcf.3.a.vcf b/test/merge.gvcf.3.a.vcf
new file mode 100644
index 0000000..9c97c17
--- /dev/null
+++ b/test/merge.gvcf.3.a.vcf
@@ -0,0 +1,8 @@
+##fileformat=VCFv4.2
+##contig=<ID=A>
+##contig=<ID=B>
+##INFO=<ID=END,Number=1,Type=Integer,Description="End position of the variant described in this record">
+##INFO=<ID=SRC,Number=.,Type=String,Description="Source file">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT sample1
+B 1 . G . 1 . END=2;SRC=file1 GT 0/0
diff --git a/test/merge.gvcf.3.b.vcf b/test/merge.gvcf.3.b.vcf
new file mode 100644
index 0000000..3773bca
--- /dev/null
+++ b/test/merge.gvcf.3.b.vcf
@@ -0,0 +1,10 @@
+##fileformat=VCFv4.2
+##contig=<ID=A>
+##contig=<ID=B>
+##INFO=<ID=END,Number=1,Type=Integer,Description="End position of the variant described in this record">
+##INFO=<ID=SRC,Number=.,Type=String,Description="Source file">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT sample2
+A 1 . G C 1 . SRC=file2 GT 1/1
+B 1 . G C 2 . SRC=file2 GT 1/1
+B 2 . A C 2 . SRC=file2 GT 1/1
diff --git a/test/merge.gvcf.3.out b/test/merge.gvcf.3.out
new file mode 100644
index 0000000..6201839
--- /dev/null
+++ b/test/merge.gvcf.3.out
@@ -0,0 +1,11 @@
+##fileformat=VCFv4.2
+##FILTER=<ID=PASS,Description="All filters passed">
+##contig=<ID=A>
+##contig=<ID=B>
+##INFO=<ID=END,Number=1,Type=Integer,Description="End position of the variant described in this record">
+##INFO=<ID=SRC,Number=.,Type=String,Description="Source file">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT sample1 sample2
+B 1 . G C 2 . SRC=file1,file2 GT 0/0 1/1
+B 2 . A C 2 . SRC=file1,file2 GT 0/0 1/1
+A 1 . G C 1 . SRC=file2 GT ./. 1/1
diff --git a/test/mpileup/indel-AD.1.bam b/test/mpileup/indel-AD.1.bam
new file mode 100644
index 0000000..4b6fe57
Binary files /dev/null and b/test/mpileup/indel-AD.1.bam differ
diff --git a/test/mpileup/indel-AD.1.cram b/test/mpileup/indel-AD.1.cram
new file mode 100644
index 0000000..0fdd991
Binary files /dev/null and b/test/mpileup/indel-AD.1.cram differ
diff --git a/test/mpileup/indel-AD.1.fa b/test/mpileup/indel-AD.1.fa
new file mode 100644
index 0000000..9188e9e
--- /dev/null
+++ b/test/mpileup/indel-AD.1.fa
@@ -0,0 +1,13 @@
+>000000F 57093-57778
+CAGACAAACATACACCATCAGACAGCAGCACCATATTCTTTTTTTCTGCTAATTTGCTAA
+TTACACAAACACAGACACTAAGAAATATTCTTCCCCTTTGGAAAATGTTTTCCACATTGA
+ATCATGGTTGATTTCATTCATATTTTTTACGCTAATTAAAAAAATAAAGACTCTTTCATG
+TGAAAACAGAGCTTCACAAAGTACTCTCATTCTCACCGCTAGCAGGCTGACAATCAGCAG
+CAGACAGAGCATGATGTGTCTGATGGTCTGGTTGTCATCTGTCTGGGATTGAAGGCCAGG
+TGGCGGCAGATCTAATGGCTGCTCAGGAGGCAGAAGAACTCTGTTGCTGCCCATCACACA
+GCGCCCCACTGTGGTCTGAAGTAAAAAAGTTCATGTACTCGCATGAGAGTTATGTGTAAA
+ACAGAGCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTG
+TTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACTG
+GTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAG
+TTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAT
+ACAAATTACATCTAGATATTTGTTAT
diff --git a/test/mpileup/indel-AD.1.fa.fai b/test/mpileup/indel-AD.1.fa.fai
new file mode 100644
index 0000000..d6bd5ca
--- /dev/null
+++ b/test/mpileup/indel-AD.1.fa.fai
@@ -0,0 +1 @@
+000000F 686 21 60 61
diff --git a/test/mpileup/indel-AD.1.out b/test/mpileup/indel-AD.1.out
new file mode 100644
index 0000000..05a6f90
--- /dev/null
+++ b/test/mpileup/indel-AD.1.out
@@ -0,0 +1,323 @@
+##fileformat=VCFv4.2
+##FILTER=<ID=PASS,Description="All filters passed">
+##contig=<ID=000000F,length=686>
+##ALT=<ID=*,Description="Represents allele(s) other than observed.">
+##INFO=<ID=INDEL,Number=0,Type=Flag,Description="Indicates that the variant is an INDEL.">
+##INFO=<ID=IDV,Number=1,Type=Integer,Description="Maximum number of reads supporting an indel">
+##INFO=<ID=IMF,Number=1,Type=Float,Description="Maximum fraction of reads supporting an indel">
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Raw read depth">
+##INFO=<ID=VDB,Number=1,Type=Float,Description="Variant Distance Bias for filtering splice-site artefacts in RNA-seq data (bigger is better)",Version="3">
+##INFO=<ID=RPB,Number=1,Type=Float,Description="Mann-Whitney U test of Read Position Bias (bigger is better)">
+##INFO=<ID=MQB,Number=1,Type=Float,Description="Mann-Whitney U test of Mapping Quality Bias (bigger is better)">
+##INFO=<ID=BQB,Number=1,Type=Float,Description="Mann-Whitney U test of Base Quality Bias (bigger is better)">
+##INFO=<ID=MQSB,Number=1,Type=Float,Description="Mann-Whitney U test of Mapping Quality vs Strand Bias (bigger is better)">
+##INFO=<ID=SGB,Number=1,Type=Float,Description="Segregation based metric.">
+##INFO=<ID=MQ0F,Number=1,Type=Float,Description="Fraction of MQ0 reads (smaller is better)">
+##INFO=<ID=I16,Number=16,Type=Float,Description="Auxiliary tag used for calling, see description of bcf_callret1_t in bam2bcf.h">
+##INFO=<ID=QS,Number=R,Type=Float,Description="Auxiliary tag used for calling">
+##FORMAT=<ID=PL,Number=G,Type=Integer,Description="List of Phred-scaled genotype likelihoods">
+##FORMAT=<ID=AD,Number=R,Type=Integer,Description="Allelic depths">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT sample
+000000F 392 . C <*> 0 . DP=1;I16=1,0,0,0,32,1024,0,0,60,3600,0,0,0,0,0,0;QS=1,0;MQ0F=0 PL:AD 0,3,32:1,0
+000000F 393 . A <*> 0 . DP=1;I16=1,0,0,0,32,1024,0,0,60,3600,0,0,1,1,0,0;QS=1,0;MQ0F=0 PL:AD 0,3,32:1,0
+000000F 394 . T <*> 0 . DP=1;I16=1,0,0,0,32,1024,0,0,60,3600,0,0,2,4,0,0;QS=1,0;MQ0F=0 PL:AD 0,3,32:1,0
+000000F 395 . G <*> 0 . DP=3;I16=1,1,0,0,64,2098,0,0,120,7200,0,0,3,9,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,6,64:2,0
+000000F 396 . T <*> 0 . DP=3;I16=1,1,0,0,74,2738,0,0,120,7200,0,0,5,17,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,6,74:2,0
+000000F 397 . A <*> 0 . DP=3;I16=1,1,0,0,68,2410,0,0,120,7200,0,0,7,29,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,6,68:2,0
+000000F 398 . C <*> 0 . DP=3;I16=1,1,0,0,63,2165,0,0,120,7200,0,0,9,45,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,6,63:2,0
+000000F 399 . T <*> 0 . DP=3;I16=1,2,0,0,86,2582,0,0,180,10800,0,0,15,81,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,9,82:3,0
+000000F 400 . C <*> 0 . DP=3;I16=1,1,0,0,63,2165,0,0,120,7200,0,0,13,89,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,6,63:2,0
+000000F 401 . G <*> 0 . DP=3;I16=1,0,0,0,41,1681,0,0,60,3600,0,0,9,81,0,0;QS=1,0;MQ0F=0 PL:AD 0,3,41:1,0
+000000F 402 . C <*> 0 . DP=5;I16=1,1,0,0,59,1753,0,0,120,7200,0,0,17,149,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,6,59:2,0
+000000F 403 . A <*> 0 . DP=5;I16=1,2,0,0,85,2649,0,0,180,10800,0,0,20,186,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,9,81:3,0
+000000F 404 . T <*> 0 . DP=5;I16=2,1,0,0,117,4587,0,0,180,10800,0,0,23,229,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,9,110:3,0
+000000F 405 . G <*> 0 . DP=6;I16=3,1,0,0,151,5755,0,0,240,14400,0,0,26,278,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,12,133:4,0
+000000F 406 . A <*> 0 . DP=6;I16=2,1,0,0,119,4731,0,0,180,10800,0,0,29,333,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,9,112:3,0
+000000F 407 . G <*> 0 . DP=6;I16=2,2,0,0,146,5460,0,0,240,14400,0,0,37,419,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,12,134:4,0
+000000F 408 . A <*> 0 . DP=6;I16=2,1,0,0,114,4386,0,0,180,10800,0,0,35,461,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,9,107:3,0
+000000F 409 . G <*> 0 . DP=6;I16=3,2,0,0,182,6796,0,0,300,18000,0,0,49,599,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,15,159:5,0
+000000F 410 . T <*> 0 . DP=7;I16=3,1,0,0,127,4263,0,0,240,14400,0,0,46,638,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,12,114:4,0
+000000F 411 . T <*> 0 . DP=8;I16=5,2,0,0,243,8757,0,0,420,25200,0,0,99,1615,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,21,188:7,0
+000000F 412 . A <*> 0 . DP=8;I16=5,1,0,0,223,8577,0,0,360,21600,0,0,96,1720,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,18,172:6,0
+000000F 413 . T <*> 0 . DP=9;I16=5,2,0,0,264,10258,0,0,420,25200,0,0,113,2039,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,21,201:7,0
+000000F 414 . G <*> 0 . DP=9;I16=5,3,0,0,305,11939,0,0,480,28800,0,0,121,2273,0,0;QS=1,0;MQSB=0.900802;MQ0F=0 PL:AD 0,24,230:8,0
+000000F 415 . T G,<*> 0 . DP=9;I16=5,3,0,1,291,10937,22,484,480,28800,60,3600,136,2754,13,169;QS=0.929712,0.0702875,0;SGB=-0.379885;RPB=1;MQB=1;MQSB=0.974597;BQB=1;MQ0F=0 PL:AD 0,5,202,24,205,214:8,1,0
+000000F 416 . G <*> 0 . DP=10;I16=6,3,0,0,324,11944,0,0,540,32400,0,0,144,3034,0,0;QS=1,0;MQSB=0.924584;MQ0F=0 PL:AD 0,27,235:9,0
+000000F 417 . T <*> 0 . DP=10;I16=6,3,0,0,352,13848,0,0,540,32400,0,0,151,3229,0,0;QS=1,0;MQSB=0.924584;MQ0F=0 PL:AD 0,27,251:9,0
+000000F 418 . A <*> 0 . DP=10;I16=6,3,0,0,348,13536,0,0,540,32400,0,0,157,3387,0,0;QS=1,0;MQSB=0.924584;MQ0F=0 PL:AD 0,27,248:9,0
+000000F 419 . A <*> 0 . DP=10;I16=6,2,0,0,320,12824,0,0,480,28800,0,0,139,2981,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,24,228:8,0
+000000F 420 . A <*> 0 . DP=11;I16=5,2,0,0,279,11143,0,0,420,25200,0,0,129,2889,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,21,212:7,0
+000000F 421 . A <*> 0 . DP=12;I16=7,4,0,0,382,13914,0,0,660,39600,0,0,214,4676,0,0;QS=1,0;MQSB=0.964642;MQ0F=0 PL:AD 0,33,255:11,0
+000000F 422 . C <*> 0 . DP=13;I16=8,5,0,0,489,18651,0,0,780,46800,0,0,243,5389,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,39,255:13,0
+000000F 423 . A <*> 0 . DP=15;I16=9,5,0,0,497,18435,0,0,840,50400,0,0,241,5233,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,42,255:14,0
+000000F 424 . G <*> 0 . DP=15;I16=9,4,0,0,492,19080,0,0,780,46800,0,0,240,5404,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,39,255:13,0
+000000F 425 . A <*> 0 . DP=15;I16=8,4,0,0,480,19236,0,0,720,43200,0,0,238,5422,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,36,255:12,0
+000000F 426 . G <*> 0 . DP=15;I16=9,4,0,0,507,19965,0,0,780,46800,0,0,264,5994,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,39,255:13,0
+000000F 427 . C <*> 0 . DP=15;I16=9,5,0,0,538,20956,0,0,840,50400,0,0,275,6203,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,42,255:14,0
+000000F 428 . T <*> 0 . DP=15;I16=9,5,0,0,509,19219,0,0,840,50400,0,0,281,6359,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,42,255:14,0
+000000F 429 . C <*> 0 . DP=17;I16=9,5,0,0,509,19219,0,0,840,50400,0,0,238,5326,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,42,255:14,0
+000000F 430 . A <*> 0 . DP=18;I16=10,5,0,0,547,20371,0,0,900,54000,0,0,294,6708,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,45,255:15,0
+000000F 431 . A <*> 0 . DP=19;I16=9,6,0,0,580,22580,0,0,900,54000,0,0,276,6228,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,45,255:15,0
+000000F 432 . T <*> 0 . DP=19;I16=10,7,0,0,658,25976,0,0,1020,61200,0,0,302,6922,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,51,255:17,0
+000000F 433 . T <*> 0 . DP=19;I16=10,8,0,0,684,26308,0,0,1080,64800,0,0,321,7205,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,54,255:18,0
+000000F 434 . T <*> 0 . DP=19;I16=10,7,0,0,654,25440,0,0,1020,61200,0,0,304,6730,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,51,255:17,0
+000000F 435 . T <*> 0 . DP=20;I16=11,8,0,0,705,26787,0,0,1140,68400,0,0,337,7521,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,57,255:19,0
+000000F 436 . A <*> 0 . DP=21;I16=11,7,0,0,704,27746,0,0,1080,64800,0,0,332,7508,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,54,255:18,0
+000000F 437 . T <*> 0 . DP=21;I16=11,8,0,0,746,29410,0,0,1140,68400,0,0,341,7681,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,57,255:19,0
+000000F 438 . T <*> 0 . DP=22;I16=9,10,0,0,702,26688,0,0,1140,68400,0,0,341,7503,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,57,255:19,0
+000000F 439 . T <*> 0 . DP=25;I16=11,10,0,0,779,29805,0,0,1260,75600,0,0,400,8944,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,63,255:21,0
+000000F 440 . T <*> 0 . DP=27;I16=12,11,0,0,872,33646,0,0,1380,82800,0,0,385,8529,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,69,255:23,0
+000000F 441 . G <*> 0 . DP=29;I16=17,11,0,0,1042,39830,0,0,1680,100800,0,0,495,11163,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,84,255:28,0
+000000F 442 . T <*> 0 . DP=29;I16=17,10,0,0,1043,40935,0,0,1620,97200,0,0,508,11542,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,81,255:27,0
+000000F 443 . A <*> 0 . DP=31;I16=18,9,0,0,1030,39986,0,0,1620,97200,0,0,516,11736,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,81,255:27,0
+000000F 444 . T <*> 0 . DP=31;I16=18,10,0,0,1088,42568,0,0,1680,100800,0,0,511,11419,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,84,255:28,0
+000000F 445 . T <*> 0 . DP=32;I16=18,9,0,0,1002,38232,0,0,1620,97200,0,0,499,11079,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,81,255:27,0
+000000F 446 . T <*> 0 . DP=34;I16=21,11,0,0,1200,45896,0,0,1920,115200,0,0,588,13174,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,96,255:32,0
+000000F 447 . A <*> 0 . DP=35;I16=21,10,0,0,1138,42818,0,0,1860,111600,0,0,612,13954,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,93,255:31,0
+000000F 448 . T <*> 0 . DP=35;I16=21,11,0,0,1191,45423,0,0,1920,115200,0,0,593,13211,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,96,255:32,0
+000000F 448 . TTGTG TTG 0 . INDEL;IDV=1;IMF=0.0285714;DP=35;I16=22,12,1,0,1863,108589,25,625,2040,122400,60,3600,642,14412,25,625;QS=0.986688,0.013312;VDB=4.51802e-08;SGB=-0.379885;MQSB=1;MQ0F=0 PL:AD 0,80,255:34,1
+000000F 449 . T <*> 0 . DP=35;I16=20,12,0,0,1226,47486,0,0,1920,115200,0,0,607,13511,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,96,255:32,0
+000000F 450 . G <*> 0 . DP=38;I16=25,13,0,0,1457,57045,0,0,2280,136800,0,0,715,16059,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,114,255:38,0
+000000F 451 . T <*> 0 . DP=43;I16=25,14,0,0,1491,58519,0,0,2340,140400,0,0,708,15882,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,117,255:39,0
+000000F 452 . G <*> 0 . DP=45;I16=26,14,0,0,1555,62549,0,0,2400,144000,0,0,731,16465,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,120,255:40,0
+000000F 453 . C <*> 0 . DP=45;I16=25,14,0,0,1608,69148,0,0,2340,140400,0,0,731,16555,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,117,255:39,0
+000000F 454 . A <*> 0 . DP=47;I16=26,17,0,0,1722,73004,0,0,2580,154800,0,0,817,18519,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,129,255:43,0
+000000F 455 . G <*> 0 . DP=48;I16=27,17,0,0,1837,80653,0,0,2640,158400,0,0,861,19597,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,132,255:44,0
+000000F 456 . T <*> 0 . DP=49;I16=25,19,0,0,1769,75479,0,0,2640,158400,0,0,853,19595,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,132,255:44,0
+000000F 457 . T <*> 0 . DP=49;I16=28,19,0,0,1876,79136,0,0,2820,169200,0,0,905,20453,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,141,255:47,0
+000000F 458 . A <*> 0 . DP=50;I16=26,19,0,0,1833,79049,0,0,2700,162000,0,0,884,20032,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,135,255:45,0
+000000F 459 . G <*> 0 . DP=50;I16=27,19,0,0,1837,78191,0,0,2760,165600,0,0,907,20581,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,138,255:46,0
+000000F 460 . A <*> 0 . DP=49;I16=26,16,0,0,1625,66133,0,0,2520,151200,0,0,842,19170,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,126,255:42,0
+000000F 461 . A <*> 0 . DP=52;I16=26,15,0,0,1591,64163,0,0,2460,147600,0,0,854,19910,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,123,255:41,0
+000000F 462 . A <*> 0 . DP=52;I16=25,19,0,0,1675,67071,0,0,2640,158400,0,0,920,21276,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,132,255:44,0
+000000F 463 . A <*> 0 . DP=52;I16=27,19,0,0,1807,73217,0,0,2760,165600,0,0,966,22322,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,138,255:46,0
+000000F 464 . T <*> 0 . DP=52;I16=27,21,0,0,1925,81581,0,0,2880,172800,0,0,1008,23194,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,144,255:48,0
+000000F 465 . A <*> 0 . DP=52;I16=28,21,0,0,1986,84592,0,0,2940,176400,0,0,1050,24328,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,148,255:49,0
+000000F 466 . A <*> 0 . DP=52;I16=26,19,0,0,1845,79017,0,0,2700,162000,0,0,983,22855,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,135,255:45,0
+000000F 467 . T <*> 0 . DP=53;I16=27,20,0,0,1882,79994,0,0,2820,169200,0,0,1006,23366,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,141,255:47,0
+000000F 468 . A <*> 0 . DP=54;I16=27,22,0,0,1975,84097,0,0,2940,176400,0,0,1053,24625,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,148,255:49,0
+000000F 469 . T <*> 0 . DP=54;I16=28,22,0,0,2066,89308,0,0,3000,180000,0,0,1096,25728,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,151,255:50,0
+000000F 470 . G <*> 0 . DP=55;I16=29,23,0,0,2079,88043,0,0,3120,187200,0,0,1120,26266,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,157,255:52,0
+000000F 471 . A <*> 0 . DP=56;I16=30,21,0,0,2036,85916,0,0,3060,183600,0,0,1115,26553,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,154,255:51,0
+000000F 472 . T <*> 0 . DP=59;I16=31,23,0,0,2131,89565,0,0,3240,194400,0,0,1189,28251,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,163,255:54,0
+000000F 473 . C A,<*> 0 . DP=63;I16=20,13,13,10,1273,52265,962,42080,1980,118800,1380,82800,687,16149,530,12700;QS=0.570972,0.429028,0;VDB=1.06176e-06;SGB=-0.692717;RPB=0.425444;MQB=1;MQSB=1;BQB=0.246407;MQ0F=0 PL:AD 255,0,255,255,255,255:33,23,0
+000000F 474 . A <*> 0 . DP=64;I16=34,21,0,0,2149,89755,0,0,3300,198000,0,0,1209,28945,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,166,255:55,0
+000000F 475 . A <*> 0 . DP=64;I16=33,19,0,0,2024,84414,0,0,3120,187200,0,0,1133,27269,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,157,255:52,0
+000000F 476 . A <*> 0 . DP=65;I16=34,21,0,0,2141,89013,0,0,3300,198000,0,0,1176,27986,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,166,255:55,0
+000000F 477 . T <*> 0 . DP=65;I16=34,25,0,0,2360,99252,0,0,3540,212400,0,0,1299,31113,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,178,255:59,0
+000000F 478 . C <*> 0 . DP=65;I16=34,25,0,0,2372,100238,0,0,3540,212400,0,0,1299,31001,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,178,255:59,0
+000000F 479 . T <*> 0 . DP=68;I16=36,27,0,0,2503,104573,0,0,3780,226800,0,0,1376,32912,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,190,255:63,0
+000000F 480 . G <*> 0 . DP=70;I16=39,27,0,0,2597,108131,0,0,3960,237600,0,0,1456,34674,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,199,255:66,0
+000000F 481 . T <*> 0 . DP=70;I16=39,25,0,0,2517,104223,0,0,3840,230400,0,0,1422,33860,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,193,255:64,0
+000000F 482 . T <*> 0 . DP=70;I16=38,26,0,0,2583,108821,0,0,3840,230400,0,0,1443,34469,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,193,255:64,0
+000000F 483 . T <*> 0 . DP=70;I16=39,27,0,0,2666,112166,0,0,3960,237600,0,0,1499,35821,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,199,255:66,0
+000000F 484 . G <*> 0 . DP=70;I16=40,26,0,0,2675,112545,0,0,3960,237600,0,0,1528,36816,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,199,255:66,0
+000000F 485 . T <*> 0 . DP=70;I16=38,27,0,0,2626,110748,0,0,3900,234000,0,0,1504,36152,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,196,255:65,0
+000000F 486 . T <*> 0 . DP=70;I16=39,25,0,0,2585,109217,0,0,3840,230400,0,0,1489,35795,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,193,255:64,0
+000000F 487 . T <*> 0 . DP=73;I16=39,28,0,0,2690,112956,0,0,4020,241200,0,0,1508,36452,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,202,255:67,0
+000000F 488 . A <*> 0 . DP=76;I16=42,25,0,0,2612,107680,0,0,4020,241200,0,0,1566,37882,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,202,255:67,0
+000000F 489 . C <*> 0 . DP=79;I16=43,27,0,0,2682,108830,0,0,4200,252000,0,0,1613,38769,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,211,255:70,0
+000000F 490 . C <*> 0 . DP=80;I16=42,30,0,0,2771,112661,0,0,4320,259200,0,0,1678,40510,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,217,255:72,0
+000000F 491 . T <*> 0 . DP=80;I16=45,30,0,0,2918,119634,0,0,4500,270000,0,0,1744,42234,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,226,255:75,0
+000000F 492 . G <*> 0 . DP=81;I16=45,32,0,0,3134,133520,0,0,4620,277200,0,0,1811,44003,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,232,255:77,0
+000000F 493 . T <*> 0 . DP=81;I16=44,32,0,0,3015,126227,0,0,4560,273600,0,0,1779,43255,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,229,255:76,0
+000000F 494 . G <*> 0 . DP=81;I16=43,31,0,0,3069,132431,0,0,4440,266400,0,0,1762,43026,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,223,255:74,0
+000000F 495 . T <*> 0 . DP=84;I16=43,34,0,0,3069,129013,0,0,4620,277200,0,0,1802,43976,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,232,255:77,0
+000000F 496 . T <*> 0 . DP=87;I16=49,34,0,0,3284,136740,0,0,4980,298800,0,0,1908,46696,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,250,255:83,0
+000000F 497 . G <*> 0 . DP=87;I16=46,35,0,0,3310,141580,0,0,4860,291600,0,0,1877,45941,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,244,255:81,0
+000000F 498 . T <*> 0 . DP=88;I16=45,33,0,0,3059,127911,0,0,4680,280800,0,0,1814,44382,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,235,255:78,0
+000000F 499 . T <*> 0 . DP=89;I16=47,33,0,0,3204,135114,0,0,4800,288000,0,0,1874,45870,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,241,255:80,0
+000000F 500 . T <*> 0 . DP=92;I16=47,34,0,0,3312,141794,0,0,4860,291600,0,0,1870,45908,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,244,255:81,0
+000000F 501 . G <*> 0 . DP=97;I16=53,36,0,0,3549,151581,0,0,5340,320400,0,0,1977,48183,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:89,0
+000000F 502 . T <*> 0 . DP=98;I16=52,35,0,0,3431,146027,0,0,5220,313200,0,0,1960,47742,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:87,0
+000000F 503 . G <*> 0 . DP=98;I16=55,35,0,0,3594,153294,0,0,5400,324000,0,0,2061,50381,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:90,0
+000000F 504 . T <*> 0 . DP=102;I16=53,33,0,0,3445,146525,0,0,5160,309600,0,0,1995,48731,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:86,0
+000000F 505 . G <*> 0 . DP=102;I16=56,37,0,0,3686,156752,0,0,5580,334800,0,0,2099,51191,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:93,0
+000000F 506 . C <*> 0 . DP=103;I16=56,33,0,0,3643,159901,0,0,5340,320400,0,0,2012,48902,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:89,0
+000000F 507 . T <*> 0 . DP=103;I16=53,33,0,0,3484,150674,0,0,5160,309600,0,0,1995,48753,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:86,0
+000000F 508 . C <*> 0 . DP=103;I16=52,33,0,0,3445,151067,0,0,5100,306000,0,0,1960,47672,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:85,0
+000000F 509 . C <*> 0 . DP=103;I16=52,36,0,0,3574,156466,0,0,5280,316800,0,0,2036,49336,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:88,0
+000000F 510 . C A,<*> 0 . DP=106;I16=56,37,0,1,3704,159594,22,484,5580,334800,60,3600,2140,51822,25,625;QS=0.993923,0.00607735,0;SGB=-0.379885;RPB=1;MQB=1;MQSB=1;BQB=1;MQ0F=0 PL:AD 0,255,255,255,255,255:93,1,0
+000000F 511 . T <*> 0 . DP=107;I16=58,36,0,0,3696,157294,0,0,5640,338400,0,0,2174,52616,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:94,0
+000000F 512 . C A,<*> 0 . DP=107;I16=56,36,1,0,3705,161553,22,484,5520,331200,60,3600,2131,51713,25,625;QS=0.993918,0.00608239,0;SGB=-0.379885;RPB=1;MQB=1;MQSB=1;BQB=1;MQ0F=0 PL:AD 0,255,255,255,255,255:92,1,0
+000000F 513 . T <*> 0 . DP=108;I16=57,37,0,0,3791,164183,0,0,5640,338400,0,0,2178,52840,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:94,0
+000000F 514 . G <*> 0 . DP=110;I16=55,40,0,0,3787,163211,0,0,5700,342000,0,0,2230,54240,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:95,0
+000000F 515 . C <*> 0 . DP=110;I16=57,40,0,0,3864,164586,0,0,5820,349200,0,0,2235,53979,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:97,0
+000000F 516 . G <*> 0 . DP=111;I16=58,42,0,0,4020,172632,0,0,6000,360000,0,0,2328,56306,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:100,0
+000000F 517 . T <*> 0 . DP=112;I16=56,41,0,0,3850,163962,0,0,5820,349200,0,0,2278,55274,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:97,0
+000000F 518 . G <*> 0 . DP=115;I16=61,41,0,0,3988,167042,0,0,6120,367200,0,0,2360,57238,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:102,0
+000000F 519 . C <*> 0 . DP=116;I16=61,39,0,0,4039,175485,0,0,6000,360000,0,0,2295,55849,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:100,0
+000000F 520 . T G,<*> 0 . DP=116;I16=61,40,0,1,4083,176505,32,1024,6060,363600,60,3600,2305,55727,25,625;QS=0.99202,0.00798005,0;SGB=-0.379885;RPB=1;MQB=1;MQSB=1;BQB=1;MQ0F=0 PL:AD 0,255,255,255,255,255:101,1,0
+000000F 521 . G <*> 0 . DP=118;I16=61,41,0,0,4166,181354,0,0,6120,367200,0,0,2299,55471,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:102,0
+000000F 522 . G <*> 0 . DP=118;I16=63,39,0,0,4070,175132,0,0,6120,367200,0,0,2319,56007,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:102,0
+000000F 523 . C <*> 0 . DP=119;I16=64,40,0,0,4193,181777,0,0,6240,374400,0,0,2344,56492,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:104,0
+000000F 524 . T G,<*> 0 . DP=119;I16=64,44,1,0,4253,180647,27,729,6480,388800,60,3600,2460,59296,25,625;QS=0.993531,0.00646862,0;SGB=-0.379885;RPB=1;MQB=1;MQSB=1;BQB=1;MQ0F=0 PL:AD 0,255,255,255,255,255:108,1,0
+000000F 525 . A <*> 0 . DP=119;I16=63,39,0,0,4126,179608,0,0,6120,367200,0,0,2330,56198,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:102,0
+000000F 526 . T <*> 0 . DP=120;I16=62,45,0,0,4234,181460,0,0,6420,385200,0,0,2450,58910,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:107,0
+000000F 527 . C <*> 0 . DP=120;I16=64,40,0,0,4275,186993,0,0,6240,374400,0,0,2382,57234,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:104,0
+000000F 528 . A <*> 0 . DP=121;I16=62,45,0,0,4346,189994,0,0,6420,385200,0,0,2426,58030,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:107,0
+000000F 529 . T <*> 0 . DP=123;I16=64,43,0,0,4397,193617,0,0,6420,385200,0,0,2439,58361,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:107,0
+000000F 530 . G <*> 0 . DP=123;I16=66,42,0,0,4392,192268,0,0,6480,388800,0,0,2486,59400,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:108,0
+000000F 531 . T <*> 0 . DP=123;I16=60,43,0,0,4216,185698,0,0,6180,370800,0,0,2343,55757,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:103,0
+000000F 532 . C <*> 0 . DP=124;I16=65,43,0,0,4421,195151,0,0,6480,388800,0,0,2481,59517,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:108,0
+000000F 533 . A <*> 0 . DP=124;I16=63,41,0,0,4194,182396,0,0,6240,374400,0,0,2380,56934,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:104,0
+000000F 534 . G <*> 0 . DP=124;I16=64,43,0,0,4351,190917,0,0,6420,385200,0,0,2465,59239,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:107,0
+000000F 535 . G <*> 0 . DP=125;I16=67,42,0,0,4349,188647,0,0,6540,392400,0,0,2476,59300,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:109,0
+000000F 536 . T <*> 0 . DP=125;I16=61,42,0,0,4238,186282,0,0,6180,370800,0,0,2330,55772,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:103,0
+000000F 537 . A <*> 0 . DP=125;I16=63,46,0,0,4401,190703,0,0,6540,392400,0,0,2484,59546,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:109,0
+000000F 537 . AC A 0 . INDEL;IDV=60;IMF=0.48;DP=125;I16=38,30,31,26,216,1072,1929,68145,4080,244800,3420,205200,1555,37389,1281,30547;QS=0.531796,0.468204;VDB=0.0330029;SGB=-0.693147;MQSB=1;MQ0F=0 PL:AD 255,0,255:68,57
+000000F 538 . C <*> 0 . DP=65;I16=34,19,0,0,2157,94505,0,0,3180,190800,0,0,1211,29361,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,160,255:53,0
+000000F 538 . CT C 0 . INDEL;IDV=64;IMF=0.512;DP=125;I16=33,34,36,22,206,950,1952,68106,4020,241200,3480,208800,1535,36845,1305,31339;QS=0.524714,0.475286;VDB=0.0281315;SGB=-0.693147;MQSB=1;MQ0F=0 PL:AD 255,0,255:67,58
+000000F 539 . T <*> 0 . DP=60;I16=29,24,0,0,2172,96558,0,0,3180,190800,0,0,1199,28695,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,160,255:53,0
+000000F 540 . G <*> 0 . DP=124;I16=62,40,0,0,4079,174277,0,0,6120,367200,0,0,2330,56376,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:102,0
+000000F 541 . G <*> 0 . DP=124;I16=63,45,0,0,4180,177706,0,0,6480,388800,0,0,2457,59503,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:108,0
+000000F 542 . T <*> 0 . DP=124;I16=61,41,0,0,3930,162288,0,0,6120,367200,0,0,2321,56439,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:102,0
+000000F 543 . C <*> 0 . DP=122;I16=60,42,0,0,3946,163434,0,0,6120,367200,0,0,2369,57467,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:102,0
+000000F 544 . T <*> 0 . DP=121;I16=60,45,0,0,4162,176870,0,0,6300,378000,0,0,2442,59388,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:105,0
+000000F 545 . G <*> 0 . DP=121;I16=58,45,0,0,4038,169874,0,0,6180,370800,0,0,2421,59221,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:103,0
+000000F 546 . G <*> 0 . DP=121;I16=63,47,0,0,4266,177590,0,0,6600,396000,0,0,2546,61936,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:110,0
+000000F 547 . A <*> 0 . DP=119;I16=62,44,0,0,4136,173460,0,0,6360,381600,0,0,2497,60853,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:106,0
+000000F 548 . C <*> 0 . DP=119;I16=62,41,0,0,3969,162355,0,0,6180,370800,0,0,2437,59493,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:103,0
+000000F 549 . C A,<*> 0 . DP=117;I16=34,24,29,19,2184,85418,1915,83023,3480,208800,2880,172800,1363,33477,1116,26886;QS=0.538404,0.461596,0;VDB=0.30007;SGB=-0.693147;RPB=0.890173;MQB=1;MQSB=1;BQB=0.513155;MQ0F=0 PL:AD 255,0,255,255,255,255:58,48,0
+000000F 550 . G T,<*> 0 . DP=117;I16=59,45,0,1,4109,172725,22,484,6240,374400,60,3600,2419,58857,25,625;QS=0.994559,0.0054415,0;SGB=-0.379885;RPB=1;MQB=1;MQSB=1;BQB=1;MQ0F=0 PL:AD 0,255,255,255,255,255:104,1,0
+000000F 551 . G <*> 0 . DP=116;I16=59,45,0,0,4136,173538,0,0,6240,374400,0,0,2443,59581,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:104,0
+000000F 552 . A <*> 0 . DP=116;I16=54,48,0,0,3895,157609,0,0,6120,367200,0,0,2374,57728,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:102,0
+000000F 553 . G <*> 0 . DP=116;I16=58,47,0,0,4042,165082,0,0,6300,378000,0,0,2449,59783,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:105,0
+000000F 554 . A <*> 0 . DP=113;I16=54,47,0,0,3991,164831,0,0,6060,363600,0,0,2416,58918,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:101,0
+000000F 555 . G <*> 0 . DP=112;I16=58,45,0,0,4006,164296,0,0,6180,370800,0,0,2450,59688,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:103,0
+000000F 556 . A <*> 0 . DP=112;I16=55,43,0,0,3826,155856,0,0,5880,352800,0,0,2313,56193,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:98,0
+000000F 557 . A <*> 0 . DP=112;I16=59,45,0,0,3937,156777,0,0,6240,374400,0,0,2450,59556,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:104,0
+000000F 558 . A <*> 0 . DP=112;I16=55,42,0,0,3649,144817,0,0,5820,349200,0,0,2260,54730,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:97,0
+000000F 559 . C <*> 0 . DP=112;I16=59,43,0,0,3956,160028,0,0,6120,367200,0,0,2372,57526,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:102,0
+000000F 560 . T <*> 0 . DP=110;I16=56,44,0,0,3865,157199,0,0,6000,360000,0,0,2355,57267,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:100,0
+000000F 561 . G <*> 0 . DP=110;I16=56,42,0,0,3873,160285,0,0,5880,352800,0,0,2286,55404,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:98,0
+000000F 562 . T <*> 0 . DP=110;I16=54,42,0,0,3688,148574,0,0,5760,345600,0,0,2225,53961,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:96,0
+000000F 563 . G <*> 0 . DP=109;I16=56,41,0,0,3859,160735,0,0,5820,349200,0,0,2230,53946,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:97,0
+000000F 564 . G <*> 0 . DP=109;I16=58,43,0,0,3956,162670,0,0,6060,363600,0,0,2314,56052,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:101,0
+000000F 565 . A <*> 0 . DP=108;I16=54,41,0,0,3766,154308,0,0,5700,342000,0,0,2151,51943,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:95,0
+000000F 566 . T <*> 0 . DP=108;I16=57,44,0,0,3990,164950,0,0,6060,363600,0,0,2284,55308,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:101,0
+000000F 567 . G <*> 0 . DP=108;I16=56,42,0,0,3823,154597,0,0,5880,352800,0,0,2227,54105,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:98,0
+000000F 568 . T <*> 0 . DP=106;I16=54,43,0,0,3736,148330,0,0,5820,349200,0,0,2200,53288,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:97,0
+000000F 569 . C <*> 0 . DP=104;I16=53,40,0,0,3686,150380,0,0,5580,334800,0,0,2135,51653,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:93,0
+000000F 570 . T <*> 0 . DP=104;I16=54,45,0,0,3862,156134,0,0,5940,356400,0,0,2268,54950,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:99,0
+000000F 571 . G <*> 0 . DP=104;I16=52,42,0,0,3659,146975,0,0,5640,338400,0,0,2126,51406,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:94,0
+000000F 572 . T A,<*> 0 . DP=103;I16=50,44,0,1,3630,145286,22,484,5640,338400,60,3600,2138,51786,25,625;QS=0.993933,0.00606729,0;SGB=-0.379885;RPB=1;MQB=1;MQSB=1;BQB=1;MQ0F=0 PL:AD 0,255,255,255,255,255:94,1,0
+000000F 573 . C <*> 0 . DP=103;I16=52,43,0,0,3702,147654,0,0,5700,342000,0,0,2178,52732,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:95,0
+000000F 574 . A <*> 0 . DP=102;I16=50,44,0,0,3626,144740,0,0,5640,338400,0,0,2151,52201,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:94,0
+000000F 575 . A <*> 0 . DP=101;I16=50,43,0,0,3621,146859,0,0,5580,334800,0,0,2138,51838,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:93,0
+000000F 576 . C <*> 0 . DP=99;I16=53,41,0,0,3651,146821,0,0,5640,338400,0,0,2144,51928,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:94,0
+000000F 577 . A <*> 0 . DP=99;I16=50,40,0,0,3480,139974,0,0,5400,324000,0,0,2080,50630,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:90,0
+000000F 578 . C <*> 0 . DP=99;I16=51,39,0,0,3535,142973,0,0,5400,324000,0,0,2025,48851,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:90,0
+000000F 579 . A <*> 0 . DP=98;I16=45,43,0,0,3428,136908,0,0,5280,316800,0,0,2016,48816,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:88,0
+000000F 580 . A <*> 0 . DP=98;I16=48,43,0,0,3539,143057,0,0,5460,327600,0,0,2019,48591,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:91,0
+000000F 581 . C <*> 0 . DP=95;I16=48,42,0,0,3504,140196,0,0,5400,324000,0,0,2033,48757,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,255,255:90,0
+000000F 582 . A <*> 0 . DP=94;I16=46,37,0,0,3342,137406,0,0,4980,298800,0,0,1889,45075,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,250,255:83,0
+000000F 583 . G <*> 0 . DP=90;I16=44,40,0,0,3305,134325,0,0,5040,302400,0,0,1897,45227,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,253,255:84,0
+000000F 583 . GAAAAA GAAAA 0 . INDEL;IDV=2;IMF=0.0222222;DP=90;I16=47,41,1,1,977,18253,38,722,5280,316800,120,7200,1993,47543,50,1250;QS=0.977475,0.0225252;VDB=5.8801e-07;SGB=-0.453602;MQSB=1;MQ0F=0 PL:AD 0,230,192:88,2
+000000F 584 . A <*> 0 . DP=87;I16=43,38,0,0,3130,126212,0,0,4860,291600,0,0,1842,43878,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,244,255:81,0
+000000F 585 . A <*> 0 . DP=88;I16=43,37,0,0,3175,129709,0,0,4800,288000,0,0,1795,42431,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,241,255:80,0
+000000F 586 . A <*> 0 . DP=88;I16=38,36,0,0,2877,116309,0,0,4440,266400,0,0,1664,39564,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,223,255:74,0
+000000F 587 . A <*> 0 . DP=88;I16=41,34,0,0,2893,114065,0,0,4500,270000,0,0,1631,38189,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,226,255:75,0
+000000F 588 . A <*> 0 . DP=87;I16=38,36,0,0,2862,114152,0,0,4440,266400,0,0,1623,37917,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,223,255:74,0
+000000F 589 . G <*> 0 . DP=87;I16=44,37,0,0,3066,122368,0,0,4860,291600,0,0,1755,40979,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,244,255:81,0
+000000F 590 . T <*> 0 . DP=87;I16=43,36,0,0,2960,115286,0,0,4740,284400,0,0,1681,39133,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,238,255:79,0
+000000F 591 . G <*> 0 . DP=86;I16=40,40,0,0,2985,114981,0,0,4800,288000,0,0,1710,39762,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,241,255:80,0
+000000F 592 . A <*> 0 . DP=85;I16=39,31,0,0,2681,104999,0,0,4200,252000,0,0,1487,34521,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,211,255:70,0
+000000F 593 . C <*> 0 . DP=84;I16=40,37,0,0,2864,109790,0,0,4620,277200,0,0,1614,37268,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,232,255:77,0
+000000F 594 . T <*> 0 . DP=84;I16=35,37,0,0,2788,110382,0,0,4320,259200,0,0,1503,35071,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,217,255:72,0
+000000F 595 . G <*> 0 . DP=82;I16=40,33,0,0,2756,107068,0,0,4380,262800,0,0,1524,35326,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,220,255:73,0
+000000F 596 . A <*> 0 . DP=81;I16=38,35,0,0,2792,110522,0,0,4380,262800,0,0,1476,34078,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,220,255:73,0
+000000F 597 . T <*> 0 . DP=80;I16=37,35,0,0,2670,101252,0,0,4320,259200,0,0,1464,34086,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,217,255:72,0
+000000F 598 . T <*> 0 . DP=79;I16=35,36,0,0,2768,110274,0,0,4260,255600,0,0,1414,32928,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,214,255:71,0
+000000F 599 . A <*> 0 . DP=77;I16=37,34,0,0,2724,107866,0,0,4260,255600,0,0,1435,33431,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,214,255:71,0
+000000F 600 . G <*> 0 . DP=77;I16=35,35,0,0,2660,104772,0,0,4200,252000,0,0,1383,32119,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,211,255:70,0
+000000F 601 . T <*> 0 . DP=77;I16=32,34,0,0,2504,97808,0,0,3960,237600,0,0,1264,29374,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,199,255:66,0
+000000F 602 . T A,<*> 0 . DP=74;I16=32,31,0,1,2332,89464,37,1369,3780,226800,60,3600,1229,28993,25,625;QS=0.984382,0.0156184,0;SGB=-0.379885;RPB=1;MQB=1;MQSB=1;BQB=1;MQ0F=0 PL:AD 0,156,255,190,255,255:63,1,0
+000000F 603 . A <*> 0 . DP=68;I16=32,26,0,0,2242,89276,0,0,3480,208800,0,0,1196,27816,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,175,255:58,0
+000000F 604 . G <*> 0 . DP=67;I16=33,27,0,0,2335,92671,0,0,3600,216000,0,0,1209,28001,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,181,255:60,0
+000000F 605 . A <*> 0 . DP=66;I16=31,27,0,0,2203,86221,0,0,3480,208800,0,0,1178,27342,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,175,255:58,0
+000000F 606 . T G,<*> 0 . DP=65;I16=29,27,1,0,2184,87922,22,484,3360,201600,60,3600,1135,26317,13,169;QS=0.989968,0.0100319,0;SGB=-0.379885;RPB=1;MQB=1;MQSB=1;BQB=1;MQ0F=0 PL:AD 0,149,255,169,255,255:56,1,0
+000000F 607 . G <*> 0 . DP=64;I16=32,26,0,0,2213,88215,0,0,3480,208800,0,0,1132,25998,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,175,255:58,0
+000000F 608 . T <*> 0 . DP=62;I16=29,26,0,0,2121,83799,0,0,3300,198000,0,0,1114,25840,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,166,255:55,0
+000000F 609 . A <*> 0 . DP=60;I16=29,22,0,0,1952,76460,0,0,3060,183600,0,0,1025,23691,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,154,255:51,0
+000000F 610 . A <*> 0 . DP=59;I16=28,21,0,0,1925,77233,0,0,2940,176400,0,0,1018,23786,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,148,255:49,0
+000000F 611 . C T,<*> 0 . DP=55;I16=14,11,15,11,996,41660,985,37993,1500,90000,1560,93600,551,13321,500,10956;QS=0.498217,0.501783,0;VDB=4.58562e-06;SGB=-0.692976;RPB=0.252922;MQB=1;MQSB=1;BQB=0.99929;MQ0F=0 PL:AD 255,0,255,255,255,255:25,26,0
+000000F 612 . T <*> 0 . DP=54;I16=25,22,0,0,1826,71926,0,0,2820,169200,0,0,1010,23566,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,141,255:47,0
+000000F 613 . A <*> 0 . DP=54;I16=26,23,0,0,1940,79254,0,0,2940,176400,0,0,1021,23633,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,148,255:49,0
+000000F 614 . A <*> 0 . DP=53;I16=25,22,0,0,1844,75548,0,0,2820,169200,0,0,974,22558,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,141,255:47,0
+000000F 615 . T <*> 0 . DP=53;I16=26,23,0,0,1888,74254,0,0,2940,176400,0,0,1007,23377,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,148,255:49,0
+000000F 616 . T <*> 0 . DP=53;I16=25,21,0,0,1755,68505,0,0,2760,165600,0,0,926,21512,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,138,255:46,0
+000000F 617 . T <*> 0 . DP=52;I16=24,24,0,0,1816,71554,0,0,2880,172800,0,0,995,23141,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,144,255:48,0
+000000F 618 . C <*> 0 . DP=52;I16=25,21,0,0,1722,66670,0,0,2760,165600,0,0,925,21453,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,138,255:46,0
+000000F 619 . A <*> 0 . DP=52;I16=23,21,0,0,1693,67139,0,0,2640,158400,0,0,869,20189,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,132,255:44,0
+000000F 620 . A <*> 0 . DP=50;I16=20,20,0,0,1584,65444,0,0,2400,144000,0,0,790,18550,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,120,255:40,0
+000000F 621 . C <*> 0 . DP=49;I16=23,21,0,0,1710,68988,0,0,2640,158400,0,0,891,21065,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,132,255:44,0
+000000F 622 . T <*> 0 . DP=47;I16=19,21,0,0,1570,62196,0,0,2400,144000,0,0,816,19338,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,120,255:40,0
+000000F 623 . A <*> 0 . DP=46;I16=21,20,0,0,1569,61081,0,0,2460,147600,0,0,812,19118,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,123,255:41,0
+000000F 624 . T <*> 0 . DP=45;I16=18,20,0,0,1438,55408,0,0,2280,136800,0,0,767,17931,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,114,255:38,0
+000000F 625 . C <*> 0 . DP=43;I16=17,21,0,0,1422,54590,0,0,2280,136800,0,0,788,18620,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,114,255:38,0
+000000F 626 . T <*> 0 . DP=42;I16=16,19,0,0,1335,51875,0,0,2100,126000,0,0,750,17770,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,105,255:35,0
+000000F 627 . A <*> 0 . DP=42;I16=17,21,0,0,1410,54084,0,0,2280,136800,0,0,781,18335,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,114,255:38,0
+000000F 628 . G <*> 0 . DP=41;I16=16,22,0,0,1467,57575,0,0,2280,136800,0,0,799,18797,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,114,255:38,0
+000000F 629 . T <*> 0 . DP=40;I16=17,21,0,0,1428,54984,0,0,2280,136800,0,0,802,18724,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,114,255:38,0
+000000F 630 . C <*> 0 . DP=38;I16=13,21,0,0,1290,49598,0,0,2040,122400,0,0,756,17748,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,102,255:34,0
+000000F 631 . T G,<*> 0 . DP=37;I16=14,19,1,0,1247,47855,32,1024,1980,118800,60,3600,717,16577,11,121;QS=0.97498,0.0250195,0;SGB=-0.379885;RPB=1;MQB=1;MQSB=1;BQB=1;MQ0F=0 PL:AD 0,70,255,99,255,255:33,1,0
+000000F 632 . T <*> 0 . DP=36;I16=15,19,0,0,1296,50260,0,0,2040,122400,0,0,713,16205,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,102,255:34,0
+000000F 633 . C <*> 0 . DP=35;I16=12,18,0,0,1147,44371,0,0,1800,108000,0,0,631,14519,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,90,255:30,0
+000000F 634 . C <*> 0 . DP=35;I16=14,19,0,0,1266,49284,0,0,1980,118800,0,0,665,14949,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,99,255:33,0
+000000F 635 . T <*> 0 . DP=35;I16=12,19,0,0,1204,47500,0,0,1860,111600,0,0,634,14516,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,93,255:31,0
+000000F 636 . C <*> 0 . DP=34;I16=12,17,0,0,1119,43609,0,0,1740,104400,0,0,580,13280,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,87,255:29,0
+000000F 637 . T <*> 0 . DP=33;I16=13,15,0,0,1091,42997,0,0,1680,100800,0,0,529,12009,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,84,255:28,0
+000000F 638 . A <*> 0 . DP=32;I16=12,17,0,0,1077,40721,0,0,1740,104400,0,0,561,12877,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,87,255:29,0
+000000F 639 . A <*> 0 . DP=30;I16=13,14,0,0,941,34241,0,0,1620,97200,0,0,539,12123,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,81,255:27,0
+000000F 640 . A <*> 0 . DP=29;I16=11,14,0,0,946,36348,0,0,1500,90000,0,0,525,11987,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,75,255:25,0
+000000F 641 . G <*> 0 . DP=27;I16=10,12,0,0,821,31419,0,0,1320,79200,0,0,457,10131,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,66,255:22,0
+000000F 642 . A C,<*> 0 . DP=26;I16=11,12,0,1,826,30722,22,484,1380,82800,60,3600,469,10353,9,81;QS=0.974057,0.0259434,0;SGB=-0.379885;RPB=1;MQB=1;MQSB=1;BQB=1;MQ0F=0 PL:AD 0,50,255,69,255,255:23,1,0
+000000F 643 . C <*> 0 . DP=26;I16=11,12,0,0,876,33902,0,0,1380,82800,0,0,441,9465,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,69,255:23,0
+000000F 644 . C <*> 0 . DP=26;I16=10,14,0,0,857,31563,0,0,1440,86400,0,0,456,9850,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,72,255:24,0
+000000F 645 . C <*> 0 . DP=26;I16=11,14,0,0,899,33277,0,0,1500,90000,0,0,444,9280,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,75,255:25,0
+000000F 646 . C <*> 0 . DP=26;I16=11,13,0,0,826,29430,0,0,1440,86400,0,0,435,9129,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,72,255:24,0
+000000F 647 . T <*> 0 . DP=26;I16=10,13,0,0,878,33868,0,0,1380,82800,0,0,384,7878,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,69,255:23,0
+000000F 648 . A <*> 0 . DP=26;I16=10,12,0,0,826,31614,0,0,1320,79200,0,0,374,7566,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,66,255:22,0
+000000F 649 . C <*> 0 . DP=26;I16=11,13,0,0,904,34814,0,0,1440,86400,0,0,381,7535,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,72,255:24,0
+000000F 650 . T <*> 0 . DP=26;I16=10,13,0,0,873,33579,0,0,1380,82800,0,0,355,6965,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,69,255:23,0
+000000F 651 . T <*> 0 . DP=26;I16=11,13,0,0,881,32967,0,0,1440,86400,0,0,325,6235,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,72,255:24,0
+000000F 652 . T <*> 0 . DP=25;I16=11,14,0,0,891,32693,0,0,1500,90000,0,0,321,6029,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,75,255:25,0
+000000F 653 . A <*> 0 . DP=21;I16=9,12,0,0,804,31130,0,0,1260,75600,0,0,303,5555,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,63,255:21,0
+000000F 654 . A <*> 0 . DP=21;I16=9,11,0,0,647,21917,0,0,1200,72000,0,0,269,4861,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,60,255:20,0
+000000F 655 . C <*> 0 . DP=21;I16=9,12,0,0,664,22342,0,0,1260,75600,0,0,266,4666,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,63,255:21,0
+000000F 655 . CACAATACAA CACAA 0 . INDEL;IDV=6;IMF=0.285714;DP=21;I16=4,11,5,1,0,0,593,58729,900,54000,360,21600,166,2878,100,1788;QS=0.598662,0.401338;VDB=2.08672e-10;SGB=-0.616816;MQSB=1;MQ0F=0 PL:AD 221,0,255:15,6
+000000F 656 . A <*> 0 . DP=11;I16=4,6,0,0,392,15546,0,0,600,36000,0,0,130,2290,0,0;QS=1,0;MQSB=1.00775;MQ0F=0 PL:AD 0,30,255:10,0
+000000F 657 . C <*> 0 . DP=11;I16=4,7,0,0,421,16219,0,0,660,39600,0,0,131,2189,0,0;QS=1,0;MQSB=0.964642;MQ0F=0 PL:AD 0,33,255:11,0
+000000F 658 . A <*> 0 . DP=10;I16=1,3,0,0,67,1129,0,0,240,14400,0,0,53,937,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,12,59:4,0
+000000F 658 . AA AAATTA 0 . INDEL;IDV=2;IMF=0.125;DP=16;I16=7,6,1,2,0,0,242,24170,780,46800,180,10800,167,2727,50,902;QS=0.462963,0.537037;VDB=1.46535e-07;SGB=-0.511536;MQSB=1;MQ0F=0 PL:AD 88,0,38:13,3
+000000F 659 . A <*> 0 . DP=10;I16=0,4,0,0,57,815,0,0,240,14400,0,0,42,740,0,0;QS=1,0;MQ0F=0 PL:AD 0,12,42:4,0
+000000F 660 . T <*> 0 . DP=2;I16=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;QS=0,0;MQ0F=0 PL:AD 0,0,0:0,0
+000000F 661 . A <*> 0 . DP=8;I16=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;QS=0,0;MQ0F=0 PL:AD 0,0,0:0,0
+000000F 662 . C <*> 0 . DP=8;I16=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;QS=0,0;MQ0F=0 PL:AD 0,0,0:0,0
+000000F 663 . A <*> 0 . DP=8;I16=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;QS=0,0;MQ0F=0 PL:AD 0,0,0:0,0
+000000F 664 . A <*> 0 . DP=8;I16=0,2,0,0,52,1352,0,0,120,7200,0,0,20,202,0,0;QS=1,0;MQ0F=0 PL:AD 0,6,47:2,0
+000000F 665 . A <*> 0 . DP=8;I16=5,2,0,0,153,3407,0,0,420,25200,0,0,81,1131,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,21,115:7,0
+000000F 666 . T <*> 0 . DP=8;I16=5,3,0,0,269,9361,0,0,480,28800,0,0,83,1057,0,0;QS=1,0;MQSB=0.900802;MQ0F=0 PL:AD 0,24,207:8,0
+000000F 667 . T <*> 0 . DP=8;I16=5,3,0,0,279,10001,0,0,480,28800,0,0,75,899,0,0;QS=1,0;MQSB=0.900802;MQ0F=0 PL:AD 0,24,214:8,0
+000000F 668 . A <*> 0 . DP=8;I16=5,3,0,0,278,10018,0,0,480,28800,0,0,67,757,0,0;QS=1,0;MQSB=0.900802;MQ0F=0 PL:AD 0,24,214:8,0
+000000F 669 . C <*> 0 . DP=8;I16=5,3,0,0,279,10051,0,0,480,28800,0,0,59,631,0,0;QS=1,0;MQSB=0.900802;MQ0F=0 PL:AD 0,24,214:8,0
+000000F 670 . A <*> 0 . DP=8;I16=5,3,0,0,287,10675,0,0,480,28800,0,0,51,521,0,0;QS=1,0;MQSB=0.900802;MQ0F=0 PL:AD 0,24,220:8,0
+000000F 671 . T <*> 0 . DP=8;I16=5,3,0,0,264,9116,0,0,480,28800,0,0,43,427,0,0;QS=1,0;MQSB=0.900802;MQ0F=0 PL:AD 0,24,205:8,0
+000000F 672 . C <*> 0 . DP=7;I16=4,3,0,0,237,8337,0,0,420,25200,0,0,36,348,0,0;QS=1,0;MQSB=1.01283;MQ0F=0 PL:AD 0,21,193:7,0
+000000F 673 . T <*> 0 . DP=7;I16=4,3,0,0,223,7385,0,0,420,25200,0,0,29,283,0,0;QS=1,0;MQSB=1.01283;MQ0F=0 PL:AD 0,21,181:7,0
+000000F 674 . A <*> 0 . DP=6;I16=4,2,0,0,199,6757,0,0,360,21600,0,0,23,231,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,18,164:6,0
+000000F 675 . G <*> 0 . DP=4;I16=2,2,0,0,147,5443,0,0,240,14400,0,0,19,189,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,12,134:4,0
+000000F 676 . A <*> 0 . DP=3;I16=2,1,0,0,100,3434,0,0,180,10800,0,0,16,154,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,9,95:3,0
+000000F 677 . T <*> 0 . DP=3;I16=2,1,0,0,104,3846,0,0,180,10800,0,0,13,125,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,9,100:3,0
+000000F 678 . A <*> 0 . DP=2;I16=0,1,0,0,41,1681,0,0,60,3600,0,0,10,100,0,0;QS=1,0;MQ0F=0 PL:AD 0,3,41:1,0
+000000F 679 . T <*> 0 . DP=2;I16=1,1,0,0,68,2410,0,0,120,7200,0,0,9,81,0,0;QS=1,0;MQSB=1;MQ0F=0 PL:AD 0,6,68:2,0
+000000F 680 . T <*> 0 . DP=1;I16=0,1,0,0,41,1681,0,0,60,3600,0,0,8,64,0,0;QS=1,0;MQ0F=0 PL:AD 0,3,41:1,0
+000000F 681 . T <*> 0 . DP=1;I16=0,1,0,0,41,1681,0,0,60,3600,0,0,7,49,0,0;QS=1,0;MQ0F=0 PL:AD 0,3,41:1,0
+000000F 682 . G <*> 0 . DP=1;I16=0,1,0,0,41,1681,0,0,60,3600,0,0,6,36,0,0;QS=1,0;MQ0F=0 PL:AD 0,3,41:1,0
+000000F 683 . T <*> 0 . DP=1;I16=0,1,0,0,35,1225,0,0,60,3600,0,0,5,25,0,0;QS=1,0;MQ0F=0 PL:AD 0,3,35:1,0
+000000F 684 . T <*> 0 . DP=1;I16=0,1,0,0,31,961,0,0,60,3600,0,0,4,16,0,0;QS=1,0;MQ0F=0 PL:AD 0,3,31:1,0
+000000F 685 . A <*> 0 . DP=1;I16=0,1,0,0,29,841,0,0,60,3600,0,0,3,9,0,0;QS=1,0;MQ0F=0 PL:AD 0,3,29:1,0
+000000F 686 . T <*> 0 . DP=1;I16=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;QS=0,0;MQ0F=0 PL:AD 0,0,0:0,0
+000000F 687 . N <*> 0 . DP=1;I16=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;QS=0,0;MQ0F=0 PL:AD 0,0,0:0,0
+000000F 688 . N <*> 0 . DP=1;I16=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;QS=0,0;MQ0F=0 PL:AD 0,0,0:0,0
diff --git a/test/mpileup/indel-AD.1.sam b/test/mpileup/indel-AD.1.sam
new file mode 100644
index 0000000..f7bef6a
--- /dev/null
+++ b/test/mpileup/indel-AD.1.sam
@@ -0,0 +1,156 @@
+ at HD VN:1.4 SO:coordinate
+ at SQ SN:000000F LN:686
+ at RG ID:rg SM:sample
+ST-E00128:308:HHVVLALXX:8:1210:16660:4227 163 000000F 392 60 147M1D4M = 765 466 CATGTACTCGCATGAGAGTTATGTGTAAAACAGAGCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTC AAAFFJJFJJAJJJJJJJJFJJJJJJFJJJJJFJFJJJJFJJJJJJJJJJJJJJJFJJJJJJJJJJJFFJJJJJJJJJJJJJJJFJJJFAJFJJAJJJ-<FFFFFJAAJFFJJJFJFFJFJJFJAJJ)AJF<JFJJFJFJJ<FJFFJJJJ- MD:Z:147^T4 PG:Z:MarkDuplicates NM:i:1 AS:i:147 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2102:3346:29578 147 000000F 395 60 143M1D8M = 206 -341 GTACTTGCATGTGAGTTATGTGTAAAACAGAGCTAAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGG <-<-7---7-----------7<FA--FA--F<A7---JFFJFF<F7JF7FJJFFJJJFJFFJJJFAFFFJJJAJJJJJJ<JFJJJJJJJJFJJAJ7FJJJJJF<7JJ<JJF-FJJJAFJJJJJJJJ77JJAJJJFJJFJFJJJJ<FAFAAA MD:Z:5C5A22C43C64^C8 PG:Z:MarkDuplicates NM:i:5 AS:i:124 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2113:30360:20471 147 000000F 395 60 143M1D8M = 106 -441 GTACTCGCATGAGAGTTATGTGTAAAACAGAGCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGG -F-7<7-<-JJJFAJFJFJJJFFFFFAFJJFJJA7AJJF-FFJFFJJJJJJJ<JFJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJFF-JJJJJJJJJJJFJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJF<<FAAJFFAF<A MD:Z:78C64^C8 PG:Z:MarkDuplicates NM:i:2 AS:i:139 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1224:23744:37348 163 000000F 402 60 137M1D14M = 604 328 AATGAGAGTTATGTGTAAAACAGAGCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAG AAFFFJJJ<JJJJJJJJJJJJJJJJJJJJJJJJFJF-FJJJJJJJJFAJJJJJJJJJJJFJJAFFFJJJFJJJJJJFJJFJJJFJJJJJJJJJFFJJJJFJJJ<J<JAFJJJAJJA<AJJJJJJ7<JFJJJJJ<<JFF7-<<FF<-AFFJF MD:Z:0C136^T14 PG:Z:MarkDuplicates NM:i:2 AS:i:143 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2102:23652:24251 147 000000F 402 60 137M1D14M = 1 -553 CATGAGAGTTGTGGCTAACACAGAGCTCAATTTTCTTTTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTAGACCGGAG -7---<-<-7)777-----<A7<-----AJJF<---F7AFJAF-77JFFF7FAFAA777-<FAF--FJFJJJJA-F-AFA-<AA-<F7FFFJJJFJF7JF-FFJJJFAJ<7-<JJJAAFJ<FA<7<7FFJJJJJ<JJA--F<-JFAAAAAA MD:Z:10A2T0G3A15A102^T5G8 PG:Z:MarkDuplicates NM:i:7 AS:i:115 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2215:15341:59921 163 000000F 405 60 134M17S = 728 459 GAGAGTTATGTGTAAAACAGAGCTCAATTTTATTTAGTATTTATTGTGCCGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGAGCGCTCCCTATGCGTGCAGGCTATCATGTCAGGTACGGTTTGAACCGCAGAGG A---A7F7FJA<JJJ-<F<F-FJ7-<----<FF-F-7F<--<<--77<--7AJ---7-7AF-7---7AAJ----7<7--AFJF7--777-7A---7--7----7--F7A-A-7-7)))7)--<--7----7-7-)---7---7-)))-)-) MD:Z:35T13A47T1T7C7T18 PG:Z:MarkDuplicates NM:i:6 AS:i:104 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2117:19664:38825 99 000000F 410 60 19S129M1D3M = 451 193 CACATCCTTACCTTAAACATTATGTGTAAAACAGAGCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGT AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJFJJJJJJJJJJF< MD:Z:129^T3 PG:Z:MarkDuplicates NM:i:1 AS:i:129 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2117:26047:35397 99 000000F 411 60 20S128M1D3M = 526 263 TTCGCCAGTTCCTGGGGGTCTATGTGTAAAACAGAGCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGT AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJFFJJJJJFFFJJFFJJJJJAFJJJ7 MD:Z:128^T3 PG:Z:MarkDuplicates NM:i:1 AS:i:128 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2220:31842:5493 1123 000000F 411 60 20S128M1D3M = 526 263 TTCGCCAGTTCCTGGGGGTCTATGTGTAAAACAGAGCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGT AAFFFJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJFJ-FJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJAFJFF-A<AAFJJJJJ7<FJJJAAAF<FJJJ- MD:Z:128^T3 PG:Z:MarkDuplicates NM:i:1 AS:i:128 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1216:27529:24638 147 000000F 413 60 125M1D26M = 229 -336 TGTGTAAAACAGAGCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGG -FAFJJJJFFF-JFAJFAJAJJJJFFJJJJJJJJAJJJJFJJJJJJJAFJJJJJJJJJJJJJJJFJFJJJFJJFFJJJJJJJJJJJJJJJJJF<AJJJFFFJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJFJJFFAAA MD:Z:60C64^C10C15 PG:Z:MarkDuplicates NM:i:3 AS:i:134 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1216:26849:24690 1171 000000F 413 60 125M1D26M = 229 -336 TGTGTAAAACAGAGCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGG -AAJJFJJJJJA7JJJAAJJFFJFJFFAJFJJJJF-AJFAJJJJFJJJJJJJJJJJJJJFJJFJJJJJJJJJJJFJJJJJJJJJJJFJJFJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJFFJFJJFFAA< MD:Z:60C64^C10C15 PG:Z:MarkDuplicates NM:i:3 AS:i:134 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2104:5994:8991 163 000000F 416 60 123M1D28M = 1012 732 GTAAAACAGAGCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATG AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJ7JJJJJJJJJ<<JJJJJFJJJFJJJJ<JFJAF<A-7<F7A<)F<JJFJ7<--7A-<AA7AAJAF)AA-A<-A-)77<7F--A-)<<- MD:Z:123^T28 PG:Z:MarkDuplicates NM:i:1 AS:i:144 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1122:14174:33252 99 000000F 420 60 21S29M2D9M1D77M1D15M = 452 185 CTCGCATCACTTCTGCATGCCAACAGAGCTCAATTTTATTTTGTATTTATTGCAGTTAGAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAG AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJFJ MD:Z:29^TG9^A12C64^C10C4 PG:Z:MarkDuplicates NM:i:6 AS:i:98 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1102:22303:21139 99 000000F 421 60 22S118M1D11M = 820 548 AATGTGCGTGGACGTATAATGCACAGAGCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCG AAFFFJJJJJJJJJJJJFFJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJAFFJJJJJJJJFJJJJFAJJJJJJJ MD:Z:118^T11 PG:Z:MarkDuplicates NM:i:1 AS:i:122 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2108:1407:24251 1107 000000F 422 60 116M1D10M25S = 492 -57 CAGAGCTCAATTGTATTGTGTATTTATTCTGCAGTTAGAAGATAATATGATAAAATCTGTTTGTCTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAAGGTCCATACCCACGAGTCCN AF)7-F-A-7A<-7F-<-F7<<-A7-7F-AAF<<FJF-7<-AJAJAF7-A-A<---A--<A--7-AFFJF-JJJJF<AJFJJJAJFJAF<FAJJFJJJFFFJJFFJJJA<JJJJFJJJFJJF<F7FFJFJJJJJJFJJJJJJJJJJFFAA# MD:Z:12T4T10G11A10C12T51^C10 PG:Z:MarkDuplicates NM:i:7 AS:i:89 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2203:25926:68869 1107 000000F 422 60 116M1D10M25S = 492 -57 CAGAGCTCAATTTGACTTTGTACTTATTCGACAGTTGGAAAATAACATGATAGAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAAGGTCCATACCCACGAGTCCC )-)-7--7-A7---7-7--AAF<7-777---7JF7<7-AF-7-7A-AF-<-<-7----<<-7---FJAJJFJJJJJJFJJ<JFJAAAJJJJJFJFJJJJFJJJJJJJJFJJJJJJJJJFJJJJJJFJFJJJJJJJJJJJJJJJJJFFFAAA MD:Z:13T1T6T5G0T0G5A8T5C0A63^C10 PG:Z:MarkDuplicates NM:i:11 AS:i:69 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1221:26656:47210 147 000000F 422 60 116M1D35M = 195 -379 CAGATCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTC <77--<<<<A-<F<--77F<----F7-AF---<JF<AF-7<JJAF7AFAFFA--FFJFJJ-JFJJFAFJJJJJJJJJJJJFJ<7-J7JFFAJJA<AJJJJJJJFFJJJJJJJJJJJJJJFJFJJJJAJJFJJJJJFFJJJF7FF<FFAAA- MD:Z:4G46C64^C10C24 PG:Z:MarkDuplicates NM:i:4 AS:i:129 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1124:12357:72895 99 000000F 423 60 15S115M1D21M = 569 302 AAGCCGCGTGATGCGAGAGCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAAC AAFFFJJJJJFJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJFJFAJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJFJJJJJJJJJJJJJ<AJJJ<AJF<FJ-FFFFAJ<FAAFFJJJAAFFFJ<7FJFFFFF MD:Z:50C64^C10C10 PG:Z:MarkDuplicates NM:i:3 AS:i:119 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2214:24505:2874 83 000000F 423 60 115M1D16M20S = 48 -507 AGAGCTCAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGACCATGCGACTGTGACAAGTA JJFJFJJFAJJJJFJJJJJJJJJJJJJJJJJJJJJJJJAJJJFJJJJJJJJJ<JJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJFJJJJJJJJJJJJJJJFFFAA MD:Z:50C64^C10C5 PG:Z:MarkDuplicates NM:i:3 AS:i:114 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1212:10450:51271 163 000000F 429 60 109M1D42M = 772 478 CAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAA AAFFFJJJAFJJJJJJFJJAJJJJJJJFFJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJ-AFJJJJFJAFFJFJJJJJJJFJJJAFJJAJAFFFFJFFJJJJJJJJJJJJJJJJJJFJJJJ<JJJJA<FFJJAAF<F<<FFAFFJJJFJJ MD:Z:44C64^C10C31 PG:Z:MarkDuplicates NM:i:3 AS:i:134 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1214:5994:34729 1107 000000F 429 60 110M1D20M21S = 44 -516 CAATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACCGGCGGGTTAACACTCATCCC <AJJFJJJFJFFAF<AJFJJJJJFAJJJJJJFJJA-JFJ<JAFJ<FA7FJFJJAJFJFJJFJFJFJJJJJFJFJA<JJJJA<JF-JJFFJJJFJJJAFJFJ<JJJJJJFJJFF<AJAAJJJFFFFJAFAFJAJA<JFJFFFJFF<A--AAA MD:Z:110^T20 PG:Z:MarkDuplicates NM:i:1 AS:i:123 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2120:28970:13000 83 000000F 429 60 110M1D20M21S = 24 -536 CAATTTTATTTTGTATTTATTGTTCAGTTAGAAAATAATATGATCAAGTCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACCGGCGGGTTAACACTCATCCC 7--FFA7FFAAF7JJF<FJFF<7-JJJJJJJJJAFJJJJAFFAAJA<-JJJFJJJFJJJFFA-FFJFJJJJJJJJJAFAJJFAFAJFFJFAJJJJFJJJJJJJJJFFJJFJJJJJJFJJJJJJJJJJA<FFJFJJJJAFJJJJFJJFFFAA MD:Z:23G23A62^T20 PG:Z:MarkDuplicates NM:i:3 AS:i:113 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2111:29944:30474 147 000000F 430 60 109M1D42M = 194 -388 AATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAAC -JJAFA<JJJJJJAFFFFJJJJJJJJJJJJJF7AFAAJFJFFJJ<F-JJJJJJJJJJFAFFJJJJJJJJJJJJJJJJJFJAJJJJJJJJFJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFAAA MD:Z:109^T42 PG:Z:MarkDuplicates NM:i:1 AS:i:144 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2111:29467:30597 1171 000000F 430 60 109M1D42M = 194 -388 AATTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAAC <A77-<A-7-77FFAFAFA<7--AJJAFF-AA-AJJA-F-F<F-AJA<A7-F-JA--FJFA7F-7J7AF<JFJFJFA7JA7AA-<FAFAA<JAJJJFAA-JFFA-7-JAJJJ<FJJJF7A7JJJFFFFJ7-JFFF<AFJJJAJFJAFAFAA MD:Z:109^T42 PG:Z:MarkDuplicates NM:i:1 AS:i:144 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1215:24677:30527 163 000000F 431 60 107M1D44M = 669 373 GTTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACA AAAFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJAAJJJJJJJJJJJJJJJJJJJJJJJJ<JJJ<FJJJJJJJJJJJJJFJAJJJJJJFJA7FFJJJJJJA7AAFFFJJJA<AAJJJF-FFF<<AF- MD:Z:0A41C64^C10C33 PG:Z:MarkDuplicates NM:i:4 AS:i:133 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2108:25641:68306 1187 000000F 431 60 107M1D44M = 669 373 GTTTTATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTTCTGTCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACA AAAFFFJFFJJJJJJJFFFJJFJJJFJJFFJJJ-FJJJAJFJJJJJJJJJJJJJJ<FJJJ-FFJJJJJJJJJJ-FA-FJJJJJJJFJAFJF-7FFFJJJ-AF<-FAF--7FJA7<<)FJA-)7<---A7A---7<A-7<A<F<F-7-A<FA MD:Z:0A41C44G3G15^C10C33 PG:Z:MarkDuplicates NM:i:6 AS:i:123 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2210:20141:37436 147 000000F 435 60 104M1D23M24S = 364 -199 TATTTTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTTGACAGACATCCACAGTTTCTCTC JJJJJJJJJJJJJJJJJJJJJJJJJ7JAJJJJJJJJJFJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFAFAA MD:Z:104^T23 PG:Z:MarkDuplicates NM:i:1 AS:i:120 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1212:16975:63806 147 000000F 436 60 102M1D49M = 223 -365 ATTTTGTATTTATTGTGCAGTTAGAAAAGAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCATCTGCGTGCGGGCTATCATGTCAGGTATGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAA -F77A<7-JFA-FFJF<-FJJAA<--7<-FA-<AAJJF7--AF<JFFJF<F-A<<FJJJJFJFJAJFAA7-77A7--FJFJ7AAAJ7<FA77F<FFFA7A-AAF--JJJFFA-JJFAFAAF<-JFFJFFJJJJJJJJFFJAAFJJFF7AAA MD:Z:28T8C36C9T17^C49 PG:Z:MarkDuplicates NM:i:5 AS:i:124 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2103:31872:59095 99 000000F 438 60 21S100M1D30M = 661 370 GAGATTCAGAAGTGAGCTCAGTTTGTATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGT AAFAFJJJJFJJJJJJJJJJJFJFJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFFJAJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJFAAJJJ<JJJJJF MD:Z:35C64^C10C19 PG:Z:MarkDuplicates NM:i:3 AS:i:113 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2123:12662:68254 99 000000F 439 60 23S99M1D29M = 504 217 CATTCGCAGAGCACCACAGGCACTTGTATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATG AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJFJJJJJJAJJJJJJJJJJAJJ MD:Z:34C64^C10C18 PG:Z:MarkDuplicates NM:i:3 AS:i:111 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2220:30289:52520 163 000000F 439 60 100M1D45M6S = 766 463 TTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTAGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGCGGATCTCTGTCAACACAACAGACCAAGC -AA-FF<FFAFFFFFF<-FFJFJJJJJJ--AFJJF<JFJJAJ<AAF-<-7F-7AAJAJF<F-7AFFFJFAJJJJJ<-F-FA<F7AFA<FJ<A-A<A<-7FF--))-AF7JF)A)A)-77<<<-<A)7)-----7F7A-<F-<FFJ-)-7-- MD:Z:61T38^T22T4G17 PG:Z:MarkDuplicates NM:i:4 AS:i:123 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1202:9983:67621 99 000000F 439 60 22S100M1D29M = 587 295 GGATCCGAGTTATGGAGCCGGATTGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGT AAFFFJ-FJJJAJ7FJJFFFJJJJAJJJ7FF<FJJAJJJAFFJFJJJFJJJJJJFFJJFJJFJFFJJJFJJJJJAJA<JJJJJJJJJJJJ7F<JJJJJJFFFJJJJJJJJFJJAFF-<7<AAAFAF-F<AJF<JJJJJF7AF7<-AJFJAA MD:Z:100^T29 PG:Z:MarkDuplicates NM:i:1 AS:i:122 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2116:4817:30545 163 000000F 440 60 99M1D52M = 501 197 TGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTG AAAFA7AFFJJJJJJJJJJJJJJJFJFFJJJJJJJJJFJJJFJJJJJJJJJJJJJFFJFJJJJJJFJJFJFFJJJFJ<JJJJJJJJJJFJJJJFFJFJJJJ-FJJJF-FJ<FJJFFFJ<AA-FFFAF7FJJAAAJJA<7<--A<7<--A-< MD:Z:99^T52 PG:Z:MarkDuplicates NM:i:1 AS:i:144 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2107:22282:11084 83 000000F 440 60 99M1D36M16S = 262 -314 TGTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAAACGTGGAGACAGGTAG FJFAA<<AJJJJFAFJJFJFJFJJJFFFJJJJJFFAFJFFJFFJJJAFJAFFJJJJJJJFJJJJJJJFFJJJJFJ<JJJJJJJJJJAJJJJJJJJJJAJJJFJJJJ<JJJJJJJJFAFFJJJJJJJJJJJFJFFJAFJJJJJJJJJFFFAA MD:Z:99^T36 PG:Z:MarkDuplicates NM:i:1 AS:i:128 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1219:14854:19874 163 000000F 441 60 98M1D53M = 647 332 GTATTTATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGA AAAAFJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFJJJJJJJJJJJJJJJJJJJFJJJFJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJAJFJJJFFJJJJ<AJJJJJFFJF<FJ7FAFA MD:Z:98^T53 PG:Z:MarkDuplicates NM:i:1 AS:i:144 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1223:25357:38139 99 000000F 441 60 21S97M1D33M = 675 369 GATTACGGTGGTGCAAGTAGGGTATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTG AAAFFJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJAFJJJJJJJJJJJAJJAJJJ MD:Z:32C64^C10C22 PG:Z:MarkDuplicates NM:i:3 AS:i:113 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1120:30787:70258 163 000000F 443 60 95M1D52M4S = 764 456 ATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTACCC ---<-7<AFJJJJ-<-FJJJJJJJFJJJJJJJAJJ-<JFF<7-7JJF7<7<JJJJ7FFJ-<-AA-<-<7<AFA--7-7-AA<FFFJJJFJFF7JFFA7<7J-A<<JFF<<A<F7AA7AAJ<JJA-FFF-AJJF7F-FFFFFJAFF77--7) MD:Z:30C64^C10C41 PG:Z:MarkDuplicates NM:i:3 AS:i:130 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2119:5274:32496 163 000000F 443 60 95M1D56M = 672 357 ATTTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTCACT -AAFFJ<J<FJJJ7JJJ7JFJJJJJFJJJ<JFJJFFJJJJFJ7JJJJJJJJJJJJ7AJJFJFJJJJJJJJ<-7<7AAFJJJJJJJJJFFJJJJJJJJFAFJJJFFFF<-FAJ7FFFFJJAF-A<AFFFFJA7FFJJ<FA7-A-A-<F--A7 MD:Z:30C64^C10C41G3 PG:Z:MarkDuplicates NM:i:4 AS:i:130 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2115:15026:32654 99 000000F 445 60 22S93M1D36M = 893 597 GATGCATAGTTGCAGGTGCCCATTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCA A-AFFJJJJJJJJJJJJAJJJJJJJJJJFAJJJFJFJJFJJFJJJJJJJJJJJJJJJJJJJJJFJFFJJJF<FJJJJJJJJJJJJJJAJAJJJJJJJJJJJJJJJJJJJJFJJJFJ-7AFJFAF<AFFF<F7<FAFFJJJFAJJFJJJJJJ MD:Z:28C64^C10C25 PG:Z:MarkDuplicates NM:i:3 AS:i:112 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1102:17584:31881 99 000000F 446 60 22S92M1D37M = 585 295 GGAGAACCAACTGCTAGACTTGTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAA AAFFFJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ MD:Z:27C64^C10C26 PG:Z:MarkDuplicates NM:i:3 AS:i:112 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1102:17634:32390 1123 000000F 446 60 22S92M1D37M = 585 295 GGAGAACCAACTGCTAGACTTGTATTGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAA AAFFFJJJJJJJJJJJJAJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJFJJFJJJJJJJJJJJJJJJJJJJJ<JFFJJJJJJJJJJJJJJJJJFJJJJJJJJFJFJJJJJJJFJJJJJJJAJJFJFJFFJJAFFFJJFJFJFFFJJJJJJ< MD:Z:27C64^C10C26 PG:Z:MarkDuplicates NM:i:3 AS:i:112 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2213:28189:71910 163 000000F 446 60 93M1D58M = 814 437 TATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGCCTGTCAACACAACAGAAAAAGTGACTGAT AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ<JJJJJJJJJJJJJ<JFJFJJFFJJJJJ<JJJJJJJJAJJFAJJFFFJJJJJJJJAFJJJJJJJJJFFJJFAAJJJ-F7AFJJJJF))77-7<<FF<-<<FFFJF<7FAJ<7<AA- MD:Z:93^T28T29 PG:Z:MarkDuplicates NM:i:2 AS:i:139 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2222:15716:24181 147 000000F 447 60 92M1D59M = 202 -397 ATTGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATT -7JJJJJAJJFA---7-<JFAAF7-AJF<A7<7FJ<<J<AFA)JFJFJFJJFFAJFF<JF<<-<7F-JJJJJJJJAJJJJJJJJJJJFJJJJJJJJF7<<JFFFJJJFJJ<JJJJJJJJJJJJJJFJFJFFJJJJJJJJJJJJJJJFFFAA MD:Z:92^T59 PG:Z:MarkDuplicates NM:i:1 AS:i:144 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2224:6796:65476 99 000000F 449 60 22S89M1D40M = 804 506 CGTTCTGCAGACTCCGGACTTATGTGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACAC AAAFFJJJAJJJAFFJJFFFJFJJJJJFJFJJJJJJJJJJJJJJJJJJJJAJFJJFJJJJJJJA<F<JJJJJFJJFJJJJFJJJJJJJJJAFJFJJAAJJJJJJJJJJJFJJJJJJJJJJJJJJJFAJJ7FJFFFFJJJ7<FFJJF<AJFJ MD:Z:24C64^C10C29 PG:Z:MarkDuplicates NM:i:3 AS:i:112 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2123:25144:8798 163 000000F 450 60 89M1D62M = 571 247 GTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGT AAAFFJJJJJJJJJJJJJJJJJJAJJJJJJJFJJJJJJJJFJJFJAJF<JJJJJJJAF--7FFJJAFJJJJFJFJJJFFFFJFJJJJFA<JJJJJJ<-<AFFJ7FFJ7-AFAAJ<<JJJJJJ-7<<7A7FFJF<FFFAFFJF7<A<<FF<7 MD:Z:89^T62 PG:Z:MarkDuplicates NM:i:1 AS:i:144 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1218:2331:70750 99 000000F 450 60 21S89M1D41M = 556 253 TTGACTTGTCAAGTTCAAGGAGTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAA <AAAFJFJJFJJJ7FJJJ<JJJ<A<JJJFJJJJJFJJJJJJJFFFF<FJFF7JAFFJJJJ7FFA<<-FAAJJJFJJJ<F<FJFJAA-AAFJAAJJ<AJJFFFF<7------7-7-A7-7F-<-7-A<JA7-7A<FFAAFF<AJ-A-<---7 MD:Z:89^T41 PG:Z:MarkDuplicates NM:i:1 AS:i:123 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2106:10693:10662 83 000000F 450 60 89M1D41M21S = 184 -397 GTGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAATATTTTGCGCAGTGTCGCTGG JJJJJFAJJF<-AFJJJF<JFAJFJJJJJJJJJJJJJJJ<JJJJJJJJJJJJJJJJJJFFJJJJJJJJJJJJJJJJJJJJJJFJJJJFAJJJ7JJJJJJJJJJJFJF-JJFJJJFJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJFFFA< MD:Z:89^T41 PG:Z:MarkDuplicates NM:i:1 AS:i:123 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1115:7151:43694 83 000000F 451 60 87M1D44M20S = 219 -364 TGCAGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAAGATTGCGCAGACCGCACGT FJJJJFJJJJJJJJJJJJJJFJJJFJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFAA MD:Z:22C64^C10C33 PG:Z:MarkDuplicates NM:i:3 AS:i:114 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2117:19664:38825 147 000000F 451 60 88M1D63M = 410 -193 TGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTT -A7AJJFJFJAFAFFAJJJJJJJJJJJJJJJJJJJJJJJJJJFJFJJJFJJJJJJJ<JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFA-JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFAA MD:Z:88^T63 PG:Z:MarkDuplicates NM:i:1 AS:i:144 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2119:27275:41321 147 000000F 451 60 88M1D63M = 190 -413 TGCAGTTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTT 7FJAFA<JJFF<JJJJJAJJJJJJJFFFJFAJJJJJJJFJJJJJJJJFJJJFJJJFAF<FFJJJJJJJJJJJFJFAFJFJFFJFJJJJAJJFJAFJA<JFJJJJJJJJFJAJFJJJFJJJFJJJJJJJJJJFJJJJJJJJJJJJJJFFAAA MD:Z:88^T63 PG:Z:MarkDuplicates NM:i:1 AS:i:144 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1123:20466:2909 147 000000F 451 60 87M1D64M = 126 -477 AGCAGTTAGAAAATAATATGATGAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGGTGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTT -A-7JFAAAA---7FFJAA<A<-F<7FAA7-AF-A-F7F-FJFFJAJJJJJFJFAAF77JFJFA7JFA7-JF7A<FFA-JAFAA-JJF7A-<<JF--7JFA7JFAF<<AAF-7-F--JJF7-AJJJF7F<JA7F77F-JFFFJ-FFFFAA< MD:Z:0T21C64^C10C15A37 PG:Z:MarkDuplicates NM:i:5 AS:i:128 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1206:27844:34359 147 000000F 452 60 86M1D65M = 156 -448 GCAGTTAGACTATAATATGATCAAAGCTGTTTGTTTACCTGTGTTGTTTGTGTGGTTCCTCTGGGTGCTGGCTATCATGTAAGGTAAGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGCCTGATTAGTTG -7--FF<7---7<---JJA<7-----<F<-7FJAF--)A-7-JAFJJFF7<<77----<F-77-AF7-AA--<AF-FF77-7JFJA77JJAJA77-7-J<JJJFJJJFJJFJAF<AFAAJJJ<---<--JJJFA-J7F7-<AJAA<-FAA< MD:Z:9A0A14T28C1C6C16C5^C0T52A10A0 PG:Z:MarkDuplicates NM:i:11 AS:i:98 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1224:10937:60343 1171 000000F 452 60 22S87M1D42M = 194 -388 AATTTTAGTTTGTGTGTGTGGGGCAGTTAGAAAATAATATGATCAAATCTGTTGGTTTACCTGTGTTGTTTGGGGGCTACGTCTGCGTGCTGGCGATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGAGGTCTGTCAACACAAC --7JAA--AAFA7-<)A-<-))<7-----7--7-----AA<7-A-7---AF<7-A-FJAFFJFFF<AF--A7-7<777-7-AAAJFFFJ<AF7---7-77FAJ<AFF7JJJF-<7----JFJJJFAF<FJJFAF7-F-FFJJFFAF777AA MD:Z:31T18T1T3C1C13T14^T26T15 PG:Z:MarkDuplicates NM:i:8 AS:i:87 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1122:14174:33252 147 000000F 452 60 8M1D77M1D66M = 420 -185 GCAGTTAGAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAG FJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFAA MD:Z:8^A12C64^C10C55 PG:Z:MarkDuplicates NM:i:4 AS:i:127 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2212:3133:36311 99 000000F 454 60 23S85M1D43M = 668 365 TGTGGTAGTGCCCACACGCTCGAAGTTAGAAAATACTATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACA AAAFFJJJJJJJJJJFAJFJJJJJJJJJJJJJJJF-<FFJJJJJJJAJJJ<FFJJJJJJJJJFJJ7J-AJJFJJJJJJJJJJJFJJJJJJJJJAJ-FJFJFJFJJFJJFA<FJJJJJF-<-AJFJJFJAF-FJJJ-F<AFJF--7-F-<-- MD:Z:12A72^T43 PG:Z:MarkDuplicates NM:i:2 AS:i:116 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2208:23490:63454 83 000000F 454 60 84M1D44M23S = 285 -298 AGTTAGAAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAACCTATTTACGATTCTGATTGGG FJFJJJJJJJFJJJJJJJJJJ-<JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFAA MD:Z:19C64^C10C33 PG:Z:MarkDuplicates NM:i:3 AS:i:111 XS:i:24 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2124:32491:66425 163 000000F 455 60 2S83M1D60M6S = 541 205 GTGTTAGATAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAATTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTCGTTCT <AA-<FJA--F-<FJFJJFJJF-<F7AFFFFFAFJFAAFJJFJFF-<JJJJJAFJJ7AJFJ<-7FFJJA<-FF-AFAJ-F--77-7-7<7FJ<77<<F-----7--77<-<--AJ-A7<A--7<A-<F<--7-<-7-A7F--A<F------ MD:Z:6A11C64^C10C9C39 PG:Z:MarkDuplicates NM:i:5 AS:i:116 XS:i:21 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1207:10013:15074 147 000000F 456 60 83M1D68M = 393 -215 TTAGAAAATAATATGATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATG AFA7F7AAJF7JJJJAJFA-7FJJJJJJFJJA7AJJJJFJJJFJJJJJAJAFFF7<<JJJJJJJJJAFJJFJFJJ-JFJJJJJJFJJFFJFFJJJJJJJJJAJJJJJJJFJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJFFFAA MD:Z:83^T68 PG:Z:MarkDuplicates NM:i:1 AS:i:144 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1220:31943:17658 147 000000F 458 60 81M1D70M = 64 -546 AGAAAATAATATGATCAAATCGGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTA -7----A7-7-<7-77---7<-7A<-<A-7A<AAFFJJJA-FA)A7<A<--<-F7<<-AJFAFA-7AJJFJJ<FF77JFFA77---77-A<77-JAJFFJ<F-<JJFJJJJJJJJAF7-JFFFJJJJJFJFFJJJJAJFJFJJJFF<FA<- MD:Z:21T59^T70 PG:Z:MarkDuplicates NM:i:2 AS:i:139 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1206:6542:38139 83 000000F 460 60 78M1D57M16S = 166 -430 AAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGCTCTGAGCTCGTAATC JJJJJJJJJJJJJJFJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFAA MD:Z:13C64^C10C46 PG:Z:MarkDuplicates NM:i:3 AS:i:118 XS:i:23 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1101:8339:18362 1107 000000F 460 60 78M1D57M16S = 166 -430 AAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGCTCTGAGCTCGTAATC JJJAAJJJ<FJJJJFFFJFFJ<FFJF<FF<FJJJJFJJJJJJJJJJFJJJJJJJJFJJJJFJJJJJJJJJJJJJJJJJFJAJJJFJJJJJJJJFJJJFAAJFJFJJAA7JJJFJAJJAJJJJJJJJJJJJF<-JJJFFFJJJJFFA7FA-A MD:Z:13C64^C10C46 PG:Z:MarkDuplicates NM:i:3 AS:i:118 XS:i:23 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1102:12104:32021 1107 000000F 460 60 78M1D57M16S = 166 -430 AAAATAATATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGCTCTGAGCTCGTAATC JF-FAFJAJFJFJA<<<-<AF<J777JJAFJJAAFJJJJJJJJFFFF7JFFJJF<<AFAJJJAJJJJJJAF-A7F<JJJJJJJFJJJJJAFFFAJJAFFJJJ<7J7JFFJJJJJJJFFFFJJJFJJJJJJJJJJJFJJJJAJJJJJFFAA< MD:Z:13C64^C10C46 PG:Z:MarkDuplicates NM:i:3 AS:i:118 XS:i:23 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1108:19958:55332 147 000000F 461 60 78M1D71M2S = 180 -431 AAATAATATGATCAAATCTGTTTGTTTAACTGTGTTGTCGGTGTGCTCCCACTGCGTGATGGCTATCATGACAGGTACGGTCAGGACCGGAGAGAAACTGAGGATGTATGACAACACAACAGAAAAAGTGACTGAGTAGTAAGATGTAATA JJF<<FA<-<--7<-7<FA--F<<-F<--A7A<-AF<-)-7---A7--F7-7-<77------7AAA-<7--A77--A7-77--7AA-7-AAAJJFFAA<--77<A7--<-7FJAJA<FJJJJFJF7-F-F-F-F<-FFF<-JFF7<AA-A- MD:Z:28C9T0T10T7C11T7^T4T17T6C2T24T4T8 PG:Z:MarkDuplicates NM:i:13 AS:i:82 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2210:18741:72209 83 000000F 467 60 71M1D58M22S = 154 -443 TATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGAAACCACCTGGGAGCTAATTGCC FJJFA7A-<<<7JJJJJJJJJJJJJJJJJJFFJJJJJAJJJJJF-JFJJJJJJJJJJJJFJJJJJJJJFJJFJJAF<JJJJJJJJJJJJJFJJJJJJFJJJJJJFJJJJJJJJJJJJJJJJJFFFJJJJJAJFJJAAJFJJJJJJJFFFAA MD:Z:6C64^C10C47 PG:Z:MarkDuplicates NM:i:3 AS:i:112 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2210:18751:72227 1107 000000F 467 60 71M1D58M22S = 154 -443 TATGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGAAACCACCTGGGAGCTAATTGCC FF7JJJJFA<7FJJJFFJFAJFFJJJJJJJJJJJJJJJJJJJJFJJJJJJJJAFJJJJJJJJJJJJJJJJJJJJJJJ<<JJJJAJJJJJ7FJJJJJJJJJFJJJJJJJJJJJJJJFJJJJJJFFJJJJJ-FJJAJFJJJJFJJJJJFFFAA MD:Z:6C64^C10C47 PG:Z:MarkDuplicates NM:i:3 AS:i:112 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1114:6238:60009 163 000000F 468 60 71M1D80M = 824 484 ATGATCAAATCTGTGTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTTGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACACAAAAAGTGAGTGATTAGTTAGAGGTAATTAATTTCA AAAAFJ7AA-FJJJ-FFJ7A-<7FAFJF<F7FFJJA<FJF7-A<JAJJJJJJ--<AAFAFFJ<FJ<A7---7-<<A-FFAA-F-77A7-77AAAJ<--A<AAFFJ-<F7A7-7----7--A<A7--7---7<-----77---<-7------ MD:Z:14T38G17^T43G9C12T4C8 PG:Z:MarkDuplicates NM:i:7 AS:i:114 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1119:7760:27802 163 000000F 470 60 69M1D82M = 563 217 GATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAAC AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJFJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ<<JFJJJJJFJJJJJJJJJJF MD:Z:69^T71C10 PG:Z:MarkDuplicates NM:i:2 AS:i:139 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1202:2219:21087 177 000000F 471 60 67M1D46M38S = 106 -399 ATAAAATCTGTTTAATTACCTGTATTATTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCAGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGATTTTATCATATTATTTTCTAACTGCACAATAAATACAA A7----A<A7--7---FFAFA77-------7-A-A)AJJ<FA---<F-7----AJFFJF-AFF7<<FAF-7--A-<-7AJJFJFFAF-7--<AJFFF-<-77JFJ<<FJJJJJJFFJJJFJFJJJJFJJAJ<F77JJJFFJJJJJJFFFAA SA:Z:000000F,57531,+,44M107S,60,1; MD:Z:2C10G0T8G2G40^C5T4C35 PG:Z:MarkDuplicates NM:i:8 AS:i:73 XS:i:19 [...]
+ST-E00128:308:HHVVLALXX:8:1206:14306:28417 147 000000F 471 60 68M1D83M = 297 -326 ATCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTATGCGTGCTGGATATCATGACAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACT A-A-JF--<<<AFFA<--AJ<F7FA<AA-F7<7)JJF-<F7--F7F7A<F-7-7-F77---FA7<JA7-A7-A7-7AJJAA-F-JJJFFJFJFJJJFJF<-JJJF<JJJFJJJJJJ<A<FA<A-7FF<FFA7FJFJFJ-JFJJF<<-FFAA MD:Z:41C10C7T7^T71C11 PG:Z:MarkDuplicates NM:i:5 AS:i:124 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2118:1336:14600 99 000000F 472 60 22S67M1D62M = 660 339 NCTAGCAAGCTTGTACTAATAGTCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGT #AAFFJJJJJJJJJJJJJJJJJJJJAJJJFAJJJFJJJAFJJJJJJJJJJJJJFJ7FJJJJJJJFJFJAJJFAJJJJFJJJJFFFJJJJJFJJJ<AJJJAA77AA7AAJAFFJFJJJJJJFFJFFFFFFAJJJJJJJJAAJFJJFJJJJAJ MD:Z:67^T62 PG:Z:MarkDuplicates NM:i:1 AS:i:122 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1121:25560:47527 83 000000F 472 60 67M1D62M22S = 272 -330 TCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTACCCGGAGGGAACTGAGCCAAG <AJJJJJJJFFF-JJJFFFJFJJJJJJJJJJJJJJAJFFAJF7FFJAJJJJJJJJJJFJJJJJJJJFFJFFAA<FAJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJAJJJJJJJJJFFJJJJJJJFFAAA MD:Z:67^T62 PG:Z:MarkDuplicates NM:i:1 AS:i:122 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1203:11373:34447 1107 000000F 472 60 66M1D64M21S = 303 -300 TAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTCGGCGGACAACGGAAACCATC AJAA7JJFJFFFJJFF7FJJJJJJFFFJJJJFFJFAF-J<JAJAJJJJFJJJJJJFJJJFF<JJJJJJFJ<JJJJFJFFJJJJJJJJJJJJJJJJJJJJJJJJJJFJF7JJJJJJJJJFJJFJFJJJFJJJJJJJJJJJJJJFJAFFFFAA MD:Z:1C64^C10C53 PG:Z:MarkDuplicates NM:i:3 AS:i:116 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2212:11799:24040 83 000000F 472 60 66M1D64M21S = 303 -300 TAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTCGGCGGACAACGGAAACCATC JFAFJJJJFFJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJFJJJJJJJJJFJJJJJAJJF-JJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFAA MD:Z:1C64^C10C53 PG:Z:MarkDuplicates NM:i:3 AS:i:116 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1214:31487:14687 163 000000F 473 60 66M1D85M = 661 278 TAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTAT AAFAFJJJFJJJJJJJJJJJJJ7FJJJJJJJJJJJJJJJJJJJJAFFJJJJJFJJJJJJJJJJJJJJJJJJJJFFJFJJFJJFJJJJJFJJJFJJJJJJJJJJJJFJJJJJJJFJFJFFJJJAA-AFA<AFFFJJJJJAFJJF7F<---AA MD:Z:0C65^T71C13 PG:Z:MarkDuplicates NM:i:3 AS:i:138 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2111:16315:53240 99 000000F 473 60 41S66M1D44M = 561 187 CCAGCGACACTGCGCATATCTATCTAACTGCACAATAAATACAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAG AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJAJFJJJJJJJJJJJJJJJJJJJJJJJJJJ7 MD:Z:66^T44 PG:Z:MarkDuplicates NM:i:1 AS:i:103 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2120:25408:5458 163 000000F 473 60 65M1D86M = 519 183 AAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTAT AAFFFJFJAJFFJJJJJJJJFJFFJJFFAJJJJJFJAAAJ<JJJ<7J<FJJJJAJJJJFJFJJFJFJJJJJ<JJJJJJJJJJJJJJFJJJJFJJAFF7A7FFAFJJJJJJJJJJJJAAF<<AF-AFJ<7FAFAJ<FJJJJJ--<7AJF--- MD:Z:0C64^C10C75 PG:Z:MarkDuplicates NM:i:3 AS:i:138 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2102:31335:43431 99 000000F 473 60 16S66M1D69M = 842 520 TGCCCATAGTGGTACGCAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGT AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJAJJJJJJJJJJJJJJJJJJJJJFFJJJJJJJJJJJJJJJJFFFJJJJJJJJJJJJJJ MD:Z:66^T69 PG:Z:MarkDuplicates NM:i:1 AS:i:128 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2105:5304:5370 99 000000F 474 60 20S64M1D67M = 861 538 CTAACGAAGGACTGGTGATAAAATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGA AAFFFJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFJJJJJJJJJFJJJJJJJJJJJFJJJJJJJJJJJFJJFFJJJJJJJJJFJJJJJJJJJJFJJJFJJJJJJJJFJJJFJJJJJJJJJJJJJJJJJJJJJJJ<JJJJJJF< MD:Z:64^C10C56 PG:Z:MarkDuplicates NM:i:2 AS:i:119 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1203:28270:39528 83 000000F 476 60 63M1D67M21S = 252 -355 ATCTGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATACATTCGCTTTCGAGGGTGAT JJFJJJJJJJJJJJJJJJJJFFJJJJJAJFJFJJJJJJJJJJJJJJA<JJFJFJJFFJJJJJJJJJJJJJFJFFJFJJFJJAJFJAFFJJJFJFJJJJJJJAJJJJJJJ7JJJJJFFJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFFAAA MD:Z:63^T67 PG:Z:MarkDuplicates NM:i:1 AS:i:123 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1204:21044:42622 177 000000F 477 60 26S62M1D63M = 12 -464 TGCAGTTAGATAATCCACTGATACACTCTGTTTGTTTCCCTGTGTTGTTTGTGTGCTACCTCTGCGTGCTGGCTCTCATGTCAGGTACGGTATGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTT F<-<----<7----)-----7-----<-77<-A-7-)))-<A-A--<---7FA-A7--7J7--777<-<A<-JF7JFJ-A<7<FF-AF77FAFJJA7--<-JJJA<---<-FF<-JJJJJFJJF7FF--<JFJJJJJJJJJJA7F-FA7A- MD:Z:11A19C16A13^T3C5C53 PG:Z:MarkDuplicates NM:i:6 AS:i:93 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2103:17249:63437 99 000000F 479 60 20S60M1D71M = 663 336 CAGCTGGGTTCAAGCTGAAATGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAA AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJA-FJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJFJFFJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ MD:Z:60^T71 PG:Z:MarkDuplicates NM:i:1 AS:i:124 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2224:13494:1133 99 000000F 479 60 20S60M1D71M = 737 278 NAGCTGGGTTCAAGCTGAAATGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTCTCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAA #AAFFJJFAAFAJ<FAFFJJJ<-FAJF-FFF<7F---<<-<-F-FFJFF7FJFF77JAA7J<AAJ7-FJF-<<AAA<AAFFJAJ7A<-AA-A--7AAJFJ7<--7-<JFF<-FJ<AJFF-7A<AF<--77<F-7-7---77A-AJJA<-<- MD:Z:46A13^T71 PG:Z:MarkDuplicates NM:i:2 AS:i:119 XS:i:22 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2222:19278:16287 83 000000F 479 60 59M1D70M22S = 301 -308 TGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTCACCGACCGTGGATGGTCTCGG JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFAA MD:Z:59^C10C59 PG:Z:MarkDuplicates NM:i:2 AS:i:117 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1102:11769:66425 99 000000F 480 60 20S58M1D73M = 605 263 GCCATGGGTACACCGCAAAGGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAAC AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJFFJFFAJJJAJJJFJFJJJJJJJJJJJJJJJJJ MD:Z:58^C10C62 PG:Z:MarkDuplicates NM:i:2 AS:i:119 XS:i:21 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1111:12865:16920 1123 000000F 480 60 21S58M1D72M = 817 488 CATTACTTCGTTGAGTTCGTAGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAA AAFAFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJFJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ<AFFFJJJFJJJJJFJ MD:Z:58^C10C61 PG:Z:MarkDuplicates NM:i:2 AS:i:118 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1111:12824:16990 99 000000F 480 60 21S58M1D72M = 817 488 CATTACTTCGTTGAGTTCGTAGTTTGTTTACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAA AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFF MD:Z:58^C10C61 PG:Z:MarkDuplicates NM:i:2 AS:i:118 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1119:26017:2188 147 000000F 487 60 52M1D99M = 289 -350 TGCCTGTGTTGTTTGTGTGCTCCGTGTGCGTGCTGGCTATCATGTCAGGTACGGTGTGGACCGGAGAGAAGCTGTGGATGTCTGTGAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTA 7))--F7F<-JF<-F7JA-)))))))JF)JJF<FJF---7--JJF<FJJ<--FF7-<FA---AF<A-7-7---JA-FAJJF-FAF--FF-7AAF-<-----JA7-<JFF<FFJJFAF<FJAF<JJA<JFF<---AFJF<7JFAAF<FFAAA MD:Z:1A21C1C26^T3C14A14C37C27 PG:Z:MarkDuplicates NM:i:8 AS:i:112 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1123:10155:40389 83 000000F 487 60 51M1D83M17S = 265 -357 TACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACACCCAATCACAAGATGT <-FAJJFJJJJJFJJJF<JJJJFJJFAJJJJFFJJJJJJFJJJJJJJJJJJJJJJ<FJJJJJJJJJJJJJJFJJFAJJJJJJJJJJJJJFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJFJJJJJJJJJFJJJFFFAA MD:Z:51^C10C72 PG:Z:MarkDuplicates NM:i:2 AS:i:122 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2121:22374:42394 1171 000000F 487 60 52M1D99M = 212 -427 TACCTGTGTTGTCTGTGTGCGCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTACTTTCAACTATCTAGTCTTCCTCTA FAFJJFFF<-<7-AF7)-AA)A7JA7FAAFJFAF<7A<JJFJJJJ7<FJFFJFJJJFAA77--FAA-F-F7JJJFFJAJJJAFFJJFFJAA<FFJJJJJJFFJFA<FJJJJJJJJJJJJJJJJJJAFJFJJJFA<JAJFJAFJJFJFFFAA MD:Z:12T7T31^T71C2A24 PG:Z:MarkDuplicates NM:i:5 AS:i:124 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2121:22394:42394 147 000000F 487 60 52M1D99M = 212 -427 TACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTA FF<JJJJJFJJJFA77A7JAA-AA7<JF<AJJFAJJJJJJJFJJJFJJJJJJJJJJJFFJJFJJJJJJJFFJJJJFJFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFAA MD:Z:52^T71C27 PG:Z:MarkDuplicates NM:i:2 AS:i:139 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2208:28148:32144 99 000000F 488 60 37S51M1D63M = 874 537 CACTACCAGCTCCTCTACCTGAAGCTCCTCTTAACTCACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTATGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAGAAGTGACTGATTAGTT AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJ-AFJJJJJJJJJJJFJJJJJJJJJJJJJJJ-<AFFJJJJJJJJJFFJJJJJJJJJJJJJJFFJJFJJAJJJJJ-7FJJJJJJJJJJAJJF MD:Z:51^T3C42A16 PG:Z:MarkDuplicates NM:i:3 AS:i:97 XS:i:21 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2109:24444:12824 99 000000F 488 60 20S51M1D80M = 886 539 GCTTCACGACTAACCATCCCACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGTATAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCA -AAFFJJFJJJJJJJFJJJFFJJJJJJFF-FJJ<7FFJJJAJFJJJ<JJAJJJFFA77<FJJJJJFAAFFJF<7AAAJFJJJ----FJJFJFF-<<JJJAFFJJJJJJJJJFJJJFJJF-A<FFA-AF7FJJF-AFJ7AFJF<JJ77F-<- MD:Z:51^T11G1G57C8 PG:Z:MarkDuplicates NM:i:4 AS:i:109 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2102:32065:1239 99 000000F 488 60 23S51M1D77M = 930 593 NTCGCCAGTTCCTGGGGGGGCCCACCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATT #AAAFFJJJJFFJJJJJJJJ<JAFJJJJFJJJJFJJJJJJJJJ-FJJJJJAFAJAJJJJJAJA7FJJ--JJJ-AJFJFJJJAAFAJ<J-J7AAJJJJJJFJJJAFF7AAJAAFAJJJFFJJFFJFJAFJJFJJJJJJFJAJJJJFJAJAJ< MD:Z:51^T71C5 PG:Z:MarkDuplicates NM:i:2 AS:i:116 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2110:3863:61591 99 000000F 489 60 20S50M1D81M = 857 493 GATCGTATCGTCTGCTCCGTCCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAA AAFFFJJJJJJJJJJJJJJAJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFJJFJJJJJJJJJJJJJFJJJFJJJJJJJJ MD:Z:50^T71C9 PG:Z:MarkDuplicates NM:i:2 AS:i:119 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2121:6005:45681 99 000000F 489 60 38S49M1D64M = 797 451 GACTGCGCAGCTGGCTAGAAGCCAGCTGGCTTAGGCCTCCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTT AAFFFJJJJAJFJFAFJJJJJJJJJJJ<AFA7JFFJJJJJAF7A-FFJJJJJJJJJJ-FJFJJJJJJJJFJJJJ7FJJJJJJ7<7JJAJF7<-F<FFJFJ7JJJ<J-AFJAJJJ7FJJJF-AFFFFAFJ<FFF<-AJ<<AA<FFFAJF--< MD:Z:49^C10C53 PG:Z:MarkDuplicates NM:i:2 AS:i:101 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1123:28757:7251 147 000000F 489 60 50M1D55M46S = 178 -417 CCTGTGTTGTTTGTGTGCTCCCTCTTCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTAGATAGTTGAAATTAATTACATCTAACTAATCAGTCACTTTTTCTG )-<-A-FAF<A7A7-))-)JJA<7-)<)7<FA--FA7FJF-)JAF7)FA--JFFFF7JJFJF<77-FA-AFFFJAJJJJJFFAFFJFFAFFJJFJJA<JAFJAJJ<-FFF<<FJJJJJFJJJJ7JJJJJJJJJJJJJJJJJFJJFJFAAAA SA:Z:000000F,57673,+,50M101S,60,1; MD:Z:25G24^T55 PG:Z:MarkDuplicates NM:i:2 AS:i:93 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2203:25936:68887 83 000000F 490 60 68S48M1D10M25S = 492 -57 TTGTGCTCAATTTTACGTTGTACGTGTTGGGGAGGTAGAAATTGAGTTCAGACGTGCAGTTTTTTTATCTGTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAAGGTCCATACCCACGAGTCCC -----7--AA7---7---<<F7--7--A7-77---7-7-7----F7-A-7-77------A-<-7--A-FJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJAJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFAA MD:Z:48^C10 PG:Z:MarkDuplicates NM:i:1 AS:i:51 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2108:1407:24251 1187 000000F 492 60 46M1D10M95S = 422 57 GTGGTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGGCTGCCTACCCGCGAGGGCCAGAGCGTGAGGGCGCTGTGGAGGGGGAGGGTGTAGTTCTGTGTTGGCGGGGTAGGTGTGGGCGGGGCGAG A<AAFJJJAFJJF<FJJ7<JFAFJJJ<7FJFJFJJ<JJFJFJFAAFJJJJFFJJ-7<A---7-7---A777F7777----7AF--77--77------77----7-777)-)-7------7--77-----)7-)))-77--7)))))))))) MD:Z:3T42^C10 PG:Z:MarkDuplicates NM:i:2 AS:i:45 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2203:25926:68869 1187 000000F 492 60 46M1D10M95S = 422 57 GTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGGGTCCATACCCACGAGTCCCAGATCGGAAGAGCGTCGTGGAGGGGAAGAGTGTAGATCTCGGTGGTCGCCGTAGCATTAAGAATGTGTAG AAAAFJJJJJJJJJJJJJJJJJFAJJJJJJJJJJJJJJJJJJJJJJJFJJJJFJJJJJJJ-AAJ77AAJFAF7AF<-AA-<<7FFFF--777---7-A----7AA))77----A-7-7FFAF77)-)7A-7--<)7-------7-7----- MD:Z:46^C10 PG:Z:MarkDuplicates NM:i:1 AS:i:49 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2203:25936:68887 163 000000F 492 60 46M1D10M95S = 490 57 GTGTTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAAGGTCCATACCCACGAGTCCCAGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGGTCGCCGTATCATTAGAAAAAGCTCG AAAFFJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJ<JAJ-AJFFJ-FJAA<7AJJJJAJJ<<J---A<7A<-FA-<-7---7<AAAJJF7JFJJJJF7)77)))<)7--7--7--7<-7-7-7- MD:Z:46^C10 PG:Z:MarkDuplicates NM:i:1 AS:i:49 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1109:18446:53908 99 000000F 495 60 21S44M1D86M = 638 256 CGGAACCCATAGAGGCAGCAATTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATC AAAFFJJFJJJJJJJJJJJ<JFJ7JJJJJFJFJJJJJ<JJJJJFJJJJJJJJJJJJJJJJFJJJJJFAJJJJJJJJJJJJFFJJJJJJJJJJJJJJJAJJJJJJJJJA<JJJJJJJJJJAF<FJJFJJJJ<<FJJJJJFAAAJJFJJJJFA MD:Z:44^T71C14 PG:Z:MarkDuplicates NM:i:2 AS:i:118 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1120:18101:8974 99 000000F 495 60 23S44M1D84M = 807 463 CAGGCGTCAATAAGCACGTTAGATTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTA AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJ7JJJJJJJFJJJ<FJJJJFJJJJAFFJJJJAAAFJFJJJFJJJJ MD:Z:44^T71C12 PG:Z:MarkDuplicates NM:i:2 AS:i:116 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1119:26606:62206 83 000000F 495 60 43M1D90M18S = 145 -484 TTGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGCCTATCTGTACTGCCTAA AAJJJFJJJJJJJJJJJFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJFAJJJJJJJJJJJJJJJJJJJJJJJJJJFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFAAA MD:Z:43^C10C79 PG:Z:MarkDuplicates NM:i:2 AS:i:121 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2207:2666:63876 163 000000F 496 60 5S43M1D98M5S = 663 277 AGTGGTGTTTGTGTGCTCCATCTGCGTGCTGGCGATCGTGGCAGGTACGGGCTGGACCGGCGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTCGATGGAATTGATTTCAACTGTCTAGTCGTCCTCTCAAGG <A--7<----7F7A<A--7-<<-7<F-AFAAJ-<J7F-<7-7FF77AFAJ-7J-JA7A<--7-7-F-<A-7----7-77-7A-77<----7F7F---77--7-------7-----7)7--------7--7--7--7-<-A7-7))7)7A<- MD:Z:14C13T3A2T7^T2T9A50A4T2C1A9A7T6 PG:Z:MarkDuplicates NM:i:13 AS:i:74 XS:i:21 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2102:4381:6935 163 000000F 496 60 43M1D68M40S = 873 502 TGTTTGTGTGCTCCCTCTGCGCGCTGGCTATCATGACAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAATGACTGATTAGTCAGATGGGAGTGACTGCAACTCTCAAGTCTTCCTCCAAATCCGCAC AA7FF<---<A---77F--AJ-7<FJ<JJ---A---<-FFF----<-<7AAJFJJ-7FAJ<-7-AFAJFJJ7A-7AA<AAJJFJJJJ7---7-7--777A7-----77----)-)-)7-77<FF-7--7----7-<-7--))-------)) MD:Z:21T13T7^T49G12T5 PG:Z:MarkDuplicates NM:i:5 AS:i:84 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2110:17350:53029 83 000000F 496 60 42M1D93M16S = 62 -570 TGTTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTAGCCAGCTGCGCAGTC AFFJFJJJJJJJJJJJJJJJJJJJJJJJJFFJJJAJJJJJJJJAFFFJJJJJFJJJJJJJJJJJJJFFAJJJJJJJJJJJJJJJJJJJJJJJJJFJJFJFFJJAJJJJJJJJJJJJJJJJFJJJJJJJJJFJJJJJJJJJJFJJJJFFFAA MD:Z:42^C10C82 PG:Z:MarkDuplicates NM:i:2 AS:i:123 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1217:7973:42341 99 000000F 498 60 36S40M1D75M = 680 333 GGAGAACCAACTGCTACGCACACAACTGCTATCTTCTTTGTGTGCTCCCTCTGCGTGCTGGCTATAATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGGCAACACAACAGAAAAAGTGACTGATTAGTTAGGTGTAACTA AAFAF-F7FA--FAFJ<AJ-77-FFF7-<7-<7---7A--<<FFJAA<<77FAF<J<JJ<-77<<--<F-AF<A-A--<--7FJA77<F7A7F-<AA7--AAAA7AAA<-7<AAAAF-7--7AAA-------77F------F--7---7-- MD:Z:29C10^C10C22T32A8 PG:Z:MarkDuplicates NM:i:5 AS:i:88 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1204:26311:52590 99 000000F 499 60 21S39M1D91M = 854 506 ACCCAAAAGACAGCTGGGTAGTTGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGT AAFFFJJJJJJJJJJJJJ<AFFJJFJJJJFJJJJJJJJ<JFFJFJJJJFJAAJ-F7AJFFJJA<7AFAJJ-A7FA-AF-7AFFJJJJFJJJJ<AFJJJJJJJJJFAJFJJ<-AFJJJF<AF7-7FJFJJAFJJ7FAA-77AFJAFAA-<J- MD:Z:39^C10C80 PG:Z:MarkDuplicates NM:i:2 AS:i:118 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1218:8856:69221 163 000000F 500 60 38M1D94M19S = 693 326 TGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTCATTTCCACTATCTAGTCTTTCTCTCCAGCACCCTACTT AAFFA<JFJFFFJJJJJ<JFJJ<J<FF7JJJF-FJFJFFFFJFFJJFF7AFJJJJJJJJ<7FF<JA7AJJJJ-F-7AAFJFJFF<FFF<<-7--7A-<FF-A-<A-77--AF--7F7---AF7A-<-7<FFF-7----)7)))7<-<FF-- MD:Z:38^C10C63A5A13 PG:Z:MarkDuplicates NM:i:4 AS:i:110 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2214:4564:20893 99 000000F 500 60 22S38M1D91M = 642 298 ACACGTATCGAATCCAAGGCTATGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGT AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJAJJJJJJJJJFJJJJJJFFFJFFJJJJJJ MD:Z:38^C10C80 PG:Z:MarkDuplicates NM:i:2 AS:i:117 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2123:21217:42851 1107 000000F 500 60 39M1D96M16S = 286 -350 TGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTGTCCAATGACGTCTAA AAJ<J<<<F<FAAAFJFA---<FFJFFJAAJFJJJAJFJJJJJ<<F<AA<77<F7-JJAJJAA-7JJJJJFA7F<7<-FF7-AFJJFFJJF7FFFJJJJJJFJF<JJJJJJJJFJ<F-J<<-AAFFFAFJF<A7FA-FAFF7JJJAAAAAA MD:Z:39^T71C24 PG:Z:MarkDuplicates NM:i:2 AS:i:123 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2213:6989:46085 83 000000F 500 60 39M1D96M16S = 286 -350 TGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTGTCCAATGACGTCTAA JJJJJFJFJJJFJJFFJJJJJJJJJJJJJJJFFJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFAA MD:Z:39^T71C24 PG:Z:MarkDuplicates NM:i:2 AS:i:123 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1111:30350:55403 163 000000F 501 60 38M1D113M = 647 269 GTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTT A<A7FJAJJJFJJAJJ<JJJJJJJJJJJJJFF7JF-AJJJFJJJJFJJJJ77JA-<<FJJJJJFFFJJJJJJJJJJJJAJJJJJJJFFAFAFFAFFAJJ-AAFJJJFFFFFFJJJJJFAFFF-AJFFJJAJFJJAJJ7F<FAAJFAFJJFA MD:Z:38^T71C41 PG:Z:MarkDuplicates NM:i:2 AS:i:139 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1218:27387:9941 99 000000F 501 60 25S38M1D88M = 734 384 CCACCTACACGTCTCTTGTTCATTAGTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTA AAFFFJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJFFFJJJJFJJJJJJJFJFJFJJJA MD:Z:38^T71C16 PG:Z:MarkDuplicates NM:i:2 AS:i:114 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2113:4391:59270 163 000000F 501 60 38M1D113M = 704 332 GTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATTTCTGTCAACACAACAGAAAAAGTGACTGATTAGCTAGATGTAATTAATTTCAACTATCTACTCTTCCTTTAAAGACCCCTACTTT AAAFAJFFJJJAJJJJJFJ<FJJJFFJJFAJJFJFFJJ<-F<J--<A<-77AF--7-<<-7<FAF-7FJ-7AAAJFJJJJJ-FJAJ-7<7FF-A-7<<--7F-7F---7<FF77FJ<A-A-------7-7<-<----7--7<-7<A)7-<A MD:Z:38^T27G33T9C16G7C16 PG:Z:MarkDuplicates NM:i:6 AS:i:119 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2116:4817:30545 83 000000F 501 60 38M1D97M16S = 440 -197 GTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCATGTGAAGAGACGATG FJF)-JFJJJJJJJ<JF-JJFFFJFJFF<FJF7AFJJJJJJFJJJJJJJJFJJJJJFJJJJJJJJJJJJJJJJJJJFFJJFFJJJJJJJ<FJJJFJJJJJJJFFJJJ<FJJJJJFJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJAFFAAA MD:Z:38^T71C25 PG:Z:MarkDuplicates NM:i:2 AS:i:123 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2214:5649:31916 147 000000F 501 60 38M1D113M = 282 -371 GTGTGCTCCCTCTGCGTGCTGGCTATCACGTCAGGTACGGTCTGAACCTGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTAAATACCCCTACTTT 7<7)--)<--)-)-)<)<--<--7-<)-))77-A--7)---7---<--7-A7A-AFA-F--<-FF-A-7-JJA-77-A7<-JJJJJFA-7--J<-JF-<F7---J-FFF-JFJJFFFJJF-FFFF7<JAA<F<---<-----F7-<---<< MD:Z:28T9^T6G3G60C29G11 PG:Z:MarkDuplicates NM:i:6 AS:i:119 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2124:10855:4614 65 000000F 502 60 23S36M1D92M = 1015 514 CCAACTCCAACAGCCCGAAACATTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTC AAFFFJJJJFFJJJJJJJJFJFJJFJJJJJFJJJJJJJFFJJJJJJJJJJJJJJFJFJJJJJFFJFJ<FJJFAAFF<FAJJFA<JFJJJJJFJJFFAFJJJJJFJFJAFFJ<<AAAAJ7AFJJJJAFFFJFFFFAJFJFFFJJA<7<J<7A MD:Z:36^C10C81 PG:Z:MarkDuplicates NM:i:2 AS:i:116 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2118:10155:56633 99 000000F 502 60 23S37M1D91M = 806 455 TCCACCATCAAGTGCTCACCGGTTGTGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTC AA-FFJFJJJJJJJJJJJJJJA77FJAJJJJF<JAJJJ<JJJJJJJFJFFFJJJJFA-FFAF-AA<A<AFFJJAJJF<FFJFAJJ7JF<FJJFFFJFJJJJJFFJJJJ<FJ7F<AJFJFAJJFFJ---<FAF-FFJ7JF<-F-F7FFJJJ- MD:Z:37^T71C19 PG:Z:MarkDuplicates NM:i:2 AS:i:116 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2103:17168:17026 147 000000F 504 60 34M1D117M = 137 -519 TGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACCTTAAC )<AAJAFJJFFFAAJAAA<JAJ<--A77--FJ<A<AF7JFF<A<FJJJJFFFJJJJJJJJFJJJJFFJJJJJJFJJJJJJJJJJJJJJFJFFJJJJJJFJFJJJJFFFJJJJJJJJJJJJJJJJJJFJJJJJJJFJJFJFJ<JFF-FFFAA MD:Z:34^C10C100T5 PG:Z:MarkDuplicates NM:i:3 AS:i:134 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1209:8207:57899 147 000000F 504 60 35M1D116M = 211 -445 TGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAAC -JA7JJAJJJ<JJJJJJJJFFJ<JFJJJJJJJJJJJJJJJJJF<AAJJFJJFAFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJFJJFJFJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFAAA MD:Z:35^T71C44 PG:Z:MarkDuplicates NM:i:2 AS:i:139 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2123:12662:68254 147 000000F 504 60 34M1D117M = 439 -217 TGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAAC 7JJJJJJAJFJFAJJJAF<A-JJJJJ7<JJAFJJFAJAFFJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJFJJJJJFFJAAAAA MD:Z:34^C10C106 PG:Z:MarkDuplicates NM:i:2 AS:i:139 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1207:30350:65459 147 000000F 504 60 34M1D103M14S = 221 -421 AGCTCCCTATGCGTGCTGGCTGTGATGTCAGGTATGGTCTGGCGAGGCGAGAAACTGTGGGTGTCTGTCAACACAACAGAAACAGTGCATGATTAGGTAGGTGTGACTACTTTCAACTATCTAGTCTTACTCTAAAGCCCAGTACTATAGC )77------7)FAA7-7<--7-<-FJ<7<--A-FA-<)A77----77---<-7A<FF<F7--F7-AAFFFJJ<FAJ<JF7FF-FF77--A--A<<7-<---7<--FAF<-A7<-<--F<---F<7F<--F7<--7-77-<--7-----A<- MD:Z:0T7C12A1C10^C8A0C0C2A12A21A4A0C7T3A3A4A18C8 PG:Z:MarkDuplicates NM:i:18 AS:i:49 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2221:25723:22317 1171 000000F 504 60 35M1D116M = 211 -445 TGCTCCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAAC -JAA-7)7<<JFA7<-7AA7A<A7J<A-<<<7A<<A<<)A<A-A7)7-A<--<A<<F<7--JFA<JJAJJJFJFJAJJJFJFJJJJJJAJ<JAAJFJ<JJFJJJJFFJJJJFFJAJ7F-FJAJFF-JFFFJFJAJF-JJJJFAJJFFFAAA MD:Z:35^T71C44 PG:Z:MarkDuplicates NM:i:2 AS:i:139 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2223:12185:1573 1171 000000F 504 60 35M1D116M = 211 -445 TGCTGCCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAAC 7<<))<-A)7-7<<<)--7FF<A7-F<JJFJA7F<FFAF<AJJJAJFF7<F-F-FFJFAAAJFJFJAJJJJJJJFAF-JJFFF7J<J7F<FF-FAFJFFJJFJFJJJJJAJFJA<---J<<-JFJJ7<FJJF-<F7F<JFJJF7FA<7A-A MD:Z:4C30^T71C44 PG:Z:MarkDuplicates NM:i:3 AS:i:134 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1216:23957:32900 147 000000F 506 60 5S32M1D114M = 200 -453 TTGTACTCCCTCTGCGTGCTAGCTAACATGTCAGAGATGGTCTGGACAGAAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCAAGTCTTCCTCTATAGACCCCCACTTT ---7)))-JFA)7)A-7----7-<--FAA7A7----<FAF---7--FFF-FJJJF<FA-77JFFAAJJFF<JJA-7--JFJFAA7JAAAFJJF<JAJFJA-FA7F-FAF-<-JF-<--F7<<-7--AF-F<--F-FF-F-AF<A--FFA-A MD:Z:15G4T8G0T1^C10C1G74T12A7T5 PG:Z:MarkDuplicates NM:i:10 AS:i:94 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2116:13636:70152 99 000000F 510 60 21S28M1D102M = 686 286 AAAGCTCTCCAAACCAGACAGCTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAA AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJAJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJFJJJJJJJFJJJJJJJJJJJJJFJJ MD:Z:28^C10C91 PG:Z:MarkDuplicates NM:i:2 AS:i:118 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1114:20973:29244 1123 000000F 510 60 22S29M1D100M = 569 206 CAGCTGGGTACTTGGTTCGTTGCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGCCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTAA AAFFFJJJJJJJJFJFJJJJJJJFJFJJJJJJJJJJJFFJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJAJFJFFJJJJJJJJJJJJJJJJJJJJFJJJJFFAJFAJJJJJJJJJJJFJFFFJJJJJJJJJJJJJJ7JJ<JFAF MD:Z:29^T32T38C28 PG:Z:MarkDuplicates NM:i:3 AS:i:112 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2117:5761:72508 99 000000F 510 60 22S29M1D100M = 569 206 CAGCTGGGTACTTGGTTCGTTGCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTAA AAAFFJJJJJJJJJJFFJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJFJJFFJJJJJJJJJJJJJFFFFJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJFJJFJJJJJJJJJJ<FFJFJFJFJJJJJJJJJJJFJAFJJ MD:Z:29^T71C28 PG:Z:MarkDuplicates NM:i:2 AS:i:117 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2123:16295:32426 1123 000000F 510 60 22S29M1D100M = 569 206 CAGCTGGGTACTTGGTTCGTTGCTCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTAA AAAAFAJFJFAA<FA-<FJAJFA-AAFJFJFJFJ7FJJJJ<FJFAJ-FJJFFAAJJJFFJJJJ7-A<-A-<F<AFJFJFAAJAAJFJAJFFAFFFJJFJ-7-7FFAAJJJJJFA-A7AAJJ<<<<-<F-AF7FJFFJJJJFAFFAAJFFA< MD:Z:29^T71C28 PG:Z:MarkDuplicates NM:i:2 AS:i:117 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2202:16133:57600 147 000000F 510 60 28M1D45M1D75M3S = 257 -403 CTCTGCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATT <-JF<FAJFFAJFJF<AF<A7<FJF<JF<7FJAJ7AJJJJJ<JJJJJFJFFFJJFFFJFFFF7JJJJJJJJJJJJFFJJJJJFJJJJJJJJJJJJJJJJJJJJJJFFJJJJJJJJJJJJJJJJJAFFAFJFFJJJFJFFFFJAFJJFAFAA MD:Z:28^C10C34^A75 PG:Z:MarkDuplicates NM:i:3 AS:i:129 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1114:2686:25411 83 000000F 511 60 28M1D101M22S = 234 -407 TCTGCGTGCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAGCTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTAAATTGACTGTCCTGTACACTCCCT F7FA)JAA<AFF7--7-7FF7-<JJA7JJJF-JJAA-AJJFJJJJF-JJJJJJJJJJJJFFJJJJJJJFFJJJJAFJJJJJJJJJJJA<JJJJAJFF-JJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJFJJF<JJJJJJJJJJJJFFFAA MD:Z:28^T18A52C29 PG:Z:MarkDuplicates NM:i:3 AS:i:112 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1211:22262:1836 147 000000F 513 60 26M1D120M5S = 208 -452 GGCGTGCTAGCTATCATGTCAAGAACGGACTGGACCGGAGAGAAACTGTAGATGTGTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTCTCTAGTCTTACTCTAAAGACACCTACTTTAACACAAATTAC 7<A----7--AAFFF<------7-AA<7--))AA-JFAFFA7---A----A-A<7---7FA-A<-JJJJA<<--AAJA-AJFJ--FFJ7<7A77F7-<-<JJJF<-FFF-A--7--A---JJF-<JFF7<-JF-JFAFJJFAJF-<-7-A< MD:Z:0T7G12G1T2^T2T20G5C41C11A9C10C15 PG:Z:MarkDuplicates NM:i:12 AS:i:88 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1109:30411:14687 99 000000F 514 60 24M1D45M1D71M5D11M = 915 552 TCGTGCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACAT -AFFFJJJJJJJJJJJJJJJJJJFJJJJJFFFFJJJJJJJJJJJJJJAJJJJJJJJJ<JFJJJJJJJJJJJJJJFJJJJJJJJJJJJFJFJJJJJJFJJJFJJJJJJJJJAJFJJFFJFJJJJ7FFJJFFFFJJJJAJJJJJJJJA<FFFF MD:Z:0G23^C10C34^A71^ACAAT11 PG:Z:MarkDuplicates NM:i:9 AS:i:124 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2114:18700:6601 147 000000F 514 60 14S24M1D113M = 366 -286 CGTCTGCTCCATCCGCGTGCTGGCTCTCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGCTTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGCCCCCTACTT ))-))<--<-))<)<<7)--)77<7-<FF<F-A-7-----)----JJF-7-AFF7-F<7FJA7FAFF<<<FFFJFA-JFJFA<7--<<7-7-JA--F<7<FFJJFFAA-FFAJ<A-7AF-<F-<F-7<AJFJFJAJF-7-F7JJAFF--AA MD:Z:11A12^C10C46A45A9 PG:Z:MarkDuplicates NM:i:5 AS:i:110 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2115:8105:8394 147 000000F 516 60 23M1D120M8S = 213 -447 TTGCTGGCTATCATGTAAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATGTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACACA -)))7------77A<7--))A--))-<J<-A)-)-F-F<F-7)A----F7-A77-JFFF-F-<F7-7AA7-A<<F-A--AJF7-7-<<JJJ7AJF-F---<<7-7-JF77<F7<JFF-7--F-7-F-7-7FJ7F-7<7A-F-<--JF-AA- MD:Z:0G15C6^T71C4T43 PG:Z:MarkDuplicates NM:i:5 AS:i:120 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1105:2869:10117 147 000000F 517 60 21M1D121M9S = 282 -378 TGCCGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTAGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACATCT )-<)<FF7<<F<JFFJA-<FFA)F7)7F<JJFFAFFA7FFAFAA7-FJJFAJFJF<7JFJJJJJJJJJFFA-A7--F<JAFJFF7-FA-FFJJJJJAFJJJJJJJJJFJJJJA-JJJJJFAAF---F<7FAJJJJJFJJJJJJJA<FFFAA MD:Z:3T17^C10C13G96 PG:Z:MarkDuplicates NM:i:4 AS:i:121 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2122:16670:50691 163 000000F 518 60 20M1D117M5D14M = 771 383 GCTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACATCTA AAFFFA<JAJFJJJJJJJJJFJJJJFJJJJFJJJJJJJJJJJJJJJJJJJFFJJJJJJJJJJJJJJJJJJJFFAJFFJ<AJAAJJJJJFJJJFFJJJFAJJJJA<-A<JJFFFJAFJJJJFJJJF7<A)7<<AJJJJFAF<JFAAFJAJ<< MD:Z:20^C10C106^ACAAT14 PG:Z:MarkDuplicates NM:i:7 AS:i:129 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2202:3985:21333 163 000000F 518 60 20M1D117M5D14M = 756 367 ACTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACATCTA AAFFFJJJFJJJJJJJJJJJJJJJJJJJFJFJJJJJJJFJJJJJJAFJJJJJJJJJJJJJJJJJJJJJFJJJFJFFJJFJJJJJJJJJJJJJFJJJJFFJJJJJJJJJJJJJJJJJJJJJAJJJJA<<FJJJJJFJFAAJ<AAFJFJ77FF MD:Z:0G19^C10C106^ACAAT14 PG:Z:MarkDuplicates NM:i:8 AS:i:128 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2218:17553:53627 163 000000F 518 60 21M1D120M10S = 678 252 GCTGGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACACAAA AAAFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJFJJJJFFJJJJJJJJJJFFJJFFJJJJJJJFFFF<FFJ<A7AFFF< MD:Z:21^T71C48 PG:Z:MarkDuplicates NM:i:2 AS:i:129 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2120:25408:5458 83 000000F 519 60 19M1D117M15S = 473 -183 CTGGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACCAGGGACTGGTTTAC 7JAFFFFA-AJJJJJJFFFF7FF-FA<JFFJJJFFF7-7<JJJJFAJAJFFFJAFJ<JJ<JAJFFFA-AJJ<<-J<J7JFFJFFAAJFF-<F-FJJJJFFJFFFFFF-JJJFJAJJFJAJ<77JJJAA-FAJFA-FF<AAA<FFJJFFFAA MD:Z:19^C10C106 PG:Z:MarkDuplicates NM:i:2 AS:i:124 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1120:21491:67023 163 000000F 521 60 18M1D120M13S = 682 295 GGCTATCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACACACATTA AAFAFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFJJJJJJJJJJJJJJJAFFJJJJJJJJJJ<FJJJJJAJJJJJJJJJJJJFFJJAJJJJ MD:Z:18^T71C48 PG:Z:MarkDuplicates NM:i:2 AS:i:126 XS:i:19 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1101:8907:12455 163 000000F 521 60 17M1D117M5D17M = 714 328 GGCTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACATCTAGAT AAFFFJJJJJJFJJJJJJFJJJJJJJJJJJJJJJJJJJ-AFJJJJFJFJJJFJFJJJJJJJJFJJJJJJJJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJAA<AFFFJJJJJJJJJAFFJ<JFA7FFJAFF<FFJ<FJF<7<F<7 MD:Z:17^C10C106^ACAAT17 PG:Z:MarkDuplicates NM:i:7 AS:i:128 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1112:9942:24093 163 000000F 523 60 15M1D117M5D19M = 741 348 CTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACATCTAGATAT AAAAFJJJJJJJJJJJJFJJJJJJJJFJJJJJJJJJJFJJJFJJJJJJJJJJJFJJJJJJJJJJJJAJJJJAJJJJJJJJFJJJJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJAFF<FFJJJJJJFFFJJFJJAFJJFJF<FFAJ-< MD:Z:15^C10C106^ACAAT19 PG:Z:MarkDuplicates NM:i:7 AS:i:128 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1112:9891:24181 1187 000000F 523 60 15M1D117M5D19M = 741 348 CTATCATGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACATCTAGATAT AAA<FJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFJJF<<FJJJJJJJJJJAFFJJFFFAAJJJAA<<FAFJJ<JJFJFJFJJA<FFJJJ7FJJJJF MD:Z:15^C10C106^ACAAT19 PG:Z:MarkDuplicates NM:i:7 AS:i:128 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2117:26047:35397 147 000000F 526 60 13M1D119M4I15M = 411 -263 TCATGTCAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTAAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACACAAATTACATCT 77<FF<AAJ<77JAA-7JF<-FAJJJJJFA<AJJJJJJJJJJJJF<JJJJJJJJJJJJJJJJJJJJJJJFFJJJJFJJJJJJJJJJJJJJJJFJJJJJJJJJJJJJJJJJJJFJJ7JJJJJJJJJFJJJJJJJJFJJJJJJJJJFFFFFAA MD:Z:13^T62T8C48T13 PG:Z:MarkDuplicates NM:i:8 AS:i:116 XS:i:21 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2220:31842:5493 1171 000000F 526 60 13M1D119M4I15M = 411 -263 TCATGTCAGGTACAGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTAATATGTAATTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACACAAATTACATCT -A--)-7A--<77-)FFA)<A)7)<<<7A-<77<A7A-FAF-AJAAA-FAAJFF<7JFF7FF<7AFA--7AAAJF<F-JAFFJF-7-A<AAF-FA<A7AF-<7JJFJFJFFF--AAJJJJJJJJJJJFAJFJJJFAFJJJJJJFFFAFAAA MD:Z:13^T0G61T1G6C48T13 PG:Z:MarkDuplicates NM:i:10 AS:i:106 XS:i:21 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1122:21613:28101 147 000000F 528 60 11M1D119M4I17M = 223 -453 ATGTGAGGTACGGTCTGGACCGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAATTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACACAAATTACATCTAG 7<-7--)--A-)77))-AAJF<JFFJ7A--77<7A--7---J<FAFFJAA7A7F<<F7JFA77JJJJJAF<<<<--FJA<A-JF<JFJJ7<FJJF-7AFJJFJA<FFFJAAFFJ<FFAJJFJJ<JF7<FJFJFF<JFJFF-<AF<<AFFAA MD:Z:4C6^T71C48T15 PG:Z:MarkDuplicates NM:i:8 AS:i:116 XS:i:21 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1205:7476:36381 99 000000F 529 60 23S9M1D119M = 862 484 CATTCGCAGAGCACCAGTAAGTGTGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACAC AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ MD:Z:9^C10C108 PG:Z:MarkDuplicates NM:i:2 AS:i:116 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1104:2676:68992 99 000000F 529 60 19S9M1D121M2S = 643 258 TTCCGTGCATGCTGGCGCCTGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAAT AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJAJJJJJJJJJJJJJJJJJFJJJFJJJFJAJJJJJJJJJAJFA MD:Z:9^C10C110 PG:Z:MarkDuplicates NM:i:2 AS:i:118 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1117:22739:12929 1123 000000F 529 60 19S9M1D121M2S = 643 258 TTCCGTGCATGCTGGCGCCTGTCAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAAT AAFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ MD:Z:9^C10C110 PG:Z:MarkDuplicates NM:i:2 AS:i:118 XS:i:0 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:1217:16001:6565 147 000000F 532 60 6M1D117M5D28M = 195 -494 CAGGTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACATCTAGATATTTGTTATTT 7AFAAF<)7<<7<7FA<FFFAF<JFFJFJJJJJAJFFFJAFJFJJJJJJJJJJJFJFFAFJJJJJJJJJJJJJJJJJJJJJJJJJFFJJJFJJJJJJFJJFJJFJJJJJJJJJJJJJJJJJJJJFFJJJJJJJJJJJJJJJJJJJJFFFAA MD:Z:6^C10C106^ACAAT28 PG:Z:MarkDuplicates NM:i:7 AS:i:129 XS:i:20 RG:Z:rg
+ST-E00128:308:HHVVLALXX:8:2107:22242:17377 83 000000F 535 60 3M1D121M27S = 134 -526 GTATGGTCTGGACAGGAGAGAAACTGTGGATGTCTGTCAACACAACAGAAAAAGTGACTGATTAGTTAGATGTAACTAATTTCAACTATCTAGTCTTCCTCTAAAGACCCCTACTTTAACACAAATTACATCTAGCATGTGAACACCCGTG AA-<A<AJ<)F7<A<JJFJJJFFFJFAFFJJJJFF7<JAF<JJJJJJJJJJJJJJJF7<7<<AJFFFJJAJFJJFJFJJJ7<<F7FJAF7AJJFJJJAJFJJJJFJJJJF7JAJJJJJJJJJJJJJJJJFJJJJJJAA7JJJJJ7FF<FAA MD:Z:3^C10C110 PG:Z:MarkDuplicates NM:i:2 AS:i:116 XS:i:0 RG:Z:rg
diff --git a/test/norm.out b/test/norm.out
index 002acdb..3695f30 100644
--- a/test/norm.out
+++ b/test/norm.out
@@ -42,7 +42,7 @@
20 3 . G CT 999 PASS INDEL;AN=4;AC=2 GT 0/1 0/1
20 5 . TG CT 999 PASS INDEL;AN=4;AC=2 GT 1/0 1/0
20 5 . TGGG TAC,TG,TGGGG,AC . PASS INDEL;AN=4;AC=2,2,0,0 GT:PL:DP 1/2:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15:1 1/2:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15:1
-20 59 . AG . 999 PASS AN=4 GT:PL:DP 0/0:0:4 0/0:0:4
+20 59 . A . 999 PASS AN=4 GT:PL:DP 0/0:0:4 0/0:0:4
20 81 . A C 999 PASS AN=4;AC=2 GT:PL:DP 0/1:255,0,255:13 0/1:255,0,255:13
20 84 . G T 999 PASS AN=4;AC=2 GT:PL:DP 0/1:255,0,255:13 0/1:255,0,255:13
20 95 . T A 999 PASS AN=4;AC=2 GT:PL:DP 0/1:255,0,255:13 0/1:255,0,255:13
diff --git a/test/norm.split.and.norm.out b/test/norm.split.and.norm.out
index 64838ed..35fb9c5 100644
--- a/test/norm.split.and.norm.out
+++ b/test/norm.split.and.norm.out
@@ -45,7 +45,7 @@
20 5 . T TG . PASS INDEL;AN=4;AC=0 GT:PL:DP 0/0:1,7,10:1 0/0:1,7,10:1
20 5 . TGGG AC . PASS INDEL;AN=4;AC=0 GT:PL:DP 0/0:1,11,15:1 0/0:1,11,15:1
20 6 . GGG AC . PASS INDEL;AN=4;AC=2 GT:PL:DP 1/0:1,2,3:1 1/0:1,2,3:1
-20 59 . AG . 999 PASS AN=4 GT:PL:DP 0/0:0:4 0/0:0:4
+20 59 . A . 999 PASS AN=4 GT:PL:DP 0/0:0:4 0/0:0:4
20 81 . A C 999 PASS AN=4;AC=2 GT:PL:DP 0/1:255,0,255:13 0/1:255,0,255:13
20 84 . G T 999 PASS AN=4;AC=2 GT:PL:DP 0/1:255,0,255:13 0/1:255,0,255:13
20 95 . T A 999 PASS AN=4;AC=2 GT:PL:DP 0/1:255,0,255:13 0/1:255,0,255:13
diff --git a/test/test.pl b/test/test.pl
index 75f2d04..e65aa0e 100755
--- a/test/test.pl
+++ b/test/test.pl
@@ -62,6 +62,7 @@ test_vcf_merge($opts,in=>['merge.3.a','merge.3.b'],out=>'merge.3.out',args=>'--f
test_vcf_merge($opts,in=>['merge.4.a','merge.4.b'],out=>'merge.4.out',args=>'--force-samples -m id');
test_vcf_merge($opts,in=>['gvcf.merge.1','gvcf.merge.2','gvcf.merge.3'],out=>'gvcf.merge.1.out',args=>'--gvcf -');
test_vcf_merge($opts,in=>['merge.gvcf.2.a','merge.gvcf.2.b','merge.gvcf.2.c'],out=>'merge.gvcf.2.out',args=>'--gvcf -');
+test_vcf_merge($opts,in=>['merge.gvcf.3.a','merge.gvcf.3.b'],out=>'merge.gvcf.3.out',args=>'--gvcf - -i SRC:join');
test_vcf_merge($opts,in=>['merge.5.a','merge.5.b'],out=>'merge.5.out');
test_vcf_query($opts,in=>'query',out=>'query.out',args=>q[-f '%CHROM\\t%POS\\t%REF\\t%ALT\\t%DP4\\t%AN[\\t%GT\\t%TGT]\\n']);
test_vcf_query($opts,in=>'view.filter',out=>'query.2.out',args=>q[-f'%XRI\\n' -i'XRI[*]>1111']);
@@ -226,7 +227,7 @@ test_vcf_plugin($opts,in=>'view',out=>'view.GTisec.v.out',cmd=>'+GTisec',args=>'
test_vcf_plugin($opts,in=>'trio',out=>'trio.out',cmd=>'+trio-switch-rate',args=>'-- -p {PATH}/trio.ped | grep -v bcftools');
test_vcf_plugin($opts,in=>'ad-bias',out=>'ad-bias.out',cmd=>'+ad-bias',args=>'-- -s {PATH}/ad-bias.samples | grep -v bcftools');
test_vcf_plugin($opts,in=>'af-dist',out=>'af-dist.out',cmd=>'+af-dist',args=>' | grep -v bcftools');
-test_vcf_plugin($opts,in=>'fixref',out=>'fixref.1.out',cmd=>'+fixref',args=>'-- -f {PATH}/norm.fa -m top');
+test_vcf_plugin($opts,in=>'fixref.2a',out=>'fixref.2.out',index=>['fixref.2b'],cmd=>'+fixref',args=>'-- -f {PATH}/norm.fa -i {TMP}/fixref.2b.vcf.gz');
test_vcf_plugin($opts,in=>'aa',out=>'aa.out',cmd=>'+fill-from-fasta',args=>'-- -f {PATH}/aa.fa -c AA -h {PATH}/aa.hdr -i \'TYPE="snp"\'');
test_vcf_plugin($opts,in=>'ref',out=>'ref.out',cmd=>'+fill-from-fasta',args=>'-- -f {PATH}/norm.fa -c REF');
test_vcf_plugin($opts,in=>'view',out=>'view.GTsubset.NA1.out',cmd=>'+GTsubset --no-version',args=>'-- -s NA00001');
@@ -281,23 +282,25 @@ test_vcf_consensus_chain($opts,in=>'consensus',out=>'consensus.4.chain',chain=>'
test_vcf_consensus($opts,in=>'consensus2',out=>'consensus2.1.out',fa=>'consensus2.fa',args=>'-H 1');
test_vcf_consensus($opts,in=>'consensus2',out=>'consensus2.2.out',fa=>'consensus2.fa',args=>'-H 2');
test_vcf_consensus($opts,in=>'empty',out=>'consensus.5.out',fa=>'consensus.fa',args=>'');
-test_mpileup($opts,in=>[qw(1 2 3)],out=>'mpileup/mpileup.1.out',args=>q[-r17:100-150],test_list=>1);
-test_mpileup($opts,in=>[qw(1 2 3)],out=>'mpileup/mpileup.2.out',args=>q[-a DP,DV -r17:100-600]); # test files from samtools mpileup test suite
-test_mpileup($opts,in=>[qw(1)],out=>'mpileup/mpileup.3.out',args=>q[-B --ff 0x14 -r17:1050-1060]); # test file converted to vcf from samtools mpileup test suite
-test_mpileup($opts,in=>[qw(1 2 3)],out=>'mpileup/mpileup.4.out',args=>q[-a DP,DPR,DV,DP4,INFO/DPR,SP -r17:100-600]); #test files from samtools mpileup test suite
-test_mpileup($opts,in=>[qw(1 2 3)],out=>'mpileup/mpileup.5.out',args=>q[-a DP,AD,ADF,ADR,SP,INFO/AD,INFO/ADF,INFO/ADR -r17:100-600]);
-test_mpileup($opts,in=>[qw(1 2 3)],out=>'mpileup/mpileup.6.out',args=>q[-a DP,DV -r17:100-600 --gvcf 0,2,5]);
-test_mpileup($opts,in=>[qw(1 2 3)],out=>'mpileup/mpileup.6.out',args=>q[-a DP,DV -r17:100-200,17:201-300,17:301-400,17:401-500,17:501-600 --gvcf 0,2,5]);
-test_mpileup($opts,in=>[qw(1 2 3)],out=>'mpileup/mpileup.7.out',args=>q[-r17:100-150 -s HG00101,HG00102]);
-test_mpileup($opts,in=>[qw(1 2 3)],out=>'mpileup/mpileup.7.out',args=>q[-r17:100-150 -S {PATH}/mplp.samples]);
-test_mpileup($opts,in=>[qw(1 2 3)],out=>'mpileup/mpileup.8.out',args=>q[-r17:100-150 -s ^HG00101,HG00102]);
-test_mpileup($opts,in=>[qw(1 2 3)],out=>'mpileup/mpileup.8.out',args=>q[-r17:100-150 -S ^{PATH}/mplp.samples]);
-test_mpileup($opts,in=>[qw(1 2 3)],out=>'mpileup/mpileup.9.out',args=>q[-t17:100-150 -S {PATH}/mplp.9.samples]);
-test_mpileup($opts,in=>[qw(1 2 3)],out=>'mpileup/mpileup.10.out',args=>q[-t17:100-150 -G {PATH}/mplp.10.samples]);
-test_mpileup($opts,in=>[qw(3)],out=>'mpileup/mpileup.11.out',args=>q[]);
-test_mpileup($opts,in=>[qw(3 4)],out=>'mpileup/mpileup.11.out',args=>q[-s HG00102]);
-test_mpileup($opts,in=>[qw(3 4)],out=>'mpileup/mpileup.11.out',args=>q[-s ^HG99999]);
-test_mpileup($opts,in=>[qw(3 4)],out=>'mpileup/mpileup.11.out',args=>q[-G {PATH}/mplp.11.rgs]);
+test_mpileup($opts,in=>[qw(mpileup.1 mpileup.2 mpileup.3)],out=>'mpileup/mpileup.1.out',args=>q[-r17:100-150],test_list=>1);
+test_mpileup($opts,in=>[qw(mpileup.1 mpileup.2 mpileup.3)],out=>'mpileup/mpileup.2.out',args=>q[-a DP,DV -r17:100-600]); # test files from samtools mpileup test suite
+test_mpileup($opts,in=>[qw(mpileup.1)],out=>'mpileup/mpileup.3.out',args=>q[-B --ff 0x14 -r17:1050-1060]); # test file converted to vcf from samtools mpileup test suite
+test_mpileup($opts,in=>[qw(mpileup.1 mpileup.2 mpileup.3)],out=>'mpileup/mpileup.4.out',args=>q[-a DP,DPR,DV,DP4,INFO/DPR,SP -r17:100-600]); #test files from samtools mpileup test suite
+test_mpileup($opts,in=>[qw(mpileup.1 mpileup.2 mpileup.3)],out=>'mpileup/mpileup.5.out',args=>q[-a DP,AD,ADF,ADR,SP,INFO/AD,INFO/ADF,INFO/ADR -r17:100-600]);
+test_mpileup($opts,in=>[qw(mpileup.1 mpileup.2 mpileup.3)],out=>'mpileup/mpileup.6.out',args=>q[-a DP,DV -r17:100-600 --gvcf 0,2,5]);
+test_mpileup($opts,in=>[qw(mpileup.1 mpileup.2 mpileup.3)],out=>'mpileup/mpileup.6.out',args=>q[-a DP,DV -r17:100-200,17:201-300,17:301-400,17:401-500,17:501-600 --gvcf 0,2,5]);
+test_mpileup($opts,in=>[qw(mpileup.1 mpileup.2 mpileup.3)],out=>'mpileup/mpileup.7.out',args=>q[-r17:100-150 -s HG00101,HG00102]);
+test_mpileup($opts,in=>[qw(mpileup.1 mpileup.2 mpileup.3)],out=>'mpileup/mpileup.7.out',args=>q[-r17:100-150 -S {PATH}/mplp.samples]);
+test_mpileup($opts,in=>[qw(mpileup.1 mpileup.2 mpileup.3)],out=>'mpileup/mpileup.8.out',args=>q[-r17:100-150 -s ^HG00101,HG00102]);
+test_mpileup($opts,in=>[qw(mpileup.1 mpileup.2 mpileup.3)],out=>'mpileup/mpileup.8.out',args=>q[-r17:100-150 -S ^{PATH}/mplp.samples]);
+test_mpileup($opts,in=>[qw(mpileup.1 mpileup.2 mpileup.3)],out=>'mpileup/mpileup.9.out',args=>q[-t17:100-150 -S {PATH}/mplp.9.samples]);
+test_mpileup($opts,in=>[qw(mpileup.1 mpileup.2 mpileup.3)],out=>'mpileup/mpileup.10.out',args=>q[-t17:100-150 -G {PATH}/mplp.10.samples]);
+test_mpileup($opts,in=>[qw(mpileup.3)],out=>'mpileup/mpileup.11.out',args=>q[]);
+test_mpileup($opts,in=>[qw(mpileup.3 mpileup.4)],out=>'mpileup/mpileup.11.out',args=>q[-s HG00102]);
+test_mpileup($opts,in=>[qw(mpileup.3 mpileup.4)],out=>'mpileup/mpileup.11.out',args=>q[-s ^HG99999]);
+test_mpileup($opts,in=>[qw(mpileup.3 mpileup.4)],out=>'mpileup/mpileup.11.out',args=>q[-G {PATH}/mplp.11.rgs]);
+test_mpileup($opts,in=>[qw(mpileup.3 mpileup.4)],out=>'mpileup/mpileup.11.out',args=>q[-G {PATH}/mplp.11.rgs]);
+test_mpileup($opts,in=>[qw(indel-AD.1)],out=>'mpileup/indel-AD.1.out',ref=>'indel-AD.1.fa',args=>q[-a AD]);
test_csq($opts,in=>'csq',out=>'csq.1.out',cmd=>'-f {PATH}/csq.fa -g {PATH}/csq.gff3');
test_csq_real($opts,in=>'csq');
@@ -863,7 +866,13 @@ sub test_vcf_plugin
if ( !exists($args{args}) ) { $args{args} = ''; }
$args{args} =~ s/{PATH}/$$opts{path}/g;
$args{cmd} =~ s/{PATH}/$$opts{path}/g;
+ $args{args} =~ s/{TMP}/$$opts{tmp}/g;
+ $args{cmd} =~ s/{TMP}/$$opts{tmp}/g;
bgzip_tabix_vcf($opts,"$args{in}");
+ if ( exists($args{index}) )
+ {
+ for my $file (@{$args{index}}) { bgzip_tabix_vcf($opts,$file); }
+ }
test_cmd($opts,%args,cmd=>"$$opts{bin}/bcftools $args{cmd} $$opts{tmp}/$args{in}.vcf.gz $args{args} 2>/dev/null | grep -v ^##bcftools_");
cmd("$$opts{bin}/bcftools view -Ob $$opts{tmp}/$args{in}.vcf.gz > $$opts{tmp}/$args{in}.bcf");
@@ -1005,10 +1014,10 @@ sub test_mpileup
open(my $fh4,'>',"$$opts{tmp}/mpileup.cram.urllist") or error("$$opts{tmp}/mpileup.cram.urllist: $!");
for my $file (@{$args{in}})
{
- print $fh1 "$$opts{path}/mpileup/mpileup.$file.bam\n";
- print $fh2 "$$opts{path}/mpileup/mpileup.$file.cram\n";
- print $fh3 "file://", abs_path("$$opts{path}/mpileup/mpileup.$file.bam"), "\n";
- print $fh4 "file://", abs_path("$$opts{path}/mpileup/mpileup.$file.cram"), "\n";
+ print $fh1 "$$opts{path}/mpileup/$file.bam\n";
+ print $fh2 "$$opts{path}/mpileup/$file.cram\n";
+ print $fh3 "file://", abs_path("$$opts{path}/mpileup/$file.bam"), "\n";
+ print $fh4 "file://", abs_path("$$opts{path}/mpileup/$file.cram"), "\n";
}
close($fh1);
close($fh2);
@@ -1016,19 +1025,21 @@ sub test_mpileup
close($fh4);
}
+ my $ref = exists($args{ref}) ? $args{ref} : "mpileup.ref.fa";
+
$args{args} =~ s/{PATH}/$$opts{path}/g;
for my $fmt ('bam','cram')
{
my @files = ();
- for my $file (@{$args{in}}) { push @files, "$$opts{path}/mpileup/mpileup.$file.$fmt"; }
+ for my $file (@{$args{in}}) { push @files, "$$opts{path}/mpileup/$file.$fmt"; }
my $files = join(' ', at files);
my $grep_hdr = "grep -v ^##bcftools | grep -v ^##reference";
- test_cmd($opts,%args,cmd=>"$$opts{bin}/bcftools mpileup $args{args} -f $$opts{path}/mpileup/mpileup.ref.fa $files 2>/dev/null | $grep_hdr");
- test_cmd($opts,%args,cmd=>"$$opts{bin}/bcftools mpileup $args{args} -f $$opts{path}/mpileup/mpileup.ref.fa -Ob $files 2>/dev/null | $$opts{bin}/bcftools view | $grep_hdr");
+ test_cmd($opts,%args,cmd=>"$$opts{bin}/bcftools mpileup $args{args} -f $$opts{path}/mpileup/$ref $files 2>/dev/null | $grep_hdr");
+ test_cmd($opts,%args,cmd=>"$$opts{bin}/bcftools mpileup $args{args} -f $$opts{path}/mpileup/$ref -Ob $files 2>/dev/null | $$opts{bin}/bcftools view | $grep_hdr");
if ($args{test_list})
{
- test_cmd($opts,%args,cmd=>"$$opts{bin}/bcftools mpileup $args{args} -f $$opts{path}/mpileup/mpileup.ref.fa -b $$opts{tmp}/mpileup.$fmt.list --no-version 2>/dev/null | grep -v ^##reference");
- test_cmd($opts,%args,cmd=>"$$opts{bin}/bcftools mpileup $args{args} -f $$opts{path}/mpileup/mpileup.ref.fa -Ob -b $$opts{tmp}/mpileup.$fmt.urllist 2>/dev/null | $$opts{bin}/bcftools view | $grep_hdr");
+ test_cmd($opts,%args,cmd=>"$$opts{bin}/bcftools mpileup $args{args} -f $$opts{path}/mpileup/$ref -b $$opts{tmp}/mpileup.$fmt.list --no-version 2>/dev/null | grep -v ^##reference");
+ test_cmd($opts,%args,cmd=>"$$opts{bin}/bcftools mpileup $args{args} -f $$opts{path}/mpileup/$ref -Ob -b $$opts{tmp}/mpileup.$fmt.urllist 2>/dev/null | $$opts{bin}/bcftools view | $grep_hdr");
}
}
}
diff --git a/vcfbuf.c b/vcfbuf.c
new file mode 100644
index 0000000..d896d3a
--- /dev/null
+++ b/vcfbuf.c
@@ -0,0 +1,442 @@
+/* The MIT License
+
+ Copyright (c) 2016 Genome Research Ltd.
+
+ Author: Petr Danecek <pd3 at sanger.ac.uk>
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+
+ */
+
+#include <htslib/vcf.h>
+#include <htslib/vcfutils.h>
+#include "bcftools.h"
+#include "vcfbuf.h"
+#include "rbuf.h"
+
+typedef struct
+{
+ double max;
+ int rand_missing, skip_filter;
+}
+ld_t;
+
+typedef struct
+{
+ bcf1_t *rec;
+ double af;
+ int af_set:1, idx:31;
+}
+vcfrec_t;
+
+typedef struct
+{
+ int max_sites, mvrec, mac, mfarr;
+ int *ac, *idx;
+ float *farr;
+ char *af_tag;
+ vcfrec_t **vrec;
+}
+prune_t;
+
+typedef struct
+{
+ int active, rid, end;
+}
+overlap_t;
+
+struct _vcfbuf_t
+{
+ int win;
+ bcf_hdr_t *hdr;
+ vcfrec_t *vcf;
+ rbuf_t rbuf;
+ ld_t ld;
+ prune_t prune;
+ overlap_t overlap;
+};
+
+vcfbuf_t *vcfbuf_init(bcf_hdr_t *hdr, int win)
+{
+ vcfbuf_t *buf = (vcfbuf_t*) calloc(1,sizeof(vcfbuf_t));
+ buf->hdr = hdr;
+ buf->win = win;
+ buf->overlap.rid = -1;
+ rbuf_init(&buf->rbuf, 0);
+ return buf;
+}
+
+void vcfbuf_destroy(vcfbuf_t *buf)
+{
+ int i;
+ for (i=0; i<buf->rbuf.m; i++)
+ if ( buf->vcf[i].rec ) bcf_destroy(buf->vcf[i].rec);
+ free(buf->vcf);
+ free(buf->prune.farr);
+ free(buf->prune.vrec);
+ free(buf->prune.ac);
+ free(buf->prune.idx);
+ free(buf);
+}
+
+void vcfbuf_set(vcfbuf_t *buf, vcfbuf_opt_t key, void *value)
+{
+ if ( key==VCFBUF_LD_MAX ) { buf->ld.max = *((double*)value); return; }
+ if ( key==VCFBUF_RAND_MISSING ) { buf->ld.rand_missing = *((int*)value); return; }
+ if ( key==VCFBUF_SKIP_FILTER ) { buf->ld.skip_filter = *((int*)value); return; }
+ if ( key==VCFBUF_NSITES ) { buf->prune.max_sites = *((int*)value); return; }
+ if ( key==VCFBUF_AF_TAG ) { buf->prune.af_tag = *((char**)value); return; }
+ if ( key==VCFBUF_OVERLAP_WIN ) { buf->overlap.active = *((int*)value); return; }
+}
+
+int vcfbuf_nsites(vcfbuf_t *buf)
+{
+ return buf->rbuf.n;
+}
+
+bcf1_t *vcfbuf_push(vcfbuf_t *buf, bcf1_t *rec, int swap)
+{
+ if ( !swap ) error("todo: swap=%d\n", swap);
+
+ rbuf_expand0(&buf->rbuf, vcfrec_t, buf->rbuf.n+1, buf->vcf);
+
+ int i = rbuf_append(&buf->rbuf);
+ if ( !buf->vcf[i].rec ) buf->vcf[i].rec = bcf_init1();
+
+ bcf1_t *ret = buf->vcf[i].rec;
+ buf->vcf[i].rec = rec;
+ buf->vcf[i].af_set = 0;
+
+ return ret;
+}
+
+static int cmpvrec(const void *_a, const void *_b)
+{
+ vcfrec_t *a = *((vcfrec_t**) _a);
+ vcfrec_t *b = *((vcfrec_t**) _b);
+ if ( a->af < b->af ) return -1;
+ if ( a->af == b->af ) return 0;
+ return 1;
+}
+static int cmpint_desc(const void *_a, const void *_b)
+{
+ int a = *((int*)_a);
+ int b = *((int*)_b);
+ if ( a < b ) return 1;
+ if ( a == b ) return 0;
+ return -1;
+}
+
+static void _prune_sites(vcfbuf_t *buf, int flush_all)
+{
+ int nbuf = flush_all ? buf->rbuf.n : buf->rbuf.n - 1;
+
+ if ( nbuf > buf->prune.mvrec )
+ {
+ buf->prune.idx = (int*) realloc(buf->prune.idx, nbuf*sizeof(int));
+ buf->prune.vrec = (vcfrec_t**) realloc(buf->prune.vrec, nbuf*sizeof(vcfrec_t*));
+ buf->prune.mvrec = nbuf;
+ }
+
+ // set allele frequency and prepare buffer for sorting
+ int i,k,irec = 0;
+ for (i=-1; rbuf_next(&buf->rbuf,&i) && irec<nbuf; )
+ {
+ bcf1_t *line = buf->vcf[i].rec;
+ if ( line->n_allele > buf->prune.mac )
+ {
+ buf->prune.ac = (int*) realloc(buf->prune.ac, line->n_allele*sizeof(*buf->prune.ac));
+ buf->prune.mac = line->n_allele;
+ }
+ if ( !buf->vcf[i].af_set )
+ {
+ buf->vcf[i].af = 0;
+ if ( buf->prune.af_tag )
+ {
+ if ( bcf_get_info_float(buf->hdr,line,buf->prune.af_tag,&buf->prune.farr, &buf->prune.mfarr) > 0 ) buf->vcf[i].af = buf->prune.farr[0];
+ }
+ else if ( bcf_calc_ac(buf->hdr, line, buf->prune.ac, BCF_UN_INFO|BCF_UN_FMT) )
+ {
+ int ntot = buf->prune.ac[0], nalt = 0;
+ for (k=1; k<line->n_allele; k++) nalt += buf->prune.ac[k];
+ buf->vcf[i].af = ntot ? (float)nalt/ntot : 0;
+ }
+ buf->vcf[i].af_set = 1;
+ }
+ buf->vcf[i].idx = irec;
+ buf->prune.vrec[irec++] = &buf->vcf[i];
+ }
+
+ // sort by allele frequency, low AF will be removed preferentially
+ qsort(buf->prune.vrec, nbuf, sizeof(*buf->prune.vrec), cmpvrec);
+
+ // sort the rbuf indexes to be pruned descendently so that j-th rbuf index
+ // is removed before i-th index if i<j
+ int nprune = nbuf - buf->prune.max_sites;
+ for (i=0; i<nprune; i++)
+ buf->prune.idx[i] = buf->prune.vrec[i]->idx;
+
+ qsort(buf->prune.idx, nprune, sizeof(int), cmpint_desc);
+
+ for (i=0; i<nprune; i++)
+ rbuf_remove_kth(&buf->rbuf, vcfrec_t, buf->prune.idx[i], buf->vcf);
+}
+
+static int _overlap_can_flush(vcfbuf_t *buf, int flush_all)
+{
+ if ( flush_all ) { buf->overlap.rid = -1; return 1; }
+
+ int i = rbuf_last(&buf->rbuf);
+ vcfrec_t *last = &buf->vcf[i];
+ if ( buf->overlap.rid != last->rec->rid ) buf->overlap.end = 0;
+
+ int beg_pos = last->rec->pos;
+ int end_pos = last->rec->pos + last->rec->rlen - 1;
+
+ // Assuming left-aligned indels. In case it is a deletion, the real variant
+ // starts one base after. If an insertion, the overlap with previous zero length.
+ int imin = last->rec->rlen;
+ for (i=0; i<last->rec->n_allele; i++)
+ {
+ char *ref = last->rec->d.allele[0];
+ char *alt = last->rec->d.allele[i];
+ if ( *alt == '<' ) continue; // ignore symbolic alleles
+ while ( *ref && *alt && nt_to_upper(*ref)==nt_to_upper(*alt) ) { ref++; alt++; }
+ if ( imin > ref - last->rec->d.allele[0] ) imin = ref - last->rec->d.allele[0];
+ }
+
+ if ( beg_pos <= buf->overlap.end )
+ {
+ beg_pos += imin;
+ if ( beg_pos > end_pos ) end_pos = beg_pos;
+ }
+
+ if ( buf->rbuf.n==1 )
+ {
+ buf->overlap.rid = last->rec->rid;
+ buf->overlap.end = end_pos;
+ return 0;
+ }
+ if ( beg_pos <= buf->overlap.end )
+ {
+ if ( buf->overlap.end < end_pos ) buf->overlap.end = end_pos;
+ return 0;
+ }
+ return 1;
+}
+
+bcf1_t *vcfbuf_flush(vcfbuf_t *buf, int flush_all)
+{
+ int i,j;
+
+ if ( buf->rbuf.n==0 ) return NULL;
+ if ( flush_all ) goto ret;
+
+ i = rbuf_kth(&buf->rbuf, 0); // first
+ j = rbuf_last(&buf->rbuf); // last
+
+ if ( buf->vcf[i].rec->rid != buf->vcf[j].rec->rid ) goto ret;
+ if ( buf->overlap.active )
+ {
+ int ret = _overlap_can_flush(buf, flush_all);
+ //printf("can_flush: %d %d - %d\n", ret, buf->vcf[i].rec->pos+1, buf->vcf[j].rec->pos+1);
+ if ( ret ) goto ret;
+ }
+ //if ( buf->overlap.active && _overlap_can_flush(buf, flush_all) ) goto ret;
+
+ if ( buf->win > 0 )
+ {
+ if ( buf->rbuf.n <= buf->win ) return NULL;
+ goto ret;
+ }
+ else if ( buf->win < 0 )
+ {
+ if ( buf->vcf[i].rec->pos - buf->vcf[j].rec->pos > buf->win ) return NULL;
+ }
+ else return NULL;
+
+ret:
+ if ( buf->prune.max_sites && buf->prune.max_sites < buf->rbuf.n ) _prune_sites(buf, flush_all);
+
+ i = rbuf_shift(&buf->rbuf);
+ return buf->vcf[i].rec;
+}
+
+static double _estimate_af(int8_t *ptr, int size, int nvals, int nsamples)
+{
+ int i,j, nref = 0, nalt = 0;
+ for (i=0; i<nsamples; i++)
+ {
+ for (j=0; j<nvals; j++)
+ {
+ if ( ptr[j]==bcf_gt_missing ) break;
+ if ( ptr[j]==bcf_int8_vector_end ) break;
+ if ( bcf_gt_allele(ptr[j]) ) nalt++;
+ else nref++;
+ }
+ ptr += size;
+ }
+ if ( nref+nalt == 0 ) return 0;
+ return (double)nalt/(nref+nalt);
+}
+
+/*
+ For unphased genotypes D is approximated as suggested in https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2710162/
+ D =~ (GT correlation) * sqrt(Pa*(1-Pa)*Pb*(1-Pb))
+*/
+static double _calc_ld(vcfbuf_t *buf, bcf1_t *arec, bcf1_t *brec)
+{
+ if ( arec->n_sample!=brec->n_sample ) error("Different number of samples: %d vs %d\n",arec->n_sample,brec->n_sample);
+ assert( arec->n_sample );
+
+ int i,j,igt = bcf_hdr_id2int(buf->hdr, BCF_DT_ID, "GT");
+ bcf_unpack(arec, BCF_UN_FMT);
+ bcf_unpack(brec, BCF_UN_FMT);
+ bcf_fmt_t *afmt = NULL, *bfmt = NULL;
+ for (i=0; i<arec->n_fmt; i++)
+ if ( arec->d.fmt[i].id==igt ) { afmt = &arec->d.fmt[i]; break; }
+ if ( !afmt ) return -1; // no GT tag
+ for (i=0; i<brec->n_fmt; i++)
+ if ( brec->d.fmt[i].id==igt ) { bfmt = &brec->d.fmt[i]; break; }
+ if ( !bfmt ) return -1; // no GT tag
+
+ if ( afmt->n==0 ) return -1; // empty?!
+ if ( bfmt->n==0 ) return -1; // empty?!
+ if ( afmt->type!=BCF_BT_INT8 ) error("TODO: the GT fmt_type is not int8!\n");
+ if ( bfmt->type!=BCF_BT_INT8 ) error("TODO: the GT fmt_type is not int8!\n");
+
+ // Determine allele frequencies, this is to sample randomly missing genotypes
+ double aaf = 0, baf = 0;
+ if ( buf->ld.rand_missing )
+ {
+ aaf = _estimate_af((int8_t*)afmt->p, afmt->size, afmt->n, arec->n_sample);
+ baf = _estimate_af((int8_t*)bfmt->p, bfmt->size, bfmt->n, brec->n_sample);
+ }
+
+ // Calculate correlation
+ double ab = 0, aa = 0, bb = 0, a = 0, b = 0;
+ int nab = 0, na = 0, nb = 0, ndiff = 0;
+ for (i=0; i<arec->n_sample; i++)
+ {
+ int8_t *aptr = (int8_t*) (afmt->p + i*afmt->size);
+ int8_t *bptr = (int8_t*) (bfmt->p + i*bfmt->size);
+ int adsg = 0, bdsg = 0, an = 0, bn = 0;
+ for (j=0; j<afmt->n; j++)
+ {
+ if ( aptr[j]==bcf_int8_vector_end ) break;
+ if ( aptr[j]==bcf_gt_missing )
+ {
+ if ( !buf->ld.rand_missing ) break;
+ if ( rand()/RAND_MAX >= aaf ) adsg += 1;
+ }
+ else if ( bcf_gt_allele(aptr[j]) ) adsg += 1;
+ an++;
+ }
+ for (j=0; j<bfmt->n; j++)
+ {
+ if ( bptr[j]==bcf_int8_vector_end ) break;
+ if ( bptr[j]==bcf_gt_missing )
+ {
+ if ( !buf->ld.rand_missing ) break;
+ if ( rand()/RAND_MAX >= baf ) bdsg += 1;
+ }
+ else if ( bcf_gt_allele(bptr[j]) ) bdsg += 1;
+ bn++;
+ }
+ if ( an )
+ {
+ aa += adsg*adsg;
+ a += adsg;
+ na++;
+ }
+ if ( bn )
+ {
+ bb += bdsg*bdsg;
+ b += bdsg;
+ nb++;
+ }
+ if ( an && bn )
+ {
+ if ( adsg!=bdsg ) ndiff++;
+ ab += adsg*bdsg;
+ nab++;
+ }
+ }
+ if ( !nab ) return -1;
+
+ double cor;
+ if ( !ndiff ) cor = 1;
+ else
+ {
+ // Don't know how to deal with zero variance. Since this the purpose is filtering,
+ // it is not enough to say the value is undefined. Therefore an artificial noise is
+ // added to make the denominator non-zero.
+ if ( aa == a*a/na || bb == b*b/nb )
+ {
+ aa += 3*3;
+ bb += 3*3;
+ ab += 3*3;
+ a += 3;
+ b += 3;
+ na++;
+ nb++;
+ nab++;
+ }
+ cor = (ab/nab - a/na*b/nb) / sqrt(aa/na - a/na*a/na) / sqrt(bb/nb - b/nb*b/nb);
+ }
+ return cor*cor;
+}
+
+bcf1_t *vcfbuf_max_ld(vcfbuf_t *buf, bcf1_t *rec, double *ld)
+{
+ *ld = -1;
+ if ( !buf->rbuf.n ) return NULL;
+
+ int i = buf->rbuf.f;
+
+ // Relying on vcfbuf being properly flushed - all sites in the buffer
+ // must come from the same chromosome
+ if ( buf->vcf[i].rec->rid != rec->rid ) return NULL;
+
+ int imax = 0;
+ double max = 0;
+ for (i=-1; rbuf_next(&buf->rbuf,&i); )
+ {
+ if ( buf->ld.skip_filter )
+ {
+ if ( buf->vcf[i].rec->d.n_flt > 1 ) continue; // multiple filters are set
+ if ( buf->vcf[i].rec->d.n_flt==1 && buf->vcf[i].rec->d.flt[0]!=0 ) continue; // not PASS
+ }
+ double val = _calc_ld(buf, buf->vcf[i].rec, rec);
+ if ( buf->ld.max && buf->ld.max < val )
+ {
+ *ld = val;
+ return buf->vcf[i].rec;
+ }
+ if ( val > max )
+ {
+ max = val;
+ imax = i;
+ }
+ }
+ *ld = max;
+ return buf->vcf[imax].rec;
+}
+
+
diff --git a/vcfbuf.h b/vcfbuf.h
new file mode 100644
index 0000000..5494323
--- /dev/null
+++ b/vcfbuf.h
@@ -0,0 +1,81 @@
+/* The MIT License
+
+ Copyright (c) 2017 Genome Research Ltd.
+
+ Author: Petr Danecek <pd3 at sanger.ac.uk>
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+
+ */
+
+/*
+ Buffer VCF records and perform operations on the buffer
+*/
+
+#ifndef __VCFBUF_H__
+#define __VCFBUF_H__
+
+#include <htslib/vcf.h>
+
+typedef struct _vcfbuf_t vcfbuf_t;
+
+// Modes of operation
+typedef enum
+{
+ VCFBUF_LD_MAX, // vcfbuf_max_ld() stops at the first record that exceeds the threshold
+ VCFBUF_RAND_MISSING, // randomize rather than ignore missing genotypes
+ VCFBUF_SKIP_FILTER, // skip sites with FILTER diferent from "PASS" or "."
+ VCFBUF_NSITES, // leave at max this many sites in the window
+ VCFBUF_AF_TAG, // use this INFO tag with LD_NSITES
+ VCFBUF_OVERLAP_WIN, // keep only overlapping variants in the window
+}
+vcfbuf_opt_t;
+
+#define vcfbuf_set_opt(buf,type,key,value) { type tmp = value; vcfbuf_set(buf, key, (void*)&tmp); }
+void vcfbuf_set(vcfbuf_t *buf, vcfbuf_opt_t key, void *value);
+
+
+/*
+ * vcfbuf_init() - init buffer
+ * @win: number of sites (>0) or bp (<0)
+ */
+vcfbuf_t *vcfbuf_init(bcf_hdr_t *hdr, int win);
+void vcfbuf_destroy(vcfbuf_t *buf);
+
+/*
+ * vcfbuf_push() - push a new site for analysis
+ * @swap: if set, do not create a copy, but return a substitute
+ */
+bcf1_t *vcfbuf_push(vcfbuf_t *buf, bcf1_t *rec, int swap);
+
+bcf1_t *vcfbuf_flush(vcfbuf_t *buf, int flush_all);
+
+/*
+ * vcfbuf_nsites() - return the number of sites in the buffer
+ */
+int vcfbuf_nsites(vcfbuf_t *buf);
+
+/*
+ * vcfbuf_max_ld() - return a record that has maximum D or first record exceeding the threshold
+ * @ld: will be filled with the maximum D found
+ */
+bcf1_t *vcfbuf_max_ld(vcfbuf_t *buf, bcf1_t *rec, double *ld);
+
+#endif
+
diff --git a/vcfconvert.c b/vcfconvert.c
index f650bea..8f596d4 100644
--- a/vcfconvert.c
+++ b/vcfconvert.c
@@ -862,7 +862,7 @@ static void vcf_to_haplegendsample(args_t *args)
if ( legend_fname && (strlen(legend_fname)<3 || strcasecmp(".gz",legend_fname+strlen(legend_fname)-3)) ) legend_compressed = 0;
if ( sample_fname && strlen(sample_fname)>3 && strcasecmp(".gz",sample_fname+strlen(sample_fname)-3)==0 ) sample_compressed = 0;
- if (hap_fname) fprintf(stderr, "Haps file: %s\n", hap_fname);
+ if (hap_fname) fprintf(stderr, "Hap file: %s\n", hap_fname);
if (legend_fname) fprintf(stderr, "Legend file: %s\n", legend_fname);
if (sample_fname) fprintf(stderr, "Sample file: %s\n", sample_fname);
@@ -1010,7 +1010,7 @@ static void vcf_to_hapsample(args_t *args)
if ( hap_fname && (strlen(hap_fname)<3 || strcasecmp(".gz",hap_fname+strlen(hap_fname)-3)) ) hap_compressed = 0;
if ( sample_fname && strlen(sample_fname)>3 && strcasecmp(".gz",sample_fname+strlen(sample_fname)-3)==0 ) sample_compressed = 0;
- if (hap_fname) fprintf(stderr, "Haps file: %s\n", hap_fname);
+ if (hap_fname) fprintf(stderr, "Hap file: %s\n", hap_fname);
if (sample_fname) fprintf(stderr, "Sample file: %s\n", sample_fname);
// write samples file
@@ -1397,8 +1397,8 @@ static void usage(void)
fprintf(stderr, " -f, --fasta-ref <file> reference sequence in fasta format\n");
fprintf(stderr, "\n");
fprintf(stderr, "HAP/SAMPLE conversion (output from SHAPEIT):\n");
- fprintf(stderr, " --hapsample2vcf <...> <prefix>|<haps-file>,<sample-file>\n");
- fprintf(stderr, " --hapsample <...> <prefix>|<haps-file>,<sample-file>\n");
+ fprintf(stderr, " --hapsample2vcf <...> <prefix>|<hap-file>,<sample-file>\n");
+ fprintf(stderr, " --hapsample <...> <prefix>|<hap-file>,<sample-file>\n");
fprintf(stderr, " --haploid2diploid convert haploid genotypes to diploid homozygotes\n");
fprintf(stderr, " --sex <file> output sex column in the sample-file, input format is: Sample\\t[MF]\n");
fprintf(stderr, " --vcf-ids output VCF IDs instead of CHROM:POS_REF_ALT\n");
diff --git a/vcfmerge.c b/vcfmerge.c
index 1aeb739..e9ed5ad 100644
--- a/vcfmerge.c
+++ b/vcfmerge.c
@@ -104,7 +104,6 @@ typedef struct
int rid; // current rid
int beg,end; // valid ranges in reader's buffer [beg,end). Maintained by maux_reset and gvcf_flush.
int cur; // current line or -1 if none
- int npos; // number of unprocessed lines at this position
int mrec; // allocated size of buf
maux1_t *rec; // buffer to keep reader's lines
bcf1_t **lines; // source buffer: either gvcf or readers' buffer
@@ -758,10 +757,12 @@ void maux_reset(maux_t *ma)
ma->pos = line->pos;
break;
}
- if ( chr )
+ int new_chr = 0;
+ if ( chr && (!ma->chr || strcmp(ma->chr,chr)) )
{
free(ma->chr);
ma->chr = strdup(chr);
+ new_chr = 1;
}
for (i=0; i<ma->n; i++)
{
@@ -781,6 +782,7 @@ void maux_reset(maux_t *ma)
ma->buf[i].lines = ma->files->readers[i].buffer;
if ( ma->gvcf ) ma->gvcf[i].active = 0; // gvcf block cannot overlap with the next record
}
+ if ( new_chr && ma->gvcf ) ma->gvcf[i].active = 0; // make sure to close active gvcf block on new chr
}
}
void maux_debug(maux_t *ma, int ir, int ib)
@@ -1985,6 +1987,31 @@ void debug_maux(args_t *args)
fprintf(stderr,"\n\n");
}
+void debug_state(args_t *args)
+{
+ maux_t *maux = args->maux;
+ int i,j;
+ for (i=0; i<args->files->nreaders; i++)
+ {
+ fprintf(stderr,"reader %d:\tcur,beg,end=% d,%d,%d", i,maux->buf[i].cur,maux->buf[i].beg,maux->buf[i].end);
+ if ( maux->buf[i].cur >=0 )
+ {
+ bcf_hdr_t *hdr = bcf_sr_get_header(args->files,i);
+ const char *chr = bcf_hdr_id2name(hdr, maux->buf[i].rid);
+ fprintf(stderr,"\t");
+ for (j=maux->buf[i].beg; j<maux->buf[i].end; j++) fprintf(stderr," %s:%d",chr,maux->buf[i].lines[j]->pos+1);
+ }
+ fprintf(stderr,"\n");
+ }
+ for (i=0; i<args->files->nreaders; i++)
+ {
+ fprintf(stderr,"reader %d:\tgvcf_active=%d", i,maux->gvcf[i].active);
+ if ( maux->gvcf[i].active ) fprintf(stderr,"\tpos,end=%d,%d", maux->gvcf[i].line->pos+1,maux->gvcf[i].end+1);
+ fprintf(stderr,"\n");
+ }
+ fprintf(stderr,"\n");
+}
+
/*
Determine which line should be merged from which reader: go through all
@@ -2294,6 +2321,7 @@ void merge_vcf(args_t *args)
merge_line(args);
}
clean_buffer(args);
+ // debug_state(args);
}
if ( args->do_gvcf )
gvcf_flush(args,1);
diff --git a/vcfnorm.c b/vcfnorm.c
index 3a1706b..86c20ab 100644
--- a/vcfnorm.c
+++ b/vcfnorm.c
@@ -104,6 +104,15 @@ static inline int has_non_acgtn(char *seq, int nseq)
return 0;
}
+static void seq_to_upper(char *seq, int len)
+{
+ int i;
+ if ( len )
+ for (i=0; i<len; i++) seq[i] = nt_to_upper(seq[i]);
+ else
+ for (i=0; seq[i]; i++) seq[i] = nt_to_upper(seq[i]);
+}
+
static void fix_ref(args_t *args, bcf1_t *line)
{
int reflen = strlen(line->d.allele[0]);
@@ -274,6 +283,7 @@ static int realign(args_t *args, bcf1_t *line)
int i, nref, reflen = strlen(line->d.allele[0]);
char *ref = faidx_fetch_seq(args->fai, (char*)args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos, line->pos+reflen-1, &nref);
if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos+1);
+ seq_to_upper(ref,0);
replace_iupac_codes(ref,nref); // any non-ACGT character in fasta ref is replaced with N
// does VCF REF contain non-standard bases?
@@ -298,7 +308,16 @@ static int realign(args_t *args, bcf1_t *line)
free(ref);
ref = NULL;
- if ( line->n_allele == 1 ) return ERR_OK; // a REF
+ if ( line->n_allele == 1 ) // a REF
+ {
+ if ( line->rlen > 1 )
+ {
+ line->d.allele[0][1] = 0;
+ bcf_update_alleles(args->hdr,line,(const char**)line->d.allele,line->n_allele);
+ }
+ return ERR_OK;
+ }
+ if ( bcf_get_variant_types(line)==VCF_BND ) return ERR_SYMBOLIC; // breakend, not an error
// make a copy of each allele for trimming
hts_expand0(kstring_t,line->n_allele,args->ntmp_als,args->tmp_als);
@@ -307,7 +326,6 @@ static int realign(args_t *args, bcf1_t *line)
{
if ( line->d.allele[i][0]=='<' ) return ERR_SYMBOLIC; // symbolic allele
if ( line->d.allele[i][0]=='*' ) return ERR_SPANNING_DELETION; // spanning deletion
- if ( bcf_get_variant_type(line,i)==VCF_BND ) return ERR_SYMBOLIC; // breakend, not an error
if ( has_non_acgtn(line->d.allele[i],0) )
{
if ( args->check_ref==CHECK_REF_EXIT )
@@ -319,8 +337,9 @@ static int realign(args_t *args, bcf1_t *line)
als[i].l = 0;
kputs(line->d.allele[i], &als[i]);
+ seq_to_upper(als[i].s,0);
- if ( i>0 && als[i].l==als[0].l && !strcasecmp(als[0].s,als[i].s) ) return ERR_DUP_ALLELE;
+ if ( i>0 && als[i].l==als[0].l && !strcmp(als[0].s,als[i].s) ) return ERR_DUP_ALLELE;
}
// trim from right
@@ -388,7 +407,7 @@ static int realign(args_t *args, bcf1_t *line)
// Have the alleles changed?
als[0].s[ als[0].l ] = 0; // in order for strcmp to work
- if ( ori_pos==line->pos && !strcasecmp(line->d.allele[0],als[0].s) ) return ERR_OK;
+ if ( ori_pos==line->pos && !strcmp(line->d.allele[0],als[0].s) ) return ERR_OK;
// Create new block of alleles and update
args->tmp_als_str.l = 0;
diff --git a/vcfplugin.c b/vcfplugin.c
index bfd6ad2..a53ac3c 100644
--- a/vcfplugin.c
+++ b/vcfplugin.c
@@ -22,6 +22,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. */
+#include "config.h"
#include <stdio.h>
#include <strings.h>
#include <unistd.h>
@@ -42,6 +43,8 @@ THE SOFTWARE. */
#include "vcmp.h"
#include "filter.h"
+#ifdef ENABLE_BCF_PLUGINS
+
typedef struct _plugin_t plugin_t;
/**
@@ -209,7 +212,7 @@ static void *dlopen_plugin(args_t *args, const char *fname)
int i;
for (i=0; i<args->nplugin_paths; i++)
{
- tmp = msprintf("%s/%s.so", args->plugin_paths[i],fname);
+ tmp = msprintf("%s/%s%s", args->plugin_paths[i], fname, PLUGIN_EXT);
handle = dlopen(tmp, RTLD_NOW); // valgrind complains about unfreed memory, not our problem though
if ( args->verbose > 1 )
{
@@ -362,6 +365,7 @@ static int list_plugins(args_t *args)
init_plugin_paths(args);
kstring_t str = {0,0,0};
+ int plugin_ext_len = strlen(PLUGIN_EXT);
int i;
for (i=0; i<args->nplugin_paths; i++)
{
@@ -372,7 +376,7 @@ static int list_plugins(args_t *args)
while ( (ep=readdir(dp)) )
{
int len = strlen(ep->d_name);
- if ( strcasecmp(".so",ep->d_name+len-3) ) continue;
+ if ( strcasecmp(PLUGIN_EXT,ep->d_name+len-plugin_ext_len) ) continue;
str.l = 0;
ksprintf(&str,"%s/%s", args->plugin_paths[i],ep->d_name);
hts_expand(plugin_t, nplugins+1, mplugins, plugins);
@@ -641,3 +645,13 @@ int main_plugin(int argc, char *argv[])
return 0;
}
+#else /* ENABLE_BCF_PLUGINS */
+
+int main_plugin(int argc, char *argv[])
+{
+ fprintf(stderr, "bcftools plugins are disabled. To use them, you will need to rebuild\n"
+ "bcftools from the source distribution with plugins enabled.\n");
+ return 1;
+}
+
+#endif /* ENABLE_BCF_PLUGINS */
diff --git a/vcfroh.c b/vcfroh.c
index 9437d7e..8c1d055 100644
--- a/vcfroh.c
+++ b/vcfroh.c
@@ -342,7 +342,7 @@ static void destroy_data(args_t *args)
free(args->samples);
}
-static int load_genmap(args_t *args, bcf1_t *line)
+static int load_genmap(args_t *args, const char *chr)
{
if ( !args->genmap_fname ) { args->ngenmap = 0; return 0; }
@@ -351,7 +351,7 @@ static int load_genmap(args_t *args, bcf1_t *line)
if ( fname )
{
kputsn(args->genmap_fname, fname - args->genmap_fname, &str);
- kputs(bcf_seqname(args->hdr,line), &str);
+ kputs(chr, &str);
kputs(fname+7,&str);
fname = str.s;
}
@@ -488,7 +488,7 @@ static void flush_viterbi(args_t *args, int ismpl)
hmm_restore(args->hmm, smpl->snapshot);
int end = (args->nbuf_max && smpl->nsites >= args->nbuf_max && smpl->nsites > args->nbuf_olap) ? smpl->nsites - args->nbuf_olap : smpl->nsites;
if ( end < smpl->nsites )
- smpl->snapshot = hmm_snapshot(args->hmm, smpl->snapshot, smpl->nsites - args->nbuf_olap - 1);
+ smpl->snapshot = hmm_snapshot(args->hmm, smpl->snapshot, smpl->sites[smpl->nsites - args->nbuf_olap - 1]);
args->igenmap = smpl->igenmap;
hmm_run_viterbi(args->hmm, smpl->nsites, smpl->eprob, smpl->sites);
@@ -631,7 +631,6 @@ static void flush_viterbi(args_t *args, int ismpl)
}
}
-
int read_AF(bcf_sr_regions_t *tgt, bcf1_t *line, double *alt_freq)
{
if ( tgt->nals != line->n_allele ) return -1; // number of alleles does not match
@@ -998,20 +997,25 @@ static void vcfroh(args_t *args, bcf1_t *line)
{
args->prev_rid = line->rid;
args->prev_pos = line->pos;
- skip_rid = load_genmap(args, line);
+ skip_rid = load_genmap(args, bcf_seqname(args->hdr,line));
}
// New chromosome?
if ( args->prev_rid!=line->rid )
{
- skip_rid = load_genmap(args, line);
if ( !args->vi_training )
{
- for (i=0; i<args->roh_smpl->n; i++) flush_viterbi(args, i);
+ for (i=0; i<args->roh_smpl->n; i++)
+ {
+ flush_viterbi(args, i);
+ hmm_reset(args->hmm, args->smpl[i].snapshot);
+ }
}
args->prev_rid = line->rid;
args->prev_pos = line->pos;
+ skip_rid = load_genmap(args, bcf_seqname(args->hdr,line));
}
+ else if ( args->prev_pos == line->pos ) return; // skip duplicate positions
if ( skip_rid )
{
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/bcftools.git
More information about the debian-med-commit
mailing list