[med-svn] [python-pyvcf] 01/03: Imported Upstream version 0.6.7
Andreas Tille
tille at debian.org
Wed Oct 14 09:46:29 UTC 2015
This is an automated email from the git hooks/post-receive script.
tille pushed a commit to branch master
in repository python-pyvcf.
commit ab7d8858037496398c13225fbe6e69bbbae44771
Author: Andreas Tille <tille at debian.org>
Date: Wed Oct 14 11:33:25 2015 +0200
Imported Upstream version 0.6.7
---
MANIFEST.in | 1 +
PKG-INFO | 190 +++++
README.rst | 172 ++++
scripts/vcf_filter.py | 168 ++++
scripts/vcf_melt | 48 ++
setup.cfg | 5 +
setup.py | 86 ++
vcf/__init__.py | 180 +++++
vcf/cparse.pyx | 81 ++
vcf/filters.py | 209 +++++
vcf/model.py | 588 ++++++++++++++
vcf/parser.py | 750 ++++++++++++++++++
vcf/test/1kg.sites.vcf | 200 +++++
vcf/test/1kg.vcf.gz | Bin 0 -> 825355 bytes
vcf/test/README.md | 3 +
vcf/test/__init__.py | 0
vcf/test/bcftools.vcf | 779 ++++++++++++++++++
vcf/test/contig_idonly.vcf | 5 +
vcf/test/example-4.0.vcf | 23 +
vcf/test/example-4.1-bnd.vcf | 34 +
vcf/test/example-4.1-info-multiple-values.vcf | 7 +
vcf/test/example-4.1-ploidy.vcf | 21 +
vcf/test/example-4.1-sv.vcf | 35 +
vcf/test/example-4.1.vcf | 24 +
vcf/test/example-4.2.vcf | 56 ++
vcf/test/freebayes.vcf | 159 ++++
vcf/test/gatk.vcf | 156 ++++
vcf/test/gatk_26_meta.vcf | 4 +
vcf/test/gonl.chr20.release4.gtc.vcf | 120 +++
vcf/test/info-type-character.vcf | 8 +
vcf/test/issue-140-file1.vcf | 35 +
vcf/test/issue-140-file2.vcf | 34 +
vcf/test/issue-140-file3.vcf | 25 +
vcf/test/issue-16.vcf | 21 +
vcf/test/issue-201.vcf.gz | Bin 0 -> 2639 bytes
vcf/test/issue-201.vcf.gz.tbi | Bin 0 -> 129 bytes
vcf/test/issue_49.vcf | 34 +
vcf/test/metadata-whitespace.vcf | 56 ++
vcf/test/mixed-filtering.vcf | 24 +
vcf/test/null_genotype_mono.vcf | 119 +++
vcf/test/parse-meta-line.vcf | 6 +
vcf/test/prof.py | 33 +
vcf/test/samples-space.vcf | 10 +
vcf/test/samtools.vcf | 34 +
vcf/test/string_as_flag.vcf | 8 +
vcf/test/tb.vcf.gz | Bin 0 -> 783 bytes
vcf/test/tb.vcf.gz.tbi | Bin 0 -> 131 bytes
vcf/test/test_vcf.py | 1039 +++++++++++++++++++++++++
vcf/test/uncalled_genotypes.vcf | 7 +
vcf/test/walk_left.vcf | 24 +
vcf/test/walk_refcall.vcf | 22 +
vcf/utils.py | 86 ++
52 files changed, 5729 insertions(+)
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..44f678a
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1 @@
+recursive-include vcf *.pyx
diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..5ce6750
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,190 @@
+Metadata-Version: 1.1
+Name: PyVCF
+Version: 0.6.7
+Summary: Variant Call Format (VCF) parser for Python
+Home-page: https://github.com/jamescasbon/PyVCF
+Author: James Casbon and @jdoughertyii
+Author-email: casbon at gmail.com
+License: UNKNOWN
+Description: A VCFv4.0 and 4.1 parser for Python.
+
+ Online version of PyVCF documentation is available at http://pyvcf.rtfd.org/
+
+ The intent of this module is to mimic the ``csv`` module in the Python stdlib,
+ as opposed to more flexible serialization formats like JSON or YAML. ``vcf``
+ will attempt to parse the content of each record based on the data types
+ specified in the meta-information lines -- specifically the ##INFO and
+ ##FORMAT lines. If these lines are missing or incomplete, it will check
+ against the reserved types mentioned in the spec. Failing that, it will just
+ return strings.
+
+ There main interface is the class: ``Reader``. It takes a file-like
+ object and acts as a reader::
+
+ >>> import vcf
+ >>> vcf_reader = vcf.Reader(open('vcf/test/example-4.0.vcf', 'r'))
+ >>> for record in vcf_reader:
+ ... print record
+ Record(CHROM=20, POS=14370, REF=G, ALT=[A])
+ Record(CHROM=20, POS=17330, REF=T, ALT=[A])
+ Record(CHROM=20, POS=1110696, REF=A, ALT=[G, T])
+ Record(CHROM=20, POS=1230237, REF=T, ALT=[None])
+ Record(CHROM=20, POS=1234567, REF=GTCT, ALT=[G, GTACT])
+
+
+ This produces a great deal of information, but it is conveniently accessed.
+ The attributes of a Record are the 8 fixed fields from the VCF spec::
+
+ * ``Record.CHROM``
+ * ``Record.POS``
+ * ``Record.ID``
+ * ``Record.REF``
+ * ``Record.ALT``
+ * ``Record.QUAL``
+ * ``Record.FILTER``
+ * ``Record.INFO``
+
+ plus attributes to handle genotype information:
+
+ * ``Record.FORMAT``
+ * ``Record.samples``
+ * ``Record.genotype``
+
+ ``samples`` and ``genotype``, not being the title of any column, are left lowercase. The format
+ of the fixed fields is from the spec. Comma-separated lists in the VCF are
+ converted to lists. In particular, one-entry VCF lists are converted to
+ one-entry Python lists (see, e.g., ``Record.ALT``). Semicolon-delimited lists
+ of key=value pairs are converted to Python dictionaries, with flags being given
+ a ``True`` value. Integers and floats are handled exactly as you'd expect::
+
+ >>> vcf_reader = vcf.Reader(open('vcf/test/example-4.0.vcf', 'r'))
+ >>> record = vcf_reader.next()
+ >>> print record.POS
+ 14370
+ >>> print record.ALT
+ [A]
+ >>> print record.INFO['AF']
+ [0.5]
+
+ There are a number of convienience methods and properties for each ``Record`` allowing you to
+ examine properties of interest::
+
+ >>> print record.num_called, record.call_rate, record.num_unknown
+ 3 1.0 0
+ >>> print record.num_hom_ref, record.num_het, record.num_hom_alt
+ 1 1 1
+ >>> print record.nucl_diversity, record.aaf, record.heterozygosity
+ 0.6 [0.5] 0.5
+ >>> print record.get_hets()
+ [Call(sample=NA00002, CallData(GT=1|0, GQ=48, DP=8, HQ=[51, 51]))]
+ >>> print record.is_snp, record.is_indel, record.is_transition, record.is_deletion
+ True False True False
+ >>> print record.var_type, record.var_subtype
+ snp ts
+ >>> print record.is_monomorphic
+ False
+
+ ``record.FORMAT`` will be a string specifying the format of the genotype
+ fields. In case the FORMAT column does not exist, ``record.FORMAT`` is
+ ``None``. Finally, ``record.samples`` is a list of dictionaries containing the
+ parsed sample column and ``record.genotype`` is a way of looking up genotypes
+ by sample name::
+
+ >>> record = vcf_reader.next()
+ >>> for sample in record.samples:
+ ... print sample['GT']
+ 0|0
+ 0|1
+ 0/0
+ >>> print record.genotype('NA00001')['GT']
+ 0|0
+
+ The genotypes are represented by ``Call`` objects, which have three attributes: the
+ corresponding Record ``site``, the sample name in ``sample`` and a dictionary of
+ call data in ``data``::
+
+ >>> call = record.genotype('NA00001')
+ >>> print call.site
+ Record(CHROM=20, POS=17330, REF=T, ALT=[A])
+ >>> print call.sample
+ NA00001
+ >>> print call.data
+ CallData(GT=0|0, GQ=49, DP=3, HQ=[58, 50])
+
+ Please note that as of release 0.4.0, attributes known to have single values (such as
+ ``DP`` and ``GQ`` above) are returned as values. Other attributes are returned
+ as lists (such as ``HQ`` above).
+
+ There are also a number of methods::
+
+ >>> print call.called, call.gt_type, call.gt_bases, call.phased
+ True 0 T|T True
+
+ Metadata regarding the VCF file itself can be investigated through the
+ following attributes:
+
+ * ``Reader.metadata``
+ * ``Reader.infos``
+ * ``Reader.filters``
+ * ``Reader.formats``
+ * ``Reader.samples``
+
+ For example::
+
+ >>> vcf_reader.metadata['fileDate']
+ '20090805'
+ >>> vcf_reader.samples
+ ['NA00001', 'NA00002', 'NA00003']
+ >>> vcf_reader.filters
+ OrderedDict([('q10', Filter(id='q10', desc='Quality below 10')), ('s50', Filter(id='s50', desc='Less than 50% of samples have data'))])
+ >>> vcf_reader.infos['AA'].desc
+ 'Ancestral Allele'
+
+ ALT records are actually classes, so that you can interrogate them::
+
+ >>> reader = vcf.Reader(open('vcf/test/example-4.1-bnd.vcf'))
+ >>> _ = reader.next(); row = reader.next()
+ >>> print row
+ Record(CHROM=1, POS=2, REF=T, ALT=[T[2:3[])
+ >>> bnd = row.ALT[0]
+ >>> print bnd.withinMainAssembly, bnd.orientation, bnd.remoteOrientation, bnd.connectingSequence
+ True False True T
+
+ Random access is supported for files with tabix indexes. Simply call fetch for the
+ region you are interested in::
+
+ >>> vcf_reader = vcf.Reader(filename='vcf/test/tb.vcf.gz')
+ >>> for record in vcf_reader.fetch('20', 1110696, 1230237): # doctest: +SKIP
+ ... print record
+ Record(CHROM=20, POS=1110696, REF=A, ALT=[G, T])
+ Record(CHROM=20, POS=1230237, REF=T, ALT=[None])
+
+ Or extract a single row::
+
+ >>> print vcf_reader.fetch('20', 1110696) # doctest: +SKIP
+ Record(CHROM=20, POS=1110696, REF=A, ALT=[G, T])
+
+
+ The ``Writer`` class provides a way of writing a VCF file. Currently, you must specify a
+ template ``Reader`` which provides the metadata::
+
+ >>> vcf_reader = vcf.Reader(filename='vcf/test/tb.vcf.gz')
+ >>> vcf_writer = vcf.Writer(open('/dev/null', 'w'), vcf_reader)
+ >>> for record in vcf_reader:
+ ... vcf_writer.write_record(record)
+
+
+ An extensible script is available to filter vcf files in vcf_filter.py. VCF filters
+ declared by other packages will be available for use in this script. Please
+ see :doc:`FILTERS` for full description.
+
+
+Keywords: bioinformatics
+Platform: UNKNOWN
+Classifier: Development Status :: 4 - Beta
+Classifier: Intended Audience :: Developers
+Classifier: Intended Audience :: Science/Research
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Topic :: Scientific/Engineering
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..a60c0c8
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,172 @@
+A VCFv4.0 and 4.1 parser for Python.
+
+Online version of PyVCF documentation is available at http://pyvcf.rtfd.org/
+
+The intent of this module is to mimic the ``csv`` module in the Python stdlib,
+as opposed to more flexible serialization formats like JSON or YAML. ``vcf``
+will attempt to parse the content of each record based on the data types
+specified in the meta-information lines -- specifically the ##INFO and
+##FORMAT lines. If these lines are missing or incomplete, it will check
+against the reserved types mentioned in the spec. Failing that, it will just
+return strings.
+
+There main interface is the class: ``Reader``. It takes a file-like
+object and acts as a reader::
+
+ >>> import vcf
+ >>> vcf_reader = vcf.Reader(open('vcf/test/example-4.0.vcf', 'r'))
+ >>> for record in vcf_reader:
+ ... print record
+ Record(CHROM=20, POS=14370, REF=G, ALT=[A])
+ Record(CHROM=20, POS=17330, REF=T, ALT=[A])
+ Record(CHROM=20, POS=1110696, REF=A, ALT=[G, T])
+ Record(CHROM=20, POS=1230237, REF=T, ALT=[None])
+ Record(CHROM=20, POS=1234567, REF=GTCT, ALT=[G, GTACT])
+
+
+This produces a great deal of information, but it is conveniently accessed.
+The attributes of a Record are the 8 fixed fields from the VCF spec::
+
+ * ``Record.CHROM``
+ * ``Record.POS``
+ * ``Record.ID``
+ * ``Record.REF``
+ * ``Record.ALT``
+ * ``Record.QUAL``
+ * ``Record.FILTER``
+ * ``Record.INFO``
+
+plus attributes to handle genotype information:
+
+ * ``Record.FORMAT``
+ * ``Record.samples``
+ * ``Record.genotype``
+
+``samples`` and ``genotype``, not being the title of any column, are left lowercase. The format
+of the fixed fields is from the spec. Comma-separated lists in the VCF are
+converted to lists. In particular, one-entry VCF lists are converted to
+one-entry Python lists (see, e.g., ``Record.ALT``). Semicolon-delimited lists
+of key=value pairs are converted to Python dictionaries, with flags being given
+a ``True`` value. Integers and floats are handled exactly as you'd expect::
+
+ >>> vcf_reader = vcf.Reader(open('vcf/test/example-4.0.vcf', 'r'))
+ >>> record = vcf_reader.next()
+ >>> print record.POS
+ 14370
+ >>> print record.ALT
+ [A]
+ >>> print record.INFO['AF']
+ [0.5]
+
+There are a number of convienience methods and properties for each ``Record`` allowing you to
+examine properties of interest::
+
+ >>> print record.num_called, record.call_rate, record.num_unknown
+ 3 1.0 0
+ >>> print record.num_hom_ref, record.num_het, record.num_hom_alt
+ 1 1 1
+ >>> print record.nucl_diversity, record.aaf, record.heterozygosity
+ 0.6 [0.5] 0.5
+ >>> print record.get_hets()
+ [Call(sample=NA00002, CallData(GT=1|0, GQ=48, DP=8, HQ=[51, 51]))]
+ >>> print record.is_snp, record.is_indel, record.is_transition, record.is_deletion
+ True False True False
+ >>> print record.var_type, record.var_subtype
+ snp ts
+ >>> print record.is_monomorphic
+ False
+
+``record.FORMAT`` will be a string specifying the format of the genotype
+fields. In case the FORMAT column does not exist, ``record.FORMAT`` is
+``None``. Finally, ``record.samples`` is a list of dictionaries containing the
+parsed sample column and ``record.genotype`` is a way of looking up genotypes
+by sample name::
+
+ >>> record = vcf_reader.next()
+ >>> for sample in record.samples:
+ ... print sample['GT']
+ 0|0
+ 0|1
+ 0/0
+ >>> print record.genotype('NA00001')['GT']
+ 0|0
+
+The genotypes are represented by ``Call`` objects, which have three attributes: the
+corresponding Record ``site``, the sample name in ``sample`` and a dictionary of
+call data in ``data``::
+
+ >>> call = record.genotype('NA00001')
+ >>> print call.site
+ Record(CHROM=20, POS=17330, REF=T, ALT=[A])
+ >>> print call.sample
+ NA00001
+ >>> print call.data
+ CallData(GT=0|0, GQ=49, DP=3, HQ=[58, 50])
+
+Please note that as of release 0.4.0, attributes known to have single values (such as
+``DP`` and ``GQ`` above) are returned as values. Other attributes are returned
+as lists (such as ``HQ`` above).
+
+There are also a number of methods::
+
+ >>> print call.called, call.gt_type, call.gt_bases, call.phased
+ True 0 T|T True
+
+Metadata regarding the VCF file itself can be investigated through the
+following attributes:
+
+ * ``Reader.metadata``
+ * ``Reader.infos``
+ * ``Reader.filters``
+ * ``Reader.formats``
+ * ``Reader.samples``
+
+For example::
+
+ >>> vcf_reader.metadata['fileDate']
+ '20090805'
+ >>> vcf_reader.samples
+ ['NA00001', 'NA00002', 'NA00003']
+ >>> vcf_reader.filters
+ OrderedDict([('q10', Filter(id='q10', desc='Quality below 10')), ('s50', Filter(id='s50', desc='Less than 50% of samples have data'))])
+ >>> vcf_reader.infos['AA'].desc
+ 'Ancestral Allele'
+
+ALT records are actually classes, so that you can interrogate them::
+
+ >>> reader = vcf.Reader(open('vcf/test/example-4.1-bnd.vcf'))
+ >>> _ = reader.next(); row = reader.next()
+ >>> print row
+ Record(CHROM=1, POS=2, REF=T, ALT=[T[2:3[])
+ >>> bnd = row.ALT[0]
+ >>> print bnd.withinMainAssembly, bnd.orientation, bnd.remoteOrientation, bnd.connectingSequence
+ True False True T
+
+Random access is supported for files with tabix indexes. Simply call fetch for the
+region you are interested in::
+
+ >>> vcf_reader = vcf.Reader(filename='vcf/test/tb.vcf.gz')
+ >>> for record in vcf_reader.fetch('20', 1110696, 1230237): # doctest: +SKIP
+ ... print record
+ Record(CHROM=20, POS=1110696, REF=A, ALT=[G, T])
+ Record(CHROM=20, POS=1230237, REF=T, ALT=[None])
+
+Or extract a single row::
+
+ >>> print vcf_reader.fetch('20', 1110696) # doctest: +SKIP
+ Record(CHROM=20, POS=1110696, REF=A, ALT=[G, T])
+
+
+The ``Writer`` class provides a way of writing a VCF file. Currently, you must specify a
+template ``Reader`` which provides the metadata::
+
+ >>> vcf_reader = vcf.Reader(filename='vcf/test/tb.vcf.gz')
+ >>> vcf_writer = vcf.Writer(open('/dev/null', 'w'), vcf_reader)
+ >>> for record in vcf_reader:
+ ... vcf_writer.write_record(record)
+
+
+An extensible script is available to filter vcf files in vcf_filter.py. VCF filters
+declared by other packages will be available for use in this script. Please
+see :doc:`FILTERS` for full description.
+
diff --git a/scripts/vcf_filter.py b/scripts/vcf_filter.py
new file mode 100644
index 0000000..fd32b39
--- /dev/null
+++ b/scripts/vcf_filter.py
@@ -0,0 +1,168 @@
+#!/usr/bin/env python
+import sys
+import argparse
+import pkg_resources
+
+import vcf
+from vcf.parser import _Filter
+
+def create_filt_parser(name):
+ parser = argparse.ArgumentParser(description='Parser for %s' % name,
+ add_help=False
+ )
+ parser.add_argument('rest', nargs=argparse.REMAINDER, help=argparse.SUPPRESS)
+
+ return parser
+
+def create_core_parser():
+ # we have to use custom formatted usage, because of the
+ # multi-stage argument parsing (otherwise the filter arguments
+ # are grouped together with the other optionals)
+ parser = argparse.ArgumentParser(description='Filter a VCF file',
+ add_help=False,
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+ usage="""%(prog)s [-h] [--no-short-circuit] [--no-filtered]
+ [--output OUTPUT] [--local-script LOCAL_SCRIPT]
+ input filter [filter_args] [filter [filter_args]] ...
+ """
+ )
+ parser.add_argument('-h', '--help', action='store_true',
+ help='Show this help message and exit.')
+ parser.add_argument('input', metavar='input', type=argparse.FileType('rb'), nargs='?', default=None,
+ help='File to process (use - for STDIN)')
+# parser.add_argument('filters', metavar='filter', type=str, nargs='*', default=None,
+# help='Filters to use')
+ parser.add_argument('--no-short-circuit', action='store_true',
+ help='Do not stop filter processing on a site if any filter is triggered')
+ parser.add_argument('--output', action='store', default=sys.stdout,
+ help='Filename to output [STDOUT]')
+ parser.add_argument('--no-filtered', action='store_true',
+ help='Output only sites passing the filters')
+ parser.add_argument('--local-script', action='store', default=None,
+ help='Python file in current working directory with the filter classes')
+ parser.add_argument('rest', nargs=argparse.REMAINDER, help=argparse.SUPPRESS)
+
+ return parser
+
+# argument parsing strategy
+# loading a script given at the command line poses a difficulty
+# for using the argparse in a simple way -- the command line arguments
+# are not completely known the first time command line is parsed
+# requirements:
+# - display all filters with options grouped by the filters in help screen
+# - check if only arguments for currently used filters are given
+# - to increase legibility when using more filters, arguments should
+# follow the filter name
+# - it is good to specify the filters explicitly by name,
+# because the order of filtering can matter
+# solution
+# - change the command syntax to
+# vcf_filter.py --core-options input filter1 --filter1-args filter2 filter3
+# - parse the core program options with parse_known_args
+# - use add_argument_group for filters (subparsers won't work, they require
+# the second command in argv[1])
+# - create all-filters parser when displaying the help
+# - parse the arguments incrementally on argparse.REMAINDER of the previous
+
+ # TODO: allow filter specification by short name
+ # TODO: flag that writes filter output into INFO column
+ # TODO: argument use implies filter use
+ # TODO: parallelize
+ # TODO: prevent plugins raising an exception from crashing the script
+
+def main():
+ # dynamically build the list of available filters
+ filters = {}
+
+ # parse command line args
+ # (mainly because of local_script)
+ parser = create_core_parser()
+ (args, unknown_args) = parser.parse_known_args()
+
+ # add filter to dictionary, extend help message
+ # with help/arguments of each filter
+ def addfilt(filt):
+ filters[filt.name] = filt
+ arg_group = parser.add_argument_group(filt.name, filt.__doc__)
+ filt.customize_parser(arg_group)
+
+ # look for global extensions
+ for p in pkg_resources.iter_entry_points('vcf.filters'):
+ filt = p.load()
+ addfilt(filt)
+
+ # add all classes from local script, if present
+ if args.local_script != None:
+ import inspect
+ import os
+ sys.path.insert(0, os.getcwd())
+ module_name = args.local_script.replace('.py', '')
+ mod = __import__(module_name)
+ classes = inspect.getmembers(mod, inspect.isclass)
+ for name, cls in classes:
+ addfilt(cls)
+
+ # go through the filters on the command line
+ # one by one, trying to consume only the declared arguments
+ used_filters = []
+ while len(args.rest):
+ filter_name = args.rest.pop(0)
+ if filter_name not in filters:
+ sys.exit("%s is not a known filter (%s)" % (filter_name, str(filters.keys())))
+
+ # create a parser only for arguments of current filter
+ filt_parser = create_filt_parser(filter_name)
+ filters[filter_name].customize_parser(filt_parser)
+ (known_filt_args, unknown_filt_args) = filt_parser.parse_known_args(args.rest)
+ if len(unknown_filt_args):
+ sys.exit("%s has no arguments like %s" % (filter_name, unknown_filt_args))
+
+ used_filters.append((filter_name, known_filt_args))
+ args.rest = known_filt_args.rest
+
+ # print help using the 'help' parser, so it includes
+ # all possible filters and arguments
+ if args.help or len(used_filters) == 0 or args.input == None:
+ parser.print_help()
+ parser.exit()
+
+ inp = vcf.Reader(args.input)
+
+ # build filter chain
+ chain = []
+ for (name, filter_args) in used_filters:
+ f = filters[name](filter_args)
+ chain.append(f)
+ # add a filter record to the output
+ short_doc = f.__doc__ or ''
+ short_doc = short_doc.split('\n')[0].lstrip()
+ inp.filters[f.filter_name()] = _Filter(f.filter_name(), short_doc)
+
+ # output must be created after all the filter records have been added
+ output = vcf.Writer(args.output, inp)
+
+ # apply filters
+ short_circuit = not args.no_short_circuit
+ drop_filtered = args.no_filtered
+
+ for record in inp:
+ output_record = True
+ for filt in chain:
+ result = filt(record)
+ if result == None: continue
+
+ # save some work by skipping the rest of the code
+ if drop_filtered:
+ output_record = False
+ break
+
+ record.add_filter(filt.filter_name())
+ if short_circuit: break
+
+ if output_record:
+ # use PASS only if other filter names appear in the FILTER column
+ #FIXME: is this good idea?
+ if record.FILTER is None and not drop_filtered: record.FILTER = 'PASS'
+ output.write_record(record)
+
+if __name__ == '__main__': main()
diff --git a/scripts/vcf_melt b/scripts/vcf_melt
new file mode 100644
index 0000000..0eddba6
--- /dev/null
+++ b/scripts/vcf_melt
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+""" Melt a VCF file into a tab delimited set of calls, one per line
+
+VCF files have all the calls from different samples on one line. This
+script reads vcf on stdin and writes all calls to stdout in tab delimited
+format with one call in one sample per line. This makes it easy to find
+a given sample's genotype with, say, grep.
+"""
+
+import sys
+import csv
+import vcf
+
+out = csv.writer(sys.stdout, delimiter='\t')
+if len(sys.argv) > 1:
+ inp = file(sys.argv[1])
+else:
+ inp = sys.stdin
+reader = vcf.VCFReader(inp)
+
+formats = reader.formats.keys()
+infos = reader.infos.keys()
+
+header = ["SAMPLE"] + formats + ['FILTER', 'CHROM', 'POS', 'REF', 'ALT', 'ID'] \
+ + ['info.' + x for x in infos]
+
+
+out.writerow(header)
+
+
+def flatten(x):
+ if type(x) == type([]):
+ x = ','.join(map(str, x))
+ return x
+
+for record in reader:
+ info_row = [flatten(record.INFO.get(x, None)) for x in infos]
+ fixed = [record.CHROM, record.POS, record.REF, record.ALT, record.ID]
+
+ for sample in record.samples:
+ row = [sample.sample]
+ # Format fields not present will simply end up "blank"
+ # in the output
+ row += [flatten(getattr(sample.data, x, None)) for x in formats]
+ row += [record.FILTER or '.']
+ row += fixed
+ row += info_row
+ out.writerow(row)
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..861a9f5
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,5 @@
+[egg_info]
+tag_build =
+tag_date = 0
+tag_svn_revision = 0
+
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..1ea709c
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,86 @@
+from setuptools import setup
+from distutils.core import setup
+from distutils.extension import Extension
+
+try:
+ from Cython.Distutils import build_ext
+ CYTHON = True
+except:
+ CYTHON = False
+
+requires = []
+
+# python 2.6 does not have argparse
+try:
+ import argparse
+except ImportError:
+ requires.append('argparse')
+
+import collections
+try:
+ collections.Counter
+except AttributeError:
+ requires.append('counter')
+try:
+ collections.OrderedDict
+except AttributeError:
+ requires.append('ordereddict')
+
+# get the version without an import
+VERSION = "Undefined"
+DOC = ""
+inside_doc = False
+for line in open('vcf/__init__.py'):
+ if "'''" in line:
+ inside_doc = not inside_doc
+ if inside_doc:
+ DOC += line.replace("'''", "")
+
+ if (line.startswith('VERSION')):
+ exec(line.strip())
+
+extras = {}
+if CYTHON:
+ extras['cmdclass'] = {'build_ext': build_ext}
+ extras['ext_modules'] = [Extension("vcf.cparse", ["vcf/cparse.pyx"])]
+
+setup(
+ name='PyVCF',
+ packages=['vcf', 'vcf.test'],
+ scripts=['scripts/vcf_melt', 'scripts/vcf_filter.py'],
+ author='James Casbon and @jdoughertyii',
+ author_email='casbon at gmail.com',
+ description='Variant Call Format (VCF) parser for Python',
+ long_description=DOC,
+ test_suite='vcf.test.test_vcf.suite',
+ install_requires=['distribute'],
+ requires=requires,
+ entry_points = {
+ 'vcf.filters': [
+ 'site_quality = vcf.filters:SiteQuality',
+ 'vgq = vcf.filters:VariantGenotypeQuality',
+ 'eb = vcf.filters:ErrorBiasFilter',
+ 'dps = vcf.filters:DepthPerSample',
+ 'avg-dps = vcf.filters:AvgDepthPerSample',
+ 'snp-only = vcf.filters:SnpOnly',
+ ]
+ },
+ url='https://github.com/jamescasbon/PyVCF',
+ version=VERSION,
+ classifiers = [
+ 'Development Status :: 4 - Beta',
+ 'Intended Audience :: Developers',
+ 'Intended Audience :: Science/Research',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python',
+ 'Programming Language :: Python :: 3',
+ 'Topic :: Scientific/Engineering',
+ ],
+ keywords='bioinformatics',
+ use_2to3=True,
+ include_package_data=True,
+ package_data = {
+ '': ['*.vcf', '*.gz', '*.tbi'],
+ },
+ **extras
+)
diff --git a/vcf/__init__.py b/vcf/__init__.py
new file mode 100644
index 0000000..875e2d4
--- /dev/null
+++ b/vcf/__init__.py
@@ -0,0 +1,180 @@
+#!/usr/bin/env python
+'''A VCFv4.0 and 4.1 parser for Python.
+
+Online version of PyVCF documentation is available at http://pyvcf.rtfd.org/
+
+The intent of this module is to mimic the ``csv`` module in the Python stdlib,
+as opposed to more flexible serialization formats like JSON or YAML. ``vcf``
+will attempt to parse the content of each record based on the data types
+specified in the meta-information lines -- specifically the ##INFO and
+##FORMAT lines. If these lines are missing or incomplete, it will check
+against the reserved types mentioned in the spec. Failing that, it will just
+return strings.
+
+There main interface is the class: ``Reader``. It takes a file-like
+object and acts as a reader::
+
+ >>> import vcf
+ >>> vcf_reader = vcf.Reader(open('vcf/test/example-4.0.vcf', 'r'))
+ >>> for record in vcf_reader:
+ ... print record
+ Record(CHROM=20, POS=14370, REF=G, ALT=[A])
+ Record(CHROM=20, POS=17330, REF=T, ALT=[A])
+ Record(CHROM=20, POS=1110696, REF=A, ALT=[G, T])
+ Record(CHROM=20, POS=1230237, REF=T, ALT=[None])
+ Record(CHROM=20, POS=1234567, REF=GTCT, ALT=[G, GTACT])
+
+
+This produces a great deal of information, but it is conveniently accessed.
+The attributes of a Record are the 8 fixed fields from the VCF spec::
+
+ * ``Record.CHROM``
+ * ``Record.POS``
+ * ``Record.ID``
+ * ``Record.REF``
+ * ``Record.ALT``
+ * ``Record.QUAL``
+ * ``Record.FILTER``
+ * ``Record.INFO``
+
+plus attributes to handle genotype information:
+
+ * ``Record.FORMAT``
+ * ``Record.samples``
+ * ``Record.genotype``
+
+``samples`` and ``genotype``, not being the title of any column, are left lowercase. The format
+of the fixed fields is from the spec. Comma-separated lists in the VCF are
+converted to lists. In particular, one-entry VCF lists are converted to
+one-entry Python lists (see, e.g., ``Record.ALT``). Semicolon-delimited lists
+of key=value pairs are converted to Python dictionaries, with flags being given
+a ``True`` value. Integers and floats are handled exactly as you'd expect::
+
+ >>> vcf_reader = vcf.Reader(open('vcf/test/example-4.0.vcf', 'r'))
+ >>> record = vcf_reader.next()
+ >>> print record.POS
+ 14370
+ >>> print record.ALT
+ [A]
+ >>> print record.INFO['AF']
+ [0.5]
+
+There are a number of convienience methods and properties for each ``Record`` allowing you to
+examine properties of interest::
+
+ >>> print record.num_called, record.call_rate, record.num_unknown
+ 3 1.0 0
+ >>> print record.num_hom_ref, record.num_het, record.num_hom_alt
+ 1 1 1
+ >>> print record.nucl_diversity, record.aaf, record.heterozygosity
+ 0.6 [0.5] 0.5
+ >>> print record.get_hets()
+ [Call(sample=NA00002, CallData(GT=1|0, GQ=48, DP=8, HQ=[51, 51]))]
+ >>> print record.is_snp, record.is_indel, record.is_transition, record.is_deletion
+ True False True False
+ >>> print record.var_type, record.var_subtype
+ snp ts
+ >>> print record.is_monomorphic
+ False
+
+``record.FORMAT`` will be a string specifying the format of the genotype
+fields. In case the FORMAT column does not exist, ``record.FORMAT`` is
+``None``. Finally, ``record.samples`` is a list of dictionaries containing the
+parsed sample column and ``record.genotype`` is a way of looking up genotypes
+by sample name::
+
+ >>> record = vcf_reader.next()
+ >>> for sample in record.samples:
+ ... print sample['GT']
+ 0|0
+ 0|1
+ 0/0
+ >>> print record.genotype('NA00001')['GT']
+ 0|0
+
+The genotypes are represented by ``Call`` objects, which have three attributes: the
+corresponding Record ``site``, the sample name in ``sample`` and a dictionary of
+call data in ``data``::
+
+ >>> call = record.genotype('NA00001')
+ >>> print call.site
+ Record(CHROM=20, POS=17330, REF=T, ALT=[A])
+ >>> print call.sample
+ NA00001
+ >>> print call.data
+ CallData(GT=0|0, GQ=49, DP=3, HQ=[58, 50])
+
+Please note that as of release 0.4.0, attributes known to have single values (such as
+``DP`` and ``GQ`` above) are returned as values. Other attributes are returned
+as lists (such as ``HQ`` above).
+
+There are also a number of methods::
+
+ >>> print call.called, call.gt_type, call.gt_bases, call.phased
+ True 0 T|T True
+
+Metadata regarding the VCF file itself can be investigated through the
+following attributes:
+
+ * ``Reader.metadata``
+ * ``Reader.infos``
+ * ``Reader.filters``
+ * ``Reader.formats``
+ * ``Reader.samples``
+
+For example::
+
+ >>> vcf_reader.metadata['fileDate']
+ '20090805'
+ >>> vcf_reader.samples
+ ['NA00001', 'NA00002', 'NA00003']
+ >>> vcf_reader.filters
+ OrderedDict([('q10', Filter(id='q10', desc='Quality below 10')), ('s50', Filter(id='s50', desc='Less than 50% of samples have data'))])
+ >>> vcf_reader.infos['AA'].desc
+ 'Ancestral Allele'
+
+ALT records are actually classes, so that you can interrogate them::
+
+ >>> reader = vcf.Reader(open('vcf/test/example-4.1-bnd.vcf'))
+ >>> _ = reader.next(); row = reader.next()
+ >>> print row
+ Record(CHROM=1, POS=2, REF=T, ALT=[T[2:3[])
+ >>> bnd = row.ALT[0]
+ >>> print bnd.withinMainAssembly, bnd.orientation, bnd.remoteOrientation, bnd.connectingSequence
+ True False True T
+
+Random access is supported for files with tabix indexes. Simply call fetch for the
+region you are interested in::
+
+ >>> vcf_reader = vcf.Reader(filename='vcf/test/tb.vcf.gz')
+ >>> for record in vcf_reader.fetch('20', 1110696, 1230237): # doctest: +SKIP
+ ... print record
+ Record(CHROM=20, POS=1110696, REF=A, ALT=[G, T])
+ Record(CHROM=20, POS=1230237, REF=T, ALT=[None])
+
+Or extract a single row::
+
+ >>> print vcf_reader.fetch('20', 1110696) # doctest: +SKIP
+ Record(CHROM=20, POS=1110696, REF=A, ALT=[G, T])
+
+
+The ``Writer`` class provides a way of writing a VCF file. Currently, you must specify a
+template ``Reader`` which provides the metadata::
+
+ >>> vcf_reader = vcf.Reader(filename='vcf/test/tb.vcf.gz')
+ >>> vcf_writer = vcf.Writer(open('/dev/null', 'w'), vcf_reader)
+ >>> for record in vcf_reader:
+ ... vcf_writer.write_record(record)
+
+
+An extensible script is available to filter vcf files in vcf_filter.py. VCF filters
+declared by other packages will be available for use in this script. Please
+see :doc:`FILTERS` for full description.
+
+'''
+from vcf.parser import Reader, Writer
+from vcf.parser import VCFReader, VCFWriter
+from vcf.filters import Base as Filter
+from vcf.parser import RESERVED_INFO, RESERVED_FORMAT
+
+VERSION = '0.6.7'
diff --git a/vcf/cparse.pyx b/vcf/cparse.pyx
new file mode 100644
index 0000000..682e6a7
--- /dev/null
+++ b/vcf/cparse.pyx
@@ -0,0 +1,81 @@
+from model import _Call
+
+cdef _map(func, iterable, bad='.'):
+ '''``map``, but make bad values None.'''
+ return [func(x) if x != bad else None
+ for x in iterable]
+
+INTEGER = 'Integer'
+FLOAT = 'Float'
+NUMERIC = 'Numeric'
+
+def parse_samples(
+ list names, list samples, samp_fmt,
+ list samp_fmt_types, list samp_fmt_nums, site):
+
+ cdef char *name, *fmt, *entry_type, *sample
+ cdef int i, j
+ cdef list samp_data = []
+ cdef dict sampdict
+ cdef list sampvals
+ n_samples = len(samples)
+ n_formats = len(samp_fmt._fields)
+
+ for i in range(n_samples):
+ name = names[i]
+ sample = samples[i]
+
+ # parse the data for this sample
+ sampdat = [None] * n_formats
+
+ sampvals = sample.split(':')
+
+ for j in range(n_formats):
+ if j >= len(sampvals):
+ break
+ vals = sampvals[j]
+
+ # short circuit the most common
+ if vals == '.' or vals == './.':
+ sampdat[j] = None
+ continue
+
+ entry_type = samp_fmt_types[j]
+ # TODO: entry_num is None for unbounded lists
+ entry_num = samp_fmt_nums[j]
+
+ # we don't need to split single entries
+ if entry_num == 1 or ',' not in vals:
+
+ if entry_type == INTEGER:
+ try:
+ sampdat[j] = int(vals)
+ except ValueError:
+ sampdat[j] = float(vals)
+ elif entry_type == FLOAT or entry_type == NUMERIC:
+ sampdat[j] = float(vals)
+ else:
+ sampdat[j] = vals
+
+ if entry_num != 1:
+ sampdat[j] = (sampdat[j])
+
+ continue
+
+ vals = vals.split(',')
+
+ if entry_type == INTEGER:
+ try:
+ sampdat[j] = _map(int, vals)
+ except ValueError:
+ sampdat[j] = map(float, vals)
+ elif entry_type == FLOAT or entry_type == NUMERIC:
+ sampdat[j] = _map(float, vals)
+ else:
+ sampdat[j] = vals
+
+ # create a call object
+ call = _Call(site, name, samp_fmt(*sampdat))
+ samp_data.append(call)
+
+ return samp_data
diff --git a/vcf/filters.py b/vcf/filters.py
new file mode 100644
index 0000000..ab4e4aa
--- /dev/null
+++ b/vcf/filters.py
@@ -0,0 +1,209 @@
+try:
+ from rpy2 import robjects
+except:
+ robjects = None
+
+
+class Base(object):
+ """ Base class for vcf_filter.py filters.
+
+ Use the class docstring to provide the filter description
+ as it appears in vcf_filter.py
+ """
+
+ name = 'f'
+ """ name used to activate filter and in VCF headers """
+
+ @classmethod
+ def customize_parser(self, parser):
+ """ hook to extend argparse parser with custom arguments """
+ pass
+
+ def __init__(self, args):
+ """ create the filter using argparse ``args`` """
+ self.threshold = 0
+
+ def __call__(self):
+ """ filter a site, return not None if the site should be filtered """
+ raise NotImplementedError('Filters must implement this method')
+
+ def filter_name(self):
+ """ return the name to put in the VCF header, default is ``name`` + ``threshold`` """
+ return '%s%s' % (self.name, self.threshold)
+
+
+class SiteQuality(Base):
+ """ Filter low quailty sites """
+
+ name = 'sq'
+
+ @classmethod
+ def customize_parser(self, parser):
+ parser.add_argument('--site-quality', type=int, default=30,
+ help='Filter sites below this quality')
+
+ def __init__(self, args):
+ self.threshold = args.site_quality
+
+ def __call__(self, record):
+ if record.QUAL < self.threshold:
+ return record.QUAL
+
+
+class VariantGenotypeQuality(Base):
+ """ Filters sites with only low quality variants.
+
+ It is possible to have a high site quality with many low quality calls. This
+ filter demands at least one call be above a threshold quality.
+ """
+
+ name = 'mgq'
+
+ @classmethod
+ def customize_parser(self, parser):
+ parser.add_argument('--genotype-quality', type=int, default=50,
+ help='Filter sites with no genotypes above this quality')
+
+ def __init__(self, args):
+ self.threshold = args.genotype_quality
+
+ def __call__(self, record):
+ if not record.is_monomorphic:
+ vgq = max([x['GQ'] for x in record if x.is_variant])
+ if vgq < self.threshold:
+ return vgq
+
+
+class ErrorBiasFilter(Base):
+ """ Filter sites that look like correlated sequencing errors.
+
+ Some sequencing technologies, notably pyrosequencing, produce mutation
+ hotspots where there is a constant level of noise, producing some reference
+ and some heterozygote calls.
+
+ This filter computes a Bayes Factor for each site by comparing
+ the binomial likelihood of the observed allelic depths under:
+
+ * A model with constant error equal to the MAF.
+ * A model where each sample is the ploidy reported by the caller.
+
+ The test value is the log of the bayes factor. Higher values
+ are more likely to be errors.
+
+ Note: this filter requires rpy2
+ """
+
+ name = 'eb'
+
+ @classmethod
+ def customize_parser(self, parser):
+ parser.add_argument('--eblr', type=int, default=-10,
+ help='Filter sites above this error log odds ratio')
+
+ def __init__(self, args):
+ self.threshold = args.eblr
+ if robjects is None:
+ raise Exception('Please install rpy2')
+ self.ll_test = robjects.r('''
+ function(ra, aa, gt, diag=F) {
+ ra_sum = sum(ra)
+ aa_sum = sum(aa)
+ ab = aa_sum / (ra_sum + aa_sum)
+ gtp = 0.5 + (0.48*(gt-1))
+
+ error_likelihood = log(dbinom(aa, ra+aa, ab))
+ gt_likelihood = log(dbinom(aa, ra+aa, gtp))
+
+ if (diag) {
+ print(ra)
+ print(aa)
+ print(gtp)
+ print(ab)
+ print(error_likelihood)
+ print(gt_likelihood)
+ }
+ error_likelihood = sum(error_likelihood)
+ gt_likelihood = sum(gt_likelihood)
+ c(error_likelihood - gt_likelihood, ab)
+ }
+ ''')
+
+ def __call__(self, record):
+ if record.is_monomorphic:
+ return None
+ passed, tv, ab = self.bias_test(record.samples)
+ if tv > self.threshold:
+ return tv
+
+ def bias_test(self, calls):
+ calls = [x for x in calls if x.called]
+ #TODO: single genotype assumption
+
+ try:
+ # freebayes
+ ra = robjects.IntVector([x['RO'][0] for x in calls])
+ aa = robjects.IntVector([x['AO'][0] for x in calls])
+ except AttributeError:
+ # GATK
+ ra = robjects.IntVector([x['AD'][0] for x in calls])
+ aa = robjects.IntVector([x['AD'][1] for x in calls])
+
+ gt = robjects.IntVector([x.gt_type for x in calls])
+ test_val, ab = self.ll_test(ra, aa, gt)
+
+ return test_val < 0, test_val, ab
+
+
+class DepthPerSample(Base):
+ 'Threshold read depth per sample'
+
+ name = 'dps'
+
+ @classmethod
+ def customize_parser(self, parser):
+ parser.add_argument('--depth-per-sample', type=int, default=5,
+ help='Minimum required coverage in each sample')
+
+ def __init__(self, args):
+ self.threshold = args.depth_per_sample
+
+ def __call__(self, record):
+ # do not test depth for indels
+ if record.is_indel:
+ return
+
+ mindepth = min([sam['DP'] for sam in record.samples])
+ if mindepth < self.threshold:
+ return mindepth
+
+
+class AvgDepthPerSample(Base):
+ 'Threshold average read depth per sample (read_depth / sample_count)'
+
+ name = 'avg-dps'
+
+ @classmethod
+ def customize_parser(self, parser):
+ parser.add_argument('--avg-depth-per-sample', type=int, default=3,
+ help='Minimum required average coverage per sample')
+
+ def __init__(self, args):
+ self.threshold = args.avg_depth_per_sample
+
+ def __call__(self, record):
+ avgcov = float(record.INFO['DP']) / len(record.samples)
+ if avgcov < self.threshold:
+ return avgcov
+
+
+class SnpOnly(Base):
+ 'Choose only SNP variants'
+
+ name = 'snp-only'
+
+ def __call__(self, record):
+ if not record.is_snp:
+ return True
+
+ def filter_name(self):
+ return self.name
diff --git a/vcf/model.py b/vcf/model.py
new file mode 100644
index 0000000..c6e8f42
--- /dev/null
+++ b/vcf/model.py
@@ -0,0 +1,588 @@
+from abc import ABCMeta, abstractmethod
+import collections
+import sys
+
+try:
+ from collections import Counter
+except ImportError:
+ from counter import Counter
+
+
+class _Call(object):
+ """ A genotype call, a cell entry in a VCF file"""
+
+ __slots__ = ['site', 'sample', 'data', 'gt_nums', 'called']
+
+ def __init__(self, site, sample, data):
+ #: The ``_Record`` for this ``_Call``
+ self.site = site
+ #: The sample name
+ self.sample = sample
+ #: Dictionary of data from the VCF file
+ self.data = data
+ try:
+ self.gt_nums = self.data.GT
+ #: True if the GT is not ./.
+ self.called = self.gt_nums is not None
+ except AttributeError:
+ self.gt_nums = None
+ #62 a call without a genotype is not defined as called or not
+ self.called = None
+
+ def __repr__(self):
+ return "Call(sample=%s, %s)" % (self.sample, str(self.data))
+
+ def __eq__(self, other):
+ """ Two _Calls are equal if their _Records are equal
+ and the samples and ``gt_type``s are the same
+ """
+ return (self.site == getattr(other, "site", None)
+ and self.sample == getattr(other, "sample", None)
+ and self.gt_type == getattr(other, "gt_type", None))
+
+ def __getstate__(self):
+ return dict((attr, getattr(self, attr)) for attr in self.__slots__)
+
+ def __setstate__(self, state):
+ for attr in self.__slots__:
+ setattr(self, attr, state.get(attr))
+
+ def gt_phase_char(self):
+ return "/" if not self.phased else "|"
+
+ @property
+ def gt_alleles(self):
+ '''The numbers of the alleles called at a given sample'''
+ # grab the numeric alleles of the gt string; tokenize by phasing
+ return self.gt_nums.split(self.gt_phase_char())
+
+ @property
+ def gt_bases(self):
+ '''The actual genotype alleles.
+ E.g. if VCF genotype is 0/1, return A/G
+ '''
+ # nothing to do if no genotype call
+ if self.called:
+ # lookup and return the actual DNA alleles
+ try:
+ return self.gt_phase_char().join(str(self.site.alleles[int(X)]) for X in self.gt_alleles)
+ except:
+ sys.stderr.write("Allele number not found in list of alleles\n")
+ else:
+ return None
+
+ @property
+ def gt_type(self):
+ '''The type of genotype.
+ hom_ref = 0
+ het = 1
+ hom_alt = 2 (we don;t track _which+ ALT)
+ uncalled = None
+ '''
+ # extract the numeric alleles of the gt string
+ if self.called:
+ alleles = self.gt_alleles
+ if all(X == alleles[0] for X in alleles[1:]):
+ if alleles[0] == "0":
+ return 0
+ else:
+ return 2
+ else:
+ return 1
+ else:
+ return None
+
+ @property
+ def phased(self):
+ '''A boolean indicating whether or not
+ the genotype is phased for this sample
+ '''
+ return self.gt_nums is not None and self.gt_nums.find("|") >= 0
+
+ def __getitem__(self, key):
+ """ Lookup value, backwards compatibility """
+ return getattr(self.data, key)
+
+ @property
+ def is_variant(self):
+ """ Return True if not a reference call """
+ if not self.called:
+ return None
+ return self.gt_type != 0
+
+ @property
+ def is_het(self):
+ """ Return True for heterozygous calls """
+ if not self.called:
+ return None
+ return self.gt_type == 1
+
+
+class _Record(object):
+ """ A set of calls at a site. Equivalent to a row in a VCF file.
+
+ The standard VCF fields CHROM, POS, ID, REF, ALT, QUAL, FILTER,
+ INFO and FORMAT are available as properties.
+
+ The list of genotype calls is in the ``samples`` property.
+ """
+ def __init__(self, CHROM, POS, ID, REF, ALT, QUAL, FILTER, INFO, FORMAT,
+ sample_indexes, samples=None):
+ self.CHROM = CHROM
+ self.POS = POS
+ self.ID = ID
+ self.REF = REF
+ self.ALT = ALT
+ self.QUAL = QUAL
+ self.FILTER = FILTER
+ self.INFO = INFO
+ self.FORMAT = FORMAT
+ #: 0-based start coordinate
+ self.start = self.POS - 1
+ #: 1-based end coordinate
+ self.end = self.start + len(self.REF)
+ #: list of alleles. [0] = REF, [1:] = ALTS
+ self.alleles = [self.REF]
+ self.alleles.extend(self.ALT)
+ #: list of ``_Calls`` for each sample ordered as in source VCF
+ self.samples = samples or []
+ self._sample_indexes = sample_indexes
+
+ # For Python 2
+ def __cmp__(self, other):
+ return cmp((self.CHROM, self.POS), (getattr(other, "CHROM", None), getattr(other, "POS", None)))
+
+ # For Python 3
+ def __eq__(self, other):
+ """ _Records are equal if they describe the same variant (same position, alleles) """
+ return (self.CHROM == getattr(other, "CHROM", None) and
+ self.POS == getattr(other, "POS", None) and
+ self.REF == getattr(other, "REF", None) and
+ self.ALT == getattr(other, "ALT", None))
+
+ # For Python 3
+ def __lt__(self, other):
+ return (self.CHROM, self.POS) < (getattr(other, "CHROM", None), getattr(other, "POS", None))
+
+ def __iter__(self):
+ return iter(self.samples)
+
+ def __str__(self):
+ return "Record(CHROM=%(CHROM)s, POS=%(POS)s, REF=%(REF)s, ALT=%(ALT)s)" % self.__dict__
+
+ def add_format(self, fmt):
+ self.FORMAT = self.FORMAT + ':' + fmt
+
+ def add_filter(self, flt):
+ if self.FILTER is None:
+ self.FILTER = [flt]
+ else:
+ self.FILTER.append(flt)
+
+ def add_info(self, info, value=True):
+ self.INFO[info] = value
+
+ def genotype(self, name):
+ """ Lookup a ``_Call`` for the sample given in ``name`` """
+ return self.samples[self._sample_indexes[name]]
+
+ @property
+ def num_called(self):
+ """ The number of called samples"""
+ return sum(s.called for s in self.samples)
+
+ @property
+ def call_rate(self):
+ """ The fraction of genotypes that were actually called. """
+ return float(self.num_called) / float(len(self.samples))
+
+ @property
+ def num_hom_ref(self):
+ """ The number of homozygous for ref allele genotypes"""
+ return len([s for s in self.samples if s.gt_type == 0])
+
+ @property
+ def num_hom_alt(self):
+ """ The number of homozygous for alt allele genotypes"""
+ return len([s for s in self.samples if s.gt_type == 2])
+
+ @property
+ def num_het(self):
+ """ The number of heterozygous genotypes"""
+ return len([s for s in self.samples if s.gt_type == 1])
+
+ @property
+ def num_unknown(self):
+ """ The number of unknown genotypes"""
+ return len([s for s in self.samples if s.gt_type is None])
+
+ @property
+ def aaf(self):
+ """ A list of allele frequencies of alternate alleles.
+ NOTE: Denominator calc'ed from _called_ genotypes.
+ """
+ num_chroms = 2.0 * self.num_called
+ allele_counts = Counter()
+ for s in self.samples:
+ if s.gt_type is not None:
+ allele_counts.update([s.gt_alleles[0]])
+ allele_counts.update([s.gt_alleles[1]])
+ return [allele_counts[str(i)]/num_chroms for i in range(1, len(self.ALT)+1)]
+
+ @property
+ def nucl_diversity(self):
+ """
+ pi_hat (estimation of nucleotide diversity) for the site.
+ This metric can be summed across multiple sites to compute regional
+ nucleotide diversity estimates. For example, pi_hat for all variants
+ in a given gene.
+
+ Derived from:
+ \"Population Genetics: A Concise Guide, 2nd ed., p.45\"
+ John Gillespie.
+ """
+ # skip if more than one alternate allele. assumes bi-allelic
+ if len(self.ALT) > 1:
+ return None
+ p = self.aaf[0]
+ q = 1.0 - p
+ num_chroms = float(2.0 * self.num_called)
+ return float(num_chroms / (num_chroms - 1.0)) * (2.0 * p * q)
+
+ @property
+ def heterozygosity(self):
+ """
+ Heterozygosity of a site. Heterozygosity gives the probability that
+ two randomly chosen chromosomes from the population have different
+ alleles, giving a measure of the degree of polymorphism in a population.
+
+ If there are i alleles with frequency p_i, H=1-sum_i(p_i^2)
+ """
+ allele_freqs = [1-sum(self.aaf)] + self.aaf
+ return 1 - sum(map(lambda x: x**2, allele_freqs))
+
+ def get_hom_refs(self):
+ """ The list of hom ref genotypes"""
+ return [s for s in self.samples if s.gt_type == 0]
+
+ def get_hom_alts(self):
+ """ The list of hom alt genotypes"""
+ return [s for s in self.samples if s.gt_type == 2]
+
+ def get_hets(self):
+ """ The list of het genotypes"""
+ return [s for s in self.samples if s.gt_type == 1]
+
+ def get_unknowns(self):
+ """ The list of unknown genotypes"""
+ return [s for s in self.samples if s.gt_type is None]
+
+ @property
+ def is_snp(self):
+ """ Return whether or not the variant is a SNP """
+ if len(self.REF) > 1:
+ return False
+ for alt in self.ALT:
+ if alt is None or alt.type != "SNV":
+ return False
+ if alt not in ['A', 'C', 'G', 'T']:
+ return False
+ return True
+
+ @property
+ def is_indel(self):
+ """ Return whether or not the variant is an INDEL """
+ is_sv = self.is_sv
+
+ if len(self.REF) > 1 and not is_sv:
+ return True
+ for alt in self.ALT:
+ if alt is None:
+ return True
+ if alt.type != "SNV" and alt.type != "MNV":
+ return False
+ elif len(alt) != len(self.REF):
+ # the diff. b/w INDELs and SVs can be murky.
+ if not is_sv:
+ # 1 2827693 . CCCCTCGCA C . PASS AC=10;
+ return True
+ else:
+ # 1 2827693 . CCCCTCGCA C . PASS SVTYPE=DEL;
+ return False
+ return False
+
+ @property
+ def is_sv(self):
+ """ Return whether or not the variant is a structural variant """
+ if self.INFO.get('SVTYPE') is None:
+ return False
+ return True
+
+ @property
+ def is_transition(self):
+ """ Return whether or not the SNP is a transition """
+ # if multiple alts, it is unclear if we have a transition
+ if len(self.ALT) > 1:
+ return False
+
+ if self.is_snp:
+ # just one alt allele
+ alt_allele = self.ALT[0]
+ if ((self.REF == "A" and alt_allele == "G") or
+ (self.REF == "G" and alt_allele == "A") or
+ (self.REF == "C" and alt_allele == "T") or
+ (self.REF == "T" and alt_allele == "C")):
+ return True
+ else:
+ return False
+ else:
+ return False
+
+ @property
+ def is_deletion(self):
+ """ Return whether or not the INDEL is a deletion """
+ # if multiple alts, it is unclear if we have a transition
+ if len(self.ALT) > 1:
+ return False
+
+ if self.is_indel:
+ # just one alt allele
+ alt_allele = self.ALT[0]
+ if alt_allele is None:
+ return True
+ if len(self.REF) > len(alt_allele):
+ return True
+ else:
+ return False
+ else:
+ return False
+
+ @property
+ def var_type(self):
+ """
+ Return the type of variant [snp, indel, unknown]
+ TO DO: support SVs
+ """
+ if self.is_snp:
+ return "snp"
+ elif self.is_indel:
+ return "indel"
+ elif self.is_sv:
+ return "sv"
+ else:
+ return "unknown"
+
+ @property
+ def var_subtype(self):
+ """
+ Return the subtype of variant.
+ - For SNPs and INDELs, yeild one of: [ts, tv, ins, del]
+ - For SVs yield either "complex" or the SV type defined
+ in the ALT fields (removing the brackets).
+ E.g.:
+ <DEL> -> DEL
+ <INS:ME:L1> -> INS:ME:L1
+ <DUP> -> DUP
+
+ The logic is meant to follow the rules outlined in the following
+ paragraph at:
+
+ http://www.1000genomes.org/wiki/Analysis/Variant%20Call%20Format/vcf-variant-call-format-version-41
+
+ "For precisely known variants, the REF and ALT fields should contain
+ the full sequences for the alleles, following the usual VCF conventions.
+ For imprecise variants, the REF field may contain a single base and the
+ ALT fields should contain symbolic alleles (e.g. <ID>), described in more
+ detail below. Imprecise variants should also be marked by the presence
+ of an IMPRECISE flag in the INFO field."
+ """
+ if self.is_snp:
+ if self.is_transition:
+ return "ts"
+ elif len(self.ALT) == 1:
+ return "tv"
+ else: # multiple ALT alleles. unclear
+ return "unknown"
+ elif self.is_indel:
+ if self.is_deletion:
+ return "del"
+ elif len(self.ALT) == 1:
+ return "ins"
+ else: # multiple ALT alleles. unclear
+ return "unknown"
+ elif self.is_sv:
+ if self.INFO['SVTYPE'] == "BND":
+ return "complex"
+ elif self.is_sv_precise:
+ return self.INFO['SVTYPE']
+ else:
+ return self.ALT[0].type
+ else:
+ return "unknown"
+
+ @property
+ def sv_end(self):
+ """ Return the end position for the SV """
+ if self.is_sv:
+ return self.INFO['END']
+ return None
+
+ @property
+ def is_sv_precise(self):
+ """ Return whether the SV cordinates are mapped
+ to 1 b.p. resolution.
+ """
+ if self.INFO.get('IMPRECISE') is None and not self.is_sv:
+ return False
+ elif self.INFO.get('IMPRECISE') is not None and self.is_sv:
+ return False
+ elif self.INFO.get('IMPRECISE') is None and self.is_sv:
+ return True
+
+ @property
+ def is_monomorphic(self):
+ """ Return True for reference calls """
+ return len(self.ALT) == 1 and self.ALT[0] is None
+
+
+class _AltRecord(object):
+ '''An alternative allele record: either replacement string, SV placeholder, or breakend'''
+ __metaclass__ = ABCMeta
+
+ def __init__(self, type, **kwargs):
+ super(_AltRecord, self).__init__(**kwargs)
+ #: String to describe the type of variant, by default "SNV" or "MNV", but can be extended to any of the types described in the ALT lines of the header (e.g. "DUP", "DEL", "INS"...)
+ self.type = type
+
+ @abstractmethod
+ def __str__(self):
+ raise NotImplementedError
+
+ def __eq__(self, other):
+ return self.type == getattr(other, 'type', None)
+
+
+class _Substitution(_AltRecord):
+ '''A basic ALT record, where a REF sequence is replaced by an ALT sequence'''
+
+ def __init__(self, nucleotides, **kwargs):
+ if len(nucleotides) == 1:
+ super(_Substitution, self).__init__(type="SNV", **kwargs)
+ else:
+ super(_Substitution, self).__init__(type="MNV", **kwargs)
+ #: Alternate sequence
+ self.sequence = str(nucleotides)
+
+ def __str__(self):
+ return self.sequence
+
+ def __repr__(self):
+ return str(self)
+
+ def __len__(self):
+ return len(self.sequence)
+
+ def __eq__(self, other):
+ if isinstance(other, basestring):
+ return self.sequence == other
+ elif not isinstance(other, self.__class__):
+ return False
+ return super(_Substitution, self).__eq__(other) and self.sequence == other.sequence
+
+
+class _Breakend(_AltRecord):
+ '''A breakend which is paired to a remote location on or off the genome'''
+
+ def __init__(self, chr, pos, orientation, remoteOrientation, connectingSequence, withinMainAssembly, **kwargs):
+ super(_Breakend, self).__init__(type="BND", **kwargs)
+ #: The chromosome of breakend's mate.
+ if chr is not None:
+ self.chr = str(chr)
+ else:
+ self.chr = None # Single breakend
+ #: The coordinate of breakend's mate.
+ if pos is not None:
+ self.pos = int(pos)
+ else:
+ self.pos = None
+ #: The orientation of breakend's mate. If the sequence 3' of the breakend's mate is connected, True, else if the sequence 5' of the breakend's mate is connected, False.
+ self.remoteOrientation = remoteOrientation
+ #: If the breakend mate is within the assembly, True, else False if the breakend mate is on a contig in an ancillary assembly file.
+ self.withinMainAssembly = withinMainAssembly
+ #: The orientation of breakend. If the sequence 3' of the breakend is connected, True, else if the sequence 5' of the breakend is connected, False.
+ self.orientation = orientation
+ #: The breakpoint's connecting sequence.
+ self.connectingSequence = connectingSequence
+
+ def __repr__(self):
+ return str(self)
+
+ def __str__(self):
+ if self.chr is None:
+ remoteTag = '.'
+ else:
+ if self.withinMainAssembly:
+ remoteChr = self.chr
+ else:
+ remoteChr = "<" + self.chr + ">"
+ if self.remoteOrientation:
+ remoteTag = "[" + remoteChr + ":" + str(self.pos) + "["
+ else:
+ remoteTag = "]" + remoteChr + ":" + str(self.pos) + "]"
+
+ if self.orientation:
+ return remoteTag + self.connectingSequence
+ else:
+ return self.connectingSequence + remoteTag
+
+ def __eq__(self, other):
+ if not isinstance(other, self.__class__):
+ return False
+ return super(_Breakend, self).__eq__(other) \
+ and self.chr == getattr(other, "chr", None) \
+ and self.pos == getattr(other, "pos", None) \
+ and self.remoteOrientation == getattr(other, "remoteOrientation", None) \
+ and self.withinMainAssembly == getattr(other, "withinMainAssembly", None) \
+ and self.orientation == getattr(other, "orientation", None) \
+ and self.connectingSequence == getattr(other, "connectingSequence", None)
+
+
+class _SingleBreakend(_Breakend):
+ '''A single breakend'''
+
+ def __init__(self, orientation, connectingSequence, **kwargs):
+ super(_SingleBreakend, self).__init__(None, None, orientation, None, connectingSequence, None, **kwargs)
+
+
+class _SV(_AltRecord):
+ '''An SV placeholder'''
+
+ def __init__(self, type, **kwargs):
+ super(_SV, self).__init__(type, **kwargs)
+
+ def __str__(self):
+ return "<" + self.type + ">"
+
+ def __repr__(self):
+ return str(self)
+
+
+def make_calldata_tuple(fields):
+ """ Return a namedtuple for a given call format """
+
+ class CallData(collections.namedtuple('calldata', fields)):
+ __slots__ = ()
+
+ _types = []
+ _nums = []
+
+ def __str__(self):
+ dat = ", ".join(["%s=%s" % (x, y)
+ for (x, y) in zip(self._fields, self)])
+ return "CallData(" + dat + ')'
+
+ def __reduce__(self):
+ args = super(CallData, self).__reduce__()
+ return make_calldata_tuple, (fields, )
+
+ return CallData
diff --git a/vcf/parser.py b/vcf/parser.py
new file mode 100644
index 0000000..aac92f8
--- /dev/null
+++ b/vcf/parser.py
@@ -0,0 +1,750 @@
+import collections
+import re
+import csv
+import gzip
+import sys
+import itertools
+import codecs
+
+try:
+ from collections import OrderedDict
+except ImportError:
+ from ordereddict import OrderedDict
+
+try:
+ import pysam
+except ImportError:
+ pysam = None
+
+try:
+ import cparse
+except ImportError:
+ cparse = None
+
+from model import _Call, _Record, make_calldata_tuple
+from model import _Substitution, _Breakend, _SingleBreakend, _SV
+
+
+# Metadata parsers/constants
+RESERVED_INFO = {
+ 'AA': 'String', 'AC': 'Integer', 'AF': 'Float', 'AN': 'Integer',
+ 'BQ': 'Float', 'CIGAR': 'String', 'DB': 'Flag', 'DP': 'Integer',
+ 'END': 'Integer', 'H2': 'Flag', 'H3': 'Flag', 'MQ': 'Float',
+ 'MQ0': 'Integer', 'NS': 'Integer', 'SB': 'String', 'SOMATIC': 'Flag',
+ 'VALIDATED': 'Flag', '1000G': 'Flag',
+
+ # Keys used for structural variants
+ 'IMPRECISE': 'Flag', 'NOVEL': 'Flag', 'SVTYPE': 'String',
+ 'SVLEN': 'Integer', 'CIPOS': 'Integer', 'CIEND': 'Integer',
+ 'HOMLEN': 'Integer', 'HOMSEQ': 'String', 'BKPTID': 'String',
+ 'MEINFO': 'String', 'METRANS': 'String', 'DGVID': 'String',
+ 'DBVARID': 'String', 'DBRIPID': 'String', 'MATEID': 'String',
+ 'PARID': 'String', 'EVENT': 'String', 'CILEN': 'Integer',
+ 'DPADJ': 'Integer', 'CN': 'Integer', 'CNADJ': 'Integer',
+ 'CICN': 'Integer', 'CICNADJ': 'Integer'
+}
+
+RESERVED_FORMAT = {
+ 'GT': 'String', 'DP': 'Integer', 'FT': 'String', 'GL': 'Float',
+ 'GLE': 'String', 'PL': 'Integer', 'GP': 'Float', 'GQ': 'Integer',
+ 'HQ': 'Integer', 'PS': 'Integer', 'PQ': 'Integer', 'EC': 'Integer',
+ 'MQ': 'Integer',
+
+ # Keys used for structural variants
+ 'CN': 'Integer', 'CNQ': 'Float', 'CNL': 'Float', 'NQ': 'Integer',
+ 'HAP': 'Integer', 'AHAP': 'Integer'
+}
+
+# Spec is a bit weak on which metadata lines are singular, like fileformat
+# and which can have repeats, like contig
+SINGULAR_METADATA = ['fileformat', 'fileDate', 'reference']
+
+# Conversion between value in file and Python value
+field_counts = {
+ '.': None, # Unknown number of values
+ 'A': -1, # Equal to the number of alleles in a given record
+ 'G': -2, # Equal to the number of genotypes in a given record
+}
+
+
+_Info = collections.namedtuple('Info', ['id', 'num', 'type', 'desc'])
+_Filter = collections.namedtuple('Filter', ['id', 'desc'])
+_Alt = collections.namedtuple('Alt', ['id', 'desc'])
+_Format = collections.namedtuple('Format', ['id', 'num', 'type', 'desc'])
+_SampleInfo = collections.namedtuple('SampleInfo', ['samples', 'gt_bases', 'gt_types', 'gt_phases'])
+_Contig = collections.namedtuple('Contig', ['id', 'length'])
+
+
+class _vcf_metadata_parser(object):
+ '''Parse the metadat in the header of a VCF file.'''
+ def __init__(self):
+ super(_vcf_metadata_parser, self).__init__()
+ self.info_pattern = re.compile(r'''\#\#INFO=<
+ ID=(?P<id>[^,]+),
+ Number=(?P<number>-?\d+|\.|[AG]),
+ Type=(?P<type>Integer|Float|Flag|Character|String),
+ Description="(?P<desc>[^"]*)"
+ >''', re.VERBOSE)
+ self.filter_pattern = re.compile(r'''\#\#FILTER=<
+ ID=(?P<id>[^,]+),
+ Description="(?P<desc>[^"]*)"
+ >''', re.VERBOSE)
+ self.alt_pattern = re.compile(r'''\#\#ALT=<
+ ID=(?P<id>[^,]+),
+ Description="(?P<desc>[^"]*)"
+ >''', re.VERBOSE)
+ self.format_pattern = re.compile(r'''\#\#FORMAT=<
+ ID=(?P<id>.+),
+ Number=(?P<number>-?\d+|\.|[AG]),
+ Type=(?P<type>.+),
+ Description="(?P<desc>.*)"
+ >''', re.VERBOSE)
+ self.contig_pattern = re.compile(r'''\#\#contig=<
+ ID=(?P<id>[^,]+),
+ .*
+ length=(?P<length>-?\d+)
+ .*
+ >''', re.VERBOSE)
+ self.meta_pattern = re.compile(r'''##(?P<key>.+?)=(?P<val>.+)''')
+
+ def vcf_field_count(self, num_str):
+ """Cast vcf header numbers to integer or None"""
+ if num_str not in field_counts:
+ # Fixed, specified number
+ return int(num_str)
+ else:
+ return field_counts[num_str]
+
+ def read_info(self, info_string):
+ '''Read a meta-information INFO line.'''
+ match = self.info_pattern.match(info_string)
+ if not match:
+ raise SyntaxError(
+ "One of the INFO lines is malformed: %s" % info_string)
+
+ num = self.vcf_field_count(match.group('number'))
+
+ info = _Info(match.group('id'), num,
+ match.group('type'), match.group('desc'))
+
+ return (match.group('id'), info)
+
+ def read_filter(self, filter_string):
+ '''Read a meta-information FILTER line.'''
+ match = self.filter_pattern.match(filter_string)
+ if not match:
+ raise SyntaxError(
+ "One of the FILTER lines is malformed: %s" % filter_string)
+
+ filt = _Filter(match.group('id'), match.group('desc'))
+
+ return (match.group('id'), filt)
+
+ def read_alt(self, alt_string):
+ '''Read a meta-information ALTline.'''
+ match = self.alt_pattern.match(alt_string)
+ if not match:
+ raise SyntaxError(
+ "One of the FILTER lines is malformed: %s" % alt_string)
+
+ alt = _Alt(match.group('id'), match.group('desc'))
+
+ return (match.group('id'), alt)
+
+ def read_format(self, format_string):
+ '''Read a meta-information FORMAT line.'''
+ match = self.format_pattern.match(format_string)
+ if not match:
+ raise SyntaxError(
+ "One of the FORMAT lines is malformed: %s" % format_string)
+
+ num = self.vcf_field_count(match.group('number'))
+
+ form = _Format(match.group('id'), num,
+ match.group('type'), match.group('desc'))
+
+ return (match.group('id'), form)
+
+ def read_contig(self, contig_string):
+ '''Read a meta-contigrmation INFO line.'''
+ match = self.contig_pattern.match(contig_string)
+ if not match:
+ raise SyntaxError(
+ "One of the contig lines is malformed: %s" % contig_string)
+
+ length = self.vcf_field_count(match.group('length'))
+
+ contig = _Contig(match.group('id'), length)
+
+ return (match.group('id'), contig)
+
+
+ def read_meta_hash(self, meta_string):
+ items = re.split("[<>]", meta_string)
+ # Removing initial hash marks and final equal sign
+ key = items[0][2:-1]
+ # N.B., items can have quoted values, so cannot just split on comma
+ val = OrderedDict()
+ state = 0
+ k = ''
+ v = ''
+ for c in items[1]:
+
+ if state == 0: # reading item key
+ if c == '=':
+ state = 1 # end of key, start reading value
+ else:
+ k += c # extend key
+ elif state == 1: # reading item value
+ if v == '' and c == '"':
+ v += c # include quote mark in value
+ state = 2 # start reading quoted value
+ elif c == ',':
+ val[k] = v # store parsed item
+ state = 0 # read next key
+ k = ''
+ v = ''
+ else:
+ v += c
+ elif state == 2: # reading quoted item value
+ if c == '"':
+ v += c # include quote mark in value
+ state = 1 # end quoting
+ else:
+ v += c
+ if k != '':
+ val[k] = v
+ return key, val
+
+ def read_meta(self, meta_string):
+ if re.match("##.+=<", meta_string):
+ return self.read_meta_hash(meta_string)
+ else:
+ match = self.meta_pattern.match(meta_string)
+ return match.group('key'), match.group('val')
+
+
+class Reader(object):
+ """ Reader for a VCF v 4.0 file, an iterator returning ``_Record objects`` """
+
+ def __init__(self, fsock=None, filename=None, compressed=False, prepend_chr=False,
+ strict_whitespace=False):
+ """ Create a new Reader for a VCF file.
+
+ You must specify either fsock (stream) or filename. Gzipped streams
+ or files are attempted to be recogized by the file extension, or gzipped
+ can be forced with ``compressed=True``
+
+ 'prepend_chr=True' will put 'chr' before all the CHROM values, useful
+ for different sources.
+
+ 'strict_whitespace=True' will split records on tabs only (as with VCF
+ spec) which allows you to parse files with spaces in the sample names.
+ """
+ super(Reader, self).__init__()
+
+ if not (fsock or filename):
+ raise Exception('You must provide at least fsock or filename')
+
+ if fsock:
+ self._reader = fsock
+ if filename is None and hasattr(fsock, 'name'):
+ filename = fsock.name
+ compressed = compressed or filename.endswith('.gz')
+ elif filename:
+ compressed = compressed or filename.endswith('.gz')
+ self._reader = open(filename, 'rb' if compressed else 'rt')
+ self.filename = filename
+ if compressed:
+ self._reader = gzip.GzipFile(fileobj=self._reader)
+ if sys.version > '3':
+ self._reader = codecs.getreader('ascii')(self._reader)
+
+ if strict_whitespace:
+ self._separator = '\t'
+ else:
+ self._separator = '\t| +'
+
+ self.reader = (line.strip() for line in self._reader if line.strip())
+
+ #: metadata fields from header (string or hash, depending)
+ self.metadata = None
+ #: INFO fields from header
+ self.infos = None
+ #: FILTER fields from header
+ self.filters = None
+ #: ALT fields from header
+ self.alts = None
+ #: FORMAT fields from header
+ self.formats = None
+ #: contig fields from header
+ self.contigs = None
+ self.samples = None
+ self._sample_indexes = None
+ self._header_lines = []
+ self._column_headers = []
+ self._tabix = None
+ self._prepend_chr = prepend_chr
+ self._parse_metainfo()
+ self._format_cache = {}
+
+ def __iter__(self):
+ return self
+
+ def _parse_metainfo(self):
+ '''Parse the information stored in the metainfo of the VCF.
+
+ The end user shouldn't have to use this. She can access the metainfo
+ directly with ``self.metadata``.'''
+ for attr in ('metadata', 'infos', 'filters', 'alts', 'contigs', 'formats'):
+ setattr(self, attr, OrderedDict())
+
+ parser = _vcf_metadata_parser()
+
+ line = self.reader.next()
+ while line.startswith('##'):
+ self._header_lines.append(line)
+
+ if line.startswith('##INFO'):
+ key, val = parser.read_info(line)
+ self.infos[key] = val
+
+ elif line.startswith('##FILTER'):
+ key, val = parser.read_filter(line)
+ self.filters[key] = val
+
+ elif line.startswith('##ALT'):
+ key, val = parser.read_alt(line)
+ self.alts[key] = val
+
+ elif line.startswith('##FORMAT'):
+ key, val = parser.read_format(line)
+ self.formats[key] = val
+
+ elif line.startswith('##contig'):
+ key, val = parser.read_contig(line)
+ self.contigs[key] = val
+
+ else:
+ key, val = parser.read_meta(line)
+ if key in SINGULAR_METADATA:
+ self.metadata[key] = val
+ else:
+ if key not in self.metadata:
+ self.metadata[key] = []
+ self.metadata[key].append(val)
+
+ line = self.reader.next()
+
+ fields = re.split(self._separator, line[1:])
+ self._column_headers = fields[:9]
+ self.samples = fields[9:]
+ self._sample_indexes = dict([(x,i) for (i,x) in enumerate(self.samples)])
+
+ def _map(self, func, iterable, bad='.'):
+ '''``map``, but make bad values None.'''
+ return [func(x) if x != bad else None
+ for x in iterable]
+
+ def _parse_info(self, info_str):
+ '''Parse the INFO field of a VCF entry into a dictionary of Python
+ types.
+
+ '''
+ if info_str == '.':
+ return {}
+
+ entries = info_str.split(';')
+ retdict = {}
+
+ for entry in entries:
+ entry = entry.split('=')
+ ID = entry[0]
+ try:
+ entry_type = self.infos[ID].type
+ except KeyError:
+ try:
+ entry_type = RESERVED_INFO[ID]
+ except KeyError:
+ if entry[1:]:
+ entry_type = 'String'
+ else:
+ entry_type = 'Flag'
+
+ if entry_type == 'Integer':
+ vals = entry[1].split(',')
+ try:
+ val = self._map(int, vals)
+ # Allow specified integers to be flexibly parsed as floats.
+ # Handles cases with incorrectly specified header types.
+ except ValueError:
+ val = self._map(float, vals)
+ elif entry_type == 'Float':
+ vals = entry[1].split(',')
+ val = self._map(float, vals)
+ elif entry_type == 'Flag':
+ val = True
+ elif entry_type in ('String', 'Character'):
+ try:
+ vals = entry[1].split(',') # commas are reserved characters indicating multiple values
+ val = self._map(str, vals)
+ except IndexError:
+ val = True
+
+ try:
+ if self.infos[ID].num == 1 and entry_type not in ( 'Flag', ):
+ val = val[0]
+ except KeyError:
+ pass
+
+ retdict[ID] = val
+
+ return retdict
+
+ def _parse_sample_format(self, samp_fmt):
+ """ Parse the format of the calls in this _Record """
+ samp_fmt = make_calldata_tuple(samp_fmt.split(':'))
+
+ for fmt in samp_fmt._fields:
+ try:
+ entry_type = self.formats[fmt].type
+ entry_num = self.formats[fmt].num
+ except KeyError:
+ entry_num = None
+ try:
+ entry_type = RESERVED_FORMAT[fmt]
+ except KeyError:
+ entry_type = 'String'
+ samp_fmt._types.append(entry_type)
+ samp_fmt._nums.append(entry_num)
+ return samp_fmt
+
+ def _parse_samples(self, samples, samp_fmt, site):
+ '''Parse a sample entry according to the format specified in the FORMAT
+ column.
+
+ NOTE: this method has a cython equivalent and care must be taken
+ to keep the two methods equivalent
+ '''
+
+ # check whether we already know how to parse this format
+ if samp_fmt not in self._format_cache:
+ self._format_cache[samp_fmt] = self._parse_sample_format(samp_fmt)
+
+ samp_fmt = self._format_cache[samp_fmt]
+
+ if cparse:
+ return cparse.parse_samples(
+ self.samples, samples, samp_fmt, samp_fmt._types, samp_fmt._nums, site)
+
+ samp_data = []
+ _map = self._map
+
+ nfields = len(samp_fmt._fields)
+
+ for name, sample in itertools.izip(self.samples, samples):
+
+ # parse the data for this sample
+ sampdat = [None] * nfields
+
+ for i, vals in enumerate(sample.split(':')):
+
+ # short circuit the most common
+ if vals == '.' or vals == './.':
+ sampdat[i] = None
+ continue
+
+ entry_num = samp_fmt._nums[i]
+ entry_type = samp_fmt._types[i]
+
+ # we don't need to split single entries
+ if entry_num == 1 or ',' not in vals:
+
+ if entry_type == 'Integer':
+ try:
+ sampdat[i] = int(vals)
+ except ValueError:
+ sampdat[i] = float(vals)
+ elif entry_type == 'Float':
+ sampdat[i] = float(vals)
+ else:
+ sampdat[i] = vals
+
+ if entry_num != 1:
+ sampdat[i] = (sampdat[i])
+
+ continue
+
+ vals = vals.split(',')
+
+ if entry_type == 'Integer':
+ try:
+ sampdat[i] = _map(int, vals)
+ except ValueError:
+ sampdat[i] = _map(float, vals)
+ elif entry_type == 'Float' or entry_type == 'Numeric':
+ sampdat[i] = _map(float, vals)
+ else:
+ sampdat[i] = vals
+
+ # create a call object
+ call = _Call(site, name, samp_fmt(*sampdat))
+ samp_data.append(call)
+
+ return samp_data
+
+ def _parse_alt(self, str):
+ if re.search('[\[\]]', str) is not None:
+ # Paired breakend
+ items = re.split('[\[\]]', str)
+ remoteCoords = items[1].split(':')
+ chr = remoteCoords[0]
+ if chr[0] == '<':
+ chr = chr[1:-1]
+ withinMainAssembly = False
+ else:
+ withinMainAssembly = True
+ pos = remoteCoords[1]
+ orientation = (str[0] == '[' or str[0] == ']')
+ remoteOrientation = (re.search('\[', str) is not None)
+ if orientation:
+ connectingSequence = items[2]
+ else:
+ connectingSequence = items[0]
+ return _Breakend(chr, pos, orientation, remoteOrientation, connectingSequence, withinMainAssembly)
+ elif str[0] == '.' and len(str) > 1:
+ return _SingleBreakend(True, str[1:])
+ elif str[-1] == '.' and len(str) > 1:
+ return _SingleBreakend(False, str[:-1])
+ elif str[0] == "<" and str[-1] == ">":
+ return _SV(str[1:-1])
+ else:
+ return _Substitution(str)
+
+ def next(self):
+ '''Return the next record in the file.'''
+ line = self.reader.next()
+ row = re.split(self._separator, line.rstrip())
+ chrom = row[0]
+ if self._prepend_chr:
+ chrom = 'chr' + chrom
+ pos = int(row[1])
+
+ if row[2] != '.':
+ ID = row[2]
+ else:
+ ID = None
+
+ ref = row[3]
+ alt = self._map(self._parse_alt, row[4].split(','))
+
+ try:
+ qual = int(row[5])
+ except ValueError:
+ try:
+ qual = float(row[5])
+ except ValueError:
+ qual = None
+
+ filt = row[6]
+ if filt == '.':
+ filt = None
+ elif filt == 'PASS':
+ filt = []
+ else:
+ filt = filt.split(';')
+ info = self._parse_info(row[7])
+
+ try:
+ fmt = row[8]
+ except IndexError:
+ fmt = None
+
+ record = _Record(chrom, pos, ID, ref, alt, qual, filt,
+ info, fmt, self._sample_indexes)
+
+ if fmt is not None:
+ samples = self._parse_samples(row[9:], fmt, record)
+ record.samples = samples
+
+ return record
+
+ def fetch(self, chrom, start, end=None):
+ """ fetch records from a Tabix indexed VCF, requires pysam
+ if start and end are specified, return iterator over positions
+ if end not specified, return individual ``_Call`` at start or None
+ """
+ if not pysam:
+ raise Exception('pysam not available, try "pip install pysam"?')
+
+ if not self.filename:
+ raise Exception('Please provide a filename (or a "normal" fsock)')
+
+ if not self._tabix:
+ self._tabix = pysam.Tabixfile(self.filename)
+
+ if self._prepend_chr and chrom[:3] == 'chr':
+ chrom = chrom[3:]
+
+ # not sure why tabix needs position -1
+ start = start - 1
+
+ if end is None:
+ self.reader = self._tabix.fetch(chrom, start, start + 1)
+ try:
+ return self.next()
+ except StopIteration:
+ return None
+
+ self.reader = self._tabix.fetch(chrom, start, end)
+ return self
+
+
+class Writer(object):
+ """ VCF Writer """
+
+ # Reverse keys and values in header field count dictionary
+ counts = dict((v,k) for k,v in field_counts.iteritems())
+
+ def __init__(self, stream, template, lineterminator="\n"):
+ self.writer = csv.writer(stream, delimiter="\t", lineterminator=lineterminator)
+ self.template = template
+ self.stream = stream
+
+ # Order keys for INFO fields defined in the header (undefined fields
+ # get a maximum key).
+ self.info_order = collections.defaultdict(
+ lambda: len(template.infos),
+ dict(zip(template.infos.iterkeys(), itertools.count())))
+
+ two = '##{key}=<ID={0},Description="{1}">\n'
+ four = '##{key}=<ID={0},Number={num},Type={2},Description="{3}">\n'
+ _num = self._fix_field_count
+ for (key, vals) in template.metadata.iteritems():
+ if key in SINGULAR_METADATA:
+ vals = [vals]
+ for val in vals:
+ if isinstance(val, dict):
+ values = ','.join('{0}={1}'.format(key, value)
+ for key, value in val.items())
+ stream.write('##{0}=<{1}>\n'.format(key, values))
+ else:
+ stream.write('##{0}={1}\n'.format(key, val))
+ for line in template.infos.itervalues():
+ stream.write(four.format(key="INFO", *line, num=_num(line.num)))
+ for line in template.formats.itervalues():
+ stream.write(four.format(key="FORMAT", *line, num=_num(line.num)))
+ for line in template.filters.itervalues():
+ stream.write(two.format(key="FILTER", *line))
+ for line in template.alts.itervalues():
+ stream.write(two.format(key="ALT", *line))
+ for line in template.contigs.itervalues():
+ stream.write('##contig=<ID={0},length={1}>\n'.format(*line))
+
+ self._write_header()
+
+ def _write_header(self):
+ # TODO: write INFO, etc
+ self.stream.write('#' + '\t'.join(self.template._column_headers
+ + self.template.samples) + '\n')
+
+ def write_record(self, record):
+ """ write a record to the file """
+ ffs = self._map(str, [record.CHROM, record.POS, record.ID, record.REF]) \
+ + [self._format_alt(record.ALT), record.QUAL or '.', self._format_filter(record.FILTER),
+ self._format_info(record.INFO)]
+ if record.FORMAT:
+ ffs.append(record.FORMAT)
+
+ samples = [self._format_sample(record.FORMAT, sample)
+ for sample in record.samples]
+ self.writer.writerow(ffs + samples)
+
+ def flush(self):
+ """Flush the writer"""
+ try:
+ self.stream.flush()
+ except AttributeError:
+ pass
+
+ def close(self):
+ """Close the writer"""
+ try:
+ self.stream.close()
+ except AttributeError:
+ pass
+
+ def _fix_field_count(self, num_str):
+ """Restore header number to original state"""
+ if num_str not in self.counts:
+ return num_str
+ else:
+ return self.counts[num_str]
+
+ def _format_alt(self, alt):
+ return ','.join(self._map(str, alt))
+
+ def _format_filter(self, flt):
+ if flt == []:
+ return 'PASS'
+ return self._stringify(flt, none='.', delim=';')
+
+ def _format_info(self, info):
+ if not info:
+ return '.'
+ def order_key(field):
+ # Order by header definition first, alphabetically second.
+ return self.info_order[field], field
+ return ';'.join(self._stringify_pair(f, info[f]) for f in
+ sorted(info, key=order_key))
+
+ def _format_sample(self, fmt, sample):
+ try:
+ # Try to get the GT value first.
+ gt = getattr(sample.data, 'GT')
+ # PyVCF stores './.' GT values as None, so we need to revert it back
+ # to './.' when writing.
+ if gt is None:
+ gt = './.'
+ except AttributeError:
+ # Failing that, try to check whether 'GT' is specified in the FORMAT
+ # field. If yes, use the recommended empty value ('./.')
+ if 'GT' in fmt:
+ gt = './.'
+ # Otherwise use an empty string as the value
+ else:
+ gt = ''
+ # If gt is an empty string (i.e. not stored), write all other data
+ if not gt:
+ return ':'.join([self._stringify(x) for x in sample.data])
+ # Otherwise use the GT values from above and combine it with the rest of
+ # the data.
+ # Note that this follows the VCF spec, where GT is always the first
+ # item whenever it is present.
+ else:
+ return ':'.join([gt] + [self._stringify(x) for x in sample.data[1:]])
+
+ def _stringify(self, x, none='.', delim=','):
+ if type(x) == type([]):
+ return delim.join(self._map(str, x, none))
+ return str(x) if x is not None else none
+
+ def _stringify_pair(self, x, y, none='.', delim=','):
+ if isinstance(y, bool):
+ return str(x) if y else ""
+ return "%s=%s" % (str(x), self._stringify(y, none=none, delim=delim))
+
+ def _map(self, func, iterable, none='.'):
+ '''``map``, but make None values none.'''
+ return [func(x) if x is not None else none
+ for x in iterable]
+
+
+def __update_readme():
+ import sys, vcf
+ file('README.rst', 'w').write(vcf.__doc__)
+
+
+# backwards compatibility
+VCFReader = Reader
+VCFWriter = Writer
diff --git a/vcf/test/1kg.sites.vcf b/vcf/test/1kg.sites.vcf
new file mode 100644
index 0000000..857a944
--- /dev/null
+++ b/vcf/test/1kg.sites.vcf
@@ -0,0 +1,200 @@
+##fileformat=VCFv4.1
+##INFO=<ID=LDAF,Number=1,Type=Float,Description="MLE Allele Frequency Accounting for LD">
+##INFO=<ID=AVGPOST,Number=1,Type=Float,Description="Average posterior probability from MaCH/Thunder">
+##INFO=<ID=RSQ,Number=1,Type=Float,Description="Genotype imputation quality from MaCH/Thunder">
+##INFO=<ID=ERATE,Number=1,Type=Float,Description="Per-marker Mutation rate from MaCH/Thunder">
+##INFO=<ID=THETA,Number=1,Type=Float,Description="Per-marker Transition rate from MaCH/Thunder">
+##INFO=<ID=CIEND,Number=2,Type=Integer,Description="Confidence interval around END for imprecise variants">
+##INFO=<ID=CIPOS,Number=2,Type=Integer,Description="Confidence interval around POS for imprecise variants">
+##INFO=<ID=END,Number=1,Type=Integer,Description="End position of the variant described in this record">
+##INFO=<ID=HOMLEN,Number=.,Type=Integer,Description="Length of base pair identical micro-homology at event breakpoints">
+##INFO=<ID=HOMSEQ,Number=.,Type=String,Description="Sequence of base pair identical micro-homology at event breakpoints">
+##INFO=<ID=SVLEN,Number=1,Type=Integer,Description="Difference in length between REF and ALT alleles">
+##INFO=<ID=SVTYPE,Number=1,Type=String,Description="Type of structural variant">
+##INFO=<ID=AC,Number=.,Type=Integer,Description="Alternate Allele Count">
+##INFO=<ID=AN,Number=1,Type=Integer,Description="Total Allele Count">
+##ALT=<ID=DEL,Description="Deletion">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=DS,Number=1,Type=Float,Description="Genotype dosage from MaCH/Thunder">
+##FORMAT=<ID=GL,Number=.,Type=Float,Description="Genotype Likelihoods">
+##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele, ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/pilot_data/technical/reference/ancestral_alignments/README">
+##INFO=<ID=AF,Number=1,Type=Float,Description="Global Allele Frequency based on AC/AN">
+##INFO=<ID=AMR_AF,Number=1,Type=Float,Description="Allele Frequency for samples from AMR based on AC/AN">
+##INFO=<ID=ASN_AF,Number=1,Type=Float,Description="Allele Frequency for samples from ASN based on AC/AN">
+##INFO=<ID=AFR_AF,Number=1,Type=Float,Description="Allele Frequency for samples from AFR based on AC/AN">
+##INFO=<ID=EUR_AF,Number=1,Type=Float,Description="Allele Frequency for samples from EUR based on AC/AN">
+##INFO=<ID=VT,Number=1,Type=String,Description="indicates what type of variant the line represents">
+##INFO=<ID=SNPSOURCE,Number=.,Type=String,Description="indicates if a snp was called when analysing the low coverage or exome alignment data">
+##reference=GRCh37
+#CHROM POS ID REF ALT QUAL FILTER INFO
+1 10583 rs58108140 G A 100 PASS AVGPOST=0.7707;RSQ=0.4319;LDAF=0.2327;ERATE=0.0161;AN=2184;VT=SNP;AA=.;THETA=0.0046;AC=314;SNPSOURCE=LOWCOV;AF=0.14;ASN_AF=0.13;AMR_AF=0.17;AFR_AF=0.04;EUR_AF=0.21
+1 10611 rs189107123 C G 100 PASS AN=2184;THETA=0.0077;VT=SNP;AA=.;AC=41;ERATE=0.0048;SNPSOURCE=LOWCOV;AVGPOST=0.9330;LDAF=0.0479;RSQ=0.3475;AF=0.02;ASN_AF=0.01;AMR_AF=0.03;AFR_AF=0.01;EUR_AF=0.02
+1 13302 rs180734498 C T 100 PASS THETA=0.0048;AN=2184;AC=249;VT=SNP;AA=.;RSQ=0.6281;LDAF=0.1573;SNPSOURCE=LOWCOV;AVGPOST=0.8895;ERATE=0.0058;AF=0.11;ASN_AF=0.02;AMR_AF=0.08;AFR_AF=0.21;EUR_AF=0.14
+1 13327 rs144762171 G C 100 PASS AVGPOST=0.9698;AN=2184;VT=SNP;AA=.;RSQ=0.6482;AC=59;SNPSOURCE=LOWCOV;ERATE=0.0012;LDAF=0.0359;THETA=0.0204;AF=0.03;ASN_AF=0.02;AMR_AF=0.03;AFR_AF=0.02;EUR_AF=0.04
+1 13957 rs201747181 TC T 28 PASS AA=TC;AC=35;AF=0.02;AFR_AF=0.02;AMR_AF=0.02;AN=2184;ASN_AF=0.01;AVGPOST=0.8711;ERATE=0.0065;EUR_AF=0.02;LDAF=0.0788;RSQ=0.2501;THETA=0.0100;VT=INDEL
+1 13980 rs151276478 T C 100 PASS AN=2184;AC=45;ERATE=0.0034;THETA=0.0139;RSQ=0.3603;LDAF=0.0525;VT=SNP;AA=.;AVGPOST=0.9221;SNPSOURCE=LOWCOV;AF=0.02;ASN_AF=0.02;AMR_AF=0.02;AFR_AF=0.01;EUR_AF=0.02
+1 30923 rs140337953 G T 100 PASS AC=1584;AA=T;AN=2184;RSQ=0.5481;VT=SNP;THETA=0.0162;SNPSOURCE=LOWCOV;ERATE=0.0183;LDAF=0.6576;AVGPOST=0.7335;AF=0.73;ASN_AF=0.89;AMR_AF=0.80;AFR_AF=0.48;EUR_AF=0.73
+1 46402 rs199681827 C CTGT 31 PASS AA=.;AC=8;AF=0.0037;AFR_AF=0.01;AN=2184;ASN_AF=0.0017;AVGPOST=0.8325;ERATE=0.0072;LDAF=0.0903;RSQ=0.0960;THETA=0.0121;VT=INDEL
+1 47190 rs200430748 G GA 192 PASS AA=G;AC=29;AF=0.01;AFR_AF=0.06;AMR_AF=0.0028;AN=2184;AVGPOST=0.9041;ERATE=0.0041;LDAF=0.0628;RSQ=0.2883;THETA=0.0153;VT=INDEL
+1 51476 rs187298206 T C 100 PASS ERATE=0.0021;AA=C;AC=18;AN=2184;VT=SNP;THETA=0.0103;LDAF=0.0157;SNPSOURCE=LOWCOV;AVGPOST=0.9819;RSQ=0.5258;AF=0.01;ASN_AF=0.01;AMR_AF=0.01;AFR_AF=0.01;EUR_AF=0.01
+1 51479 rs116400033 T A 100 PASS RSQ=0.7414;AVGPOST=0.9085;AA=T;AN=2184;THETA=0.0131;AC=235;VT=SNP;LDAF=0.1404;SNPSOURCE=LOWCOV;ERATE=0.0012;AF=0.11;ASN_AF=0.0035;AMR_AF=0.16;AFR_AF=0.03;EUR_AF=0.22
+1 51914 rs190452223 T G 100 PASS ERATE=0.0004;AVGPOST=0.9985;THETA=0.0159;AA=T;AN=2184;VT=SNP;SNPSOURCE=LOWCOV;AC=1;RSQ=0.4089;LDAF=0.0012;AF=0.0005;ASN_AF=0.0017
+1 51935 rs181754315 C T 100 PASS THETA=0.0126;AA=C;AN=2184;RSQ=0.1888;AVGPOST=0.9972;LDAF=0.0015;VT=SNP;AC=0;SNPSOURCE=LOWCOV;ERATE=0.0006;AF=0
+1 51954 rs185832753 G C 100 PASS LDAF=0.0021;AA=G;AN=2184;RSQ=0.4692;AVGPOST=0.9975;VT=SNP;SNPSOURCE=LOWCOV;THETA=0.0029;ERATE=0.0006;AC=2;AF=0.0009;AMR_AF=0.01
+1 52058 rs62637813 G C 100 PASS AA=C;ERATE=0.0057;AN=2184;AVGPOST=0.9264;VT=SNP;RSQ=0.4882;AC=64;SNPSOURCE=LOWCOV;LDAF=0.0620;THETA=0.0069;AF=0.03;ASN_AF=0.0017;AMR_AF=0.04;AFR_AF=0.02;EUR_AF=0.05
+1 52144 rs190291950 T A 100 PASS THETA=0.0093;ERATE=0.0013;LDAF=0.0156;AA=T;AN=2184;VT=SNP;RSQ=0.5220;AVGPOST=0.9811;SNPSOURCE=LOWCOV;AC=21;AF=0.01;ASN_AF=0.0035;AMR_AF=0.01;AFR_AF=0.01;EUR_AF=0.01
+1 52185 rs201374420 TTAA T 244 PASS AA=.;AC=10;AF=0.0046;AFR_AF=0.0020;AMR_AF=0.02;AN=2184;ASN_AF=0.0035;AVGPOST=0.9840;ERATE=0.0037;LDAF=0.0124;RSQ=0.4271;THETA=0.0232;VT=INDEL
+1 52238 rs150021059 T G 100 PASS THETA=0.0132;AA=G;AN=2184;RSQ=0.6256;VT=SNP;ERATE=0.0026;AVGPOST=0.8617;SNPSOURCE=LOWCOV;AC=1941;LDAF=0.8423;AF=0.89;ASN_AF=0.99;AMR_AF=0.93;AFR_AF=0.64;EUR_AF=0.95
+1 53234 rs199502715 CAT C 227 PASS AA=CAT;AC=10;AF=0.0046;AFR_AF=0.02;AMR_AF=0.0028;AN=2184;AVGPOST=0.9936;ERATE=0.0007;LDAF=0.0074;RSQ=0.6237;THETA=0.0119;VT=INDEL
+1 54353 rs140052487 C A 100 PASS THETA=0.0026;AA=C;AN=2184;AC=16;VT=SNP;RSQ=0.5074;SNPSOURCE=LOWCOV;AVGPOST=0.9844;LDAF=0.0146;ERATE=0.0058;AF=0.01;ASN_AF=0.01;AMR_AF=0.0028;AFR_AF=0.02;EUR_AF=0.0013
+1 54421 rs146477069 A G 100 PASS ERATE=0.0013;AN=2184;AC=220;VT=SNP;RSQ=0.7869;AVGPOST=0.9461;AA=A;THETA=0.0025;SNPSOURCE=LOWCOV;LDAF=0.1190;AF=0.10;ASN_AF=0.25;AMR_AF=0.12;AFR_AF=0.03;EUR_AF=0.02
+1 54490 rs141149254 G A 100 PASS ERATE=0.0004;THETA=0.0074;AA=G;AN=2184;VT=SNP;RSQ=0.8366;AVGPOST=0.9646;AC=175;SNPSOURCE=LOWCOV;LDAF=0.0929;AF=0.08;ASN_AF=0.0035;AMR_AF=0.12;AFR_AF=0.03;EUR_AF=0.15
+1 54676 rs2462492 C T 100 PASS LDAF=0.1528;RSQ=0.6989;AA=T;AN=2184;AC=267;VT=SNP;AVGPOST=0.8998;SNPSOURCE=LOWCOV;THETA=0.0110;ERATE=0.0037;AF=0.12;ASN_AF=0.02;AMR_AF=0.20;AFR_AF=0.09;EUR_AF=0.18
+1 54753 rs143174675 T G 100 PASS AA=T;AN=2184;RSQ=0.6820;AC=65;VT=SNP;THETA=0.0080;ERATE=0.0016;SNPSOURCE=LOWCOV;AVGPOST=0.9697;LDAF=0.0399;AF=0.03;AMR_AF=0.04;AFR_AF=0.07;EUR_AF=0.03
+1 55164 rs3091274 C A 100 PASS AN=2184;VT=SNP;ERATE=0.0045;AA=A;THETA=0.0162;SNPSOURCE=LOWCOV;AC=1955;RSQ=0.6373;AVGPOST=0.8686;LDAF=0.8489;AF=0.90;ASN_AF=0.99;AMR_AF=0.94;AFR_AF=0.65;EUR_AF=0.96
+1 55249 rs200769871 C CTATGG 443 PASS AA=C;AC=151;AF=0.07;AFR_AF=0.03;AMR_AF=0.08;AN=2184;ASN_AF=0.16;AVGPOST=0.9073;ERATE=0.0063;EUR_AF=0.02;LDAF=0.0968;RSQ=0.5891;THETA=0.0038;VT=INDEL
+1 55299 rs10399749 C T 100 PASS RSQ=0.7602;LDAF=0.2954;AN=2184;VT=SNP;ERATE=0.0051;AA=c;AC=554;SNPSOURCE=LOWCOV;AVGPOST=0.8845;THETA=0.0070;AF=0.25;ASN_AF=0.33;AMR_AF=0.21;AFR_AF=0.39;EUR_AF=0.13
+1 55313 rs182462964 A T 100 PASS ERATE=0.0004;RSQ=0.6112;AVGPOST=0.9994;AN=2184;VT=SNP;THETA=0.0057;AA=A;SNPSOURCE=LOWCOV;AC=1;LDAF=0.0008;AF=0.0005;AFR_AF=0.0020
+1 55326 rs3107975 T C 100 PASS AA=C;ERATE=0.0074;AN=2184;THETA=0.0085;VT=SNP;SNPSOURCE=LOWCOV;AVGPOST=0.9622;AC=90;RSQ=0.6901;LDAF=0.0562;AF=0.04;ASN_AF=0.07;AMR_AF=0.02;AFR_AF=0.07;EUR_AF=0.01
+1 55330 rs185215913 G A 100 PASS ERATE=0.0005;AA=G;AN=2184;VT=SNP;THETA=0.0086;AVGPOST=0.9988;LDAF=0.0011;SNPSOURCE=LOWCOV;AC=1;RSQ=0.4701;AF=0.0005;AFR_AF=0.0020
+1 55367 rs190850374 G A 100 PASS ERATE=0.0004;THETA=0.0044;AA=G;AN=2184;VT=SNP;LDAF=0.0029;RSQ=0.3860;SNPSOURCE=LOWCOV;AVGPOST=0.9961;AC=2;AF=0.0009;AMR_AF=0.01
+1 55388 rs182711216 C T 100 PASS THETA=0.0102;ERATE=0.0005;AA=C;AVGPOST=0.9983;AN=2184;LDAF=0.0010;VT=SNP;RSQ=0.2348;SNPSOURCE=LOWCOV;AC=1;AF=0.0005;ASN_AF=0.0017
+1 55394 rs2949420 T A 100 PASS AC=18;AN=2184;VT=SNP;AA=A;RSQ=0.4995;AVGPOST=0.9784;LDAF=0.0171;SNPSOURCE=LOWCOV;ERATE=0.0012;THETA=0.0063;AF=0.01;AMR_AF=0.01;AFR_AF=0.0041;EUR_AF=0.02
+1 55416 rs193242050 G A 100 PASS AA=G;AN=2184;AVGPOST=0.9944;VT=SNP;LDAF=0.0064;AC=9;THETA=0.0019;RSQ=0.6553;SNPSOURCE=LOWCOV;ERATE=0.0006;AF=0.0041;AFR_AF=0.02
+1 55427 rs183189405 T C 100 PASS THETA=0.0054;AA=T;AN=2184;VT=SNP;AVGPOST=0.9969;LDAF=0.0020;SNPSOURCE=LOWCOV;AC=1;RSQ=0.2759;ERATE=0.0007;AF=0.0005;AFR_AF=0.0020
+1 55816 rs187434873 G A 100 PASS AN=2184;THETA=0.0119;VT=SNP;AC=10;RSQ=0.4578;AA=A;SNPSOURCE=LOWCOV;AVGPOST=0.9844;LDAF=0.0108;ERATE=0.0007;AF=0.0046;AMR_AF=0.01;EUR_AF=0.01
+1 55850 rs191890754 C G 100 PASS AVGPOST=0.9921;AA=G;AN=2184;VT=SNP;RSQ=0.4083;THETA=0.0045;LDAF=0.0056;AC=5;SNPSOURCE=LOWCOV;ERATE=0.0006;AF=0.0023;EUR_AF=0.01
+1 55852 rs184233019 G C 100 PASS THETA=0.0137;AA=G;AN=2184;RSQ=0.5433;ERATE=0.0009;LDAF=0.0046;VT=SNP;AVGPOST=0.9953;AC=5;SNPSOURCE=LOWCOV;AF=0.0023;AMR_AF=0.01;EUR_AF=0.0013
+1 56644 rs143342222 A C 100 PASS AN=2184;AVGPOST=0.9962;LDAF=0.0040;ERATE=0.0024;VT=SNP;AA=A;RSQ=0.5700;AC=5;SNPSOURCE=LOWCOV;THETA=0.0117;AF=0.0023;AFR_AF=0.01
+1 57952 rs189727433 A C 100 PASS AA=C;ERATE=0.0085;AN=2184;LDAF=0.7878;VT=SNP;THETA=0.0076;RSQ=0.4712;AC=1902;SNPSOURCE=LOWCOV;AVGPOST=0.7578;AF=0.87;ASN_AF=0.98;AMR_AF=0.91;AFR_AF=0.64;EUR_AF=0.91
+1 58814 rs114420996 G A 100 PASS AC=223;THETA=0.0032;AA=G;AN=2184;RSQ=0.9087;LDAF=0.1074;VT=SNP;SNPSOURCE=LOWCOV;ERATE=0.0006;AVGPOST=0.9777;AF=0.10;ASN_AF=0.03;AMR_AF=0.17;AFR_AF=0.20;EUR_AF=0.06
+1 59040 rs149755937 T C 100 PASS AVGPOST=0.9710;AC=115;AA=T;AN=2184;RSQ=0.8248;VT=SNP;ERATE=0.0017;THETA=0.0025;SNPSOURCE=LOWCOV;LDAF=0.0613;AF=0.05;ASN_AF=0.03;AMR_AF=0.15;AFR_AF=0.0041;EUR_AF=0.06
+1 60726 rs192328835 C A 100 PASS AVGPOST=0.9092;AN=2184;RSQ=0.5988;ERATE=0.0081;AC=144;VT=SNP;THETA=0.0045;AA=A;SNPSOURCE=LOWCOV;LDAF=0.0959;AF=0.07;ASN_AF=0.05;AMR_AF=0.10;AFR_AF=0.11;EUR_AF=0.03
+1 61442 rs74970982 A G 100 PASS LDAF=0.9152;AA=G;AN=2184;VT=SNP;ERATE=0.0026;RSQ=0.4867;AVGPOST=0.9004;SNPSOURCE=LOWCOV;THETA=0.0013;AC=2084;AF=0.95;ASN_AF=1.00;AMR_AF=0.97;AFR_AF=0.84;EUR_AF=0.99
+1 61462 rs56992750 T A 100 PASS THETA=0.0023;LDAF=0.0378;RSQ=0.7396;AA=T;AN=2184;AVGPOST=0.9773;VT=SNP;AC=68;SNPSOURCE=LOWCOV;ERATE=0.0012;AF=0.03;AMR_AF=0.02;AFR_AF=0.13
+1 61743 rs184286948 G C 100 PASS AVGPOST=0.9939;LDAF=0.0047;AA=G;AN=2184;VT=SNP;ERATE=0.0011;SNPSOURCE=LOWCOV;AC=4;THETA=0.0016;RSQ=0.4838;AF=0.0018;AMR_AF=0.01;EUR_AF=0.0026
+1 61987 rs76735897 A G 100 PASS THETA=0.0015;AN=2184;AC=569;VT=SNP;AA=A;RSQ=0.7192;AVGPOST=0.8533;LDAF=0.2944;SNPSOURCE=LOWCOV;ERATE=0.0012;AF=0.26;ASN_AF=0.07;AMR_AF=0.31;AFR_AF=0.25;EUR_AF=0.39
+1 61989 rs77573425 G C 100 PASS RSQ=0.7254;AVGPOST=0.8584;AA=G;AN=2184;LDAF=0.2849;VT=SNP;AC=555;THETA=0.0019;SNPSOURCE=LOWCOV;ERATE=0.0007;AF=0.25;ASN_AF=0.07;AMR_AF=0.31;AFR_AF=0.22;EUR_AF=0.39
+1 61993 rs190553843 C T 100 PASS AC=7;RSQ=0.6106;AA=C;THETA=0.0143;AN=2184;ERATE=0.0009;VT=SNP;AVGPOST=0.9953;SNPSOURCE=LOWCOV;LDAF=0.0050;AF=0.0032;AFR_AF=0.01
+1 62156 rs181864839 C T 100 PASS ERATE=0.0005;AA=C;AN=2184;AVGPOST=0.9979;LDAF=0.0015;VT=SNP;THETA=0.0094;SNPSOURCE=LOWCOV;AC=1;RSQ=0.4561;AF=0.0005;AFR_AF=0.0020
+1 62157 rs10399597 G A 100 PASS AVGPOST=0.9945;AA=G;AN=2184;ERATE=0.0025;VT=SNP;RSQ=0.5217;AC=5;THETA=0.0066;SNPSOURCE=LOWCOV;LDAF=0.0050;AF=0.0023;AFR_AF=0.01
+1 62162 rs140556834 G A 100 PASS AA=G;AN=2184;AC=8;LDAF=0.0057;VT=SNP;THETA=0.0018;ERATE=0.0017;RSQ=0.6089;AVGPOST=0.9948;SNPSOURCE=LOWCOV;AF=0.0037;AMR_AF=0.0028;AFR_AF=0.01;EUR_AF=0.0013
+1 63276 rs185977555 G A 100 PASS RSQ=0.2744;AA=G;AN=2184;AVGPOST=0.9947;VT=SNP;ERATE=0.0010;SNPSOURCE=LOWCOV;AC=1;THETA=0.0010;LDAF=0.0031;AF=0.0005;AFR_AF=0.0020
+1 63297 rs188886746 G A 100 PASS ERATE=0.0005;AVGPOST=0.9986;AA=G;AN=2184;VT=SNP;AC=0;SNPSOURCE=LOWCOV;RSQ=0.2459;THETA=0.0024;LDAF=0.0008;AF=0
+1 63671 rs116440577 G A 100 PASS AA=G;AN=2184;ERATE=0.0047;LDAF=0.1773;VT=SNP;THETA=0.0072;AC=369;SNPSOURCE=LOWCOV;RSQ=0.8980;AVGPOST=0.9652;AF=0.17;ASN_AF=0.05;AMR_AF=0.22;AFR_AF=0.35;EUR_AF=0.11
+1 63735 rs201888535 CCTA C 455 PASS AA=CCTA;AC=829;AF=0.38;AFR_AF=0.13;AMR_AF=0.33;AN=2184;ASN_AF=0.69;AVGPOST=0.7654;ERATE=0.0047;EUR_AF=0.34;LDAF=0.4128;RSQ=0.6424;THETA=0.0062;VT=INDEL
+1 64649 rs181431124 A C 100 PASS RSQ=0.6975;AN=2184;VT=SNP;AA=.;ERATE=0.0008;AVGPOST=0.9918;SNPSOURCE=LOWCOV;AC=21;THETA=0.0024;LDAF=0.0114;AF=0.01;AMR_AF=0.01;EUR_AF=0.03
+1 66162 rs62639105 A T 100 PASS THETA=0.0026;ERATE=0.0166;LDAF=0.3089;AN=2184;VT=SNP;AA=.;AC=544;SNPSOURCE=LOWCOV;RSQ=0.5681;AVGPOST=0.7777;AF=0.25;ASN_AF=0.07;AMR_AF=0.30;AFR_AF=0.23;EUR_AF=0.38
+1 66176 rs28552463 T A 100 PASS AN=2184;RSQ=0.4451;VT=SNP;AA=.;THETA=0.0095;LDAF=0.0631;AC=70;SNPSOURCE=LOWCOV;ERATE=0.0061;AVGPOST=0.9210;AF=0.03;ASN_AF=0.0017;AMR_AF=0.01;AFR_AF=0.13;EUR_AF=0.0013
+1 66219 rs181028663 A T 100 PASS LDAF=0.1137;ERATE=0.0074;AN=2184;VT=SNP;AA=.;AC=68;THETA=0.0059;RSQ=0.2946;AVGPOST=0.8268;SNPSOURCE=LOWCOV;AF=0.03;ASN_AF=0.08;AMR_AF=0.04;AFR_AF=0.01;EUR_AF=0.01
+1 66331 rs186063952 A C 100 PASS THETA=0.0126;AVGPOST=0.7656;RSQ=0.1616;AN=2184;LDAF=0.1387;ERATE=0.0093;VT=SNP;AA=.;SNPSOURCE=LOWCOV;AC=42;AF=0.02;ASN_AF=0.0035;AMR_AF=0.01;AFR_AF=0.07
+1 66442 rs192044252 T A 100 PASS RSQ=0.1763;AVGPOST=0.7894;AN=2184;THETA=0.0031;VT=SNP;AA=.;SNPSOURCE=LOWCOV;AC=36;ERATE=0.0107;LDAF=0.1241;AF=0.02;ASN_AF=0.0035;AMR_AF=0.03;AFR_AF=0.02;EUR_AF=0.01
+1 66457 rs13328655 T A 100 PASS ERATE=0.0085;AN=2184;VT=SNP;AA=.;AC=31;AVGPOST=0.8340;LDAF=0.0957;RSQ=0.1836;SNPSOURCE=LOWCOV;THETA=0.0024;AF=0.01;ASN_AF=0.01;AMR_AF=0.01;AFR_AF=0.03;EUR_AF=0.01
+1 66507 rs12401368 T A 100 PASS ERATE=0.0197;AN=2184;VT=SNP;AA=.;THETA=0.0122;SNPSOURCE=LOWCOV;AC=170;RSQ=0.2110;LDAF=0.2457;AVGPOST=0.6536;AF=0.08;ASN_AF=0.07;AMR_AF=0.09;AFR_AF=0.05;EUR_AF=0.09
+1 67179 rs149952626 C G 100 PASS AVGPOST=0.9946;AN=2184;VT=SNP;AA=.;THETA=0.0046;SNPSOURCE=LOWCOV;ERATE=0.0012;AC=11;RSQ=0.6333;LDAF=0.0069;AF=0.01;ASN_AF=0.02
+1 67181 rs77662731 A G 100 PASS AVGPOST=0.9817;THETA=0.0096;ERATE=0.0013;AN=2184;RSQ=0.8542;AC=104;LDAF=0.0529;VT=SNP;AA=.;SNPSOURCE=LOWCOV;AF=0.05;AMR_AF=0.02;AFR_AF=0.20
+1 69511 rs75062661 A G 100 PASS LDAF=0.6051;AC=1424;ERATE=0.0237;AN=2184;RSQ=0.5669;VT=SNP;AA=.;AVGPOST=0.7173;SNPSOURCE=LOWCOV;THETA=0.0052;AF=0.65;ASN_AF=0.87;AMR_AF=0.65;AFR_AF=0.33;EUR_AF=0.70
+1 69534 rs190717287 T C 100 PASS AVGPOST=0.9986;LDAF=0.0013;AN=2184;VT=SNP;AA=.;SNPSOURCE=LOWCOV;AC=1;RSQ=0.4002;THETA=0.0016;ERATE=0.0006;AF=0.0005;ASN_AF=0.0017
+1 69536 rs200013390 C T 100 PASS AA=.;AC=0;AF=0;AN=2184;AVGPOST=0.9986;ERATE=0.0006;LDAF=0.0008;RSQ=0.0677;SNPSOURCE=EXOME;THETA=0.0087;VT=SNP
+1 72119 rs199639004 G GTA 158 PASS AA=.;AC=8;AF=0.0037;AMR_AF=0.0028;AN=2184;ASN_AF=0.01;AVGPOST=0.9589;ERATE=0.0026;EUR_AF=0.0013;LDAF=0.0243;RSQ=0.2268;THETA=0.0016;VT=INDEL
+1 72148 rs182862337 C T 100 PASS AN=2184;RSQ=0.2794;THETA=0.0130;VT=SNP;AA=.;LDAF=0.0019;AVGPOST=0.9971;SNPSOURCE=LOWCOV;AC=1;ERATE=0.0007;AF=0.0005;AMR_AF=0.0028
+1 72297 rs200651397 G GTAT 160 PASS AA=G;AC=19;AF=0.01;AMR_AF=0.02;AN=2184;ASN_AF=0.01;AVGPOST=0.9383;ERATE=0.0055;EUR_AF=0.01;LDAF=0.0399;RSQ=0.3194;THETA=0.0064;VT=INDEL
+1 73841 rs143773730 C T 100 PASS ERATE=0.0303;THETA=0.0044;AN=2184;AVGPOST=0.8178;RSQ=0.5832;VT=SNP;AA=.;SNPSOURCE=LOWCOV;LDAF=0.2588;AC=425;AF=0.19;ASN_AF=0.15;AMR_AF=0.22;AFR_AF=0.17;EUR_AF=0.23
+1 77462 rs188023513 G A 100 PASS LDAF=0.1685;AN=2184;AVGPOST=0.8149;VT=SNP;AA=.;RSQ=0.4624;AC=198;THETA=0.0100;SNPSOURCE=LOWCOV;ERATE=0.0222;AF=0.09;ASN_AF=0.11;AMR_AF=0.12;AFR_AF=0.08;EUR_AF=0.07
+1 77470 rs192898053 T C 100 PASS LDAF=0.0047;AN=2184;VT=SNP;AA=.;ERATE=0.0011;AVGPOST=0.9918;THETA=0.0025;RSQ=0.1818;SNPSOURCE=LOWCOV;AC=1;AF=0.0005;AFR_AF=0.0020
+1 77874 rs184538873 G A 100 PASS THETA=0.0068;LDAF=0.0516;AN=2184;VT=SNP;AA=.;AVGPOST=0.9594;ERATE=0.0011;AC=87;SNPSOURCE=LOWCOV;RSQ=0.6970;AF=0.04;ASN_AF=0.01;AMR_AF=0.12;AFR_AF=0.0041;EUR_AF=0.04
+1 77961 rs78385339 G A 100 PASS AVGPOST=0.9114;AN=2184;VT=SNP;AA=.;THETA=0.0072;RSQ=0.6667;ERATE=0.0011;SNPSOURCE=LOWCOV;AC=192;LDAF=0.1180;AF=0.09;ASN_AF=0.20;AMR_AF=0.14;AFR_AF=0.01;EUR_AF=0.03
+1 79033 rs62641298 A G 100 PASS AVGPOST=0.7371;THETA=0.0022;LDAF=0.7962;AN=2184;ERATE=0.0054;VT=SNP;AA=.;AC=1961;SNPSOURCE=LOWCOV;RSQ=0.3963;AF=0.90;ASN_AF=0.98;AMR_AF=0.95;AFR_AF=0.65;EUR_AF=0.97
+1 79050 rs62641299 G T 100 PASS AC=1871;AN=2184;THETA=0.0031;RSQ=0.3928;VT=SNP;AA=.;AVGPOST=0.6803;SNPSOURCE=LOWCOV;LDAF=0.7318;ERATE=0.0107;AF=0.86;ASN_AF=0.98;AMR_AF=0.93;AFR_AF=0.54;EUR_AF=0.94
+1 79137 rs143777184 A T 100 PASS AN=2184;AC=55;ERATE=0.0009;AVGPOST=0.9773;LDAF=0.0324;VT=SNP;AA=.;THETA=0.0091;SNPSOURCE=LOWCOV;RSQ=0.7309;AF=0.03;AMR_AF=0.01;AFR_AF=0.10
+1 79417 rs184768190 C T 100 PASS ERATE=0.0005;THETA=0.0166;AN=2184;RSQ=0.5026;AVGPOST=0.9975;VT=SNP;AA=.;LDAF=0.0022;SNPSOURCE=LOWCOV;AC=2;AF=0.0009;ASN_AF=0.0035
+1 79772 rs147215883 C G 100 PASS LDAF=0.1066;AN=2184;THETA=0.0138;RSQ=0.7199;VT=SNP;AA=.;AVGPOST=0.9271;AC=176;ERATE=0.0011;SNPSOURCE=LOWCOV;AF=0.08;ASN_AF=0.07;AMR_AF=0.06;AFR_AF=0.10;EUR_AF=0.09
+1 79872 rs189224661 T G 100 PASS THETA=0.0054;AN=2184;LDAF=0.0057;VT=SNP;AA=.;ERATE=0.0017;AC=9;AVGPOST=0.9956;SNPSOURCE=LOWCOV;RSQ=0.6548;AF=0.0041;AFR_AF=0.02
+1 80454 rs144226842 G C 100 PASS RSQ=0.6549;LDAF=0.0035;AN=2184;AVGPOST=0.9975;VT=SNP;AA=.;AC=5;SNPSOURCE=LOWCOV;THETA=0.0110;ERATE=0.0015;AF=0.0023;ASN_AF=0.01
+1 81949 rs181567186 T C 100 PASS AN=2184;ERATE=0.0009;VT=SNP;AA=.;AVGPOST=0.9948;LDAF=0.0030;SNPSOURCE=LOWCOV;AC=1;THETA=0.0052;RSQ=0.2129;AF=0.0005;ASN_AF=0.0017
+1 82163 rs139113303 G A 100 PASS AN=2184;LDAF=0.0375;ERATE=0.0009;VT=SNP;AA=.;RSQ=0.7842;AC=66;THETA=0.0053;SNPSOURCE=LOWCOV;AVGPOST=0.9761;AF=0.03;ASN_AF=0.0017;AMR_AF=0.01;AFR_AF=0.0020;EUR_AF=0.08
+1 82249 rs1851945 A G 100 PASS THETA=0.0137;LDAF=0.0712;AVGPOST=0.9150;AN=2184;VT=SNP;AA=.;RSQ=0.4689;AC=75;ERATE=0.0116;SNPSOURCE=LOWCOV;AF=0.03;ASN_AF=0.03;AMR_AF=0.04;AFR_AF=0.02;EUR_AF=0.04
+1 82609 rs149189449 C G 100 PASS ERATE=0.0005;AN=2184;LDAF=0.0364;VT=SNP;AA=.;AC=68;AVGPOST=0.9822;RSQ=0.8408;SNPSOURCE=LOWCOV;THETA=0.0024;AF=0.03;AMR_AF=0.02;AFR_AF=0.0020;EUR_AF=0.08
+1 82676 rs185237834 T G 100 PASS LDAF=0.1144;AN=2184;AVGPOST=0.9264;VT=SNP;AA=.;RSQ=0.7176;AC=198;THETA=0.0025;SNPSOURCE=LOWCOV;ERATE=0.0056;AF=0.09;ASN_AF=0.07;AMR_AF=0.08;AFR_AF=0.12;EUR_AF=0.10
+1 82734 rs4030331 T C 100 PASS AN=2184;THETA=0.0008;VT=SNP;AA=.;ERATE=0.0158;RSQ=0.6316;AVGPOST=0.8280;LDAF=0.2433;SNPSOURCE=LOWCOV;AC=435;AF=0.20;ASN_AF=0.15;AMR_AF=0.28;AFR_AF=0.24;EUR_AF=0.17
+1 82957 rs189774606 C T 100 PASS RSQ=0.5163;AN=2184;VT=SNP;AA=.;LDAF=0.0072;THETA=0.0028;AC=9;AVGPOST=0.9918;SNPSOURCE=LOWCOV;ERATE=0.0012;AF=0.0041;AMR_AF=0.01;AFR_AF=0.01
+1 83084 rs181193408 T A 100 PASS AN=2184;AVGPOST=0.8261;VT=SNP;AA=.;RSQ=0.5750;AC=1914;LDAF=0.8278;SNPSOURCE=LOWCOV;ERATE=0.0061;THETA=0.0064;AF=0.88;ASN_AF=0.99;AMR_AF=0.92;AFR_AF=0.58;EUR_AF=0.96
+1 83088 rs186081601 G C 100 PASS ERATE=0.0013;AN=2184;LDAF=0.0043;VT=SNP;AA=.;AVGPOST=0.9922;RSQ=0.1618;THETA=0.0019;SNPSOURCE=LOWCOV;AC=1;AF=0.0005;AFR_AF=0.0020
+1 83771 rs189906733 T G 100 PASS RSQ=0.6473;AN=2184;AVGPOST=0.9871;VT=SNP;AA=.;AC=24;ERATE=0.0011;SNPSOURCE=LOWCOV;THETA=0.0043;LDAF=0.0158;AF=0.01;AMR_AF=0.01;AFR_AF=0.04;EUR_AF=0.0013
+1 83977 rs180759811 A G 100 PASS AN=2184;ERATE=0.0009;VT=SNP;AA=.;THETA=0.0059;LDAF=0.0038;RSQ=0.2074;SNPSOURCE=LOWCOV;AC=1;AVGPOST=0.9932;AF=0.0005;AFR_AF=0.0020
+1 84002 rs28850140 G A 100 PASS THETA=0.0050;ERATE=0.0211;AN=2184;AC=236;VT=SNP;AA=.;AVGPOST=0.8144;LDAF=0.1921;SNPSOURCE=LOWCOV;RSQ=0.4810;AF=0.11;ASN_AF=0.12;AMR_AF=0.15;AFR_AF=0.07;EUR_AF=0.11
+1 84005 rs202079949 AG A 78 PASS AA=.;AC=52;AF=0.02;AFR_AF=0.02;AMR_AF=0.03;AN=2184;ASN_AF=0.01;AVGPOST=0.9360;ERATE=0.0049;EUR_AF=0.04;LDAF=0.0514;RSQ=0.4690;THETA=0.0005;VT=INDEL
+1 84010 rs186443818 G A 100 PASS AVGPOST=0.9169;AN=2184;VT=SNP;AA=.;AC=97;THETA=0.0087;LDAF=0.0789;SNPSOURCE=LOWCOV;ERATE=0.0061;RSQ=0.5318;AF=0.04;ASN_AF=0.03;AMR_AF=0.05;AFR_AF=0.03;EUR_AF=0.06
+1 84079 rs190867312 T C 100 PASS ERATE=0.0021;AN=2184;AC=6;VT=SNP;AA=.;LDAF=0.0049;AVGPOST=0.9956;RSQ=0.5906;SNPSOURCE=LOWCOV;THETA=0.0016;AF=0.0027;AMR_AF=0.0028;AFR_AF=0.01
+1 84139 rs183605470 A T 100 PASS THETA=0.0023;AC=28;AN=2184;RSQ=0.6469;VT=SNP;AA=.;LDAF=0.0180;SNPSOURCE=LOWCOV;AVGPOST=0.9835;ERATE=0.0006;AF=0.01;ASN_AF=0.0017;AMR_AF=0.07;AFR_AF=0.0041
+1 84156 rs188652299 A C 100 PASS THETA=0.0009;AVGPOST=0.9936;ERATE=0.0014;RSQ=0.3359;AN=2184;VT=SNP;AA=.;LDAF=0.0044;SNPSOURCE=LOWCOV;AC=3;AF=0.0014;AMR_AF=0.0028;AFR_AF=0.0041
+1 84244 rs191297051 A C 100 PASS LDAF=0.1204;AN=2184;VT=SNP;AA=.;AVGPOST=0.9398;RSQ=0.7828;THETA=0.0025;ERATE=0.0018;SNPSOURCE=LOWCOV;AC=222;AF=0.10;ASN_AF=0.08;AMR_AF=0.08;AFR_AF=0.14;EUR_AF=0.11
+1 84295 rs183209871 G A 100 PASS LDAF=0.0067;AVGPOST=0.9946;AN=2184;THETA=0.0038;VT=SNP;AA=.;AC=9;SNPSOURCE=LOWCOV;ERATE=0.0007;RSQ=0.6599;AF=0.0041;AMR_AF=0.01;EUR_AF=0.01
+1 84346 rs187855973 T C 100 PASS THETA=0.0044;AN=2184;AVGPOST=0.9981;VT=SNP;AA=.;LDAF=0.0014;SNPSOURCE=LOWCOV;AC=1;ERATE=0.0007;RSQ=0.3659;AF=0.0005;EUR_AF=0.0013
+1 84453 rs191379015 C G 100 PASS LDAF=0.0021;RSQ=0.2866;AN=2184;VT=SNP;AA=.;THETA=0.0018;ERATE=0.0008;SNPSOURCE=LOWCOV;AC=1;AVGPOST=0.9968;AF=0.0005;AMR_AF=0.0028
+1 84705 rs183470350 T G 100 PASS LDAF=0.0033;AVGPOST=0.9943;AN=2184;VT=SNP;AA=.;THETA=0.0030;RSQ=0.2658;SNPSOURCE=LOWCOV;AC=2;ERATE=0.0007;AF=0.0009;AMR_AF=0.0028;EUR_AF=0.0013
+1 85063 rs187802690 T C 100 PASS THETA=0.0093;AN=2184;VT=SNP;AA=.;ERATE=0.0051;LDAF=0.0255;RSQ=0.6868;AVGPOST=0.9806;AC=38;SNPSOURCE=LOWCOV;AF=0.02;ASN_AF=0.01;AMR_AF=0.02;AFR_AF=0.01;EUR_AF=0.02
+1 85597 rs192472955 A C 100 PASS AC=145;AVGPOST=0.9322;AN=2184;LDAF=0.0880;VT=SNP;AA=.;RSQ=0.6993;SNPSOURCE=LOWCOV;THETA=0.0020;ERATE=0.0022;AF=0.07;AMR_AF=0.07;AFR_AF=0.11;EUR_AF=0.09
+1 85622 rs185273034 A T 100 PASS ERATE=0.0005;AVGPOST=0.9963;AN=2184;RSQ=0.5194;VT=SNP;AA=.;THETA=0.0174;LDAF=0.0034;SNPSOURCE=LOWCOV;AC=4;AF=0.0018;AFR_AF=0.01
+1 85892 rs147185795 A G 100 PASS AVGPOST=0.9936;RSQ=0.7759;AN=2184;VT=SNP;AA=.;LDAF=0.0122;SNPSOURCE=LOWCOV;AC=21;THETA=0.0116;ERATE=0.0007;AF=0.01;AMR_AF=0.0028;AFR_AF=0.04
+1 86000 rs140628094 A C 100 PASS AN=2184;LDAF=0.0062;VT=SNP;AA=.;AC=10;THETA=0.0018;ERATE=0.0008;RSQ=0.7700;SNPSOURCE=LOWCOV;AVGPOST=0.9968;AF=0.0046;AFR_AF=0.02
+1 86018 rs142878000 C G 100 PASS ERATE=0.0036;RSQ=0.7867;AVGPOST=0.9429;AN=2184;AC=213;LDAF=0.1166;VT=SNP;AA=.;THETA=0.0030;SNPSOURCE=LOWCOV;AF=0.10;ASN_AF=0.08;AMR_AF=0.08;AFR_AF=0.12;EUR_AF=0.11
+1 86028 rs114608975 T C 100 PASS ERATE=0.0005;AC=73;AN=2184;RSQ=0.8713;VT=SNP;AA=.;THETA=0.0108;SNPSOURCE=LOWCOV;AVGPOST=0.9841;LDAF=0.0388;AF=0.03;AMR_AF=0.02;AFR_AF=0.0041;EUR_AF=0.08
+1 86064 rs190167736 G A 100 PASS ERATE=0.0004;AN=2184;VT=SNP;AA=.;THETA=0.0081;SNPSOURCE=LOWCOV;AC=1;RSQ=0.5628;AVGPOST=0.9992;LDAF=0.0008;AF=0.0005;AFR_AF=0.0020
+1 86065 rs116504101 G C 100 PASS ERATE=0.0005;LDAF=0.0398;AN=2184;AVGPOST=0.9846;VT=SNP;AA=.;AC=76;THETA=0.0057;RSQ=0.8725;SNPSOURCE=LOWCOV;AF=0.03;AMR_AF=0.02;AFR_AF=0.01;EUR_AF=0.09
+1 86282 rs192830046 T G 100 PASS LDAF=0.0036;AN=2184;VT=SNP;AA=.;SNPSOURCE=LOWCOV;ERATE=0.0012;RSQ=0.2764;AVGPOST=0.9941;AC=2;THETA=0.0034;AF=0.0009;AMR_AF=0.0028;EUR_AF=0.0013
+1 86303 rs2949417 G T 100 PASS THETA=0.0021;RSQ=0.8008;LDAF=0.1194;AN=2184;AC=214;VT=SNP;AA=.;AVGPOST=0.9465;SNPSOURCE=LOWCOV;ERATE=0.0007;AF=0.10;ASN_AF=0.08;AMR_AF=0.08;AFR_AF=0.12;EUR_AF=0.11
+1 86331 rs115209712 A G 100 PASS THETA=0.0047;AN=2184;VT=SNP;AA=.;AC=216;LDAF=0.1195;RSQ=0.8119;ERATE=0.0008;AVGPOST=0.9495;SNPSOURCE=LOWCOV;AF=0.10;ASN_AF=0.08;AMR_AF=0.08;AFR_AF=0.12;EUR_AF=0.11
+1 86982 rs184970101 G A 100 PASS THETA=0.0050;AN=2184;AVGPOST=0.9979;LDAF=0.0015;VT=SNP;AA=.;SNPSOURCE=LOWCOV;AC=1;ERATE=0.0006;RSQ=0.3541;AF=0.0005;AFR_AF=0.0020
+1 87021 rs188486692 T C 100 PASS AN=2184;RSQ=0.4348;VT=SNP;AA=.;THETA=0.0112;AVGPOST=0.9687;ERATE=0.0011;SNPSOURCE=LOWCOV;AC=19;LDAF=0.0221;AF=0.01;AMR_AF=0.01;AFR_AF=0.0041;EUR_AF=0.02
+1 87114 rs200095900 CT C 192 PASS AA=.;AC=8;AF=0.0037;AFR_AF=0.02;AN=2184;AVGPOST=0.9976;ERATE=0.0010;LDAF=0.0042;RSQ=0.7479;THETA=0.0149;VT=INDEL
+1 87190 rs1524602 G A 100 PASS AN=2184;LDAF=0.2822;VT=SNP;AA=.;RSQ=0.7549;THETA=0.0148;AC=540;SNPSOURCE=LOWCOV;ERATE=0.0096;AVGPOST=0.8739;AF=0.25;ASN_AF=0.29;AMR_AF=0.35;AFR_AF=0.38;EUR_AF=0.08
+1 87360 rs180907504 C T 100 PASS THETA=0.0014;AN=2184;ERATE=0.0025;RSQ=0.3869;VT=SNP;AA=.;AC=14;LDAF=0.0170;SNPSOURCE=LOWCOV;AVGPOST=0.9768;AF=0.01;ASN_AF=0.02;AMR_AF=0.0028;AFR_AF=0.01
+1 87409 rs139490478 C T 100 PASS AN=2184;AC=80;RSQ=0.8364;AVGPOST=0.9797;THETA=0.0075;VT=SNP;AA=.;ERATE=0.0011;SNPSOURCE=LOWCOV;LDAF=0.0438;AF=0.04;ASN_AF=0.0017;AMR_AF=0.02;AFR_AF=0.01;EUR_AF=0.09
+1 87590 rs185279164 G A 100 PASS THETA=0.0068;ERATE=0.0005;AN=2184;VT=SNP;AA=.;LDAF=0.0026;RSQ=0.6866;SNPSOURCE=LOWCOV;AC=4;AVGPOST=0.9982;AF=0.0018;AFR_AF=0.01
+1 87647 rs146836579 T C 100 PASS AN=2184;AC=111;THETA=0.0041;VT=SNP;AA=.;LDAF=0.0558;AVGPOST=0.9811;SNPSOURCE=LOWCOV;ERATE=0.0015;RSQ=0.8636;AF=0.05;AMR_AF=0.03;AFR_AF=0.20
+1 87755 rs140735660 G A 100 PASS ERATE=0.0027;RSQ=0.5060;AN=2184;AC=16;VT=SNP;AA=.;SNPSOURCE=LOWCOV;AVGPOST=0.9847;LDAF=0.0138;THETA=0.0069;AF=0.01;AFR_AF=0.03
+1 87970 rs189643077 T C 100 PASS ERATE=0.0005;AN=2184;RSQ=0.5846;VT=SNP;AA=.;AVGPOST=0.9976;THETA=0.0053;LDAF=0.0025;SNPSOURCE=LOWCOV;AC=3;AF=0.0014;AFR_AF=0.01
+1 87978 rs182297743 G A 100 PASS AVGPOST=0.9963;THETA=0.0074;AN=2184;VT=SNP;AA=.;LDAF=0.0023;RSQ=0.2883;SNPSOURCE=LOWCOV;AC=1;ERATE=0.0006;AF=0.0005;AMR_AF=0.0028
+1 88136 rs59529791 G A 100 PASS RSQ=0.8406;AN=2184;VT=SNP;AA=.;ERATE=0.0010;THETA=0.0059;AVGPOST=0.9778;SNPSOURCE=LOWCOV;AC=106;LDAF=0.0548;AF=0.05;AMR_AF=0.03;AFR_AF=0.20
+1 88169 rs940550 C T 100 PASS RSQ=0.7811;AN=2184;VT=SNP;AA=.;THETA=0.0055;LDAF=0.2576;ERATE=0.0018;SNPSOURCE=LOWCOV;AC=506;AVGPOST=0.8932;AF=0.23;ASN_AF=0.29;AMR_AF=0.33;AFR_AF=0.33;EUR_AF=0.08
+1 88172 rs940551 G A 100 PASS RSQ=0.7703;AVGPOST=0.9669;LDAF=0.0483;AN=2184;ERATE=0.0009;VT=SNP;AA=.;THETA=0.0027;SNPSOURCE=LOWCOV;AC=86;AF=0.04;ASN_AF=0.01;AMR_AF=0.03;AFR_AF=0.01;EUR_AF=0.09
+1 88177 rs143215837 G C 100 PASS ERATE=0.0004;AN=2184;LDAF=0.0456;VT=SNP;AA=.;AVGPOST=0.9686;AC=82;THETA=0.0089;SNPSOURCE=LOWCOV;RSQ=0.7787;AF=0.04;AMR_AF=0.03;AFR_AF=0.01;EUR_AF=0.09
+1 88188 rs148331237 C A 100 PASS THETA=0.0039;AN=2184;VT=SNP;AA=.;AC=9;LDAF=0.0085;SNPSOURCE=LOWCOV;ERATE=0.0007;RSQ=0.5212;AVGPOST=0.9910;AF=0.0041;AMR_AF=0.0028;EUR_AF=0.01
+1 88236 rs186918018 C T 100 PASS AVGPOST=0.9904;AN=2184;ERATE=0.0031;RSQ=0.5511;VT=SNP;AA=.;THETA=0.0087;LDAF=0.0097;SNPSOURCE=LOWCOV;AC=11;AF=0.01;AMR_AF=0.02;AFR_AF=0.0041;EUR_AF=0.0026
+1 88250 rs191950833 T A 100 PASS LDAF=0.0013;AN=2184;RSQ=0.1387;VT=SNP;AA=.;AC=0;THETA=0.0019;SNPSOURCE=LOWCOV;ERATE=0.0007;AVGPOST=0.9974;AF=0
+1 88316 rs113759966 G A 100 PASS LDAF=0.0531;AN=2184;VT=SNP;AA=.;THETA=0.0071;RSQ=0.7791;AVGPOST=0.9644;ERATE=0.0008;AC=87;SNPSOURCE=LOWCOV;AF=0.04;ASN_AF=0.0017;AMR_AF=0.04;AFR_AF=0.01;EUR_AF=0.09
+1 88324 rs183326616 A G 100 PASS ERATE=0.0004;AN=2184;AVGPOST=0.9996;VT=SNP;AA=.;RSQ=0.7073;LDAF=0.0006;SNPSOURCE=LOWCOV;AC=1;THETA=0.0092;AF=0.0005;AFR_AF=0.0020
+1 88338 rs55700207 G A 100 PASS THETA=0.0035;RSQ=0.7967;AN=2184;ERATE=0.0034;LDAF=0.1019;VT=SNP;AA=.;AC=186;SNPSOURCE=LOWCOV;AVGPOST=0.9507;AF=0.09;ASN_AF=0.03;AMR_AF=0.15;AFR_AF=0.14;EUR_AF=0.05
+1 88370 rs185487977 G A 100 PASS AVGPOST=0.9957;LDAF=0.0035;AN=2184;ERATE=0.0009;RSQ=0.4507;VT=SNP;AA=.;SNPSOURCE=LOWCOV;AC=4;THETA=0.0043;AF=0.0018;AMR_AF=0.0028;EUR_AF=0.0040
+1 88376 rs189954431 T G 100 PASS RSQ=0.6404;AVGPOST=0.9994;AN=2184;VT=SNP;AA=.;THETA=0.0057;SNPSOURCE=LOWCOV;AC=1;ERATE=0.0003;LDAF=0.0008;AF=0.0005;AFR_AF=0.0020
+1 88388 rs182344336 C T 100 PASS THETA=0.0048;ERATE=0.0005;RSQ=0.3843;AVGPOST=0.9977;LDAF=0.0016;AN=2184;VT=SNP;AA=.;SNPSOURCE=LOWCOV;AC=1;AF=0.0005;ASN_AF=0.0017
+1 88429 rs146027550 T C 100 PASS LDAF=0.0083;AN=2184;AC=13;RSQ=0.6097;VT=SNP;AA=.;ERATE=0.0010;AVGPOST=0.9922;SNPSOURCE=LOWCOV;THETA=0.0069;AF=0.01;AMR_AF=0.01;AFR_AF=0.02;EUR_AF=0.0013
+1 88710 rs186575039 C G 100 PASS ERATE=0.0005;AC=73;THETA=0.0022;AN=2184;VT=SNP;AA=.;AVGPOST=0.9774;LDAF=0.0389;SNPSOURCE=LOWCOV;RSQ=0.8058;AF=0.03;AMR_AF=0.01;AFR_AF=0.01;EUR_AF=0.08
+1 89165 rs192631277 A C 100 PASS RSQ=0.2647;AN=2184;ERATE=0.0009;VT=SNP;AA=.;AVGPOST=0.9969;LDAF=0.0020;SNPSOURCE=LOWCOV;AC=1;THETA=0.0043;AF=0.0005;ASN_AF=0.0017
+1 89744 rs184101761 A G 100 PASS THETA=0.0068;ERATE=0.0004;AVGPOST=0.9985;LDAF=0.0016;AN=2184;RSQ=0.5853;VT=SNP;AA=.;SNPSOURCE=LOWCOV;AC=2;AF=0.0009;AFR_AF=0.0041
+1 89794 rs188661839 T C 100 PASS AN=2184;THETA=0.0130;VT=SNP;AA=.;SNPSOURCE=LOWCOV;AC=1;ERATE=0.0006;RSQ=0.3812;AVGPOST=0.9984;LDAF=0.0012;AF=0.0005;AFR_AF=0.0020
+1 89946 rs138808727 A T 100 PASS RSQ=0.7414;LDAF=0.1417;AN=2184;ERATE=0.0009;AC=236;VT=SNP;AA=.;THETA=0.0100;AVGPOST=0.9001;SNPSOURCE=LOWCOV;AF=0.11;ASN_AF=0.0035;AMR_AF=0.16;AFR_AF=0.02;EUR_AF=0.22
+1 91190 rs143856811 G A 100 PASS AN=2184;AC=77;ERATE=0.0009;VT=SNP;AA=.;LDAF=0.0447;SNPSOURCE=LOWCOV;RSQ=0.7517;THETA=0.0113;AVGPOST=0.9690;AF=0.04;ASN_AF=0.0017;AMR_AF=0.02;AFR_AF=0.02;EUR_AF=0.08
+1 91228 rs139873689 A G 100 PASS AN=2184;AVGPOST=0.9924;AC=8;RSQ=0.5097;VT=SNP;AA=.;ERATE=0.0010;THETA=0.0012;SNPSOURCE=LOWCOV;LDAF=0.0070;AF=0.0037;AFR_AF=0.02
+1 91536 rs77418980 G T 100 PASS AC=695;AN=2184;ERATE=0.0025;AVGPOST=0.7792;VT=SNP;AA=.;THETA=0.0018;LDAF=0.3255;RSQ=0.6634;SNPSOURCE=LOWCOV;AF=0.32;ASN_AF=0.34;AMR_AF=0.30;AFR_AF=0.04;EUR_AF=0.50
+1 91581 rs151118460 G A 100 PASS AVGPOST=0.7763;THETA=0.0078;AN=2184;VT=SNP;AA=.;AC=716;ERATE=0.0035;LDAF=0.3353;RSQ=0.6618;SNPSOURCE=LOWCOV;AF=0.33;ASN_AF=0.37;AMR_AF=0.30;AFR_AF=0.04;EUR_AF=0.50
+1 91605 rs141083882 C T 100 PASS AC=105;LDAF=0.0597;AN=2184;RSQ=0.7792;VT=SNP;AA=.;ERATE=0.0010;AVGPOST=0.9660;SNPSOURCE=LOWCOV;THETA=0.0070;AF=0.05;AMR_AF=0.02;AFR_AF=0.20
+1 92633 rs149776517 C T 100 PASS THETA=0.0054;AN=2184;VT=SNP;AA=.;AC=44;AVGPOST=0.9592;ERATE=0.0008;LDAF=0.0366;SNPSOURCE=LOWCOV;RSQ=0.5870;AF=0.02;AMR_AF=0.02;EUR_AF=0.05
+1 92858 rs147061536 G T 100 PASS AC=248;THETA=0.0212;RSQ=0.7567;AN=2184;ERATE=0.0046;VT=SNP;AA=.;SNPSOURCE=LOWCOV;AVGPOST=0.9072;LDAF=0.1433;AF=0.11;ASN_AF=0.01;AMR_AF=0.15;AFR_AF=0.05;EUR_AF=0.22
+1 92875 rs193157612 T C 100 PASS THETA=0.0048;AVGPOST=0.9957;AN=2184;LDAF=0.0040;ERATE=0.0009;VT=SNP;AA=.;RSQ=0.4901;SNPSOURCE=LOWCOV;AC=4;AF=0.0018;EUR_AF=0.01
+1 94421 rs200856736 TC T 90 PASS AA=TC;AC=253;AF=0.12;AFR_AF=0.01;AMR_AF=0.20;AN=2184;ASN_AF=0.26;AVGPOST=0.7183;ERATE=0.0117;EUR_AF=0.03;LDAF=0.2244;RSQ=0.3175;THETA=0.0159;VT=INDEL
+1 94986 rs185004859 C T 100 PASS ERATE=0.0166;AN=2184;AC=100;THETA=0.0227;VT=SNP;AA=.;LDAF=0.0872;AVGPOST=0.9040;SNPSOURCE=LOWCOV;RSQ=0.4650;AF=0.05;ASN_AF=0.03;AMR_AF=0.04;AFR_AF=0.07;EUR_AF=0.04
+1 94991 rs188832636 G A 100 PASS THETA=0.0048;LDAF=0.0041;AN=2184;AVGPOST=0.9944;ERATE=0.0009;VT=SNP;AA=.;SNPSOURCE=LOWCOV;RSQ=0.4157;AC=3;AF=0.0014;AMR_AF=0.0028;EUR_AF=0.0026
+1 98583 rs141344361 T A 100 PASS AVGPOST=0.9463;AC=248;THETA=0.0099;AN=2184;VT=SNP;AA=.;RSQ=0.8090;LDAF=0.1336;ERATE=0.0008;SNPSOURCE=LOWCOV;AF=0.11;ASN_AF=0.30;AMR_AF=0.16;AFR_AF=0.01;EUR_AF=0.02
+1 98929 rs12184306 A G 100 PASS RSQ=0.6226;AVGPOST=0.8784;AN=2184;VT=SNP;AA=.;ERATE=0.0045;LDAF=0.1723;SNPSOURCE=LOWCOV;AC=264;THETA=0.0070;AF=0.12;ASN_AF=0.16;AMR_AF=0.08;AFR_AF=0.16;EUR_AF=0.09
+1 98946 rs191775802 C G 100 PASS AVGPOST=0.9945;ERATE=0.0013;AN=2184;LDAF=0.0046;VT=SNP;AA=.;RSQ=0.4807;SNPSOURCE=LOWCOV;AC=4;THETA=0.0097;AF=0.0018;AFR_AF=0.01
+1 98974 rs12184307 A G 100 PASS AVGPOST=0.8921;AN=2184;AC=224;THETA=0.0130;VT=SNP;AA=.;LDAF=0.1405;RSQ=0.6149;SNPSOURCE=LOWCOV;ERATE=0.0012;AF=0.10;ASN_AF=0.14;AMR_AF=0.07;AFR_AF=0.14;EUR_AF=0.06
+1 99671 rs146209971 A T 100 PASS THETA=0.0199;AN=2184;AC=13;RSQ=0.4401;VT=SNP;AA=.;ERATE=0.0010;AVGPOST=0.9802;SNPSOURCE=LOWCOV;LDAF=0.0158;AF=0.01;AMR_AF=0.02;AFR_AF=0.0020;EUR_AF=0.01
+1 99687 rs139153227 C T 100 PASS THETA=0.0211;LDAF=0.0470;AN=2184;VT=SNP;AA=.;ERATE=0.0010;RSQ=0.6276;AVGPOST=0.9548;AC=64;SNPSOURCE=LOWCOV;AF=0.03;AMR_AF=0.03;AFR_AF=0.01;EUR_AF=0.07
+1 99719 rs183898652 C T 100 PASS AN=2184;RSQ=0.5856;VT=SNP;AA=.;AC=10;ERATE=0.0018;SNPSOURCE=LOWCOV;LDAF=0.0076;AVGPOST=0.9925;THETA=0.0251;AF=0.0046;AMR_AF=0.01;AFR_AF=0.01;EUR_AF=0.0013
+1 100676 rs188226172 A T 100 PASS THETA=0.0212;LDAF=0.0047;AN=2184;VT=SNP;AA=.;RSQ=0.2646;SNPSOURCE=LOWCOV;ERATE=0.0012;AC=2;AVGPOST=0.9925;AF=0.0009;AMR_AF=0.0028;AFR_AF=0.0020
+1 103905 rs142403309 A G 100 PASS AN=2184;THETA=0.0131;ERATE=0.0025;AVGPOST=0.8782;AC=220;VT=SNP;AA=.;LDAF=0.1434;SNPSOURCE=LOWCOV;RSQ=0.5994;AF=0.10;ASN_AF=0.10;AMR_AF=0.14;AFR_AF=0.15;EUR_AF=0.05
+1 106544 rs180741296 C G 100 PASS AC=205;AVGPOST=0.5776;AN=2184;VT=SNP;AA=.;LDAF=0.3120;SNPSOURCE=LOWCOV;ERATE=0.0061;THETA=0.0372;RSQ=0.1442;AF=0.09;ASN_AF=0.11;AMR_AF=0.13;AFR_AF=0.11;EUR_AF=0.05
+1 109107 rs201432136 G GT 67 PASS AA=G;AC=63;AF=0.03;AFR_AF=0.01;AMR_AF=0.04;AN=2184;ASN_AF=0.03;AVGPOST=0.8840;ERATE=0.0122;EUR_AF=0.04;LDAF=0.0890;RSQ=0.3660;THETA=0.0210;VT=INDEL
+1 111513 rs199911222 C CTA 249 PASS AA=.;AC=58;AF=0.03;AFR_AF=0.09;AMR_AF=0.03;AN=2184;ASN_AF=0.0017;AVGPOST=0.9145;ERATE=0.0024;EUR_AF=0.0013;LDAF=0.0665;RSQ=0.4694;THETA=0.0292;VT=INDEL
diff --git a/vcf/test/1kg.vcf.gz b/vcf/test/1kg.vcf.gz
new file mode 100644
index 0000000..26b5d68
Binary files /dev/null and b/vcf/test/1kg.vcf.gz differ
diff --git a/vcf/test/README.md b/vcf/test/README.md
new file mode 100644
index 0000000..f2f7b60
--- /dev/null
+++ b/vcf/test/README.md
@@ -0,0 +1,3 @@
+Test data from GATK 1.4-9 and freebayes 0.9.4.
+
+
diff --git a/vcf/test/__init__.py b/vcf/test/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/vcf/test/bcftools.vcf b/vcf/test/bcftools.vcf
new file mode 100644
index 0000000..80adc28
--- /dev/null
+++ b/vcf/test/bcftools.vcf
@@ -0,0 +1,779 @@
+##fileformat=VCFv4.1
+##samtoolsVersion=0.1.18 (r982:295)
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Raw read depth">
+##INFO=<ID=DP4,Number=4,Type=Integer,Description="# high-quality ref-forward bases, ref-reverse, alt-forward and alt-reverse bases">
+##INFO=<ID=MQ,Number=1,Type=Integer,Description="Root-mean-square mapping quality of covering reads">
+##INFO=<ID=FQ,Number=1,Type=Float,Description="Phred probability of all samples being the same">
+##INFO=<ID=AF1,Number=1,Type=Float,Description="Max-likelihood estimate of the first ALT allele frequency (assuming HWE)">
+##INFO=<ID=AC1,Number=1,Type=Float,Description="Max-likelihood estimate of the first ALT allele count (no HWE assumption)">
+##INFO=<ID=G3,Number=3,Type=Float,Description="ML estimate of genotype frequencies">
+##INFO=<ID=HWE,Number=1,Type=Float,Description="Chi^2 based HWE test P-value based on G3">
+##INFO=<ID=CLR,Number=1,Type=Integer,Description="Log ratio of genotype likelihoods with and without the constraint">
+##INFO=<ID=UGT,Number=1,Type=String,Description="The most probable unconstrained genotype configuration in the trio">
+##INFO=<ID=CGT,Number=1,Type=String,Description="The most probable constrained genotype configuration in the trio">
+##INFO=<ID=PV4,Number=4,Type=Float,Description="P-values for strand bias, baseQ bias, mapQ bias and tail distance bias">
+##INFO=<ID=INDEL,Number=0,Type=Flag,Description="Indicates that the variant is an INDEL.">
+##INFO=<ID=PC2,Number=2,Type=Integer,Description="Phred probability of the nonRef allele frequency in group1 samples being larger (,smaller) than in group2.">
+##INFO=<ID=PCHI2,Number=1,Type=Float,Description="Posterior weighted chi^2 P-value for testing the association between group1 and group2 samples.">
+##INFO=<ID=QCHI2,Number=1,Type=Integer,Description="Phred scaled PCHI2.">
+##INFO=<ID=PR,Number=1,Type=Integer,Description="# permutations yielding a smaller PCHI2.">
+##INFO=<ID=VDB,Number=1,Type=Float,Description="Variant Distance Bias">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=GL,Number=3,Type=Float,Description="Likelihoods for RR,RA,AA genotypes (R=ref,A=alt)">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="# high-quality bases">
+##FORMAT=<ID=SP,Number=1,Type=Integer,Description="Phred-scaled strand bias P-value">
+##FORMAT=<ID=PL,Number=G,Type=Integer,Description="List of Phred-scaled genotype likelihoods">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT sample
+MT 1 . G . 283 . DP=245;AF1=0;AC1=0;DP4=240,0,0,0;MQ=30;FQ=-282 PL 0
+MT 2 . A . 283 . DP=250;AF1=0;AC1=0;DP4=247,0,0,0;MQ=31;FQ=-282 PL 0
+MT 3 . T . 283 . DP=253;AF1=0;AC1=0;DP4=252,0,0,0;MQ=31;FQ=-282 PL 0
+MT 4 . C . 283 . DP=257;AF1=0;AC1=0;DP4=253,0,0,0;MQ=32;FQ=-282 PL 0
+MT 5 . A . 283 . DP=263;AF1=0;AC1=0;DP4=258,0,0,0;MQ=32;FQ=-282 PL 0
+MT 6 . C . 283 . DP=268;AF1=0;AC1=0;DP4=259,0,0,0;MQ=33;FQ=-282 PL 0
+MT 7 . A . 283 . DP=272;VDB=0.0111;AF1=0;AC1=0;DP4=265,0,2,0;MQ=34;FQ=-282;PV4=1,1.9e-05,0.32,1 PL 0
+MT 8 . G . 283 . DP=275;AF1=0;AC1=0;DP4=272,0,0,0;MQ=34;FQ=-282 PL 0
+MT 9 . G . 283 . DP=276;AF1=0;AC1=0;DP4=266,0,1,0;MQ=34;FQ=-282;PV4=1,0.006,0.36,0.13 PL 0
+MT 10 . T . 283 . DP=277;VDB=0.0000;AF1=0;AC1=0;DP4=269,0,1,0;MQ=34;FQ=-282;PV4=1,3.7e-05,0.36,1 PL 0
+MT 11 . C . 283 . DP=279;AF1=0;AC1=0;DP4=274,0,1,0;MQ=34;FQ=-282;PV4=1,0.0031,0.36,0.12 PL 0
+MT 12 . T . 283 . DP=286;AF1=0;AC1=0;DP4=284,0,0,0;MQ=35;FQ=-282 PL 0
+MT 13 . A . 283 . DP=289;AF1=0;AC1=0;DP4=281,0,0,0;MQ=36;FQ=-282 PL 0
+MT 14 . T . 283 . DP=290;AF1=0;AC1=0;DP4=288,0,0,0;MQ=36;FQ=-282 PL 0
+MT 15 . C . 283 . DP=290;AF1=0;AC1=0;DP4=280,0,0,0;MQ=36;FQ=-282 PL 0
+MT 16 . A . 283 . DP=293;AF1=0;AC1=0;DP4=290,0,0,0;MQ=36;FQ=-282 PL 0
+MT 17 . C . 283 . DP=297;VDB=0.0111;AF1=0;AC1=0;DP4=290,0,0,0;MQ=36;FQ=-282 PL 0
+MT 18 . C . 283 . DP=298;AF1=0;AC1=0;DP4=284,0,0,0;MQ=37;FQ=-282 PL 0
+MT 19 . C . 283 . DP=301;VDB=0.0111;AF1=0;AC1=0;DP4=293,0,1,0;MQ=37;FQ=-282;PV4=1,1,0.32,0.38 PL 0
+MT 20 . T . 283 . DP=311;AF1=0;AC1=0;DP4=307,0,0,0;MQ=37;FQ=-282 PL 0
+MT 21 . A . 283 . DP=311;AF1=0;AC1=0;DP4=305,0,0,0;MQ=38;FQ=-282 PL 0
+MT 22 . T . 283 . DP=305;AF1=0;AC1=0;DP4=303,0,0,0;MQ=38;FQ=-282 PL 0
+MT 23 . T . 283 . DP=309;AF1=0;AC1=0;DP4=305,0,0,0;MQ=38;FQ=-282 PL 0
+MT 24 . A . 283 . DP=309;AF1=0;AC1=0;DP4=301,0,0,0;MQ=39;FQ=-282 PL 0
+MT 25 . A . 283 . DP=308;AF1=0;AC1=0;DP4=302,0,1,0;MQ=39;FQ=-282;PV4=1,2.2e-09,0.28,1 PL 0
+MT 26 . C . 283 . DP=309;AF1=0;AC1=0;DP4=302,0,0,0;MQ=39;FQ=-282 PL 0
+MT 27 . C . 283 . DP=307;AF1=0;AC1=0;DP4=293,0,0,0;MQ=40;FQ=-282 PL 0
+MT 28 . A . 283 . DP=309;AF1=0;AC1=0;DP4=305,0,0,0;MQ=40;FQ=-282 PL 0
+MT 29 . C . 283 . DP=308;AF1=0;AC1=0;DP4=302,0,0,0;MQ=40;FQ=-282 PL 0
+MT 30 . T . 283 . DP=305;AF1=0;AC1=0;DP4=303,0,0,0;MQ=41;FQ=-282 PL 0
+MT 31 . C . 283 . DP=302;AF1=0;AC1=0;DP4=293,0,0,0;MQ=41;FQ=-282 PL 0
+MT 32 . A . 283 . DP=303;AF1=0;AC1=0;DP4=294,0,0,0;MQ=41;FQ=-282 PL 0
+MT 33 . C . 283 . DP=300;AF1=0;AC1=0;DP4=287,0,0,0;MQ=42;FQ=-282 PL 0
+MT 34 . G . 280 . DP=296;AF1=0;AC1=0;DP4=288,0,0,0;MQ=42;FQ=-282 PL 0
+MT 35 . G . 283 . DP=296;VDB=0.0111;AF1=0;AC1=0;DP4=280,0,0,0;MQ=43;FQ=-282 PL 0
+MT 36 . G . 283 . DP=291;AF1=0;AC1=0;DP4=272,0,0,0;MQ=43;FQ=-282 PL 0
+MT 37 . A . 283 . DP=290;VDB=0.0212;AF1=0;AC1=0;DP4=276,0,1,0;MQ=43;FQ=-282;PV4=1,0.00038,0.22,1 PL 0
+MT 38 . G . 283 . DP=288;AF1=0;AC1=0;DP4=282,0,0,0;MQ=43;FQ=-282 PL 0
+MT 39 . C . 283 . DP=289;VDB=0.0040;AF1=0;AC1=0;DP4=264,0,2,0;MQ=44;FQ=-282;PV4=1,8.3e-11,1,1 PL 0
+MT 40 . T . 283 . DP=288;AF1=0;AC1=0;DP4=285,0,0,0;MQ=44;FQ=-282 PL 0
+MT 41 . C . 283 . DP=284;AF1=0;AC1=0;DP4=276,0,0,0;MQ=45;FQ=-282 PL 0
+MT 42 . T . 283 . DP=279;AF1=0;AC1=0;DP4=277,0,0,0;MQ=45;FQ=-282 PL 0
+MT 43 . C . 283 . DP=279;AF1=0;AC1=0;DP4=268,0,0,0;MQ=46;FQ=-282 PL 0
+MT 44 . C . 283 . DP=280;AF1=0;AC1=0;DP4=265,0,1,0;MQ=46;FQ=-282;PV4=1,0.0064,0.17,1 PL 0
+MT 45 . A . 283 . DP=279;AF1=0;AC1=0;DP4=272,0,0,0;MQ=47;FQ=-282 PL 0
+MT 46 . T . 283 . DP=279;AF1=0;AC1=0;DP4=276,0,0,0;MQ=47;FQ=-282 PL 0
+MT 47 . G . 283 . DP=280;AF1=0;AC1=0;DP4=277,0,0,0;MQ=47;FQ=-282 PL 0
+MT 48 . C . 283 . DP=281;AF1=0;AC1=0;DP4=271,0,0,0;MQ=48;FQ=-282 PL 0
+MT 49 . A . 283 . DP=278;VDB=0.0051;AF1=0;AC1=0;DP4=272,0,0,0;MQ=48;FQ=-282 PL 0
+MT 50 . T . 283 . DP=276;AF1=0;AC1=0;DP4=274,0,0,0;MQ=48;FQ=-282 PL 0
+MT 51 . T . 283 . DP=271;AF1=0;AC1=0;DP4=261,0,0,0;MQ=49;FQ=-282 PL 0
+MT 52 . T . 283 . DP=271;AF1=0;AC1=0;DP4=262,0,0,0;MQ=49;FQ=-282 PL 0
+MT 53 . G . 283 . DP=273;AF1=0;AC1=0;DP4=271,0,0,0;MQ=49;FQ=-282 PL 0
+MT 54 . G . 283 . DP=274;AF1=0;AC1=0;DP4=264,0,0,0;MQ=49;FQ=-282 PL 0
+MT 55 . T . 283 . DP=271;AF1=0;AC1=0;DP4=268,0,0,0;MQ=50;FQ=-282 PL 0
+MT 56 . A . 283 . DP=274;AF1=0;AC1=0;DP4=266,0,0,0;MQ=50;FQ=-282 PL 0
+MT 57 . T . 283 . DP=272;AF1=0;AC1=0;DP4=270,0,0,0;MQ=50;FQ=-282 PL 0
+MT 58 . T . 283 . DP=273;AF1=0;AC1=0;DP4=266,0,0,0;MQ=50;FQ=-282 PL 0
+MT 59 . T . 283 . DP=277;AF1=0;AC1=0;DP4=272,0,0,0;MQ=50;FQ=-282 PL 0
+MT 60 . T . 283 . DP=279;AF1=0;AC1=0;DP4=272,0,0,0;MQ=50;FQ=-282 PL 0
+MT 61 . C . 283 . DP=285;AF1=0;AC1=0;DP4=275,0,0,0;MQ=51;FQ=-282 PL 0
+MT 62 . G . 283 . DP=285;AF1=0;AC1=0;DP4=278,0,1,0;MQ=51;FQ=-282;PV4=1,1.3e-08,0.097,0.066 PL 0
+MT 63 . T . 283 . DP=285;AF1=0;AC1=0;DP4=285,0,0,0;MQ=51;FQ=-282 PL 0
+MT 64 . C . 283 . DP=283;AF1=0;AC1=0;DP4=276,0,0,0;MQ=52;FQ=-282 PL 0
+MT 65 . T . 283 . DP=277;AF1=0;AC1=0;DP4=277,0,0,0;MQ=52;FQ=-282 PL 0
+MT 66 . G . 283 . DP=276;AF1=0;AC1=0;DP4=274,0,0,0;MQ=52;FQ=-282 PL 0
+MT 67 . G . 283 . DP=275;AF1=0;AC1=0;DP4=264,0,0,0;MQ=53;FQ=-282 PL 0
+MT 68 . G . 283 . DP=281;AF1=0;AC1=0;DP4=265,0,0,0;MQ=53;FQ=-282 PL 0
+MT 69 . G . 283 . DP=288;AF1=0;AC1=0;DP4=269,0,0,0;MQ=54;FQ=-282 PL 0
+MT 70 . G . 283 . DP=296;AF1=0;AC1=0;DP4=275,0,0,0;MQ=54;FQ=-282 PL 0
+MT 71 . G . 283 . DP=300;AF1=0;AC1=0;DP4=272,0,0,0;MQ=54;FQ=-282 PL 0
+MT 72 . T . 283 . DP=301;VDB=0.0367;AF1=0;AC1=0;DP4=285,0,0,0;MQ=54;FQ=-282 PL 0
+MT 73 . A . 283 . DP=295;AF1=0;AC1=0;DP4=283,0,1,0;MQ=55;FQ=-282;PV4=1,0.0066,1,1 PL 0
+MT 74 . T . 283 . DP=298;AF1=0;AC1=0;DP4=298,0,0,0;MQ=55;FQ=-282 PL 0
+MT 75 . G . 283 . DP=300;AF1=0;AC1=0;DP4=299,0,0,0;MQ=55;FQ=-282 PL 0
+MT 76 . C . 283 . DP=304;VDB=0.0342;AF1=0;AC1=0;DP4=281,0,2,0;MQ=56;FQ=-282;PV4=1,8.3e-13,1,1 PL 0
+MT 77 . A . 283 . DP=303;VDB=0.0200;AF1=0;AC1=0;DP4=293,0,1,0;MQ=56;FQ=-282;PV4=1,0.00064,0.019,0.25 PL 0
+MT 78 . C . 283 . DP=302;VDB=0.0026;AF1=0;AC1=0;DP4=283,0,3,0;MQ=56;FQ=-282;PV4=1,4.1e-13,0.21,0.36 PL 0
+MT 79 . G . 283 . DP=301;AF1=0;AC1=0;DP4=285,0,0,0;MQ=57;FQ=-282 PL 0
+MT 80 . C . 283 . DP=308;VDB=0.0217;AF1=0;AC1=0;DP4=286,0,1,0;MQ=57;FQ=-282;PV4=1,9.8e-07,0.0098,0.14 PL 0
+MT 81 . G . 282 . DP=314;AF1=0;AC1=0;DP4=302,0,0,0;MQ=56;FQ=-282 PL 0
+MT 82 . A . 283 . DP=313;VDB=0.0049;AF1=0;AC1=0;DP4=296,0,2,0;MQ=57;FQ=-282;PV4=1,0.013,0.069,0.1 PL 0
+MT 83 . T . 283 . DP=316;VDB=0.0200;AF1=0;AC1=0;DP4=313,0,2,0;MQ=57;FQ=-282;PV4=1,0.0029,1,1 PL 0
+MT 84 . A . 283 . DP=316;AF1=0;AC1=0;DP4=302,0,1,0;MQ=57;FQ=-282;PV4=1,1.3e-05,0.0044,1 PL 0
+MT 85 . G . 283 . DP=314;AF1=0;AC1=0;DP4=314,0,0,0;MQ=57;FQ=-282 PL 0
+MT 86 . C . 283 . DP=318;VDB=0.0198;AF1=0;AC1=0;DP4=297,0,0,0;MQ=58;FQ=-282 PL 0
+MT 87 . A . 283 . DP=324;AF1=0;AC1=0;DP4=316,0,0,0;MQ=58;FQ=-282 PL 0
+MT 88 . T . 283 . DP=326;AF1=0;AC1=0;DP4=325,0,0,0;MQ=58;FQ=-282 PL 0
+MT 89 . T . 283 . DP=328;AF1=0;AC1=0;DP4=313,0,1,0;MQ=58;FQ=-282;PV4=1,1.3e-08,1,0.064 PL 0
+MT 90 . G . 283 . DP=329;VDB=0.0193;AF1=0;AC1=0;DP4=326,0,0,0;MQ=58;FQ=-282 PL 0
+MT 91 . C . 283 . DP=328;AF1=0;AC1=0;DP4=310,0,1,0;MQ=58;FQ=-282;PV4=1,4.2e-05,1,0.37 PL 0
+MT 92 . G . 278 . DP=327;VDB=0.0237;AF1=0;AC1=0;DP4=314,0,2,0;MQ=58;FQ=-282;PV4=1,0.17,1,0.2 PL 0
+MT 93 . A . 283 . DP=328;AF1=0;AC1=0;DP4=310,0,0,0;MQ=58;FQ=-282 PL 0
+MT 94 . G . 283 . DP=327;AF1=0;AC1=0;DP4=327,0,0,0;MQ=57;FQ=-282 PL 0
+MT 95 . A . 283 . DP=323;AF1=0;AC1=0;DP4=308,0,1,0;MQ=58;FQ=-282;PV4=1,4.8e-05,0.002,1 PL 0
+MT 96 . C . 283 . DP=323;AF1=0;AC1=0;DP4=305,0,1,0;MQ=58;FQ=-282;PV4=1,0.17,1,1 PL 0
+MT 97 . G . 275 . DP=321;AF1=0;AC1=0;DP4=311,0,0,0;MQ=58;FQ=-282 PL 0
+MT 98 . C . 283 . DP=322;VDB=0.0006;AF1=0;AC1=0;DP4=301,0,0,0;MQ=58;FQ=-282 PL 0
+MT 99 . T . 283 . DP=327;AF1=0;AC1=0;DP4=327,0,0,0;MQ=58;FQ=-282 PL 0
+MT 100 . G . 283 . DP=332;AF1=0;AC1=0;DP4=332,0,0,0;MQ=58;FQ=-282 PL 0
+MT 101 . G . 283 . DP=332;AF1=0;AC1=0;DP4=306,0,0,0;MQ=58;FQ=-282 PL 0
+MT 102 . A . 283 . DP=331;VDB=0.0050;AF1=0;AC1=0;DP4=290,0,0,0;MQ=58;FQ=-282 PL 0
+MT 103 . G . 283 . DP=329;VDB=0.0342;AF1=0;AC1=0;DP4=321,0,0,0;MQ=58;FQ=-282 PL 0
+MT 104 . C . 283 . DP=330;VDB=0.0003;AF1=0;AC1=0;DP4=273,0,1,0;MQ=58;FQ=-282;PV4=1,0.0026,1,0.047 PL 0
+MT 105 . C . 283 . DP=338;AF1=0;AC1=0;DP4=302,0,0,0;MQ=58;FQ=-282 PL 0
+MT 106 . G . 283 . DP=343;AF1=0;AC1=0;DP4=314,0,0,0;MQ=58;FQ=-282 PL 0
+MT 107 . G . 283 . DP=344;AF1=0;AC1=0;DP4=300,0,0,0;MQ=58;FQ=-282 PL 0
+MT 108 . A . 283 . DP=347;VDB=0.0302;AF1=0;AC1=0;DP4=305,0,0,0;MQ=58;FQ=-282 PL 0
+MT 109 . G . 283 . DP=348;AF1=0;AC1=0;DP4=344,0,0,0;MQ=58;FQ=-282 PL 0
+MT 110 . C . 283 . DP=341;VDB=0.0445;AF1=0;AC1=0;DP4=279,0,2,0;MQ=59;FQ=-282;PV4=1,6.4e-06,1.4e-08,1 PL 0
+MT 111 . A . 283 . DP=343;VDB=0.0233;AF1=0;AC1=0;DP4=321,0,0,0;MQ=58;FQ=-282 PL 0
+MT 112 . C . 283 . DP=348;VDB=0.0169;AF1=0;AC1=0;DP4=300,0,3,0;MQ=58;FQ=-282;PV4=1,3.2e-08,7.4e-07,0.16 PL 0
+MT 113 . C . 283 . DP=350;VDB=0.0252;AF1=0;AC1=0;DP4=307,0,2,0;MQ=58;FQ=-282;PV4=1,4.8e-08,1,0.38 PL 0
+MT 114 . C . 283 . DP=351;AF1=0;AC1=0;DP4=307,0,0,0;MQ=58;FQ=-282 PL 0
+MT 115 . T . 283 . DP=351;VDB=0.0025;AF1=0;AC1=0;DP4=346,0,0,0;MQ=57;FQ=-282 PL 0
+MT 116 . A . 283 . DP=352;VDB=0.0183;AF1=0;AC1=0;DP4=317,0,3,0;MQ=58;FQ=-282;PV4=1,8.3e-07,0.0073,0.45 PL 0
+MT 117 . T . 283 . DP=355;VDB=0.0025;AF1=0;AC1=0;DP4=351,0,0,0;MQ=57;FQ=-282 PL 0
+MT 118 . G . 283 . DP=352;VDB=0.0306;AF1=0;AC1=0;DP4=348,0,0,0;MQ=58;FQ=-282 PL 0
+MT 119 . T . 283 . DP=353;VDB=0.0335;AF1=0;AC1=0;DP4=345,0,1,0;MQ=58;FQ=-282;PV4=1,0.005,1,1 PL 0
+MT 120 . C . 283 . DP=354;VDB=0.0440;AF1=0;AC1=0;DP4=331,0,2,0;MQ=58;FQ=-282;PV4=1,0.00033,1,0.14 PL 0
+MT 121 . G . 283 . DP=356;AF1=0;AC1=0;DP4=311,0,0,0;MQ=58;FQ=-282 PL 0
+MT 122 . C . 283 . DP=353;VDB=0.0237;AF1=0;AC1=0;DP4=304,0,1,0;MQ=59;FQ=-282;PV4=1,0.0064,1,0.29 PL 0
+MT 123 . A . 283 . DP=357;VDB=0.0141;AF1=0;AC1=0;DP4=332,0,0,0;MQ=58;FQ=-282 PL 0
+MT 124 . G . 283 . DP=357;AF1=0;AC1=0;DP4=353,0,0,0;MQ=58;FQ=-282 PL 0
+MT 125 . T . 283 . DP=359;VDB=0.0302;AF1=0;AC1=0;DP4=347,0,1,0;MQ=58;FQ=-282;PV4=1,0.0037,1,1 PL 0
+MT 126 . A . 283 . DP=360;VDB=0.0215;AF1=0;AC1=0;DP4=327,0,2,0;MQ=58;FQ=-282;PV4=1,0.00072,0.0069,0.13 PL 0
+MT 127 . T . 283 . DP=358;VDB=0.0245;AF1=0;AC1=0;DP4=355,0,2,0;MQ=58;FQ=-282;PV4=1,9.7e-05,5e-08,0.14 PL 0
+MT 128 . C . 283 . DP=360;VDB=0.0335;AF1=0;AC1=0;DP4=336,0,0,0;MQ=58;FQ=-282 PL 0
+MT 129 . T . 283 . DP=360;AF1=0;AC1=0;DP4=356,0,1,0;MQ=58;FQ=-282;PV4=1,0.00053,0.0013,1 PL 0
+MT 130 . G . 283 . DP=357;VDB=0.0141;AF1=0;AC1=0;DP4=355,0,0,0;MQ=58;FQ=-282 PL 0
+MT 131 . T . 283 . DP=360;VDB=0.0057;AF1=0;AC1=0;DP4=351,0,0,0;MQ=58;FQ=-282 PL 0
+MT 132 . C . 283 . DP=359;VDB=0.0367;AF1=0;AC1=0;DP4=338,0,0,0;MQ=58;FQ=-282 PL 0
+MT 133 . T . 283 . DP=358;VDB=0.0033;AF1=0;AC1=0;DP4=353,0,1,0;MQ=58;FQ=-282;PV4=1,0.00063,0.0012,1 PL 0
+MT 134 . T . 283 . DP=357;AF1=0;AC1=0;DP4=326,0,0,0;MQ=58;FQ=-282 PL 0
+MT 135 . T . 283 . DP=356;AF1=0;AC1=0;DP4=322,0,0,0;MQ=59;FQ=-282 PL 0
+MT 136 . G . 283 . DP=358;AF1=0;AC1=0;DP4=353,0,0,0;MQ=58;FQ=-282 PL 0
+MT 137 . A . 283 . DP=358;VDB=0.0044;AF1=0;AC1=0;DP4=317,0,0,0;MQ=58;FQ=-282 PL 0
+MT 138 . T . 283 . DP=358;VDB=0.0250;AF1=0;AC1=0;DP4=355,0,0,0;MQ=58;FQ=-282 PL 0
+MT 139 . T . 283 . DP=360;AF1=0;AC1=0;DP4=328,0,0,0;MQ=58;FQ=-282 PL 0
+MT 140 . C . 283 . DP=356;VDB=0.0367;AF1=0;AC1=0;DP4=338,0,2,0;MQ=58;FQ=-282;PV4=1,0.0065,2.6e-06,0.23 PL 0
+MT 141 . C . 283 . DP=360;AF1=0;AC1=0;DP4=321,0,1,0;MQ=59;FQ=-282;PV4=1,0.012,1,0.13 PL 0
+MT 142 . T . 283 . DP=362;VDB=0.0342;AF1=0;AC1=0;DP4=357,0,0,0;MQ=58;FQ=-282 PL 0
+MT 143 . G . 283 . DP=360;VDB=0.0183;AF1=0;AC1=0;DP4=353,0,1,0;MQ=58;FQ=-282;PV4=1,0.0017,1,0.18 PL 0
+MT 144 . C . 283 . DP=364;VDB=0.0101;AF1=0;AC1=0;DP4=325,0,0,0;MQ=59;FQ=-282 PL 0
+MT 145 . C . 283 . DP=363;VDB=0.0063;AF1=0;AC1=0;DP4=330,0,0,0;MQ=58;FQ=-282 PL 0
+MT 146 . T . 283 . DP=361;VDB=0.0207;AF1=0;AC1=0;DP4=358,0,0,0;MQ=58;FQ=-282 PL 0
+MT 147 . C . 283 . DP=362;AF1=0;AC1=0;DP4=357,0,0,0;MQ=58;FQ=-282 PL 0
+MT 148 . A . 283 . DP=363;VDB=0.0051;AF1=0;AC1=0;DP4=347,0,0,0;MQ=58;FQ=-282 PL 0
+MT 149 . T . 283 . DP=363;AF1=0;AC1=0;DP4=363,0,0,0;MQ=58;FQ=-282 PL 0
+MT 150 . C . 283 . DP=363;VDB=0.0168;AF1=0;AC1=0;DP4=350,0,0,0;MQ=58;FQ=-282 PL 0
+MT 151 . C . 283 . DP=359;AF1=0;AC1=0;DP4=337,0,1,0;MQ=58;FQ=-282;PV4=1,6.7e-05,1,0.077 PL 0
+MT 152 . T . 283 . DP=355;VDB=0.0237;AF1=0;AC1=0;DP4=352,0,2,0;MQ=58;FQ=-282;PV4=1,0.028,1,1 PL 0
+MT 153 . A . 283 . DP=354;VDB=0.0115;AF1=0;AC1=0;DP4=327,0,5,0;MQ=58;FQ=-282;PV4=1,0.001,0.15,0.009 PL 0
+MT 154 . T . 283 . DP=353;VDB=0.0051;AF1=0;AC1=0;DP4=349,0,0,0;MQ=58;FQ=-282 PL 0
+MT 155 . T . 283 . DP=357;AF1=0;AC1=0;DP4=343,0,0,0;MQ=58;FQ=-282 PL 0
+MT 156 . A . 283 . DP=357;VDB=0.0210;AF1=0;AC1=0;DP4=337,0,0,0;MQ=58;FQ=-282 PL 0
+MT 157 . T . 283 . DP=356;AF1=0;AC1=0;DP4=355,0,0,0;MQ=58;FQ=-282 PL 0
+MT 158 . T . 283 . DP=351;AF1=0;AC1=0;DP4=333,0,0,0;MQ=58;FQ=-282 PL 0
+MT 159 . T . 283 . DP=343;AF1=0;AC1=0;DP4=321,0,0,0;MQ=58;FQ=-282 PL 0
+MT 160 . A . 283 . DP=337;AF1=0;AC1=0;DP4=313,0,0,0;MQ=58;FQ=-282 PL 0
+MT 161 . T . 283 . DP=336;AF1=0;AC1=0;DP4=334,0,1,0;MQ=58;FQ=-282;PV4=1,7.6e-06,1,1 PL 0
+MT 162 . C . 283 . DP=333;VDB=0.0245;AF1=0;AC1=0;DP4=314,0,0,0;MQ=58;FQ=-282 PL 0
+MT 163 . G . 278 . DP=328;VDB=0.0200;AF1=0;AC1=0;DP4=308,0,0,0;MQ=58;FQ=-282 PL 0
+MT 164 . C . 283 . DP=328;VDB=0.0212;AF1=0;AC1=0;DP4=306,0,0,0;MQ=59;FQ=-282 PL 0
+MT 165 . A . 283 . DP=330;VDB=0.0167;AF1=0;AC1=0;DP4=319,0,1,0;MQ=58;FQ=-282;PV4=1,0.0026,1,0.18 PL 0
+MT 166 . C . 283 . DP=332;VDB=0.0134;AF1=0;AC1=0;DP4=308,0,2,0;MQ=59;FQ=-282;PV4=1,1.6e-07,1,1 PL 0
+MT 167 . C . 283 . DP=330;AF1=0;AC1=0;DP4=310,0,1,0;MQ=59;FQ=-282;PV4=1,3e-05,1,1 PL 0
+MT 168 . T . 283 . DP=329;AF1=0;AC1=0;DP4=329,0,0,0;MQ=58;FQ=-282 PL 0
+MT 169 . A . 283 . DP=332;AF1=0;AC1=0;DP4=314,0,0,0;MQ=59;FQ=-282 PL 0
+MT 170 . C . 283 . DP=327;VDB=0.0144;AF1=0;AC1=0;DP4=307,0,1,0;MQ=59;FQ=-282;PV4=1,0.0013,1,1 PL 0
+MT 171 . G . 283 . DP=326;AF1=0;AC1=0;DP4=315,0,0,0;MQ=59;FQ=-282 PL 0
+MT 172 . T . 283 . DP=325;VDB=0.0086;AF1=0;AC1=0;DP4=323,0,0,0;MQ=59;FQ=-282 PL 0
+MT 173 . T . 283 . DP=324;AF1=0;AC1=0;DP4=311,0,0,0;MQ=59;FQ=-282 PL 0
+MT 174 . C . 283 . DP=321;VDB=0.0227;AF1=0;AC1=0;DP4=307,0,1,0;MQ=59;FQ=-282;PV4=1,2.4e-06,1,0.32 PL 0
+MT 175 . A . 283 . DP=323;VDB=0.0183;AF1=0;AC1=0;DP4=312,0,0,0;MQ=59;FQ=-282 PL 0
+MT 176 . A . 283 . DP=320;AF1=0;AC1=0;DP4=306,0,1,0;MQ=59;FQ=-282;PV4=1,0.00011,1,1 PL 0
+MT 177 . T . 283 . DP=317;AF1=0;AC1=0;DP4=317,0,0,0;MQ=58;FQ=-282 PL 0
+MT 178 . A . 283 . DP=321;AF1=0;AC1=0;DP4=313,0,0,0;MQ=59;FQ=-282 PL 0
+MT 179 . T . 283 . DP=322;AF1=0;AC1=0;DP4=322,0,0,0;MQ=59;FQ=-282 PL 0
+MT 180 . T . 283 . DP=324;AF1=0;AC1=0;DP4=307,0,0,0;MQ=59;FQ=-282 PL 0
+MT 181 . A . 283 . DP=323;AF1=0;AC1=0;DP4=311,0,0,0;MQ=59;FQ=-282 PL 0
+MT 182 . C . 283 . DP=323;VDB=0.0160;AF1=0;AC1=0;DP4=302,0,1,0;MQ=59;FQ=-282;PV4=1,0.12,1.7e-06,1 PL 0
+MT 183 . A . 283 . DP=326;VDB=0.0096;AF1=0;AC1=0;DP4=318,0,0,0;MQ=59;FQ=-282 PL 0
+MT 184 . G . 283 . DP=328;VDB=0.0128;AF1=0;AC1=0;DP4=325,0,2,0;MQ=59;FQ=-282;PV4=1,1e-05,1,0.37 PL 0
+MT 185 . G . 283 . DP=328;AF1=0;AC1=0;DP4=298,0,1,0;MQ=59;FQ=-282;PV4=1,4.8e-06,1,1 PL 0
+MT 186 . C . 283 . DP=324;VDB=0.0238;AF1=0;AC1=0;DP4=295,0,0,0;MQ=59;FQ=-282 PL 0
+MT 187 . G . 283 . DP=325;AF1=0;AC1=0;DP4=305,0,0,0;MQ=59;FQ=-282 PL 0
+MT 188 . A . 283 . DP=326;VDB=0.0335;AF1=0;AC1=0;DP4=301,0,1,0;MQ=59;FQ=-282;PV4=1,0.0032,1,1 PL 0
+MT 189 . A . 283 . DP=324;AF1=0;AC1=0;DP4=300,0,0,0;MQ=59;FQ=-282 PL 0
+MT 190 . C . 283 . DP=322;VDB=0.0192;AF1=0;AC1=0;DP4=298,0,1,0;MQ=59;FQ=-282;PV4=1,3.9e-06,7.9e-07,1 PL 0
+MT 191 . A . 283 . DP=324;VDB=0.0009;AF1=0;AC1=0;DP4=313,0,0,0;MQ=59;FQ=-282 PL 0
+MT 192 . T . 283 . DP=321;AF1=0;AC1=0;DP4=320,0,0,0;MQ=59;FQ=-282 PL 0
+MT 193 . A . 283 . DP=329;VDB=0.0299;AF1=0;AC1=0;DP4=307,0,2,0;MQ=59;FQ=-282;PV4=1,0.003,1,0.11 PL 0
+MT 194 . C . 283 . DP=332;VDB=0.0429;AF1=0;AC1=0;DP4=301,0,2,0;MQ=59;FQ=-282;PV4=1,3e-05,1,0.071 PL 0
+MT 195 . T . 283 . DP=329;VDB=0.0121;AF1=0;AC1=0;DP4=327,0,0,0;MQ=59;FQ=-282 PL 0
+MT 196 . T . 283 . DP=326;AF1=0;AC1=0;DP4=308,0,0,0;MQ=59;FQ=-282 PL 0
+MT 197 . A . 283 . DP=328;AF1=0;AC1=0;DP4=311,0,0,0;MQ=59;FQ=-282 PL 0
+MT 198 . C . 283 . DP=329;VDB=0.0187;AF1=0;AC1=0;DP4=310,0,1,0;MQ=59;FQ=-282;PV4=1,2.3e-05,1,0.25 PL 0
+MT 199 . T . 283 . DP=329;AF1=0;AC1=0;DP4=327,0,0,0;MQ=59;FQ=-282 PL 0
+MT 200 . A . 283 . DP=333;VDB=0.0220;AF1=0;AC1=0;DP4=321,0,0,0;MQ=59;FQ=-282 PL 0
+MT 201 . A . 283 . DP=331;AF1=0;AC1=0;DP4=315,0,0,0;MQ=59;FQ=-282 PL 0
+MT 202 . A . 283 . DP=332;AF1=0;AC1=0;DP4=311,0,0,0;MQ=59;FQ=-282 PL 0
+MT 203 . G . 283 . DP=327;VDB=0.0123;AF1=0;AC1=0;DP4=324,0,1,0;MQ=59;FQ=-282;PV4=1,0.0021,1,0.093 PL 0
+MT 204 . T . 283 . DP=326;VDB=0.0025;AF1=0;AC1=0;DP4=318,0,2,0;MQ=59;FQ=-282;PV4=1,1.1e-05,9.1e-07,0.23 PL 0
+MT 205 . G . 283 . DP=329;AF1=0;AC1=0;DP4=326,0,0,0;MQ=59;FQ=-282 PL 0
+MT 206 . T . 283 . DP=331;VDB=0.0044;AF1=0;AC1=0;DP4=322,0,1,0;MQ=59;FQ=-282;PV4=1,0.00013,2.1e-07,0.23 PL 0
+MT 207 . G . 283 . DP=333;AF1=0;AC1=0;DP4=330,0,0,0;MQ=59;FQ=-282 PL 0
+MT 208 . T . 283 . DP=332;AF1=0;AC1=0;DP4=332,0,0,0;MQ=59;FQ=-282 PL 0
+MT 209 . T . 283 . DP=332;AF1=0;AC1=0;DP4=318,0,0,0;MQ=59;FQ=-282 PL 0
+MT 210 . A . 283 . DP=332;AF1=0;AC1=0;DP4=319,0,1,0;MQ=59;FQ=-282;PV4=1,2.9e-05,2.5e-06,1 PL 0
+MT 211 . A . 283 . DP=334;AF1=0;AC1=0;DP4=324,0,0,0;MQ=59;FQ=-282 PL 0
+MT 212 . T . 283 . DP=335;AF1=0;AC1=0;DP4=335,0,0,0;MQ=59;FQ=-282 PL 0
+MT 213 . T . 283 . DP=335;AF1=0;AC1=0;DP4=325,0,0,0;MQ=59;FQ=-282 PL 0
+MT 214 . A . 283 . DP=338;AF1=0;AC1=0;DP4=330,0,0,0;MQ=59;FQ=-282 PL 0
+MT 215 . A . 283 . DP=333;AF1=0;AC1=0;DP4=323,0,0,0;MQ=59;FQ=-282 PL 0
+MT 216 . T . 283 . DP=331;AF1=0;AC1=0;DP4=331,0,0,0;MQ=58;FQ=-282 PL 0
+MT 217 . T . 283 . DP=332;AF1=0;AC1=0;DP4=324,0,0,0;MQ=59;FQ=-282 PL 0
+MT 218 . A . 283 . DP=332;VDB=0.0072;AF1=0;AC1=0;DP4=327,0,2,0;MQ=58;FQ=-282;PV4=1,3.1e-12,0.00014,0.25 PL 0
+MT 219 . A . 283 . DP=331;AF1=0;AC1=0;DP4=324,0,0,0;MQ=59;FQ=-282 PL 0
+MT 220 . T . 283 . DP=331;AF1=0;AC1=0;DP4=330,0,1,0;MQ=58;FQ=-282;PV4=1,4.3e-07,0.00018,0.4 PL 0
+MT 221 . G . 283 . DP=330;AF1=0;AC1=0;DP4=328,0,0,0;MQ=58;FQ=-282 PL 0
+MT 222 . C . 283 . DP=333;VDB=0.0248;AF1=0;AC1=0;DP4=320,0,0,0;MQ=59;FQ=-282 PL 0
+MT 223 . T . 283 . DP=329;VDB=0.0198;AF1=0;AC1=0;DP4=327,0,0,0;MQ=58;FQ=-282 PL 0
+MT 224 . T . 283 . DP=328;AF1=0;AC1=0;DP4=320,0,0,0;MQ=59;FQ=-282 PL 0
+MT 225 . G . 283 . DP=331;AF1=0;AC1=0;DP4=330,0,0,0;MQ=58;FQ=-282 PL 0
+MT 226 . T . 283 . DP=329;AF1=0;AC1=0;DP4=327,0,0,0;MQ=58;FQ=-282 PL 0
+MT 227 . A . 283 . DP=324;AF1=0;AC1=0;DP4=316,0,0,0;MQ=58;FQ=-282 PL 0
+MT 228 . G . 283 . DP=321;AF1=0;AC1=0;DP4=320,0,1,0;MQ=58;FQ=-282;PV4=1,2e-06,0.00026,1 PL 0
+MT 229 . G . 283 . DP=318;AF1=0;AC1=0;DP4=304,0,0,0;MQ=58;FQ=-282 PL 0
+MT 230 . A . 283 . DP=320;AF1=0;AC1=0;DP4=311,0,0,0;MQ=58;FQ=-282 PL 0
+MT 231 . C . 283 . DP=319;AF1=0;AC1=0;DP4=309,0,0,0;MQ=58;FQ=-282 PL 0
+MT 232 . A . 283 . DP=317;AF1=0;AC1=0;DP4=309,0,0,0;MQ=58;FQ=-282 PL 0
+MT 233 . T . 283 . DP=319;AF1=0;AC1=0;DP4=319,0,0,0;MQ=58;FQ=-282 PL 0
+MT 234 . A . 283 . DP=314;AF1=0;AC1=0;DP4=308,0,0,0;MQ=58;FQ=-282 PL 0
+MT 235 . A . 283 . DP=314;AF1=0;AC1=0;DP4=307,0,0,0;MQ=58;FQ=-282 PL 0
+MT 236 . T . 283 . DP=318;AF1=0;AC1=0;DP4=317,0,1,0;MQ=58;FQ=-282;PV4=1,4.1e-10,1,0.44 PL 0
+MT 237 . A . 283 . DP=320;VDB=0.0168;AF1=0;AC1=0;DP4=313,0,1,0;MQ=58;FQ=-282;PV4=1,0.00077,1,0.1 PL 0
+MT 238 . A . 283 . DP=318;AF1=0;AC1=0;DP4=313,0,0,0;MQ=58;FQ=-282 PL 0
+MT 239 . T . 283 . DP=316;AF1=0;AC1=0;DP4=316,0,0,0;MQ=58;FQ=-282 PL 0
+MT 240 . A . 283 . DP=315;AF1=0;AC1=0;DP4=310,0,0,0;MQ=58;FQ=-282 PL 0
+MT 241 . A . 283 . DP=314;VDB=0.0160;AF1=0;AC1=0;DP4=309,0,1,0;MQ=58;FQ=-282;PV4=1,0.036,1,1 PL 0
+MT 242 . C . 283 . DP=314;VDB=0.0183;AF1=0;AC1=0;DP4=305,0,0,0;MQ=58;FQ=-282 PL 0
+MT 243 . A . 283 . DP=316;AF1=0;AC1=0;DP4=313,0,0,0;MQ=58;FQ=-282 PL 0
+MT 244 . A . 283 . DP=320;AF1=0;AC1=0;DP4=314,0,0,0;MQ=58;FQ=-282 PL 0
+MT 245 . T . 283 . DP=316;AF1=0;AC1=0;DP4=316,0,0,0;MQ=57;FQ=-282 PL 0
+MT 246 . T . 283 . DP=319;AF1=0;AC1=0;DP4=311,0,0,0;MQ=57;FQ=-282 PL 0
+MT 247 . G . 283 . DP=323;AF1=0;AC1=0;DP4=322,0,0,0;MQ=57;FQ=-282 PL 0
+MT 248 . A . 283 . DP=327;AF1=0;AC1=0;DP4=320,0,0,0;MQ=57;FQ=-282 PL 0
+MT 249 . A . 283 . DP=328;AF1=0;AC1=0;DP4=318,0,1,0;MQ=57;FQ=-282;PV4=1,1.7e-07,0.00026,1 PL 0
+MT 250 . T . 283 . DP=326;AF1=0;AC1=0;DP4=324,0,0,0;MQ=57;FQ=-282 PL 0
+MT 251 . G . 283 . DP=323;AF1=0;AC1=0;DP4=323,0,0,0;MQ=57;FQ=-282 PL 0
+MT 252 . T . 283 . DP=324;VDB=0.0217;AF1=0;AC1=0;DP4=322,0,0,0;MQ=56;FQ=-282 PL 0
+MT 253 . C . 283 . DP=328;VDB=0.0158;AF1=0;AC1=0;DP4=322,0,1,0;MQ=56;FQ=-282;PV4=1,5.7e-05,1,0.41 PL 0
+MT 254 . T . 283 . DP=324;AF1=0;AC1=0;DP4=324,0,0,0;MQ=56;FQ=-282 PL 0
+MT 255 . G . 283 . DP=319;AF1=0;AC1=0;DP4=318,0,1,0;MQ=56;FQ=-282;PV4=1,1.7e-08,1,0.033 PL 0
+MT 256 . C . 283 . DP=312;AF1=0;AC1=0;DP4=303,0,0,0;MQ=56;FQ=-282 PL 0
+MT 257 . A . 283 . DP=312;AF1=0;AC1=0;DP4=307,0,0,0;MQ=56;FQ=-282 PL 0
+MT 258 . C . 283 . DP=313;AF1=0;AC1=0;DP4=303,0,0,0;MQ=56;FQ=-282 PL 0
+MT 259 . A . 283 . DP=312;VDB=0.0069;AF1=0;AC1=0;DP4=300,0,0,0;MQ=56;FQ=-282 PL 0
+MT 260 . G . 283 . DP=309;AF1=0;AC1=0;DP4=307,0,0,0;MQ=56;FQ=-282 PL 0
+MT 261 . C . 283 . DP=303;AF1=0;AC1=0;DP4=290,0,0,0;MQ=56;FQ=-282 PL 0
+MT 262 . C . 283 . DP=303;AF1=0;AC1=0;DP4=286,0,0,0;MQ=56;FQ=-282 PL 0
+MT 263 . A G 210 . DP=302;VDB=0.0417;AF1=1;AC1=2;DP4=0,0,289,0;MQ=56;FQ=-282 GT:PL:GQ 1/1:243,255,0:99
+MT 264 . C . 283 . DP=309;VDB=0.0180;AF1=0;AC1=0;DP4=290,0,0,0;MQ=55;FQ=-282 PL 0
+MT 265 . T . 283 . DP=311;AF1=0;AC1=0;DP4=310,0,0,0;MQ=55;FQ=-282 PL 0
+MT 266 . T . 283 . DP=311;AF1=0;AC1=0;DP4=298,0,0,0;MQ=55;FQ=-282 PL 0
+MT 267 . T . 283 . DP=310;AF1=0;AC1=0;DP4=293,0,0,0;MQ=55;FQ=-282 PL 0
+MT 268 . C . 283 . DP=308;VDB=0.0214;AF1=0;AC1=0;DP4=298,0,0,0;MQ=55;FQ=-282 PL 0
+MT 269 . C . 283 . DP=307;VDB=0.0183;AF1=0;AC1=0;DP4=293,0,2,0;MQ=55;FQ=-282;PV4=1,2.4e-10,1,0.1 PL 0
+MT 270 . A . 283 . DP=306;AF1=0;AC1=0;DP4=300,0,0,0;MQ=55;FQ=-282 PL 0
+MT 271 . C . 283 . DP=307;AF1=0;AC1=0;DP4=298,0,0,0;MQ=55;FQ=-282 PL 0
+MT 272 . A . 283 . DP=308;AF1=0;AC1=0;DP4=300,0,0,0;MQ=55;FQ=-282 PL 0
+MT 273 . C . 283 . DP=306;AF1=0;AC1=0;DP4=296,0,0,0;MQ=55;FQ=-282 PL 0
+MT 274 . A . 283 . DP=303;AF1=0;AC1=0;DP4=294,0,1,0;MQ=55;FQ=-282;PV4=1,0.0016,0.05,1 PL 0
+MT 275 . G . 283 . DP=308;AF1=0;AC1=0;DP4=306,0,0,0;MQ=55;FQ=-282 PL 0
+MT 276 . A . 283 . DP=308;VDB=0.0253;AF1=0;AC1=0;DP4=289,0,0,0;MQ=55;FQ=-282 PL 0
+MT 277 . C . 283 . DP=307;VDB=0.0163;AF1=0;AC1=0;DP4=291,0,1,0;MQ=55;FQ=-282;PV4=1,0.04,1,0.18 PL 0
+MT 278 . A . 283 . DP=305;VDB=0.0144;AF1=0;AC1=0;DP4=295,0,0,0;MQ=55;FQ=-282 PL 0
+MT 279 . T . 283 . DP=303;AF1=0;AC1=0;DP4=303,0,0,0;MQ=54;FQ=-282 PL 0
+MT 280 . C . 283 . DP=300;AF1=0;AC1=0;DP4=296,0,0,0;MQ=54;FQ=-282 PL 0
+MT 281 . A . 283 . DP=298;AF1=0;AC1=0;DP4=294,0,0,0;MQ=54;FQ=-282 PL 0
+MT 282 . T . 283 . DP=298;AF1=0;AC1=0;DP4=298,0,0,0;MQ=54;FQ=-282 PL 0
+MT 283 . A . 283 . DP=292;VDB=0.0183;AF1=0;AC1=0;DP4=281,0,2,0;MQ=54;FQ=-282;PV4=1,1.5e-06,0.094,0.37 PL 0
+MT 284 . A . 283 . DP=287;AF1=0;AC1=0;DP4=278,0,0,0;MQ=54;FQ=-282 PL 0
+MT 285 . C . 283 . DP=283;VDB=0.0121;AF1=0;AC1=0;DP4=278,0,0,0;MQ=54;FQ=-282 PL 0
+MT 286 . A . 283 . DP=279;AF1=0;AC1=0;DP4=274,0,0,0;MQ=54;FQ=-282 PL 0
+MT 287 . A . 283 . DP=273;AF1=0;AC1=0;DP4=265,0,0,0;MQ=54;FQ=-282 PL 0
+MT 288 . A . 283 . DP=270;AF1=0;AC1=0;DP4=260,0,0,0;MQ=54;FQ=-282 PL 0
+MT 289 . A . 283 . DP=267;VDB=0.0106;AF1=0;AC1=0;DP4=252,0,0,0;MQ=54;FQ=-282 PL 0
+MT 290 . A . 283 . DP=261;VDB=0.0133;AF1=0;AC1=0;DP4=250,0,0,0;MQ=53;FQ=-282 PL 0
+MT 291 . A . 283 . DP=259;AF1=0;AC1=0;DP4=247,0,0,0;MQ=54;FQ=-282 PL 0
+MT 292 . T . 283 . DP=255;AF1=0;AC1=0;DP4=255,0,0,0;MQ=53;FQ=-282 PL 0
+MT 293 . T . 283 . DP=259;AF1=0;AC1=0;DP4=246,0,0,0;MQ=54;FQ=-282 PL 0
+MT 294 . T . 283 . DP=257;AF1=0;AC1=0;DP4=245,0,0,0;MQ=54;FQ=-282 PL 0
+MT 295 . C . 283 . DP=254;AF1=0;AC1=0;DP4=246,0,0,0;MQ=54;FQ=-282 PL 0
+MT 296 . C . 283 . DP=253;AF1=0;AC1=0;DP4=234,0,0,0;MQ=54;FQ=-282 PL 0
+MT 297 . A . 283 . DP=253;VDB=0.0099;AF1=0;AC1=0;DP4=244,0,0,0;MQ=54;FQ=-282 PL 0
+MT 298 . C . 283 . DP=253;VDB=0.0168;AF1=0;AC1=0;DP4=236,0,0,0;MQ=54;FQ=-282 PL 0
+MT 299 . C . 283 . DP=251;AF1=0;AC1=0;DP4=229,0,1,0;MQ=54;FQ=-282;PV4=1,0.0068,1,1 PL 0
+MT 300 . A . 283 . DP=249;AF1=0;AC1=0;DP4=237,0,0,0;MQ=53;FQ=-282 PL 0
+MT 301 . A . 283 . DP=248;VDB=0.0369;AF1=0;AC1=0;DP4=223,0,1,0;MQ=54;FQ=-282;PV4=1,1.3e-05,0.058,0.12 PL 0
+MT 302 . A . 283 . DP=248;VDB=0.0227;AF1=0;AC1=0;DP4=221,0,1,0;MQ=54;FQ=-282;PV4=1,8.3e-05,0.057,0.14 PL 0
+MT 302 . ACCCCCCC . 84.6 . INDEL;DP=248;VDB=0.0435;AF1=0;AC1=0;DP4=26,0,2,0;MQ=47;FQ=-88.5;PV4=1,1,1,0.21 PL 0
+MT 303 . C . 283 . DP=244;AF1=0;AC1=0;DP4=205,0,0,0;MQ=55;FQ=-282 PL 0
+MT 304 . C . 283 . DP=242;VDB=0.0100;AF1=0;AC1=0;DP4=197,0,1,0;MQ=55;FQ=-282;PV4=1,0.0027,0.0048,1 PL 0
+MT 304 . C . 85.5 . INDEL;DP=242;VDB=0.0435;AF1=0;AC1=0;DP4=59,0,1,0;MQ=53;FQ=-197;PV4=1,0.22,1,1 PL 0
+MT 305 . C . 283 . DP=250;VDB=0.0158;AF1=0;AC1=0;DP4=193,0,2,0;MQ=55;FQ=-282;PV4=1,0.00014,1,0.3 PL 0
+MT 306 . C . 283 . DP=252;VDB=0.0111;AF1=0;AC1=0;DP4=194,0,2,0;MQ=54;FQ=-282;PV4=1,0.00023,1,0.11 PL 0
+MT 307 . C . 283 . DP=252;VDB=0.0284;AF1=0;AC1=0;DP4=190,0,3,0;MQ=55;FQ=-282;PV4=1,2e-06,0.0019,0.34 PL 0
+MT 308 . C . 283 . DP=255;VDB=0.0090;AF1=0;AC1=0;DP4=175,0,2,0;MQ=56;FQ=-282;PV4=1,1.9e-06,1,0.11 PL 0
+MT 309 . C . 283 . DP=257;VDB=0.0001;AF1=0;AC1=0;DP4=176,0,0,0;MQ=56;FQ=-282 PL 0
+MT 310 . T . 283 . DP=260;VDB=0.0268;AF1=0;AC1=0;DP4=204,0,0,0;MQ=54;FQ=-282 PL 0
+MT 311 . C . 105 . DP=265;VDB=0.0195;AF1=0;AC1=0;DP4=25,0,0,0;MQ=53;FQ=-102 PL 0
+MT 312 . C . 102 . DP=271;AF1=0;AC1=0;DP4=23,1,0,0;MQ=58;FQ=-99 PL 0
+MT 313 . C . 132 . DP=282;AF1=0;AC1=0;DP4=33,1,0,0;MQ=59;FQ=-129 PL 0
+MT 314 . C . 138 . DP=280;AF1=0;AC1=0;DP4=35,1,0,0;MQ=58;FQ=-135 PL 0
+MT 315 . C . 147 . DP=281;AF1=0;AC1=0;DP4=38,1,0,0;MQ=58;FQ=-144 PL 0
+MT 316 . G . 255 . DP=270;VDB=0.0233;AF1=0;AC1=0;DP4=199,1,2,0;MQ=57;FQ=-282;PV4=1,0.0058,0.075,1 PL 0
+MT 317 . C . 283 . DP=278;VDB=0.0227;AF1=0;AC1=0;DP4=221,2,0,0;MQ=58;FQ=-282 PL 0
+MT 318 . T . 283 . DP=286;VDB=0.0367;AF1=0;AC1=0;DP4=267,2,0,0;MQ=56;FQ=-282 PL 0
+MT 319 . T . 283 . DP=287;VDB=0.0449;AF1=0;AC1=0;DP4=236,2,2,0;MQ=57;FQ=-282;PV4=1,5.5e-08,0.011,0.33 PL 0
+MT 320 . C . 283 . DP=288;VDB=0.0233;AF1=0;AC1=0;DP4=263,3,0,0;MQ=56;FQ=-282 PL 0
+MT 321 . T . 283 . DP=289;VDB=0.0302;AF1=0;AC1=0;DP4=270,3,1,1;MQ=56;FQ=-282;PV4=0.029,0.00028,0.12,0.0089 PL 0
+MT 322 . G . 283 . DP=290;VDB=0.0093;AF1=0;AC1=0;DP4=258,4,4,0;MQ=56;FQ=-282;PV4=1,6.5e-05,1.4e-06,1 PL 0
+MT 323 . G . 283 . DP=291;VDB=0.0081;AF1=0;AC1=0;DP4=212,5,0,0;MQ=58;FQ=-282 PL 0
+MT 324 . C . 283 . DP=292;VDB=0.0099;AF1=0;AC1=0;DP4=231,5,1,0;MQ=58;FQ=-282;PV4=1,0.0031,1,0.26 PL 0
+MT 325 . C . 283 . DP=295;VDB=0.0128;AF1=0;AC1=0;DP4=236,10,2,0;MQ=58;FQ=-282;PV4=1,8.7e-06,2.3e-05,0.47 PL 0
+MT 326 . A . 283 . DP=298;VDB=0.0449;AF1=0;AC1=0;DP4=257,14,3,0;MQ=56;FQ=-282;PV4=1,0.0039,1,1 PL 0
+MT 327 . C . 283 . DP=307;VDB=0.0302;AF1=0;AC1=0;DP4=238,18,2,0;MQ=57;FQ=-282;PV4=1,0.00016,0.077,0.41 PL 0
+MT 328 . A . 283 . DP=311;VDB=0.0115;AF1=0;AC1=0;DP4=258,19,1,0;MQ=56;FQ=-282;PV4=1,0.023,1,1 PL 0
+MT 329 . G . 283 . DP=316;VDB=0.0335;AF1=0;AC1=0;DP4=279,16,3,0;MQ=56;FQ=-282;PV4=1,0.00045,0.017,1 PL 0
+MT 330 . C . 283 . DP=322;VDB=0.0115;AF1=0;AC1=0;DP4=237,22,0,0;MQ=57;FQ=-282 PL 0
+MT 331 . A . 283 . DP=332;VDB=0.0302;AF1=0;AC1=0;DP4=268,25,0,0;MQ=56;FQ=-282 PL 0
+MT 332 . C . 283 . DP=337;VDB=0.0104;AF1=0;AC1=0;DP4=257,28,1,0;MQ=56;FQ=-282;PV4=1,0.00057,0.00021,0.22 PL 0
+MT 333 . T . 283 . DP=339;VDB=0.0005;AF1=0;AC1=0;DP4=305,24,0,0;MQ=56;FQ=-282 PL 0
+MT 334 . T . 283 . DP=349;VDB=0.0106;AF1=0;AC1=0;DP4=275,31,0,0;MQ=56;FQ=-282 PL 0
+MT 335 . A . 283 . DP=356;VDB=0.0057;AF1=0;AC1=0;DP4=283,32,1,0;MQ=56;FQ=-282;PV4=1,0.037,0.014,1 PL 0
+MT 336 . A . 283 . DP=361;AF1=0;AC1=0;DP4=279,34,0,0;MQ=56;FQ=-282 PL 0
+MT 337 . A . 283 . DP=359;VDB=0.0022;AF1=0;AC1=0;DP4=278,40,1,0;MQ=56;FQ=-282;PV4=1,0.16,1,0.093 PL 0
+MT 338 . C . 283 . DP=359;VDB=0.0302;AF1=0;AC1=0;DP4=267,41,3,0;MQ=56;FQ=-282;PV4=1,3.1e-06,1,1 PL 0
+MT 339 . A . 283 . DP=365;VDB=0.0242;AF1=0;AC1=0;DP4=295,45,0,0;MQ=55;FQ=-282 PL 0
+MT 340 . C . 283 . DP=372;VDB=0.0169;AF1=0;AC1=0;DP4=284,51,1,0;MQ=55;FQ=-282;PV4=1,0.00047,0.025,1 PL 0
+MT 341 . A . 283 . DP=378;VDB=0.0325;AF1=0;AC1=0;DP4=299,54,0,0;MQ=55;FQ=-282 PL 0
+MT 342 . T . 283 . DP=385;VDB=0.0324;AF1=0;AC1=0;DP4=321,47,0,0;MQ=55;FQ=-282 PL 0
+MT 343 . C . 283 . DP=387;VDB=0.0169;AF1=0;AC1=0;DP4=298,62,2,0;MQ=54;FQ=-282;PV4=1,9.5e-06,1,0.48 PL 0
+MT 344 . T . 283 . DP=392;VDB=0.0394;AF1=0;AC1=0;DP4=319,49,1,1;MQ=55;FQ=-282;PV4=0.25,6.8e-05,0.16,1 PL 0
+MT 345 . C . 283 . DP=403;AF1=0;AC1=0;DP4=314,70,0,0;MQ=54;FQ=-282 PL 0
+MT 346 . T . 283 . DP=412;VDB=0.0124;AF1=0;AC1=0;DP4=335,70,0,0;MQ=54;FQ=-282 PL 0
+MT 347 . G . 283 . DP=418;VDB=0.0335;AF1=0;AC1=0;DP4=290,71,5,0;MQ=54;FQ=-282;PV4=0.59,6.4e-09,0.002,1 PL 0
+MT 348 . C . 283 . DP=429;AF1=0;AC1=0;DP4=300,80,1,0;MQ=54;FQ=-282;PV4=1,0.0017,1,0.19 PL 0
+MT 349 . C . 283 . DP=441;VDB=0.0396;AF1=0;AC1=0;DP4=312,87,1,0;MQ=54;FQ=-282;PV4=1,2.7e-05,0.043,1 PL 0
+MT 350 . A . 283 . DP=451;VDB=0.0115;AF1=0;AC1=0;DP4=333,83,0,0;MQ=54;FQ=-282 PL 0
+MT 351 . A . 283 . DP=456;VDB=0.0445;AF1=0;AC1=0;DP4=322,89,0,0;MQ=54;FQ=-282 PL 0
+MT 352 . A . 283 . DP=458;VDB=0.0245;AF1=0;AC1=0;DP4=321,98,0,0;MQ=53;FQ=-282 PL 0
+MT 353 . C . 283 . DP=467;VDB=0.0449;AF1=0;AC1=0;DP4=317,100,0,0;MQ=53;FQ=-282 PL 0
+MT 354 . C . 283 . DP=481;VDB=0.0447;AF1=0;AC1=0;DP4=328,104,1,1;MQ=53;FQ=-282;PV4=0.43,0.00091,0.012,1 PL 0
+MT 355 . C . 283 . DP=483;AF1=0;AC1=0;DP4=339,104,0,0;MQ=53;FQ=-282 PL 0
+MT 356 . C . 283 . DP=494;VDB=0.0166;AF1=0;AC1=0;DP4=340,122,1,0;MQ=52;FQ=-282;PV4=1,0.023,1,0.026 PL 0
+MT 357 . A . 283 . DP=500;VDB=0.0073;AF1=0;AC1=0;DP4=353,115,2,0;MQ=53;FQ=-282;PV4=1,1.4e-06,1,1 PL 0
+MT 358 . A . 283 . DP=503;VDB=0.0063;AF1=0;AC1=0;DP4=357,115,0,0;MQ=53;FQ=-282 PL 0
+MT 359 . A . 283 . DP=507;VDB=0.0146;AF1=0;AC1=0;DP4=348,119,0,0;MQ=52;FQ=-282 PL 0
+MT 360 . A . 283 . DP=515;VDB=0.0090;AF1=0;AC1=0;DP4=355,125,1,1;MQ=52;FQ=-282;PV4=0.45,2.4e-06,0.29,0.0068 PL 0
+MT 361 . A . 283 . DP=516;VDB=0.0030;AF1=0;AC1=0;DP4=359,134,0,0;MQ=52;FQ=-282 PL 0
+MT 362 . C . 283 . DP=522;AF1=0;AC1=0;DP4=361,138,1,0;MQ=52;FQ=-282;PV4=1,5.4e-06,0.078,1 PL 0
+MT 363 . A . 283 . DP=528;VDB=0.0185;AF1=0;AC1=0;DP4=380,128,1,0;MQ=52;FQ=-282;PV4=1,2.2e-05,0.072,0.067 PL 0
+MT 364 . A . 283 . DP=540;AF1=0;AC1=0;DP4=370,143,0,0;MQ=52;FQ=-282 PL 0
+MT 365 . A . 283 . DP=552;VDB=0.0112;AF1=0;AC1=0;DP4=379,152,0,0;MQ=52;FQ=-282 PL 0
+MT 366 . G . 283 . DP=553;VDB=0.0429;AF1=0;AC1=0;DP4=385,146,1,2;MQ=52;FQ=-282;PV4=0.19,5.9e-09,0.12,1 PL 0
+MT 367 . A . 283 . DP=560;AF1=0;AC1=0;DP4=386,146,0,0;MQ=52;FQ=-282 PL 0
+MT 368 . A . 283 . DP=566;VDB=0.0367;AF1=0;AC1=0;DP4=388,156,2,0;MQ=52;FQ=-282;PV4=1,0.0066,0.32,0.38 PL 0
+MT 369 . C . 283 . DP=573;VDB=0.0009;AF1=0;AC1=0;DP4=376,150,0,0;MQ=52;FQ=-282 PL 0
+MT 370 . C . 283 . DP=578;AF1=0;AC1=0;DP4=390,153,0,0;MQ=52;FQ=-282 PL 0
+MT 371 . C . 283 . DP=587;VDB=0.0369;AF1=0;AC1=0;DP4=395,176,1,0;MQ=51;FQ=-282;PV4=1,0.068,0.091,1 PL 0
+MT 372 . T . 283 . DP=597;VDB=0.0063;AF1=0;AC1=0;DP4=415,162,0,0;MQ=52;FQ=-282 PL 0
+MT 373 . A . 283 . DP=607;VDB=0.0168;AF1=0;AC1=0;DP4=413,169,2,0;MQ=52;FQ=-282;PV4=1,0.00013,1,1 PL 0
+MT 374 . A . 283 . DP=612;VDB=0.0165;AF1=0;AC1=0;DP4=414,185,0,0;MQ=51;FQ=-282 PL 0
+MT 375 . C . 283 . DP=620;VDB=0.0394;AF1=0;AC1=0;DP4=406,186,7,4;MQ=51;FQ=-282;PV4=0.75,1,0.49,1 PL 0
+MT 376 . A . 283 . DP=631;VDB=0.0302;AF1=0;AC1=0;DP4=423,191,0,0;MQ=51;FQ=-282 PL 0
+MT 377 . C . 283 . DP=641;VDB=0.0342;AF1=0;AC1=0;DP4=421,192,1,0;MQ=51;FQ=-282;PV4=1,1.5e-06,1,0.4 PL 0
+MT 378 . C . 283 . DP=656;VDB=0.0144;AF1=0;AC1=0;DP4=432,204,1,0;MQ=51;FQ=-282;PV4=1,0.12,0.093,1 PL 0
+MT 379 . A . 283 . DP=671;VDB=0.0335;AF1=0;AC1=0;DP4=452,207,0,0;MQ=51;FQ=-282 PL 0
+MT 380 . G . 283 . DP=676;VDB=0.0193;AF1=0;AC1=0;DP4=458,206,0,2;MQ=51;FQ=-282;PV4=0.097,7.4e-09,0.0067,0.052 PL 0
+MT 381 . C . 283 . DP=686;AF1=0;AC1=0;DP4=456,209,0,0;MQ=51;FQ=-282 PL 0
+MT 382 . C . 283 . DP=691;AF1=0;AC1=0;DP4=462,216,1,0;MQ=51;FQ=-282;PV4=1,1.9e-06,0.091,1 PL 0
+MT 383 . T . 283 . DP=697;VDB=0.0111;AF1=0;AC1=0;DP4=474,215,1,0;MQ=51;FQ=-282;PV4=1,1.3e-08,1,0.33 PL 0
+MT 384 . A . 283 . DP=699;AF1=0;AC1=0;DP4=467,221,1,0;MQ=51;FQ=-282;PV4=1,7.9e-07,1,0.032 PL 0
+MT 385 . A . 283 . DP=702;VDB=0.0270;AF1=0;AC1=0;DP4=465,221,1,0;MQ=51;FQ=-282;PV4=1,0.071,1,0.23 PL 0
+MT 386 . C . 283 . DP=707;VDB=0.0245;AF1=0;AC1=0;DP4=464,223,1,0;MQ=51;FQ=-282;PV4=1,0.022,1,0.064 PL 0
+MT 387 . C . 283 . DP=713;AF1=0;AC1=0;DP4=468,230,1,0;MQ=51;FQ=-282;PV4=1,2e-09,1,1 PL 0
+MT 388 . A . 283 . DP=719;AF1=0;AC1=0;DP4=477,234,0,0;MQ=51;FQ=-282 PL 0
+MT 389 . G . 283 . DP=725;AF1=0;AC1=0;DP4=488,235,0,0;MQ=51;FQ=-282 PL 0
+MT 390 . A . 283 . DP=727;VDB=0.0165;AF1=0;AC1=0;DP4=471,239,2,0;MQ=51;FQ=-282;PV4=0.55,8.2e-09,0.34,1 PL 0
+MT 391 . T . 283 . DP=736;VDB=0.0193;AF1=0;AC1=0;DP4=490,238,2,0;MQ=51;FQ=-282;PV4=1,4.7e-07,0.34,1 PL 0
+MT 392 . T . 283 . DP=744;AF1=0;AC1=0;DP4=488,241,1,0;MQ=51;FQ=-282;PV4=1,1.4e-09,1,1 PL 0
+MT 393 . T . 283 . DP=746;AF1=0;AC1=0;DP4=486,241,0,0;MQ=51;FQ=-282 PL 0
+MT 394 . C . 283 . DP=750;VDB=0.0202;AF1=0;AC1=0;DP4=496,250,0,0;MQ=51;FQ=-282 PL 0
+MT 395 . A . 283 . DP=746;AF1=0;AC1=0;DP4=492,247,0,0;MQ=51;FQ=-282 PL 0
+MT 396 . A . 283 . DP=752;AF1=0;AC1=0;DP4=480,252,0,0;MQ=51;FQ=-282 PL 0
+MT 397 . A . 283 . DP=755;VDB=0.0215;AF1=0;AC1=0;DP4=479,258,1,0;MQ=51;FQ=-282;PV4=1,2.8e-06,0.096,1 PL 0
+MT 398 . T . 283 . DP=759;AF1=0;AC1=0;DP4=495,253,0,0;MQ=51;FQ=-282 PL 0
+MT 399 . T . 283 . DP=763;AF1=0;AC1=0;DP4=488,256,1,0;MQ=51;FQ=-282;PV4=1,3.9e-07,0.017,0.11 PL 0
+MT 400 . T . 283 . DP=764;VDB=0.0138;AF1=0;AC1=0;DP4=485,262,0,0;MQ=51;FQ=-282 PL 0
+MT 401 . T . 283 . DP=772;AF1=0;AC1=0;DP4=483,271,0,0;MQ=51;FQ=-282 PL 0
+MT 402 . A . 283 . DP=767;VDB=0.0190;AF1=0;AC1=0;DP4=477,275,0,1;MQ=51;FQ=-282;PV4=0.37,2.2e-06,0.093,1 PL 0
+MT 403 . T . 283 . DP=767;AF1=0;AC1=0;DP4=484,268,0,0;MQ=51;FQ=-282 PL 0
+MT 404 . C . 283 . DP=771;AF1=0;AC1=0;DP4=478,284,0,1;MQ=51;FQ=-282;PV4=0.37,4e-06,0.092,1 PL 0
+MT 405 . T . 283 . DP=766;VDB=0.0227;AF1=0;AC1=0;DP4=479,272,1,1;MQ=51;FQ=-282;PV4=1,2.2e-21,1,0.19 PL 0
+MT 406 . T . 283 . DP=770;AF1=0;AC1=0;DP4=470,281,0,0;MQ=51;FQ=-282 PL 0
+MT 407 . T . 283 . DP=764;AF1=0;AC1=0;DP4=459,283,0,0;MQ=51;FQ=-282 PL 0
+MT 408 . T . 283 . DP=762;AF1=0;AC1=0;DP4=454,297,0,0;MQ=51;FQ=-282 PL 0
+MT 409 . G . 283 . DP=768;AF1=0;AC1=0;DP4=466,292,0,0;MQ=51;FQ=-282 PL 0
+MT 410 . G . 283 . DP=766;VDB=0.0261;AF1=0;AC1=0;DP4=447,286,0,0;MQ=51;FQ=-282 PL 0
+MT 411 . C . 283 . DP=767;AF1=0;AC1=0;DP4=449,292,0,0;MQ=51;FQ=-282 PL 0
+MT 412 . G . 283 . DP=771;VDB=0.0185;AF1=0;AC1=0;DP4=459,287,0,1;MQ=51;FQ=-282;PV4=0.39,0.0013,1,0.029 PL 0
+MT 413 . G . 283 . DP=776;VDB=0.0394;AF1=0;AC1=0;DP4=451,285,0,2;MQ=52;FQ=-282;PV4=0.15,0.0059,0.025,1 PL 0
+MT 414 . T . 283 . DP=781;VDB=0.0429;AF1=0;AC1=0;DP4=470,297,0,1;MQ=52;FQ=-282;PV4=0.39,2.6e-05,1,0.061 PL 0
+MT 415 . A . 283 . DP=787;AF1=0;AC1=0;DP4=462,310,0,0;MQ=52;FQ=-282 PL 0
+MT 416 . T . 283 . DP=788;VDB=0.0205;AF1=0;AC1=0;DP4=473,306,1,1;MQ=52;FQ=-282;PV4=1,5.1e-12,0.31,1 PL 0
+MT 417 . G . 283 . DP=782;VDB=0.0366;AF1=0;AC1=0;DP4=471,290,0,1;MQ=52;FQ=-282;PV4=0.38,3.1e-08,0.079,1 PL 0
+MT 418 . C . 283 . DP=785;VDB=0.0227;AF1=0;AC1=0;DP4=457,310,1,0;MQ=52;FQ=-282;PV4=1,4.5e-08,1,0.013 PL 0
+MT 419 . A . 283 . DP=785;VDB=0.0447;AF1=0;AC1=0;DP4=462,309,0,0;MQ=52;FQ=-282 PL 0
+MT 420 . C . 283 . DP=787;VDB=0.0268;AF1=0;AC1=0;DP4=450,313,3,0;MQ=52;FQ=-282;PV4=0.27,1.3e-11,0.11,1 PL 0
+MT 421 . T . 283 . DP=785;AF1=0;AC1=0;DP4=470,296,0,0;MQ=52;FQ=-282 PL 0
+MT 422 . T . 283 . DP=786;AF1=0;AC1=0;DP4=457,302,0,0;MQ=52;FQ=-282 PL 0
+MT 423 . T . 283 . DP=782;VDB=0.0253;AF1=0;AC1=0;DP4=453,298,1,0;MQ=52;FQ=-282;PV4=1,1.3e-08,0.073,1 PL 0
+MT 424 . T . 283 . DP=780;VDB=0.0210;AF1=0;AC1=0;DP4=453,299,0,2;MQ=52;FQ=-282;PV4=0.16,1.3e-11,1,0.043 PL 0
+MT 425 . A . 283 . DP=781;AF1=0;AC1=0;DP4=449,296,0,0;MQ=52;FQ=-282 PL 0
+MT 426 . A . 283 . DP=782;VDB=0.0067;AF1=0;AC1=0;DP4=455,310,0,0;MQ=53;FQ=-282 PL 0
+MT 427 . C . 283 . DP=778;VDB=0.0342;AF1=0;AC1=0;DP4=447,311,3,0;MQ=53;FQ=-282;PV4=0.27,2.2e-13,0.0044,1 PL 0
+MT 428 . A . 283 . DP=785;VDB=0.0013;AF1=0;AC1=0;DP4=460,311,2,0;MQ=53;FQ=-282;PV4=0.52,0.0039,0.014,1 PL 0
+MT 429 . G . 283 . DP=782;AF1=0;AC1=0;DP4=468,290,0,0;MQ=53;FQ=-282 PL 0
+MT 430 . T . 283 . DP=783;VDB=0.0417;AF1=0;AC1=0;DP4=468,279,0,0;MQ=53;FQ=-282 PL 0
+MT 431 . C . 283 . DP=783;VDB=0.0417;AF1=0;AC1=0;DP4=456,308,3,0;MQ=53;FQ=-282;PV4=0.28,2.7e-07,0.25,0.48 PL 0
+MT 432 . A . 283 . DP=778;VDB=0.0417;AF1=0;AC1=0;DP4=458,293,0,1;MQ=53;FQ=-282;PV4=0.39,0.0053,1,0.074 PL 0
+MT 433 . C . 283 . DP=778;VDB=0.0088;AF1=0;AC1=0;DP4=438,276,2,0;MQ=53;FQ=-282;PV4=0.53,6.9e-09,0.011,1 PL 0
+MT 434 . C . 283 . DP=779;VDB=0.0367;AF1=0;AC1=0;DP4=442,285,3,1;MQ=53;FQ=-282;PV4=1,8.7e-16,1,0.0067 PL 0
+MT 435 . C . 283 . DP=775;AF1=0;AC1=0;DP4=447,282,0,0;MQ=54;FQ=-282 PL 0
+MT 436 . C . 283 . DP=773;VDB=0.0233;AF1=0;AC1=0;DP4=436,286,3,0;MQ=53;FQ=-282;PV4=0.28,1.7e-10,0.06,0.39 PL 0
+MT 437 . C . 283 . DP=773;AF1=0;AC1=0;DP4=444,285,0,0;MQ=54;FQ=-282 PL 0
+MT 438 . C . 283 . DP=772;AF1=0;AC1=0;DP4=449,298,0,0;MQ=54;FQ=-282 PL 0
+MT 439 . A . 283 . DP=773;VDB=0.0253;AF1=0;AC1=0;DP4=448,284,1,0;MQ=54;FQ=-282;PV4=1,0.00018,1,1 PL 0
+MT 440 . A . 283 . DP=772;VDB=0.0324;AF1=0;AC1=0;DP4=449,300,0,2;MQ=54;FQ=-282;PV4=0.16,0.0016,1,0.27 PL 0
+MT 441 . C . 283 . DP=770;AF1=0;AC1=0;DP4=444,299,0,0;MQ=54;FQ=-282 PL 0
+MT 442 . T . 283 . DP=773;VDB=0.0373;AF1=0;AC1=0;DP4=473,275,0,0;MQ=54;FQ=-282 PL 0
+MT 443 . A . 283 . DP=772;VDB=0.0169;AF1=0;AC1=0;DP4=458,273,2,0;MQ=55;FQ=-282;PV4=0.53,3.5e-09,0.18,0.012 PL 0
+MT 444 . A . 283 . DP=758;VDB=0.0417;AF1=0;AC1=0;DP4=451,284,0,0;MQ=55;FQ=-282 PL 0
+MT 445 . C . 283 . DP=765;VDB=0.0124;AF1=0;AC1=0;DP4=454,287,1,0;MQ=55;FQ=-282;PV4=1,0.00013,1,1 PL 0
+MT 446 . A . 283 . DP=763;VDB=0.0233;AF1=0;AC1=0;DP4=465,283,0,1;MQ=55;FQ=-282;PV4=0.38,1,1,1 PL 0
+MT 447 . C . 283 . DP=761;VDB=0.0121;AF1=0;AC1=0;DP4=444,291,1,0;MQ=55;FQ=-282;PV4=1,0.014,0.023,1 PL 0
+MT 448 . A . 283 . DP=768;VDB=0.0445;AF1=0;AC1=0;DP4=459,293,1,0;MQ=55;FQ=-282;PV4=1,0.0033,0.025,1 PL 0
+MT 449 . T . 283 . DP=765;VDB=0.0183;AF1=0;AC1=0;DP4=467,251,0,0;MQ=55;FQ=-282 PL 0
+MT 450 . T . 283 . DP=758;VDB=0.0242;AF1=0;AC1=0;DP4=446,248,1,1;MQ=56;FQ=-282;PV4=1,0.00099,0.031,0.3 PL 0
+MT 451 . A . 283 . DP=766;VDB=0.0166;AF1=0;AC1=0;DP4=458,292,0,0;MQ=56;FQ=-282 PL 0
+MT 452 . T . 283 . DP=761;AF1=0;AC1=0;DP4=467,250,0,1;MQ=56;FQ=-282;PV4=0.35,6.8e-05,0.02,0.13 PL 0
+MT 453 . T . 283 . DP=768;VDB=0.0195;AF1=0;AC1=0;DP4=447,255,0,1;MQ=56;FQ=-282;PV4=0.36,7e-06,1,0.074 PL 0
+MT 454 . T . 283 . DP=757;VDB=0.0227;AF1=0;AC1=0;DP4=440,257,0,1;MQ=56;FQ=-282;PV4=0.37,2.3e-05,1,1 PL 0
+MT 455 . T . 283 . DP=759;VDB=0.0057;AF1=0;AC1=0;DP4=436,201,0,3;MQ=56;FQ=-282;PV4=0.032,3.9e-07,0.22,0.48 PL 0
+MT 456 . C . 283 . DP=765;VDB=0.0018;AF1=0;AC1=0;DP4=435,252,4,0;MQ=56;FQ=-282;PV4=0.3,1.5e-10,0.0092,0.05 PL 0
+MT 457 . C . 283 . DP=765;VDB=0.0089;AF1=0;AC1=0;DP4=437,252,2,0;MQ=56;FQ=-282;PV4=0.54,8.3e-10,1,0.0021 PL 0
+MT 458 . C . 283 . DP=765;VDB=0.0435;AF1=0;AC1=0;DP4=437,251,2,0;MQ=56;FQ=-282;PV4=0.54,6.9e-06,1,1 PL 0
+MT 459 . C . 283 . DP=761;VDB=0.0062;AF1=0;AC1=0;DP4=444,290,1,0;MQ=56;FQ=-282;PV4=1,0.00014,0.00041,0.49 PL 0
+MT 460 . T . 283 . DP=759;VDB=0.0002;AF1=0;AC1=0;DP4=465,242,0,0;MQ=57;FQ=-282 PL 0
+MT 461 . C . 283 . DP=761;VDB=0.0069;AF1=0;AC1=0;DP4=452,250,0,0;MQ=57;FQ=-282 PL 0
+MT 462 . C . 283 . DP=763;AF1=0;AC1=0;DP4=441,252,0,0;MQ=57;FQ=-282 PL 0
+MT 463 . C . 283 . DP=762;VDB=0.0363;AF1=0;AC1=0;DP4=437,283,3,0;MQ=57;FQ=-282;PV4=0.28,6.3e-06,0.16,0.39 PL 0
+MT 464 . A . 283 . DP=763;VDB=0.0367;AF1=0;AC1=0;DP4=444,262,0,1;MQ=57;FQ=-282;PV4=0.37,0.08,1,1 PL 0
+MT 465 . C . 283 . DP=762;VDB=0.0215;AF1=0;AC1=0;DP4=453,290,0,0;MQ=57;FQ=-282 PL 0
+MT 466 . T . 283 . DP=758;VDB=0.0115;AF1=0;AC1=0;DP4=465,244,0,0;MQ=57;FQ=-282 PL 0
+MT 467 . C . 283 . DP=757;VDB=0.0343;AF1=0;AC1=0;DP4=460,246,0,1;MQ=57;FQ=-282;PV4=0.35,2.1e-06,1,1 PL 0
+MT 468 . C . 283 . DP=754;VDB=0.0175;AF1=0;AC1=0;DP4=440,251,0,0;MQ=58;FQ=-282 PL 0
+MT 469 . C . 283 . DP=755;VDB=0.0096;AF1=0;AC1=0;DP4=445,293,1,0;MQ=57;FQ=-282;PV4=1,0.00029,0.0029,0.27 PL 0
+MT 470 . A . 283 . DP=762;VDB=0.0200;AF1=0;AC1=0;DP4=446,296,0,0;MQ=57;FQ=-282 PL 0
+MT 471 . T . 283 . DP=759;VDB=0.0232;AF1=0;AC1=0;DP4=463,256,0,1;MQ=58;FQ=-282;PV4=0.36,0.001,0.0016,1 PL 0
+MT 472 . A . 283 . DP=757;VDB=0.0447;AF1=0;AC1=0;DP4=448,287,1,0;MQ=58;FQ=-282;PV4=1,0.0027,0.002,0.16 PL 0
+MT 473 . C . 283 . DP=757;VDB=0.0193;AF1=0;AC1=0;DP4=451,293,1,1;MQ=58;FQ=-282;PV4=1,2.3e-07,0.033,1 PL 0
+MT 474 . T . 283 . DP=763;VDB=0.0134;AF1=0;AC1=0;DP4=468,251,0,0;MQ=58;FQ=-282 PL 0
+MT 475 . A . 283 . DP=768;VDB=0.0268;AF1=0;AC1=0;DP4=460,285,0,1;MQ=58;FQ=-282;PV4=0.38,0.0041,0.0013,1 PL 0
+MT 476 . C . 283 . DP=768;VDB=0.0200;AF1=0;AC1=0;DP4=462,292,0,2;MQ=58;FQ=-282;PV4=0.15,1.3e-06,1.1e-05,1 PL 0
+MT 477 . T . 283 . DP=772;VDB=0.0242;AF1=0;AC1=0;DP4=474,257,0,1;MQ=58;FQ=-282;PV4=0.35,0.00014,1,0.11 PL 0
+MT 478 . A . 283 . DP=772;VDB=0.0054;AF1=0;AC1=0;DP4=462,253,2,0;MQ=58;FQ=-282;PV4=0.54,8.5e-10,0.015,0.19 PL 0
+MT 479 . A . 283 . DP=773;VDB=0.0281;AF1=0;AC1=0;DP4=458,298,1,1;MQ=58;FQ=-282;PV4=1,0.0012,1,0.038 PL 0
+MT 480 . T . 283 . DP=783;VDB=0.0025;AF1=0;AC1=0;DP4=471,231,0,0;MQ=58;FQ=-282 PL 0
+MT 481 . C . 283 . DP=784;VDB=0.0217;AF1=0;AC1=0;DP4=458,309,1,0;MQ=58;FQ=-282;PV4=1,0.048,1,0.13 PL 0
+MT 482 . T . 283 . DP=783;VDB=0.0335;AF1=0;AC1=0;DP4=460,259,2,2;MQ=58;FQ=-282;PV4=0.62,0.0001,1,1 PL 0
+MT 483 . C . 283 . DP=791;VDB=0.0077;AF1=0;AC1=0;DP4=460,322,0,0;MQ=58;FQ=-282 PL 0
+MT 484 . A . 283 . DP=792;VDB=0.0225;AF1=0;AC1=0;DP4=457,324,0,0;MQ=58;FQ=-282 PL 0
+MT 485 . T . 283 . DP=799;VDB=0.0169;AF1=0;AC1=0;DP4=467,258,0,1;MQ=58;FQ=-282;PV4=0.36,0.064,1,1 PL 0
+MT 486 . C . 283 . DP=799;AF1=0;AC1=0;DP4=456,333,0,0;MQ=58;FQ=-282 PL 0
+MT 487 . A . 283 . DP=803;AF1=0;AC1=0;DP4=458,267,0,0;MQ=58;FQ=-282 PL 0
+MT 488 . A . 283 . DP=798;VDB=0.0207;AF1=0;AC1=0;DP4=447,334,1,0;MQ=58;FQ=-282;PV4=1,0.064,0.00075,1 PL 0
+MT 489 . T . 283 . DP=803;VDB=0.0044;AF1=0;AC1=0;DP4=468,264,0,3;MQ=58;FQ=-282;PV4=0.048,4.9e-06,0.042,0.021 PL 0
+MT 490 . A . 283 . DP=797;VDB=0.0044;AF1=0;AC1=0;DP4=451,317,1,0;MQ=58;FQ=-282;PV4=1,0.007,0.00036,0.4 PL 0
+MT 491 . C . 283 . DP=791;AF1=0;AC1=0;DP4=448,324,0,0;MQ=58;FQ=-282 PL 0
+MT 492 . A . 283 . DP=797;VDB=0.0156;AF1=0;AC1=0;DP4=456,298,0,1;MQ=58;FQ=-282;PV4=0.4,0.00027,0.0004,1 PL 0
+MT 493 . A . 283 . DP=798;VDB=0.0115;AF1=0;AC1=0;DP4=457,282,0,3;MQ=58;FQ=-282;PV4=0.056,0.00012,0.064,0.3 PL 0
+MT 494 . C . 283 . DP=804;VDB=0.0156;AF1=0;AC1=0;DP4=444,277,0,0;MQ=58;FQ=-282 PL 0
+MT 495 . C . 283 . DP=814;VDB=0.0174;AF1=0;AC1=0;DP4=460,288,1,0;MQ=58;FQ=-282;PV4=1,2e-05,1,0.27 PL 0
+MT 496 . C . 283 . DP=821;VDB=0.0372;AF1=0;AC1=0;DP4=448,292,2,0;MQ=58;FQ=-282;PV4=0.52,2e-06,1,0.11 PL 0
+MT 497 . C . 283 . DP=825;VDB=0.0207;AF1=0;AC1=0;DP4=457,296,2,0;MQ=58;FQ=-282;PV4=0.52,0.048,1,1 PL 0
+MT 498 . C . 283 . DP=828;VDB=0.0253;AF1=0;AC1=0;DP4=460,304,0,0;MQ=58;FQ=-282 PL 0
+MT 499 . G . 283 . DP=831;VDB=0.0394;AF1=0;AC1=0;DP4=469,285,1,0;MQ=58;FQ=-282;PV4=1,0.0037,1,0.015 PL 0
+MT 500 . C . 283 . DP=843;VDB=0.0190;AF1=0;AC1=0;DP4=477,292,0,0;MQ=58;FQ=-282 PL 0
+MT 501 . C . 283 . DP=846;AF1=0;AC1=0;DP4=477,302,0,0;MQ=58;FQ=-282 PL 0
+MT 502 . C . 283 . DP=843;VDB=0.0198;AF1=0;AC1=0;DP4=475,338,0,0;MQ=58;FQ=-282 PL 0
+MT 503 . A . 283 . DP=843;VDB=0.0076;AF1=0;AC1=0;DP4=486,336,0,0;MQ=58;FQ=-282 PL 0
+MT 504 . T . 283 . DP=844;VDB=0.0115;AF1=0;AC1=0;DP4=501,279,1,3;MQ=58;FQ=-282;PV4=0.14,4.7e-06,3.5e-06,1 PL 0
+MT 505 . C . 283 . DP=836;VDB=0.0119;AF1=0;AC1=0;DP4=481,308,0,0;MQ=58;FQ=-282 PL 0
+MT 506 . C . 283 . DP=835;VDB=0.0089;AF1=0;AC1=0;DP4=479,332,1,0;MQ=58;FQ=-282;PV4=1,1.5e-05,1,0.021 PL 0
+MT 507 . T . 283 . DP=841;VDB=0.0324;AF1=0;AC1=0;DP4=498,307,1,3;MQ=58;FQ=-282;PV4=0.16,1.7e-08,0.16,0.086 PL 0
+MT 508 . A . 283 . DP=847;VDB=0.0440;AF1=0;AC1=0;DP4=483,322,2,1;MQ=58;FQ=-282;PV4=1,8.7e-05,0.082,1 PL 0
+MT 509 . C . 283 . DP=854;VDB=0.0394;AF1=0;AC1=0;DP4=471,319,4,0;MQ=58;FQ=-282;PV4=0.15,1.2e-09,0.0011,0.28 PL 0
+MT 510 . C . 283 . DP=853;VDB=0.0180;AF1=0;AC1=0;DP4=463,322,1,0;MQ=58;FQ=-282;PV4=1,1.4e-06,1,0.045 PL 0
+MT 511 . C . 283 . DP=855;VDB=0.0146;AF1=0;AC1=0;DP4=470,358,1,0;MQ=58;FQ=-282;PV4=1,2.7e-05,0.0014,0.053 PL 0
+MT 512 . A . 283 . DP=857;VDB=0.0166;AF1=0;AC1=0;DP4=488,355,0,1;MQ=58;FQ=-282;PV4=0.42,0.00018,0.0016,1 PL 0
+MT 513 . G . 283 . DP=857;VDB=0.0417;AF1=0;AC1=0;DP4=496,312,3,0;MQ=58;FQ=-282;PV4=0.29,2.2e-11,0.00027,1 PL 0
+MT 514 . C . 283 . DP=851;AF1=0;AC1=0;DP4=471,346,1,0;MQ=58;FQ=-282;PV4=1,0.18,0.011,1 PL 0
+MT 515 . A . 283 . DP=843;VDB=0.0445;AF1=0;AC1=0;DP4=479,344,1,0;MQ=58;FQ=-282;PV4=1,0.0019,1,0.017 PL 0
+MT 516 . C . 283 . DP=839;AF1=0;AC1=0;DP4=472,342,0,0;MQ=58;FQ=-282 PL 0
+MT 517 . A . 283 . DP=850;VDB=0.0367;AF1=0;AC1=0;DP4=475,350,0,0;MQ=58;FQ=-282 PL 0
+MT 518 . C . 283 . DP=841;VDB=0.0155;AF1=0;AC1=0;DP4=457,349,0,1;MQ=58;FQ=-282;PV4=0.43,0.00018,1,0.063 PL 0
+MT 519 . A . 283 . DP=839;VDB=0.0394;AF1=0;AC1=0;DP4=470,343,0,0;MQ=58;FQ=-282 PL 0
+MT 520 . C . 283 . DP=833;VDB=0.0145;AF1=0;AC1=0;DP4=457,341,2,0;MQ=58;FQ=-282;PV4=0.51,1e-06,0.02,0.46 PL 0
+MT 521 . A . 283 . DP=831;VDB=0.0394;AF1=0;AC1=0;DP4=463,335,1,1;MQ=58;FQ=-282;PV4=1,0.0021,1,0.0088 PL 0
+MT 522 . C . 283 . DP=835;VDB=0.0118;AF1=0;AC1=0;DP4=462,345,0,0;MQ=58;FQ=-282 PL 0
+MT 523 . A . 283 . DP=833;VDB=0.0335;AF1=0;AC1=0;DP4=463,329,0,4;MQ=58;FQ=-282;PV4=0.03,5.1e-08,0.11,0.026 PL 0
+MT 524 . C . 283 . DP=828;AF1=0;AC1=0;DP4=454,324,0,0;MQ=58;FQ=-282 PL 0
+MT 525 . C . 283 . DP=828;VDB=0.0101;AF1=0;AC1=0;DP4=448,333,0,0;MQ=58;FQ=-282 PL 0
+MT 526 . G . 283 . DP=829;VDB=0.0206;AF1=0;AC1=0;DP4=449,327,0,0;MQ=58;FQ=-282 PL 0
+MT 527 . C . 283 . DP=832;VDB=0.0074;AF1=0;AC1=0;DP4=458,353,2,0;MQ=58;FQ=-282;PV4=0.51,4.6e-09,0.089,0.31 PL 0
+MT 528 . T . 283 . DP=828;VDB=0.0417;AF1=0;AC1=0;DP4=470,345,0,1;MQ=58;FQ=-282;PV4=0.42,0.017,1,1 PL 0
+MT 529 . G . 283 . DP=819;VDB=0.0074;AF1=0;AC1=0;DP4=465,322,0,1;MQ=58;FQ=-282;PV4=0.41,9.5e-07,0.00067,1 PL 0
+MT 530 . C . 283 . DP=822;VDB=0.0074;AF1=0;AC1=0;DP4=451,348,0,0;MQ=58;FQ=-282 PL 0
+MT 531 . T . 283 . DP=828;VDB=0.0093;AF1=0;AC1=0;DP4=471,331,1,2;MQ=58;FQ=-282;PV4=0.57,2e-10,0.065,1 PL 0
+MT 532 . A . 283 . DP=830;VDB=0.0200;AF1=0;AC1=0;DP4=433,335,2,0;MQ=58;FQ=-282;PV4=0.51,5e-06,1,0.15 PL 0
+MT 533 . A . 283 . DP=825;VDB=0.0374;AF1=0;AC1=0;DP4=431,343,2,0;MQ=58;FQ=-282;PV4=0.51,5.8e-06,0.017,1 PL 0
+MT 534 . C . 283 . DP=828;AF1=0;AC1=0;DP4=452,322,0,0;MQ=58;FQ=-282 PL 0
+MT 535 . C . 283 . DP=827;VDB=0.0253;AF1=0;AC1=0;DP4=441,333,1,0;MQ=58;FQ=-282;PV4=1,0.00017,1.1e-06,1 PL 0
+MT 536 . C . 283 . DP=830;VDB=0.0040;AF1=0;AC1=0;DP4=446,328,0,0;MQ=58;FQ=-282 PL 0
+MT 537 . C . 283 . DP=830;VDB=0.0212;AF1=0;AC1=0;DP4=436,361,0,0;MQ=58;FQ=-282 PL 0
+MT 538 . A . 283 . DP=830;VDB=0.0245;AF1=0;AC1=0;DP4=461,358,0,0;MQ=58;FQ=-282 PL 0
+MT 539 . T . 283 . DP=832;VDB=0.0445;AF1=0;AC1=0;DP4=474,330,1,2;MQ=58;FQ=-282;PV4=0.57,8.2e-07,1.5e-05,1 PL 0
+MT 540 . A . 283 . DP=834;VDB=0.0445;AF1=0;AC1=0;DP4=456,327,3,0;MQ=58;FQ=-282;PV4=0.27,2.4e-05,1,0.078 PL 0
+MT 541 . C . 283 . DP=828;VDB=0.0435;AF1=0;AC1=0;DP4=442,326,2,0;MQ=58;FQ=-282;PV4=0.51,0.00044,0.01,0.18 PL 0
+MT 542 . C . 283 . DP=832;VDB=0.0447;AF1=0;AC1=0;DP4=437,327,4,1;MQ=58;FQ=-282;PV4=0.4,1.7e-12,8e-07,1 PL 0
+MT 543 . C . 283 . DP=829;VDB=0.0429;AF1=0;AC1=0;DP4=448,323,3,0;MQ=58;FQ=-282;PV4=0.27,5.3e-09,1,0.3 PL 0
+MT 544 . C . 283 . DP=833;VDB=0.0153;AF1=0;AC1=0;DP4=459,326,1,0;MQ=58;FQ=-282;PV4=1,0.27,4e-07,1 PL 0
+MT 545 . G . 283 . DP=831;VDB=0.0373;AF1=0;AC1=0;DP4=453,338,0,0;MQ=58;FQ=-282 PL 0
+MT 546 . A . 283 . DP=831;VDB=0.0354;AF1=0;AC1=0;DP4=460,323,0,0;MQ=58;FQ=-282 PL 0
+MT 547 . A . 283 . DP=826;VDB=0.0268;AF1=0;AC1=0;DP4=461,331,0,1;MQ=58;FQ=-282;PV4=0.42,2.8e-05,0.00042,0.027 PL 0
+MT 548 . C . 283 . DP=827;AF1=0;AC1=0;DP4=460,317,0,0;MQ=59;FQ=-282 PL 0
+MT 549 . C . 283 . DP=839;VDB=0.0051;AF1=0;AC1=0;DP4=461,350,3,0;MQ=58;FQ=-282;PV4=0.26,2e-08,1,0.01 PL 0
+MT 550 . A . 283 . DP=840;VDB=0.0417;AF1=0;AC1=0;DP4=469,331,0,0;MQ=58;FQ=-282 PL 0
+MT 551 . A . 283 . DP=837;VDB=0.0367;AF1=0;AC1=0;DP4=468,342,1,0;MQ=58;FQ=-282;PV4=1,0.017,1,1 PL 0
+MT 552 . C . 283 . DP=834;VDB=0.0183;AF1=0;AC1=0;DP4=457,322,2,0;MQ=59;FQ=-282;PV4=0.51,3.6e-05,1,0.34 PL 0
+MT 553 . C . 283 . DP=838;VDB=0.0367;AF1=0;AC1=0;DP4=459,345,4,0;MQ=58;FQ=-282;PV4=0.14,2.1e-13,0.00082,1 PL 0
+MT 554 . A . 283 . DP=842;VDB=0.0123;AF1=0;AC1=0;DP4=482,321,1,0;MQ=58;FQ=-282;PV4=1,0.00051,0.17,0.24 PL 0
+MT 555 . A . 283 . DP=842;VDB=0.0165;AF1=0;AC1=0;DP4=478,326,0,1;MQ=58;FQ=-282;PV4=0.41,3.8e-08,0.00018,1 PL 0
+MT 556 . A . 283 . DP=843;VDB=0.0429;AF1=0;AC1=0;DP4=473,331,0,2;MQ=58;FQ=-282;PV4=0.17,5.5e-08,1,0.31 PL 0
+MT 557 . C . 283 . DP=843;VDB=0.0435;AF1=0;AC1=0;DP4=463,321,1,0;MQ=59;FQ=-282;PV4=1,3.7e-05,1,1 PL 0
+MT 558 . C . 283 . DP=839;VDB=0.0447;AF1=0;AC1=0;DP4=462,321,2,1;MQ=59;FQ=-282;PV4=1,1.4e-12,5.7e-15,1 PL 0
+MT 559 . C . 283 . DP=827;VDB=0.0073;AF1=0;AC1=0;DP4=454,315,4,0;MQ=59;FQ=-282;PV4=0.15,6.5e-16,0.007,0.31 PL 0
+MT 560 . C . 283 . DP=816;AF1=0;AC1=0;DP4=450,334,1,0;MQ=58;FQ=-282;PV4=1,1.9e-05,9.4e-08,1 PL 0
+MT 561 . A . 283 . DP=821;VDB=0.0074;AF1=0;AC1=0;DP4=470,317,0,1;MQ=58;FQ=-282;PV4=0.4,0.049,1,1 PL 0
+MT 562 . A . 283 . DP=827;VDB=0.0002;AF1=0;AC1=0;DP4=457,322,0,0;MQ=59;FQ=-282 PL 0
+MT 563 . A . 283 . DP=834;AF1=0;AC1=0;DP4=457,340,0,0;MQ=59;FQ=-282 PL 0
+MT 564 . G . 283 . DP=828;VDB=0.0025;AF1=0;AC1=0;DP4=478,331,1,0;MQ=58;FQ=-282;PV4=1,0.011,1,1 PL 0
+MT 565 . A . 283 . DP=824;VDB=0.0429;AF1=0;AC1=0;DP4=452,331,2,0;MQ=59;FQ=-282;PV4=0.51,0.00016,0.0075,0.14 PL 0
+MT 566 . C . 283 . DP=827;VDB=0.0123;AF1=0;AC1=0;DP4=451,332,1,0;MQ=59;FQ=-282;PV4=1,0.00033,2.7e-05,1 PL 0
+MT 567 . A . 283 . DP=827;VDB=0.0367;AF1=0;AC1=0;DP4=472,315,0,1;MQ=59;FQ=-282;PV4=0.4,0.29,1,1 PL 0
+MT 568 . C . 283 . DP=827;VDB=0.0116;AF1=0;AC1=0;DP4=449,310,0,0;MQ=59;FQ=-282 PL 0
+MT 569 . C . 283 . DP=826;VDB=0.0141;AF1=0;AC1=0;DP4=444,307,6,0;MQ=59;FQ=-282;PV4=0.086,3.2e-15,2.2e-08,1 PL 0
+MT 570 . C . 283 . DP=819;VDB=0.0241;AF1=0;AC1=0;DP4=436,301,2,0;MQ=59;FQ=-282;PV4=0.52,0.0003,1,1 PL 0
+MT 571 . C . 283 . DP=822;VDB=0.0025;AF1=0;AC1=0;DP4=459,302,0,0;MQ=59;FQ=-282 PL 0
+MT 572 . C . 283 . DP=822;AF1=0;AC1=0;DP4=459,305,0,0;MQ=59;FQ=-282 PL 0
+MT 573 . C . 283 . DP=823;VDB=0.0133;AF1=0;AC1=0;DP4=466,317,0,0;MQ=59;FQ=-282 PL 0
+MT 574 . A . 283 . DP=826;VDB=0.0440;AF1=0;AC1=0;DP4=488,315,1,2;MQ=59;FQ=-282;PV4=0.56,4.9e-06,0.019,1 PL 0
+MT 575 . C . 283 . DP=827;VDB=0.0128;AF1=0;AC1=0;DP4=479,314,0,0;MQ=59;FQ=-282 PL 0
+MT 576 . A . 283 . DP=831;VDB=0.0169;AF1=0;AC1=0;DP4=495,313,1,0;MQ=59;FQ=-282;PV4=1,0.0028,1.6e-05,0.36 PL 0
+MT 577 . G . 283 . DP=830;VDB=0.0195;AF1=0;AC1=0;DP4=516,300,0,0;MQ=59;FQ=-282 PL 0
+MT 578 . T . 283 . DP=837;VDB=0.0302;AF1=0;AC1=0;DP4=519,299,0,0;MQ=59;FQ=-282 PL 0
+MT 579 . T . 283 . DP=833;AF1=0;AC1=0;DP4=495,295,0,0;MQ=59;FQ=-282 PL 0
+MT 580 . T . 283 . DP=839;VDB=0.0042;AF1=0;AC1=0;DP4=497,302,1,1;MQ=59;FQ=-282;PV4=1,4.3e-06,0.00033,0.061 PL 0
+MT 581 . A . 283 . DP=848;VDB=0.0088;AF1=0;AC1=0;DP4=509,313,1,0;MQ=59;FQ=-282;PV4=1,8e-05,1,0.29 PL 0
+MT 582 . T . 283 . DP=848;VDB=0.0184;AF1=0;AC1=0;DP4=531,308,1,0;MQ=59;FQ=-282;PV4=1,8e-07,1,0.33 PL 0
+MT 583 . G . 283 . DP=842;AF1=0;AC1=0;DP4=524,304,1,0;MQ=59;FQ=-282;PV4=1,2.5e-07,2.9e-06,0.24 PL 0
+MT 584 . T . 283 . DP=848;AF1=0;AC1=0;DP4=530,310,0,0;MQ=59;FQ=-282 PL 0
+MT 585 . A . 283 . DP=844;VDB=0.0210;AF1=0;AC1=0;DP4=499,317,0,0;MQ=59;FQ=-282 PL 0
+MT 586 . G . 283 . DP=835;VDB=0.0440;AF1=0;AC1=0;DP4=516,304,0,1;MQ=59;FQ=-282;PV4=0.37,4.9e-06,1,0.035 PL 0
+MT 587 . C . 283 . DP=847;AF1=0;AC1=0;DP4=503,324,0,0;MQ=59;FQ=-282 PL 0
+MT 588 . T . 283 . DP=847;VDB=0.0051;AF1=0;AC1=0;DP4=521,309,0,1;MQ=59;FQ=-282;PV4=0.37,2.3e-05,2.5e-12,1 PL 0
+MT 589 . T . 283 . DP=846;VDB=0.0227;AF1=0;AC1=0;DP4=502,310,0,2;MQ=59;FQ=-282;PV4=0.15,2.1e-14,0.0001,0.29 PL 0
+MT 590 . A . 283 . DP=843;VDB=0.0200;AF1=0;AC1=0;DP4=504,320,0,0;MQ=59;FQ=-282 PL 0
+MT 591 . C . 283 . DP=847;VDB=0.0263;AF1=0;AC1=0;DP4=497,316,2,0;MQ=59;FQ=-282;PV4=0.52,1.3e-11,0.00017,0.43 PL 0
+MT 592 . C . 283 . DP=853;VDB=0.0169;AF1=0;AC1=0;DP4=492,335,3,1;MQ=59;FQ=-282;PV4=0.65,1.8e-12,1.2e-33,1 PL 0
+MT 593 . T . 283 . DP=853;VDB=0.0073;AF1=0;AC1=0;DP4=511,317,3,0;MQ=59;FQ=-282;PV4=0.29,6e-10,0.005,0.47 PL 0
+MT 594 . C . 283 . DP=853;VDB=0.0121;AF1=0;AC1=0;DP4=507,323,1,0;MQ=59;FQ=-282;PV4=1,0.0017,1,1 PL 0
+MT 595 . C . 283 . DP=855;VDB=0.0215;AF1=0;AC1=0;DP4=495,333,1,1;MQ=59;FQ=-282;PV4=1,6.9e-14,0.00031,0.29 PL 0
+MT 596 . T . 283 . DP=859;VDB=0.0032;AF1=0;AC1=0;DP4=513,329,0,0;MQ=59;FQ=-282 PL 0
+MT 597 . C . 283 . DP=861;VDB=0.0195;AF1=0;AC1=0;DP4=509,338,0,0;MQ=59;FQ=-282 PL 0
+MT 598 . A . 283 . DP=853;AF1=0;AC1=0;DP4=513,318,0,0;MQ=59;FQ=-282 PL 0
+MT 599 . A . 283 . DP=845;VDB=0.0000;AF1=0;AC1=0;DP4=507,310,1,0;MQ=59;FQ=-282;PV4=1,1.7e-06,1,0.021 PL 0
+MT 600 . A . 283 . DP=847;VDB=0.0101;AF1=0;AC1=0;DP4=509,316,1,0;MQ=59;FQ=-282;PV4=1,0.023,1,0.036 PL 0
+MT 601 . G . 283 . DP=846;VDB=0.0242;AF1=0;AC1=0;DP4=525,302,0,1;MQ=59;FQ=-282;PV4=0.37,1.6e-07,1.1e-06,1 PL 0
+MT 602 . C . 283 . DP=847;VDB=0.0013;AF1=0;AC1=0;DP4=508,317,3,0;MQ=59;FQ=-282;PV4=0.29,7.8e-13,0.0041,0.07 PL 0
+MT 603 . A . 283 . DP=861;VDB=0.0215;AF1=0;AC1=0;DP4=534,303,2,0;MQ=59;FQ=-282;PV4=0.54,7.4e-14,0.00014,0.5 PL 0
+MT 604 . A . 283 . DP=866;VDB=0.0205;AF1=0;AC1=0;DP4=528,319,1,0;MQ=59;FQ=-282;PV4=1,7.1e-07,1,0.036 PL 0
+MT 605 . T . 283 . DP=873;VDB=0.0099;AF1=0;AC1=0;DP4=547,316,0,0;MQ=59;FQ=-282 PL 0
+MT 606 . A . 283 . DP=884;VDB=0.0356;AF1=0;AC1=0;DP4=540,326,1,0;MQ=59;FQ=-282;PV4=1,0.18,1,1 PL 0
+MT 607 . C . 283 . DP=880;VDB=0.0086;AF1=0;AC1=0;DP4=540,323,0,0;MQ=59;FQ=-282 PL 0
+MT 608 . A . 283 . DP=883;VDB=0.0374;AF1=0;AC1=0;DP4=542,324,1,0;MQ=59;FQ=-282;PV4=1,3.8e-06,1,1 PL 0
+MT 609 . C . 283 . DP=890;VDB=0.0163;AF1=0;AC1=0;DP4=548,326,0,0;MQ=59;FQ=-282 PL 0
+MT 610 . T . 283 . DP=900;VDB=0.0242;AF1=0;AC1=0;DP4=572,322,0,0;MQ=59;FQ=-282 PL 0
+MT 611 . G . 283 . DP=905;VDB=0.0394;AF1=0;AC1=0;DP4=577,314,0,1;MQ=59;FQ=-282;PV4=0.35,0.04,1,1 PL 0
+MT 612 . A . 283 . DP=904;AF1=0;AC1=0;DP4=568,314,1,0;MQ=59;FQ=-282;PV4=1,0.0049,1,0.18 PL 0
+MT 613 . A . 283 . DP=913;VDB=0.0064;AF1=0;AC1=0;DP4=571,316,1,0;MQ=59;FQ=-282;PV4=1,0.00039,1,0.49 PL 0
+MT 614 . A . 283 . DP=918;VDB=0.0180;AF1=0;AC1=0;DP4=571,314,1,0;MQ=59;FQ=-282;PV4=1,0.0029,1,1 PL 0
+MT 615 . A . 283 . DP=924;VDB=0.0144;AF1=0;AC1=0;DP4=570,328,0,0;MQ=59;FQ=-282 PL 0
+MT 616 . T . 283 . DP=926;VDB=0.0324;AF1=0;AC1=0;DP4=593,318,0,0;MQ=58;FQ=-282 PL 0
+MT 617 . G . 283 . DP=926;AF1=0;AC1=0;DP4=592,325,0,0;MQ=58;FQ=-282 PL 0
+MT 618 . T . 283 . DP=932;VDB=0.0440;AF1=0;AC1=0;DP4=591,320,0,0;MQ=58;FQ=-282 PL 0
+MT 619 . T . 283 . DP=936;VDB=0.0207;AF1=0;AC1=0;DP4=586,317,0,2;MQ=58;FQ=-282;PV4=0.12,9.1e-09,0.06,1 PL 0
+MT 620 . T . 283 . DP=933;VDB=0.0245;AF1=0;AC1=0;DP4=581,315,1,0;MQ=58;FQ=-282;PV4=1,1.4e-06,1,0.057 PL 0
+MT 621 . A . 283 . DP=930;AF1=0;AC1=0;DP4=585,327,0,0;MQ=57;FQ=-282 PL 0
+MT 622 . G . 283 . DP=925;AF1=0;AC1=0;DP4=600,317,0,0;MQ=57;FQ=-282 PL 0
+MT 623 . A . 283 . DP=925;VDB=0.0414;AF1=0;AC1=0;DP4=584,317,1,1;MQ=57;FQ=-282;PV4=1,6.9e-13,0.017,0.03 PL 0
+MT 624 . C . 283 . DP=928;VDB=0.0116;AF1=0;AC1=0;DP4=584,303,0,0;MQ=57;FQ=-282 PL 0
+MT 625 . G . 283 . DP=930;VDB=0.0143;AF1=0;AC1=0;DP4=593,301,2,0;MQ=57;FQ=-282;PV4=0.55,0.0069,1,0.24 PL 0
+MT 626 . G . 283 . DP=920;VDB=0.0435;AF1=0;AC1=0;DP4=583,289,1,2;MQ=57;FQ=-282;PV4=0.26,3e-08,0.011,0.15 PL 0
+MT 627 . G . 283 . DP=922;VDB=0.0429;AF1=0;AC1=0;DP4=583,290,0,1;MQ=57;FQ=-282;PV4=0.33,1.1e-06,1,1 PL 0
+MT 628 . C . 283 . DP=921;VDB=0.0111;AF1=0;AC1=0;DP4=584,303,0,0;MQ=56;FQ=-282 PL 0
+MT 629 . T . 283 . DP=926;VDB=0.0090;AF1=0;AC1=0;DP4=613,293,2,0;MQ=56;FQ=-282;PV4=1,6.5e-08,1,0.1 PL 0
+MT 630 . C . 283 . DP=927;VDB=0.0363;AF1=0;AC1=0;DP4=604,308,0,0;MQ=56;FQ=-282 PL 0
+MT 631 . A . 283 . DP=925;VDB=0.0343;AF1=0;AC1=0;DP4=609,306,0,0;MQ=56;FQ=-282 PL 0
+MT 632 . C . 283 . DP=923;VDB=0.0335;AF1=0;AC1=0;DP4=595,309,3,0;MQ=56;FQ=-282;PV4=0.55,5.8e-20,0.15,1 PL 0
+MT 633 . A . 283 . DP=926;AF1=0;AC1=0;DP4=606,312,0,0;MQ=55;FQ=-282 PL 0
+MT 634 . T . 283 . DP=926;VDB=0.0125;AF1=0;AC1=0;DP4=614,282,0,1;MQ=55;FQ=-282;PV4=0.32,0.0078,1,1 PL 0
+MT 635 . C . 283 . DP=925;VDB=0.0447;AF1=0;AC1=0;DP4=597,304,6,0;MQ=55;FQ=-282;PV4=0.19,2.3e-19,0.00018,0.23 PL 0
+MT 636 . A . 283 . DP=926;VDB=0.0435;AF1=0;AC1=0;DP4=607,302,1,0;MQ=55;FQ=-282;PV4=1,0.0009,0.048,1 PL 0
+MT 637 . C . 283 . DP=933;VDB=0.0207;AF1=0;AC1=0;DP4=589,289,1,0;MQ=55;FQ=-282;PV4=1,0.0029,1,1 PL 0
+MT 638 . C . 283 . DP=935;AF1=0;AC1=0;DP4=597,290,0,0;MQ=54;FQ=-282 PL 0
+MT 639 . C . 283 . DP=928;AF1=0;AC1=0;DP4=594,289,0,0;MQ=54;FQ=-282 PL 0
+MT 640 . C . 283 . DP=932;VDB=0.0077;AF1=0;AC1=0;DP4=591,309,0,0;MQ=54;FQ=-282 PL 0
+MT 641 . A . 283 . DP=935;AF1=0;AC1=0;DP4=603,314,0,0;MQ=54;FQ=-282 PL 0
+MT 642 . T . 283 . DP=935;VDB=0.0268;AF1=0;AC1=0;DP4=620,289,0,3;MQ=53;FQ=-282;PV4=0.033,4.4e-10,0.44,1 PL 0
+MT 643 . A . 283 . DP=931;VDB=0.0173;AF1=0;AC1=0;DP4=599,299,2,0;MQ=53;FQ=-282;PV4=1,1.1e-09,0.29,0.0039 PL 0
+MT 644 . A . 283 . DP=927;VDB=0.0192;AF1=0;AC1=0;DP4=593,298,0,0;MQ=53;FQ=-282 PL 0
+MT 645 . A . 283 . DP=928;VDB=0.0335;AF1=0;AC1=0;DP4=593,318,1,0;MQ=53;FQ=-282;PV4=1,1.5e-05,0.094,1 PL 0
+MT 646 . C . 283 . DP=927;VDB=0.0237;AF1=0;AC1=0;DP4=591,319,1,0;MQ=53;FQ=-282;PV4=1,2.1e-06,1,0.054 PL 0
+MT 647 . A . 283 . DP=932;AF1=0;AC1=0;DP4=602,303,0,1;MQ=52;FQ=-282;PV4=0.34,1.5e-08,0.02,0.02 PL 0
+MT 648 . A . 283 . DP=931;AF1=0;AC1=0;DP4=591,304,0,0;MQ=52;FQ=-282 PL 0
+MT 649 . A . 283 . DP=937;AF1=0;AC1=0;DP4=596,317,0,0;MQ=52;FQ=-282 PL 0
+MT 650 . T . 283 . DP=948;VDB=0.0299;AF1=0;AC1=0;DP4=625,303,0,0;MQ=52;FQ=-282 PL 0
+MT 651 . A . 283 . DP=940;VDB=0.0215;AF1=0;AC1=0;DP4=604,317,3,0;MQ=51;FQ=-282;PV4=0.56,4.4e-09,1,1 PL 0
+MT 652 . G . 283 . DP=931;AF1=0;AC1=0;DP4=610,301,0,0;MQ=51;FQ=-282 PL 0
+MT 653 . G . 283 . DP=929;VDB=0.0145;AF1=0;AC1=0;DP4=592,300,0,0;MQ=51;FQ=-282 PL 0
+MT 654 . T . 283 . DP=935;VDB=0.0445;AF1=0;AC1=0;DP4=609,309,1,0;MQ=51;FQ=-282;PV4=1,0.039,0.079,0.099 PL 0
+MT 655 . T . 283 . DP=940;VDB=0.0215;AF1=0;AC1=0;DP4=601,309,1,0;MQ=51;FQ=-282;PV4=1,0.00025,1,0.33 PL 0
+MT 656 . T . 283 . DP=938;VDB=0.0227;AF1=0;AC1=0;DP4=594,314,0,0;MQ=50;FQ=-282 PL 0
+MT 657 . G . 283 . DP=938;VDB=0.0414;AF1=0;AC1=0;DP4=613,300,0,5;MQ=50;FQ=-282;PV4=0.004,1.5e-13,0.083,0.12 PL 0
+MT 658 . G . 283 . DP=938;VDB=0.0414;AF1=0;AC1=0;DP4=592,300,1,2;MQ=50;FQ=-282;PV4=0.26,2.3e-11,1,1 PL 0
+MT 659 . T . 283 . DP=934;VDB=0.0445;AF1=0;AC1=0;DP4=608,290,1,4;MQ=50;FQ=-282;PV4=0.041,6.2e-12,1,0.46 PL 0
+MT 660 . C . 283 . DP=931;VDB=0.0302;AF1=0;AC1=0;DP4=594,302,2,1;MQ=50;FQ=-282;PV4=1,2.2e-19,0.056,0.13 PL 0
+MT 661 . C . 283 . DP=928;VDB=0.0156;AF1=0;AC1=0;DP4=586,312,0,0;MQ=49;FQ=-282 PL 0
+MT 662 . T . 283 . DP=925;VDB=0.0233;AF1=0;AC1=0;DP4=614,298,0,1;MQ=49;FQ=-282;PV4=0.33,7.3e-06,1,0.33 PL 0
+MT 663 . A . 283 . DP=922;VDB=0.0200;AF1=0;AC1=0;DP4=592,311,0,1;MQ=49;FQ=-282;PV4=0.35,1e-07,0.17,0.016 PL 0
+MT 664 . G . 283 . DP=915;VDB=0.0248;AF1=0;AC1=0;DP4=600,298,1,0;MQ=49;FQ=-282;PV4=1,0.054,0.0044,1 PL 0
+MT 665 . C . 283 . DP=911;VDB=0.0367;AF1=0;AC1=0;DP4=567,292,4,0;MQ=49;FQ=-282;PV4=0.31,8.9e-10,1,1 PL 0
+MT 666 . C . 283 . DP=906;VDB=0.0238;AF1=0;AC1=0;DP4=576,308,2,0;MQ=48;FQ=-282;PV4=0.55,5.6e-11,0.48,0.28 PL 0
+MT 667 . T . 283 . DP=908;AF1=0;AC1=0;DP4=595,299,0,0;MQ=48;FQ=-282 PL 0
+MT 668 . T . 283 . DP=906;AF1=0;AC1=0;DP4=582,298,0,0;MQ=48;FQ=-282 PL 0
+MT 669 . T . 283 . DP=905;VDB=0.0252;AF1=0;AC1=0;DP4=574,303,2,0;MQ=48;FQ=-282;PV4=0.55,2.6e-10,0.26,0.22 PL 0
+MT 670 . C . 283 . DP=901;AF1=0;AC1=0;DP4=582,310,0,0;MQ=47;FQ=-282 PL 0
+MT 671 . T . 283 . DP=900;AF1=0;AC1=0;DP4=590,304,0,0;MQ=47;FQ=-282 PL 0
+MT 672 . A . 283 . DP=899;AF1=0;AC1=0;DP4=573,307,0,0;MQ=47;FQ=-282 PL 0
+MT 673 . T . 283 . DP=902;VDB=0.0200;AF1=0;AC1=0;DP4=591,301,1,0;MQ=47;FQ=-282;PV4=1,8.7e-08,0.05,1 PL 0
+MT 674 . T . 283 . DP=898;AF1=0;AC1=0;DP4=576,300,1,0;MQ=47;FQ=-282;PV4=1,9.9e-12,1,0.03 PL 0
+MT 675 . A . 283 . DP=893;VDB=0.0100;AF1=0;AC1=0;DP4=576,301,2,0;MQ=46;FQ=-282;PV4=0.55,7.1e-10,0.36,1 PL 0
+MT 676 . G . 283 . DP=888;VDB=0.0135;AF1=0;AC1=0;DP4=586,290,2,0;MQ=46;FQ=-282;PV4=1,4.6e-14,1,0.34 PL 0
+MT 677 . C . 283 . DP=879;VDB=0.0202;AF1=0;AC1=0;DP4=562,290,2,0;MQ=46;FQ=-282;PV4=0.55,0.0012,1,0.11 PL 0
+MT 678 . T . 283 . DP=875;VDB=0.0367;AF1=0;AC1=0;DP4=585,279,0,0;MQ=46;FQ=-282 PL 0
+MT 679 . C . 283 . DP=872;VDB=0.0175;AF1=0;AC1=0;DP4=571,284,1,1;MQ=46;FQ=-282;PV4=0.55,9.3e-10,0.38,0.06 PL 0
+MT 680 . T . 283 . DP=874;AF1=0;AC1=0;DP4=583,283,0,0;MQ=45;FQ=-282 PL 0
+MT 681 . T . 283 . DP=870;AF1=0;AC1=0;DP4=569,275,0,0;MQ=45;FQ=-282 PL 0
+MT 682 . A . 283 . DP=860;VDB=0.0252;AF1=0;AC1=0;DP4=568,276,2,0;MQ=45;FQ=-282;PV4=1,1e-11,0.15,1 PL 0
+MT 683 . G . 283 . DP=858;AF1=0;AC1=0;DP4=584,270,0,0;MQ=45;FQ=-282 PL 0
+MT 684 . T . 283 . DP=855;AF1=0;AC1=0;DP4=584,262,0,0;MQ=45;FQ=-282 PL 0
+MT 685 . A . 283 . DP=853;AF1=0;AC1=0;DP4=571,262,1,0;MQ=44;FQ=-282;PV4=1,5.3e-08,1,0.23 PL 0
+MT 686 . A . 283 . DP=848;AF1=0;AC1=0;DP4=571,262,0,0;MQ=44;FQ=-282 PL 0
+MT 687 . G . 283 . DP=847;AF1=0;AC1=0;DP4=585,257,0,0;MQ=44;FQ=-282 PL 0
+MT 688 . A . 283 . DP=845;VDB=0.0253;AF1=0;AC1=0;DP4=569,262,1,0;MQ=43;FQ=-282;PV4=1,6.5e-07,0.15,1 PL 0
+MT 689 . T . 283 . DP=845;VDB=0.0250;AF1=0;AC1=0;DP4=580,257,0,0;MQ=43;FQ=-282 PL 0
+MT 690 . T . 283 . DP=852;AF1=0;AC1=0;DP4=569,264,0,1;MQ=43;FQ=-282;PV4=0.32,8.9e-09,0.26,1 PL 0
+MT 691 . A . 283 . DP=846;VDB=0.0078;AF1=0;AC1=0;DP4=568,263,1,0;MQ=43;FQ=-282;PV4=1,1.6e-05,0.085,0.031 PL 0
+MT 692 . C . 283 . DP=843;AF1=0;AC1=0;DP4=554,266,0,0;MQ=43;FQ=-282 PL 0
+MT 693 . A . 283 . DP=835;VDB=0.0168;AF1=0;AC1=0;DP4=566,262,0,2;MQ=42;FQ=-282;PV4=0.1,2.1e-10,0.086,0.023 PL 0
+MT 694 . C . 283 . DP=833;VDB=0.0000;AF1=0;AC1=0;DP4=556,263,1,0;MQ=42;FQ=-282;PV4=1,1.8e-08,0.073,0.12 PL 0
+MT 695 . A . 283 . DP=838;VDB=0.0207;AF1=0;AC1=0;DP4=569,262,0,0;MQ=42;FQ=-282 PL 0
+MT 696 . T . 283 . DP=837;AF1=0;AC1=0;DP4=577,253,0,0;MQ=41;FQ=-282 PL 0
+MT 697 . G . 283 . DP=836;VDB=0.0245;AF1=0;AC1=0;DP4=575,249,1,2;MQ=41;FQ=-282;PV4=0.22,3.7e-16,1,1 PL 0
+MT 698 . C . 283 . DP=836;VDB=0.0106;AF1=0;AC1=0;DP4=559,256,1,0;MQ=41;FQ=-282;PV4=1,1,0.18,1 PL 0
+MT 699 . A . 283 . DP=833;AF1=0;AC1=0;DP4=571,253,0,0;MQ=40;FQ=-282 PL 0
+MT 700 . A . 283 . DP=830;AF1=0;AC1=0;DP4=558,258,0,0;MQ=40;FQ=-282 PL 0
+MT 701 . G . 283 . DP=826;VDB=0.0062;AF1=0;AC1=0;DP4=565,248,0,0;MQ=40;FQ=-282 PL 0
+MT 702 . C . 283 . DP=834;VDB=0.0190;AF1=0;AC1=0;DP4=554,266,0,0;MQ=40;FQ=-282 PL 0
+MT 703 . A . 283 . DP=828;AF1=0;AC1=0;DP4=563,260,0,1;MQ=40;FQ=-282;PV4=0.32,2.7e-05,1,1 PL 0
+MT 704 . T . 283 . DP=828;VDB=0.0330;AF1=0;AC1=0;DP4=567,239,0,1;MQ=39;FQ=-282;PV4=0.3,0.054,0.098,1 PL 0
+MT 705 . C . 283 . DP=825;VDB=0.0394;AF1=0;AC1=0;DP4=558,247,0,0;MQ=40;FQ=-282 PL 0
+MT 706 . C . 283 . DP=827;VDB=0.0268;AF1=0;AC1=0;DP4=551,253,3,0;MQ=40;FQ=-282;PV4=0.56,2.9e-10,0.045,1 PL 0
+MT 707 . C . 283 . DP=825;VDB=0.0123;AF1=0;AC1=0;DP4=556,248,0,0;MQ=40;FQ=-282 PL 0
+MT 708 . C . 283 . DP=820;VDB=0.0193;AF1=0;AC1=0;DP4=553,250,1,1;MQ=40;FQ=-282;PV4=0.53,3.1e-06,1,0.16 PL 0
+MT 709 . G . 283 . DP=833;AF1=0;AC1=0;DP4=566,256,0,0;MQ=41;FQ=-282 PL 0
+MT 710 . T . 283 . DP=834;VDB=0.0193;AF1=0;AC1=0;DP4=567,260,0,0;MQ=40;FQ=-282 PL 0
+MT 711 . T . 283 . DP=833;AF1=0;AC1=0;DP4=557,256,0,0;MQ=41;FQ=-282 PL 0
+MT 712 . C . 283 . DP=838;AF1=0;AC1=0;DP4=566,256,0,0;MQ=40;FQ=-282 PL 0
+MT 713 . C . 283 . DP=839;VDB=0.0158;AF1=0;AC1=0;DP4=559,268,1,0;MQ=41;FQ=-282;PV4=1,7.3e-06,0.48,1 PL 0
+MT 714 . A . 283 . DP=861;VDB=0.0188;AF1=0;AC1=0;DP4=560,296,0,0;MQ=41;FQ=-282 PL 0
+MT 715 . G . 283 . DP=856;AF1=0;AC1=0;DP4=560,279,0,0;MQ=41;FQ=-282 PL 0
+MT 716 . T . 283 . DP=856;VDB=0.0073;AF1=0;AC1=0;DP4=557,290,1,0;MQ=41;FQ=-282;PV4=1,0.019,0.47,1 PL 0
+MT 717 . G . 283 . DP=853;VDB=0.0111;AF1=0;AC1=0;DP4=554,288,1,0;MQ=41;FQ=-282;PV4=1,1.1e-06,0.15,0.12 PL 0
+MT 718 . A . 283 . DP=854;AF1=0;AC1=0;DP4=546,300,0,1;MQ=41;FQ=-282;PV4=0.36,0.028,1,1 PL 0
+MT 719 . G . 283 . DP=851;VDB=0.0435;AF1=0;AC1=0;DP4=547,279,0,2;MQ=41;FQ=-282;PV4=0.11,0.00011,1,0.1 PL 0
+MT 720 . T . 283 . DP=859;VDB=0.0350;AF1=0;AC1=0;DP4=545,281,2,0;MQ=41;FQ=-282;PV4=0.55,0.001,0.21,0.32 PL 0
+MT 721 . T . 283 . DP=860;VDB=0.0057;AF1=0;AC1=0;DP4=543,276,1,1;MQ=41;FQ=-282;PV4=1,4.4e-10,0.18,1 PL 0
+MT 722 . C . 283 . DP=862;AF1=0;AC1=0;DP4=540,307,1,0;MQ=42;FQ=-282;PV4=1,1.2e-05,0.14,0.46 PL 0
+MT 723 . A . 283 . DP=857;VDB=0.0394;AF1=0;AC1=0;DP4=545,297,1,0;MQ=41;FQ=-282;PV4=1,0.14,0.25,0.036 PL 0
+MT 724 . C . 283 . DP=862;VDB=0.0094;AF1=0;AC1=0;DP4=535,283,1,0;MQ=41;FQ=-282;PV4=1,0.0038,0.45,1 PL 0
+MT 725 . C . 283 . DP=864;VDB=0.0417;AF1=0;AC1=0;DP4=532,286,1,2;MQ=41;FQ=-282;PV4=0.28,4.9e-14,0.34,1 PL 0
+MT 726 . C . 283 . DP=861;VDB=0.0042;AF1=0;AC1=0;DP4=537,308,0,1;MQ=42;FQ=-282;PV4=0.37,2.3e-06,1,0.14 PL 0
+MT 727 . T . 283 . DP=861;VDB=0.0325;AF1=0;AC1=0;DP4=548,290,0,0;MQ=42;FQ=-282 PL 0
+MT 728 . C . 283 . DP=860;AF1=0;AC1=0;DP4=541,312,0,0;MQ=42;FQ=-282 PL 0
+MT 729 . T . 283 . DP=863;VDB=0.0025;AF1=0;AC1=0;DP4=547,283,0,1;MQ=42;FQ=-282;PV4=0.34,7.1e-05,0.24,0.39 PL 0
+MT 730 . A . 283 . DP=865;AF1=0;AC1=0;DP4=543,282,0,0;MQ=42;FQ=-282 PL 0
+MT 731 . A . 283 . DP=867;AF1=0;AC1=0;DP4=542,280,0,0;MQ=42;FQ=-282 PL 0
+MT 732 . A . 283 . DP=868;VDB=0.0049;AF1=0;AC1=0;DP4=542,317,1,0;MQ=43;FQ=-282;PV4=1,0.0024,0.22,0.44 PL 0
+MT 733 . T . 283 . DP=872;VDB=0.0268;AF1=0;AC1=0;DP4=546,269,1,2;MQ=42;FQ=-282;PV4=0.26,8.1e-05,0.31,0.14 PL 0
+MT 734 . C . 283 . DP=874;VDB=0.0220;AF1=0;AC1=0;DP4=540,316,0,0;MQ=43;FQ=-282 PL 0
+MT 735 . A . 283 . DP=876;VDB=0.0073;AF1=0;AC1=0;DP4=545,313,0,0;MQ=43;FQ=-282 PL 0
+MT 736 . C . 283 . DP=877;VDB=0.0215;AF1=0;AC1=0;DP4=537,280,1,1;MQ=42;FQ=-282;PV4=1,9.7e-05,0.096,1 PL 0
+MT 737 . C . 283 . DP=874;AF1=0;AC1=0;DP4=522,330,0,0;MQ=44;FQ=-282 PL 0
+MT 738 . A . 283 . DP=875;VDB=0.0057;AF1=0;AC1=0;DP4=533,331,0,0;MQ=43;FQ=-282 PL 0
+MT 739 . C . 283 . DP=880;VDB=0.0225;AF1=0;AC1=0;DP4=533,293,0,1;MQ=43;FQ=-282;PV4=0.36,0.00013,0.043,1 PL 0
+MT 740 . G . 283 . DP=879;VDB=0.0074;AF1=0;AC1=0;DP4=529,324,0,2;MQ=44;FQ=-282;PV4=0.15,0.00048,0.21,1 PL 0
+MT 741 . A . 283 . DP=886;VDB=0.0210;AF1=0;AC1=0;DP4=531,345,0,0;MQ=44;FQ=-282 PL 0
+MT 742 . T . 283 . DP=888;VDB=0.0006;AF1=0;AC1=0;DP4=539,306,0,3;MQ=43;FQ=-282;PV4=0.048,1.5e-08,1,1 PL 0
+MT 743 . C . 283 . DP=887;VDB=0.0350;AF1=0;AC1=0;DP4=533,344,1,1;MQ=44;FQ=-282;PV4=1,4.4e-08,1,0.048 PL 0
+MT 744 . A . 283 . DP=888;AF1=0;AC1=0;DP4=538,316,0,0;MQ=44;FQ=-282 PL 0
+MT 745 . A . 283 . DP=891;AF1=0;AC1=0;DP4=532,320,0,0;MQ=44;FQ=-282 PL 0
+MT 746 . A . 283 . DP=887;VDB=0.0123;AF1=0;AC1=0;DP4=528,317,1,0;MQ=44;FQ=-282;PV4=1,6.3e-06,0.17,0.46 PL 0
+MT 747 . A . 283 . DP=884;AF1=0;AC1=0;DP4=524,347,0,0;MQ=44;FQ=-282 PL 0
+MT 748 . G . 283 . DP=883;VDB=0.0302;AF1=0;AC1=0;DP4=520,311,1,0;MQ=44;FQ=-282;PV4=1,8.1e-05,0.035,1 PL 0
+MT 749 . G . 283 . DP=888;VDB=0.0440;AF1=0;AC1=0;DP4=503,316,0,1;MQ=44;FQ=-282;PV4=0.39,0.027,0.035,1 PL 0
+MT 750 . A G 222 . DP=890;VDB=0.0435;AF1=1;AC1=2;DP4=0,3,483,315;MQ=45;FQ=-282;PV4=0.062,1,0.18,1 GT:PL:GQ 1/1:255,255,0:99
diff --git a/vcf/test/contig_idonly.vcf b/vcf/test/contig_idonly.vcf
new file mode 100644
index 0000000..5e5a6ad
--- /dev/null
+++ b/vcf/test/contig_idonly.vcf
@@ -0,0 +1,5 @@
+##fileformat=VCFv4.2
+##contig=<ID=1>
+##contig=<ID=2,length=2000>
+##contig=<ID=3,assembly=b37,length=3000>
+#CHROM POS ID REF ALT QUAL FILTER INFO
diff --git a/vcf/test/example-4.0.vcf b/vcf/test/example-4.0.vcf
new file mode 100644
index 0000000..27803a1
--- /dev/null
+++ b/vcf/test/example-4.0.vcf
@@ -0,0 +1,23 @@
+##fileformat=VCFv4.0
+##fileDate=20090805
+##source=myImputationProgramV3.1
+##reference=1000GenomesPilot-NCBI36
+##phasing=partial
+##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
+##INFO=<ID=AF,Number=.,Type=Float,Description="Allele Frequency">
+##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele">
+##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership, build 129">
+##INFO=<ID=H2,Number=0,Type=Flag,Description="HapMap2 membership">
+##FILTER=<ID=q10,Description="Quality below 10">
+##FILTER=<ID=s50,Description="Less than 50% of samples have data">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=HQ,Number=2,Type=Integer,Description="Haplotype Quality">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003
+20 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:.,.
+20 17330 . T A 3.0 q10 NS=3;DP=11;AF=0.017 GT:GQ:DP:HQ 0|0:49:3:58,50 0|1:3:5:65,3 0/0:41:3
+20 1110696 rs6040355 A G,T 1e+03 PASS NS=2;DP=10;AF=0.333,0.667;AA=T;DB GT:GQ:DP:HQ 1|2:21:6:23,27 2|1:2:0:18,2 2/2:35:4
+20 1230237 . T . 47 PASS NS=3;DP=13;AA=T GT:GQ:DP:HQ 0|0:54:7:56,60 0|0:48:4:51,51 0/0:61:2
+20 1234567 microsat1 GTCT G,GTACT . PASS NS=3;DP=9;AA=G GT:GQ:DP ./.:35:4 0/2:17:2 1/1:40:3
diff --git a/vcf/test/example-4.1-bnd.vcf b/vcf/test/example-4.1-bnd.vcf
new file mode 100644
index 0000000..6523255
--- /dev/null
+++ b/vcf/test/example-4.1-bnd.vcf
@@ -0,0 +1,34 @@
+##fileformat=VCFv4.1
+##fileDate=20110603
+##source=myImputationProgramV4.1
+##reference=file:/seq/references/reference.fasta
+##phasing=partial
+##INFO=<ID=SVTYPE,Number=1,Type=String,Description="Type of structural variant">
+##INFO=<ID=MATEID,Number=1,Type=String,Description="ID of the mate breakend">
+##INFO=<ID=REVERSE,Number=0,Type=Flag,Description="Indicates a breakend on the 5' end of a reference segment">
+##INFO=<ID=MATEPOS,Number=1,Type=Integer,Description="Position of the mate breakend">
+##INFO=<ID=MATECHR,Number=1,Type=String,Description="Chromosome containing the mate breakend">
+##INFO=<ID=SVLEN,Number=-1,Type=Integer,Description="Length of ALT alleles">
+##INFO=<ID=CN,Number=-1,Type=Integer,Description="Copy number of segment containing breakend">
+##INFO=<ID=CNADJ,Number=-1,Type=Integer,Description="Copy number of adjacency">
+##FILTER=<ID=q10,Description="Quality below 10">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=G,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=DP,Number=G,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=HQ,Number=G,Type=Integer,Description="Haplotype Quality">
+##FORMAT=<ID=BHAP,Number=G,Type=String,Description="Bundle Phase Set ">
+##FORMAT=<ID=BCN,Number=G,Type=String,Description="Bundle copy number">
+##PEDIGREE=<Derived="Tumor",Original="Germline">
+##SAMPLE=<SampleName=<GermlineS>,Genomes=<Germline>,Mixture=<1.0>,Description=<"Germline genome"> >
+##SAMPLE=<SampleName=<TumorS>,Genomes=<Germline,Tumor>,Mixture=<0.1,0.9>,Description=<"Germline contamination","Tumor genome"> >
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT Germline Tumor
+1 2 snp1 A T 40 PASS GT:MQ:HAP 0|1:0,40:35,46 0|1:0,0:35,46
+1 2 bnd1 T T[2:3[ 40 PASS SVTYPE=BND;MATEID=bnd4 GT:MQ:BHAP 0|0:0,0:35>35,46>46 0|1:0,40:35>35,46>17
+1 3 bnd2 A ]2:2]A 40 PASS SVTYPE=BND;MATEID=bnd3 GT:MQ:BHAP 0|0:0,0:35>35,46>46 0|1:0,40:35>35,46>17
+2 1 snp2 G T 40 PASS GT:MQ:HAP 1|0:0,40:17,23 1|0:0,0:17,23
+2 2 bnd3 G G[1:3[ 40 PASS SVTYPE=BND;MATEID=bnd2 GT:MQ:BHAP:BCN 0|0:0,0:17>17,23>23:1,1 0|1:0,40:23>23,17>46:2,1
+2 3 bnd4 G ]1:2]G 40 PASS SVTYPE=BND;MATEID=bnd1 GT:MQ:BHAP:BCN 0|0:0,0:17>17,23>23:1,1 0|1:0,40:23>23,17>46:2,1
+2 4 bnd5 G ]2:6]G 40 PASS SVTYPE=BND;MATEID=bnd6 GT:MQ:BHAP:AHAP:BCN 0|0:0,0:17>17,23>23:17,23:1,1 0|0|1:0,0,40:17>17,23>23,24>23:17,23,23:1,2,2
+2 6 bnd6 T T[2:4[ 40 PASS SVTYPE=BND;MATEID=bnd5 GT:MQ:BHAP:AHAP:BCN 0|0:0,0:17>17,23>23:17,23:1,1 0|1|0:0,40,0:17>17,23>24,24>24:17,23,23:1,2,2
+2 6 snp3 T A 40 PASS GT:MQ:HAP:AHAP 0|1:0,40:23,17:23,17 0|1|1:0,0,0:17,23,24:17,23,23
+2 8 snp4 T A 40 PASS GT:MQ:HAP:AHAP 0|0:0,0:23,17:23,17 0|1|1:0,40,40:17,23,24:17,23,23
diff --git a/vcf/test/example-4.1-info-multiple-values.vcf b/vcf/test/example-4.1-info-multiple-values.vcf
new file mode 100644
index 0000000..6faf95e
--- /dev/null
+++ b/vcf/test/example-4.1-info-multiple-values.vcf
@@ -0,0 +1,7 @@
+##fileformat=VCFv4.1
+##contig=<ID=Pf3D7_01_v3,length=640851>
+##INFO=<ID=RepeatCopies,Number=.,Type=Float,Description="Number of copies aligned with the consensus pattern">
+##INFO=<ID=RepeatSize,Number=.,Type=Integer,Description="Size of consensus pattern (may differ slightly from the period size)">
+##INFO=<ID=RepeatConsensus,Number=.,Type=String,Description="Repeat consensus sequence">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT
+Pf3D7_01_v3 401 . C T 53.99 PASS RepeatCopies=19.3,47.4,14.0;RepeatSize=42,14,56;RepeatConsensus=TCTTATCTTCTTACTTTTCATTCCTTACTCTTACTTACTTAC,TTACTCTTACTTAC,TTACTCTTACTTACTTACTCTTACTTACTTACTCTTACTTACTTACTCTTATCTTC
diff --git a/vcf/test/example-4.1-ploidy.vcf b/vcf/test/example-4.1-ploidy.vcf
new file mode 100644
index 0000000..6704048
--- /dev/null
+++ b/vcf/test/example-4.1-ploidy.vcf
@@ -0,0 +1,21 @@
+##fileformat=VCFv4.1
+##fileDate=20090805
+##source=myImputationProgramV3.1
+##reference=file:///seq/references/1000GenomesPilot-NCBI36.fasta
+##contig=<ID=X,length=155270560,assembly=B36,species="Homo sapiens",taxonomy=x>
+##phasing=partial
+##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
+##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency">
+##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele">
+##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership, build 129">
+##INFO=<ID=H2,Number=0,Type=Flag,Description="HapMap2 membership">
+##FILTER=<ID=q10,Description="Quality below 10">
+##FILTER=<ID=s50,Description="Less than 50% of samples have data">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=HQ,Number=2,Type=Integer,Description="Haplotype Quality">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003
+X 60034 rs186434315 T A 100 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0:48:1:51,51 1|0:48:8:51,51 1/1/1:43:5:.,.
+X 60378 rs185512268 C A 100 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0:48:1:51,51 1:48:8:51,51 0:43:5:.,.
\ No newline at end of file
diff --git a/vcf/test/example-4.1-sv.vcf b/vcf/test/example-4.1-sv.vcf
new file mode 100644
index 0000000..c56530a
--- /dev/null
+++ b/vcf/test/example-4.1-sv.vcf
@@ -0,0 +1,35 @@
+##fileformat=VCFv4.1
+##fileDate=20100501
+##reference=1000GenomesPilot-NCBI36
+##assembly=ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/release/sv/breakpoint_assemblies.fasta
+##INFO=<ID=BKPTID,Number=.,Type=String,Description="ID of the assembled alternate allele in the assembly file">
+##INFO=<ID=CIEND,Number=2,Type=Integer,Description="Confidence interval around END for imprecise variants">
+##INFO=<ID=CIPOS,Number=2,Type=Integer,Description="Confidence interval around POS for imprecise variants">
+##INFO=<ID=END,Number=1,Type=Integer,Description="End position of the variant described in this record">
+##INFO=<ID=HOMLEN,Number=.,Type=Integer,Description="Length of base pair identical micro-homology at event breakpoints">
+##INFO=<ID=HOMSEQ,Number=.,Type=String,Description="Sequence of base pair identical micro-homology at event breakpoints">
+##INFO=<ID=IMPRECISE,Number=0,Type=Flag,Description="Imprecise structural variation">
+##INFO=<ID=MEINFO,Number=4,Type=String,Description="Mobile element info of the form NAME,START,END,POLARITY">
+##INFO=<ID=SVLEN,Number=.,Type=Integer,Description="Difference in length between REF and ALT alleles">
+##INFO=<ID=SVTYPE,Number=1,Type=String,Description="Type of structural variant">
+##ALT=<ID=DEL,Description="Deletion">
+##ALT=<ID=DEL:ME:ALU,Description="Deletion of ALU element">
+##ALT=<ID=DEL:ME:L1,Description="Deletion of L1 element">
+##ALT=<ID=DUP,Description="Duplication">
+##ALT=<ID=DUP:TANDEM,Description="Tandem Duplication">
+##ALT=<ID=INS,Description="Insertion of novel sequence">
+##ALT=<ID=INS:ME:ALU,Description="Insertion of ALU element">
+##ALT=<ID=INS:ME:L1,Description="Insertion of L1 element">
+##ALT=<ID=INV,Description="Inversion">
+##ALT=<ID=CNV,Description="Copy number variable region">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Float,Description="Genotype quality">
+##FORMAT=<ID=CN,Number=1,Type=Integer,Description="Copy number genotype for imprecise events">
+##FORMAT=<ID=CNQ,Number=1,Type=Float,Description="Copy number genotype quality for imprecise events">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001
+1 2827693 . CCGTGGATGCGGGGACCCGCATCCCCTCTCCCTTCACAGCTGAGTGACCCACATCCCCTCTCCCCTCGCA C . PASS SVTYPE=DEL;END=2827680;BKPTID=Pindel_LCS_D1099159;HOMLEN=1;HOMSEQ=C;SVLEN=-66 GT:GQ 1/1:13.9
+2 321682 . T <DEL> 6 PASS IMPRECISE;SVTYPE=DEL;END=321887;SVLEN=-105;CIPOS=-56,20;CIEND=-10,62 GT:GQ 0/1:12
+2 14477084 . C <DEL:ME:ALU> 12 PASS IMPRECISE;SVTYPE=DEL;END=14477381;SVLEN=-297;MEINFO=AluYa5,5,307,+;CIPOS=-22,18;CIEND=-12,32 GT:GQ 0/1:12
+3 9425916 . C <INS:ME:L1> 23 PASS IMPRECISE;SVTYPE=INS;END=9425916;SVLEN=6027;CIPOS=-16,22;MIINFO=L1HS,1,6025,- GT:GQ 1/1:15
+3 12665100 . A <DUP> 14 PASS IMPRECISE;SVTYPE=DUP;END=12686200;SVLEN=21100;CIPOS=-500,500;CIEND=-500,500 GT:GQ:CN:CNQ ./.:0:3:16.2
+4 18665128 . T <DUP:TANDEM> 11 PASS IMPRECISE;SVTYPE=DUP;END=18665204;SVLEN=76;CIPOS=-10,10;CIEND=-10,10 GT:GQ:CN:CNQ ./.:0:5:8.3
diff --git a/vcf/test/example-4.1.vcf b/vcf/test/example-4.1.vcf
new file mode 100644
index 0000000..27d4500
--- /dev/null
+++ b/vcf/test/example-4.1.vcf
@@ -0,0 +1,24 @@
+##fileformat=VCFv4.1
+##fileDate=20090805
+##source=myImputationProgramV3.1
+##reference=file:///seq/references/1000GenomesPilot-NCBI36.fasta
+##contig=<ID=20,length=62435964,assembly=B36,md5=f126cdf8a6e0c7f379d618ff66beb2da,species="Homo sapiens",taxonomy=x>
+##phasing=partial
+##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
+##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency">
+##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele">
+##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership, build 129">
+##INFO=<ID=H2,Number=0,Type=Flag,Description="HapMap2 membership">
+##FILTER=<ID=q10,Description="Quality below 10">
+##FILTER=<ID=s50,Description="Less than 50% of samples have data">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=HQ,Number=2,Type=Integer,Description="Haplotype Quality">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003
+20 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:.,.
+20 17330 . T A 3 q10 NS=3;DP=11;AF=0.017 GT:GQ:DP:HQ 0|0:49:3:58,50 0|1:3:5:65,3 0/0:41:3
+20 1110696 rs6040355 A G,T 67 PASS NS=2;DP=10;AF=0.333,0.667;AA=T;DB GT:GQ:DP:HQ 1|2:21:6:23,27 2|1:2:0:18,2 2/2:35:4
+20 1230237 . T . 47 PASS NS=3;DP=13;AA=T GT:GQ:DP:HQ 0|0:54:7:56,60 0|0:48:4:51,51 0/0:61:2
+20 1234567 microsat1 GTC G,GTCT 50 PASS NS=3;DP=9;AA=G GT:GQ:DP 0/1:35:4 0/2:17:2 1/1:40:3
diff --git a/vcf/test/example-4.2.vcf b/vcf/test/example-4.2.vcf
new file mode 100644
index 0000000..d649fc3
--- /dev/null
+++ b/vcf/test/example-4.2.vcf
@@ -0,0 +1,56 @@
+##fileformat=VCFv4.2
+##FILTER=<ID=PASS,Description="All filters passed">
+##samtoolsVersion=1.0-17-gfaf4dd6+htslib-1.0-11-g830ea73
+##samtoolsCommand=samtools mpileup -u -t DP,DPR,DV,DP4,INFO/DPR,SP -f /data/archive/reference/Anopheles-arabiensis-Dongola_SCAFFOLDS_AaraD1.fa -r KB704451:0004153102-0004172483 huge_list_of_bam_files_removed
+##reference=file:///data/archive/reference/Anopheles-arabiensis-Dongola_SCAFFOLDS_AaraD1.fa
+##contig=<ID=KB704451,length=13998812>
+##ALT=<ID=X,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)">
+##FORMAT=<ID=PL,Number=G,Type=Integer,Description="List of Phred-scaled genotype likelihoods">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Number of high-quality bases">
+##FORMAT=<ID=DV,Number=1,Type=Integer,Description="Number of high-quality non-reference bases">
+##FORMAT=<ID=DPR,Number=R,Type=Integer,Description="Number of high-quality bases observed for each allele">
+##INFO=<ID=DPR,Number=R,Type=Integer,Description="Number of high-quality bases observed for each allele">
+##FORMAT=<ID=DP4,Number=4,Type=Integer,Description="Number of high-quality ref-fwd, ref-reverse, alt-fwd and alt-reverse bases">
+##FORMAT=<ID=SP,Number=1,Type=Integer,Description="Phred-scaled strand bias P-value">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Phred-scaled Genotype Quality">
+##FORMAT=<ID=GP,Number=G,Type=Float,Description="Phred-scaled genotype posterior probabilities">
+##INFO=<ID=ICB,Number=1,Type=Float,Description="Inbreeding Coefficient Binomial test (bigger is better)">
+##INFO=<ID=HOB,Number=1,Type=Float,Description="Bias in the number of HOMs number (smaller is better)">
+##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes for each ALT allele, in the same order as listed">
+##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
+##INFO=<ID=DP4,Number=4,Type=Integer,Description="Number of high-quality ref-forward , ref-reverse, alt-forward and alt-reverse bases">
+##INFO=<ID=MQ,Number=1,Type=Integer,Description="Average mapping quality">
+##bcftools_callVersion=1.0-55-gc661821+htslib-1.0-11-g830ea73
+##bcftools_callCommand=call -m -vM -f GQ,GP
+##SnpSiftVersion="SnpSift 3.6c (build 2014-05-20), by Pablo Cingolani"
+##SnpSiftCmd="SnpSift varType - "
+##INFO=<ID=VARTYPE,Number=A,Type=Flag,Description="Variant types {SNP,MNP,INS,DEL,Mixed}">
+##INFO=<ID=SNP,Number=0,Type=Flag,Description="Variant is a SNP">
+##INFO=<ID=MNP,Number=0,Type=Flag,Description="Variant is an MNP">
+##INFO=<ID=INS,Number=0,Type=Flag,Description="Variant is an insertion">
+##INFO=<ID=DEL,Number=0,Type=Flag,Description="Variant is an deletion">
+##INFO=<ID=MIXED,Number=0,Type=Flag,Description="Variant is mixture of INS/DEL/SNP/MNP">
+##INFO=<ID=HOM,Number=0,Type=Flag,Description="Variant is homozygous">
+##INFO=<ID=HET,Number=0,Type=Flag,Description="Variant is heterozygous">
+##INFO=<ID=VARTYPE,Number=A,Type=String,Description="Comma separated list of variant types. One per allele">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT LUPI059 MINE001 OKJ042 LUPI001 LUPI007 LUPI024 LUPI056 LUPI071 LUPI074 LUPI082 MINE040 MINE100 MINE101 MINE105 MINE111 OKJ017 OKJ045 OKJ070 SAGA066 SAGA107 SAGA131 SAGA133 SAGA134 SAGA141 2012L_LUPI_002 2012L_LUPI_015 2012L_LUPI_017 2012L_LUPI_018 2012L_LUPI_035 2012L_LUPI_062 2012L_LUPI_065 2012L_LUPI_077 2012L_LUPI_083 2012L_LUPI_116 2012L_LUPI_013 2012L_LUPI_041 2012L_LUPI_068 2012L_LUPI_096 2012L_LUPI_098 2012 [...]
+KB704451 4157846 . N A,C 167.0 . DP=10;VDB=1.17174e-06;SGB=1.26353;MQ0F=0;DPR=0,6,4;AC=10,4;AN=14;DP4=0,0,10,0;MQ=60;SNP;VARTYPE=SNP,SNP GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 1/2:74,23,14,57,0,54:4:4:0:0,0,4,0:0,3,1:144,56,16,90,0,57:16 1/2:26,26,26,3,3,0:1:1:0:0,0,1,0:0,0,1:95,58,28,36,2,3:3 ./.:0,0,0,0,0,0:0:0:0:0,0,0,0:0,0,0:0,0,0,0,0,0:0 ./.:0,0,0,0,0,0:0:0:0:0,0,0,0:0,0,0:0,0,0,0,0,0:0 ./.:0,0,0,0,0,0:0:0:0:0,0,0,0:0,0,0:0,0,0,0,0,0:0 ./.:0,0,0,0,0,0:0:0:0:0,0,0,0:0, [...]
+KB704451 4157870 . T C 275.0 . DP=243;VDB=0.00023935;SGB=29.4468;RPB=0.0368658;MQB=0.979612;MQSB=0.268441;BQB=0.99223;MQ0F=0;DPR=213,19;ICB=0.85092;HOB=0.0287274;AC=6;AN=118;DP4=201,12,19,1;MQ=53;SNP;VARTYPE=SNP GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/0:0,66,255:22:0:0:20,2,0,0:22,0:0,75,279:75 0/0:0,12,120:4:0:0:4,0,0,0:4,0:0,21,144:21 1/1:193,36,0:12:12:0:0,0,12,0:0,12:168,20,0:20 0/0:0,9,95:3:0:0:3,0,0,0:3,0:0,18,119:18 0/1:78,0,110:7:3:0:3,1,3,0:4,3:68,0,125:68 0/0: [...]
+KB704451 4157877 . G A 999.0 . DP=250;VDB=6.58963e-09;SGB=31.659;RPB=0.0227135;MQB=0.410318;MQSB=0.139343;BQB=0.0767891;MQ0F=0;DPR=188,48;ICB=0.990841;HOB=0.00761276;AC=17;AN=118;DP4=176,12,45,3;MQ=55;SNP;VARTYPE=SNP GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/1:159,0,202:22:9:0:12,1,8,1:13,9:154,0,212:127 0/0:0,12,120:4:0:0:4,0,0,0:4,0:0,16,134:16 0/0:0,51,207:17:0:0:17,0,0,0:17,0:0,55,221:55 0/0:0,9,98:3:0:0:3,0,0,0:3,0:0,13,112:13 0/1:123,0,61:8:5:0:3,0,4,1:3,5:118,0,71: [...]
+KB704451 4157907 . A C 278.0 . DP=295;VDB=0.241276;SGB=26.7514;RPB=0.676983;MQB=0.997838;MQSB=0.136536;BQB=0.45683;MQ0F=0;DPR=264,15;ICB=0.00518819;HOB=0.00237812;AC=4;AN=116;DP4=233,31,14,1;MQ=59;SNP;VARTYPE=SNP GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/0:0,90,255:30:0:0:25,5,0,0:30,0:0,101,283:101 0/0:0,30,201:10:0:0:9,1,0,0:10,0:0,41,229:41 0/1:157,0,188:18:8:0:10,0,7,1:10,8:145,0,205:127 0/1:75,0,90:5:2:0:2,1,2,0:3,2:63,0,107:63 0/0:0,30,201:10:0:0:9,1,0,0:10,0:0,41,22 [...]
+KB704451 4157909 . T G 278.0 . DP=295;VDB=0.184881;SGB=22.7413;RPB=0.646301;MQB=0.998034;MQSB=0.200514;BQB=0.321842;MQ0F=0;DPR=247,15;ICB=0.00558284;HOB=0.00255102;AC=4;AN=112;DP4=218,29,15,1;MQ=59;SNP;VARTYPE=SNP GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/0:0,87,255:29:0:0:24,5,0,0:29,0:0,97,282:97 0/0:0,27,183:9:0:0:9,0,0,0:9,0:0,37,210:37 0/1:156,0,167:19:8:0:11,0,7,1:11,8:145,0,183:127 0/1:75,0,107:5:2:0:2,1,2,0:3,2:64,0,123:64 0/0:0,27,191:9:0:0:8,1,0,0:9,0:0,37,218:37 [...]
+KB704451 4157927 . G A 4.88727 . DP=334;VDB=0.38;SGB=3.29913;RPB=0.454248;MQB=0.970588;MQSB=0.546099;BQB=0.215686;MQ0F=0;DPR=306,2;ICB=0.000310486;HOB=0.000153894;AC=1;AN=114;DP4=265,41,2,0;MQ=59;SNP;VARTYPE=SNP GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/0:0,105,255:35:0:0:31,4,0,0:35,0:0,122,295:122 0/0:0,45,255:15:0:0:14,1,0,0:15,0:0,62,295:62 0/0:0,60,255:20:0:0:17,3,0,0:20,0:0,77,295:77 0/0:0,21,242:7:0:0:6,1,0,0:7,0:0,38,282:38 0/0:0,24,207:8:0:0:6,2,0,0:8,0:0,41,247:41 [...]
+KB704451 4157938 . ATTT ATTTT 650.0 . INDEL;IDV=18;IMF=0.428571;DP=361;VDB=0.773794;SGB=32.6744;MQSB=0.993251;MQ0F=0.00831025;DPR=115,60;ICB=0.929833;HOB=0.0258;AC=23;AN=100;DP4=98,17,48,12;MQ=59;INS;VARTYPE=INS GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/1:124,0,7:19:16:0:3,0,13,3:3,16:123,0,13:13 0/1:14,3,0:1:1:0:0,0,1,0:0,1:12,1,5:4 0/0:0,9,55:3:0:0:3,0,0,0:3,0:0,9,62:9 0/0:0,21,146:7:0:0:5,2,0,0:7,0:0,21,153:21 0/0:0,18,126:6:0:0:4,2,0,0:6,0:0,18,133:18 0/0:0,6,56:2:0:0 [...]
+KB704451 4157940 . TTGTGTGTGTGTGT TTGTGTGTGTGTGTGTGT,TTTCTGTGTGTGTGTGT 999.0 . INDEL;IDV=7;IMF=0.5;DP=366;VDB=0.0431342;SGB=14.7456;MQSB=0.996953;MQ0F=0.010929;DPR=86,41,8;ICB=0.963728;HOB=0.02;AC=21,6;AN=90;DP4=70,16,39,10;MQ=58;INS;VARTYPE=INS,INS GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/2:60,60,60,3,3,0:1:1:0:0,0,1,0:0,0,1:54,55,61,2,5,9:4 1/1:255,18,0,255,18,255:6:6:0:0,0,3,3:0,6,0:248,11,0,252,19,263:11 0/0:0,6,62,6,62,62:2:0:0:2,0,0,0:2,0,0:1,7,70,11,71,78:6 0/1:9,0,238, [...]
diff --git a/vcf/test/freebayes.vcf b/vcf/test/freebayes.vcf
new file mode 100644
index 0000000..ae0be2d
--- /dev/null
+++ b/vcf/test/freebayes.vcf
@@ -0,0 +1,159 @@
+##fileformat=VCFv4.1
+##FORMAT=<ID=AO,Number=A,Type=Integer,Description="Alternate allele observation count">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=GL,Number=G,Type=Float,Description="Genotype Likelihood, log10-scaled likelihoods of the data given the called genotype for each possible genotype generated from the reference and alternate alleles given the sample ploidy">
+##FORMAT=<ID=GLE,Number=1,Type=String,Description="Genotype Likelihood Explicit, same as GL, but with tags to indicate the specific genotype. For instance, 0^-75.22|1^-223.42|0/0^-323.03|1/0^-99.29|1/1^-802.53 represents both haploid and diploid genotype likilehoods in a biallelic context">
+##FORMAT=<ID=GQ,Number=1,Type=Float,Description="Genotype Quality, the Phred-scaled marginal (or unconditional) probability of the called genotype">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=QA,Number=A,Type=Integer,Description="Sum of quality of the alternate observations">
+##FORMAT=<ID=QR,Number=1,Type=Integer,Description="Sum of quality of the reference observations">
+##FORMAT=<ID=RO,Number=1,Type=Integer,Description="Reference allele observation count">
+##INFO=<ID=AB,Number=A,Type=Float,Description="Allele balance at heterozygous sites: a number between 0 and 1 representing the ratio of reads showing the reference allele to all reads, considering only reads from individuals called as heterozygous">
+##INFO=<ID=ABP,Number=A,Type=Float,Description="Allele balance probability at heterozygous sites: Phred-scaled upper-bounds estimate of the probability of observing the deviation between ABR and ABA given E(ABR/ABA) ~ 0.5, derived using Hoeffding's inequality">
+##INFO=<ID=AC,Number=A,Type=Integer,Description="Total number of alternate alleles in called genotypes">
+##INFO=<ID=AF,Number=A,Type=Float,Description="Estimated allele frequency in the range (0,1]">
+##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
+##INFO=<ID=AO,Number=A,Type=Integer,Description="Alternate allele observations">
+##INFO=<ID=BVAR,Number=0,Type=Flag,Description="The best genotype combination in the posterior is variant (non homozygous).">
+##INFO=<ID=CIGAR,Number=A,Type=String,Description="The extended CIGAR representation of each alternate allele, with the exception that '=' is replaced by 'M' to ease VCF parsing. Note that INDEL alleles do not have the first matched base (which is provided by default, per the spec) referred to by the CIGAR.">
+##INFO=<ID=CpG,Number=0,Type=Flag,Description="CpG site (either CpG, TpG or CpA)">
+##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP Membership">
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Total read depth at the locus">
+##INFO=<ID=DPRA,Number=A,Type=Float,Description="Alternate allele depth ratio. Ratio between depth in samples with each called alternate allele and those without.">
+##INFO=<ID=EPP,Number=A,Type=Float,Description="End Placement Probability: Phred-scaled upper-bounds estimate of the probability of observing the deviation between EL and ER given E(EL/ER) ~ 0.5, derived using Hoeffding's inequality">
+##INFO=<ID=EPPR,Number=1,Type=Float,Description="End Placement Probability for reference observations: Phred-scaled upper-bounds estimate of the probability of observing the deviation between EL and ER given E(EL/ER) ~ 0.5, derived using Hoeffding's inequality">
+##INFO=<ID=HWE,Number=1,Type=Float,Description="Phred-scaled discrete HWE prior probability of the genotyping across all samples.">
+##INFO=<ID=LEN,Number=A,Type=Integer,Description="allele length">
+##INFO=<ID=MEANALT,Number=A,Type=Float,Description="Mean number of unique non-reference allele observations per sample with the corresponding alternate alleles.">
+##INFO=<ID=MQM,Number=A,Type=Float,Description="Mean mapping quality of observed alternate alleles">
+##INFO=<ID=MQMR,Number=1,Type=Float,Description="Mean mapping quality of observed reference alleles">
+##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of samples with data">
+##INFO=<ID=NUMALT,Number=1,Type=Integer,Description="Number of unique non-reference alleles in called genotypes at this position.">
+##INFO=<ID=ODDS,Number=1,Type=Float,Description="The log odds ratio of the best genotype combination to the second-best.">
+##INFO=<ID=PAIRED,Number=A,Type=Float,Description="Proportion of observed alternate alleles which are supported by properly paired read fragments">
+##INFO=<ID=PAIREDR,Number=1,Type=Float,Description="Proportion of observed reference alleles which are supported by properly paired read fragments">
+##INFO=<ID=REPEAT,Number=1,Type=String,Description="Description of the local repeat structures flanking the current position">
+##INFO=<ID=RO,Number=1,Type=Integer,Description="Reference allele observations">
+##INFO=<ID=RPP,Number=A,Type=Float,Description="Read Placement Probability: Phred-scaled upper-bounds estimate of the probability of observing the deviation between RPL and RPR given E(RPL/RPR) ~ 0.5, derived using Hoeffding's inequality">
+##INFO=<ID=RPPR,Number=1,Type=Float,Description="Read Placement Probability for reference observations: Phred-scaled upper-bounds estimate of the probability of observing the deviation between RPL and RPR given E(RPL/RPR) ~ 0.5, derived using Hoeffding's inequality">
+##INFO=<ID=RUN,Number=A,Type=Integer,Description="Run length: the number of consecutive repeats of the alternate allele in the reference genome">
+##INFO=<ID=SAP,Number=A,Type=Float,Description="Strand balance probability for the alternate allele: Phred-scaled upper-bounds estimate of the probability of observing the deviation between SAF and SAR given E(SAF/SAR) ~ 0.5, derived using Hoeffding's inequality">
+##INFO=<ID=SRP,Number=1,Type=Float,Description="Strand balance probability for the reference allele: Phred-scaled upper-bounds estimate of the probability of observing the deviation between SRF and SRR given E(SRF/SRR) ~ 0.5, derived using Hoeffding's inequality">
+##INFO=<ID=TYPE,Number=A,Type=String,Description="The type of allele, either snp, mnp, ins, del, or complex.">
+##INFO=<ID=XAI,Number=A,Type=Float,Description="Alternate allele read INDEL rate: The rate of INDELs (gaps) in reads supporting the alternate allele, excluding the called variant.">
+##INFO=<ID=XAM,Number=A,Type=Float,Description="Alternate allele read mismatch rate: The rate of SNPs + MNPs + INDELs in reads supporting the alternate allele, excluding the called variant.">
+##INFO=<ID=XAS,Number=A,Type=Float,Description="Alternate allele read SNP rate: The rate of per-base mismatches (SNPs + MNPs) in reads supporting the alternate allele, excluding the called variant.">
+##INFO=<ID=XRI,Number=1,Type=Float,Description="Reference allele read INDEL rate: The rate of INDELs (gaps) in reads supporting the reference allele.">
+##INFO=<ID=XRM,Number=1,Type=Float,Description="Reference allele read mismatch rate: The rate of SNPs + MNPs + INDELs in reads supporting the reference allele.">
+##INFO=<ID=XRS,Number=1,Type=Float,Description="Reference allele read SNP rate: The rate of per-base mismatches (SNPs + MNPs) in reads supporting the reference allele.">
+##VariantAnnotator="analysis_type=VariantAnnotator input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=null excludeIntervals=null reference_sequence=/data/reference/ucsc/hg19/ucsc.hg19.fasta rodBind=[/data/reference/dbSNP_132/dbsnp_132.hg19.vcf, freebayes.vcf.raw] rodToIntervalTrackName=variant BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq= [...]
+##commandline="freebayes -f /data/reference/ucsc/hg19/ucsc.hg19.fasta -r chr22:42522301..42527953 -F 0.3 -_ -E0 reads.bam"
+##fileDate=20120116
+##phasing=none
+##reference=/data/reference/ucsc/hg19/ucsc.hg19.fasta
+##source=freeBayes version 0.9.4
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT BLANK NA12878 NA12891 NA12892 NA19238 NA19239 NA19240
+chr22 42522347 . C CG 49314.70 . AB=0.323285;ABP=2684.52;AC=7;AF=0.5;AN=14;AO=3196;BVAR;CIGAR=1M1I;DP=9886;DPRA=0;EPP=6943.04;EPPR=12096.8;HWE=32.3452;LEN=1;MEANALT=2.42857;MQM=253.864;MQMR=253.934;NS=7;NUMALT=1;ODDS=14.6885;PAIRED=0;PAIREDR=0;RO=6668;RPP=6943.04;RPPR=12096.8;RUN=1;SAP=6943.04;SRP=14482.4;TYPE=ins;XAI=0.00985694;XAM=0.0142524;XAS=0.00439544;XRI=0.00449157;XRM=0.00877419;XRS=0.00428262 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:2:4:-14.345,-0.425969,-6.27:63.79:151:66:2 0/1:312:923:-186 [...]
+chr22 42522392 rs28371738 G A 43456.30 . AB=0.329255;ABP=1348.16;AC=2;AF=0.142857;AN=14;AO=1762;BVAR;CIGAR=1X;DB;DP=14230;DPRA=474.167;EPP=3829.14;EPPR=17879.7;HWE=-23.8382;LEN=1;MEANALT=3;MQM=254;MQMR=253.948;NS=7;NUMALT=1;ODDS=4.47734;PAIRED=0;PAIREDR=0;RO=12423;RPP=3829.14;RPPR=17879.7;RUN=1;SAP=3829.14;SRP=26979.2;TYPE=snp;XAI=0.00617283;XAM=0.00958286;XAS=0.00341003;XRI=0.00656323;XRM=0.0107744;XRS=0.00421113 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:5:0,-1.50515,-15.456:19.49:0:168:5 0/1:597:1 [...]
+chr22 42522398 . C CC 49314.70 . AB=0.244269;ABP=6346.9;AC=7;AF=0.5;AN=14;AO=2728;BVAR;CIGAR=1M1I;DP=11168;DPRA=0;EPP=5926.79;EPPR=9594.88;HWE=32.3452;LEN=1;MEANALT=4;MQM=253.766;MQMR=254;NS=7;NUMALT=1;ODDS=17.2616;PAIRED=0;PAIREDR=0;REPEAT=C:4;RO=8188;RPP=5926.79;RPPR=9594.88;RUN=1;SAP=5926.79;SRP=17783;TYPE=ins;XAI=0.0106905;XAM=0.0164587;XAS=0.00576816;XRI=0.00487639;XRM=0.00890377;XRS=0.00402737 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:2:5:-9.69,-0.50515,-7.46667:74.94:102:80:3 0/1:319:996:-1378. [...]
+chr22 42522445 . GG G 49314.70 . AB=0.763267;ABP=6106.23;AC=8;AF=0.571429;AN=14;AO=7742;BVAR;CIGAR=1M1D;DP=10142;DPRA=0;EPP=16814.5;EPPR=5.74435;HWE=27.36;LEN=1;MEANALT=5.28571;MQM=253.943;MQMR=253.997;NS=7;NUMALT=1;ODDS=1.54045;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=2231;RPP=16814.5;RPPR=5.74435;RUN=1;SAP=16814.5;SRP=4847.57;TYPE=del;XAI=0.00589821;XAM=0.00994331;XAS=0.0040451;XRI=0.00484959;XRM=0.00960629;XRS=0.0047567 GT:AO:DP:GL:GQ:QA:QR:RO 1/1:4:4:-23.31,-1.20412,0:7.53:252:0:0 0/1:780:97 [...]
+chr22 42522450 . GG G 49314.70 . AB=0.204125;ABP=7117.88;AC=6;AF=0.428571;AN=14;AO=1910;BVAR;CIGAR=1M1D;DP=9360;DPRA=519.833;EPP=4150.52;EPPR=56.2176;HWE=27.36;LEN=1;MEANALT=7.83333;MQM=253.996;MQMR=253.934;NS=7;NUMALT=1;ODDS=0.847298;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=6827;RPP=4150.52;RPPR=56.2176;RUN=1;SAP=4150.52;SRP=14827.7;TYPE=del;XAI=0.0040096;XAM=0.00831852;XAS=0.00430893;XRI=0.00611378;XRM=0.010441;XRS=0.00432722 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:3:0,-0.90309,-8.30667:5.23:0:89:3 0/1: [...]
+chr22 42522481 . G GG 49314.70 . AB=0.275316;ABP=7147.74;AC=7;AF=0.5;AN=14;AO=4486;BVAR;CIGAR=1M1I;DP=16294;DPRA=0;EPP=9744.24;EPPR=3051.34;HWE=32.3452;LEN=1;MEANALT=5.42857;MQM=253.3;MQMR=253.61;NS=7;NUMALT=1;ODDS=29.2938;PAIRED=0;PAIREDR=0;REPEAT=G:3;RO=11667;RPP=9744.24;RPPR=3051.34;RUN=1;SAP=9744.24;SRP=25337.6;TYPE=ins;XAI=0.0099545;XAM=0.0149437;XAS=0.00498925;XRI=0.00773094;XRM=0.0121752;XRS=0.00444426 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:2:7:-16.055,-0.784991,-12.972:99:169:141:5 0/1:439: [...]
+chr22 42522493 . G GG 49314.70 . AB=0.267346;ABP=6697.96;AC=6;AF=0.428571;AN=14;AO=3807;BVAR;CIGAR=1M1I;DP=14245;DPRA=474.667;EPP=8269.81;EPPR=9535.75;HWE=27.36;LEN=1;MEANALT=4.33333;MQM=253.418;MQMR=253.78;NS=7;NUMALT=1;ODDS=2.23359;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=10348;RPP=8269.81;RPPR=9535.75;RUN=1;SAP=8269.81;SRP=22473.4;TYPE=ins;XAI=0.0087646;XAM=0.0139561;XAS=0.00519154;XRI=0.00736916;XRM=0.0116904;XRS=0.00432124 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:5:0,-1.50515,-13.8:10.14:0:150:5 0/1:1 [...]
+chr22 42522597 . C T 96.33 . AB=0.307692;ABP=7.18621;AC=1;AF=0.0714286;AN=14;AO=38;BVAR;CIGAR=1X;DP=32021;DPRA=0;EPP=11.239;EPPR=6737.36;HWE=-19.2686;LEN=1;MEANALT=3.42857;MQM=253.526;MQMR=251.934;NS=7;NUMALT=1;ODDS=22.1808;PAIRED=0;PAIREDR=0;RO=31891;RPP=11.239;RPPR=6737.36;RUN=1;SAP=85.5263;SRP=69253.4;TYPE=snp;XAI=0.0148461;XAM=0.0190344;XAS=0.00418822;XRI=0.0105127;XRM=0.0154331;XRS=0.00492039 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:4:13:-13.505,-1.05908,-28.5178:96.33:146:313:9 0/0:1:3217:-44.2 [...]
+chr22 42522613 rs1135840 G C 49314.70 . AB=0.523755;ABP=102.362;AC=6;AF=0.428571;AN=14;AO=10639;BVAR;CIGAR=1X;DB;DP=26168;DPRA=0;EPP=20.2941;EPPR=15968.8;HWE=27.36;LEN=1;MEANALT=7.71429;MQM=251.192;MQMR=253.005;NS=7;NUMALT=1;ODDS=18.9397;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=15052;RPP=20.2941;RPPR=15968.8;RUN=1;SAP=23105.3;SRP=32688;TYPE=snp;XAI=0.0103845;XAM=0.0142063;XAS=0.00382179;XRI=0.00770109;XRM=0.01166;XRS=0.00395894 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:4:14:-9.3425,-1.21399,-26.936:82.25:101: [...]
+chr22 42522653 . G GG 49314.70 . AB=0.356697;ABP=5746.74;AC=7;AF=0.5;AN=14;AO=11486;BVAR;CIGAR=1M1I;DP=32201;DPRA=0;EPP=24109.1;EPPR=37710.6;HWE=32.3452;LEN=1;MEANALT=8.85714;MQM=252.974;MQMR=250.797;NS=7;NUMALT=1;ODDS=54.8531;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=19298;RPP=24109.1;RPPR=37710.6;RUN=1;SAP=24944.5;SRP=41908.1;TYPE=ins;XAI=0.00769831;XAM=0.012125;XAS=0.00442665;XRI=0.0102852;XRM=0.0150902;XRS=0.00480498 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:8:18:-52.7533,-4.83172,-28.119:8.45:538:268:9 0/ [...]
+chr22 42522665 . G GG 49314.70 . AB=0.339765;ABP=7654.34;AC=7;AF=0.5;AN=14;AO=11657;BVAR;CIGAR=1M1I;DP=34309;DPRA=0;EPP=25107.8;EPPR=41318;HWE=32.3452;LEN=1;MEANALT=6.28571;MQM=253.063;MQMR=249.938;NS=7;NUMALT=1;ODDS=60.2651;PAIRED=0;PAIREDR=0;REPEAT=G:3;RO=22103;RPP=25107.8;RPPR=41318;RUN=1;SAP=25315.9;SRP=47999.1;TYPE=ins;XAI=0.00786963;XAM=0.0126117;XAS=0.00474208;XRI=0.0111531;XRM=0.0160688;XRS=0.00491569 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:6:17:-51.5689,-10.8169,-36.4545:99:458:293:8 0/1:15 [...]
+chr22 42522761 . GG G 49314.70 . AB=0.204235;ABP=20420;AC=7;AF=0.5;AN=14;AO=5488;BVAR;CIGAR=1M1D;DP=26871;DPRA=0;EPP=2628.63;EPPR=38224.7;HWE=32.3452;LEN=1;MEANALT=5.57143;MQM=242.051;MQMR=246.545;NS=7;NUMALT=1;ODDS=41.4976;PAIRED=0;PAIREDR=0;REPEAT=G:4|GGAGG:2;RO=20804;RPP=2628.63;RPPR=38224.7;RUN=1;SAP=11920.1;SRP=45178.3;TYPE=del;XAI=0.0140584;XAM=0.019722;XAS=0.00566356;XRI=0.00767435;XRM=0.0123147;XRS=0.00464034 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:5:14:-18.4,-0.912956,-24.2356:99:200:266:9 [...]
+chr22 42522766 . GG G 49314.70 . AB=0.188312;ABP=20709.7;AC=7;AF=0.5;AN=14;AO=4621;BVAR;CIGAR=1M1D;DP=24539;DPRA=0;EPP=683.074;EPPR=36600.1;HWE=32.3452;LEN=1;MEANALT=7;MQM=199.42;MQMR=246.176;NS=7;NUMALT=1;ODDS=29.82;PAIRED=0;PAIREDR=0;REPEAT=G:4|GGAGG:2;RO=19039;RPP=683.074;RPPR=36600.1;RUN=1;SAP=10037.4;SRP=41345.7;TYPE=del;XAI=0.0164268;XAM=0.025017;XAS=0.00859015;XRI=0.00804322;XRM=0.0126973;XRS=0.00465405 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:3:10:-13.3467,-0.931119,-20.48:99:143:224:7 0/1:51 [...]
+chr22 42522804 . C CC 49314.70 . AB=0.436269;ABP=945.17;AC=7;AF=0.5;AN=14;AO=11651;BVAR;CIGAR=1M1I;DP=26706;DPRA=0;EPP=24827.4;EPPR=29210.9;HWE=32.3452;LEN=1;MEANALT=6.85714;MQM=166.646;MQMR=250.486;NS=7;NUMALT=1;ODDS=66.1659;PAIRED=0;PAIREDR=0;REPEAT=C:4;RO=14852;RPP=24827.4;RPPR=29210.9;RUN=1;SAP=25302.8;SRP=32253.7;TYPE=ins;XAI=0.00729807;XAM=0.0121265;XAS=0.00482838;XRI=0.0100055;XRM=0.0150513;XRS=0.00504574 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:7:17:-40.96,-0.828635,-29.029:99:448:319:10 0/1: [...]
+chr22 42523003 rs116917064 A G 49314.70 . AB=0.468531;ABP=212.109;AC=8;AF=0.571429;AN=14;AO=14108;BVAR;CIGAR=1X;DB;DP=27088;DPRA=0;EPP=652.377;EPPR=1855.41;HWE=27.36;LEN=1;MEANALT=4.14286;MQM=156.904;MQMR=253.368;NS=7;NUMALT=1;ODDS=1.29358;PAIRED=0;PAIREDR=0;REPEAT=A:2;RO=12789;RPP=652.377;RPPR=1855.41;RUN=1;SAP=30638.1;SRP=27774;TYPE=snp;XAI=0.00965842;XAM=0.0142266;XAS=0.0045682;XRI=0.00999007;XRM=0.0136964;XRS=0.00370629 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:8:-2,-1.50515,-24.1371:6.67:20:264 [...]
+chr22 42523024 . G GG 49314.70 . AB=0.483312;ABP=67.2233;AC=7;AF=0.5;AN=14;AO=12830;BVAR;CIGAR=1M1I;DP=26546;DPRA=0;EPP=25392.7;EPPR=27073.2;HWE=32.3452;LEN=1;MEANALT=6.71429;MQM=251.049;MQMR=166.263;NS=7;NUMALT=1;ODDS=38.6958;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=13355;RPP=25392.7;RPPR=27073.2;RUN=1;SAP=27863;SRP=29003;TYPE=ins;XAI=0.00784045;XAM=0.0135446;XAS=0.00570417;XRI=0.00883571;XRM=0.0139225;XRS=0.00508683 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:4:10:-25.9925,-0.688081,-16.9583:99:281:185:6 0/1: [...]
+chr22 42523063 . C CG 49314.70 . AB=0.135326;ABP=37560.2;AC=7;AF=0.5;AN=14;AO=4400;BVAR;CIGAR=1M1I;DP=32514;DPRA=0;EPP=8808.42;EPPR=43500.8;HWE=32.3452;LEN=1;MEANALT=5.42857;MQM=151.564;MQMR=201.235;NS=7;NUMALT=1;ODDS=51.8508;PAIRED=0;PAIREDR=0;REPEAT=CA:2;RO=27776;RPP=8808.42;RPPR=43500.8;RUN=1;SAP=9557.49;SRP=60317.8;TYPE=ins;XAI=0.0122678;XAM=0.0192223;XAS=0.00695447;XRI=0.00950941;XRM=0.014938;XRS=0.00542861 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:6:17:-23.0083,-1.02493,-36.8182:8.45:251:405:11 [...]
+chr22 42523185 . C CC 49314.70 . AB=0.128841;ABP=26211.3;AC=7;AF=0.5;AN=14;AO=2822;BVAR;CIGAR=1M1I;DP=21903;DPRA=0;EPP=6052.98;EPPR=7788.88;HWE=32.3452;LEN=1;MEANALT=6.71429;MQM=253.731;MQMR=252.855;NS=7;NUMALT=1;ODDS=29.2813;PAIRED=0;PAIREDR=0;REPEAT=C:3|CA:2;RO=18639;RPP=6052.98;RPPR=7788.88;RUN=1;SAP=6130.91;SRP=40477.1;TYPE=ins;XAI=0.00972057;XAM=0.0158303;XAS=0.0061097;XRI=0.0100021;XRM=0.0159483;XRS=0.00594616 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:3:9:-26.085,-6.06005,-18.2417:99:228:145:5 0 [...]
+chr22 42523196 . C CC 49314.70 . AB=0.460186;ABP=247.332;AC=7;AF=0.5;AN=14;AO=8166;BVAR;CIGAR=1M1I;DP=17745;DPRA=0;EPP=9884.78;EPPR=14169.1;HWE=32.3452;LEN=1;MEANALT=8.71429;MQM=253.592;MQMR=252.804;NS=7;NUMALT=1;ODDS=5.2249;PAIRED=0;PAIREDR=0;REPEAT=C:5;RO=8565;RPP=9884.78;RPPR=14169.1;RUN=1;SAP=17735.3;SRP=18601.7;TYPE=ins;XAI=0.00805591;XAM=0.0142255;XAS=0.00616964;XRI=0.0093278;XRM=0.0151086;XRS=0.0057808 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:2:4:-15.68,-6.62597,-8.36:22.71:106:26:1 0/1:994:18 [...]
+chr22 42523209 rs28371730 T C 49314.70 . AB=0.443371;ABP=608.264;AC=8;AF=0.571429;AN=14;AO=11957;BVAR;CIGAR=1X;DB;DP=24131;DPRA=0;EPP=4.14371;EPPR=8892.97;HWE=27.36;LEN=1;MEANALT=7;MQM=252.829;MQMR=252.315;NS=7;NUMALT=1;ODDS=24.4923;PAIRED=0;PAIREDR=0;RO=12027;RPP=4.14371;RPPR=8892.97;RUN=1;SAP=25967.3;SRP=26119.3;TYPE=snp;XAI=0.00930025;XAM=0.0151585;XAS=0.00585823;XRI=0.0111776;XRM=0.0150637;XRS=0.00388618 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:5:8:-14.72,-0.660052,-11.2:99:160:120:3 1/1:2323:240 [...]
+chr22 42523211 rs2004511 T C 49314.70 . AB=0.392278;ABP=686.977;AC=2;AF=0.142857;AN=14;AO=2813;BVAR;CIGAR=1X;DB;DP=23200;DPRA=552.214;EPP=1120.17;EPPR=8964.97;HWE=-23.8382;LEN=1;MEANALT=4;MQM=253.316;MQMR=252.359;NS=7;NUMALT=1;ODDS=5.86363;PAIRED=0;PAIREDR=0;REPEAT=T:2;RO=20348;RPP=1120.17;RPPR=8964.97;RUN=1;SAP=6111.36;SRP=44188.1;TYPE=snp;XAI=0.00921625;XAM=0.0154942;XAS=0.00627795;XRI=0.0102368;XRM=0.015941;XRS=0.00570418 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:7:0,-2.10721,-22.2171:25.48:0:243 [...]
+chr22 42523306 . CC C 49314.70 . AB=0.670466;ABP=5206.75;AC=7;AF=0.5;AN=14;AO=13823;BVAR;CIGAR=1M1D;DP=20617;DPRA=0;EPP=15235.1;EPPR=14118.1;HWE=32.3452;LEN=1;MEANALT=6.42857;MQM=252.336;MQMR=251.475;NS=7;NUMALT=1;ODDS=9.07713;PAIRED=0;PAIREDR=0;REPEAT=C:6;RO=6580;RPP=15235.1;RPPR=14118.1;RUN=1;SAP=30019.3;SRP=14291.3;TYPE=del;XAI=0.0103599;XAM=0.0164589;XAS=0.00609902;XRI=0.00627356;XRM=0.012286;XRS=0.00601247 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:7:9:-40.4114,-1.15297,-4.56:39.42:442:48:2 0/1:16 [...]
+chr22 42523409 rs1985842 G T 49314.70 . AB=0.500283;ABP=3.01768;AC=6;AF=0.428571;AN=14;AO=5332;BVAR;CIGAR=1X;DB;DP=13316;DPRA=0;EPP=9214.88;EPPR=15872.5;HWE=27.36;LEN=1;MEANALT=5.14286;MQM=251.425;MQMR=251.591;NS=7;NUMALT=1;ODDS=6.59665;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=7835;RPP=9214.88;RPPR=15872.5;RUN=1;SAP=11581.3;SRP=17016.5;TYPE=snp;XAI=0.0116405;XAM=0.0175057;XAS=0.00586523;XRI=0.0107482;XRM=0.0156757;XRS=0.00492748 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:3:4:-11.2,-0.60206,-3.4:28.65:120:34:1 [...]
+chr22 42523491 . C T 42.82 . AB=0.4;ABP=3.44459;AC=1;AF=0.0714286;AN=14;AO=40;BVAR;CIGAR=1X;DP=24032;DPRA=0;EPP=3.87889;EPPR=2107.06;HWE=-19.2686;LEN=1;MEANALT=3.71429;MQM=251.675;MQMR=250.58;NS=7;NUMALT=1;ODDS=9.85952;PAIRED=0;PAIREDR=0;RO=23947;RPP=3.87889;RPPR=2107.06;RUN=1;SAP=89.8692;SRP=52003.3;TYPE=snp;XAI=0.00950034;XAM=0.0156976;XAS=0.00619727;XRI=0.0104341;XRM=0.0159446;XRS=0.0055105 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:2:5:-7.6,-0.50515,-10.08:42.82:80:108:3 0/0:6:2916:-51.3754,-892.60 [...]
+chr22 42523507 . A G 15.11 . AB=0.333333;ABP=4.45795;AC=1;AF=0.0714286;AN=14;AO=16;BVAR;CIGAR=1X;DP=18969;DPRA=0;EPP=22.5536;EPPR=4590.81;HWE=-19.2686;LEN=1;MEANALT=5.14286;MQM=254;MQMR=251.143;NS=7;NUMALT=1;ODDS=3.44697;PAIRED=0;PAIREDR=0;RO=18762;RPP=22.5536;RPPR=4590.81;RUN=1;SAP=37.7539;SRP=40744.2;TYPE=snp;XAI=0.00640924;XAM=0.0136914;XAS=0.0072822;XRI=0.00854323;XRM=0.013902;XRS=0.00535874 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:2:6:-4.94,-0.630089,-12.3025:15.11:52:133:4 0/0:1:2288:-84.8712,- [...]
+chr22 42523523 . C CC 49314.70 . AB=0.422182;ABP=1257.85;AC=7;AF=0.5;AN=14;AO=10072;BVAR;CIGAR=1M1I;DP=23857;DPRA=0;EPP=20021.5;EPPR=26154.3;HWE=32.3452;LEN=1;MEANALT=9;MQM=253.268;MQMR=248.843;NS=7;NUMALT=1;ODDS=22.9683;PAIRED=0;PAIREDR=0;REPEAT=C:4;RO=13562;RPP=20021.5;RPPR=26154.3;RUN=1;SAP=21874.1;SRP=29452.5;TYPE=ins;XAI=0.00682993;XAM=0.0109511;XAS=0.00412119;XRI=0.0113604;XRM=0.0177437;XRS=0.00638338 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:2:6:-10.07,-0.630089,-11.84:99:106:128:4 0/1:1134:289 [...]
+chr22 42523562 . G GG,GGG 49314.70 . AB=0.614797,0.149956;ABP=1440.34,13367.3;AC=7,4;AF=0.5,0.285714;AN=14;AO=7720,1883;BVAR;CIGAR=1M1I,1M2I;DP=12557;DPRA=0,0;EPP=16766.8,4091.89;EPPR=337.212;HWE=26.0206;LEN=1,2;MEANALT=6,6;MQM=253.984,253.971;MQMR=253.984;NS=7;NUMALT=2;ODDS=2.30259;PAIRED=0,0;PAIREDR=0;REPEAT=G:3;RO=2882;RPP=16766.8,4091.89;RPPR=337.212;RUN=1,1;SAP=16766.8,4091.89;SRP=6261.19;TYPE=ins,ins;XAI=0.00633177,0.00852945;XAM=0.0107965,0.0123093;XAS=0.0044647,0.00377989;XRI=0.0 [...]
+chr22 42523765 . GG G 49314.70 . AB=0.209644;ABP=25864.9;AC=7;AF=0.5;AN=14;AO=7404;BVAR;CIGAR=1M1D;DP=35317;DPRA=0;EPP=15538;EPPR=43222.2;HWE=32.3452;LEN=1;MEANALT=5.71429;MQM=253.504;MQMR=244.529;NS=7;NUMALT=1;ODDS=30.5173;PAIRED=0;PAIREDR=0;REPEAT=G:3;RO=27735;RPP=15538;RPPR=43222.2;RUN=1;SAP=16080.6;SRP=60228.8;TYPE=del;XAI=0.00361575;XAM=0.00855302;XAS=0.00493727;XRI=0.00838546;XRM=0.0135256;XRS=0.00514013 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:7:12:-49.1886,-0.713635,-13.432:99:538:146:5 0/1:1 [...]
+chr22 42523805 rs28371725 C T 49314.70 . AB=0.490053;ABP=9.96529;AC=1;AF=0.0714286;AN=14;AO=4049;BVAR;CIGAR=1X;DB;DP=39296;DPRA=545.611;EPP=43.5679;EPPR=70030.6;HWE=-19.2686;LEN=1;MEANALT=3;MQM=241.321;MQMR=240.745;NS=7;NUMALT=1;ODDS=10.1095;PAIRED=0;PAIREDR=0;REPEAT=C:2|CCTC:2;RO=34673;RPP=43.5679;RPPR=70030.6;RUN=1;SAP=8795.3;SRP=75294.5;TYPE=snp;XAI=0.00796587;XAM=0.0123204;XAS=0.00435452;XRI=0.00808879;XRM=0.0131576;XRS=0.00506879 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:12:0,-3.61236,-37.8775: [...]
+chr22 42523943 rs16947 A G 49314.70 . AB=0.498768;ABP=3.30997;AC=8;AF=0.571429;AN=14;AO=14312;BVAR;CIGAR=1X;DB;DP=25739;DPRA=0;EPP=20419;EPPR=18782.2;HWE=27.36;LEN=1;MEANALT=4.57143;MQM=250.554;MQMR=249.993;NS=7;NUMALT=1;ODDS=39.6117;PAIRED=0;PAIREDR=0;RO=11356;RPP=20419;RPPR=18782.2;RUN=1;SAP=31081.1;SRP=24662.3;TYPE=snp;XAI=0.00694555;XAM=0.010946;XAS=0.00400042;XRI=0.00718971;XRM=0.0117448;XRS=0.00455509 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:5:13:-17.94,-0.803811,-27.5575:99:195:302:8 1/1:2978: [...]
+chr22 42524125 . T TC 1922.92 . AB=0.0643815;ABP=5532.94;AC=6;AF=0.428571;AN=14;AO=256;BVAR;CIGAR=1M1I;DP=4258;DPRA=0;EPP=541.671;EPPR=916.312;HWE=27.36;LEN=1;MEANALT=3.14286;MQM=250.219;MQMR=252.402;NS=7;NUMALT=1;ODDS=4.50814;PAIRED=0;PAIREDR=0;RO=3975;RPP=541.671;RPPR=916.312;RUN=1;SAP=558.907;SRP=8634.61;TYPE=ins;XAI=0.0114249;XAM=0.0189039;XAS=0.00747896;XRI=0.00845069;XRM=0.0142448;XRS=0.00579416 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:2:-3.9,-0.30103,-2.3:20.64:39:23:1 0/1:28:522:-136.59,-13 [...]
+chr22 42524134 . C CC 662.48 . AB=0.0684444;ABP=1822.88;AC=3;AF=0.214286;AN=14;AO=192;BVAR;CIGAR=1M1I;DP=3714;DPRA=0;EPP=257.48;EPPR=1554.36;HWE=-21.3394;LEN=1;MEANALT=1.71429;MQM=249.286;MQMR=251.184;NS=7;NUMALT=1;ODDS=1.20397;PAIRED=0;PAIREDR=0;RO=3512;RPP=257.48;RPPR=1554.36;RUN=1;SAP=419.933;SRP=7629.22;TYPE=ins;XAI=0.015472;XAM=0.0233643;XAS=0.00789225;XRI=0.00824063;XRM=0.0138378;XRS=0.00559712 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:1:-4.9,-0.30103,0:1.14:49:0:0 0/0:19:455:-67.3516,-103.717 [...]
+chr22 42524154 . CC C 49314.70 . AB=0.783933;ABP=2164.64;AC=8;AF=0.571429;AN=14;AO=2423;BVAR;CIGAR=1M1D;DP=3090;DPRA=0;EPP=1304.3;EPPR=644.489;HWE=27.36;LEN=1;MEANALT=4;MQM=244.278;MQMR=251.367;NS=7;NUMALT=1;ODDS=0.847298;PAIRED=0;PAIREDR=0;REPEAT=C:6;RO=583;RPP=1304.3;RPPR=644.489;RUN=1;SAP=5264.49;SRP=1268.98;TYPE=del;XAI=0.00632062;XAM=0.0109849;XAS=0.00466423;XRI=0.00660059;XRM=0.0128321;XRS=0.00623154 GT:AO:DP:GL:GQ:QA:QR:RO 1/1:3:3:-17.64,-0.90309,0:5.23:189:0:0 0/1:291:409:-1689.4 [...]
+chr22 42524220 . G GG 37790.70 . AB=0.237258;ABP=2661.72;AC=7;AF=0.5;AN=14;AO=1052;BVAR;CIGAR=1M1I;DP=4434;DPRA=0;EPP=1002.91;EPPR=1209.82;HWE=32.3452;LEN=1;MEANALT=9;MQM=243.04;MQMR=246.215;NS=7;NUMALT=1;ODDS=9.43863;PAIRED=0;PAIREDR=0;REPEAT=G:7|GGCTG:2;RO=2480;RPP=1002.91;RPPR=1209.82;RUN=1;SAP=2287.4;SRP=5388.26;TYPE=ins;XAI=0.00843152;XAM=0.0141226;XAS=0.00569112;XRI=0.00475483;XRM=0.0098892;XRS=0.00513437 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:2:4:-7.695,-0.425969,-3.99:40.99:81:42:2 0/1:170: [...]
+chr22 42524225 . G GG 50000 . AB=0.124393;ABP=17173.4;AC=7;AF=0.5;AN=14;AO=1743;BVAR;CIGAR=1M1I;DP=14012;DPRA=0;EPP=3180.37;EPPR=2781.27;HWE=32.3452;LEN=1;MEANALT=4.14286;MQM=251.594;MQMR=245.506;NS=7;NUMALT=1;ODDS=25.0682;PAIRED=0;PAIREDR=0;REPEAT=G:3|GCTGG:2;RO=12201;RPP=3180.37;RPPR=2781.27;RUN=1;SAP=3787.89;SRP=26497.1;TYPE=ins;XAI=0.00477562;XAM=0.00926508;XAS=0.00448945;XRI=0.00536601;XRM=0.0103327;XRS=0.00496664 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:3:7:-14.4667,-0.563142,-10.915:99:155:118 [...]
+chr22 42524243 rs35742686 CT C 49314.70 . AB=0.526007;ABP=57.1122;AC=2;AF=0.142857;AN=14;AO=4893;BVAR;CIGAR=1M1D;DB;DP=25972;DPRA=216.267;EPP=4874.05;EPPR=6888.19;HWE=-23.8382;LEN=1;MEANALT=8.16667;MQM=242.968;MQMR=248.576;NS=7;NUMALT=1;ODDS=14.8745;PAIRED=0;PAIREDR=0;REPEAT=C:2;RO=20851;RPP=4874.05;RPPR=6888.19;RUN=1;SAP=10628;SRP=45280.4;TYPE=del;XAI=0.00482024;XAM=0.0093771;XAS=0.00455685;XRI=0.00466854;XRM=0.0095398;XRS=0.00487126 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:20:0,-6.0206,-58.3725:6 [...]
+chr22 42524331 . GG G 49314.70 . AB=0.218956;ABP=20169.1;AC=6;AF=0.428571;AN=14;AO=6436;BVAR;CIGAR=1M1D;DP=29409;DPRA=326.6;EPP=11204.7;EPPR=26976;HWE=27.36;LEN=1;MEANALT=7.16667;MQM=249.563;MQMR=247.755;NS=7;NUMALT=1;ODDS=8.47192;PAIRED=0;PAIREDR=0;REPEAT=G:2|GGA:2;RO=22684;RPP=11204.7;RPPR=26976;RUN=1;SAP=13978.6;SRP=49260.7;TYPE=del;XAI=0.00766115;XAM=0.0116377;XAS=0.00397653;XRI=0.00510003;XRM=0.00998322;XRS=0.0048832 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:15:-2.2,-6.41442,-35.4507:36.79:0:36 [...]
+chr22 42524372 . G GG 49314.70 . AB=0.265532;ABP=12738.7;AC=7;AF=0.5;AN=14;AO=7082;BVAR;CIGAR=1M1I;DP=26671;DPRA=0;EPP=8641.95;EPPR=15220.2;HWE=32.3452;LEN=1;MEANALT=6.14286;MQM=253.632;MQMR=253.662;NS=7;NUMALT=1;ODDS=44.887;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=19434;RPP=8641.95;RPPR=15220.2;RUN=1;SAP=15381.4;SRP=42203.4;TYPE=ins;XAI=0.00872115;XAM=0.0131603;XAS=0.00443912;XRI=0.00377633;XRM=0.00840894;XRS=0.00463262 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:5:14:-19.872,-0.912956,-24.3267:99:216:267:9 0/ [...]
+chr22 42524435 rs1807313 T A 49314.70 . AB=0.479859;ABP=48.8463;AC=3;AF=0.214286;AN=14;AO=6305;BVAR;CIGAR=1X;DB;DP=41439;DPRA=0;EPP=109.862;EPPR=13682;HWE=-21.3394;LEN=1;MEANALT=4.71429;MQM=252.852;MQMR=252.696;NS=7;NUMALT=1;ODDS=51.6265;PAIRED=0;PAIREDR=0;RO=34828;RPP=109.862;RPPR=13682;RUN=1;SAP=13694.1;SRP=75631.1;TYPE=snp;XAI=0.0056246;XAM=0.00955321;XAS=0.00392861;XRI=0.00593171;XRM=0.0101544;XRS=0.00422268 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:16:23:-53.5594,-1.53425,-23.1314:99:591:253:7 0/ [...]
+chr22 42524445 . G GG 49314.70 . AB=0.379303;ABP=5277.84;AC=7;AF=0.5;AN=14;AO=15812;BVAR;CIGAR=1M1I;DP=41687;DPRA=0;EPP=34078.2;EPPR=46753.2;HWE=32.3452;LEN=1;MEANALT=9.71429;MQM=253.91;MQMR=251.322;NS=7;NUMALT=1;ODDS=40.6431;PAIRED=0;PAIREDR=0;REPEAT=G:3|GCCT:2;RO=24505;RPP=34078.2;RPPR=46753.2;RUN=1;SAP=34338.3;SRP=53214.9;TYPE=ins;XAI=0.00628566;XAM=0.0106844;XAS=0.00439872;XRI=0.00458619;XRM=0.00933889;XRS=0.0047527 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:3:25:-21.28,-4.16402,-65.2177:99:228:721 [...]
+chr22 42524696 rs58440431 T C 49314.70 . AB=0.48713;ABP=24.4184;AC=2;AF=0.142857;AN=14;AO=7488;BVAR;CIGAR=1X;DB;DP=46275;DPRA=856.778;EPP=187.679;EPPR=39404.3;HWE=-23.8382;LEN=1;MEANALT=7;MQM=248.314;MQMR=247.047;NS=7;NUMALT=1;ODDS=7.24993;PAIRED=0;PAIREDR=0;RO=38638;RPP=187.679;RPPR=39404.3;RUN=1;SAP=16263;SRP=83904.4;TYPE=snp;XAI=0.00819389;XAM=0.013411;XAS=0.00521709;XRI=0.00903367;XRM=0.0138483;XRS=0.00481465 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:9:0,-2.70927,-29.8844:31.49:0:328:9 0/1:2783: [...]
+chr22 42524768 . C T 9.39 . AB=0.5;ABP=3.0103;AC=1;AF=0.0714286;AN=14;AO=48;BVAR;CIGAR=1X;DP=22984;DPRA=0;EPP=4.6389;EPPR=12109.5;HWE=-19.2686;LEN=1;MEANALT=2.85714;MQM=253.438;MQMR=252.043;NS=7;NUMALT=1;ODDS=2.04022;PAIRED=0;PAIREDR=0;RO=22899;RPP=4.6389;RPPR=12109.5;RUN=1;SAP=107.241;SRP=49727.6;TYPE=snp;XAI=0.00658074;XAM=0.011627;XAS=0.00504627;XRI=0.00777981;XRM=0.0128159;XRS=0.00503609 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:2:-4,-0.30103,-3:9.39:40:30:1 0/0:5:2707:-42.3636,-823.672,-8680.23 [...]
+chr22 42524941 . GG G 25077.30 . AB=0.0745004;ABP=26367.3;AC=7;AF=0.5;AN=14;AO=1249;BVAR;CIGAR=1M1D;DP=16765;DPRA=0;EPP=962.785;EPPR=31681.6;HWE=32.3452;LEN=1;MEANALT=8.42857;MQM=245.153;MQMR=251.042;NS=7;NUMALT=1;ODDS=8.36779;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=15343;RPP=962.785;RPPR=31681.6;RUN=1;SAP=2715.18;SRP=33319.9;TYPE=del;XAI=0.0177436;XAM=0.026387;XAS=0.00864343;XRI=0.00476137;XRM=0.00965079;XRS=0.00488941 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:2:-4.4,-0.30103,-3.4:35.93:44:34:1 0/1:162:19 [...]
+chr22 42524947 rs3892097 C T 49314.70 . AB=0.459977;ABP=86.6172;AC=2;AF=0.142857;AN=14;AO=2801;BVAR;CIGAR=1X;DB;DP=19689;DPRA=1640.58;EPP=5175.39;EPPR=33587.5;HWE=-23.8382;LEN=1;MEANALT=7.33333;MQM=250.725;MQMR=250.786;NS=7;NUMALT=1;ODDS=2.3979;PAIRED=0;PAIREDR=0;REPEAT=C:2;RO=16272;RPP=5175.39;RPPR=33587.5;RUN=1;SAP=6085.3;SRP=35337.2;TYPE=snp;XAI=0.00513308;XAM=0.0107355;XAS=0.00560246;XRI=0.00544547;XRM=0.00976638;XRS=0.00432091 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:2:0,-0.60206,-5.7:10.79:0: [...]
+chr22 42524965 . GG G 49314.70 . AB=0.409009;ABP=523.446;AC=7;AF=0.5;AN=14;AO=2960;BVAR;CIGAR=1M1D;DP=7237;DPRA=0;EPP=3067.97;EPPR=5962.58;HWE=32.3452;LEN=1;MEANALT=4;MQM=249.276;MQMR=246.491;NS=7;NUMALT=1;ODDS=9.74934;PAIRED=0;PAIREDR=0;REPEAT=G:3;RO=4222;RPP=3067.97;RPPR=5962.58;RUN=1;SAP=6430.57;SRP=9170.97;TYPE=del;XAI=0.0114242;XAM=0.017162;XAS=0.00573776;XRI=0.00639741;XRM=0.0125077;XRS=0.00611032 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:2:-5.2,-0.30103,-4:42.08:52:40:1 0/1:383:871:-1926.73,- [...]
+chr22 42524972 . GG G 49314.70 . AB=0.248782;ABP=5403.59;AC=7;AF=0.5;AN=14;AO=2451;BVAR;CIGAR=1M1D;DP=9853;DPRA=0;EPP=249.065;EPPR=13651.1;HWE=32.3452;LEN=1;MEANALT=4.83333;MQM=231.95;MQMR=250.585;NS=7;NUMALT=1;ODDS=0.538997;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=7344;RPP=249.065;RPPR=13651.1;RUN=1;SAP=5325.29;SRP=15950.3;TYPE=del;XAI=0.0124679;XAM=0.0193205;XAS=0.00685267;XRI=0.00528277;XRM=0.0110049;XRS=0.00572215 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:0:1:0,-0.30103,-3.4:2:0:34:1 0/1:93:1262:-447.769, [...]
+chr22 42524983 . CC C 49314.70 . AB=0.457204;ABP=129.209;AC=7;AF=0.5;AN=14;AO=3627;BVAR;CIGAR=1M1D;DP=7933;DPRA=0;EPP=368.192;EPPR=8636.77;HWE=32.3452;LEN=1;MEANALT=4.42857;MQM=228.596;MQMR=252.293;NS=7;NUMALT=1;ODDS=8.36779;PAIRED=0;PAIREDR=0;REPEAT=C:4;RO=4232;RPP=368.192;RPPR=8636.77;RUN=1;SAP=7878.94;SRP=9192.68;TYPE=del;XAI=0.0125058;XAM=0.0192024;XAS=0.00669657;XRI=0.00343157;XRM=0.00866831;XRS=0.00523675 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:2:-3.6,-0.30103,-3.4:34.22:36:34:1 0/1:592:1016 [...]
+chr22 42524990 . CC C 49314.70 . AB=0.342402;ABP=2548.44;AC=7;AF=0.5;AN=14;AO=4040;BVAR;CIGAR=1M1D;DP=11799;DPRA=0;EPP=894.681;EPPR=14976.8;HWE=32.3452;LEN=1;MEANALT=4.28571;MQM=205.035;MQMR=245.649;NS=7;NUMALT=1;ODDS=6.98623;PAIRED=0;PAIREDR=0;REPEAT=C:5;RO=7652;RPP=894.681;RPPR=14976.8;RUN=1;SAP=8775.76;SRP=16619.1;TYPE=del;XAI=0.0104144;XAM=0.0171794;XAS=0.00676494;XRI=0.00371427;XRM=0.00906809;XRS=0.00535382 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:2:-4.2,-0.30103,-2.8:30.18:42:28:1 0/1:356:130 [...]
+chr22 42525126 . G T 71.67 . AB=0.375;ABP=4.09604;AC=1;AF=0.0714286;AN=14;AO=18;BVAR;CIGAR=1X;DP=32571;DPRA=0.895662;EPP=3.49285;EPPR=16183.4;HWE=-19.2686;LEN=1;MEANALT=2.66667;MQM=234.889;MQMR=229.973;NS=7;NUMALT=1;ODDS=16.5027;PAIRED=0;PAIREDR=0;REPEAT=G:2;RO=32476;RPP=3.49285;RPPR=16183.4;RUN=1;SAP=42.0968;SRP=70523.7;TYPE=snp;XAI=0.00437732;XAM=0.00953285;XAS=0.00515554;XRI=0.00609047;XRM=0.0119027;XRS=0.00581226 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:3:8:-10.64,-0.660052,-15.824:71.67:114:172: [...]
+chr22 42525132 rs1058164 G C 49314.70 . AB=0.487091;ABP=41.8074;AC=5;AF=0.357143;AN=14;AO=13090;BVAR;CIGAR=1X;DB;DP=33870;DPRA=806.262;EPP=1840.32;EPPR=15069.3;HWE=3.0103;LEN=1;MEANALT=6.5;MQM=233.472;MQMR=228.746;NS=7;NUMALT=1;ODDS=4.62889;PAIRED=0;PAIREDR=0;REPEAT=GA:2;RO=20537;RPP=1840.32;RPPR=15069.3;RUN=1;SAP=28427.6;SRP=44598.5;TYPE=snp;XAI=0.00622685;XAM=0.0105876;XAS=0.00436075;XRI=0.00634881;XRM=0.0110669;XRS=0.00471811 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:7:0,-2.10721,-24.8686:20.15:0 [...]
+chr22 42525194 . G GG 49314.70 . AB=0.863495;ABP=11411.8;AC=8;AF=0.571429;AN=14;AO=8587;BVAR;CIGAR=1M1I;DP=9944;DPRA=0;EPP=18649.4;EPPR=82.0485;HWE=27.36;LEN=1;MEANALT=4.85714;MQM=253.157;MQMR=253.974;NS=7;NUMALT=1;ODDS=0.847298;PAIRED=0;PAIREDR=0;REPEAT=G:5;RO=1034;RPP=18649.4;RPPR=82.0485;RUN=1;SAP=18649.4;SRP=2248.31;TYPE=ins;XAI=0.0092712;XAM=0.0142014;XAS=0.00493025;XRI=0.00279276;XRM=0.0107418;XRS=0.00794905 GT:AO:DP:GL:GQ:QA:QR:RO 1/1:3:3:-16.0533,-0.90309,0:5.31:172:0:0 0/1:1087: [...]
+chr22 42525197 . GG G 23022.80 . AB=0.0995978;ABP=7273.45;AC=7;AF=0.5;AN=14;AO=520;BVAR;CIGAR=1M1D;DP=5221;DPRA=0;EPP=1123.51;EPPR=506.409;HWE=32.3452;LEN=1;MEANALT=6.28571;MQM=253.763;MQMR=253.784;NS=7;NUMALT=1;ODDS=7.44675;PAIRED=0;PAIREDR=0;REPEAT=G:3;RO=4305;RPP=1123.51;RPPR=506.409;RUN=1;SAP=1132.18;SRP=9351.2;TYPE=del;XAI=0.00898714;XAM=0.0170326;XAS=0.00804546;XRI=0.00641878;XRM=0.0121688;XRS=0.00575 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:2:-11.5,-0.30103,-3:32.34:115:30:1 0/1:68:683:-499. [...]
+chr22 42525244 . CC C 153.81 . AB=0.5;ABP=3.0103;AC=1;AF=0.0714286;AN=14;AO=179;BVAR;CIGAR=1M1D;DP=20257;DPRA=0;EPP=391.704;EPPR=1121.61;HWE=-19.2686;LEN=1;MEANALT=5.57143;MQM=253.782;MQMR=253.794;NS=7;NUMALT=1;ODDS=16.1969;PAIRED=0;PAIREDR=0;REPEAT=C:2|CCA:2|CCAC:2;RO=19606;RPP=391.704;RPPR=1121.61;RUN=1;SAP=391.704;SRP=42576.9;TYPE=del;XAI=0.0132774;XAM=0.0192844;XAS=0.00600703;XRI=0.00689978;XRM=0.0118897;XRS=0.00498992 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:2:4:-18.62,-0.425969,-6.08:70.34:196: [...]
+chr22 42525351 . G GG 49314.70 . AB=0.588484;ABP=2284.88;AC=7;AF=0.5;AN=14;AO=19746;BVAR;CIGAR=1M1I;DP=33554;DPRA=0;EPP=41451.2;EPPR=22703.2;HWE=32.3452;LEN=1;MEANALT=8;MQM=253.763;MQMR=248.291;NS=7;NUMALT=1;ODDS=11.3493;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=13144;RPP=41451.2;RPPR=22703.2;RUN=1;SAP=42880.9;SRP=28544.8;TYPE=ins;XAI=0.00982964;XAM=0.0136368;XAS=0.0038072;XRI=0.010348;XRM=0.0161958;XRS=0.00584775 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:5:-5.2,-0.80618,-12.025:49.29:52:130:4 0/1:2516:4182: [...]
+chr22 42525356 . G GG 49314.70 . AB=0.316695;ABP=9860.92;AC=7;AF=0.5;AN=14;AO=10697;BVAR;CIGAR=1M1I;DP=33777;DPRA=0;EPP=22260.1;EPPR=16696.5;HWE=32.3452;LEN=1;MEANALT=9.71429;MQM=253.687;MQMR=252.72;NS=7;NUMALT=1;ODDS=10.198;PAIRED=0;PAIREDR=0;REPEAT=G:3;RO=18797;RPP=22260.1;RPPR=16696.5;RUN=1;SAP=23231.3;SRP=40820.2;TYPE=ins;XAI=0.00761128;XAM=0.0112169;XAS=0.00360561;XRI=0.00693026;XRM=0.0120364;XRS=0.00510618 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:5:-4.7,-0.80618,-13.32:6.28:47:144:4 0/1:1258: [...]
+chr22 42525418 . G T 27.33 . AB=0.333333;ABP=4.45795;AC=1;AF=0.0714286;AN=14;AO=2;BVAR;CIGAR=1X;DP=35864;DPRA=0.00100396;EPP=7.35324;EPPR=34354.7;HWE=-19.2686;LEN=1;MEANALT=1;MQM=254;MQMR=248.729;NS=7;NUMALT=1;ODDS=6.29066;PAIRED=0;PAIREDR=0;REPEAT=G:3;RO=35629;RPP=7.35324;RPPR=34354.7;RUN=1;SAP=7.35324;SRP=77370.4;TYPE=snp;XAI=0.00842813;XAM=0.00842813;XAS=0;XRI=0.0109442;XRM=0.0155782;XRS=0.00463398 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:2:6:-6.175,-0.630089,-12.6725:27.33:65:137:4 0/0:0:4534:-11 [...]
+chr22 42525455 . C CC 49314.70 . AB=0.303027;ABP=14051.1;AC=7;AF=0.5;AN=14;AO=12632;BVAR;CIGAR=1M1I;DP=41686;DPRA=0;EPP=60.4402;EPPR=25491.5;HWE=32.3452;LEN=1;MEANALT=6.57143;MQM=220.658;MQMR=251.903;NS=7;NUMALT=1;ODDS=13.8318;PAIRED=0;PAIREDR=0;RO=28765;RPP=60.4402;RPPR=25491.5;RUN=1;SAP=27433;SRP=62465.4;TYPE=ins;XAI=0.0337375;XAM=0.0412115;XAS=0.00747399;XRI=0.00638066;XRM=0.0110039;XRS=0.00462327 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:6:-6.5,-1.02803,-13.892:60.07:65:151:5 0/1:1526:5167:-6537 [...]
+chr22 42525461 . CC C 49314.70 . AB=0.590029;ABP=1697.57;AC=7;AF=0.5;AN=14;AO=14202;BVAR;CIGAR=1M1D;DP=24070;DPRA=0;EPP=12737;EPPR=18860.8;HWE=32.3452;LEN=1;MEANALT=9;MQM=249.671;MQMR=245.185;NS=7;NUMALT=1;ODDS=12.4686;PAIRED=0;PAIREDR=0;REPEAT=C:4;RO=9294;RPP=12737;RPPR=18860.8;RUN=1;SAP=30842.3;SRP=20184.7;TYPE=del;XAI=0.00975033;XAM=0.0149798;XAS=0.00522945;XRI=0.00927598;XRM=0.0149942;XRS=0.00571821 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:4:6:-12.21,-0.630089,-5.51:54.15:132:58:2 0/1:1784:2943:- [...]
+chr22 42525468 . CC C 49314.70 . AB=0.574154;ABP=1687.65;AC=6;AF=0.428571;AN=14;AO=20251;BVAR;CIGAR=1M1D;DP=35275;DPRA=1469.62;EPP=1750.54;EPPR=24792.3;HWE=27.36;LEN=1;MEANALT=11.6667;MQM=233.651;MQMR=239.818;NS=7;NUMALT=1;ODDS=1.54045;PAIRED=0;PAIREDR=0;REPEAT=C:6;RO=13843;RPP=1750.54;RPPR=24792.3;RUN=1;SAP=43977.5;SRP=30062.7;TYPE=del;XAI=0.0194357;XAM=0.0253129;XAS=0.00587726;XRI=0.00584761;XRM=0.0108135;XRS=0.00496586 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:4:0,-1.20412,-8.7875:7.53:0:95:4 0/1 [...]
+chr22 42525513 . C CC 49314.70 . AB=0.206594;ABP=33771.8;AC=7;AF=0.5;AN=14;AO=9330;BVAR;CIGAR=1M1I;DP=45161;DPRA=0;EPP=19813.7;EPPR=39132.6;HWE=32.3452;LEN=1;MEANALT=8.28571;MQM=253.79;MQMR=250.76;NS=7;NUMALT=1;ODDS=11.4556;PAIRED=0;PAIREDR=0;REPEAT=C:3;RO=34562;RPP=19813.7;RPPR=39132.6;RUN=1;SAP=20262.8;SRP=75053.4;TYPE=ins;XAI=0.00498178;XAM=0.00975723;XAS=0.00477545;XRI=0.0111556;XRM=0.0157294;XRS=0.00457385 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:5:7:-33.488,-0.784991,-5.225:6.28:364:55:2 0/1:10 [...]
+chr22 42525772 rs28371706 G A 49314.70 . AB=0.516246;ABP=41.4639;AC=4;AF=0.285714;AN=14;AO=8718;BVAR;CIGAR=1X;DB;DP=36411;DPRA=0;EPP=2256.69;EPPR=45790.1;HWE=-12.5527;LEN=1;MEANALT=4.28571;MQM=251.436;MQMR=251.588;NS=7;NUMALT=1;ODDS=15.538;PAIRED=0;PAIREDR=0;REPEAT=G:3;RO=27536;RPP=2256.69;RPPR=45790.1;RUN=1;SAP=18933.9;SRP=59796.7;TYPE=snp;XAI=0.00870035;XAM=0.0128199;XAS=0.00411958;XRI=0.00766392;XRM=0.0131876;XRS=0.00552367 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:2:6:-7.6,-0.630089,-14.43:67.48:8 [...]
+chr22 42525798 rs28371705 G C 49314.70 . AB=0.446311;ABP=296.568;AC=2;AF=0.142857;AN=14;AO=5266;BVAR;CIGAR=1X;DB;DP=39879;DPRA=738.333;EPP=1884.39;EPPR=51306.4;HWE=-23.8382;LEN=1;MEANALT=4.66667;MQM=251.771;MQMR=250.474;NS=7;NUMALT=1;ODDS=7.24993;PAIRED=0;PAIREDR=0;REPEAT=G:2;RO=34418;RPP=1884.39;RPPR=51306.4;RUN=1;SAP=11438;SRP=74740.7;TYPE=snp;XAI=0.00757556;XAM=0.0158367;XAS=0.00826114;XRI=0.00839166;XRM=0.0134937;XRS=0.00510199 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:9:0,-2.70927,-28.8822:31.4 [...]
+chr22 42525811 rs28371704 T C 49314.70 . AB=0.440145;ABP=372.917;AC=2;AF=0.142857;AN=14;AO=5326;BVAR;CIGAR=1X;DB;DP=40392;DPRA=841.333;EPP=1863.19;EPPR=52237.8;HWE=-23.8382;LEN=1;MEANALT=7.16667;MQM=251.788;MQMR=250.169;NS=7;NUMALT=1;ODDS=6.55678;PAIRED=0;PAIREDR=0;RO=34870;RPP=1863.19;RPPR=52237.8;RUN=1;SAP=11568.3;SRP=75722.3;TYPE=snp;XAI=0.00761474;XAM=0.0158167;XAS=0.00820192;XRI=0.00847482;XRM=0.0135879;XRS=0.00511305 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:8:0,-2.40824,-26.4625:28.48:0:290:8 [...]
+chr22 42525821 rs28371703 G T 49314.70 . AB=0.430211;ABP=526.447;AC=2;AF=0.142857;AN=14;AO=5356;BVAR;CIGAR=1X;DB;DP=42468;DPRA=884.583;EPP=2234.37;EPPR=48344.8;HWE=-23.8382;LEN=1;MEANALT=6.33333;MQM=251.326;MQMR=249.903;NS=7;NUMALT=1;ODDS=6.55678;PAIRED=0;PAIREDR=0;REPEAT=GC:2;RO=36935;RPP=2234.37;RPPR=48344.8;RUN=1;SAP=11633.4;SRP=80206.3;TYPE=snp;XAI=0.00792717;XAM=0.016185;XAS=0.00825781;XRI=0.00875497;XRM=0.0139492;XRS=0.00519421 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:8:0,-2.40824,-27.1925:28 [...]
+chr22 42525889 . AC A 819.44 . AB=0.0376186;ABP=5679.9;AC=2;AF=0.142857;AN=14;AO=605;BVAR;CIGAR=1M1D;DP=18424;DPRA=0;EPP=19.1223;EPPR=7660.07;HWE=-23.8382;LEN=1;MEANALT=6.28571;MQM=208.195;MQMR=236.841;NS=7;NUMALT=1;ODDS=5.51672;PAIRED=0;PAIREDR=0;REPEAT=AC:2;RO=17360;RPP=19.1223;RPPR=7660.07;RUN=1;SAP=1316.75;SRP=37699.8;TYPE=del;XAI=0.0134462;XAM=0.0212868;XAS=0.0078406;XRI=0.0108217;XRM=0.017876;XRS=0.00705427 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:3:-3.6,-0.425969,-5.51:9.03:36:58:2 0/0:67:19 [...]
+chr22 42525895 . CC C 49314.70 . AB=0.135925;ABP=19196.7;AC=7;AF=0.5;AN=14;AO=2266;BVAR;CIGAR=1M1D;DP=16671;DPRA=0;EPP=4590.65;EPPR=18703.8;HWE=32.3452;LEN=1;MEANALT=5.14286;MQM=202.108;MQMR=245.728;NS=7;NUMALT=1;ODDS=0.538997;PAIRED=0;PAIREDR=0;REPEAT=C:4;RO=12758;RPP=4590.65;RPPR=18703.8;RUN=1;SAP=4923.57;SRP=27706.7;TYPE=del;XAI=0.0129141;XAM=0.0205811;XAS=0.00766697;XRI=0.0103281;XRM=0.0171763;XRS=0.00684816 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:1:-4.7,-0.30103,0:0.54:47:0:0 0/1:202:1774:-13 [...]
+chr22 42525920 . GG G,GGG 11254.60 . AB=0.0450071,0.0479375;ABP=23934.5,23627.2;AC=4,4;AF=0.285714,0.285714;AN=14;AO=599,638;BVAR;CIGAR=1M1D,2M1I;DP=13309;DPRA=0,0;EPP=92.3669,1269.48;EPPR=14554.2;HWE=2.9073;LEN=1,1;MEANALT=6.71429,6.71429;MQM=189.593,207.154;MQMR=245.266;NS=7;NUMALT=2;ODDS=1.61181;PAIRED=0,0;PAIREDR=0;REPEAT=G:3;RO=11733;RPP=92.3669,1269.48;RPPR=14554.2;RUN=1,1;SAP=1303.72,1388.41;SRP=25480.9;TYPE=del,ins;XAI=0.0141233,0.0209738;XAM=0.022054,0.0293882;XAS=0.00793068,0.0 [...]
+chr22 42525925 . G GG 49314.70 . AB=0.125029;ABP=21130.9;AC=7;AF=0.5;AN=14;AO=2163;BVAR;CIGAR=1M1I;DP=17300;DPRA=0;EPP=4226.09;EPPR=14555.3;HWE=32.3452;LEN=1;MEANALT=4.71429;MQM=184.983;MQMR=241.036;NS=7;NUMALT=1;ODDS=15.3448;PAIRED=0;PAIREDR=0;REPEAT=G:3;RO=14889;RPP=4226.09;RPPR=14555.3;RUN=1;SAP=4699.91;SRP=32334.1;TYPE=ins;XAI=0.012058;XAM=0.0201676;XAS=0.00810955;XRI=0.0108463;XRM=0.017858;XRS=0.0070117 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:3:-8.2,-0.425969,-6.555:66.54:82:69:2 0/1:235:1855 [...]
+chr22 42525931 . G GG 49314.70 . AB=0.183216;ABP=16154.6;AC=7;AF=0.5;AN=14;AO=3395;BVAR;CIGAR=1M1I;DP=18530;DPRA=0;EPP=6491.35;EPPR=17237.7;HWE=32.3452;LEN=1;MEANALT=6;MQM=199.949;MQMR=239.883;NS=7;NUMALT=1;ODDS=9.21988;PAIRED=0;PAIREDR=0;REPEAT=G:3;RO=14775;RPP=6491.35;RPPR=17237.7;RUN=1;SAP=7375.16;SRP=32086.5;TYPE=ins;XAI=0.00999677;XAM=0.0177495;XAS=0.00775271;XRI=0.0111993;XRM=0.0182877;XRS=0.00708839 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:2:4:-13.11,-0.425969,-3.895:40.04:138:41:2 0/1:304:197 [...]
+chr22 42525952 . C A,CA 49314.70 . AB=0.559845,0.118057;ABP=364.797,14739.4;AC=6,2;AF=0.428571,0.142857;AN=14;AO=6525,1375;BVAR;CIGAR=1X,1M1I;DP=13198;DPRA=0,0;EPP=1707.3,9.68264;EPPR=8724.46;HWE=2.1114;LEN=1,1;MEANALT=5.71429,5.71429;MQM=228.39,217.375;MQMR=244.33;NS=7;NUMALT=2;ODDS=9.2056;PAIRED=0,0;PAIREDR=0;REPEAT=C:6;RO=5225;RPP=1707.3,9.68264;RPPR=8724.46;RUN=1,1;SAP=14171.9,2988.78;SRP=11349;TYPE=snp,ins;XAI=0.00893313,0.0259017;XAM=0.0149697,0.032822;XAS=0.00603657,0.0069203;XRI= [...]
+chr22 42525991 . C CC 49314.70 . AB=0.224727;ABP=8909.47;AC=8;AF=0.571429;AN=14;AO=3043;BVAR;CIGAR=1M1I;DP=13534;DPRA=0;EPP=278.202;EPPR=15321.2;HWE=27.36;LEN=1;MEANALT=6.14286;MQM=223.177;MQMR=241.436;NS=7;NUMALT=1;ODDS=0.154151;PAIRED=0;PAIREDR=0;RO=8270;RPP=278.202;RPPR=15321.2;RUN=1;SAP=6610.8;SRP=17961.1;TYPE=ins;XAI=0.0191029;XAM=0.0270395;XAS=0.00793664;XRI=0.00558292;XRM=0.0126992;XRS=0.00711625 GT:AO:DP:GL:GQ:QA:QR:RO 1/1:2:2:-4.845,-0.60206,0:11.46:51:0:0 0/1:316:1462:-1588.27, [...]
+chr22 42525997 . CC C 49314.70 . AB=0.262036;ABP=5795.57;AC=8;AF=0.571429;AN=14;AO=3090;BVAR;CIGAR=1M1D;DP=11781;DPRA=0;EPP=2691.66;EPPR=13934.4;HWE=27.36;LEN=1;MEANALT=8.42857;MQM=168.911;MQMR=234.45;NS=7;NUMALT=1;ODDS=1.54045;PAIRED=0;PAIREDR=0;REPEAT=C:5;RO=7935;RPP=2691.66;RPPR=13934.4;RUN=1;SAP=6712.86;SRP=17233.6;TYPE=del;XAI=0.0123671;XAM=0.0200087;XAS=0.00764155;XRI=0.00686281;XRM=0.0141274;XRS=0.00726456 GT:AO:DP:GL:GQ:QA:QR:RO 1/1:4:4:-11.655,-1.20412,0:7.53:126:0:0 0/1:379:138 [...]
+chr22 42526049 . C G,CG 49314.70 . AB=0.18002,0.266554;ABP=9982.14,5314.54;AC=9,2;AF=0.642857,0.142857;AN=14;AO=6950,3008;BVAR;CIGAR=1X,1M1I;DP=16504;DPRA=0,2750.5;EPP=6969.62,841.918;EPPR=2089.02;HWE=-16.5861;LEN=1,1;MEANALT=9.71429,11.1667;MQM=218.319,196.558;MQMR=189.054;NS=7;NUMALT=2;ODDS=0.693147;PAIRED=0,0;PAIREDR=0;REPEAT=C:2;RO=6026;RPP=6969.62,841.918;RPPR=2089.02;RUN=1,1;SAP=15094.7,6534.8;SRP=13088.3;TYPE=snp,ins;XAI=0.00683168,0.0140063;XAM=0.01264,0.0201596;XAS=0.00580837,0. [...]
+chr22 42526053 . GG G 49314.70 . AB=0.190012;ABP=12069.6;AC=7;AF=0.5;AN=14;AO=2747;BVAR;CIGAR=1M1D;DP=14457;DPRA=0;EPP=3.58657;EPPR=17743.3;HWE=32.3452;LEN=1;MEANALT=7;MQM=148.241;MQMR=231.765;NS=7;NUMALT=1;ODDS=0.538997;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=10230;RPP=3.58657;RPPR=17743.3;RUN=1;SAP=5968.05;SRP=22217.2;TYPE=del;XAI=0.0110832;XAM=0.0196616;XAS=0.00857839;XRI=0.0106842;XRM=0.0179001;XRS=0.00721585 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:1:-3.5,-0.30103,0:0.35:35:0:0 0/1:327:1655:-1790.03, [...]
+chr22 42526059 . GG G 49314.70 . AB=0.556962;ABP=437.167;AC=8;AF=0.571429;AN=14;AO=8583;BVAR;CIGAR=1M1D;DP=15408;DPRA=0;EPP=7592.29;EPPR=10201.2;HWE=27.36;LEN=1;MEANALT=9.57143;MQM=174.355;MQMR=244.374;NS=7;NUMALT=1;ODDS=0.847298;PAIRED=0;PAIREDR=0;REPEAT=G:5;RO=4788;RPP=7592.29;RPPR=10201.2;RUN=1;SAP=18640.8;SRP=10400;TYPE=del;XAI=0.0146977;XAM=0.0207481;XAS=0.00605041;XRI=0.00555405;XRM=0.0128069;XRS=0.00725289 GT:AO:DP:GL:GQ:QA:QR:RO 1/1:3:3:-10.2667,-0.90309,0:10.79:110:0:0 0/1:926:1 [...]
+chr22 42526066 . G GG 49314.70 . AB=0.406965;ABP=1702.02;AC=7;AF=0.5;AN=14;AO=9197;BVAR;CIGAR=1M1I;DP=22599;DPRA=0;EPP=13586.7;EPPR=21120.1;HWE=32.3452;LEN=1;MEANALT=6.71429;MQM=106.782;MQMR=206.993;NS=7;NUMALT=1;ODDS=0.538997;PAIRED=0;PAIREDR=0;REPEAT=G:5;RO=12395;RPP=13586.7;RPPR=21120.1;RUN=1;SAP=19974;SRP=26918.4;TYPE=ins;XAI=0.00729778;XAM=0.013013;XAS=0.0057152;XRI=0.0154455;XRM=0.0223881;XRS=0.00694266 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:1:-5.4,-0.30103,0:2:54:0:0 0/1:1062:2629:-4511.95 [...]
+chr22 42526250 . C CC 49314.70 . AB=0.317466;ABP=12715.3;AC=7;AF=0.5;AN=14;AO=13945;BVAR;CIGAR=1M1I;DP=43926;DPRA=0;EPP=29046.3;EPPR=46118.3;HWE=32.3452;LEN=1;MEANALT=8.85714;MQM=252.266;MQMR=128.955;NS=7;NUMALT=1;ODDS=29.4654;PAIRED=0;PAIREDR=0;REPEAT=C:5;RO=22253;RPP=29046.3;RPPR=46118.3;RUN=1;SAP=30284.2;SRP=48324.8;TYPE=ins;XAI=0.00248386;XAM=0.0154268;XAS=0.0129429;XRI=0.00849148;XRM=0.0183022;XRS=0.00981067 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:10:20:-73.4786,-30.2355,-42.497:6.28:493:150:6 [...]
+chr22 42526484 rs28371699 A C 49314.70 . AB=0.391599;ABP=2082.92;AC=6;AF=0.428571;AN=14;AO=7986;BVAR;CIGAR=1X;DB;DP=26630;DPRA=0;EPP=3422.04;EPPR=24049;HWE=27.36;LEN=1;MEANALT=6.28571;MQM=253.352;MQMR=253.375;NS=7;NUMALT=1;ODDS=54.6541;PAIRED=0;PAIREDR=0;REPEAT=A:2;RO=17275;RPP=3422.04;RPPR=24049;RUN=1;SAP=17344.4;SRP=37515.2;TYPE=snp;XAI=0.00341635;XAM=0.0226821;XAS=0.0192658;XRI=0.00367721;XRM=0.0122153;XRS=0.00853807 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:9:23:-28.665,-5.02594,-43.6336:8.45:274: [...]
+chr22 42526549 rs56011157 C T 49314.70 . AB=0.522195;ABP=143.452;AC=8;AF=0.571429;AN=14;AO=22421;BVAR;CIGAR=1X;DB;DP=38229;DPRA=0;EPP=963.394;EPPR=13740.4;HWE=27.36;LEN=1;MEANALT=4.85714;MQM=252.703;MQMR=252.215;NS=7;NUMALT=1;ODDS=56.0633;PAIRED=0;PAIREDR=0;REPEAT=C:3;RO=15480;RPP=963.394;RPPR=13740.4;RUN=1;SAP=48689.6;SRP=33617.4;TYPE=snp;XAI=0.00528337;XAM=0.0245001;XAS=0.0192167;XRI=0.00487068;XRM=0.00904391;XRS=0.00417323 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:13:23:-50.165,-7.32594,-31.577:99: [...]
+chr22 42526561 . GG TC 49314.70 . AB=0.476755;ABP=174.53;AC=8;AF=0.571429;AN=14;AO=22811;BVAR;CIGAR=2X;DP=42014;DPRA=0;EPP=921.962;EPPR=14455;HWE=27.36;LEN=2;MEANALT=10;MQM=251.716;MQMR=241.731;NS=7;NUMALT=1;ODDS=97.1201;PAIRED=0;PAIREDR=0;REPEAT=G:2|GGT:2;RO=18680;RPP=921.962;RPPR=14455;RUN=1;SAP=49536.5;SRP=40566.1;TYPE=mnp;XAI=0.00560446;XAM=0.022837;XAS=0.0172325;XRI=0.00510954;XRM=0.00892883;XRS=0.00381928 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:13:32:-45.6293,-3.51753,-53.7726:99:478:569:18 1/ [...]
+chr22 42526567 rs76312385 G A 49314.70 . AB=0.512704;ABP=49.0248;AC=8;AF=0.571429;AN=14;AO=21967;BVAR;CIGAR=1X;DB;DP=38053;DPRA=0;EPP=597.821;EPPR=16171.7;HWE=27.36;LEN=1;MEANALT=4.71429;MQM=246.71;MQMR=241.719;NS=7;NUMALT=1;ODDS=76.1081;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=15968;RPP=597.821;RPPR=16171.7;RUN=1;SAP=47703.7;SRP=34677.1;TYPE=snp;XAI=0.00550218;XAM=0.0262124;XAS=0.0207102;XRI=0.00457904;XRM=0.00863553;XRS=0.00405649 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:13:26:-43.8415,-0.809721,-33.7662:9 [...]
+chr22 42526571 rs74644586 C G 49314.70 . AB=0.423296;ABP=1892.13;AC=8;AF=0.571429;AN=14;AO=20400;BVAR;CIGAR=1X;DB;DP=41756;DPRA=0;EPP=8.83879;EPPR=13875.4;HWE=27.36;LEN=1;MEANALT=7.14286;MQM=243.96;MQMR=238.317;NS=7;NUMALT=1;ODDS=76.1468;PAIRED=0;PAIREDR=0;RO=21023;RPP=8.83879;RPPR=13875.4;RUN=1;SAP=44301;SRP=45653.9;TYPE=snp;XAI=0.00502957;XAM=0.026329;XAS=0.0212994;XRI=0.00550538;XRM=0.00933165;XRS=0.00382628 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:13:32:-36.9207,-3.91753,-60.9242:99:378:644:18 1/ [...]
+chr22 42526573 rs1080996 T G 49314.70 . AB=0.478935;ABP=164.665;AC=8;AF=0.571429;AN=14;AO=26268;BVAR;CIGAR=1X;DB;DP=48153;DPRA=0;EPP=364.104;EPPR=12603.5;HWE=27.36;LEN=1;MEANALT=6.71429;MQM=240.907;MQMR=237.914;NS=7;NUMALT=1;ODDS=120.717;PAIRED=0;PAIREDR=0;RO=21656;RPP=364.104;RPPR=12603.5;RUN=1;SAP=57043.2;SRP=47028.4;TYPE=snp;XAI=0.00602555;XAM=0.0277357;XAS=0.0217101;XRI=0.00561177;XRM=0.00940479;XRS=0.00379303 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:16:35:-53.2875,-0.927531,-59.8379:99:588:661:1 [...]
+chr22 42526580 rs1080995 G C 49314.70 . AB=0.503997;ABP=9.29444;AC=8;AF=0.571429;AN=14;AO=29815;BVAR;CIGAR=1X;DB;DP=52393;DPRA=0;EPP=48.3495;EPPR=11542.6;HWE=27.36;LEN=1;MEANALT=7.42857;MQM=232.937;MQMR=238.185;NS=7;NUMALT=1;ODDS=126.745;PAIRED=0;PAIREDR=0;REPEAT=G:2;RO=22075;RPP=48.3495;RPPR=11542.6;RUN=1;SAP=64745.5;SRP=47938.3;TYPE=snp;XAI=0.00621892;XAM=0.0259398;XAS=0.0197208;XRI=0.00542136;XRM=0.00921859;XRS=0.00379723 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:16:37:-56.0063,-1.02834,-68.3095:99 [...]
+chr22 42526657 rs72549357 A AA 49314.70 . AB=0.447951;ABP=212.557;AC=3;AF=0.214286;AN=14;AO=4015;BVAR;CIGAR=1M1I;DB;DP=32023;DPRA=0;EPP=68.1323;EPPR=5433.04;HWE=-21.3394;LEN=1;MEANALT=5.85714;MQM=252.351;MQMR=252.096;NS=7;NUMALT=1;ODDS=87.682;PAIRED=0;PAIREDR=0;RO=27762;RPP=68.1323;RPPR=5433.04;RUN=1;SAP=8721.47;SRP=60287.4;TYPE=ins;XAI=0.00714279;XAM=0.0254859;XAS=0.0183431;XRI=0.00666333;XRM=0.0179572;XRS=0.0112938 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:4:24:-41.7175,-3.19835,-64.7075:99:451:715: [...]
+chr22 42526686 . G GG 49314.70 . AB=0.46865;ABP=269.052;AC=7;AF=0.5;AN=14;AO=14605;BVAR;CIGAR=1M1I;DP=31164;DPRA=0;EPP=28750.2;EPPR=29825.6;HWE=32.3452;LEN=1;MEANALT=7.57143;MQM=253.449;MQMR=243.45;NS=7;NUMALT=1;ODDS=25.6046;PAIRED=0;PAIREDR=0;REPEAT=G:5;RO=15977;RPP=28750.2;RPPR=29825.6;RUN=1;SAP=31717.4;SRP=34696.6;TYPE=ins;XAI=0.00649257;XAM=0.0165776;XAS=0.0100851;XRI=0.0052242;XRM=0.018954;XRS=0.0137298 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:2:21:-20.6267,-10.0418,-48.3411:99:158:471:18 0/1:20 [...]
+chr22 42526694 rs1065852 G A 49314.70 . AB=0.544568;ABP=218.825;AC=2;AF=0.142857;AN=14;AO=6911;BVAR;CIGAR=1X;DB;DP=35009;DPRA=215.938;EPP=65.2308;EPPR=20299.1;HWE=-23.8382;LEN=1;MEANALT=4;MQM=236.385;MQMR=238.582;NS=7;NUMALT=1;ODDS=19.7266;PAIRED=0;PAIREDR=0;REPEAT=G:3;RO=27788;RPP=65.2308;RPPR=20299.1;RUN=1;SAP=15010.1;SRP=60343.9;TYPE=snp;XAI=0.00766272;XAM=0.0235805;XAS=0.0159178;XRI=0.00758111;XRM=0.0180206;XRS=0.0104395 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:27:0,-8.12781,-86.7556:85.67:0:96 [...]
+chr22 42526831 . C CC 5.90 . AB=0.333333;ABP=3.73412;AC=1;AF=0.0714286;AN=14;AO=64;BVAR;CIGAR=1M1I;DP=15177;DPRA=0;EPP=29.6108;EPPR=31989.5;HWE=-19.2686;LEN=1;MEANALT=4;MQM=242.375;MQMR=253.43;NS=7;NUMALT=1;ODDS=1.06176;PAIRED=0;PAIREDR=0;REPEAT=C:2;RO=15013;RPP=29.6108;RPPR=31989.5;RUN=1;SAP=141.985;SRP=32603.3;TYPE=ins;XAI=0.0270638;XAM=0.0323354;XAS=0.00527157;XRI=0.00755391;XRM=0.0170482;XRS=0.00949425 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:3:-3.7,-0.425969,-6.46:5.90:37:68:2 0/0:9:2155:-90.4 [...]
+chr22 42526840 . CC C,CCC 49314.70 . AB=0.418078,0.212582;ABP=677.573,8306.3;AC=8,3;AF=0.571429,0.214286;AN=14;AO=4839,2460;BVAR;CIGAR=1M1D,2M1I;DP=11573;DPRA=0,1928.67;EPP=9256.42,4836.39;EPPR=8847.45;HWE=-10.4044;LEN=1,1;MEANALT=6.57143,7.5;MQM=252.894,253.239;MQMR=253.613;NS=7;NUMALT=2;ODDS=1.54045;PAIRED=0,0;PAIREDR=0;REPEAT=C:5|CCACC:2;RO=4089;RPP=9256.42,4836.39;RPPR=8847.45;RUN=1,1;SAP=10510.8,5344.83;SRP=8882.16;TYPE=del,ins;XAI=0.0105518,0.00952792;XAM=0.0193038,0.022665;XAS=0.0 [...]
+chr22 42526866 . G GG 18.67 . AB=0.333333;ABP=3.73412;AC=1;AF=0.0714286;AN=14;AO=231;BVAR;CIGAR=1M1I;DP=19179;DPRA=0;EPP=265.176;EPPR=21872.6;HWE=-19.2686;LEN=1;MEANALT=3.57143;MQM=246.801;MQMR=253.428;NS=7;NUMALT=1;ODDS=4.28538;PAIRED=0;PAIREDR=0;REPEAT=G:2;RO=18879;RPP=265.176;RPPR=21872.6;RUN=1;SAP=504.62;SRP=40998.2;TYPE=ins;XAI=0.0214287;XAM=0.0285179;XAS=0.0070892;XRI=0.00875722;XRM=0.0179066;XRS=0.00914936 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:3:-5.1,-0.425969,-7.6:18.67:51:80:2 0/0:32:28 [...]
+chr22 42526898 . CC C 49314.70 . AB=0.335421;ABP=5863.31;AC=6;AF=0.428571;AN=14;AO=8355;BVAR;CIGAR=1M1D;DP=24912;DPRA=1383.83;EPP=17279;EPPR=27111.7;HWE=27.36;LEN=1;MEANALT=6.83333;MQM=253.89;MQMR=253.437;NS=7;NUMALT=1;ODDS=0.847298;PAIRED=0;PAIREDR=0;REPEAT=C:3;RO=16387;RPP=17279;RPPR=27111.7;RUN=1;SAP=18145.7;SRP=35586.9;TYPE=del;XAI=0.00768319;XAM=0.0116242;XAS=0.00394104;XRI=0.00850338;XRM=0.0180515;XRS=0.00954807 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:3:0,-0.90309,-10.92:5.23:0:117:3 0/1:119 [...]
+chr22 42526934 . CC C 49314.70 . AB=0.289303;ABP=10503.2;AC=6;AF=0.428571;AN=14;AO=7878;BVAR;CIGAR=1M1D;DP=27234;DPRA=1512.83;EPP=16712.7;EPPR=21770.9;HWE=27.36;LEN=1;MEANALT=5.5;MQM=253.924;MQMR=253.24;NS=7;NUMALT=1;ODDS=0.847298;PAIRED=0;PAIREDR=0;REPEAT=C:3;RO=19271;RPP=16712.7;RPPR=21770.9;RUN=1;SAP=17109.9;SRP=41849.5;TYPE=del;XAI=0.00887994;XAM=0.0128136;XAS=0.00393369;XRI=0.00881627;XRM=0.0177763;XRS=0.00896004 GT:AO:DP:GL:GQ:QA:QR:RO 0/0:0:3:0,-0.90309,-9.52:5.23:0:102:3 0/1:1190 [...]
+chr22 42526980 . A T 6.67 . AB=0.333333;ABP=3.73412;AC=1;AF=0.0714286;AN=14;AO=44;BVAR;CIGAR=1X;DP=33852;DPRA=0;EPP=19.0002;EPPR=1175.7;HWE=-19.2686;LEN=1;MEANALT=3.42857;MQM=249.045;MQMR=253.181;NS=7;NUMALT=1;ODDS=1.29202;PAIRED=0;PAIREDR=0;REPEAT=AG:2;RO=33604;RPP=19.0002;RPPR=1175.7;RUN=1;SAP=98.5551;SRP=72973.2;TYPE=snp;XAI=0.00822033;XAM=0.0167615;XAS=0.00854119;XRI=0.00929632;XRM=0.0161467;XRS=0.00685034 GT:AO:DP:GL:GQ:QA:QR:RO 0/1:1:3:-3.8,-0.425969,-7.6:6.67:38:80:2 0/0:1:4747:-1 [...]
+chr22 42526998 . G GG 49314.70 . AB=0.622185;ABP=2030.07;AC=6;AF=0.5;AN=12;AO=9726;BVAR;CIGAR=1M1I;DP=15632;DPRA=0;EPP=21122.8;EPPR=881.975;HWE=26.6464;LEN=1;MEANALT=5.5;MQM=253.999;MQMR=253.931;NS=6;NUMALT=1;ODDS=1904.3;PAIRED=0;PAIREDR=0;REPEAT=G:3;RO=3635;RPP=21122.8;RPPR=881.975;RUN=1;SAP=21122.8;SRP=7896.31;TYPE=ins;XAI=0.00668033;XAM=0.0102733;XAS=0.00359295;XRI=0.0071001;XRM=0.0117029;XRS=0.00460284 GT:AO:DP:GL:GQ:QA:QR:RO . 0/1:1343:2189:-9384.39,-960.176,-2406.56:5.44:94498:1697 [...]
+chr22 42527004 . G GG 49314.70 . AB=0.667115;ABP=3787.19;AC=6;AF=0.5;AN=12;AO=10407;BVAR;CIGAR=1M1I;DP=15600;DPRA=0;EPP=22601.5;EPPR=67.1131;HWE=26.6464;LEN=1;MEANALT=5;MQM=254;MQMR=253.917;NS=6;NUMALT=1;ODDS=2369.91;PAIRED=0;PAIREDR=0;REPEAT=G:3|GCT:2;RO=3939;RPP=22601.5;RPPR=67.1131;RUN=1;SAP=22601.5;SRP=8556.44;TYPE=ins;XAI=0.00690926;XAM=0.0107993;XAS=0.00389004;XRI=0.00746599;XRM=0.0119393;XRS=0.00447334 GT:AO:DP:GL:GQ:QA:QR:RO . 0/1:1455:2164:-10813.1,-706.273,-2126.31:99:113412:16 [...]
+chr22 42527044 . CC C 49314.70 . AB=0.257511;ABP=3487.77;AC=6;AF=0.5;AN=12;AO=1757;BVAR;CIGAR=1M1D;DP=6823;DPRA=0;EPP=3800.94;EPPR=5362.34;HWE=26.6464;LEN=1;MEANALT=6.16667;MQM=253.981;MQMR=253.903;NS=6;NUMALT=1;ODDS=763.966;PAIRED=0;PAIREDR=0;REPEAT=C:3;RO=4831;RPP=3800.94;RPPR=5362.34;RUN=1;SAP=3818.29;SRP=10493.4;TYPE=del;XAI=0.0105127;XAM=0.0146831;XAS=0.00417041;XRI=0.00686241;XRM=0.0109032;XRS=0.00404074 GT:AO:DP:GL:GQ:QA:QR:RO . 0/1:343:796:-1632.27,-93.2737,-1148.05:99:17135:1175 [...]
+chr22 42527245 . C CC 49314.70 . AB=0.274156;ABP=9393.48;AC=6;AF=0.5;AN=12;AO=5811;BVAR;CIGAR=1M1I;DP=21196;DPRA=0;EPP=10662.8;EPPR=31679;HWE=26.6464;LEN=1;MEANALT=8;MQM=237.134;MQMR=252.843;NS=6;NUMALT=1;ODDS=1120.94;PAIRED=0;PAIREDR=0;REPEAT=C:5;RO=14957;RPP=10662.8;RPPR=31679;RUN=1;SAP=12621.4;SRP=32481.7;TYPE=ins;XAI=0.00661986;XAM=0.0122036;XAS=0.00558373;XRI=0.0083671;XRM=0.0123402;XRS=0.00397314 GT:AO:DP:GL:GQ:QA:QR:RO . 0/1:201:2256:-923.691,-437.397,-4944.51:99:9645:54323:2038 0 [...]
+chr22 42527304 . G GG 49314.70 . AB=0.286655;ABP=10626.8;AC=6;AF=0.5;AN=12;AO=7703;BVAR;CIGAR=1M1I;DP=26872;DPRA=0;EPP=13891.2;EPPR=40276.4;HWE=26.6464;LEN=1;MEANALT=8.33333;MQM=209.245;MQMR=240.677;NS=6;NUMALT=1;ODDS=7288.92;PAIRED=0;PAIREDR=0;REPEAT=G:4;RO=18889;RPP=13891.2;RPPR=40276.4;RUN=1;SAP=16729.9;SRP=41020;TYPE=ins;XAI=0.00603507;XAM=0.0126279;XAS=0.00659284;XRI=0.00926586;XRM=0.0137899;XRS=0.00452405 GT:AO:DP:GL:GQ:QA:QR:RO . 0/1:597:3213:-3569.76,-404.74,-6770.27:99:38402:739 [...]
+chr22 42527457 . G GG 49314.70 . AB=0.296966;ABP=11213.8;AC=6;AF=0.5;AN=12;AO=9298;BVAR;CIGAR=1M1I;DP=31310;DPRA=0;EPP=19950.9;EPPR=12548.9;HWE=26.6464;LEN=1;MEANALT=6;MQM=253.211;MQMR=232.51;NS=6;NUMALT=1;ODDS=16721.3;PAIRED=0;PAIREDR=0;REPEAT=G:3;RO=21545;RPP=19950.9;RPPR=12548.9;RUN=1;SAP=20193.4;SRP=46787.4;TYPE=ins;XAI=0.00276496;XAM=0.0100562;XAS=0.00729127;XRI=0.00462268;XRM=0.012042;XRS=0.00741937 GT:AO:DP:GL:GQ:QA:QR:RO . 0/1:1268:3976:-10456.8,-384.343,-8264.41:99:113091:88737: [...]
+chr22 42527471 rs28633410 T C 49314.70 . AB=0.479383;ABP=58.076;AC=10;AF=0.833333;AN=12;AO=24912;BVAR;CIGAR=1X;DB;DP=32853;DPRA=0;EPP=15903.1;EPPR=7910.53;HWE=-20.5115;LEN=1;MEANALT=5;MQM=234.488;MQMR=253.454;NS=6;NUMALT=1;ODDS=1942.13;PAIRED=0;PAIREDR=0;RO=7775;RPP=15903.1;RPPR=7910.53;RUN=1;SAP=54098.7;SRP=16886.2;TYPE=snp;XAI=0.00494173;XAM=0.0108752;XAS=0.0059335;XRI=0.00497381;XRM=0.00913213;XRS=0.00415831 GT:AO:DP:GL:GQ:QA:QR:RO . 1/1:4309:4358:-14322.5,-1366.92,-165.795:99:157919: [...]
+chr22 42527533 rs28624811 A G 49314.70 . AB=0.442687;ABP=1159.19;AC=7;AF=0.583333;AN=12;AO=23579;BVAR;CIGAR=1X;DB;DP=46258;DPRA=0;EPP=26054.3;EPPR=6830.86;HWE=18.5733;LEN=1;MEANALT=5;MQM=232.81;MQMR=253.774;NS=6;NUMALT=1;ODDS=2924.81;PAIRED=0;PAIREDR=0;REPEAT=AG:2;RO=22558;RPP=26054.3;RPPR=6830.86;RUN=1;SAP=51204.2;SRP=48987.1;TYPE=snp;XAI=0.00529606;XAM=0.0115376;XAS=0.00624157;XRI=0.00578305;XRM=0.0107171;XRS=0.00493405 GT:AO:DP:GL:GQ:QA:QR:RO . 1/1:5640:5735:-16960.8,-1571.34,-300.591 [...]
+chr22 42527595 . C CC 49314.70 . AB=0.444752;ABP=1191.67;AC=6;AF=0.5;AN=12;AO=19940;BVAR;CIGAR=1M1I;DP=44834;DPRA=0;EPP=41225.7;EPPR=49052.8;HWE=26.6464;LEN=1;MEANALT=10;MQM=253.846;MQMR=253.651;NS=6;NUMALT=1;ODDS=15802.6;PAIRED=0;PAIREDR=0;REPEAT=C:4;RO=23855;RPP=41225.7;RPPR=49052.8;RUN=1;SAP=43302.2;SRP=51803.5;TYPE=ins;XAI=0.00573718;XAM=0.0116425;XAS=0.00590534;XRI=0.00312829;XRM=0.0104073;XRS=0.00727905 GT:AO:DP:GL:GQ:QA:QR:RO . 0/1:2887:6400:-16122.4,-244.936,-10034.2:99:176551:10 [...]
+chr22 42527793 rs1080989 C T 49314.70 . AB=0.539425;ABP=116.187;AC=2;AF=0.166667;AN=12;AO=4578;BVAR;CIGAR=1X;DB;DP=23758;DPRA=0;EPP=8007.61;EPPR=38635.9;HWE=-20.5115;LEN=1;MEANALT=3.16667;MQM=252.084;MQMR=251.787;NS=6;NUMALT=1;ODDS=1688.52;PAIRED=0;PAIREDR=0;RO=19096;RPP=8007.61;RPPR=38635.9;RUN=1;SAP=9944.01;SRP=41469.4;TYPE=snp;XAI=0.00826549;XAM=0.0146986;XAS=0.00643314;XRI=0.00853044;XRM=0.0137412;XRS=0.00521078 GT:AO:DP:GL:GQ:QA:QR:RO . 0/1:1765:3222:-5919.13,-44.1032,-5031.02:99:65 [...]
+chr22 42527894 . TTT T 49314.70 . AB=0;ABP=0;AC=12;AF=1;AN=12;AO=7825;BVAR;CIGAR=1M2D;DP=21045;DPRA=0;EPP=16239;EPPR=656.623;HWE=-0;LEN=2;MEANALT=29.5;MQM=248.613;MQMR=228.023;NS=6;NUMALT=1;ODDS=230.833;PAIRED=0;PAIREDR=0;REPEAT=T:10;RO=301;RPP=16239;RPPR=656.623;RUN=1;SAP=16994.8;SRP=656.623;TYPE=del;XAI=0.00617425;XAM=0.0115117;XAS=0.00533745;XRI=0.0166672;XRM=0.0270648;XRS=0.0103976 GT:AO:DP:GL:GQ:QA:QR:RO . 1/1:1083:2817:-12304.6,-7986.47,-7744.28:8.13:51166:496:22 1/1:1681:4528:-199 [...]
diff --git a/vcf/test/gatk.vcf b/vcf/test/gatk.vcf
new file mode 100644
index 0000000..906a5b4
--- /dev/null
+++ b/vcf/test/gatk.vcf
@@ -0,0 +1,156 @@
+##fileformat=VCFv4.1
+##FORMAT=<ID=AD,Number=.,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth (reads with MQ=255 or with bad mates are filtered)">
+##FORMAT=<ID=GQ,Number=1,Type=Float,Description="Genotype Quality">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=PL,Number=G,Type=Integer,Description="Normalized, Phred-scaled likelihoods for genotypes as defined in the VCF specification">
+##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
+##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency, for each ALT allele, in the same order as listed">
+##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
+##INFO=<ID=BaseQRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt Vs. Ref base qualities">
+##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP Membership">
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth; some reads may have been filtered">
+##INFO=<ID=DS,Number=0,Type=Flag,Description="Were any of the samples downsampled?">
+##INFO=<ID=Dels,Number=1,Type=Float,Description="Fraction of Reads Containing Spanning Deletions">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##INFO=<ID=HRun,Number=1,Type=Integer,Description="Largest Contiguous Homopolymer Run of Variant Allele In Either Direction">
+##INFO=<ID=HaplotypeScore,Number=1,Type=Float,Description="Consistency of the site with at most two segregating haplotypes">
+##INFO=<ID=InbreedingCoeff,Number=1,Type=Float,Description="Inbreeding coefficient as estimated from the genotype likelihoods per-sample when compared against the Hardy-Weinberg expectation">
+##INFO=<ID=MQ,Number=1,Type=Float,Description="RMS Mapping Quality">
+##INFO=<ID=MQ0,Number=1,Type=Integer,Description="Total Mapping Quality Zero Reads">
+##INFO=<ID=MQRankSum,Number=1,Type=Float,Description="Z-score From Wilcoxon rank sum test of Alt vs. Ref read mapping qualities">
+##INFO=<ID=QD,Number=1,Type=Float,Description="Variant Confidence/Quality by Depth">
+##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[reads.bam] read_buffer_size=null phone_home=NO_ET read_filter=[] intervals=[chr22:42020321-42527953] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL reference_sequence=/data/reference/ucsc/hg19/ucsc.hg19.fasta rodBind=[] nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=250 baq=CALCULATE_AS_NECESSARY baqGapOpenPenalty=40.0 performanceLog=null use [...]
+##contig=<ID=chr1,length=249250621,assembly=hg19>
+##contig=<ID=chr10,length=135534747,assembly=hg19>
+##contig=<ID=chr11,length=135006516,assembly=hg19>
+##contig=<ID=chr11_gl000202_random,length=40103,assembly=hg19>
+##contig=<ID=chr12,length=133851895,assembly=hg19>
+##contig=<ID=chr13,length=115169878,assembly=hg19>
+##contig=<ID=chr14,length=107349540,assembly=hg19>
+##contig=<ID=chr15,length=102531392,assembly=hg19>
+##contig=<ID=chr16,length=90354753,assembly=hg19>
+##contig=<ID=chr17,length=81195210,assembly=hg19>
+##contig=<ID=chr17_ctg5_hap1,length=1680828,assembly=hg19>
+##contig=<ID=chr17_gl000203_random,length=37498,assembly=hg19>
+##contig=<ID=chr17_gl000204_random,length=81310,assembly=hg19>
+##contig=<ID=chr17_gl000205_random,length=174588,assembly=hg19>
+##contig=<ID=chr17_gl000206_random,length=41001,assembly=hg19>
+##contig=<ID=chr18,length=78077248,assembly=hg19>
+##contig=<ID=chr18_gl000207_random,length=4262,assembly=hg19>
+##contig=<ID=chr19,length=59128983,assembly=hg19>
+##contig=<ID=chr19_gl000208_random,length=92689,assembly=hg19>
+##contig=<ID=chr19_gl000209_random,length=159169,assembly=hg19>
+##contig=<ID=chr1_gl000191_random,length=106433,assembly=hg19>
+##contig=<ID=chr1_gl000192_random,length=547496,assembly=hg19>
+##contig=<ID=chr2,length=243199373,assembly=hg19>
+##contig=<ID=chr20,length=63025520,assembly=hg19>
+##contig=<ID=chr21,length=48129895,assembly=hg19>
+##contig=<ID=chr21_gl000210_random,length=27682,assembly=hg19>
+##contig=<ID=chr22,length=51304566,assembly=hg19>
+##contig=<ID=chr3,length=198022430,assembly=hg19>
+##contig=<ID=chr4,length=191154276,assembly=hg19>
+##contig=<ID=chr4_ctg9_hap1,length=590426,assembly=hg19>
+##contig=<ID=chr4_gl000193_random,length=189789,assembly=hg19>
+##contig=<ID=chr4_gl000194_random,length=191469,assembly=hg19>
+##contig=<ID=chr5,length=180915260,assembly=hg19>
+##contig=<ID=chr6,length=171115067,assembly=hg19>
+##contig=<ID=chr6_apd_hap1,length=4622290,assembly=hg19>
+##contig=<ID=chr6_cox_hap2,length=4795371,assembly=hg19>
+##contig=<ID=chr6_dbb_hap3,length=4610396,assembly=hg19>
+##contig=<ID=chr6_mann_hap4,length=4683263,assembly=hg19>
+##contig=<ID=chr6_mcf_hap5,length=4833398,assembly=hg19>
+##contig=<ID=chr6_qbl_hap6,length=4611984,assembly=hg19>
+##contig=<ID=chr6_ssto_hap7,length=4928567,assembly=hg19>
+##contig=<ID=chr7,length=159138663,assembly=hg19>
+##contig=<ID=chr7_gl000195_random,length=182896,assembly=hg19>
+##contig=<ID=chr8,length=146364022,assembly=hg19>
+##contig=<ID=chr8_gl000196_random,length=38914,assembly=hg19>
+##contig=<ID=chr8_gl000197_random,length=37175,assembly=hg19>
+##contig=<ID=chr9,length=141213431,assembly=hg19>
+##contig=<ID=chr9_gl000198_random,length=90085,assembly=hg19>
+##contig=<ID=chr9_gl000199_random,length=169874,assembly=hg19>
+##contig=<ID=chr9_gl000200_random,length=187035,assembly=hg19>
+##contig=<ID=chr9_gl000201_random,length=36148,assembly=hg19>
+##contig=<ID=chrM,length=16571,assembly=hg19>
+##contig=<ID=chrUn_gl000211,length=166566,assembly=hg19>
+##contig=<ID=chrUn_gl000212,length=186858,assembly=hg19>
+##contig=<ID=chrUn_gl000213,length=164239,assembly=hg19>
+##contig=<ID=chrUn_gl000214,length=137718,assembly=hg19>
+##contig=<ID=chrUn_gl000215,length=172545,assembly=hg19>
+##contig=<ID=chrUn_gl000216,length=172294,assembly=hg19>
+##contig=<ID=chrUn_gl000217,length=172149,assembly=hg19>
+##contig=<ID=chrUn_gl000218,length=161147,assembly=hg19>
+##contig=<ID=chrUn_gl000219,length=179198,assembly=hg19>
+##contig=<ID=chrUn_gl000220,length=161802,assembly=hg19>
+##contig=<ID=chrUn_gl000221,length=155397,assembly=hg19>
+##contig=<ID=chrUn_gl000222,length=186861,assembly=hg19>
+##contig=<ID=chrUn_gl000223,length=180455,assembly=hg19>
+##contig=<ID=chrUn_gl000224,length=179693,assembly=hg19>
+##contig=<ID=chrUn_gl000225,length=211173,assembly=hg19>
+##contig=<ID=chrUn_gl000226,length=15008,assembly=hg19>
+##contig=<ID=chrUn_gl000227,length=128374,assembly=hg19>
+##contig=<ID=chrUn_gl000228,length=129120,assembly=hg19>
+##contig=<ID=chrUn_gl000229,length=19913,assembly=hg19>
+##contig=<ID=chrUn_gl000230,length=43691,assembly=hg19>
+##contig=<ID=chrUn_gl000231,length=27386,assembly=hg19>
+##contig=<ID=chrUn_gl000232,length=40652,assembly=hg19>
+##contig=<ID=chrUn_gl000233,length=45941,assembly=hg19>
+##contig=<ID=chrUn_gl000234,length=40531,assembly=hg19>
+##contig=<ID=chrUn_gl000235,length=34474,assembly=hg19>
+##contig=<ID=chrUn_gl000236,length=41934,assembly=hg19>
+##contig=<ID=chrUn_gl000237,length=45867,assembly=hg19>
+##contig=<ID=chrUn_gl000238,length=39939,assembly=hg19>
+##contig=<ID=chrUn_gl000239,length=33824,assembly=hg19>
+##contig=<ID=chrUn_gl000240,length=41933,assembly=hg19>
+##contig=<ID=chrUn_gl000241,length=42152,assembly=hg19>
+##contig=<ID=chrUn_gl000242,length=43523,assembly=hg19>
+##contig=<ID=chrUn_gl000243,length=43341,assembly=hg19>
+##contig=<ID=chrUn_gl000244,length=39929,assembly=hg19>
+##contig=<ID=chrUn_gl000245,length=36651,assembly=hg19>
+##contig=<ID=chrUn_gl000246,length=38154,assembly=hg19>
+##contig=<ID=chrUn_gl000247,length=36422,assembly=hg19>
+##contig=<ID=chrUn_gl000248,length=39786,assembly=hg19>
+##contig=<ID=chrUn_gl000249,length=38502,assembly=hg19>
+##contig=<ID=chrX,length=155270560,assembly=hg19>
+##contig=<ID=chrY,length=59373566,assembly=hg19>
+##reference=file:///data/reference/ucsc/hg19/ucsc.hg19.fasta
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT BLANK NA12878 NA12891 NA12892 NA19238 NA19239 NA19240
+chr22 42522392 rs28371738 G A 2951.95 . AC=2;AF=0.143;AN=14;BaseQRankSum=0.375;DB;DP=1506;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=123.5516;MQ=253.92;MQ0=0;MQRankSum=0.685;QD=5.90;ReadPosRankSum=0.590 GT:AD:DP:GQ:PL 0/0:6,0:6:18.04:0,18,211 0/1:138,107:250:99:1961,0,3049 0/1:169,77:250:99:1038,0,3533 0/0:249,0:250:99:0,600,5732 0/0:248,1:250:99:0,627,6191 0/0:250,0:250:99:0,615,5899 0/0:250,0:250:99:0,579,5674
+chr22 42522613 rs1135840 G C 11611.03 . AC=6;AF=0.429;AN=14;BaseQRankSum=16.289;DB;DP=1518;DS;Dels=0.03;FS=0.000;HRun=0;HaplotypeScore=142.5716;MQ=242.46;MQ0=0;MQRankSum=2.010;QD=9.16;ReadPosRankSum=-1.731 GT:AD:DP:GQ:PL 0/1:13,4:17:62.64:63,0,296 0/1:118,127:246:99:2396,0,1719 0/0:241,0:244:99:0,459,4476 0/1:161,85:246:99:1489,0,2353 0/1:110,132:242:99:2561,0,1488 0/1:106,135:242:99:2613,0,1389 0/1:116,126:243:99:2489,0,1537
+chr22 42522755 . C G 36.98 . AC=1;AF=0.071;AN=14;BaseQRankSum=-14.866;DP=1527;DS;Dels=0.01;FS=0.000;HRun=0;HaplotypeScore=253.4254;MQ=197.36;MQ0=2;MQRankSum=-10.810;QD=0.15;ReadPosRankSum=-17.244 GT:AD:DP:GQ:PL 0/0:26,1:27:51.08:0,51,570 0/0:208,40:248:99:0,236,4169 0/0:192,56:249:99:0,114,4292 0/1:179,66:245:75.42:75,0,3683 0/0:214,32:246:99:0,172,4235 0/0:200,49:249:61.05:0,61,4049 0/0:195,50:246:32.07:0,32,3757
+chr22 42523003 rs116917064 A G 7113.55 . AC=8;AF=0.571;AN=14;BaseQRankSum=6.026;DB;DP=1433;DS;Dels=0.00;FS=0.000;HRun=1;HaplotypeScore=101.7894;MQ=182.04;MQ0=0;MQRankSum=-2.501;QD=4.96;ReadPosRankSum=8.294 GT:AD:DP:GQ:PL 0/1:10,2:12:0.62:1,0,257 1/1:9,173:183:99:2385,273,0 0/1:153,95:249:99:355,0,2355 0/1:140,110:250:99:1334,0,2242 0/1:164,85:249:99:1070,0,2279 0/1:160,90:250:99:1245,0,2300 0/1:156,81:238:99:724,0,2764
+chr22 42523077 . A G 54.31 . AC=1;AF=0.071;AN=14;BaseQRankSum=-0.563;DP=1521;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=54.8434;MQ=164.04;MQ0=1;MQRankSum=-2.419;QD=2.59;ReadPosRankSum=-1.229 GT:AD:DP:GQ:PL 0/1:17,4:21:92.74:93,0,533 0/0:249,1:250:99:0,544,6985 0/0:250,0:250:99:0,577,6968 0/0:248,2:250:99:0,605,7687 0/0:248,1:249:99:0,583,7300 0/0:246,2:249:99:0,626,7473 0/0:248,1:249:99:0,594,7553
+chr22 42523209 rs28371730 T C 15556.89 . AC=8;AF=0.571;AN=14;BaseQRankSum=3.458;DB;DP=1509;DS;Dels=0.01;FS=0.000;HRun=0;HaplotypeScore=120.8206;MQ=221.07;MQ0=0;MQRankSum=-4.945;QD=10.31;ReadPosRankSum=0.639 GT:AD:DP:GQ:PL 0/1:3,6:9:99:154,0,101 1/1:6,237:247:99:4532,308,0 0/1:130,117:248:99:1399,0,3147 0/1:112,129:244:99:2641,0,2556 0/1:115,127:247:99:2320,0,2526 0/1:115,128:248:99:2546,0,2520 0/1:143,104:249:99:1965,0,3288
+chr22 42523211 rs2004511 T C 2445.52 . AC=2;AF=0.143;AN=14;BaseQRankSum=10.587;DB;DP=1509;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=102.7564;MQ=221.50;MQ0=0;MQRankSum=-6.926;QD=4.89;ReadPosRankSum=2.057 GT:AD:DP:GQ:PL 0/0:9,0:9:24.06:0,24,289 0/1:136,113:250:99:1384,0,2176 0/1:146,104:250:99:1108,0,2809 0/0:247,3:250:99:0,439,5546 0/0:245,2:249:99:0,459,5316 0/0:248,2:250:99:0,459,5404 0/0:248,1:250:99:0,533,6069
+chr22 42523409 rs1985842 G T 6801.90 . AC=6;AF=0.429;AN=14;BaseQRankSum=20.509;DB;DP=1454;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=150.8967;MQ=200.12;MQ0=0;MQRankSum=4.472;QD=5.65;ReadPosRankSum=9.396 GT:AD:DP:GQ:PL 0/1:1,3:4:25.84:53,0,26 0/1:153,95:249:99:1597,0,1798 0/0:245,4:250:99:0,336,4079 0/1:168,82:250:99:1339,0,1880 0/1:147,103:250:99:1522,0,1805 0/1:156,94:250:99:1341,0,2322 0/1:129,71:201:99:949,0,2082
+chr22 42523805 rs28371725 C T 1637.33 . AC=1;AF=0.071;AN=14;BaseQRankSum=-0.379;DB;DP=1516;DS;Dels=0.00;FS=0.000;HRun=2;HaplotypeScore=77.2321;MQ=226.05;MQ0=0;MQRankSum=2.862;QD=6.55;ReadPosRankSum=0.064 GT:AD:DP:GQ:PL 0/0:16,0:16:39.09:0,39,475 0/0:248,1:249:99:0,613,7187 0/1:132,116:248:99:1676,0,2916 0/0:248,0:248:99:0,625,7171 0/0:248,2:250:99:0,604,7252 0/0:250,0:250:99:0,631,7426 0/0:248,1:249:99:0,584,6964
+chr22 42523943 rs16947 A G 23661.10 . AC=8;AF=0.571;AN=14;BaseQRankSum=4.602;DB;DP=1514;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=38.3217;MQ=238.64;MQ0=0;MQRankSum=2.485;QD=15.63;ReadPosRankSum=3.749 GT:AD:DP:GQ:PL 0/1:9,5:14:99:163,0,303 1/1:3,246:250:99:8092,667,0 0/1:129,116:246:99:3190,0,2852 0/1:149,98:247:99:2429,0,3588 0/1:129,118:247:99:3267,0,3052 0/1:122,123:245:99:3428,0,3052 0/1:124,119:244:99:3092,0,2845
+chr22 42524150 . C G 3758.65 . AC=8;AF=0.571;AN=14;BaseQRankSum=24.314;DP=1506;DS;Dels=0.00;FS=0.000;HRun=1;HaplotypeScore=172.5901;MQ=242.92;MQ0=0;MQRankSum=11.537;QD=2.50;ReadPosRankSum=-9.185 GT:AD:DP:GQ:PL 1/1:3,3:6:5.98:46,6,0 0/1:161,88:250:99:708,0,300 0/1:161,88:250:99:635,0,308 0/1:160,90:250:99:658,0,229 0/1:180,69:250:99:478,0,113 0/1:176,73:250:99:530,0,271 0/1:170,79:249:99:704,0,133
+chr22 42524435 rs1807313 T A 5252.25 . AC=3;AF=0.214;AN=14;BaseQRankSum=-0.192;DB;DP=1526;DS;Dels=0.01;FS=0.000;HRun=1;HaplotypeScore=152.3866;MQ=242.06;MQ0=0;MQRankSum=1.923;QD=9.99;ReadPosRankSum=3.008 GT:AD:DP:GQ:PL 0/1:7,19:26:99:456,0,195 0/0:250,0:250:99:0,698,8167 0/0:246,2:249:99:0,673,7735 0/0:248,2:250:99:0,685,7919 0/0:250,0:250:99:0,688,7814 0/1:120,126:247:99:2539,0,3250 0/1:131,110:246:99:2257,0,3278
+chr22 42524696 rs58440431 T C 6423.61 . AC=2;AF=0.143;AN=14;BaseQRankSum=3.119;DB;DP=1509;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=53.0005;MQ=230.78;MQ0=0;MQRankSum=2.825;QD=12.85;ReadPosRankSum=2.051 GT:AD:DP:GQ:PL 0/0:9,0:9:27.08:0,27,351 0/1:132,116:250:99:3341,0,3914 0/1:141,108:250:99:3082,0,3917 0/0:248,1:250:99:0,692,8578 0/0:250,0:250:99:0,743,8836 0/0:247,2:250:99:0,695,8726 0/0:249,1:250:99:0,699,8650
+chr22 42524947 rs3892097 C T 731.18 . AC=2;AF=0.143;AN=14;BaseQRankSum=0.602;DB;DP=1495;DS;Dels=0.01;FS=0.000;HRun=1;HaplotypeScore=154.5421;MQ=217.65;MQ0=0;MQRankSum=4.304;QD=1.47;ReadPosRankSum=1.019 GT:AD:DP:GQ:PL 0/0:3,0:3:8.99:0,9,89 0/1:108,75:244:99:403,0,1684 0/1:125,74:242:99:375,0,2335 0/0:227,1:249:99:0,460,5036 0/0:226,1:247:99:0,448,4884 0/0:192,1:247:99:0,400,4405 0/0:194,1:247:99:0,405,4694
+chr22 42525132 rs1058164 G C 14639.91 . AC=5;AF=0.357;AN=14;BaseQRankSum=4.944;DB;DP=1508;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=38.1229;MQ=207.02;MQ0=6;MQRankSum=2.510;QD=11.71;ReadPosRankSum=0.306 GT:AD:DP:GQ:PL 0/0:8,0:8:24.05:0,24,309 0/1:125,125:250:99:3147,0,3294 0/0:245,1:248:99:0,549,7172 0/1:139,109:248:99:2470,0,3232 0/1:136,107:243:99:2545,0,3408 0/1:116,130:247:99:3206,0,2926 0/1:122,124:247:99:3271,0,3300
+chr22 42525772 rs28371706 G A 7552.52 . AC=4;AF=0.286;AN=14;BaseQRankSum=12.028;DB;DP=1506;DS;Dels=0.01;FS=0.000;HRun=0;HaplotypeScore=89.8512;MQ=222.09;MQ0=0;MQRankSum=5.200;QD=9.99;ReadPosRankSum=2.275 GT:AD:DP:GQ:PL 0/1:4,2:6:29.34:29,0,147 0/0:249,0:249:99:0,592,6835 0/0:249,1:250:99:0,590,7041 0/0:248,0:248:99:0,652,7316 0/1:126,120:248:99:2668,0,2833 0/1:134,113:247:99:2453,0,2485 0/1:137,113:250:99:2403,0,2988
+chr22 42525798 rs28371705 G C 1954.58 . AC=2;AF=0.143;AN=14;BaseQRankSum=6.229;DB;DP=1509;DS;Dels=0.00;FS=0.000;HRun=1;HaplotypeScore=36.0442;MQ=228.55;MQ0=0;MQRankSum=0.852;QD=3.91;ReadPosRankSum=6.520 GT:AD:DP:GQ:PL 0/0:9,0:9:27.08:0,27,342 0/1:164,85:250:99:981,0,3519 0/1:171,79:250:99:1020,0,3665 0/0:249,1:250:99:0,526,6474 0/0:249,1:250:99:0,550,6481 0/0:248,2:250:99:0,542,6933 0/0:250,0:250:99:0,604,7282
+chr22 42525811 rs28371704 T C 3688.26 . AC=2;AF=0.143;AN=14;BaseQRankSum=4.752;DB;DP=1510;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=36.9902;MQ=210.28;MQ0=0;MQRankSum=2.309;QD=7.38;ReadPosRankSum=6.262 GT:AD:DP:GQ:PL 0/0:10,0:10:27.06:0,27,333 0/1:163,86:249:99:1958,0,3391 0/1:167,78:245:99:1730,0,3945 0/0:248,1:249:99:0,542,6887 0/0:246,1:247:99:0,550,6569 0/0:247,1:250:99:0,548,6954 0/0:249,1:250:99:0,557,7079
+chr22 42525821 rs28371703 G T 3940.90 . AC=2;AF=0.143;AN=14;BaseQRankSum=4.652;DB;DP=1510;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=34.0483;MQ=210.28;MQ0=0;MQRankSum=2.924;QD=7.88;ReadPosRankSum=5.487 GT:AD:DP:GQ:PL 0/0:10,0:10:24.08:0,24,317 0/1:164,85:250:99:2033,0,3659 0/1:167,79:249:99:1907,0,4271 0/0:249,1:250:99:0,565,7321 0/0:249,1:250:99:0,545,7102 0/0:248,2:250:99:0,536,7254 0/0:249,0:250:99:0,605,7633
+chr22 42525952 rs71328650 C A 5872.92 . AC=7;AF=0.500;AN=14;BaseQRankSum=25.986;DB;DP=1505;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=144.2979;MQ=173.55;MQ0=0;MQRankSum=3.660;QD=4.68;ReadPosRankSum=7.152 GT:AD:DP:GQ:PL 1/1:2,3:5:6:53,6,0 0/1:132,117:250:99:1397,0,702 0/0:248,1:250:99:0,245,2219 0/1:166,83:250:99:1151,0,934 0/1:164,86:250:99:1070,0,1147 0/1:170,80:250:99:1009,0,1141 0/1:162,87:250:99:1194,0,1085
+chr22 42526049 . C G 8544.41 . AC=10;AF=0.714;AN=14;BaseQRankSum=-8.121;DP=1505;DS;Dels=0.01;FS=0.000;HRun=0;HaplotypeScore=241.7335;MQ=162.18;MQ0=2;MQRankSum=-1.399;QD=6.81;ReadPosRankSum=2.132 GT:AD:DP:GQ:PL 1/1:0,5:5:3:26,3,0 0/1:86,162:248:99:1053,0,1167 0/0:235,12:248:99:0,378,3886 0/1:108,137:245:99:782,0,1662 1/1:3,242:245:99:2351,264,0 1/1:5,245:250:99:2193,222,0 1/1:4,242:246:99:2140,240,0
+chr22 42526449 . T A 151.47 . AC=1;AF=0.071;AN=14;BaseQRankSum=2.662;DP=1226;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=41.2083;MQ=240.47;MQ0=0;MQRankSum=0.578;QD=4.89;ReadPosRankSum=3.611 GT:AD:DP:GQ:PL 0/1:23,8:31:99:190,0,694 0/0:188,0:190:99:0,478,5376 0/0:187,0:187:99:0,493,5322 0/0:247,0:249:99:0,634,6728 0/0:185,0:185:99:0,487,5515 0/0:202,0:202:99:0,520,5857 0/0:181,1:182:99:0,440,5362
+chr22 42526484 rs28371699 A C 4220.99 . AC=6;AF=0.429;AN=14;BaseQRankSum=-17.855;DB;DP=1532;DS;Dels=0.02;FS=0.000;HRun=0;HaplotypeScore=136.8893;MQ=233.92;MQ0=0;MQRankSum=3.448;QD=3.29;ReadPosRankSum=-2.663 GT:AD:DP:GQ:PL 0/1:16,15:31:99:238,0,428 0/1:112,135:247:99:796,0,1908 0/0:227,13:241:99:0,433,4747 0/1:108,133:242:99:588,0,2014 0/1:90,154:245:99:1055,0,1892 0/1:112,131:246:99:741,0,2222 0/1:108,137:246:99:803,0,2266
+chr22 42526549 rs56011157 C T 14276.31 . AC=8;AF=0.571;AN=14;BaseQRankSum=17.750;DB;DP=1537;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=87.3394;MQ=231.34;MQ0=0;MQRankSum=4.781;QD=9.29;ReadPosRankSum=7.463 GT:AD:DP:GQ:PL 0/1:22,15:37:99:251,0,330 1/1:23,227:250:99:5404,430,0 0/1:151,98:250:99:1878,0,2475 0/1:153,97:250:99:1769,0,2410 0/1:149,100:250:99:1792,0,2569 0/1:164,84:250:99:1440,0,2646 0/1:149,98:248:99:1742,0,2601
+chr22 42526561 rs28695233 G T 4524.61 . AC=7;AF=0.500;AN=14;BaseQRankSum=9.714;DB;DP=1538;DS;Dels=0.00;FS=0.000;HRun=1;HaplotypeScore=98.8415;MQ=220.45;MQ0=0;MQRankSum=9.430;QD=3.02;ReadPosRankSum=7.682 GT:AD:DP:GQ:PL 0/0:22,15:38:15.74:0,16,609 1/1:4,240:249:99:2685,237,0 0/1:142,108:250:99:505,0,3133 0/1:138,109:249:99:521,0,3281 0/1:150,99:249:99:336,0,3601 0/1:153,93:250:99:194,0,3695 0/1:148,97:249:99:283,0,3093
+chr22 42526562 rs75276289 G C 3780.51 . AC=6;AF=0.429;AN=14;BaseQRankSum=15.200;DB;DP=1540;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=116.4370;MQ=215.67;MQ0=0;MQRankSum=9.072;QD=2.52;ReadPosRankSum=10.863 GT:AD:DP:GQ:PL 0/0:25,15:40:17.73:0,18,633 0/1:50,199:250:99:1522,0,283 0/1:143,106:250:99:600,0,2844 0/1:143,107:250:99:605,0,3002 0/1:151,99:250:99:432,0,3352 0/1:157,93:250:99:254,0,3483 0/1:149,99:248:99:368,0,2999
+chr22 42526567 rs76312385 G A 434.33 . AC=1;AF=0.071;AN=14;BaseQRankSum=18.089;DB;DP=1540;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=89.3746;MQ=219.80;MQ0=0;MQRankSum=6.196;QD=1.74;ReadPosRankSum=7.564 GT:AD:DP:GQ:PL 0/0:22,18:40:4.68:0,5,427 0/1:34,215:250:56.26:473,0,56 0/0:142,108:250:20.78:0,21,2288 0/0:142,108:250:49.48:0,49,2451 0/0:152,97:250:99:0,210,2801 0/0:150,100:250:34.96:0,35,2515 0/0:148,102:250:77.19:0,77,2590
+chr22 42526571 rs74644586 C G 339.60 . AC=1;AF=0.071;AN=14;BaseQRankSum=-11.480;DB;DP=1540;DS;Dels=0.02;FS=0.000;HRun=4;HaplotypeScore=93.3402;MQ=218.52;MQ0=0;MQRankSum=3.709;QD=1.36;ReadPosRankSum=6.322 GT:AD:DP:GQ:PL 0/0:22,18:40:36.46:0,36,689 0/1:4,232:239:30.49:378,0,30 0/0:138,110:249:99:0,295,4017 0/0:137,111:249:99:0,250,4041 0/0:147,97:245:99:0,321,4348 0/0:150,97:247:99:0,358,4657 0/0:144,101:247:99:0,275,4123
+chr22 42526573 rs1080996 T G 12579.34 . AC=8;AF=0.571;AN=14;BaseQRankSum=6.163;DB;DP=1540;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=76.6550;MQ=224.49;MQ0=0;MQRankSum=1.355;QD=8.17;ReadPosRankSum=5.794 GT:AD:DP:GQ:PL 0/1:22,18:40:99:200,0,668 1/1:4,244:248:99:5175,439,0 0/1:136,110:250:99:1862,0,3521 0/1:136,113:249:99:1734,0,3677 0/1:144,99:250:99:1119,0,3818 0/1:150,99:250:99:1196,0,4178 0/1:145,104:250:99:1293,0,3628
+chr22 42526580 rs1080995 G C 16619.47 . AC=8;AF=0.571;AN=14;BaseQRankSum=7.991;DB;DP=1541;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=56.1489;MQ=221.29;MQ0=0;MQRankSum=2.223;QD=10.78;ReadPosRankSum=4.443 GT:AD:DP:GQ:PL 0/1:22,19:41:99:335,0,664 1/1:15,234:250:99:5895,337,0 0/1:137,113:250:99:2421,0,3301 0/1:134,116:250:99:2262,0,3430 0/1:144,105:250:99:1929,0,3421 0/1:148,101:250:99:1778,0,3867 0/1:142,108:250:99:1999,0,3334
+chr22 42526634 . T C 32.60 . AC=1;AF=0.071;AN=14;BaseQRankSum=1.147;DP=1225;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=50.0151;MQ=240.65;MQ0=0;MQRankSum=1.151;QD=1.30;ReadPosRankSum=1.276 GT:AD:DP:GQ:PL 0/1:21,4:25:71.04:71,0,702 0/0:187,2:189:99:0,481,6080 0/0:233,0:233:99:0,667,7351 0/0:230,0:230:99:0,667,7394 0/0:174,1:175:99:0,446,5469 0/0:194,2:196:99:0,498,6239 0/0:174,0:175:99:0,511,5894
+chr22 42526679 . G C 60.60 . AC=1;AF=0.071;AN=14;BaseQRankSum=-12.425;DP=1525;DS;Dels=0.09;FS=0.000;HRun=1;HaplotypeScore=331.3182;MQ=215.48;MQ0=0;MQRankSum=-14.680;QD=0.24;ReadPosRankSum=-13.323 GT:AD:DP:GQ:PL 0/0:23,0:23:66.17:0,66,829 0/1:175,56:232:99:99,0,4273 0/0:199,26:226:76.45:0,76,5104 0/0:196,37:233:41.98:0,42,5109 0/0:170,47:218:99:0,162,4505 0/0:188,36:224:99:0,230,4974 0/0:177,47:225:99:0,167,4592
+chr22 42526694 rs1065852 G A 4420.63 . AC=2;AF=0.143;AN=14;BaseQRankSum=8.566;DB;DP=1529;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=117.6833;MQ=214.96;MQ0=0;MQRankSum=5.852;QD=8.84;ReadPosRankSum=1.454 GT:AD:DP:GQ:PL 0/0:29,0:29:81.24:0,81,1040 0/1:136,114:250:99:2333,0,3170 0/1:145,104:250:99:2087,0,2794 0/0:250,0:250:99:0,586,6963 0/0:247,2:250:99:0,497,6185 0/0:248,2:250:99:0,544,6640 0/0:250,0:250:99:0,571,6444
+chr22 42527471 rs28633410 T C 26831.16 . AC=10;AF=0.833;AN=12;BaseQRankSum=-1.092;DB;DP=1501;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=79.3853;MQ=176.86;MQ0=0;MQRankSum=-2.644;QD=17.89;ReadPosRankSum=2.185 GT:AD:DP:GQ:PL ./. 1/1:1,249:250:99:5741,478,0 0/1:102,148:250:99:3026,0,1748 0/1:115,132:250:99:2716,0,1896 1/1:1,249:250:99:5040,392,0 1/1:1,248:250:99:5109,427,0 1/1:4,245:249:99:5199,306,0
+chr22 42527533 rs28624811 A G 13619.46 . AC=7;AF=0.583;AN=12;BaseQRankSum=-8.893;DB;DP=1501;DS;Dels=0.01;FS=0.000;HRun=1;HaplotypeScore=86.1948;MQ=179.18;MQ0=0;MQRankSum=0.472;QD=9.08;ReadPosRankSum=0.778 GT:AD:DP:GQ:PL ./. 1/1:2,241:243:99:4171,416,0 0/1:113,132:245:99:2000,0,2018 0/1:120,126:246:99:1781,0,1970 0/1:131,118:249:99:1885,0,1784 0/1:122,126:248:99:1893,0,1807 0/1:122,127:249:99:1890,0,2119
+chr22 42527793 rs1080989 C T 3454.66 . AC=2;AF=0.167;AN=12;BaseQRankSum=-3.007;DB;DP=1074;DS;Dels=0.01;FS=0.000;HRun=1;HaplotypeScore=75.7865;MQ=209.00;MQ0=0;MQRankSum=3.014;QD=9.36;ReadPosRankSum=0.618 GT:AD:DP:GQ:PL ./. 0/1:72,90:162:99:1699,0,1767 0/1:103,96:202:99:1756,0,2532 0/0:188,0:188:99:0,526,5889 0/0:160,0:160:99:0,457,4983 0/0:197,0:198:99:0,544,6100 0/0:156,0:156:99:0,439,5041
+chr22 42527891 . T A 109.83 . AC=5;AF=0.417;AN=12;BaseQRankSum=11.235;DP=1500;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=638.4601;MQ=166.82;MQ0=0;MQRankSum=1.444;QD=0.09;ReadPosRankSum=0.839 GT:AD:DP:GQ:PL ./. 0/1:238,7:248:13.70:14,0,38 0/0:246,3:250:5.97:0,6,45 0/1:239,11:250:31.42:31,0,54 0/1:232,16:250:49.09:49,0,76 0/1:233,14:249:52.10:52,0,53 0/1:238,11:250:12.71:13,0,36
diff --git a/vcf/test/gatk_26_meta.vcf b/vcf/test/gatk_26_meta.vcf
new file mode 100644
index 0000000..1dd2e56
--- /dev/null
+++ b/vcf/test/gatk_26_meta.vcf
@@ -0,0 +1,4 @@
+##fileformat=VCFv4.1
+##GATKCommandLine=<ID=LeftAlignAndTrimVariants,Version=2.6-4-g3e5ff60,Date="Thu Jul 11 13:48:05 BST 2013",Epoch=1373546885069,CommandLineOptions="analysis_type=LeftAlignAndTrimVariants">
+##GATKCommandLine=<ID=VariantAnnotator,Version=2.6-4-g3e5ff60,Date="Thu Jul 11 13:48:41 BST 2013",Epoch=1373546921584,CommandLineOptions="analysis_type=VariantAnnotator annotation=[HomopolymerRun, VariantType, TandemRepeatAnnotator]">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT
diff --git a/vcf/test/gonl.chr20.release4.gtc.vcf b/vcf/test/gonl.chr20.release4.gtc.vcf
new file mode 100644
index 0000000..03588bf
--- /dev/null
+++ b/vcf/test/gonl.chr20.release4.gtc.vcf
@@ -0,0 +1,120 @@
+##fileformat=VCFv4.1
+##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL reference_sequence=/target/gpfs2/gcc/resources/hg19/indices/human_g1k_v37.fa rodBind=[] nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQua [...]
+##CombineVariants="analysis_type=CombineVariants input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[1:123000001-126000000] excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[/humgen/1kg/processing/production_wgs_phase1/consensus_wgs/v2b/calls/chr1/AFR/AFR.phase1.chr1.42.raw.snps.vcf, /humgen/1kg/processing/production_wgs_phase1/consensus_wgs/v2b/calls/chr1/ASN/ASN.phase1.chr1.42.raw.snps.vcf, /humg [...]
+##FILTER=<ID=TruthSensitivityTranche99.50to99.60,Description="Truth sensitivity tranche level at VSQ Lod: 0.0349 <= x < 0.6732">
+##FILTER=<ID=TruthSensitivityTranche99.60to99.70,Description="Truth sensitivity tranche level at VSQ Lod: -1.1344 <= x < 0.0349">
+##FILTER=<ID=TruthSensitivityTranche99.70to99.80,Description="Truth sensitivity tranche level at VSQ Lod: -3.7349 <= x < -1.1344">
+##FILTER=<ID=TruthSensitivityTranche99.80to99.90,Description="Truth sensitivity tranche level at VSQ Lod: -13.9352 <= x < -3.7349">
+##FILTER=<ID=TruthSensitivityTranche99.85to99.87,Description="Truth sensitivity tranche level at VSQ Lod: -0.0128 <= x < 0.5027">
+##FILTER=<ID=TruthSensitivityTranche99.87to99.88,Description="Truth sensitivity tranche level at VSQ Lod: -0.2657 <= x < -0.0128">
+##FILTER=<ID=TruthSensitivityTranche99.88to99.89,Description="Truth sensitivity tranche level at VSQ Lod: -0.5671 <= x < -0.2657">
+##FILTER=<ID=TruthSensitivityTranche99.89to99.90,Description="Truth sensitivity tranche level at VSQ Lod: -0.9162 <= x < -0.5671">
+##FILTER=<ID=TruthSensitivityTranche99.90to100.00+,Description="Truth sensitivity tranche level at VQS Lod < -37539.4862">
+##FILTER=<ID=TruthSensitivityTranche99.90to100.00,Description="Truth sensitivity tranche level at VSQ Lod: -37539.4862 <= x < -13.9352">
+##FILTER=<ID=TruthSensitivityTranche99.90to99.91,Description="Truth sensitivity tranche level at VSQ Lod: -1.2368 <= x < -0.9162">
+##FILTER=<ID=TruthSensitivityTranche99.91to99.92,Description="Truth sensitivity tranche level at VSQ Lod: -1.6803 <= x < -1.2368">
+##FILTER=<ID=TruthSensitivityTranche99.92to99.93,Description="Truth sensitivity tranche level at VSQ Lod: -2.1816 <= x < -1.6803">
+##FILTER=<ID=TruthSensitivityTranche99.93to99.94,Description="Truth sensitivity tranche level at VSQ Lod: -2.8718 <= x < -2.1816">
+##FILTER=<ID=TruthSensitivityTranche99.94to100.00+,Description="Truth sensitivity tranche level at VQS Lod < -Infinity">
+##FILTER=<ID=TruthSensitivityTranche99.94to100.00,Description="Truth sensitivity tranche level at VSQ Lod: -Infinity <= x < -2.8718">
+##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
+##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
+##SelectVariants="analysis_type=SelectVariants input_file=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[1:1-5000001] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL reference_sequence=/target/gpfs2/gcc/home/lfrancioli/gonl/resources/hg19/indices/human_g1k_v37.fa rodBind=[] nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOri [...]
+##SetFilterPASS="analysis_type=SetFilterPASS input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/target/gpfs2/gcc/resources/hg19/indices/human_g1k_v37.fa nonDeterministicRandomSeed=false disableRandomization=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 enable_experimental_downsampling= [...]
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/1kg/phase1_cleaned_bams/bams/chr1/CHB.phase1.chr1.42.cleaned.bam, /humgen/1kg/phase1_cleaned_bams/bams/chr1/CHS.phase1.chr1.42.cleaned.bam, /humgen/1kg/phase1_cleaned_bams/bams/chr1/CLM.phase1.chr1.42.cleaned.bam, /humgen/1kg/phase1_cleaned_bams/bams/chr1/JPT.phase1.chr1.42.cleaned.bam, /humgen/1kg/phase1_cleaned_bams/bams/chr1/MXL.phase1.chr1.42.cleaned.bam, /humgen/1kg/phase1_cleaned_bams/bams/chr1/PUR.phase1.chr1.4 [...]
+##VariantAnnotator="analysis_type=VariantAnnotator input_file=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[1:1-5000001] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL reference_sequence=/target/gpfs2/gcc/home/lfrancioli/gonl/resources/hg19/indices/human_g1k_v37.fa rodBind=[] nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null us [...]
+##contig=<ID=1,assembly=b37,length=249250621>
+##contig=<ID=10,assembly=b37,length=135534747>
+##contig=<ID=11,assembly=b37,length=135006516>
+##contig=<ID=12,assembly=b37,length=133851895>
+##contig=<ID=13,assembly=b37,length=115169878>
+##contig=<ID=14,assembly=b37,length=107349540>
+##contig=<ID=15,assembly=b37,length=102531392>
+##contig=<ID=16,assembly=b37,length=90354753>
+##contig=<ID=17,assembly=b37,length=81195210>
+##contig=<ID=18,assembly=b37,length=78077248>
+##contig=<ID=19,assembly=b37,length=59128983>
+##contig=<ID=2,assembly=b37,length=243199373>
+##contig=<ID=20,assembly=b37,length=63025520>
+##contig=<ID=21,assembly=b37,length=48129895>
+##contig=<ID=22,assembly=b37,length=51304566>
+##contig=<ID=3,assembly=b37,length=198022430>
+##contig=<ID=4,assembly=b37,length=191154276>
+##contig=<ID=5,assembly=b37,length=180915260>
+##contig=<ID=6,assembly=b37,length=171115067>
+##contig=<ID=7,assembly=b37,length=159138663>
+##contig=<ID=8,assembly=b37,length=146364022>
+##contig=<ID=9,assembly=b37,length=141213431>
+##contig=<ID=GL000191.1,assembly=b37,length=106433>
+##contig=<ID=GL000192.1,assembly=b37,length=547496>
+##contig=<ID=GL000193.1,assembly=b37,length=189789>
+##contig=<ID=GL000194.1,assembly=b37,length=191469>
+##contig=<ID=GL000195.1,assembly=b37,length=182896>
+##contig=<ID=GL000196.1,assembly=b37,length=38914>
+##contig=<ID=GL000197.1,assembly=b37,length=37175>
+##contig=<ID=GL000198.1,assembly=b37,length=90085>
+##contig=<ID=GL000199.1,assembly=b37,length=169874>
+##contig=<ID=GL000200.1,assembly=b37,length=187035>
+##contig=<ID=GL000201.1,assembly=b37,length=36148>
+##contig=<ID=GL000202.1,assembly=b37,length=40103>
+##contig=<ID=GL000203.1,assembly=b37,length=37498>
+##contig=<ID=GL000204.1,assembly=b37,length=81310>
+##contig=<ID=GL000205.1,assembly=b37,length=174588>
+##contig=<ID=GL000206.1,assembly=b37,length=41001>
+##contig=<ID=GL000207.1,assembly=b37,length=4262>
+##contig=<ID=GL000208.1,assembly=b37,length=92689>
+##contig=<ID=GL000209.1,assembly=b37,length=159169>
+##contig=<ID=GL000210.1,assembly=b37,length=27682>
+##contig=<ID=GL000211.1,assembly=b37,length=166566>
+##contig=<ID=GL000212.1,assembly=b37,length=186858>
+##contig=<ID=GL000213.1,assembly=b37,length=164239>
+##contig=<ID=GL000214.1,assembly=b37,length=137718>
+##contig=<ID=GL000215.1,assembly=b37,length=172545>
+##contig=<ID=GL000216.1,assembly=b37,length=172294>
+##contig=<ID=GL000217.1,assembly=b37,length=172149>
+##contig=<ID=GL000218.1,assembly=b37,length=161147>
+##contig=<ID=GL000219.1,assembly=b37,length=179198>
+##contig=<ID=GL000220.1,assembly=b37,length=161802>
+##contig=<ID=GL000221.1,assembly=b37,length=155397>
+##contig=<ID=GL000222.1,assembly=b37,length=186861>
+##contig=<ID=GL000223.1,assembly=b37,length=180455>
+##contig=<ID=GL000224.1,assembly=b37,length=179693>
+##contig=<ID=GL000225.1,assembly=b37,length=211173>
+##contig=<ID=GL000226.1,assembly=b37,length=15008>
+##contig=<ID=GL000227.1,assembly=b37,length=128374>
+##contig=<ID=GL000228.1,assembly=b37,length=129120>
+##contig=<ID=GL000229.1,assembly=b37,length=19913>
+##contig=<ID=GL000230.1,assembly=b37,length=43691>
+##contig=<ID=GL000231.1,assembly=b37,length=27386>
+##contig=<ID=GL000232.1,assembly=b37,length=40652>
+##contig=<ID=GL000233.1,assembly=b37,length=45941>
+##contig=<ID=GL000234.1,assembly=b37,length=40531>
+##contig=<ID=GL000235.1,assembly=b37,length=34474>
+##contig=<ID=GL000236.1,assembly=b37,length=41934>
+##contig=<ID=GL000237.1,assembly=b37,length=45867>
+##contig=<ID=GL000238.1,assembly=b37,length=39939>
+##contig=<ID=GL000239.1,assembly=b37,length=33824>
+##contig=<ID=GL000240.1,assembly=b37,length=41933>
+##contig=<ID=GL000241.1,assembly=b37,length=42152>
+##contig=<ID=GL000242.1,assembly=b37,length=43523>
+##contig=<ID=GL000243.1,assembly=b37,length=43341>
+##contig=<ID=GL000244.1,assembly=b37,length=39929>
+##contig=<ID=GL000245.1,assembly=b37,length=36651>
+##contig=<ID=GL000246.1,assembly=b37,length=38154>
+##contig=<ID=GL000247.1,assembly=b37,length=36422>
+##contig=<ID=GL000248.1,assembly=b37,length=39786>
+##contig=<ID=GL000249.1,assembly=b37,length=38502>
+##contig=<ID=MT,assembly=b37,length=16569>
+##contig=<ID=X,assembly=b37,length=155270560>
+##contig=<ID=Y,assembly=b37,length=59373566>
+##reference=file:///target/gpfs2/gcc/resources/hg19/indices/human_g1k_v37.fa
+##source=SelectVariants
+##INFO=<ID=GTC,Number=G,Type=Integer,Description="GenoType Counts. For each ALT allele in the same order as listed = 0/0,0/1,1/1,0/2,1/2,2/2,0/3,1/3,2/3,3/3,etc. Phasing is ignored; hence 1/0, 0|1 and 1|0 are all counted as 0/1. When one or more alleles is not called for a genotype in a specific sample (./., ./0, ./1, ./2, etc.), that sample's genotype is completely discarded for calculating GTC.">
+#CHROM POS ID REF ALT QUAL FILTER INFO
+20 60309 . G T 991.76 PASS AC=4;AN=996;GTC=494,4,0
+20 60573 . T C 124.17 PASS AC=1;AN=996;GTC=497,1,0
+20 60828 . T G 807.71 PASS AC=6;AN=996;GTC=492,6,0
+20 61098 rs6078030 C T 51254.56 PASS AC=225;AN=996;GTC=304,163,31
+20 61270 . A C 2414.84 PASS AC=20;AN=992;GTC=476,20,0
+20 61289 . A C 419.41 TruthSensitivityTranche99.70to99.80 AC=71;AN=960;GTC=411,67,2
+20 61682 . C T 12.27 PASS AC=1;AN=996;GTC=497,1,0
diff --git a/vcf/test/info-type-character.vcf b/vcf/test/info-type-character.vcf
new file mode 100644
index 0000000..77b24a7
--- /dev/null
+++ b/vcf/test/info-type-character.vcf
@@ -0,0 +1,8 @@
+##fileformat=VCFv4.1
+##INFO=<ID=FLOAT_1,Number=1,Type=Float,Description="A floating point value">
+##INFO=<ID=CHAR_1,Number=1,Type=Character,Description="A character value">
+##INFO=<ID=FLOAT_N,Number=.,Type=Float,Description="Floating point values">
+##INFO=<ID=CHAR_N,Number=.,Type=Character,Description="Character values">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT Sample
+chr1 100 id1 G A . . FLOAT_1=123.456;CHAR_1=Y;FLOAT_N=123.456;CHAR_N=Y GT 0/1
diff --git a/vcf/test/issue-140-file1.vcf b/vcf/test/issue-140-file1.vcf
new file mode 100644
index 0000000..8ee2de2
--- /dev/null
+++ b/vcf/test/issue-140-file1.vcf
@@ -0,0 +1,35 @@
+##fileformat=VCFv4.1
+##source=VarScan2
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Total depth of quality bases">
+##INFO=<ID=SOMATIC,Number=0,Type=Flag,Description="Indicates if record is a somatic mutation">
+##INFO=<ID=SS,Number=1,Type=String,Description="Somatic status of variant (0=Reference,1=Germline,2=Somatic,3=LOH, or 5=Unknown)">
+##INFO=<ID=SSC,Number=1,Type=String,Description="Somatic score in Phred scale (0-255) derived from somatic p-value">
+##INFO=<ID=GPV,Number=1,Type=Float,Description="Fisher's Exact Test P-value of tumor+normal versus no variant for Germline calls">
+##INFO=<ID=SPV,Number=1,Type=Float,Description="Fisher's Exact Test P-value of tumor versus normal for Somatic/LOH calls">
+##FILTER=<ID=str10,Description="Less than 10% or more than 90% of variant supporting reads on one strand">
+##FILTER=<ID=indelError,Description="Likely artifact due to indel reads at this position">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=RD,Number=1,Type=Integer,Description="Depth of reference-supporting bases (reads1)">
+##FORMAT=<ID=AD,Number=1,Type=Integer,Description="Depth of variant-supporting bases (reads2)">
+##FORMAT=<ID=FREQ,Number=1,Type=String,Description="Variant allele frequency">
+##FORMAT=<ID=DP4,Number=1,Type=String,Description="Strand read counts: ref/fwd, ref/rev, var/fwd, var/rev">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NORMAL
+chr1 10 . G GGT . PASS DP=91;SS=1;SSC=2;GPV=3.0109E-23;SPV=5.8324E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:36:13:22:62.86%:2,11,1,21
+chr1 20 . GT G . PASS DP=77;SS=1;SSC=2;GPV=2.4504E-29;SPV=6.0772E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:28:5:22:81.48%:0,5,1,21
+chr2 30 . AC A . PASS DP=22;SS=1;SSC=7;GPV=1.3117E-10;SPV=1.9481E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:10:2:8:80%:0,2,0,8
+chr2 40 . AAAC A . PASS DP=42;SS=1;SSC=12;GPV=7.3092E-18;SPV=6.278E-2 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:13:4:9:69.23%:4,0,9,0
+chr3 50 . TC T . PASS DP=41;SS=1;SSC=2;GPV=9.8874E-23;SPV=5.3659E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:22:1:21:95.45%:1,0,15,6
+chr10 60 . T TTAA . PASS DP=27;SS=1;SSC=2;GPV=1.4382E-14;SPV=5.5556E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:12:0:12:100%:0,0,0,12
+chr10 70 . C CTG . PASS DP=40;SS=1;SSC=7;GPV=3.6006E-9;SPV=1.9922E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:10:6:4:40%:0,6,0,4
+chr11 80 . AGTT A . PASS DP=86;SS=1;SSC=0;GPV=4.1554E-34;SPV=8.5795E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:32:4:28:87.5%:1,3,0,28
+chr11 90 . GA G . PASS DP=41;SS=1;SSC=3;GPV=1.9197E-12;SPV=4.089E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:15:5:9:64.29%:1,4,0,9
+chr20 100 . TTTTG T . PASS DP=23;SS=1;SSC=1;GPV=2.9149E-12;SPV=6.5217E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:8:0:8:100%:0,0,7,1
+chr20 110 . GA G . PASS DP=83;SS=1;SSC=13;GPV=1E0;SPV=4.0806E-2 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:35:5:28:84.85%:4,1,12,16
+chrX 120 . G GA . PASS DP=61;SS=1;SSC=1;GPV=1.6967E-25;SPV=7.0485E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:22:3:19:86.36%:0,3,1,18
+chrX 130 . T TAA . PASS DP=19;SS=1;SSC=1;GPV=1.1285E-5;SPV=7.2172E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:8:2:5:71.43%:0,2,0,5
+chrY 140 . G GTTT . PASS DP=62;SS=1;SSC=0;GPV=3.4914E-15;SPV=9.571E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:36:2:19:90.48%:1,1,15,4
+chrY 150 . T TGAAG . PASS DP=28;SS=1;SSC=12;GPV=1.7583E-10;SPV=5.5797E-2 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:13:5:8:61.54%:4,1,2,6
+chrM 160 . G GTTT . PASS DP=62;SS=1;SSC=0;GPV=3.4914E-15;SPV=9.571E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:36:2:19:90.48%:1,1,15,4
+chrM 170 . T TGAAG . PASS DP=28;SS=1;SSC=12;GPV=1.7583E-10;SPV=5.5797E-2 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:13:5:8:61.54%:4,1,2,6
diff --git a/vcf/test/issue-140-file2.vcf b/vcf/test/issue-140-file2.vcf
new file mode 100644
index 0000000..7852133
--- /dev/null
+++ b/vcf/test/issue-140-file2.vcf
@@ -0,0 +1,34 @@
+##fileformat=VCFv4.1
+##source=VarScan2
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Total depth of quality bases">
+##INFO=<ID=SOMATIC,Number=0,Type=Flag,Description="Indicates if record is a somatic mutation">
+##INFO=<ID=SS,Number=1,Type=String,Description="Somatic status of variant (0=Reference,1=Germline,2=Somatic,3=LOH, or 5=Unknown)">
+##INFO=<ID=SSC,Number=1,Type=String,Description="Somatic score in Phred scale (0-255) derived from somatic p-value">
+##INFO=<ID=GPV,Number=1,Type=Float,Description="Fisher's Exact Test P-value of tumor+normal versus no variant for Germline calls">
+##INFO=<ID=SPV,Number=1,Type=Float,Description="Fisher's Exact Test P-value of tumor versus normal for Somatic/LOH calls">
+##FILTER=<ID=str10,Description="Less than 10% or more than 90% of variant supporting reads on one strand">
+##FILTER=<ID=indelError,Description="Likely artifact due to indel reads at this position">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=RD,Number=1,Type=Integer,Description="Depth of reference-supporting bases (reads1)">
+##FORMAT=<ID=AD,Number=1,Type=Integer,Description="Depth of variant-supporting bases (reads2)">
+##FORMAT=<ID=FREQ,Number=1,Type=String,Description="Variant allele frequency">
+##FORMAT=<ID=DP4,Number=1,Type=String,Description="Strand read counts: ref/fwd, ref/rev, var/fwd, var/rev">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NORMAL
+chr1 10 . G GGT . PASS DP=91;SS=1;SSC=2;GPV=3.0109E-23;SPV=5.8324E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:36:13:22:62.86%:2,11,1,21
+chr1 20 . GT G . PASS DP=77;SS=1;SSC=2;GPV=2.4504E-29;SPV=6.0772E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:28:5:22:81.48%:0,5,1,21
+chr2 30 . AC A . PASS DP=22;SS=1;SSC=7;GPV=1.3117E-10;SPV=1.9481E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:10:2:8:80%:0,2,0,8
+chr2 41 . AAAC A . PASS DP=42;SS=1;SSC=12;GPV=7.3092E-18;SPV=6.278E-2 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:13:4:9:69.23%:4,0,9,0
+chr10 60 . T TTAA . PASS DP=27;SS=1;SSC=2;GPV=1.4382E-14;SPV=5.5556E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:12:0:12:100%:0,0,0,12
+chr10 70 . C CTG . PASS DP=40;SS=1;SSC=7;GPV=3.6006E-9;SPV=1.9922E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:10:6:4:40%:0,6,0,4
+chr11 80 . AGTT A . PASS DP=86;SS=1;SSC=0;GPV=4.1554E-34;SPV=8.5795E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:32:4:28:87.5%:1,3,0,28
+chr11 91 . GA G . PASS DP=41;SS=1;SSC=3;GPV=1.9197E-12;SPV=4.089E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:15:5:9:64.29%:1,4,0,9
+chr20 100 . TTTTG T . PASS DP=23;SS=1;SSC=1;GPV=2.9149E-12;SPV=6.5217E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:8:0:8:100%:0,0,7,1
+chr20 110 . GA G . PASS DP=83;SS=1;SSC=13;GPV=1E0;SPV=4.0806E-2 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:35:5:28:84.85%:4,1,12,16
+chrX 120 . G GA . PASS DP=61;SS=1;SSC=1;GPV=1.6967E-25;SPV=7.0485E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:22:3:19:86.36%:0,3,1,18
+chrX 130 . T TAA . PASS DP=19;SS=1;SSC=1;GPV=1.1285E-5;SPV=7.2172E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:8:2:5:71.43%:0,2,0,5
+chrY 140 . G GTTT . PASS DP=62;SS=1;SSC=0;GPV=3.4914E-15;SPV=9.571E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:36:2:19:90.48%:1,1,15,4
+chrY 149 . T TGAAG . PASS DP=28;SS=1;SSC=12;GPV=1.7583E-10;SPV=5.5797E-2 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:13:5:8:61.54%:4,1,2,6
+chrM 160 . G GTTT . PASS DP=62;SS=1;SSC=0;GPV=3.4914E-15;SPV=9.571E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:36:2:19:90.48%:1,1,15,4
+chrM 170 . T TGAAG . PASS DP=28;SS=1;SSC=12;GPV=1.7583E-10;SPV=5.5797E-2 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:13:5:8:61.54%:4,1,2,6
diff --git a/vcf/test/issue-140-file3.vcf b/vcf/test/issue-140-file3.vcf
new file mode 100644
index 0000000..754f6b6
--- /dev/null
+++ b/vcf/test/issue-140-file3.vcf
@@ -0,0 +1,25 @@
+##fileformat=VCFv4.1
+##source=VarScan2
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Total depth of quality bases">
+##INFO=<ID=SOMATIC,Number=0,Type=Flag,Description="Indicates if record is a somatic mutation">
+##INFO=<ID=SS,Number=1,Type=String,Description="Somatic status of variant (0=Reference,1=Germline,2=Somatic,3=LOH, or 5=Unknown)">
+##INFO=<ID=SSC,Number=1,Type=String,Description="Somatic score in Phred scale (0-255) derived from somatic p-value">
+##INFO=<ID=GPV,Number=1,Type=Float,Description="Fisher's Exact Test P-value of tumor+normal versus no variant for Germline calls">
+##INFO=<ID=SPV,Number=1,Type=Float,Description="Fisher's Exact Test P-value of tumor versus normal for Somatic/LOH calls">
+##FILTER=<ID=str10,Description="Less than 10% or more than 90% of variant supporting reads on one strand">
+##FILTER=<ID=indelError,Description="Likely artifact due to indel reads at this position">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=RD,Number=1,Type=Integer,Description="Depth of reference-supporting bases (reads1)">
+##FORMAT=<ID=AD,Number=1,Type=Integer,Description="Depth of variant-supporting bases (reads2)">
+##FORMAT=<ID=FREQ,Number=1,Type=String,Description="Variant allele frequency">
+##FORMAT=<ID=DP4,Number=1,Type=String,Description="Strand read counts: ref/fwd, ref/rev, var/fwd, var/rev">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NORMAL
+chr3 50 . TC T . PASS DP=41;SS=1;SSC=2;GPV=9.8874E-23;SPV=5.3659E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:22:1:21:95.45%:1,0,15,6
+chr10 60 . T TTAA . PASS DP=27;SS=1;SSC=2;GPV=1.4382E-14;SPV=5.5556E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:12:0:12:100%:0,0,0,12
+chr10 70 . C CTG . PASS DP=40;SS=1;SSC=7;GPV=3.6006E-9;SPV=1.9922E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:10:6:4:40%:0,6,0,4
+chr11 80 . AGTT A . PASS DP=86;SS=1;SSC=0;GPV=4.1554E-34;SPV=8.5795E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:32:4:28:87.5%:1,3,0,28
+chr11 90 . GA G . PASS DP=41;SS=1;SSC=3;GPV=1.9197E-12;SPV=4.089E-1 GT:GQ:DP:RD:AD:FREQ:DP4 0/1:.:15:5:9:64.29%:1,4,0,9
+chr20 100 . TTTTG T . PASS DP=23;SS=1;SSC=1;GPV=2.9149E-12;SPV=6.5217E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:8:0:8:100%:0,0,7,1
+chrX 120 . G GA . PASS DP=61;SS=1;SSC=1;GPV=1.6967E-25;SPV=7.0485E-1 GT:GQ:DP:RD:AD:FREQ:DP4 1/1:.:22:3:19:86.36%:0,3,1,18
diff --git a/vcf/test/issue-16.vcf b/vcf/test/issue-16.vcf
new file mode 100644
index 0000000..db5f9ca
--- /dev/null
+++ b/vcf/test/issue-16.vcf
@@ -0,0 +1,21 @@
+##fileformat=VCFv4.0
+##fileDate=20090805
+##source=myImputationProgramV3.1
+##reference=1000GenomesPilot-NCBI36
+##phasing=partial
+##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
+##INFO=<ID=AF,Number=.,Type=Float,Description="Allele Frequency">
+##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele">
+##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership, build 129">
+##INFO=<ID=H2,Number=0,Type=Flag,Description="HapMap2 membership">
+##INFO=<ID=AC,Number=A,Type=Integer,Description="Total number of alternate alleles in called genotypes">
+##FILTER=<ID=q10,Description="Quality below 10">
+##FILTER=<ID=s50,Description="Less than 50% of samples have data">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=HQ,Number=2,Type=Integer,Description="Haplotype Quality">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003
+20 1234568 . G . . PASS NS=3;DP=9;AA=G GT ./. ./. ./.
+
diff --git a/vcf/test/issue-201.vcf.gz b/vcf/test/issue-201.vcf.gz
new file mode 100644
index 0000000..2af09fa
Binary files /dev/null and b/vcf/test/issue-201.vcf.gz differ
diff --git a/vcf/test/issue-201.vcf.gz.tbi b/vcf/test/issue-201.vcf.gz.tbi
new file mode 100644
index 0000000..23ffe4d
Binary files /dev/null and b/vcf/test/issue-201.vcf.gz.tbi differ
diff --git a/vcf/test/issue_49.vcf b/vcf/test/issue_49.vcf
new file mode 100644
index 0000000..32f34ab
--- /dev/null
+++ b/vcf/test/issue_49.vcf
@@ -0,0 +1,34 @@
+##fileformat=VCFv4.1
+##INFO=<ID=LDAF,Number=1,Type=Float,Description="MLE Allele Frequency Accounting for LD">
+##INFO=<ID=AVGPOST,Number=1,Type=Float,Description="Average posterior probability from MaCH/Thunder">
+##INFO=<ID=RSQ,Number=1,Type=Float,Description="Genotype imputation quality from MaCH/Thunder">
+##INFO=<ID=ERATE,Number=1,Type=Float,Description="Per-marker Mutation rate from MaCH/Thunder">
+##INFO=<ID=THETA,Number=1,Type=Float,Description="Per-marker Transition rate from MaCH/Thunder">
+##INFO=<ID=CIEND,Number=2,Type=Integer,Description="Confidence interval around END for imprecise variants">
+##INFO=<ID=CIPOS,Number=2,Type=Integer,Description="Confidence interval around POS for imprecise variants">
+##INFO=<ID=END,Number=1,Type=Integer,Description="End position of the variant described in this record">
+##INFO=<ID=HOMLEN,Number=.,Type=Integer,Description="Length of base pair identical micro-homology at event breakpoints">
+##INFO=<ID=HOMSEQ,Number=.,Type=String,Description="Sequence of base pair identical micro-homology at event breakpoints">
+##INFO=<ID=SVLEN,Number=1,Type=Integer,Description="Difference in length between REF and ALT alleles">
+##INFO=<ID=SVTYPE,Number=1,Type=String,Description="Type of structural variant">
+##INFO=<ID=AC,Number=.,Type=Integer,Description="Alternate Allele Count">
+##INFO=<ID=AN,Number=1,Type=Integer,Description="Total Allele Count">
+##ALT=<ID=DEL,Description="Deletion">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=DS,Number=1,Type=Float,Description="Genotype dosage from MaCH/Thunder">
+##FORMAT=<ID=GL,Number=.,Type=Float,Description="Genotype Likelihoods">
+##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele, ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/pilot_data/technical/reference/ancestral_alignments/README">
+##INFO=<ID=AF,Number=1,Type=Float,Description="Global Allele Frequency based on AC/AN">
+##INFO=<ID=AMR_AF,Number=1,Type=Float,Description="Allele Frequency for samples from AMR based on AC/AN">
+##INFO=<ID=ASN_AF,Number=1,Type=Float,Description="Allele Frequency for samples from ASN based on AC/AN">
+##INFO=<ID=AFR_AF,Number=1,Type=Float,Description="Allele Frequency for samples from AFR based on AC/AN">
+##INFO=<ID=EUR_AF,Number=1,Type=Float,Description="Allele Frequency for samples from EUR based on AC/AN">
+##INFO=<ID=VT,Number=1,Type=String,Description="indicates what type of variant the line represents">
+##INFO=<ID=SNPSOURCE,Number=.,Type=String,Description="indicates if a snp was called when analysing the low coverage or exome alignment data">
+##reference=GRCh37
+#CHROM POS ID REF ALT QUAL FILTER INFO
+1 10583 rs58108140 G A 100 PASS AVGPOST=0.7707;RSQ=0.4319;LDAF=0.2327;ERATE=0.0161;AN=2184;VT=SNP;AA=.;THETA=0.0046;AC=314;SNPSOURCE=LOWCOV;AF=0.14;ASN_AF=0.13;AMR_AF=0.17;AFR_AF=0.04;EUR_AF=0.21
+1 10611 rs189107123 C G 100 PASS AN=2184;THETA=0.0077;VT=SNP;AA=.;AC=41;ERATE=0.0048;SNPSOURCE=LOWCOV;AVGPOST=0.9330;LDAF=0.0479;RSQ=0.3475;AF=0.02;ASN_AF=0.01;AMR_AF=0.03;AFR_AF=0.01;EUR_AF=0.02
+1 13302 rs180734498 C T 100 PASS THETA=0.0048;AN=2184;AC=249;VT=SNP;AA=.;RSQ=0.6281;LDAF=0.1573;SNPSOURCE=LOWCOV;AVGPOST=0.8895;ERATE=0.0058;AF=0.11;ASN_AF=0.02;AMR_AF=0.08;AFR_AF=0.21;EUR_AF=0.14
+1 947117 rs145699537 C T 100 PASS RSQ=0.9336;AA=C;AN=2184;LDAF=0.0010;VT=SNP;SNPSOURCE=LOWCOV;THETA=0.0007;ERATE=0.0003;AC=2;AVGPOST=0.9999;AF=0.0009;AFR_AF=0.0041
+1 947121 MERGED_DEL_2_94 GCCTCAGTCCTTTTCATGGCTGCATAATATTCCGTTGTGTGGACATTCCACACTTTGTGTGTCCATCCATCACTGATGGACATGTGCTCCGTTCCTGCTACTTGTTTATTGTAAACTGTGCTGCCATGGACATTTGTATGCAAGTATTTGAACACCTATTTTCAATTCTTTTGGACACATGCCTAGAAGTGGAACTGCTGGGTTCCCAATAATTCTGTTGAACGTTTTGAGCATCGCGGCGGCCGCACTGTTTTACATTCTCAACAGCAATGCATGTACCAGGATTCCAGTTCCTCTATGTATTCCCCAGTGCTTGTTACTGCCTTTATGTTTATTTTATATTATTTTTTGAGACTGTCTTGCTCTGCTGCCCAGGCTGGAGTGCATTGGTGCAATCTTGGCTCACCACAATCTCTGCCTCCTGGGTTCAAGGGATTCTCCCGCCTCAGCCTCCCAAG [...]
diff --git a/vcf/test/metadata-whitespace.vcf b/vcf/test/metadata-whitespace.vcf
new file mode 100644
index 0000000..c163f9a
--- /dev/null
+++ b/vcf/test/metadata-whitespace.vcf
@@ -0,0 +1,56 @@
+##fileformat=VCFv4.2
+##FILTER=<ID=PASS, Description="All filters passed">
+##samtoolsVersion=1.0-17-gfaf4dd6+htslib-1.0-11-g830ea73
+##samtoolsCommand=samtools mpileup -u -t DP,DPR,DV,DP4,INFO/DPR,SP -f /data/archive/reference/Anopheles-arabiensis-Dongola_SCAFFOLDS_AaraD1.fa -r KB704451:0004153102-0004172483 huge_list_of_bam_files_removed
+##reference=file:///data/archive/reference/Anopheles-arabiensis-Dongola_SCAFFOLDS_AaraD1.fa
+##contig=<ID=KB704451,length=13998812>
+##ALT=<ID=X,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)">
+##FORMAT=<ID=PL, Number=G, Type=Integer, Description="List of Phred-scaled genotype likelihoods">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Number of high-quality bases">
+##FORMAT=<ID=DV,Number=1,Type=Integer,Description="Number of high-quality non-reference bases">
+##FORMAT=<ID=DPR,Number=R,Type=Integer,Description="Number of high-quality bases observed for each allele">
+##INFO=<ID=DPR,Number=R,Type=Integer,Description="Number of high-quality bases observed for each allele">
+##FORMAT=<ID=DP4, Number=4, Type=Integer, Description="Number of high-quality ref-fwd, ref-reverse, alt-fwd and alt-reverse bases">
+##FORMAT=<ID=SP,Number=1,Type=Integer,Description="Phred-scaled strand bias P-value">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Phred-scaled Genotype Quality">
+##FORMAT=<ID=GP,Number=G,Type=Float,Description="Phred-scaled genotype posterior probabilities">
+##INFO=<ID=ICB,Number=1,Type=Float,Description="Inbreeding Coefficient Binomial test (bigger is better)">
+##INFO=<ID=HOB,Number=1,Type=Float,Description="Bias in the number of HOMs number (smaller is better)">
+##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes for each ALT allele, in the same order as listed">
+##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
+##INFO=<ID=DP4,Number=4,Type=Integer,Description="Number of high-quality ref-forward , ref-reverse, alt-forward and alt-reverse bases">
+##INFO=<ID=MQ,Number=1,Type=Integer,Description="Average mapping quality">
+##bcftools_callVersion=1.0-55-gc661821+htslib-1.0-11-g830ea73
+##bcftools_callCommand=call -m -vM -f GQ,GP
+##SnpSiftVersion="SnpSift 3.6c (build 2014-05-20), by Pablo Cingolani"
+##SnpSiftCmd="SnpSift varType - "
+##INFO=<ID=VARTYPE, Number=A, Type=Flag, Description="Variant types {SNP,MNP,INS,DEL,Mixed}">
+##INFO=<ID=SNP, Number=0, Type=Flag, Description="Variant is a SNP">
+##INFO=<ID=MNP,Number=0,Type=Flag,Description="Variant is an MNP">
+##INFO=<ID=INS, Number=0, Type=Flag, Description="Variant is an insertion">
+##INFO=<ID=DEL,Number=0,Type=Flag,Description="Variant is an deletion">
+##INFO=<ID=MIXED,Number=0,Type=Flag,Description="Variant is mixture of INS/DEL/SNP/MNP">
+##INFO=<ID=HOM, Number=0,Type=Flag, Description="Variant is homozygous">
+##INFO=<ID=HET,Number=0,Type=Flag,Description="Variant is heterozygous">
+##INFO=<ID=VARTYPE,Number=A,Type=String,Description="Comma separated list of variant types. One per allele">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT LUPI059 MINE001 OKJ042 LUPI001 LUPI007 LUPI024 LUPI056 LUPI071 LUPI074 LUPI082 MINE040 MINE100 MINE101 MINE105 MINE111 OKJ017 OKJ045 OKJ070 SAGA066 SAGA107 SAGA131 SAGA133 SAGA134 SAGA141 2012L_LUPI_002 2012L_LUPI_015 2012L_LUPI_017 2012L_LUPI_018 2012L_LUPI_035 2012L_LUPI_062 2012L_LUPI_065 2012L_LUPI_077 2012L_LUPI_083 2012L_LUPI_116 2012L_LUPI_013 2012L_LUPI_041 2012L_LUPI_068 2012L_LUPI_096 2012L_LUPI_098 2012 [...]
+KB704451 4157846 . N A,C 167.0 . DP=10;VDB=1.17174e-06;SGB=1.26353;MQ0F=0;DPR=0,6,4;AC=10,4;AN=14;DP4=0,0,10,0;MQ=60;SNP;VARTYPE=SNP,SNP GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 1/2:74,23,14,57,0,54:4:4:0:0,0,4,0:0,3,1:144,56,16,90,0,57:16 1/2:26,26,26,3,3,0:1:1:0:0,0,1,0:0,0,1:95,58,28,36,2,3:3 ./.:0,0,0,0,0,0:0:0:0:0,0,0,0:0,0,0:0,0,0,0,0,0:0 ./.:0,0,0,0,0,0:0:0:0:0,0,0,0:0,0,0:0,0,0,0,0,0:0 ./.:0,0,0,0,0,0:0:0:0:0,0,0,0:0,0,0:0,0,0,0,0,0:0 ./.:0,0,0,0,0,0:0:0:0:0,0,0,0:0, [...]
+KB704451 4157870 . T C 275.0 . DP=243;VDB=0.00023935;SGB=29.4468;RPB=0.0368658;MQB=0.979612;MQSB=0.268441;BQB=0.99223;MQ0F=0;DPR=213,19;ICB=0.85092;HOB=0.0287274;AC=6;AN=118;DP4=201,12,19,1;MQ=53;SNP;VARTYPE=SNP GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/0:0,66,255:22:0:0:20,2,0,0:22,0:0,75,279:75 0/0:0,12,120:4:0:0:4,0,0,0:4,0:0,21,144:21 1/1:193,36,0:12:12:0:0,0,12,0:0,12:168,20,0:20 0/0:0,9,95:3:0:0:3,0,0,0:3,0:0,18,119:18 0/1:78,0,110:7:3:0:3,1,3,0:4,3:68,0,125:68 0/0: [...]
+KB704451 4157877 . G A 999.0 . DP=250;VDB=6.58963e-09;SGB=31.659;RPB=0.0227135;MQB=0.410318;MQSB=0.139343;BQB=0.0767891;MQ0F=0;DPR=188,48;ICB=0.990841;HOB=0.00761276;AC=17;AN=118;DP4=176,12,45,3;MQ=55;SNP;VARTYPE=SNP GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/1:159,0,202:22:9:0:12,1,8,1:13,9:154,0,212:127 0/0:0,12,120:4:0:0:4,0,0,0:4,0:0,16,134:16 0/0:0,51,207:17:0:0:17,0,0,0:17,0:0,55,221:55 0/0:0,9,98:3:0:0:3,0,0,0:3,0:0,13,112:13 0/1:123,0,61:8:5:0:3,0,4,1:3,5:118,0,71: [...]
+KB704451 4157907 . A C 278.0 . DP=295;VDB=0.241276;SGB=26.7514;RPB=0.676983;MQB=0.997838;MQSB=0.136536;BQB=0.45683;MQ0F=0;DPR=264,15;ICB=0.00518819;HOB=0.00237812;AC=4;AN=116;DP4=233,31,14,1;MQ=59;SNP;VARTYPE=SNP GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/0:0,90,255:30:0:0:25,5,0,0:30,0:0,101,283:101 0/0:0,30,201:10:0:0:9,1,0,0:10,0:0,41,229:41 0/1:157,0,188:18:8:0:10,0,7,1:10,8:145,0,205:127 0/1:75,0,90:5:2:0:2,1,2,0:3,2:63,0,107:63 0/0:0,30,201:10:0:0:9,1,0,0:10,0:0,41,22 [...]
+KB704451 4157909 . T G 278.0 . DP=295;VDB=0.184881;SGB=22.7413;RPB=0.646301;MQB=0.998034;MQSB=0.200514;BQB=0.321842;MQ0F=0;DPR=247,15;ICB=0.00558284;HOB=0.00255102;AC=4;AN=112;DP4=218,29,15,1;MQ=59;SNP;VARTYPE=SNP GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/0:0,87,255:29:0:0:24,5,0,0:29,0:0,97,282:97 0/0:0,27,183:9:0:0:9,0,0,0:9,0:0,37,210:37 0/1:156,0,167:19:8:0:11,0,7,1:11,8:145,0,183:127 0/1:75,0,107:5:2:0:2,1,2,0:3,2:64,0,123:64 0/0:0,27,191:9:0:0:8,1,0,0:9,0:0,37,218:37 [...]
+KB704451 4157927 . G A 4.88727 . DP=334;VDB=0.38;SGB=3.29913;RPB=0.454248;MQB=0.970588;MQSB=0.546099;BQB=0.215686;MQ0F=0;DPR=306,2;ICB=0.000310486;HOB=0.000153894;AC=1;AN=114;DP4=265,41,2,0;MQ=59;SNP;VARTYPE=SNP GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/0:0,105,255:35:0:0:31,4,0,0:35,0:0,122,295:122 0/0:0,45,255:15:0:0:14,1,0,0:15,0:0,62,295:62 0/0:0,60,255:20:0:0:17,3,0,0:20,0:0,77,295:77 0/0:0,21,242:7:0:0:6,1,0,0:7,0:0,38,282:38 0/0:0,24,207:8:0:0:6,2,0,0:8,0:0,41,247:41 [...]
+KB704451 4157938 . ATTT ATTTT 650.0 . INDEL;IDV=18;IMF=0.428571;DP=361;VDB=0.773794;SGB=32.6744;MQSB=0.993251;MQ0F=0.00831025;DPR=115,60;ICB=0.929833;HOB=0.0258;AC=23;AN=100;DP4=98,17,48,12;MQ=59;INS;VARTYPE=INS GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/1:124,0,7:19:16:0:3,0,13,3:3,16:123,0,13:13 0/1:14,3,0:1:1:0:0,0,1,0:0,1:12,1,5:4 0/0:0,9,55:3:0:0:3,0,0,0:3,0:0,9,62:9 0/0:0,21,146:7:0:0:5,2,0,0:7,0:0,21,153:21 0/0:0,18,126:6:0:0:4,2,0,0:6,0:0,18,133:18 0/0:0,6,56:2:0:0 [...]
+KB704451 4157940 . TTGTGTGTGTGTGT TTGTGTGTGTGTGTGTGT,TTTCTGTGTGTGTGTGT 999.0 . INDEL;IDV=7;IMF=0.5;DP=366;VDB=0.0431342;SGB=14.7456;MQSB=0.996953;MQ0F=0.010929;DPR=86,41,8;ICB=0.963728;HOB=0.02;AC=21,6;AN=90;DP4=70,16,39,10;MQ=58;INS;VARTYPE=INS,INS GT:PL:DP:DV:SP:DP4:DPR:GP:GQ 0/2:60,60,60,3,3,0:1:1:0:0,0,1,0:0,0,1:54,55,61,2,5,9:4 1/1:255,18,0,255,18,255:6:6:0:0,0,3,3:0,6,0:248,11,0,252,19,263:11 0/0:0,6,62,6,62,62:2:0:0:2,0,0,0:2,0,0:1,7,70,11,71,78:6 0/1:9,0,238, [...]
diff --git a/vcf/test/mixed-filtering.vcf b/vcf/test/mixed-filtering.vcf
new file mode 100644
index 0000000..f02e839
--- /dev/null
+++ b/vcf/test/mixed-filtering.vcf
@@ -0,0 +1,24 @@
+##fileformat=VCFv4.1
+##fileDate=20090805
+##source=myImputationProgramV3.1
+##reference=file:///seq/references/1000GenomesPilot-NCBI36.fasta
+##contig=<ID=20,length=62435964,assembly=B36,md5=f126cdf8a6e0c7f379d618ff66beb2da,species="Homo sapiens",taxonomy=x>
+##phasing=partial
+##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
+##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency">
+##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele">
+##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership, build 129">
+##INFO=<ID=H2,Number=0,Type=Flag,Description="HapMap2 membership">
+##FILTER=<ID=q10,Description="Quality below 10">
+##FILTER=<ID=s50,Description="Less than 50% of samples have data">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=HQ,Number=2,Type=Integer,Description="Haplotype Quality">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003
+20 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:.,.
+20 17330 . T A 3 q10 NS=3;DP=11;AF=0.017 GT:GQ:DP:HQ 0|0:49:3:58,50 0|1:3:5:65,3 0/0:41:3
+20 1110696 rs6040355 A G,T 67 PASS NS=2;DP=10;AF=0.333,0.667;AA=T;DB GT:GQ:DP:HQ 1|2:21:6:23,27 2|1:2:0:18,2 2/2:35:4
+20 1230237 . T . 47 . NS=3;DP=13;AA=T GT:GQ:DP:HQ 0|0:54:7:56,60 0|0:48:4:51,51 0/0:61:2
+20 1234567 microsat1 GTC G,GTCT 50 q10;q50 NS=3;DP=9;AA=G GT:GQ:DP 0/1:35:4 0/2:17:2 1/1:40:3
diff --git a/vcf/test/null_genotype_mono.vcf b/vcf/test/null_genotype_mono.vcf
new file mode 100644
index 0000000..529e407
--- /dev/null
+++ b/vcf/test/null_genotype_mono.vcf
@@ -0,0 +1,119 @@
+##fileformat=VCFv4.1
+##FORMAT=<ID=AD,Number=.,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth (reads with MQ=255 or with bad mates are filtered)">
+##FORMAT=<ID=GQ,Number=1,Type=Float,Description="Genotype Quality">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=PL,Number=G,Type=Integer,Description="Normalized, Phred-scaled likelihoods for genotypes as defined in the VCF specification">
+##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
+##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency, for each ALT allele, in the same order as listed">
+##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
+##INFO=<ID=BaseQRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt Vs. Ref base qualities">
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth; some reads may have been filtered">
+##INFO=<ID=DS,Number=0,Type=Flag,Description="Were any of the samples downsampled?">
+##INFO=<ID=Dels,Number=1,Type=Float,Description="Fraction of Reads Containing Spanning Deletions">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##INFO=<ID=HRun,Number=1,Type=Integer,Description="Largest Contiguous Homopolymer Run of Variant Allele In Either Direction">
+##INFO=<ID=HaplotypeScore,Number=1,Type=Float,Description="Consistency of the site with at most two segregating haplotypes">
+##INFO=<ID=InbreedingCoeff,Number=1,Type=Float,Description="Inbreeding coefficient as estimated from the genotype likelihoods per-sample when compared against the Hardy-Weinberg expectation">
+##INFO=<ID=MQ,Number=1,Type=Float,Description="RMS Mapping Quality">
+##INFO=<ID=MQ0,Number=1,Type=Integer,Description="Total Mapping Quality Zero Reads">
+##INFO=<ID=MQRankSum,Number=1,Type=Float,Description="Z-score From Wilcoxon rank sum test of Alt vs. Ref read mapping qualities">
+##INFO=<ID=QD,Number=1,Type=Float,Description="Variant Confidence/Quality by Depth">
+##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[np_control.bam] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[tests/read_chr.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL reference_sequence=/data/reference/ucsc/hg19/ucsc.hg19.fasta rodBind=[] nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=250 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQu [...]
+##contig=<ID=chr1,length=249250621,assembly=hg19>
+##contig=<ID=chr10,length=135534747,assembly=hg19>
+##contig=<ID=chr11,length=135006516,assembly=hg19>
+##contig=<ID=chr11_gl000202_random,length=40103,assembly=hg19>
+##contig=<ID=chr12,length=133851895,assembly=hg19>
+##contig=<ID=chr13,length=115169878,assembly=hg19>
+##contig=<ID=chr14,length=107349540,assembly=hg19>
+##contig=<ID=chr15,length=102531392,assembly=hg19>
+##contig=<ID=chr16,length=90354753,assembly=hg19>
+##contig=<ID=chr17,length=81195210,assembly=hg19>
+##contig=<ID=chr17_ctg5_hap1,length=1680828,assembly=hg19>
+##contig=<ID=chr17_gl000203_random,length=37498,assembly=hg19>
+##contig=<ID=chr17_gl000204_random,length=81310,assembly=hg19>
+##contig=<ID=chr17_gl000205_random,length=174588,assembly=hg19>
+##contig=<ID=chr17_gl000206_random,length=41001,assembly=hg19>
+##contig=<ID=chr18,length=78077248,assembly=hg19>
+##contig=<ID=chr18_gl000207_random,length=4262,assembly=hg19>
+##contig=<ID=chr19,length=59128983,assembly=hg19>
+##contig=<ID=chr19_gl000208_random,length=92689,assembly=hg19>
+##contig=<ID=chr19_gl000209_random,length=159169,assembly=hg19>
+##contig=<ID=chr1_gl000191_random,length=106433,assembly=hg19>
+##contig=<ID=chr1_gl000192_random,length=547496,assembly=hg19>
+##contig=<ID=chr2,length=243199373,assembly=hg19>
+##contig=<ID=chr20,length=63025520,assembly=hg19>
+##contig=<ID=chr21,length=48129895,assembly=hg19>
+##contig=<ID=chr21_gl000210_random,length=27682,assembly=hg19>
+##contig=<ID=chr22,length=51304566,assembly=hg19>
+##contig=<ID=chr3,length=198022430,assembly=hg19>
+##contig=<ID=chr4,length=191154276,assembly=hg19>
+##contig=<ID=chr4_ctg9_hap1,length=590426,assembly=hg19>
+##contig=<ID=chr4_gl000193_random,length=189789,assembly=hg19>
+##contig=<ID=chr4_gl000194_random,length=191469,assembly=hg19>
+##contig=<ID=chr5,length=180915260,assembly=hg19>
+##contig=<ID=chr6,length=171115067,assembly=hg19>
+##contig=<ID=chr6_apd_hap1,length=4622290,assembly=hg19>
+##contig=<ID=chr6_cox_hap2,length=4795371,assembly=hg19>
+##contig=<ID=chr6_dbb_hap3,length=4610396,assembly=hg19>
+##contig=<ID=chr6_mann_hap4,length=4683263,assembly=hg19>
+##contig=<ID=chr6_mcf_hap5,length=4833398,assembly=hg19>
+##contig=<ID=chr6_qbl_hap6,length=4611984,assembly=hg19>
+##contig=<ID=chr6_ssto_hap7,length=4928567,assembly=hg19>
+##contig=<ID=chr7,length=159138663,assembly=hg19>
+##contig=<ID=chr7_gl000195_random,length=182896,assembly=hg19>
+##contig=<ID=chr8,length=146364022,assembly=hg19>
+##contig=<ID=chr8_gl000196_random,length=38914,assembly=hg19>
+##contig=<ID=chr8_gl000197_random,length=37175,assembly=hg19>
+##contig=<ID=chr9,length=141213431,assembly=hg19>
+##contig=<ID=chr9_gl000198_random,length=90085,assembly=hg19>
+##contig=<ID=chr9_gl000199_random,length=169874,assembly=hg19>
+##contig=<ID=chr9_gl000200_random,length=187035,assembly=hg19>
+##contig=<ID=chr9_gl000201_random,length=36148,assembly=hg19>
+##contig=<ID=chrM,length=16571,assembly=hg19>
+##contig=<ID=chrUn_gl000211,length=166566,assembly=hg19>
+##contig=<ID=chrUn_gl000212,length=186858,assembly=hg19>
+##contig=<ID=chrUn_gl000213,length=164239,assembly=hg19>
+##contig=<ID=chrUn_gl000214,length=137718,assembly=hg19>
+##contig=<ID=chrUn_gl000215,length=172545,assembly=hg19>
+##contig=<ID=chrUn_gl000216,length=172294,assembly=hg19>
+##contig=<ID=chrUn_gl000217,length=172149,assembly=hg19>
+##contig=<ID=chrUn_gl000218,length=161147,assembly=hg19>
+##contig=<ID=chrUn_gl000219,length=179198,assembly=hg19>
+##contig=<ID=chrUn_gl000220,length=161802,assembly=hg19>
+##contig=<ID=chrUn_gl000221,length=155397,assembly=hg19>
+##contig=<ID=chrUn_gl000222,length=186861,assembly=hg19>
+##contig=<ID=chrUn_gl000223,length=180455,assembly=hg19>
+##contig=<ID=chrUn_gl000224,length=179693,assembly=hg19>
+##contig=<ID=chrUn_gl000225,length=211173,assembly=hg19>
+##contig=<ID=chrUn_gl000226,length=15008,assembly=hg19>
+##contig=<ID=chrUn_gl000227,length=128374,assembly=hg19>
+##contig=<ID=chrUn_gl000228,length=129120,assembly=hg19>
+##contig=<ID=chrUn_gl000229,length=19913,assembly=hg19>
+##contig=<ID=chrUn_gl000230,length=43691,assembly=hg19>
+##contig=<ID=chrUn_gl000231,length=27386,assembly=hg19>
+##contig=<ID=chrUn_gl000232,length=40652,assembly=hg19>
+##contig=<ID=chrUn_gl000233,length=45941,assembly=hg19>
+##contig=<ID=chrUn_gl000234,length=40531,assembly=hg19>
+##contig=<ID=chrUn_gl000235,length=34474,assembly=hg19>
+##contig=<ID=chrUn_gl000236,length=41934,assembly=hg19>
+##contig=<ID=chrUn_gl000237,length=45867,assembly=hg19>
+##contig=<ID=chrUn_gl000238,length=39939,assembly=hg19>
+##contig=<ID=chrUn_gl000239,length=33824,assembly=hg19>
+##contig=<ID=chrUn_gl000240,length=41933,assembly=hg19>
+##contig=<ID=chrUn_gl000241,length=42152,assembly=hg19>
+##contig=<ID=chrUn_gl000242,length=43523,assembly=hg19>
+##contig=<ID=chrUn_gl000243,length=43341,assembly=hg19>
+##contig=<ID=chrUn_gl000244,length=39929,assembly=hg19>
+##contig=<ID=chrUn_gl000245,length=36651,assembly=hg19>
+##contig=<ID=chrUn_gl000246,length=38154,assembly=hg19>
+##contig=<ID=chrUn_gl000247,length=36422,assembly=hg19>
+##contig=<ID=chrUn_gl000248,length=39786,assembly=hg19>
+##contig=<ID=chrUn_gl000249,length=38502,assembly=hg19>
+##contig=<ID=chrX,length=155270560,assembly=hg19>
+##contig=<ID=chrY,length=59373566,assembly=hg19>
+##reference=file:///data/reference/ucsc/hg19/ucsc.hg19.fasta
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA19239
+chr1 65312657 . G . . . . GT ./.
diff --git a/vcf/test/parse-meta-line.vcf b/vcf/test/parse-meta-line.vcf
new file mode 100644
index 0000000..e3a2611
--- /dev/null
+++ b/vcf/test/parse-meta-line.vcf
@@ -0,0 +1,6 @@
+##fileformat=VCFv4.1
+##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##MYFIELD=<ID=SomeField,Version=3.4-0-g7e26428,Date="Wed Oct 07 09:11:47 CEST 2015",Options="< 4 and > 3">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT Sample
+chr1 100 id1 G A . . NS=3 GT 0/1
diff --git a/vcf/test/prof.py b/vcf/test/prof.py
new file mode 100755
index 0000000..953d169
--- /dev/null
+++ b/vcf/test/prof.py
@@ -0,0 +1,33 @@
+import vcf as vcf
+import cProfile
+import timeit
+import pstats
+import sys
+
+def parse_1kg():
+ for line in vcf.Reader(filename='vcf/test/1kg.vcf.gz'):
+ pass
+
+if len(sys.argv) == 1:
+ sys.argv.append(None)
+
+if sys.argv[1] == 'profile':
+ cProfile.run('parse_1kg()', '1kg.prof')
+ p = pstats.Stats('1kg.prof')
+ p.strip_dirs().sort_stats('time').print_stats()
+
+elif sys.argv[1] == 'time':
+ n = 1
+ t = timeit.timeit('parse_1kg()', "from __main__ import parse_1kg", number=n)
+ print t/n
+
+elif sys.argv[1] == 'stat':
+ import statprof
+ statprof.start()
+ try:
+ parse_1kg()
+ finally:
+ statprof.stop()
+ statprof.display()
+else:
+ print 'prof.py profile/time'
diff --git a/vcf/test/samples-space.vcf b/vcf/test/samples-space.vcf
new file mode 100644
index 0000000..8c9bb9e
--- /dev/null
+++ b/vcf/test/samples-space.vcf
@@ -0,0 +1,10 @@
+##fileformat=VCFv4.0
+##FILTER=<ID=q10,Description="Quality below 10">
+##FILTER=<ID=s50,Description="Less than 50% of samples have data">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=HQ,Number=2,Type=Integer,Description="Haplotype Quality">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA 00001 NA 00002 NA 00003
+20 14370 rs6054257 G A 29 PASS . GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 ./.
+20 76766 rs6054257 C T 29 PASS . GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 ./.
diff --git a/vcf/test/samtools.vcf b/vcf/test/samtools.vcf
new file mode 100644
index 0000000..3698717
--- /dev/null
+++ b/vcf/test/samtools.vcf
@@ -0,0 +1,34 @@
+##fileformat=VCFv4.1
+##samtoolsVersion=0.1.16 (r963:234)
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Raw read depth">
+##INFO=<ID=DP4,Number=4,Type=Integer,Description="# high-quality ref-forward bases, ref-reverse, alt-forward and alt-reverse bases">
+##INFO=<ID=MQ,Number=1,Type=Integer,Description="Root-mean-square mapping quality of covering reads">
+##INFO=<ID=FQ,Number=1,Type=Float,Description="Phred probability of all samples being the same">
+##INFO=<ID=AF1,Number=1,Type=Float,Description="Max-likelihood estimate of the site allele frequency of the first ALT allele">
+##INFO=<ID=G3,Number=3,Type=Float,Description="ML estimate of genotype frequencies">
+##INFO=<ID=HWE,Number=1,Type=Float,Description="Chi^2 based HWE test P-value based on G3">
+##INFO=<ID=CI95,Number=2,Type=Float,Description="Equal-tail Bayesian credible interval of the site allele frequency at the 95% level">
+##INFO=<ID=PV4,Number=4,Type=Float,Description="P-values for strand bias, baseQ bias, mapQ bias and tail distance bias">
+##INFO=<ID=INDEL,Number=0,Type=Flag,Description="Indicates that the variant is an INDEL.">
+##INFO=<ID=PC2,Number=2,Type=Integer,Description="Phred probability of the nonRef allele frequency in group1 samples being larger (,smaller) than in group2.">
+##INFO=<ID=PCHI2,Number=1,Type=Float,Description="Posterior weighted chi^2 P-value for testing the association between group1 and group2 samples.">
+##INFO=<ID=QCHI2,Number=1,Type=Integer,Description="Phred scaled PCHI2.">
+##INFO=<ID=PR,Number=1,Type=Integer,Description="# permutations yielding a smaller PCHI2.">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=GL,Number=3,Type=Float,Description="Likelihoods for RR,RA,AA genotypes (R=ref,A=alt)">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="# high-quality bases">
+##FORMAT=<ID=SP,Number=1,Type=Integer,Description="Phred-scaled strand bias P-value">
+##FORMAT=<ID=PL,Number=-1,Type=Integer,Description="List of Phred-scaled genotype likelihoods, number of values is (#ALT+1)*(#ALT+2)/2">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT -
+chrX 2774478 . A G 61.3 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=60;FQ=-42 GT:PL:GQ 1/1:94,15,0:27
+chrX 2832661 . A T 29 . DP=25;AF1=0.5;CI95=0.5,0.5;DP4=14,1,6,1;MQ=56;FQ=32;PV4=1,0.00034,0.00019,1 GT:PL:GQ 0/1:59,0,144:62
+chrX 2832880 . AAT AATAT 109 . INDEL;DP=20;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,8;MQ=47;FQ=112;PV4=1,1,0.0069,0.091 GT:PL:GQ 0/1:147,0,172:99
+chrX 2832920 . TTAT TTATAT 85.5 . INDEL;DP=12;AF1=0.5;CI95=0.5,0.5;DP4=0,6,0,5;MQ=56;FQ=88.5;PV4=1,0.36,0.052,0.017 GT:PL:GQ 0/1:123,0,150:99
+chrX 2833534 . TTACGCCCT T 8.18 . INDEL;DP=15;AF1=0.5;CI95=0.5,0.5;DP4=10,0,2,0;MQ=60;FQ=10.8;PV4=1,0.0041,1,0.3 GT:PL:GQ 0/1:45,0,255:47
+chrX 2833580 . A G 80 . DP=20;AF1=0.5;CI95=0.5,0.5;DP4=10,2,7,1;MQ=58;FQ=83;PV4=1,1,0.06,1 GT:PL:GQ 0/1:110,0,141:99
+chr1 10363194 . cca cCAca 57.5 . INDEL;DP=19;AF1=0.5;CI95=0.5,0.5;DP4=16,0,3,0;MQ=59;FQ=60.5;PV4=1,1,1,0.0008 GT:PL:GQ 0/1:95,0,214:98
+chr1 11292952 . T A,C 41 . DP=17;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=57;FQ=-75 GT:PL:GQ 1/1:74,48,0,66,28,63:85
+chr1 38304491 . t tTTTTTTTTTTTTTTTTTTTTTT,tTTTTTTTTTTTTT,tTTTTTTT 16.3 . INDEL;DP=9;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=41;FQ=-40.5 GT:PL:GQ 1/1:105,56,50,54,0,51,98,45,44,95:10
+chr1 152195728 . ATTTTTTTTTTT ATTTTTTTTTT,ATTTTTTTTT 36.5 . INDEL;DP=39;AF1=1;CI95=1,1;DP4=1,1,12,19;MQ=59;FQ=-104;PV4=1,0.42,0.4,0.2 GT:PL:GQ 1/1:77,69,0,77,75,73:99
+chr1 152276149 . C T 134 . DP=30;AF1=0.5;CI95=0.5,0.5;DP4=2,7,8,11;MQ=33;FQ=45;PV4=0.42,0.23,0.33,1 GT:PL:GQ 0/1:164,0,72:75
diff --git a/vcf/test/string_as_flag.vcf b/vcf/test/string_as_flag.vcf
new file mode 100644
index 0000000..afa3b0d
--- /dev/null
+++ b/vcf/test/string_as_flag.vcf
@@ -0,0 +1,8 @@
+##fileformat=VCFv4.1
+##INFO=<ID=AB,Number=1,Type=String,Description="Alt Base">
+##INFO=<ID=CD,Number=.,Type=String,Description="Alt Base">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT test
+chr2 21 . A G . . GT .
+chr2 24 . G T . . AB GT .
+chr2 48 . C T . . CD GT .
+chr2 75 . T C . . AB;CD GT .
diff --git a/vcf/test/tb.vcf.gz b/vcf/test/tb.vcf.gz
new file mode 100644
index 0000000..e25e02b
Binary files /dev/null and b/vcf/test/tb.vcf.gz differ
diff --git a/vcf/test/tb.vcf.gz.tbi b/vcf/test/tb.vcf.gz.tbi
new file mode 100644
index 0000000..779964b
Binary files /dev/null and b/vcf/test/tb.vcf.gz.tbi differ
diff --git a/vcf/test/test_vcf.py b/vcf/test/test_vcf.py
new file mode 100644
index 0000000..efa633e
--- /dev/null
+++ b/vcf/test/test_vcf.py
@@ -0,0 +1,1039 @@
+from __future__ import print_function
+import unittest
+import doctest
+import os
+import commands
+import cPickle
+from StringIO import StringIO
+
+import vcf
+from vcf import utils
+
+suite = doctest.DocTestSuite(vcf)
+
+
+def fh(fname, mode='rt'):
+ return open(os.path.join(os.path.dirname(__file__), fname), mode)
+
+
+class TestVcfSpecs(unittest.TestCase):
+
+ def test_vcf_4_0(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ self.assertEqual(reader.metadata['fileformat'], 'VCFv4.0')
+
+ # test we can walk the file at least
+ for r in reader:
+
+ if r.POS == 1230237:
+ assert r.is_monomorphic
+ else:
+ assert not r.is_monomorphic
+
+ if 'AF' in r.INFO:
+ self.assertEqual(type(r.INFO['AF']), type([]))
+
+ for c in r:
+ assert c
+
+ # issue 19, in the example ref the GQ is length 1
+ if c.called:
+ self.assertEqual(type(c.data.GQ), type(1))
+ if 'HQ' in c.data and c.data.HQ is not None:
+ self.assertEqual(type(c.data.HQ), type([]))
+
+
+
+ def test_vcf_4_1(self):
+ reader = vcf.Reader(fh('example-4.1.vcf'))
+ self.assertEqual(reader.metadata['fileformat'], 'VCFv4.1')
+
+ # contigs were added in vcf4.1
+ self.assertEqual(reader.contigs['20'].length, 62435964)
+
+ # test we can walk the file at least
+ for r in reader:
+ for c in r:
+ assert c
+
+ def test_vcf_4_1_sv(self):
+ reader = vcf.Reader(fh('example-4.1-sv.vcf'))
+
+ assert 'SVLEN' in reader.infos
+ assert 'fileDate' in reader.metadata
+ assert 'DEL' in reader.alts
+
+ # test we can walk the file at least
+ for r in reader:
+ print(r)
+ for a in r.ALT:
+ print(a)
+ for c in r:
+ print(c)
+ assert c
+
+ def test_vcf_4_1_bnd(self):
+ reader = vcf.Reader(fh('example-4.1-bnd.vcf'))
+
+ # test we can walk the file at least
+ for r in reader:
+ print(r)
+ for a in r.ALT:
+ print(a)
+ if r.ID == "bnd1":
+ self.assertEqual(len(r.ALT), 1)
+ self.assertEqual(r.ALT[0].type, "BND")
+ self.assertEqual(r.ALT[0].chr, "2")
+ self.assertEqual(r.ALT[0].pos, 3)
+ self.assertEqual(r.ALT[0].orientation, False)
+ self.assertEqual(r.ALT[0].remoteOrientation, True)
+ self.assertEqual(r.ALT[0].connectingSequence, "T")
+ if r.ID == "bnd4":
+ self.assertEqual(len(r.ALT), 1)
+ self.assertEqual(r.ALT[0].type, "BND")
+ self.assertEqual(r.ALT[0].chr, "1")
+ self.assertEqual(r.ALT[0].pos, 2)
+ self.assertEqual(r.ALT[0].orientation, True)
+ self.assertEqual(r.ALT[0].remoteOrientation, False)
+ self.assertEqual(r.ALT[0].connectingSequence, "G")
+ for c in r:
+ print(c)
+ assert c
+
+class TestGatkOutput(unittest.TestCase):
+
+ filename = 'gatk.vcf'
+
+ samples = ['BLANK', 'NA12878', 'NA12891', 'NA12892',
+ 'NA19238', 'NA19239', 'NA19240']
+ formats = ['AD', 'DP', 'GQ', 'GT', 'PL']
+ infos = ['AC', 'AF', 'AN', 'BaseQRankSum', 'DB', 'DP', 'DS',
+ 'Dels', 'FS', 'HRun', 'HaplotypeScore', 'InbreedingCoeff',
+ 'MQ', 'MQ0', 'MQRankSum', 'QD', 'ReadPosRankSum']
+
+ n_calls = 37
+
+ def setUp(self):
+ self.reader = vcf.Reader(fh(self.filename))
+
+ def testSamples(self):
+ self.assertEqual(self.reader.samples, self.samples)
+
+ def testFormats(self):
+ self.assertEqual(set(self.reader.formats), set(self.formats))
+
+ def testInfos(self):
+ self.assertEqual(set(self.reader.infos), set(self.infos))
+
+
+ def testCalls(self):
+ n = 0
+
+ for site in self.reader:
+ n += 1
+ self.assertEqual(len(site.samples), len(self.samples))
+
+
+ # check sample name lookup
+ for s in self.samples:
+ assert site.genotype(s)
+
+ # check ordered access
+ self.assertEqual([x.sample for x in site.samples], self.samples)
+
+ self.assertEqual(n, self.n_calls)
+
+
+class TestFreebayesOutput(TestGatkOutput):
+
+ filename = 'freebayes.vcf'
+ formats = ['AO', 'DP', 'GL', 'GLE', 'GQ', 'GT', 'QA', 'QR', 'RO']
+ infos = ['AB', 'ABP', 'AC', 'AF', 'AN', 'AO', 'BVAR', 'CIGAR',
+ 'DB', 'DP', 'DPRA', 'EPP', 'EPPR', 'HWE', 'LEN', 'MEANALT',
+ 'NUMALT', 'RPP', 'MQMR', 'ODDS', 'MQM', 'PAIREDR', 'PAIRED',
+ 'SAP', 'XRM', 'RO', 'REPEAT', 'XRI', 'XAS', 'XAI', 'SRP',
+ 'XAM', 'XRS', 'RPPR', 'NS', 'RUN', 'CpG', 'TYPE']
+ n_calls = 104
+
+
+ def testParse(self):
+ reader = vcf.Reader(fh('freebayes.vcf'))
+ print(reader.samples)
+ self.assertEqual(len(reader.samples), 7)
+ n = 0
+ for r in reader:
+ n+=1
+ for x in r:
+ assert x
+ self.assertEqual(n, self.n_calls)
+
+class TestSamtoolsOutput(unittest.TestCase):
+
+ def testParse(self):
+ reader = vcf.Reader(fh('samtools.vcf'))
+
+ self.assertEqual(len(reader.samples), 1)
+ self.assertEqual(sum(1 for _ in reader), 11)
+
+
+class TestBcfToolsOutput(unittest.TestCase):
+ def testParse(self):
+ reader = vcf.Reader(fh('bcftools.vcf'))
+ self.assertEqual(len(reader.samples), 1)
+ for r in reader:
+ for s in r.samples:
+ s.phased
+
+
+class Test1kg(unittest.TestCase):
+
+ def testParse(self):
+ reader = vcf.Reader(fh('1kg.vcf.gz', 'rb'))
+
+ assert 'FORMAT' in reader._column_headers
+
+ self.assertEqual(len(reader.samples), 629)
+ for _ in reader:
+ pass
+
+ def test_issue_49(self):
+ """docstring for test_issue_49"""
+ reader = vcf.Reader(fh('issue_49.vcf', 'r'))
+
+ self.assertEqual(len(reader.samples), 0)
+ for _ in reader:
+ pass
+
+
+class Test1kgSites(unittest.TestCase):
+
+ def test_reader(self):
+ """The samples attribute should be the empty list."""
+ reader = vcf.Reader(fh('1kg.sites.vcf', 'r'))
+
+ assert 'FORMAT' not in reader._column_headers
+
+ self.assertEqual(reader.samples, [])
+ for record in reader:
+ self.assertEqual(record.samples, [])
+
+ def test_writer(self):
+ """FORMAT should not be written if not present in the template and no
+ extra tab character should be printed if there are no FORMAT fields."""
+ reader = vcf.Reader(fh('1kg.sites.vcf', 'r'))
+ out = StringIO()
+ writer = vcf.Writer(out, reader, lineterminator='\n')
+
+ for record in reader:
+ writer.write_record(record)
+ out.seek(0)
+ out_str = out.getvalue()
+ for line in out_str.split('\n'):
+ if line.startswith('##'):
+ continue
+ if line.startswith('#CHROM'):
+ assert 'FORMAT' not in line
+ assert not line.endswith('\t')
+
+
+class TestGoNL(unittest.TestCase):
+
+ def testParse(self):
+ reader = vcf.Reader(fh('gonl.chr20.release4.gtc.vcf'))
+ for _ in reader:
+ pass
+
+ def test_contig_line(self):
+ reader = vcf.Reader(fh('gonl.chr20.release4.gtc.vcf'))
+ self.assertEqual(reader.contigs['1'].length, 249250621)
+
+
+class TestInfoOrder(unittest.TestCase):
+
+ def _assert_order(self, definitions, fields):
+ """
+ Elements common to both lists should be in the same order. Elements
+ only in `fields` should be last and in alphabetical order.
+ """
+ used_definitions = [d for d in definitions if d in fields]
+ self.assertEqual(used_definitions, fields[:len(used_definitions)])
+ self.assertEqual(fields[len(used_definitions):],
+ sorted(fields[len(used_definitions):]))
+
+ def test_writer(self):
+ """
+ Order of INFO fields should be compatible with the order of their
+ definition in the header and undefined fields should be last and in
+ alphabetical order.
+ """
+ reader = vcf.Reader(fh('1kg.sites.vcf', 'r'))
+ out = StringIO()
+ writer = vcf.Writer(out, reader, lineterminator='\n')
+
+ for record in reader:
+ writer.write_record(record)
+ out.seek(0)
+ out_str = out.getvalue()
+
+ definitions = []
+ for line in out_str.split('\n'):
+ if line.startswith('##INFO='):
+ definitions.append(line.split('ID=')[1].split(',')[0])
+ if not line or line.startswith('#'):
+ continue
+ fields = [f.split('=')[0] for f in line.split('\t')[7].split(';')]
+ self._assert_order(definitions, fields)
+
+
+class TestInfoTypeCharacter(unittest.TestCase):
+ def test_parse(self):
+ reader = vcf.Reader(fh('info-type-character.vcf'))
+ record = next(reader)
+ self.assertEqual(record.INFO['FLOAT_1'], 123.456)
+ self.assertEqual(record.INFO['CHAR_1'], 'Y')
+ self.assertEqual(record.INFO['FLOAT_N'], [123.456])
+ self.assertEqual(record.INFO['CHAR_N'], ['Y'])
+
+ def test_write(self):
+ reader = vcf.Reader(fh('info-type-character.vcf'))
+ out = StringIO()
+ writer = vcf.Writer(out, reader)
+
+ records = list(reader)
+
+ for record in records:
+ writer.write_record(record)
+ out.seek(0)
+ reader2 = vcf.Reader(out)
+
+ for l, r in zip(records, reader2):
+ self.assertEquals(l.INFO, r.INFO)
+
+
+class TestGatkOutputWriter(unittest.TestCase):
+
+ def testWrite(self):
+
+ reader = vcf.Reader(fh('gatk.vcf'))
+ out = StringIO()
+ writer = vcf.Writer(out, reader)
+
+ records = list(reader)
+
+ for record in records:
+ writer.write_record(record)
+ out.seek(0)
+ out_str = out.getvalue()
+ for line in out_str.split("\n"):
+ if line.startswith("##contig"):
+ assert line.startswith('##contig=<'), "Found dictionary in contig line: {0}".format(line)
+ print (out_str)
+ reader2 = vcf.Reader(out)
+
+ self.assertEquals(reader.samples, reader2.samples)
+ self.assertEquals(reader.formats, reader2.formats)
+ self.assertEquals(reader.infos, reader2.infos)
+ self.assertEquals(reader.contigs, reader2.contigs)
+
+ for l, r in zip(records, reader2):
+ self.assertEquals(l.samples, r.samples)
+
+ # test for call data equality, since equality on the sample calls
+ # may not always mean their data are all equal
+ for l_call, r_call in zip(l.samples, r.samples):
+ self.assertEqual(l_call.data, r_call.data)
+
+
+class TestBcfToolsOutputWriter(unittest.TestCase):
+
+ def testWrite(self):
+
+ reader = vcf.Reader(fh('bcftools.vcf'))
+ out = StringIO()
+ writer = vcf.Writer(out, reader)
+
+ records = list(reader)
+
+ for record in records:
+ writer.write_record(record)
+ out.seek(0)
+ print (out.getvalue())
+ reader2 = vcf.Reader(out)
+
+ self.assertEquals(reader.samples, reader2.samples)
+ self.assertEquals(reader.formats, reader2.formats)
+ self.assertEquals(reader.infos, reader2.infos)
+
+ for l, r in zip(records, reader2):
+ self.assertEquals(l.samples, r.samples)
+
+ # test for call data equality, since equality on the sample calls
+ # may not always mean their data are all equal
+ for l_call, r_call in zip(l.samples, r.samples):
+ self.assertEqual(l_call.data, r_call.data)
+
+
+class TestWriterDictionaryMeta(unittest.TestCase):
+
+ def testWrite(self):
+
+ reader = vcf.Reader(fh('example-4.1-bnd.vcf'))
+ out = StringIO()
+ writer = vcf.Writer(out, reader)
+
+ records = list(reader)
+
+ for record in records:
+ writer.write_record(record)
+ out.seek(0)
+ out_str = out.getvalue()
+ for line in out_str.split("\n"):
+ if line.startswith("##PEDIGREE"):
+ self.assertEquals(line, '##PEDIGREE=<Derived="Tumor",Original="Germline">')
+ if line.startswith("##SAMPLE"):
+ assert line.startswith('##SAMPLE=<'), "Found dictionary in meta line: {0}".format(line)
+
+
+class TestSamplesSpace(unittest.TestCase):
+ filename = 'samples-space.vcf'
+ samples = ['NA 00001', 'NA 00002', 'NA 00003']
+ def test_samples(self):
+ self.reader = vcf.Reader(fh(self.filename), strict_whitespace=True)
+ self.assertEqual(self.reader.samples, self.samples)
+
+
+class TestMixedFiltering(unittest.TestCase):
+ filename = 'mixed-filtering.vcf'
+ def test_mixed_filtering(self):
+ """
+ Test mix of FILTER values (pass, filtered, no filtering).
+ """
+ reader = vcf.Reader(fh(self.filename))
+ self.assertEqual(next(reader).FILTER, [])
+ self.assertEqual(next(reader).FILTER, ['q10'])
+ self.assertEqual(next(reader).FILTER, [])
+ self.assertEqual(next(reader).FILTER, None)
+ self.assertEqual(next(reader).FILTER, ['q10', 'q50'])
+
+
+class TestRecord(unittest.TestCase):
+
+ def test_num_calls(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ num_calls = (var.num_hom_ref + var.num_hom_alt + \
+ var.num_het + var.num_unknown)
+ self.assertEqual(len(var.samples), num_calls)
+
+ def test_dunder_eq(self):
+ rec = vcf.Reader(fh('example-4.0.vcf')).next()
+ self.assertFalse(rec == None)
+ self.assertFalse(None == rec)
+
+ def test_call_rate(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ call_rate = var.call_rate
+ if var.POS == 14370:
+ self.assertEqual(3.0/3.0, call_rate)
+ if var.POS == 17330:
+ self.assertEqual(3.0/3.0, call_rate)
+ if var.POS == 1110696:
+ self.assertEqual(3.0/3.0, call_rate)
+ if var.POS == 1230237:
+ self.assertEqual(3.0/3.0, call_rate)
+ elif var.POS == 1234567:
+ self.assertEqual(2.0/3.0, call_rate)
+
+ def test_aaf(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ aaf = var.aaf
+ if var.POS == 14370:
+ self.assertEqual([3.0/6.0], aaf)
+ if var.POS == 17330:
+ self.assertEqual([1.0/6.0], aaf)
+ if var.POS == 1110696:
+ self.assertEqual([2.0/6.0, 4.0/6.0], aaf)
+ if var.POS == 1230237:
+ self.assertEqual([0.0/6.0], aaf)
+ elif var.POS == 1234567:
+ self.assertEqual([2.0/4.0, 1.0/4.0], aaf)
+
+ def test_pi(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ pi = var.nucl_diversity
+ if var.POS == 14370:
+ self.assertEqual(6.0/10.0, pi)
+ if var.POS == 17330:
+ self.assertEqual(1.0/3.0, pi)
+ if var.POS == 1110696:
+ self.assertEqual(None, pi)
+ if var.POS == 1230237:
+ self.assertEqual(0.0/6.0, pi)
+ elif var.POS == 1234567:
+ self.assertEqual(None, pi)
+
+ def test_heterozygosity(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ het = var.heterozygosity
+ if var.POS == 14370:
+ self.assertEqual(0.5, het)
+ if var.POS == 17330:
+ self.assertEqual(1-((1.0/6)**2 + (5.0/6)**2), het)
+ if var.POS == 1110696:
+ self.assertEqual(4.0/9.0, het)
+ if var.POS == 1230237:
+ self.assertEqual(0.0, het)
+ elif var.POS == 1234567:
+ self.assertEqual(5.0/8.0, het)
+
+ def test_is_snp(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for r in reader:
+ print(r)
+ for c in r:
+ print(c)
+ assert c
+ for var in reader:
+ is_snp = var.is_snp
+ if var.POS == 14370:
+ self.assertEqual(True, is_snp)
+ if var.POS == 17330:
+ self.assertEqual(True, is_snp)
+ if var.POS == 1110696:
+ self.assertEqual(True, is_snp)
+ if var.POS == 1230237:
+ self.assertEqual(False, is_snp)
+ elif var.POS == 1234567:
+ self.assertEqual(False, is_snp)
+
+ def test_is_indel(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ is_indel = var.is_indel
+ if var.POS == 14370:
+ self.assertEqual(False, is_indel)
+ if var.POS == 17330:
+ self.assertEqual(False, is_indel)
+ if var.POS == 1110696:
+ self.assertEqual(False, is_indel)
+ if var.POS == 1230237:
+ self.assertEqual(True, is_indel)
+ elif var.POS == 1234567:
+ self.assertEqual(True, is_indel)
+
+ def test_is_transition(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ is_trans = var.is_transition
+ if var.POS == 14370:
+ self.assertEqual(True, is_trans)
+ if var.POS == 17330:
+ self.assertEqual(False, is_trans)
+ if var.POS == 1110696:
+ self.assertEqual(False, is_trans)
+ if var.POS == 1230237:
+ self.assertEqual(False, is_trans)
+ elif var.POS == 1234567:
+ self.assertEqual(False, is_trans)
+
+ def test_is_deletion(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ is_del = var.is_deletion
+ if var.POS == 14370:
+ self.assertEqual(False, is_del)
+ if var.POS == 17330:
+ self.assertEqual(False, is_del)
+ if var.POS == 1110696:
+ self.assertEqual(False, is_del)
+ if var.POS == 1230237:
+ self.assertEqual(True, is_del)
+ elif var.POS == 1234567:
+ self.assertEqual(False, is_del)
+
+ def test_var_type(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ type = var.var_type
+ if var.POS == 14370:
+ self.assertEqual("snp", type)
+ if var.POS == 17330:
+ self.assertEqual("snp", type)
+ if var.POS == 1110696:
+ self.assertEqual("snp", type)
+ if var.POS == 1230237:
+ self.assertEqual("indel", type)
+ elif var.POS == 1234567:
+ self.assertEqual("indel", type)
+ # SV tests
+ reader = vcf.Reader(fh('example-4.1-sv.vcf'))
+ for var in reader:
+ type = var.var_type
+ if var.POS == 2827693:
+ self.assertEqual("sv", type)
+ if var.POS == 321682:
+ self.assertEqual("sv", type)
+ if var.POS == 14477084:
+ self.assertEqual("sv", type)
+ if var.POS == 9425916:
+ self.assertEqual("sv", type)
+ elif var.POS == 12665100:
+ self.assertEqual("sv", type)
+ elif var.POS == 18665128:
+ self.assertEqual("sv", type)
+
+
+ def test_var_subtype(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ subtype = var.var_subtype
+ if var.POS == 14370:
+ self.assertEqual("ts", subtype)
+ if var.POS == 17330:
+ self.assertEqual("tv", subtype)
+ if var.POS == 1110696:
+ self.assertEqual("unknown", subtype)
+ if var.POS == 1230237:
+ self.assertEqual("del", subtype)
+ elif var.POS == 1234567:
+ self.assertEqual("unknown", subtype)
+ # SV tests
+ reader = vcf.Reader(fh('example-4.1-sv.vcf'))
+ for var in reader:
+ subtype = var.var_subtype
+ if var.POS == 2827693:
+ self.assertEqual("DEL", subtype)
+ if var.POS == 321682:
+ self.assertEqual("DEL", subtype)
+ if var.POS == 14477084:
+ self.assertEqual("DEL:ME:ALU", subtype)
+ if var.POS == 9425916:
+ self.assertEqual("INS:ME:L1", subtype)
+ elif var.POS == 12665100:
+ self.assertEqual("DUP", subtype)
+ elif var.POS == 18665128:
+ self.assertEqual("DUP:TANDEM", subtype)
+
+ def test_is_sv(self):
+ reader = vcf.Reader(fh('example-4.1-sv.vcf'))
+ for var in reader:
+ is_sv = var.is_sv
+ if var.POS == 2827693:
+ self.assertEqual(True, is_sv)
+ if var.POS == 321682:
+ self.assertEqual(True, is_sv)
+ if var.POS == 14477084:
+ self.assertEqual(True, is_sv)
+ if var.POS == 9425916:
+ self.assertEqual(True, is_sv)
+ elif var.POS == 12665100:
+ self.assertEqual(True, is_sv)
+ elif var.POS == 18665128:
+ self.assertEqual(True, is_sv)
+
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ is_sv = var.is_sv
+ if var.POS == 14370:
+ self.assertEqual(False, is_sv)
+ if var.POS == 17330:
+ self.assertEqual(False, is_sv)
+ if var.POS == 1110696:
+ self.assertEqual(False, is_sv)
+ if var.POS == 1230237:
+ self.assertEqual(False, is_sv)
+ elif var.POS == 1234567:
+ self.assertEqual(False, is_sv)
+
+ def test_is_sv_precise(self):
+ reader = vcf.Reader(fh('example-4.1-sv.vcf'))
+ for var in reader:
+ is_precise = var.is_sv_precise
+ if var.POS == 2827693:
+ self.assertEqual(True, is_precise)
+ if var.POS == 321682:
+ self.assertEqual(False, is_precise)
+ if var.POS == 14477084:
+ self.assertEqual(False, is_precise)
+ if var.POS == 9425916:
+ self.assertEqual(False, is_precise)
+ elif var.POS == 12665100:
+ self.assertEqual(False, is_precise)
+ elif var.POS == 18665128:
+ self.assertEqual(False, is_precise)
+
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ is_precise = var.is_sv_precise
+ if var.POS == 14370:
+ self.assertEqual(False, is_precise)
+ if var.POS == 17330:
+ self.assertEqual(False, is_precise)
+ if var.POS == 1110696:
+ self.assertEqual(False, is_precise)
+ if var.POS == 1230237:
+ self.assertEqual(False, is_precise)
+ elif var.POS == 1234567:
+ self.assertEqual(False, is_precise)
+
+ def test_sv_end(self):
+ reader = vcf.Reader(fh('example-4.1-sv.vcf'))
+ for var in reader:
+ sv_end = var.sv_end
+ if var.POS == 2827693:
+ self.assertEqual(2827680, sv_end)
+ if var.POS == 321682:
+ self.assertEqual(321887, sv_end)
+ if var.POS == 14477084:
+ self.assertEqual(14477381, sv_end)
+ if var.POS == 9425916:
+ self.assertEqual(9425916, sv_end)
+ elif var.POS == 12665100:
+ self.assertEqual(12686200, sv_end)
+ elif var.POS == 18665128:
+ self.assertEqual(18665204, sv_end)
+
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ sv_end = var.sv_end
+ if var.POS == 14370:
+ self.assertEqual(None, sv_end)
+ if var.POS == 17330:
+ self.assertEqual(None, sv_end)
+ if var.POS == 1110696:
+ self.assertEqual(None, sv_end)
+ if var.POS == 1230237:
+ self.assertEqual(None, sv_end)
+ elif var.POS == 1234567:
+ self.assertEqual(None, sv_end)
+
+ def test_qual(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ qual = var.QUAL
+ qtype = type(qual)
+ if var.POS == 14370:
+ expected = 29
+ if var.POS == 17330:
+ expected = 3.0
+ if var.POS == 1110696:
+ expected = 1e+03
+ if var.POS == 1230237:
+ expected = 47
+ elif var.POS == 1234567:
+ expected = None
+ self.assertEqual(expected, qual)
+ self.assertEqual(type(expected), qtype)
+
+ def test_info_multiple_values(self):
+ reader = vcf.Reader(fh('example-4.1-info-multiple-values.vcf'))
+ var = reader.next()
+ # check Float type INFO field with multiple values
+ expected = [19.3, 47.4, 14.0]
+ actual = var.INFO['RepeatCopies']
+ self.assertEqual(expected, actual)
+ # check Integer type INFO field with multiple values
+ expected = [42, 14, 56]
+ actual = var.INFO['RepeatSize']
+ self.assertEqual(expected, actual)
+ # check String type INFO field with multiple values
+ expected = ['TCTTATCTTCTTACTTTTCATTCCTTACTCTTACTTACTTAC', 'TTACTCTTACTTAC', 'TTACTCTTACTTACTTACTCTTACTTACTTACTCTTACTTACTTACTCTTATCTTC']
+ actual = var.INFO['RepeatConsensus']
+ self.assertEqual(expected, actual)
+
+ def test_pickle(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ self.assertEqual(cPickle.loads(cPickle.dumps(var)), var)
+
+
+class TestCall(unittest.TestCase):
+
+ def test_dunder_eq(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ var = reader.next()
+ example_call = var.samples[0]
+ self.assertFalse(example_call == None)
+ self.assertFalse(None == example_call)
+
+ def test_phased(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ phases = [s.phased for s in var.samples]
+ if var.POS == 14370:
+ self.assertEqual([True, True, False], phases)
+ if var.POS == 17330:
+ self.assertEqual([True, True, False], phases)
+ if var.POS == 1110696:
+ self.assertEqual([True, True, False], phases)
+ if var.POS == 1230237:
+ self.assertEqual([True, True, False], phases)
+ elif var.POS == 1234567:
+ self.assertEqual([False, False, False], phases)
+
+ def test_gt_bases(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ gt_bases = [s.gt_bases for s in var.samples]
+ if var.POS == 14370:
+ self.assertEqual(['G|G', 'A|G', 'A/A'], gt_bases)
+ elif var.POS == 17330:
+ self.assertEqual(['T|T', 'T|A', 'T/T'], gt_bases)
+ elif var.POS == 1110696:
+ self.assertEqual(['G|T', 'T|G', 'T/T'], gt_bases)
+ elif var.POS == 1230237:
+ self.assertEqual(['T|T', 'T|T', 'T/T'], gt_bases)
+ elif var.POS == 1234567:
+ self.assertEqual([None, 'GTCT/GTACT', 'G/G'], gt_bases)
+
+ def test_gt_types(self):
+ reader = vcf.Reader(fh('example-4.0.vcf'))
+ for var in reader:
+ for s in var:
+ print(s.data)
+ gt_types = [s.gt_type for s in var.samples]
+ if var.POS == 14370:
+ self.assertEqual([0,1,2], gt_types)
+ elif var.POS == 17330:
+ self.assertEqual([0,1,0], gt_types)
+ elif var.POS == 1110696:
+ self.assertEqual([1,1,2], gt_types)
+ elif var.POS == 1230237:
+ self.assertEqual([0,0,0], gt_types)
+ elif var.POS == 1234567:
+ self.assertEqual([None,1,2], gt_types)
+
+
+class TestTabix(unittest.TestCase):
+
+ def setUp(self):
+ self.reader = vcf.Reader(fh('tb.vcf.gz', 'rb'))
+
+ self.run = vcf.parser.pysam is not None
+
+
+ def testFetchRange(self):
+ if not self.run:
+ return
+ lines = list(self.reader.fetch('20', 14370, 14370))
+ self.assertEquals(len(lines), 1)
+ self.assertEqual(lines[0].POS, 14370)
+
+ lines = list(self.reader.fetch('20', 14370, 17330))
+ self.assertEquals(len(lines), 2)
+ self.assertEqual(lines[0].POS, 14370)
+ self.assertEqual(lines[1].POS, 17330)
+
+
+ lines = list(self.reader.fetch('20', 1110695, 1234567))
+ self.assertEquals(len(lines), 3)
+
+ def testFetchSite(self):
+ if not self.run:
+ return
+ site = self.reader.fetch('20', 14370)
+ self.assertEqual(site.POS, 14370)
+
+ site = self.reader.fetch('20', 14369)
+ assert site is None
+
+
+
+
+class TestOpenMethods(unittest.TestCase):
+
+ samples = 'NA00001 NA00002 NA00003'.split()
+
+ def fp(self, fname):
+ return os.path.join(os.path.dirname(__file__), fname)
+
+
+ def testOpenFilehandle(self):
+ r = vcf.Reader(fh('example-4.0.vcf'))
+ self.assertEqual(self.samples, r.samples)
+ self.assertEqual('example-4.0.vcf', os.path.split(r.filename)[1])
+
+ def testOpenFilename(self):
+ r = vcf.Reader(filename=self.fp('example-4.0.vcf'))
+ self.assertEqual(self.samples, r.samples)
+
+ def testOpenFilehandleGzipped(self):
+ r = vcf.Reader(fh('tb.vcf.gz', 'rb'))
+ self.assertEqual(self.samples, r.samples)
+
+ def testOpenFilenameGzipped(self):
+ r = vcf.Reader(filename=self.fp('tb.vcf.gz'))
+ self.assertEqual(self.samples, r.samples)
+
+
+class TestFilter(unittest.TestCase):
+
+
+ def testApplyFilter(self):
+ # FIXME: broken with distribute
+ return
+ s, out = commands.getstatusoutput('python scripts/vcf_filter.py --site-quality 30 test/example-4.0.vcf sq')
+ #print(out)
+ self.assertEqual(s, 0)
+ buf = StringIO()
+ buf.write(out)
+ buf.seek(0)
+
+ print(buf.getvalue())
+ reader = vcf.Reader(buf)
+
+
+ # check filter got into output file
+ assert 'sq30' in reader.filters
+
+ print(reader.filters)
+
+ # check sites were filtered
+ n = 0
+ for r in reader:
+ if r.QUAL < 30:
+ assert 'sq30' in r.FILTER
+ n += 1
+ else:
+ assert 'sq30' not in r.FILTER
+ self.assertEqual(n, 2)
+
+
+ def testApplyMultipleFilters(self):
+ # FIXME: broken with distribute
+ return
+ s, out = commands.getstatusoutput('python scripts/vcf_filter.py --site-quality 30 '
+ '--genotype-quality 50 test/example-4.0.vcf sq mgq')
+ self.assertEqual(s, 0)
+ #print(out)
+ buf = StringIO()
+ buf.write(out)
+ buf.seek(0)
+ reader = vcf.Reader(buf)
+
+ print(reader.filters)
+
+ assert 'mgq50' in reader.filters
+ assert 'sq30' in reader.filters
+
+
+class TestRegression(unittest.TestCase):
+
+ def test_issue_16(self):
+ reader = vcf.Reader(fh('issue-16.vcf'))
+ n = reader.next()
+ assert n.QUAL == None
+
+ def test_null_mono(self):
+ # null qualities were written as blank, causing subsequent parse to fail
+ print(os.path.abspath(os.path.join(os.path.dirname(__file__), 'null_genotype_mono.vcf') ))
+ p = vcf.Reader(fh('null_genotype_mono.vcf'))
+ assert p.samples
+ out = StringIO()
+ writer = vcf.Writer(out, p)
+ for record in p:
+ writer.write_record(record)
+ out.seek(0)
+ print(out.getvalue())
+ p2 = vcf.Reader(out)
+ rec = p2.next()
+ assert rec.samples
+
+
+class TestUtils(unittest.TestCase):
+
+ def test_walk(self):
+ # easy case: all same sites
+ reader1 = vcf.Reader(fh('example-4.0.vcf'))
+ reader2 = vcf.Reader(fh('example-4.0.vcf'))
+ reader3 = vcf.Reader(fh('example-4.0.vcf'))
+
+ n = 0
+ for x in utils.walk_together(reader1, reader2, reader3):
+ self.assertEqual(len(x), 3)
+ self.assertEqual(x[0], x[1])
+ self.assertEqual(x[1], x[2])
+ n+= 1
+ self.assertEqual(n, 5)
+
+ # artificial case 2 from the left, 2 from the right, 2 together, 1 from the right, 1 from the left
+ expected = 'llrrttrl'
+ reader1 = vcf.Reader(fh('walk_left.vcf'))
+ reader2 = vcf.Reader(fh('example-4.0.vcf'))
+
+ for ex, recs in zip(expected, utils.walk_together(reader1, reader2)):
+ if ex == 'l':
+ assert recs[0] is not None
+ assert recs[1] is None
+ if ex == 'r':
+ assert recs[1] is not None
+ assert recs[0] is None
+ if ex == 't':
+ assert recs[0] is not None
+ assert recs[1] is not None
+
+ # test files with many chromosomes, set 'vcf_record_sort_key' to define chromosome order
+ chr_order = map(str, range(1, 30)) + ['X', 'Y', 'M']
+ get_key = lambda r: (chr_order.index(r.CHROM.replace('chr','')), r.POS)
+ reader1 = vcf.Reader(fh('issue-140-file1.vcf'))
+ reader2 = vcf.Reader(fh('issue-140-file2.vcf'))
+ reader3 = vcf.Reader(fh('issue-140-file3.vcf'))
+ expected = "66642577752767662466" # each char is an integer bit flag - like file permissions
+ for ex, recs in zip(expected, utils.walk_together(reader1, reader2, reader3, vcf_record_sort_key = get_key)):
+ ex = int(ex)
+ for i, flag in enumerate([0x4, 0x2, 0x1]):
+ if ex & flag:
+ self.assertNotEqual(recs[i], None)
+ else:
+ self.assertEqual(recs[i], None)
+
+ def test_trim(self):
+ tests = [('TAA GAA', 'T G'),
+ ('TA TA', 'T T'),
+ ('AGTTTTTA AGTTTA', 'AGTT AG'),
+ ('TATATATA TATATA', 'TAT T'),
+ ('TATATA TATATATA', 'T TAT'),
+ ('ACCCCCCC ACCCCCCCCCC ACCCCCCCCC ACCCCCCCCCCC', 'A ACCC ACC ACCCC')]
+ for sequences, expected in tests:
+ self.assertEqual(utils.trim_common_suffix(*sequences.split()),
+ expected.split())
+
+
+
+class TestGATKMeta(unittest.TestCase):
+
+ def test_meta(self):
+ # expect no exceptions raised
+ reader = vcf.Reader(fh('gatk_26_meta.vcf'))
+ assert 'GATKCommandLine' in reader.metadata
+ self.assertEqual(reader.metadata['GATKCommandLine'][0]['CommandLineOptions'], '"analysis_type=LeftAlignAndTrimVariants"')
+ self.assertEqual(reader.metadata['GATKCommandLine'][1]['CommandLineOptions'], '"analysis_type=VariantAnnotator annotation=[HomopolymerRun, VariantType, TandemRepeatAnnotator]"')
+
+
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestVcfSpecs))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestGatkOutput))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestFreebayesOutput))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestSamtoolsOutput))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestBcfToolsOutput))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(Test1kg))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(Test1kgSites))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestGoNL))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestInfoOrder))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestInfoTypeCharacter))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestGatkOutputWriter))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestBcfToolsOutputWriter))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestWriterDictionaryMeta))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestSamplesSpace))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestMixedFiltering))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestRecord))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestCall))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestTabix))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestOpenMethods))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestFilter))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestRegression))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestUtils))
+suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestGATKMeta))
diff --git a/vcf/test/uncalled_genotypes.vcf b/vcf/test/uncalled_genotypes.vcf
new file mode 100644
index 0000000..2032097
--- /dev/null
+++ b/vcf/test/uncalled_genotypes.vcf
@@ -0,0 +1,7 @@
+##fileformat=VCFv4.2
+##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT AB00001 AB00002 AB00003
+20 14370 rs6054257 G A 29 PASS NS=3 GT 0|0 ./. 1/1
+20 17330 . T A 3 q10 NS=3 GT ././. 0|1 0/0
+20 1234567 microsat1 GTC G,GTCT 50 PASS NS=3 GT 0/1 0/2 .
diff --git a/vcf/test/walk_left.vcf b/vcf/test/walk_left.vcf
new file mode 100644
index 0000000..c910432
--- /dev/null
+++ b/vcf/test/walk_left.vcf
@@ -0,0 +1,24 @@
+##fileformat=VCFv4.0
+##fileDate=20090805
+##source=myImputationProgramV3.1
+##reference=1000GenomesPilot-NCBI36
+##phasing=partial
+##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
+##INFO=<ID=AF,Number=.,Type=Float,Description="Allele Frequency">
+##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele">
+##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership, build 129">
+##INFO=<ID=H2,Number=0,Type=Flag,Description="HapMap2 membership">
+##INFO=<ID=AC,Number=A,Type=Integer,Description="Total number of alternate alleles in called genotypes">
+##FILTER=<ID=q10,Description="Quality below 10">
+##FILTER=<ID=s50,Description="Less than 50% of samples have data">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=HQ,Number=2,Type=Integer,Description="Haplotype Quality">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003
+19 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:.,.
+19 17330 . T A 3 q10 NS=3;DP=11;AF=0.017 GT:GQ:DP:HQ 0|0:49:3:58,50 0|1:3:5:65,3 0/0:41:3:65,3
+20 1110696 rs6040355 A G,T 67 PASS NS=2;DP=10;AF=0.333,0.667;AA=T;DB GT:GQ:DP:HQ 1|2:21:6:23,27 2|1:2:0:18,2 2/2:35:4:65,4
+20 1230237 . T . 47 PASS NS=3;DP=13;AA=T GT:GQ:DP:HQ 0|0:54:7:56,60 0|0:48:4:51,51 0/0:61:2:65,3
+21 1234567 microsat1 GTCT G,GTACT 50 PASS NS=3;DP=9;AA=G GT:GQ:DP ./.:35:4 0/2:17:2 1/1:40:3
diff --git a/vcf/test/walk_refcall.vcf b/vcf/test/walk_refcall.vcf
new file mode 100644
index 0000000..e93aeff
--- /dev/null
+++ b/vcf/test/walk_refcall.vcf
@@ -0,0 +1,22 @@
+##fileformat=VCFv4.0
+##fileDate=20090805
+##source=myImputationProgramV3.1
+##reference=1000GenomesPilot-NCBI36
+##phasing=partial
+##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
+##INFO=<ID=AF,Number=.,Type=Float,Description="Allele Frequency">
+##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele">
+##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership, build 129">
+##INFO=<ID=H2,Number=0,Type=Flag,Description="HapMap2 membership">
+##FILTER=<ID=q10,Description="Quality below 10">
+##FILTER=<ID=s50,Description="Less than 50% of samples have data">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=HQ,Number=2,Type=Integer,Description="Haplotype Quality">
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003
+20 14370 rs6054257 G . 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 0|0:48:8:51,51 0/0:43:5:.,.
+20 17330 . T . 3.0 q10 NS=3;DP=11;AF=0.017 GT:GQ:DP:HQ 0|0:49:3:58,50 0|0:3:5:65,3 0/0:41:3
+20 1110696 rs6040355 A . 1e+03 PASS NS=2;DP=10;AF=0.333,0.667;AA=T;DB GT:GQ:DP:HQ 0|0:21:6:23,27 0|0:2:0:18,2 0/0:35:4
+20 1230237 . T . 47 PASS NS=3;DP=13;AA=T GT:GQ:DP:HQ 0|0:54:7:56,60 0|0:48:4:51,51 0/0:61:2
diff --git a/vcf/utils.py b/vcf/utils.py
new file mode 100644
index 0000000..456e5fa
--- /dev/null
+++ b/vcf/utils.py
@@ -0,0 +1,86 @@
+"""
+Utilities for VCF files.
+"""
+
+def walk_together(*readers, **kwargs):
+ """
+ Simultaneously iteratate over two or more VCF readers. For each
+ genomic position with a variant, return a list of size equal to the number
+ of VCF readers. This list contains the VCF record from readers that have
+ this variant, and None for readers that don't have it.
+ The caller must make sure that inputs are sorted in the same way and use the
+ same reference otherwise behaviour is undefined.
+
+ Args:
+ vcf_record_sort_key: function that takes a VCF record and returns a
+ tuple that can be used as a key for comparing and sorting VCF
+ records across all readers. This tuple defines what it means for two
+ variants to be equal (eg. whether it's only their position or also
+ their allele values), and implicitly determines the chromosome
+ ordering since the tuple's 1st element is typically the chromosome
+ name (or calculated from it).
+ """
+ if 'vcf_record_sort_key' in kwargs:
+ get_key = kwargs['vcf_record_sort_key']
+ else:
+ get_key = lambda r: (r.CHROM, r.POS) #, r.REF, r.ALT)
+
+ nexts = []
+ for reader in readers:
+ try:
+ nexts.append(reader.next())
+ except StopIteration:
+ nexts.append(None)
+
+ min_k = (None,) # keep track of the previous min key's contig
+ while any([r is not None for r in nexts]):
+ next_idx_to_k = dict(
+ (i, get_key(r)) for i, r in enumerate(nexts) if r is not None)
+ keys_with_prev_contig = [
+ k for k in next_idx_to_k.values() if k[0] == min_k[0]]
+
+ if any(keys_with_prev_contig):
+ min_k = min(keys_with_prev_contig) # finish previous contig
+ else:
+ min_k = min(next_idx_to_k.values()) # move on to next contig
+
+ min_k_idxs = set([i for i, k in next_idx_to_k.items() if k == min_k])
+ yield [nexts[i] if i in min_k_idxs else None for i in range(len(nexts))]
+
+ for i in min_k_idxs:
+ try:
+ nexts[i] = readers[i].next()
+ except StopIteration:
+ nexts[i] = None
+
+
+def trim_common_suffix(*sequences):
+ """
+ Trim a list of sequences by removing the longest common suffix while
+ leaving all of them at least one character in length.
+
+ Standard convention with VCF is to place an indel at the left-most
+ position, but some tools add additional context to the right of the
+ sequences (e.g. samtools). These common suffixes are undesirable when
+ comparing variants, for example in variant databases.
+
+ >>> trim_common_suffix('TATATATA', 'TATATA')
+ ['TAT', 'T']
+
+ >>> trim_common_suffix('ACCCCC', 'ACCCCCCCC', 'ACCCCCCC', 'ACCCCCCCCC')
+ ['A', 'ACCC', 'ACC', 'ACCCC']
+
+ """
+ if not sequences:
+ return []
+ reverses = [seq[::-1] for seq in sequences]
+ rev_min = min(reverses)
+ rev_max = max(reverses)
+ if len(rev_min) < 2:
+ return sequences
+ for i, c in enumerate(rev_min[:-1]):
+ if c != rev_max[i]:
+ if i == 0:
+ return sequences
+ return [seq[:-i] for seq in sequences]
+ return [seq[:-(i + 1)] for seq in sequences]
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/python-pyvcf.git
More information about the debian-med-commit
mailing list